C语言课程设计-学生成绩管理系统(共17页).doc

上传人:飞****2 文档编号:12191582 上传时间:2022-04-24 格式:DOC 页数:17 大小:91.50KB
返回 下载 相关 举报
C语言课程设计-学生成绩管理系统(共17页).doc_第1页
第1页 / 共17页
C语言课程设计-学生成绩管理系统(共17页).doc_第2页
第2页 / 共17页
点击查看更多>>
资源描述

《C语言课程设计-学生成绩管理系统(共17页).doc》由会员分享,可在线阅读,更多相关《C语言课程设计-学生成绩管理系统(共17页).doc(17页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、精选优质文档-倾情为你奉上青岛农业大学课程设计报告 题 目: 学生成绩管理系统 姓 名: 张洋 学 院: 理学与信息科学学院 专 业: 通信工程 班 级: 1班 学 号: 指导教师: 李吉忠 2013年9月4日 目 录一 设计目的.3二 课程设计的内容.3三 课程设计的要求与数据.3四 课程设计应完成的工作.4五 总体设计(包含几大功能模块).4六 详细设计(各功能模块的具体实现算法流程图).5七 调试分析(包含各模块的测试用例,及测试结果).6八 总结.16九 参考资料.17一 设计目的进一步加深、巩固所学专业课程(C语言程序设计)的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解

2、决问题的能力。掌握运用C语言独立地编写、调试应用程序和进行其它相关设计的技能。二 课程设计的内容对学生信息(包括学号、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出.将学生的成绩信息进行记录,信息内容包含:(1)学生的学号(2)学生的姓名(3)学生的成绩。假设,现收集到了一个班学生的所有成绩信息,要求用C语言编写一个简单的成绩管理系统,可进行录入、查询、修改和浏览等功能。学习相关开发工具和应用软件,熟悉系统建设过程。三 课程设计的要求与数据1、用C语言实现系统;2、对学生信息(包括学号、姓名、语文、数学、英语、平均分)进行管理,包括学生成绩的信息

3、输入、输出、查询、删除、排序、统计、退出.3、学生信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能:1)输入记录模块。输入记录模块主要完成将数据存入单链表中的工作。在此成绩管理系统中,记录可以从以二进制形式存储的数据文件中读入,也可从键盘逐个输入学生记录。学生记录由学生的基本信息和成绩信息字段构成。当从数据文件中读入记录时,它就是在以记录为单位存储的数据文件中,将记录逐条复制到单链表中。2)查询记录模块。查询记录模块主要完成在单链表中查找满足相关条件的学生记录。在此成绩管理系统中,用户可以按照学生的学号或姓名在单链表中进行查找。若找打该学生的记录,则返回指向该学生的指针。

4、否则,返回一个值为NULL的空指针,并打印出未找到该学生记录的提示信息。3)更新记录模块。更新记录模块主要完成对学生记录的维护。在此成绩管理系统中,它 实现了对学生记录的修改、删除、插入和排序操作。一般而言,系统进行论文这些操作之后,需要将修改的数据存入源数据文件。4)统计记录模块。统计记录模块主要完成对各门功课最高分和不及格人数的统计。5)输出记录模块。输出记录模块主要完成两个任务。第一,它实现对学生记录的存盘操作,即将单链表中的各节点中存储的学生记录信息写入数据文件中。第二,它实现将单链表中存储的学生记录信息以表格的形式在屏幕上打印出来。四 课程设计应完成的工作(1)编写算法;(2)算法测

5、试,并有具体的测试结果和结果分析;(3)撰写课程设计报告。内容包括:1) 封面扉页2) 设计任务书3) 目录4) 总体设计方案(包括流程图)5) 使用说明及运行实例(包括界面)6) 成员设计内容简介7) 项目源程序代码(注意注释的使用)8) 指导教师评语五 总体设计(包含几大功能模块) 1、成绩录入功能2、成绩查询功能3、成绩更新功能4、统计功能 5、输出功能 6、退出系统六 详细设计(各功能模块的具体实现算法流程图)6.1各函数的功能和实现1、输入初始的学生信息:输入信息包括学生的姓名、学号以及学生的成绩等相关信息;可用函数void input(STUDENT *data, int *len

6、)来实现此操作。 2、成绩输出模块:输出学生的信息以及成绩void output(STUDENT *data, int len):通过学生的姓名来查看学生的相关成绩,同时也可以分别通过caverage()、maverage()、eaverage()和comaverage()来输出成绩的平均分数、最高和最低分数。3、成绩查询模块:可用void find(STUDENT *data, int len)来实现。找到就输出此学生全部信息。4、删除模块:用函数void delete_item(STUDENT *data, int *len)来实现5、排序模块:用函数void sort(STUDENT *

7、data, int len)来实现6、统计功能能:用函数void stat(STUDENT *data, int len) 来实现7、退出系统:可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。 如图结束开始输出菜单根据菜单输入n的值选择程序输入退出输出保存查找排序统计插入删除七 调试分析(包含各模块的测试用例,及测试结果) 7.1源程序#include #include#include #include #define LEN sizeof(Student)typedef struct studentint num;char name20;int

8、score4;int sum;struct student *next;Student;int n;Student *cin(void); Student *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;h

9、ead=(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(请输入第%d名学生的英语成绩:,n);scanf(%d,&p1-score1);p

10、rintf(请输入第%d名学生的计算机成绩:,n);scanf(%d,&p1-score2);printf(请输入第%d名学生的物理成绩:,n);scanf(%d,&p1-score3);p1-sum=p1-score0+p1-score1+p1-score2+p1-score3;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 choose;for(;

11、) printf(ntt# # # # # 学生成绩统计排序 # # # #n);printf(tt#t1.按学生学号排序t #n);printf(tt#t2.按学生总分排序t #n);printf(tt#t3.按学生高数成绩排序t #n);printf(tt#t4.按学生英语成绩排序t #n);printf(tt#t5.按学生计算机成绩排序t #n);printf(tt#t6.按学生物理成绩排序t #n);printf(tt#t7.单科高分及均分t #n);printf(tt#t8.显示当前学生成绩t #n);printf(tt#t0.返回上一级菜单t #n);printf(tt# # #

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

13、t_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;break;cas

14、e 4:if (pm-score1score1) pm=p2;break;case 5:if (pm-score2score2) pm=p2;break;case 6:if (pm-score3score3) 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 sort_2(Student *head)Student *p=head-next;int max_1,max_2,ma

15、x_3,max_4,min_1,min_2,min_3,min_4;int max_sum,min_sum;int sum_1=0,sum_2=0,sum_3=0,sum_4=0;float aver_1,aver_2,aver_3,aver_4,aver_sum;if (!p) return;max_1=min_1=p-score0;max_2=min_2=p-score1;max_3=min_3=p-score2;max_2=min_2=p-score3;max_sum=min_sum=p-sum;for(;p;p=p-next)if (max_1score0) max_1=p-score

16、0;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 (max_4score3) max_4=p-score3;else if (min_4p-score3) min_4=p-score3;if (max_sumsum) max_sum=p-sum;else if (min_sum

17、p-sum) min_sum=p-sum; sum_1+=p-score0;sum_2+=p-score1;sum_3+=p-score2;sum_4+=p-score3;aver_1=1.0*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_sum=aver_1+aver_2+aver_3+aver_4;printf(总共%d名学生,具体数据为:n,n); printf(高数最高分为%d,最低分为%d,平均分为%.2fn,max_1,min_1,aver_1);printf(英语最高分为%d,最低分为%

18、d,平均分为%.2fn,max_2,min_2,aver_2);printf(计算机最高分为%d,最低分为%d,平均分为%.2fn,max_3,min_3,aver_3); printf(物理最高分为%d,最低分为%d,平均分为%.2fn,max_4,min_4,aver_4);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

19、 );return;for(;)printf(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(%

20、d,&fnum);else if (p-num=fnum)printf(n学号为%d学生的数据为:n,p-num);printf(学号t姓名t高数成绩 英语成绩 计算机成绩 物理成绩 总分n);printf(%dt%st %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退出姓名查询:);scanf(%s,

21、tem); for(;strcmp(tem,0);)for(p=head-next;p!=NULL&strcmp(p-name,tem);p=p-next);if (!p)printf(nn没有找到您要查询的姓名,请重新输入,输入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 %dn,p-num,p-name,p-score0,p-score1,p-sco

22、re2,p-score3,p-sum);printf(nn请输入您还要查询的学生的姓名,输入0表示不按姓名查询了:);scanf(%s,tem); else if (choose=0) printf(n您选择了不查询!n);break;else printf(n您以其他方式选择了不查询!n);break;Student *add_new(Student *head)Student *p;int flag; printf(nn请输入您要新加入学生的学号,学号为0表示结束输入:); scanf(%d,&flag);while(getchar()!=n);for(;flag;)p=(Student

23、*)malloc(LEN);p-num=flag;printf(请输入新加入学生的姓名:,n);scanf(%s,p-name); printf(请输入新加入学生的高数成绩:,n);scanf(%d,&p-score0);printf(请输入新加入学生的英语成绩:,n);scanf(%d,&p-score1);printf(请输入新加入学生的计算机成绩:,n);scanf(%d,&p-score2);printf(请输入第%d名学生的物理成绩:,n);scanf(%d,&p-score3);p-sum=p-score0+p-score1+p-score2+p-score3;p-next=hea

24、d-next;head-next=p;n+;printf(n请输入还要加入学生的学号,没有此学生则输入0表示结束:); scanf(%d,&flag);head=sort_1(head,1);printf(加入后的成绩表为:n);print(head); return head;void print(Student *head)Student *p=head-next;if (!p) printf(nn此系统目前没有任何学生数据!nnn);return;printf(此系统目前共计学生%d名:n,n); printf(*学生成绩总汇*n);printf(学号t姓名t高数成绩 英语成绩 计算机成

25、绩 物理成绩 总分n);for(;p;p=p-next)printf(%dt%st %d %d %d %d %dn,p-num,p-name,p-score0,p-score1,p-score2,p-score3,p-sum=p-score0+p-score1+p-score2+p-score3); printf(* - *nn);int main()Student *head;int choose,i;head=(Student *)malloc(LEN);head-next=NULL; for(;)printf(ntt* * * * * 学生成绩管理系统 * * * *n);printf(

26、tt*t1.学生数据键盘录入t *n);printf(tt*t2.学生数据统计排序t *n);printf(tt*t3.查询学生数据tt *n);printf(tt*t4.插入学生数据tt *n);printf(tt*t5.显示当前成绩表t *n);printf(tt*t0.退出成绩管理系统t *n);printf(tt* * * * * * * * - * * * * * * * nn); printf(n请输入你要执行的操作:);scanf(%d,&choose);while(getchar()!=n);switch(choose)case 1:printf(ntttt*注意*); pri

27、ntf(nn 此选项将会建立新的学生数据系统 ,原来的数据将不再存在,你确信要删除原来的数据并建立新的数据系统么?nn);printf(1、建立新的数据系统;0、放弃建立新的数据系统。nn);printf(请选择:);scanf(%d,&i);if (i=1) head=cin();print(head);break;else if (i=0) printf(n您选择了放弃建立新的数据系统!n);break;else printf(您做出了别的选择,当作放弃建立!n);break; case 2:head=sort_all(head);break;case 3:find(head);break

28、;case 4:head=add_new(head);case 5:print(head);break;case 0:system(pause);return 0;default: printf(nn您的输入有误!请重新输入:nn);break; 7.2.2主要程序运行结果(1)运行开始,如图。(2)输入数字1,然后按Enter键,如图。(3)输入数字1,然后按下Enter键,就可以输入考生数据,如图。(4)输入数字键2,然后按下Enter键,即可得到学生成绩的排序,如图。(5)输入数字键0,按下Enter键,最后按任意键即可退出系统了,如图。八 总结 由于本课题中的许多知识点都没有学过都要靠

29、自己到课外的资料中去查找。在用的时候难免出现这样那样的错误。如开始设计出来的菜单不是预想的那样,而是总个窗中出现混乱。解决的这个问题的办法是调整。一个系统的菜单和提示信息非常重要。如果没有这些用户根本不知道怎么用你设计的这个系统。在设计的调试过程中也无法顺利的完成调试工作。有了一个清晰简单的菜单和一些提示信息这后,调试过程完成的非常顺利。回顾起此次课程设计,我感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,在整整两个礼拜的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,

30、只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体通过这次课程设计之后,一定把以前所学过的知识熟悉了,本次课程设计结束了,我们通过这次实践学到了许多知识。学到了设计一个简单的系统。要注意哪些方面。也使我们知道自己哪些方面做得还不够。这不仅是程序设计,更是锻炼我们处理问题的能力,同时也使我们了解到团队合作的可贵.

31、编写程序是件细心活,稍不留神就会出错,这就必须要求我们对待事情要认真!在编写程序的过程中,错误不断出现,不同的类型(如少写了一个符号,写错了字母,用错了函数等等)层出不穷,这考验我们待事细心,耐心,能不能坚持到底,不能半途而废。但我们总结出了一点点的经验如下:1、要对系统的功能和要求做出详细的分析,并合理分解任务。2、把分解出来的子任务,做给一个相对独立的模块。3、在设计一个模块之前,要简单构想一下总界面的显视情况。4、针对构想出来的界面进行程序的编写。九 参考资料1谭浩强. C程序设计(第三版) . 北京:清华大学出版社, 2005 2谭浩强. C程序设计题解与上机指导(第三版) . 北京:清华大学出版社, 20053李春葆,张植民,肖忠付.C语言设计题典M.北京:清华大学出版社,20024网上相关资料 专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com