学生成绩管理系统c程序设计报告分析_第1页
学生成绩管理系统c程序设计报告分析_第2页
学生成绩管理系统c程序设计报告分析_第3页
学生成绩管理系统c程序设计报告分析_第4页
学生成绩管理系统c程序设计报告分析_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、内蒙古科技大学本科生课程设计说明书题 目:C语言课程设计 学生成绩管理系统学生姓名:*学 号:*专 业:计算机科学与技术班 级:11级-3班指导教师:*2012年12月26日内蒙古科技大学课程设计任务书课程名称C语言课程设计设计题目学生成绩管理系统指导教师*时间2012.12.312013.1.4一、教学要求1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力二、设计资料及参数每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不

2、可更换。某班学生成绩管理,包括以下功能:v 从键盘输入包括学号、姓名、各门课程成绩(不少于5门),并将其保存在磁盘文件里v 打开文件后,计算每个人的总分和平均分,排序并保存v 具有单项查询或多项查询的功能(即按照给定的关键字,如姓名找出满足条件的纪录)v 具有插入、删除和修改功能v 具有输出文件数据信息的功能三、设计要求及成果1. 分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目)2. 写出详细设计说明(至少包括功能实现分析和模块流程图)3. 编写程序代码,调试程序使其能正确运行(代码书写要规范,标示符要见名知意,要有必要的注释,每人至少3个函数,每人至少2

3、00行代码,不包括注释和花括号)4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告(请严格按照模板进行排版)四、进度安排第一天 选择课程设计题目,分析课题的要求第二天 编程第三天 编程及调试第四天 写课程设计报告第五天 提交课程设计报告(打印稿及电子稿)五、评分标准1. 根据平时上机考勤、表现和进度,教师将每天点名和检查2. 根据课程设计完成情况,必须有可运行的软件。3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。六、建议参考资料1C语言程序设计,谭浩强,清华大学出版社2C语言程序设计课程设计,刘振安,机械工业出版社目 录内蒙古科技大学课程设计任务书

4、III第一章 需求分析41.1引言41.2任务概述41.3数据描述41.4功能需求51.5性能需求51.6运行需求51.7任务计划5第二章概要设计62.1总体设计62.2数据类型设计(或数据结构设计)72.3接口设计 /函数声明72.4运行界面设计8第三章详细设计93.1输入模块设计93.2输出模块设计103.3查找模块设计133.4排序模块设计16第四章测试分析194.1测试程序执行情况194.2出现的问题和解决的方法24第五章课程设计总结25附录:程序代码26参考文献41致谢42第一章 需求分析1.1 引言建立学生成绩管理系统,通过使用计算机对学生成绩进行管理,进一步提高办学效率。此设计说

5、明书是对学生成绩管理系统开发的一个初步的分析说明性文档,旨在通过该文档清晰的阐述系统的实际功能,方便系统开发人员对系统的理解以及与用户的沟通。文档相关说明部分在目录部分已全部涵盖,阅读此文档的相关人员可以通过目录索引找到相应部分予以阅读。1.2 任务概述某班学生成绩管理,包括以下功能:v 从键盘输入包括学号、姓名、各门课程成绩(不少于5门),并将其保存在磁盘文件里v 打开文件后,计算每个人的总分和平均分,排序并保存v 具有单项查询或多项查询的功能(即按照给定的关键字,如姓名找出满足条件的纪录)v 具有插入、删除和修改功能v 具有输出文件数据信息的功能1.3 数据描述该管理系统程序中数据主要有:

6、学生的学号、姓名、各门课程成绩、每个人的总分和平均分、查询、输出、插入、删除和修改等功能。1.4 功能需求(1) 输入模块:有关学生的信息,各门课程成绩的输入;(2) 输出模块:学生成绩的总分和平均分;(3) 查找模块:根据学生的姓名查询该学生的名次、成绩;(4) 排序模块:对学生成绩的排序;(5) 保存及读取模块:保存及读取磁盘文件。1.5 性能需求(1) 要求该管理系统具有一定的可扩展性以便适应发展,且便于维护;(2) 要求该管理系统便于使用,使用步骤简易明了。1.6 运行需求基于windows平台下的窗口图形界面软件,运行主界面为windows的经典运行界面,采用多文档界面,从而使程序更

7、加美观,整齐有序,简易操作。软件运行基于windows平台上的xp,Vista,win7等1.7 任务计划第一天 选择课程设计题目,分析课题的要求第二天 编程第三天 编程及调试第四天 写课程设计报告第五天 提交课程设计报告(打印稿及电子稿)第二章 概要设计2.1 总体设计设计目的:1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力主菜单输入学生信息输出学生信息查询学生信息插入学生信息图2.1:程序总体设计图2.2 数据类型设计(或数据结构设计)

8、表2.1:数据类型设计数据数据类型学生各门课程成绩整数数据平均分浮点型数据姓名字符型变量Student结构体类型2.3 接口设计表2.2:函数列表函数名函数格式 /即函数首部函数功能*cinStudent输入学生信息*sort_1Student学生信息按要求排序sort_2void排序函数printvoid输出学生信息*sort_allStudent学生全部信息排序findvoid查找学生信息*add_newStudent插入新的学生信息2.4 运行界面设计图2.2:运行界面设计第三章 详细设计3.1 输入模块设计输入学生的各项基本信息:Student *cin() int flag; Stu

9、dent *head,*p1,*p2; n=0; head=(Student *)malloc(LEN); p2=head; printf(n请输入第%d名学生的学号,学号为0表示结束输入:,n+1); scanf(%d,&flag); while(getchar()!=n); for(;flag;) n+; p1=(Student *)malloc(LEN); p1-num=flag; printf(请输入第%d名学生的姓名:,n); scanf(%s,p1-name); printf(请输入第%d名学生的语文成绩:,n); scanf(%d,&p1-score0); printf(请输入第

10、%d名学生的数学成绩:,n); scanf(%d,&p1-score1); printf(请输入第%d名学生的英语成绩:,n); scanf(%d,&p1-score2); printf(请输入第%d名学生的计算机成绩:,n); scanf(%d,&p1-score3); printf(请输入第%d名学生的物理成绩:,n); scanf(%d,&p1-score4); p1-sum=p1-score0+p1-score1+p1-score2+p1-score3+p1-score4; p2-next=p1; p2=p1; printf(n请输入第%d名学生的学号,没有此学生则输入0表示结束:,n

11、+1); scanf(%d,&flag); p2-next=NULL;printf(nn);return head;3.2 输出模块设计输出学生成绩信息:void print(Student *head)Student *p=head-next; if (!p) printf(nn此系统目前没有任何学生数据!nnn);return;printf(此系统目前共计学生%d名:n,n); printf(*学生成绩统计一览*n);printf(学号t姓名t语文成绩 数学成绩 英语成绩 计算机成绩 物理成绩 总分n);for(;p;p=p-next) printf(%dt%st %d %d %d %d

12、%d %dn, p-num,p-name, p-score0,p-score1,p-score2,p-score3,p-score4, p-sum=p-score0+p-score1+p-score2+p-score3+p-score4); int main() Student *head;int choose,i;head=(Student *)malloc(LEN);head-next=NULL; for(;) printf(ntt* * * * * 学生成绩管理系统 * * * *n); printf(ttt1.学生数据键盘录入tn); printf(ttt2.学生数据统计排序tn);

13、printf(ttt3.查询学生数据ttn); printf(ttt4.插入学生数据ttn); printf(ttt5.显示当前成绩表tn); printf(ttt0.退出成绩管理系统tn); printf(n请输入你要执行的操作:); scanf(%d,&choose); while(getchar()!=n); switch(choose) case 1:printf(ntttt*注意*); printf(nn 此选项将会建立新的学生数据系统 ,原来的数据将不再存在,你确定要删除原来的数据并建立新的数据系统吗?nn); printf(1、建立新的数据系统;0、放弃建立新的数据系统。nn);

14、 printf(请选择:); scanf(%d,&i); if (i=1) head=cin();print(head);break; else if (i=0) printf(n你选择了放弃建立新的数据系统!n); break; else printf(n你做出别的选择,当作放弃建立!n); break; case 2:head=sort_all(head);break; case 3:find(head);break; case 4:head=add_new(head); case 5:print(head);break; case 0:system(pause);return 0; de

15、fault: printf(nn您的输入有误!请重新输入:nn);break; 3.3 查找模块设计根据学生的姓名或学号查找学生的信息:void find(Student *head)Student *p;int choose,fnum;char tem20;if (n=0) printf(n当前系统没有任何学生数据!n );return;for(;) printf(n请输入您要查询学生的方式:nn); printf(1、按学号查询;2、按姓名查询;0、放弃查询nn); printf(请选择:); scanf(%d,&choose); while(getchar()!=n); if (choo

16、se=1) printf(n请输入你要查询的学生的学号,输入0退出学号查询:); scanf(%d,&fnum); for(;fnum;) for(p=head-next;p!=NULL&p-num!=fnum;p=p-next); if (!p) printf(nn查找不到要查询的学号,请重新输入,输入0表示结束:); scanf(%d,&fnum); else if (p-num=fnum) printf(n学号为%d学生的数据为:n,p-num); printf(学号t姓名t语文成绩 数学成绩 英语成绩 计算机成绩 物理成绩 总分n); printf(%dt%st %d %d %d %d

17、 %d %dn,p-num, p-name,p-score0,p-score1,p-score2,p-score3, p-sum); printf(nn请输入你还要查询的学生的学号,输入0表示不按学号查询:); scanf(%d,&fnum); else if (choose=2) printf(n请输入你要查询的学生的姓名,输入0退出姓名查询:); scanf(%s,tem); for(;strcmp(tem,0);) for(p=head-next;p!=NULL&strcmp(p-name,tem);p=p-next); if (!p) printf(nn找不到你要查询的姓名,请重新输入

18、,输入0表示结束:); scanf(%s,tem); else if (!strcmp(p-name,tem) printf(n姓名为%s学生的数据为:n,p-name); printf(学号t姓名t语文成绩 数学成绩 英语成绩 计算机成绩 物理成绩 总分n); printf(%dt%st %d %d %d %d %d %dn,p-num, p-name,p-score0,p-score1,p-score2,p-score3, p-sum); printf(nn请输入你还要查询的学生的姓名,输入0表示不按姓名查询:); scanf(%s,tem); else if (choose=0) pri

19、ntf(n你选择了不查询!n);break; else printf(n你以其他方式选择了不查询!n);break;3.4 排序模块设计将学生信息按要求排序:Student *sort_all(Student *head) int choose; for(;) printf(ntt# # # # # 学生成绩统计排序 # # # #n);printf(ttt1.按学生学号排序tn); printf(ttt2.按学生总分排序tn); printf(ttt3.按学生语文成绩排序tn); printf(ttt4.按学生数学成绩排序tn); printf(ttt5.按学生英语成绩排序tn); prin

20、tf(ttt6.按学生计算机成绩排序tn);printf(ttt7.按学生物理成绩排序tn);printf(ttt8.单科高分及均分tn); printf(ttt9.显示当前学生成绩tn); printf(ttt0.返回上一级菜单tn); printf(请输入你要执行的操作:); scanf(%d,&choose); while(getchar()!=n); switch(choose) case 1: case 2: case 3:case 4: case 5:case 6:case 7:head=sort_1(head,choose);break;case 8:print(head);so

21、rt_2(head);break;case 9:print(head);break; case 0:return head; default: printf(nn您的输入有误!请重新输入:nn);break; 第四章 测试分析4.1 测试程序执行情况图4.1:选择建立系统图4.2:输入学生信息及各门课程成绩图4.3:学生成绩一览表图4.4:学生成绩排序图4.5:学生单科高分及平均分图4.6:查询学生数据图4.7:插入学生数据图4.8:插入新学生数据后成绩排序图4.9:插入新学生数据后成绩统计一览表4.2 出现的问题和解决的方法1、 程序的语句结束后,忘记打分号:程序运行出现错误后,加上分号;2

22、、 显示所有成绩排序时,物理成绩误将%打成&,程序运行后,物理成绩出现乱码:程序运行错误后,将&改为%;第五章 课程设计总结课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在是生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术十分重要的。我的课设题目是学生成绩管理系统,对于刚刚接触C语言的学生来说也是有一定难度的。如何将课堂所学和实践相结合是我们此次课设最为重要的一部分,将所学的知识应用到实践中才是我们真正的将知识学到我们自己的脑子里。回顾此次课

23、设,感受颇多,从开始课设到课设结束,确实学到了很多东西,不仅巩固了以前学到的知识,更是学到了很多以前未接触过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到的问题,可以说是困难重重,第一次做课设,无法避免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计后,把以前所学过的知识都重新温故。在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去

24、制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,黑夜过去了,我们收获的是黎明。一时的失意不算什么,只要能坚持下去,就一定会成功的。感谢这次课设让我明白很多,了解很多,同时也改变很多。附录:程序代码#include #include #include #include #define LEN sizeof(Student)typedef struct student int num;char name20; int score5; int sum; struct student *next;Student;int n;Student *cin(void); St

25、udent *sort_1(Student *head,int); void sort_2(Student *head);void print(Student *head);Student *sort_all(Student *head);void find(Student *head);Student *add_new(Student *head);Student *cin() int flag; Student *head,*p1,*p2; n=0; head=(Student *)malloc(LEN); p2=head; printf(n请输入第%d名学生的学号,学号为0表示结束输入:

26、,n+1); scanf(%d,&flag); while(getchar()!=n); for(;flag;) n+; p1=(Student *)malloc(LEN); p1-num=flag; printf(请输入第%d名学生的姓名:,n); scanf(%s,p1-name); printf(请输入第%d名学生的语文成绩:,n); scanf(%d,&p1-score0); printf(请输入第%d名学生的数学成绩:,n); scanf(%d,&p1-score1); printf(请输入第%d名学生的英语成绩:,n); scanf(%d,&p1-score2); printf(请

27、输入第%d名学生的计算机成绩:,n); scanf(%d,&p1-score3); printf(请输入第%d名学生的物理成绩:,n); scanf(%d,&p1-score4); p1-sum=p1-score0+p1-score1+p1-score2+p1-score3+p1-score4; p2-next=p1; p2=p1; printf(n请输入第%d名学生的学号,没有此学生则输入0表示结束:,n+1); scanf(%d,&flag); p2-next=NULL;printf(nn);return head;Student *sort_all(Student *head) int

28、choose; for(;) printf(ntt# # # # # 学生成绩统计排序 # # # #n);printf(ttt1.按学生学号排序tn); printf(ttt2.按学生总分排序tn); printf(ttt3.按学生语文成绩排序tn); printf(ttt4.按学生数学成绩排序tn); printf(ttt5.按学生英语成绩排序tn); printf(ttt6.按学生计算机成绩排序tn);printf(ttt7.按学生物理成绩排序tn);printf(ttt8.单科高分及均分tn); printf(ttt9.显示当前学生成绩tn); printf(ttt0.返回上一级菜单t

29、n); printf(请输入你要执行的操作:); scanf(%d,&choose); while(getchar()!=n); switch(choose) case 1: case 2: case 3:case 4: case 5:case 6:case 7:head=sort_1(head,choose);break;case 8:print(head);sort_2(head);break;case 9:print(head);break; case 0:return head; default: printf(nn您的输入有误!请重新输入:nn);break; Student *so

30、rt_1(Student *head,int choose) Student *p1,*p2=head-next,*pm,*px;Student mid;if (!p2) return head;for(p1=p2;p1-next!=NULL;p1=p1-next) pm=p1; for(p2=p1-next;p2!=NULL;p2=p2-next) switch(choose) case 1:if (pm-nump2-num) pm=p2;break; case 2:if (pm-sumsum) pm=p2;break; case 3:if (pm-score0score0) pm=p2;b

31、reak; case 4:if (pm-score1score1) pm=p2;break; case 5:if (pm-score2score2) pm=p2;break; case 6:if (pm-score3score3) pm=p2;break;case 7:if (pm-score4score4) pm=p2;break; if (pm!=p1) mid=*pm; *pm=*p1; *p1=mid; px=pm-next; pm-next=p1-next; p1-next=px; printf(n排序后的成绩表为:n);print(head); return head;void s

32、ort_2(Student *headStudent *p=head-next;int max_1,max_2,max_3,max_4,min_1,min_2,min_3,min_4,max_5,min_5;int max_sum,min_sum;int sum_1=0,sum_2=0,sum_3=0,sum_4=0,sum_5=0;float aver_1,aver_2,aver_3,aver_4,aver_5,aver_sum;if (!p) return;max_1=min_1=p-score0;max_2=min_2=p-score1;max_3=min_3=p-score2;max_

33、4=min_4=p-score3; max_5=min_5=p-score4;max_sum=min_sum=p-sum;for(;p;p=p-next) if (max_1score0) max_1=p-score0; else if (min_1p-score0) min_1=p-score0; if (max_2score1) max_2=p-score1; else if (min_2p-score1) min_2=p-score1; if (max_3score2) max_3=p-score2; else if (min_3p-score2) min_3=p-score2; if

34、(max_4score3) max_4=p-score3; else if (min_4p-score3) min_4=p-score3;if (max_5score4) max_5=p-score4;else if (min_5p-score4) min_5=p-score4;if (max_sumsum) max_sum=p-sum; else if (min_sump-sum) min_sum=p-sum; sum_1+=p-score0;sum_2+=p-score1;sum_3+=p-score2;sum_4+=p-score3;sum_5+=p-score4;aver_1=1.0*

35、sum_1/n;aver_2=1.0*sum_2/n;aver_3=1.0*sum_3/n;aver_4=1.0*sum_4/n;aver_5=1.0*sum_5/n;aver_sum=aver_1+aver_2+aver_3+aver_4+aver_5;printf(总共%d名学生,具体数据为:n,n); printf(语文最高分为%d,最低分为%d,平均分为%.2fn,max_1,min_1,aver_1);printf(数学最高分为%d,最低分为%d,平均分为%.2fn,max_2,min_2,aver_2);printf(英语最高分为%d,最低分为%d,平均分为%.2fn,max_3,

36、min_3,aver_3); printf(计算机最高分为%d,最低分为%d,平均分为%.2fn,max_4,min_4,aver_4);printf(物理最高分为%d,最低分为%d,平均分为%.2fn,max_5,min_5,aver_5);printf(总分最高分为%d,最低分位%d,平均分为%.2fn, max_sum,min_sum,aver_sum); void find(Student *head)Student *p;int choose,fnum;char tem20;if (n=0) printf(n当前系统没有任何学生数据!n );return;for(;) printf(

37、n请输入您要查询学生的方式:nn); printf(1、按学号查询;2、按姓名查询;0、放弃查询nn); printf(请选择:); scanf(%d,&choose); while(getchar()!=n); if (choose=1) printf(n请输入你要查询的学生的学号,输入0退出学号查询:); scanf(%d,&fnum); for(;fnum;) for(p=head-next;p!=NULL&p-num!=fnum;p=p-next); if (!p) printf(nn查找不到要查询的学号,请重新输入,输入0表示结束:); scanf(%d,&fnum); else if (p-num=fnum) printf(n学号为%d学生的数据为:n,p-num); printf(学号t姓名t语文成绩 数学成绩 英语成绩 计算机成绩 物理成绩 总分n); printf(%dt%st %d %d %d %d %d %dn,p-num, p-name,p-score0,p-score1,p-score2,p-score3, p-sum); printf(nn请输入你还要查询的学生的学号,输入0表示不按学号查询:); scanf(%d,&fnum); else if (choose=2) printf(n请输入你要查询的学生的姓名,输入0退出姓名查询:);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论