1、 综合程序 课程设计说明书课程设计名称: 综合程序课程设计 课程设计题目: 学生成绩管理系统 学 院 名 称: 信息工程学院 专业: 班级: 学号: 姓名: 评分: 教师: 20 15 年 3 月 1 日由每位学生填写、由任教教师保存待查 综合程序 课程设计任务书20 14 20 15学年 第 2 学期 第 1 周 2周 题目学生成绩管理系统内容及要求用C编写一系统,实现学生信息管理,软件的入口界面应包括如下几个方面:一、功能要求:(1)信息维护:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息;(2)信息查询:查询时可实现
2、按姓名查询、按学号查询;(3)成绩统计:A输入任意的一个课程名(如数学)和一个分数段(如60-70),统计出在此分数段的学生情况;(4)排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果(使用表格的形式显示排序后的输出结果)。(使用多种方法排序者,加分)二、其它要求:(1)只能使用C或C+语言,源程序要有适当的注释,使程序容易阅读;(2)采用文本菜单界面; (3)学生可增加新功能模块。进度安排1、 图书馆、网上查资料:2天;2、 编写程序:3天;3、 运行调试改正程序:3天;4、 检查验收:2天。学生姓名:陈方燕指导时间 年 月 日- 年 月 日指导地点: 任务下达20
3、15年 月 日任务完成2015 年 月 日考核方式1.评阅 2.答辩 3.实际操作 4.其它指导教师系(部)主任注:1、此表一组一表二份,课程设计小组组长一份;任课教师授课时自带一份备查。2、课程设计结束后与“课程设计小结”、“学生成绩单”一并交院教务存档。摘要现代社会越来越趋向智能化,而计算机是实现智能化的重要工具。学会用计算机编程,熟练运用C语言是一项重要技能。学生成绩管理是每个教育单位不可缺少的,使用C语言编写的学生成绩管理系统不仅能快速的实现学生成绩的管理,并且更加方便,功能齐全。本次设计主要运用C语言来设计一个学生成绩管理系统,能实现学生成绩录入,并以文件形式保存,修改、增加、删除学
4、生信息,还能按照学号或姓名对某一学生信息进行查找,除此之外,还有对学生成绩排序、学生成绩统计等多种功能。关键字:C语言、成绩管理、成绩查询目录摘要2第一章 设计要求 4第二章 系统组成及设计原理 52.1 系统组成52.2 设计原理5第三章 概要设计 63.1 系统层次图63.2 方案说明6第四章 详细设计 74.1 程序流程图74.2 模块详细设计7 4.2.1 界面设计 8 4.2.2 主函数设计 9 4.2.3 文件读写设计11 4.2.4 插入学生信息设计13 4.2.5 修改学生信息设计14 4.2.6 删除学生信息设计16 4.2.7 查询学生信息设计17 4.2.8 学生成绩排序
5、查询设计19 4.2.9 统计学生成绩分数段信息设计21 4.2.10 统计挂科学生成绩设计 23第五章 结果调试及分析245.1 调试方法 245.2 调试中遇到的问题及解决方法 24第六章 结论25第七章 参考文献26附录 27第一章 设计要求 请用C编写一系统,实现学生信息管理,软件的入口界面应包括如下几个方面:(一)功能要求:(1)信息维护:要求:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息(2)信息查询:要求:查询时可实现按姓名查询、按学号查询(3)成绩统计:要求:A输入任意的一个课程名(如数学)和一个分数段(
6、如60-70),统计出在此分数段的学生情况。(4)排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果(使用表格的形式显示排序后的输出结果)(使用多种方法排序者,加分)(二)其它要求:(1)只能使用C或C+语言,源程序要有适当的注释,使程序容易阅读(2)采用文本菜单界面(3)学生可增加新功能模块第二章 系统组成及设计原理2.1 系统组成该系统主要包括文件读写函数、增加信息函数、修改信息函数、删除信息函数、分别按学号、姓名查询函数、求总成绩函数、统计分数段函数、统计挂科学生函数九个模块,相互之间既相互独立又相互联系。2.2 设计原理本次设计主要运用C语言编写,按照设计要求,
7、先确定菜单目录及所需函数。在文件函数部分,主要用到文件指针及文件的读写。文件的使用贯穿所有功能,因此在主函数中要对其进行调用。主函数主要实现对各个函数的调用,用do-while循环语句和switch()-case选择判断语句来调用相关函数功能模块,并对显示界面进行设计,是输出界面方便用户操作切美观,主要由printf语句实现。输出显示函数部分主要用printf语句实现输出内容的设定,并引用结构体显示所需部分信息。插入、修改、删除部分则是对文件中学生信息进行相关操作,插入学生信息用printf、scanf、及getchar语句对学生各项信息进行录入,并保存到文件。修改和删除除了上述语句外,还有i
8、f-else语句分情况判断所要操作学生是否存在,然后再进行修改或删除。查询模块要先获得学生的学号姓名,用Searchnum(char nu)、Searchname(char name)函数实现,用到Searchname(char name)语句实现。排序模块主要用for循环及if-else语句实现对总成绩或单科成绩的比较,再调用相关显示函数输出。统计模块主要用for循环及if-else语句逐一比较每个学生成绩是否满足给定条件,若满足则输出。第三章 概要设计3.1 系统层次图按单科排序退出本系统挂科学生信息统计某科分数段按总分排序按姓名查询学生成绩修改学生信息添加学生信息删除学生信息按学号查询学
9、生信息 开始 主界面 结束 图3.1 学生成绩管理系统结构层次图3.2方案说明本方案程序简介易懂,并且功能齐全,可以根据个人需要而增加功能。程序运行后,界面美观,操作方便。操作中添加、修改、删除的学生信息都保存在文件中,确保了数据的长久性及其安全性。第四章 详细设计4.1程序流程图程序流程图如图4.1:开始 case58764321091是否继续是否继续是否继续修改学生信息删除学生信息按学号查寻学生按总成绩排序按姓名查寻学生统计挂科学生信息按某一课目成绩排序统计某科某分数段成绩退出增加学生信息结束是否继续是否继续? 是 是 是 是 是 否 否 否 否 否图4.1 学生成绩管理系统流程图4.2
10、模块详细设计程序设计所用函数如下:1、 库函数 #include #include;2、主函数 void main();3、结构体 struct Student;4、写文件函数 void writefile();5、读文件函数 void readfile()6、求总分函数 float And(struct Student stu);7、获取学号函数 int Searchnum(char nu);8、获取姓名函数 int Searchname(char name);9、显示学生信息函数 void Display();10、显示单个学生信息函数 void DSingle(int index);11
11、、显示语文成绩信息函数 void DSingle1(int inde);12、显示数学成绩信息函数 void DSingle2(int ind);13、显示英语成绩信息函数 void DSingle3(int in);14、插入学生信息函数 void Insert();15、修改学生信息函数 void Modify();16、删除学生信息函数 void Delete();17、按学号查询学生信息 void Select1();18、按姓名查询学生信息 void Select2();19、按语文成绩排序函数 void SChinese();20、按数学成绩排序函数 void SMath();21
12、、按英语成绩排序函数 void SEnglish();22、按总成绩排序函数 void Sall();23、按语文成绩统计 void Chineses(int a,int b);24、按数学成绩统计 void Maths(int a,int b);25、按英语成绩统计 void Englishs(int a,int b);26、统计挂科学生函数 void Lose();4.2.1 界面设计 如图4.2所示: 图4.2 主界面图在此界面用户可以选择要操作的选项,回车之后即可进入相关的页面进行操作(例如:选择1 ,即可增加学生记录)。4.2.2 主函数设计主函数主要运用do-while循环语句和s
13、witch()-case选择判断语句来调用相关函数功能模块。系统的运行是循环里进行的,只有在主界面并选择“退出”时,才会跳出循环,并退出程序。具体程序如下:void main() int choice; int m,n; readfile(); while(1) /*主菜单*/ printf(n *); printf(n 欢迎进入-n); printf( 学生成绩管理系统); printf(nn *n); printf(n *主菜单*n); printf(n 1、增加学生记录n); printf( 2、修改学生信息n); printf( 3、删除学生信息n); printf( 4、按学号查询学
14、生信息n); printf( 5、按姓名查询学生信息n); printf( 6、按总成绩排序n); printf( 7、按某课程成绩排序n); printf( 8、统计某课程某分数段的情况n); printf( 9、统计挂科学生信息n); printf( 10、退出n); printf( *n); printf( 请选择(1-10):); scanf(%d,&choice); getchar(); switch(choice) case 1: Insert(); break; case 2: Modify(); break; case 3: Delete(); break; case 4: S
15、elect1(); break; case 5: Select2(); break; case 6: Sall(); Display(); break; case 7: printf( 选择课程对应的代号:n 语文代号1,数学代号2,英语代号3, n 输入-); scanf(%d,&mark); switch(mark)case 1: SChinese(); Display(); break; case 2: SMath(); Display(); break; case 3: SEnglish(); Display(); break; break; case 9:Lose();break;
16、case 8: printf( 选择课程对应的代号:n 语文代号1,数学代号2,英语代号3,n 输入-); scanf(%d,&mark); switch(mark)case 1:printf( 请输入分数段 m-n: );scanf(%d-%d,&m,&n);Chineses(m,n); break; case 2: printf( 请输入分数段 m-n: );scanf(%d-%d,&m,&n);Maths(m,n); break; case 3:printf( 请输入分数段 m-n: );scanf(%d-%d,&m,&n);Englishs(m,n); break;case 10: e
17、xit(0); break; writefile(); 4.2.3 文件读写设计 此模块运用C语言中文件读写相关知识,定义fp指针,从生成的文件中读写学生信息。若文件中尚未有学生信息存入,则输出文件为空;若未能按正确格式写入,则输出文件写入错误;若输入正确,则可以用于其他功能中对学生信息的调用。具体程序如下:/*将学生信息从文件读出*/void readfile() FILE *fp; int i; if (fp=fopen(studentinformal.txt,rb)=NULL) printf(文件为空!n); return; if (fread(&num,sizeof(int),1,fp
18、)!=1) num=-1; else for(i=0;inum;i+) fread(&studentsi,sizeof(struct Student),1,fp); fclose(fp); /*将学生信息写入文件*/void writefile() FILE *fp; int i; if (fp=fopen(studentinformal.txt,wb)=NULL) printf(文件为空!n); return; if (fwrite(&num,sizeof(int),1,fp)!=1) printf(文件写入错误!n); for (i=0;inum;i+) if (fwrite(&stude
19、ntsi,sizeof(struct Student),1,fp)!=1) printf(文件写入错误!n); fclose(fp); 4.2.4 插入学生信息设计插入学生信息用Insert()函数实现,主要运用printf、scanf、getchar语句来实现对学生信息读插入,并有判断是否继续输入语句。功能界面如图4.3所示,选择菜单功能“1”即可实现学生信息的插入。 图4.3 插入学生信息 程序设计:/*插入学生信息*/void Insert() while(1) printf( 请输入学号:); scanf(%s,&studentsnum.NUM); getchar(); printf(
20、 请输入姓名:); scanf(%s,&studentsnum.Name); getchar(); printf( 请输入语文成绩:); scanf(%f,&studentsnum.Chinese); getchar(); printf( 请输入数学成绩:); scanf(%f,&studentsnum.Math); getchar(); printf( 请输入英语成绩:); scanf(%f,&studentsnum.English); getchar(); studentsnum.Add=And(studentsnum); num+; printf( 是否继续?(y/n); if (get
21、char()=n) break; 4.2.5 修改学生信息设计修改学生信息用Modify()函数实现,调用Searchnum(id)函数,过输入学号确定所要修改的学生信息,除了用到printf、scanf、getchar语句外,还用到if-else语句,判断所要修改的学生信息是否存在,若不存在,则输出“学生不存在”;若存在,即可对学生信息进行相应的修改。功能界面如图4.4,选择主菜单“2”功能即可。图4.4 修改学生信息程序设计:/*修改学生信息*/void Modify() while(1) char nu20; int number; printf( 请输入要修改的学生的学号:); sca
22、nf(%s,&nu); getchar(); number=Searchnum(nu); if (number=-1) printf( 学生不存在!n); else printf( 你要修改的学生信息为:n); DSingle(number); printf( -请输入新值-n); printf( 请输入学号:); scanf(%s,&studentsnumber.NUM); getchar(); printf( 请输入姓名:); scanf(%s,&studentsnumber.Name); getchar(); printf( 请输入语文成绩:); scanf(%f,&studentsnu
23、mber.Chinese); getchar(); printf( 请输入数学成绩:); scanf(%f,&studentsnumber.Math); getchar(); printf( 请输入英语成绩:); scanf(%f,&studentsnumber.English); getchar(); studentsnumber.Add=And(studentsnumber); printf(是否继续?(y/n); if (getchar()=n) break; 4.2.6 删除学生信息设计删除学生信息用Delete()函数实现,并且调用Searchnum(id)函数,过输入学号确定所要删
24、除的学生信息,由if-else语句,判断所要删除的学生信息是否存在,若不存在,则输出“学生不存在”,若存在,即可对学生信息进行删除。功能界面如图4.5,选择主菜单“3”功能即可。图4.5 删除学生信息程序设计:/*删除学生信息*/void Delete() int i; while(1) char id20; int index; printf( 请输入要删除的学生的学号:); scanf(%s,&id); getchar(); index=Searchnum(id); if (index=-1) printf( 学生不存在!n); else printf( 你要删除的学生信息为:n); DS
25、ingle(index); printf( 是否真的要删除?(y/n); if (getchar()=y) for (i=index;inum-1;i+) studentsi=studentsi+1;/把后边的对象都向前移动 num-; getchar(); printf( 是否继续?(y/n); if (getchar()=n) break; 4.2.7 查询学生信息设计查询学生信息共有两种方法。方法一 按学号查询按学号查询用Select1()函数,用到printf、scanf、getchar语句外,还用到if-else语句,输入所要查询学生的学号,在文件中读取,若该学生存在,则从文件中获取
26、该学生信息,并显示到输出界面;若不存在,则输出“该学生不存在”。可选择菜单中的“4”选项实现,运行结果如图4.6所示。图 4.6 按学号查询程序设计:void Select1() while(1) char id20; int index; printf( 请输入要查询的学生的学号:); scanf(%s,&id); getchar(); index=Searchnum(id); if (index=-1) printf( 学生不存在!n); else printf( 你要查询的学生信息为:n); DSingle(index); printf( 是否继续?(y/n); if (getchar(
27、)=n) break; 方法二 按姓名查询 按姓名查询用Select2()函数,与按学号查询所用语句基本相同,只是此时输入的是所查学生的姓名,从文件中获取的也是学生的姓名信息,其他与按学号查询相同。可选择菜单中的“5”选项实现,运行结果如图4.7所示。图4.7 按姓名查询程序设计:void Select2() while(1) char name20; int index; printf( 请输入要查询的学生的姓名:); scanf(%s,&name); getchar(); index=Searchname(name); if (index=-1) printf( 学生不存在!n); els
28、e printf( 你要查询的学生信息为:n); DSingle(index); printf( 是否继续?(y/n); if (getchar()=n) break; 4.2.8 学生成绩排序设计学生成绩排序总体分为两个方面:一、 按总成绩排序按总成绩排序用Sall()函数,用 Display()函数显示,用for双重循环,获取每个学生的总成绩,并比较大小。可选择菜单中的“6”选项实现,运行结果如图4.8所示。图 4.8 按总成绩排序程序设计:void Sall() int i,j; struct Student tmp; for (i=0;inum;i+) for (j=1;jnum-i;
29、j+) if (studentsj-1.Addstudentsj.Add) tmp=studentsj-1; studentsj-1=studentsj; studentsj=tmp; 二、 按单科成绩排序 按单科成绩排序用 SChinese() 、SMath()和SEnglish()三个函数实现,用 Display()函数显示,分别完成对语文、数学、英语成绩的排序。用for双重循环对选择的科目成绩进行从大到小排序。可选择菜单中的“7”选项,按提示输入,运行结果如图4.9、4.10、4.11所示。图4.9 按语文成绩排序图4.10 按数学成绩排序图4.11 按英语成绩排序程序设计(以按语文成绩
30、排序为例):void SChinese() int i,j; struct Student tmp; for (i=0;inum;i+) for (j=1;jnum-i;j+) if (studentsj-1.Chinesestudentsj.Chinese) tmp=studentsj-1; studentsj-1=studentsj; studentsj=tmp; 4.2.9 统计学生成绩分数段信息设计 统计学生某科目分数段用到Chineses()、Maths()和Englishs()函数,并分别用DSingle1()、DSingle2()和DSingle3()函数输出显示满足条件的学生信息。函数中用到for循环和if语句及函数调用,选择满足条件的学生信息,并输出显示。可选择菜单中的“8”选项,按提示输入,运行结果如图4.12、4.13、4.14所示。图 4.12 统计语文成绩分数段图 4.13 统计数学成绩分数段图4.14 统计英语成绩分数段程序设计(以按语文成绩统计为例):void Chineses(int a,int b) int i; for (i=0;inum;i+) if (studentsi.Chinese=a)
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100