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

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

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

1、-C语言课程设计-学生成绩管理系统-第 17 页中 国 地 质 大 学本科生课程论文封面课程名称 C语言课程设计 教师姓名 李章林 本科生姓名 本科生学号 本科生专业 所在院系 类别: 日期: 2013年12月31日 课程设计评语对课程论文的评语:平时成绩:课程论文成绩:总 成 绩:评阅人签名:注:1、无评阅人签名成绩无效;2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。目 录课程设计评语2目 录31课程论文题目42程序设计思路43功能模块图54数据结构设计55算法设计66程序代码107程序运行结果188编程中遇到的困难及解决方法229总结

2、心得及良好建议2210致谢23一、课程论文题目:学生成绩管理系统1:题目要求请设计学生成绩管理系统,实现学生信息的录入,显示,查找,添加,保存,删除,插入等功能模块。要求功能选择用菜单实现,数据输入和结果输出要求有文件存放。原始数据文件格式:学号 姓名 英语 C语言 高等数学 平均成绩01 张三 75 85 80 8002 李四 2:需求分析根据题目要求,由于学生信息总是存放在文件中,所以应提供文件的输入,输出等操作;在程序中需要浏览学生的信息,应提供显示,查找,排序等操作;另外还应提供键盘式选择菜单实现功能选择。3:总体设计根据上面的需求分析,可以将这个系统的设计分为:数据输入模块、数据显示

3、模块、数据查找模块、数据插入模块、成绩排序模块和成绩保存模块等。二、程序设计思路这次是初次要自主设计一个程序系统。系统要求实现学生信息的录入、显示、查找、添加以及成绩排序等功能。对于几个功能,可分别设置7个部分。根据需求分析,可以将这个系统分为以下模块:输入模块,录入模块,修改模块,保存模块,查询功能模块,删除功能模块,以及排序模块.1、 用户输入模块在此模块中用户根据自己的需求输入数字17中的任意一个数字,实现相应的功能。2、 信息录入功能模块此模块可以让用户输入每个学生的信息:学号、姓名、英语成绩、C语言成绩、高等数学成绩、平均成绩。用户可以连续输入学生的信息,或者删除或者查询,也可以保存

4、当前已录入的信息。3、 修改学生成绩模块用户可以根据实际情况的变化修改已录入的学生成绩的信息,跟实际同步。4、 文件保存模块用户可以在确定已录入的信息无误之后将学生的信息存为一个数据文件。已保存的信息可以再文件中查看也可以在程序中进行查看。用户输入的学生信息可以随时保存。5、 查询功能模块在此模块里,用户可以根据提示输入所想要查询的学生的学号以查询学生的信息。6、 删除功能模块、在此模块里,用户可以根据自己的需求选择想要删除的学生信息,选择之后程序会再次确认,以防误删。 7、排序功能模块 在此模块中,程序会将用户已录入的信息按平均成绩由低到高进行排序。三、功能模块图:开始x值 1值 2值 7值

5、 6值 5值 4值 3查询模块修改退出排序模块保存模块删除模块添加模块用户输入并将值保存至xx结束四、数据结构设计struct xueshengchengji /*声明学生成绩数据结构体*/char xuehao10; /*学生学号*/char name10; /*学生姓名*/float cyuyan; /*c语言成绩*/float math; /*高数成绩*/float english; /*英语成绩*/ float average; /*平均成绩*/struct xueshengchengji chengji100,*p=chengji; /*声明记录学生成绩情况的100个元素的结构体数组

6、*/五、算法设计开始选择需要的功能输入学生信息结束1、添加模块void add() printf (t请输入学生学号:);fflush(stdin); /*清除键盘缓冲区*/gets(chengji+n.xuehao);printf(tttt请输入学生姓名:);gets(chengjin.name);printf(tttt请输入该学生的英语成绩:);scanf(%f,&chengjin.cyuyan);printf(tttt请输入该学生的C语言成绩:);scanf(%f,&chengjin.math);printf(tttt请输入该学生的高等数学成绩:);scanf(%f,&chengjin.

7、english); /*计算总成绩*/chengjin.average=(chengjin.cyuyan+chengjin.math+chengjin.english)/3; /*输出内容*/printf(ntttt该学生成绩为:%f,chengjin.average);开始输入要修改的学生学号输入新的学生信息结束printf(nntttt按任意键返回.);getch();2、修改模块void modify ( )char xuehao10; /*接收学生学号字符数组*/int i; /*循环变量*/if (n=-1) /*人数为0说明成绩记录尚未添加*/printf(nntt当前还没有学生成

8、绩记录,按任意键返回主菜单.);getch( );return;printf(t请输入学生学号:); /*提示信息*/gets(xuehao); /*从键盘读取字符串*/for (i=0;i=n;i+) /*在学生总数范围内循环查找*/if(strcmp(chengjii.xuehao,xuehao)=0) /*比较并找到*/*显示该学生成绩情况*/printf(nttt 该学生成绩情况如下: );printf(nttt=nn); printf(学号 姓名 平均成绩); printf(英语 C语言 高等数学); printf(%-6s%-6s,chengjii.xuehao,chengjii.

9、name); printf(%,chengjii.cyuyan,chengjii.math,chengjii.english,chengjii.average);/*接受该学生新的成绩情况*/ printf(ntt 请输入该学生新的英语成绩: );scanf (%f,&chengjii.cyuyan); printf(ntt 请输入该学生新的C语言成绩: );scanf (%f,&chengjii.math); printf(ntt 请输入该学生新的高等数学成绩: );scanf (%f,&chengjii.english);3、查询模块开始输入要查询的学生学号输出学生信息结束/*查询学生成绩

10、(依据学号)*/void find()char xuehao10; /*接收学生学号字符数组*/ int i; /*循环变量*/ if(n=-1) /*人数为0说明成绩记录尚未添加*/printf(nntt当前还没有学生成绩,按任意键返回主菜单.);getch();return;printf(t请输入学生学号:); /*提示信息*/gets(xuehao); /*从键盘读取字符串*/for(i=0;i=n;i+) /*在职工总数范围内循环查找*/if(strcmp(chengjii.xuehao,xuehao)=0) /*比较并找到*/printf(n 该学生成绩情况如下:); printf(

11、n=nn);printf(学号 姓名);printf(英语 C语言 高等数学 平均成绩);printf(%-6s%-6s%,chengjii.xuehao,chengjii.name);printf(%,chengjii.cyuyan,chengjii.math,chengjii.english,chengjii.average);printf(n 按任意键返回主菜单.);getch();break;if(i=n+1)printf(ntt您所输入的学生学号有误或不存在!);printf(按任意键返回主菜单.);getch();return;4、删除模块输入要删除学生学号开始判断是否要删除删除学

12、生记录结束语NYvoid del()char xuehao10; int i,j; char d; printf(t请输入待删除学生学号:);gets(xuehao);for(i=0;i=n;i+) if(strcmp(chengjii.xuehao,xuehao)=0)printf(ntt你确认要删除%s号学生成绩信息么(y/n)?,chengjii.xuehao );d=getche();if(d=y|d=Y) if(i=n) n-;else for(j=i;j=n;j+) strcpy(chengjij.xuehao,chengjij+1.xuehao);strcpy(chengjij.

13、name,chengjij+1.name);chengjij.english=chengjij+1.english;chengjij.math=chengjij+1.math; chengjij.cyuyan=chengjij+1.cyuyan;n-;printf(nntt该学生记录成功删除,按任意键返回主菜单.);getch();break; else printf(nntt你选择了不删除该学生记录,按任意键返回主菜单.);getch();return;if(i = n+1) printf(ntt本班级无此学号,按任意键返回主菜单.);getch();开始选择需要的功能按成绩低到高排序结束5

14、、排序模块void rank() int i,j; printf(t按平均成绩排序如下n);for (i=0;in;i+)for(j=i+1;jchengji j.average)*p=chengjij;chengjij=chengjii;chengjii=*p;printf(%-6s%-6s,学号,姓名); printf(%-12s%-6s%12s%-9sn,英语,C语言,高等数学,平均成绩);for(i=0;i=n;i+) printf(%-6s%-6s,chengjii.xuehao,chengjii.name); printf(%9.2f%n,chengjii.cyuyan,cheng

15、jii.math,chengjii.english,chengjii.average); printf(nntttt按任意键返回.); getch();六、程序代码nclude /*基本的输入输出函数*/#include /*getch()及getche()函数包含在此*/#include /*字符串相关函数*/#include #define TRUE 1/*以下函数为自定义函数声明语句*/void read(); /*从数据文件中读取学生成绩数据*/void write(); /*从学生成绩数据文件写入记录*/void find(); /*查询学生成绩数据记录*/void modify()

16、; /*修改学生成绩数据记录*/void add(); /*向学生成绩数据文件中增加记录*/void del(); /*从学生成绩数据文件中删除记录*/void rank(); /*排列学生成绩*/struct xueshengchengji /*声明学生成绩数据结构体*/char xuehao10; /*学生学号*/char name10; /*学生姓名*/float cyuyan; /*c语言成绩*/float math; /*高数成绩*/float english; /*英语成绩*/float average; /*平均成绩*/struct xueshengchengji chengji

17、100,*p=chengji; /*声明记录学生成绩情况的100个元素的结构体数组*/int n = -1; /*声明统计学生人数的变量*/void main() char ch;read(); /*从数据文件中读取学生成绩数据并初始化学生成绩结构体数组*/while(TRUE) system(cls); /*清屏命令*/printf(tt请选择(1-7):n);printf(tt=n); printf(ttt 1.查询学生成绩记录n);printf(ttt 2.修改学生成绩记录n);printf(ttt 3.添加学生成绩记录n);printf(ttt 4.删除学生成绩记录n);printf(

18、ttt 5.保存学生成绩记录n);printf(ttt 6.成绩排序n);printf(ttt 7.退出n);printf(tt=n); printf(ntt);ch=getch();switch(ch) case 1:find();break; /*查询*/case 2:modify();break; /*修改*/case 3:add();break; /*添加*/case 4:del();break; /*删除*/case 5:write();break; /*保存*/case 6:rank();break; /*排序*/case 7:return; /*退出*/default:print

19、f(tt n);getch();return;/*从数据文件cj.dat中读取学生成绩数据到数据组chengji中*/void read()FILE * file; /*声明文件指针*/if(file=fopen(cj.dat,rb)=NULL)/*以二进制方式打开学生成绩数据文件,并判断是否失败*/ printf(nnt 学生成绩数据文件无法打开,或为空!);printf(nnt 按任意键进入主菜单.);getch();return;else /*文件打开成功时*/n+; /*计算结构体数组下标*/while(fread(&chengjin,sizeof(chengjin),1,file)

20、= 1)n+;fclose(file); /*关闭文件指针*/printf(nnt学生成绩数据读取完毕n,n);n-; /*计算学生记录总数*/*向学生成绩数据文件中写入记录*/void write()FILE *file; /*声明文件指针*/if(n = -1) /*学生人数为 0 时*/printf( 没有数据可存!按任意键返回主菜单 n);getch();return;if(file=fopen(cj.dat,wb)!=NULL)/*以二进制方式打开学生成绩数据文件,并判断是否失败*/fwrite(&chengji0,sizeof(chengji0),n+1,file); /*所有记录

21、一次写入文件*/fclose(file); /*关闭文件指针*/printf(nntt%d条学生记录保存完毕!n,n+1);else /*文件打开不成功时*/printf(tt无法打开学生成绩数据文件!n);printf(ntt按任意键返回主菜单. );getch();/*查询学生成绩(依据学号)*/void find()char xuehao10; /*接收学生学号字符数组*/int i; /*循环变量*/if(n=-1) /*人数为0说明成绩记录尚未添加*/printf(nntt当前还没有学生成绩,按任意键返回主菜单.);getch();return;printf(t请输入学生学号:);

22、/*提示信息*/gets(xuehao); /*从键盘读取字符串*/for(i=0;i=n;i+) /*在学生总数范围内循环查找*/if(strcmp(chengjii.xuehao,xuehao)=0) /*比较并找到*/printf(n 该学生成绩情况如下:);printf(n=nn);printf( 学号 姓名);printf( 英语 C语言 高等数学 平均成绩n); printf(%6s%6s,chengjii.xuehao,chengjii.name);printf(%,chengjii.cyuyan,chengjii.math,chengjii.english,chengjii.a

23、verage);printf(n 按任意键返回主菜单.);getch();break;if(i=n+1)printf(ntt您所输入的学生学号有误或不存在!);printf(按任意键返回主菜单.);getch();return;void list()int i;system(cls);printf(nnttt 全体学生成绩情况如下n);printf(ttt=nn);printf(学号 姓名 );printf(英语 C语言 高等数学 平均成绩);for(i=0;i=n;i+)printf(%6s%6s%9s,chengjii.xuehao,chengjii.name,chengjii.avera

24、ge);printf(%,chengjii.english,chengjii.math); void modify ( )char xuehao10; /*接收学生学号字符数组*/int i; /*循环变量*/if (n=-1) /*人数为0说明成绩记录尚未添加*/printf(nntt当前还没有学生成绩记录,按任意键返回主菜单.);getch( );return;printf(t请输入学生学号:); /*提示信息*/gets(xuehao); /*从键盘读取字符串*/for (i=0;i=n;i+) /*在学生总数范围内循环查找*/if(strcmp(chengjii.xuehao,xueh

25、ao)=0) /*比较并找到*/*显示该学生成绩情况*/printf(nttt 该学生成绩情况如下: );printf(nttt=nn);printf( 学号 姓名);printf( 英语 C语言 高等数学 平均成绩n); printf(%6s%6s,chengjii.xuehao,chengjii.name);printf(%,chengjii.cyuyan,chengjii.math,chengjii.english,chengjii.average);/*接受该学生新的成绩情况*/printf(ntt 请输入该学生新的英语成绩: );scanf (%f,&chengjii.cyuyan)

26、;printf(ntt 请输入该学生新的C语言成绩: );scanf (%f,&chengjii.math);printf(ntt 请输入该学生新的高等数学成绩: );scanf (%f,&chengjii.english);/*计算总成绩*/chengjii.average=(chengjii.cyuyan+chengjii.math+chengjii.english)/3; /*同屏显示计算结果*/printf(nttt 该学生成绩是: %f,chengjii.average);printf(nntt 该学生成绩数据修改成功! 按任意键返回主菜单.);getch();return ;pri

27、ntf(ntt 您所输入的学生学号有误或不存在! );printf(按任意键返回主菜单.);getch();return;/*向学生管理系统中则增加记录*/void add()printf (t请输入学生学号:);fflush(stdin); /*清除键盘缓冲区*/gets(chengji+n.xuehao);printf(tttt请输入学生姓名:);gets(chengjin.name);printf(tttt请输入该学生的英语成绩:);scanf(%f,&chengjin.cyuyan);printf(tttt请输入该学生的C语言成绩:);scanf(%f,&chengjin.math);

28、printf(tttt请输入该学生的高等数学成绩:);scanf(%f,&chengjin.english);/*计算总成绩*/chengjin.average=(chengjin.cyuyan+chengjin.math+chengjin.english)/3; /*输出内容*/printf(ntttt该学生成绩为:%f,chengjin.average);printf(nntttt按任意键返回.);getch();/*从学生成绩数据文件中删除记录*/void del()char xuehao10; /*接收学生学号字符数组*/int i,j; /*循环变量*/char d; /*接收确认删

29、除字符:y/n*/printf(t请输入待删除学生学号:);gets(xuehao);for(i=0;i=n;i+) /*在学生总数范围内循环查找*/ if(strcmp(chengjii.xuehao,xuehao)=0) /*比较并找到*/printf(ntt你确认要删除%s号学生成绩信息么(y/n)?,chengjii.xuehao );d=getche();if(d=y|d=Y) /*确认删除*/if(i=n) /*如果是最后一条记录*/n-;else /*不是最后一条记录*/for(j=i;j=n;j+) /*从该记录开始后续记录更新前一条记录*/strcpy(chengjij.xu

30、ehao,chengjij+1.xuehao); strcpy(chengjij.name,chengjij+1.name);chengjij.english=chengjij+1.english;chengjij.math=chengjij+1.math;chengjij.cyuyan=chengjij+1.cyuyan;n-;printf(nntt该学生记录成功删除,按任意键返回主菜单.); getch();break;else /*未确认删除记录*/printf(nntt你选择了不删除该学生记录,按任意键返回主菜单.);getch();return;if(i = n+1) /*未找到指定

31、学号或未删除记录*/ printf(ntt本班级无此学号,按任意键返回主菜单.);getch();/*排列学生的成绩*/void rank()int i,j; /*循环变量*/printf(t按平均成绩排序如下n);for (i=0;in;i+)for(j=i+1;jchengji j.average)*p=chengjij;chengjij=chengjii;chengjii=*p;printf(%-6s%-6s,学号,姓名);printf(%-12s%-6s%12s%-9sn, 英语, C语言,高等数学,平均成绩); for(i=0;i=n;i+)printf(%-6s%-6s,cheng

32、jii.xuehao,chengjii.name);printf(%n,chengjii.cyuyan,chengjii.math,chengjii.english,chengjii.average);printf(nntttt按任意键返回.);getch();七、程序运行结果1、主菜单2、修改学生成绩记录3、添加学生成绩记录4、删除学生成绩记录5、保存成绩6、成绩排序7、 查询学生成绩记录八、编程中遇到的困难及解决方法这一次的C语言课程设计报告是我第一次将C语言运用于实际,在这次的实习中,我遇到了很多问题,但最终我都将这些问题解决了,完成了这一次的C语言课程设计的实习。问题1:题目所包含的程

33、序功能太多,自己不能有一个整体的认识,不知道该从那里开始时这一次的程序设计。解决方法:老师给了我们一个程序的框架,并且告诉我们先确定主函数,再编写详细的程序功能。问题2:在这一次的程序设计中,需要运用到很多自己之前都不会的函数。解决方法:大致了解C语言中主要函数的用法,让自己有印象,在需要用到相应函数的时候再弄清楚使用方法。问题3:在编写程序的时候总是会出现很多错误,每次在调试的时候总会显示有错,而且很多问题自己找不出来也不会改正。解决方法:在和同学讨论之后还是无法解决的话就会向老师寻求帮助,问老师的意见,听了老师的讲解之后,记住错误的原因,避免再次犯错。九、总结心得及良好建议通过本次设计课学

34、到了很多,相比之前的C语言实习课,难度有很大的提升,以前仅仅涉及变量,函数和条件语句,和循环语句等基本概念,而现在设计程序时要完全掌握程序的实际应用。前两次上课的时候,对于本次的题目“学生成绩管理系统”感觉无从下手,在仔细地看书和查找资料后,开始进行设计。设计的过程中并没有想象地顺利,花了大量的时间和经历写完的程序,一运行却发现很多错误,又重新修改。按着分为添加,修改,删除等不同板块,一步步地坚持了下来。最后摒弃了花哨的欢迎界面,采用简洁的界面,并经考量后添加了sleep函数,使得程序执行挂起一段时间,做了最后的完善。建议学校以后能将C语言设计课的时间整体加长到10次课,本次的程序设计课在课下也花了不少时间才最终完成,如果能将时间加长,更利于与老师同学交流,从而取得更好的结果。十、致谢 感谢老师,在我们实习的过程中进行详尽的指导,并给予了极大的帮助;感谢同学,在为自己设计的程序错误在何处而苦恼时,认真地提出了建设性的意义;感谢自己,在有些繁重的设计程序中一路坚持下来,没有放弃。最后祝章老师:新年快乐,合家幸福!

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

当前位置:首页 > 教育专区 > 单元课程

本站为文档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