1、c语言成绩查询系统 C语言大作业姓 名: 班 级: 学 号: 指 导 教 师: 设 计 时 间: 一.目的1.1、 通过本次大作业,锻炼我们应用C语言的语法规则和已经掌握的算法,自己解决一个较简单的课题,初步积累编程经验。、 通过学习掌握程序设计的方法与编程技术,学会良好的程序设计风格,为计算机在不同领域的应用打下坚实的基础。、 要求我们能利用计算机解决实际问题。从分析问题入手,设计可行的算法,进而编出相应的C程序。强调上机实践过程,从实际应用出发,注重程序的实际应用。 二.题目描述和要求题目:学生成绩管理系统应用链表及外部文件,独立设计上述应用系统,并编程实现以下功能: 信息录入录入学生信息
2、(包括姓名、学号、各科成绩)。信息查询输入学号,查询与学号相对应的信息(包括成绩),并按可选的自定义规则进行排序。按班级查询学生成绩。按班级统计学科总分、平均分等。 信息删除与修改输入学号,删除该学号对应的成绩信息。输入学号,查询并显示出该学号信息,并在此基础上进行修改。 计算学生成绩计算每位学生的总分。计算每位学生的平均分。成绩排序。信息保存将学生信息保存在文件中。根据以上功能需求,定义通讯录信息结构,并采用链表结构对数据进行存储。提供友好的用户界面,方便用户操作。三.报告内容需求分析随着当今社会发展,信息化水平逐步提高,对教务管理有了新的要求,因此,编写一个信息管理系统是十分有必要的。该软
3、件主要是实现对学生信息进行系统化的管理,首先可以对学生基本信息进行输入和读取,其次查找并显示特定学生的相关信息,然后可以插入学生的相关信息,还有就是可按学生相关信息排序,以求达到简易操作的目的。 概要设计1系统结构图(功能模块图)和数据变量说明2.系统总体流程图 详细设计源文件函数名或其他成分功能函数名或其他成分功能main总控函数int choice菜单选择switch(choice)菜单处理IO_WriteInfo新建学生信息记录exit结束运行Student_Insert增加学生信息Student_Display显示信息Student_Delete删除指定的记录Student_Selec
4、t查询指定学生的信息Student_Modify修改指定学生的信息Student_SortByAverage排序结构声明学生成绩结构库函数及函数原型声明引用库函数及函数 主要源程序代码#include #include#include struct Student char ID20; char Name20; float scor_eng; float scor_math; float scor_phy; float Average; ; struct Student students1000; int num=0; float Avg(struct Student stu) return
5、+/3; int Student_SearchByIndex(char id) int i; for (i=0;inum;i+) if (strcmp(studentsi.ID,id)=0) return i; return -1; int Student_SearchByName(char name) int i; for (i=0;inum;i+) if (strcmp(studentsi.Name,name)=0) return i; return -1; void Student_DisplaySingle(int index) printf(%10s%10s%8s%8s%8s%10s
6、n,学号,姓名,英语成绩,数学成绩,物理成绩,平均成绩); printf(-n); printf(%10s%10s%n,studentsindex.ID,studentsindex.Name, studentsindex.scor_eng,studentsindex.scor_math,studentsindex.scor_phy,studentsindex.Average); void Student_Insert() while(1) printf(请输入学号:); scanf(%s,&studentsnum.ID); getchar(); printf(请输入姓名:); scanf(%s
7、,&studentsnum.Name); getchar(); printf(请输入英语成绩:); scanf(%f,&studentsnum.scor_eng); getchar(); printf(请输入数学成绩:); scanf(%f,&studentsnum.scor_math); getchar(); printf(请输入物理成绩:); scanf(%f,&studentsnum.scor_phy); getchar(); studentsnum.Average=Avg(studentsnum); num+; printf(是否继续(y/n); if (getchar()=n) br
8、eak; void Student_Modify() while(1) char id20; int index; printf(请输入要修改的学生的学号:); scanf(%s,&id); getchar(); index=Student_SearchByIndex(id); if (index=-1) printf(学生不存在!n); else printf(你要修改的学生信息为:n); Student_DisplaySingle(index); printf(- 请输入新值-n); printf(请输入学号:); scanf(%s,&studentsindex.ID); getchar(
9、); printf(请输入姓名:); scanf(%s,&studentsindex.Name); getchar(); printf(请输入英语成绩:); scanf(%f,&studentsindex.scor_eng); getchar(); printf(请输入数学成绩:); scanf(%f,&studentsindex.scor_math); getchar(); printf(请输入物理成绩:); scanf(%f,&studentsindex.scor_phy); getchar(); studentsindex.Average=Avg(studentsindex); prin
10、tf(是否继续(y/n); if (getchar()=n) break; void Student_Delete() int i; while(1) char id20; int index; printf(请输入要删除的学生的学号:); scanf(%s,&id); getchar(); index=Student_SearchByIndex(id); if (index=-1) printf(学生不存在!n); else printf(你要删除的学生信息为:n); Student_DisplaySingle(index); printf(是否真的要删除(y/n); if (getchar
11、()=y) for (i=index;inum-1;i+) studentsi=studentsi+1; num-; getchar(); printf(是否继续(y/n); if (getchar()=n) break; void Student_Select() while(1) char name20; int index; printf(请输入要查询的学生的姓名:); scanf(%s,&name); getchar(); index=Student_SearchByName(name); if (index=-1) printf(学生不存在!n); else printf(你要查询的
12、学生信息为:n); Student_DisplaySingle(index); printf(是否继续(y/n); if (getchar()=n) break; void Student_SortByAverage() int i,j; struct Student tmp; for (i=0;inum;i+) for (j=1;jnum-i;j+) if (studentsj-1.Averagestudentsj.Average) tmp=studentsj-1; studentsj-1=studentsj; studentsj=tmp; void Student_Display() in
13、t i; printf(%10s%10s%8s%8s%8s%10sn,学号,姓名,英语成绩,数学成绩,物理成绩,平均成绩); printf(-n); for (i=0;inum;i+) printf(%10s%10s%n,studentsi.ID,studentsi.Name, studentsi.scor_eng,studentsi.scor_math,studentsi.scor_phy,studentsi.Average); void IO_ReadInfo() FILE *fp; int i; if (fp=fopen(,rb)=NULL) printf(不能打开文件!n); retu
14、rn; if (fread(&num,sizeof(int),1,fp)!=1) num=-1; else for(i=0;inum;i+) fread(&studentsi,sizeof(struct Student),1,fp); fclose(fp); void IO_WriteInfo() FILE *fp; int i; if (fp=fopen(,wb)=NULL) printf(不能打开文件!n); return; if (fwrite(&num,sizeof(int),1,fp)!=1) printf(写入文件错误!n); for (i=0;inum;i+) if (fwrit
15、e(&studentsi,sizeof(struct Student),1,fp)!=1) printf(写入文件错误!n); fclose(fp); int main() int choice; IO_ReadInfo(); while(1) printf(n- 学生成绩管理系统-n); printf(1. 增加学生记录n); printf(2. 修改学生记录n); printf(3. 删除学生记录n); printf(4. 按姓名查询学生记录n); printf(5. 按平均成绩排序n); printf(6. 保存文件n); printf(7. 退出n); printf(请选择(1-7):
16、); scanf(%d,&choice); getchar(); switch(choice) case 1: Student_Insert(); break; case 2: Student_Modify(); break; case 3: Student_Delete(); break; case 4: Student_Select(); break; case 5: Student_SortByAverage(); Student_Display(); break; case 6: IO_WriteInfo(); break; case 7: exit(0); break; 测试分析C语
17、言是上学期的学习内容,现在生疏了很多,以致程序运行过程中有许多bug,测试也有很多想不到的错误。下面列举几个例子: 1)IO_ReadInfo读出文件If(fp=fopen(“”,”rb”))=NULL)以二进制的格式读取文件的模式打开文件,并把文件指针赋值为文件读取指针 IO_WriteInfo写入文件If(fp=fopen(“”,”rb”))=NULL)以二进制写入方式打开文件,和读取类似。在写这个函数的时候总是不能读出,而且写入也有问题,if (fwrite(&num,sizeof(int),1,fp)!=1)因为sizeof(int)是指一次读入的二进制数据单位个数,后面的“1”表示要
18、读取的次数,fread返回值有1、0,分别是成功,失败的意思。 2)在程序中float与int要根据数据得取值情况,还有字符串类型的使用,在求学生成绩平均值的时候,因为字符串类型不一致,导致数据结果失真,这样的错误不应再犯。 设计结果录入一条或多条学生数据删除一条或多条学生数据按姓名查找一条或多条学生数据增加一条或多条学生数据修改一条或多条学生数据按学生平均成绩排序保存文件到根目录退出程序四.结论与心得通过一周的上机实习,我对C语言又有了自己的一点认识。C语言的学习是一个系统的过程,不像其它学科知识,C语言必须自己亲自一个个代码打出来,自己对那个代码要有自己的了解,怎么用,如何用更好,还可以怎么用,都要通过自己联系才有体会,在实践中成长,在实践中求知。这次设计的课题是学生信息管理系统。课题要求对学生信息实现一系列基本操作。我选择通过结构体数组和指针来实现这个设计。但是,设计完成后关于用学号输出成绩还是用姓名都是可以的。但用学号输入时有很多麻烦都是之前没有料到的,换成姓名输入后,就简单多了。总之,通过这次实习,我也认识到了我自己在程序设计这门课程上的不足,在以后的学习实践中,要更加的严谨踏实,对知识的把握要更加的细致入微,要活学活用,争取在这个学科上取得更大的进步。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1