C语言程序设计学生成绩记录簿(35页).doc
-课程实验报告课程名称C语言程序设计班级13新能源2班实验日期2013年8月1号姓名许鑫学号130370236实验成绩实验名称学生成绩记录簿系统实验题目描述本程序是非数值计算型算法设计,我设计出了学生成绩记录簿系统的基本功能,并设计了简单的界面。本程序主要考察对自定义函数的熟悉程度,本程序主要使用的是链表的相关操作,包括结构体链表的创建、输入、输出、查找、删除等。我设计的这个成绩记录簿系统也初步实现了学生成绩信息的显示、输入、删除、查找等必要的功能。 1.建立一个主界面 2.用switch语句进行分类讨论 3.分别进入录入,查询,删除,等子函数。 4.将子函数与主函数相连即可。该程序可以建立学生的成绩记录。可以方便老师和同学方便的查阅成绩;这个程序有录入和删除的功能; 还可以求出平均成绩,并排序成绩记录簿中记录以下数据:学号、姓名、课程编号、课程名称、成绩、学分 添加成绩:需要输入学生的学号或姓名、课程编号及成绩,如已有该门课程成绩给出提示; 查询(班级或个人)成绩: 查询个人成绩:以学号或姓名作为关键字,可查询一个学生的所有成绩,和已完成的总学分。 查询班级成绩:以课程编号为关键字,成绩表后面要统计平均分、及格率及全班同学不同课程在不同分数段分布的人数及百分比。拓展功能: a) 程序启动时先从文件读入数据,如果文件中没有数据则给出提示; b) 每次修改的数据写入文件实验环境以自己的电脑为主要的实验平台,运用Visual C+ 6.0这个软件进行反复的编写实验。实验界面截图1、开始时2、添加3、查询4、查询成绩5、写文本6、读取算法描述及实验步骤主程序提供一个界面,允许用户选择。使用switch语句,用时直接输入数字即可。增加函数,功能是插入学生成绩。使用一个无穷循环,直到录入”n”时结束。删除函数,功能是删除,分为两步,先找后删。找,用strcmp函数 来做如果找到记录i值,反之记为-1;删除可以从i项开始将数组的后一项赋值给前一项。前一项自动被删掉。这样完成删除。查询函数与之类似,将删除改为输出即可;求平均值函数与查询类似只是输出时只输出平均值而已。按平均值排序只要加一个排序函数即可。退出函数什么都不写,即可。程序流程图查询成绩添加成绩 添加学生成绩添加课程编号添加学生姓名添加学生学号查询班级成绩查询学生成绩查询班级成绩查询学生成绩课程编号学号查询姓名查询调试过程及实验结果总结经过一个多星期的编译原理课程设计,在我的努力下,顺利完成该课程设计。通过该课程设计,掌握了编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程及其相关的技术,对课本上的知识也有了更深的理解。老师常说,课本上的知识是机械的,表面的,要学会去运用,要举一反三。现在终于深刻的了解了这句话。经过这次的课程设计,发现书本上很深奥的知识变的更为简单,同样,对实验原理也了有更深的理解。知道和理解了该理论在计算机中是怎样执行的, 对该理论在实践中的应用有深刻的理解 。通过该课程设计,把死板的课本知识变得生动有趣,激发了学习的积极性。能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,注意指针,将不必要的命令去除。除了课堂外,课程设计是最能学到东西的,最考验人的。在做课程设计的这段时间,时刻都感到自己学的知识有多么的贫瘠。经过这次课程设计,让我对C+这门语言有了更深的认识,操作能力有了提高要想是写出的代码能运行,需要耐心细心,毅力以及充沛的体力。只有经过多次编辑,多次编译,再多次运行,才能编写出更好的程序,有时候需要多次的更正才能达到所要的运行结果。附录#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX 1000 struct Lesson char LessonName100; char LessonNumber100; int LessonMark; float LessonCredit;struct Student char Name100; char Number100; int LessonCount; struct Lesson L100;struct Student SMAX;int StudentCount = 0; void PrintInterface(); int Student_Insert(); int Student_Delete(); void Student_Select();void Class_Select();void WriteFile(); void ReadFile(); int main() int n; PrintInterface(); scanf("%d", &n); void PrintInterface() int n;while (1) printf("n -欢迎使用学生成绩记录簿系统- "); printf("n| 1、添加 |n"); printf("n| 2、删除 |n"); printf("n| 3、查学生成绩 |n"); printf("n| 4、查班成绩表 |n"); printf("n| 5、写入文本文件 |n"); printf("n| 6、读取文本文件 |n"); printf("n| 0、退出 |n"); printf("n - "); printf("n选择操作:"); scanf("%d",&n); switch(n) case 1: if (Student_Insert() printf("n添加成功.回车继续n"); else printf("n添加失败.回车继续n"); break; case 2: Student_Delete(); break; case 3: Student_Select(); break; case 4: Class_Select(); break; case 5: WriteFile(); break; case 6: ReadFile(); break; case 0: exit(1); break; default: printf("无此功能,请重新选择,按回车确定n"); return 0;int Student_Insert() int i,j,n; printf("n请输入所添加的学生人数:"); scanf("%d", &n); if (StudentCount + n >= MAX) return 0; for (i = StudentCount; i < StudentCount + n; +i) printf("nt第%d个学生:n", i - StudentCount + 1); printf("nt学生学号:"); scanf("%s", &Si.Number);if(strlen(Si.Number)!=8) printf("输入错误,请重新输入"); return 0; printf("nt学生姓名:"); scanf("%s", Si.Name); printf("nt该学生所修课程数:"); scanf("%d", &Si.LessonCount); for (j = 0; j < Si.LessonCount; +j) printf("nt第%d门课:n", j + 1); printf("ntt课程编号:"); scanf("%s", Si.Lj.LessonNumber);if(strlen(Si.Lj.LessonNumber)!=5) printf("输入错误,请重新输入!"); return 0; printf("ntt课程名称:"); scanf("%s",Si.Lj.LessonName); printf("ntt课程成绩:"); scanf("%d", &Si.Lj.LessonMark); if(Si.Lj.LessonMark<0 | Si.Lj.LessonMark>100) printf("输入错误,请重新输入!"); return 0; printf("ntt课程学分:"); scanf("%f", &Si.Lj.LessonCredit);if(Si.Lj.LessonCredit<1 | Si.Lj.LessonCredit>5) printf("输入错误,请重新输入!"); return 0; if (Si.Lj.LessonMark < 60) Si.Lj.LessonCredit = 0; StudentCount += n ; return 1; int Student_Delete() char a100;char b100; int i, j; printf("n删除学生:n"); printf("n学生姓名:"); scanf("%s",a); printf("n学生学号:"); scanf("%s",b); if(strlen(b)!=8) printf("输入错误请重新输入");return 0; for (i = 0; i < StudentCount; i+) if (0=strcmp(Si.Name, a) && 0=strcmp(Si.Number, b) printf("n找到,删除n"); for (j = i + 1; j < StudentCount; j+) Sj - 1 = Sj; break; if (i = StudentCount | i > StudentCount) printf("n未找到该学生nn"); return 0; else StudentCount-; return 1; void Student_Select() int x;char y100; char a100; int i, j; printf("n输入所查学生信息(1.姓名 2.学号)选择:"); scanf("%d", &x); if (x = 1 | x = 2) if (x = 1) printf("n姓名:");fflush(stdin); gets(a); for (i = 0; i < StudentCount; i+) if (0=strcmp(Si.Name,a) printf("n学号:%st姓名:%sn", Si.Number, Si.Name); printf("n课程编号t课程名称t课程成绩t课程学分n"); printf("-n"); for (j = 0; j < Si.LessonCount; j+) printf("%stt%stt%dtt%fn", Si.Lj.LessonNumber, Si.Lj.LessonName, Si.Lj.LessonMark, Si.Lj.LessonCredit); printf("-n"); printf("nn"); else printf("n学号:"); fflush(stdin);gets(y); for (i = 0; i < StudentCount; i+) if (strcmp(Si.Number,y)=0) printf("n学号:%st姓名:%sn", Si.Number, Si.Name); printf("n课程编号t课程名称t课程成绩t课程学分n"); printf("-n"); for (j = 0; j < Si.LessonCount; j+) printf("%stt%stt%dtt%fn", Si.Lj.LessonNumber,Si.Lj.LessonName,Si.Lj.LessonMark,Si.Lj.LessonCredit); printf("-n"); printf("nn"); break; printf("查找完毕.回车继续n"); getchar(); else printf("选择错误.回车继续n"); getchar(); return; void Class_Select() char a100; double x=0,y=0,z=0; int i, j; printf("n请输入课程编号:"); fflush(stdin); scanf("%s",a); printf("学号t姓名t课程名称t课程成绩t课程学分n"); printf("-n"); for (i = 0; i < StudentCount; i+) for (j = 0; j < Si.LessonCount; j+) if (strcmp(Si.Lj.LessonNumber,a)=0) printf("%st%st%stt%dtt%fn", Si.Number, Si.Name, Si.Lj.LessonName, Si.Lj.LessonMark, Si.Lj.LessonCredit); printf("-n"); z+=Si.Lj.LessonMark; x+; if (Si.Lj.LessonMark >= 60)y+; break; printf("n平均分:%ft及格率:%f%nn", z/x, y/x*100); printf("n查找完毕.回车继续n"); getchar();void WriteFile() FILE *fp; int i, j; char a100; printf("n请输入写入的文件地址:nn地址输入格式:例如d:Student.txt:"); scanf("%s",&a); printf("n写入中.n"); if (fp = fopen(a,"w") fprintf(fp,"%dn",StudentCount); for (i = 0; i < StudentCount; i+) fprintf(fp,"%st%st%dn",Si.Number, Si.Name,Si.LessonCount); for (j = 0; j < Si.LessonCount; j+) fprintf(fp,"%st%st%dt%fn", Si.Lj.LessonNumber,Si.Lj.LessonName, Si.Lj.LessonMark,Si.Lj.LessonCredit); printf("n写入完成.回车继续n"); fclose(fp); else printf("n写入失败.回车继续n"); getchar();void ReadFile() FILE *fp; int i, j; char a100; printf("n请输入读取的文件地址:nn地址输入格式:例如d:student.txt:"); scanf("%s",&a); printf("n读取中.n"); if (fp = fopen(a,"r") fscanf(fp,"%d",&StudentCount); for (i = 0; i < StudentCount; i+) fscanf(fp,"%s%s%d",&Si.Number, &Si.Name,&Si.LessonCount); for (j = 0; j < Si.LessonCount; j+) fscanf(fp,"%s%s%d%f",&Si.Lj.LessonNumber, &Si.Lj.LessonName,&Si.Lj.LessonMark, &Si.Lj.LessonCredit); printf("n读取成功.回车继续n"); fclose(fp); else printf("n读取失败.回车继续n"); getchar();第 36 页-