




免费预览已结束,剩余11页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学生成绩管理系统C语言程序设计实训报告姓 名 专 业 班 级 指导教师 2011 年 7月14日目录一 、实训目的和要求:1二 、实训任务内容:1三 、详细设计说明:1四 、软件使用说明:2五 、实训心得与体会:5参考文献:6附录:部分程序清单614一 、实训目的和要求:软件技术专业重要的实践性环节之一,是学生在学习完课程后的一次全面的综合练习。通过实训巩固和加深学生对C语言课程的基本知识的理解和掌握,掌握C语言编程和程序调试的基本技能,利用C语言进行基本的软件设计,掌握书写程序设计说明文档的能力,提高运用C语言解决实际问题的能力。实训要求:1. 分析实训题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用4. 设计完成后提交实训报告二 、实训任务内容:1具备对成绩的管理功能(添加、删除、排序)2具备对成绩的统计功能(最高分,最低分,平均分,及格率等)3具备按学号、姓名、或课程名查询成绩的功能。备注:成绩记录以下信息:班级,学号,姓名,课程名,成绩(百分制)。可以用能表示学生成绩的结构体数组存储数据。三 、详细设计说明:1Main()函数,应用程序的入口。1 进入程序以后,要先创建数据库,添加学生信息。用函数Student Create(),以Head为头指针输入并且创建链表。通过count循环来完成计数。通过结构体struct student来保存学生的学号、姓名、班级、课程名、成绩等有关信息。并且通过cin函数来进行给当前学生输入初始信息。2 数据的存储。对于文件的数据的写入 在写入完成后一定要刷新缓冲区文件 才能保证数据真正从缓冲区输出到 否则无效使用完文件一定要关闭 。所以用fflush刷新文件。要不内容是不会输出到文件的。3 Void how_Info(Student head),在进行插入数据后来显示数据,通过一个头节点开遍历链表。void Delete(unsigned int DeleteNumber),通过查询学号删除数据。int GetCount(Student head),获得链表节点个数 也就是学生的个数 一是通过 s_sount获得 2是遍历链表。foat Max_Score(Student head),寻找最大数据。Float ShowPass(Student head),显示及格率。float fAverage(Student head),写入文件的平均分。void WriteData(Student head),向文件写数据 c:score.txt。4.程序开始运行以后,通过输入要执行的命令编号,来选择要执行的命令,如果命令错误,则返回主界面重新输入要执行的命令编号。如果输入正确,则命令按要求执行,并且按照命令提示进行相关操作。操作完成后,暂停1s,会自动返回主界面。7学生成绩管理系统流程图,如图1所示:Main( )暂停1s,返回主界面主界面显示输入要执行的命令添加最高分最底分命令正确 是平均分及格率保存 否 图1 流程图四 、软件使用说明:1在VC+6.0上先编译,再执行程序,得到主窗口。如图2示: 图2 显示主窗口2从键盘输入数字1,按下回车。按提示要求添加学生成绩等信息。如图3示: 图3 添加学生成绩3输入完毕学生信息后。根据提示按下回车键,返回主界面。再输入数字2,查看已输入的学生成绩信息。如图4示: 图4 显示已输入信息4查看完毕所输入信息后,按回车键返回主菜单。再输入数字3,按下回车查看所输入成绩的最高分。如图5示:图5 查看最高分5查看完毕后,按回车键返回主菜单。再输入数字4,按下回车查看所输入成绩的最低分。如图6示: 图6 查看最底分6再按回车键返回主菜单。输入数字5,按下回车键。键入所需要删除的学生学号。通过学号删除该学生的有关成绩等信息。如图7示:图7 删除该学生信息7输入数字6.,按下回车。查看及格率。、如图8示:图8 查看及格率8输入数字7,求输入所有成绩的平均分。如图9示: 图9 查看平均分9输入数字8,保存所添加的学生成绩信息到指定文件夹。如图10所示。图10 保存信息10输入数字9退出程序。如图11所示。 图11 退出程序五 、实训心得与体会:课程设计是培养学生综合运用所学知识 ,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好C语言课程设计是十分必要的。 回顾起此次课程设计,至今我们仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在两个周的时间里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。 我做的是学生成绩管理系统,虽然是很简单的一个小的程序,但对我一个初学者来说却是一个很大的困难。更加是第一次做课程设计,所以连续做了几天却丝毫没有进展,最主要是不知从何开始,这个时候才知道上课老师们不厌其烦的教导是多么的宝贵,这个时候才后悔上课的时候没有认真的听讲。可是现在一切都晚了,还好时间还算是充裕,只好拿出书本重新复习一下。特别是结构体,指针的部分,几乎是一片空白。不过经过几天的努力,大体上把课本上的知识点看了一遍,知识点也都基本是撑握了,所以一下一步就是开始正式的编程序了。不过毕竟是个新手,还是不知如何下手,于是就在网上下了一篇类似的程序,经过仔细的研究,终于读懂了C语言编程的基本过程和方法。 经过一波三折,终于开始正式编程。 编程是一件很枯燥很无聊的事情,但是出于完成作业,还必须强破自己坚持下去,按照老师所说的模块化思想,分部分的进行编写。而且编程是一件高精度、模范化的事情,稍有疏乎都会影响全局,也可能因为某一处的小的错误而导致整个程序的无法运行。所以认真仔细就是非常重要的了。开始的时候真的感觉编程是一件很无聊的事情,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。又经过几天的努力,终于把程序完成了,尽管程序还是有很多错误和漏洞,不过还是很高兴的。无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C语言的一次实践作业,自己进步的证明。 通过这次课程设计,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前!参考文献:1陈显刚,C语言程序设计M .。北京:北京理工大学出版社,2007。2谭浩强,C语言程序设计M。北京:清华大学出版社,1998。3徐新华,C语言程序设计教程M。北京:中国水利水电出版社,2001.4伍一,等。C语言程序设计与实训教程M。北京:清华大学出版社,2007.5徐翠霞,C语言程序设计案例教程M。北京:北京大学出版社,2008。6刘新航,软件工程与项目管理案例教程M。北京:北京大学出版社,2009。附录:部分程序清单#include #includeint s_count=1; unsigned int DeleteNumber=0; unsigned int QueryNumber=0; FILE *StoreData=NULL; typedef struct Student_Infofloat score;unsigned int number;char course_name10;char student_name10; char class_name10;struct Stuent_Info*next ;*Head,*Student;Head head=NULL; Student Create()Student head,p1,p2;p1=(Student)malloc(sizeof(struct Student_Info);p2=p1;head=p1;printf(当每次学号输入0的时候自动退出nn);printf(提示:n);printf(请输入第%d学生学 号:,s_count);scanf(%d,&p1-number);if(p1-number=0) return NULL;printf(请输入第%d学生姓 名:,s_count);scanf(%s,p1-student_name);printf(请输入第%d学生班 级:,s_count);scanf(%s,p1-class_name);printf(请输入第%d学生课程名:,s_count);scanf(%s,p1-course_name);printf(请输入第%d学生成 绩:,s_count);p1-score=1.4f; scanf(%f,&p1-score); s_count+; for(;) printf(请输入第%d学生学 号:,s_count);p2=p1;p1=(Student)malloc(sizeof(struct Student_Info);scanf(%d,&p1-number);if(p1-number=0) free(p1);p1=NULL;p2-next=NULL;break;printf(请输入第%d学生姓 名:,s_count);scanf(%s,p1-student_name);printf(请输入第%d学生班 级:,s_count);scanf(%s,p1-class_name);printf(请输入第%d学生课程名:,s_count);scanf(%s,p1-course_name);printf(请输入第%d学生成 绩:,s_count);scanf(%f,&p1-score) ;p2-next=p1;s_count+; free(p1);p1=NULL;p2-next=NULL;return head;/显示数据void Show_Info(Student head) printf(nt学号tt姓名tt班级tt课程tt分数 n);while(head!=NULL)printf(t%dtt%stt%stt%stt%.2f n,head-number,head-student_name,head-class_name,head-course_name,head-score);head=head-next;/显示及格率float ShowPass(Student head) int n=0;float f=0.0;printf(nt学号tt姓名tt班级tt课程tt分数 n);while(head!=NULL)if(head-score60)printf(t%dtt%stt%stt%stt%.2f n,head-number,head-student_name,head-course_name,head-course_name,head-score);n+;head=head-next;printf(t及格率:%.3f%n,(float)n/(float)(s_count-1)*100); /%输出%号f=(float)n/(float)(s_count-1)*100;return f;/向文件输出及格率/显示及格率float fShowPass(Student head) int n=0;while(head!=NULL)if(head-score60)n+;head=head-next;return (float)n/(float)(s_count-1)*100);/显示平均分float Average(Student head)float avg=0;float all=0;while(head!=NULL)all+=head-score;head=head-next;avg=(float)all/(float)(s_count-1);printf(t平均分是:%.3fn,avg);return avg;/写入文件的平均分float fAverage(Student head)float avg=0;float all=0;while(head!=NULL)all+=head-score;head=head-next;avg=(float)all/(float)(s_count-1);return avg;/寻找最大数据float Max_Score(Student head) float max=head-score;while(head!=NULL)max=(maxhead-score)?max:head-score;head=head-next;return max;/寻找最小数据float Min_Score(Student head) float min=head-score;while(head!=NULL)min=(minscore)?min:head-score;head=head-next;return min;/获得链表节点个数 也就是学生的个数 一是通过 s_sount获得 2是遍历链表 int GetCount(Student head)int i=0;while(head!=NULL) i+;head=head-next;return i;/删除数据 通过学号 void Delete(unsigned int DeleteNumber)Student Temporary=head;Student inter=NULL;if(DeleteNumber=head-number) head=head-next;free(Temporary);return ;while(Temporary!=NULL)if(DeleteNumber=Temporary-number) inter-next=Temporary-next;free(Temporary);return ;inter=Temporary;Temporary=Temporary-next;/查询数据void Query(unsigned int QueryNumber) Student inter=head;while(inter!=NULL)if(QueryNumber=inter-number) printf(nt学号tt姓名tt班级tt课程tt分数 n);printf(t%dtt%stt%stt%stt%.2f n,inter-number,inter-student_name,inter-course_name,inter-course_name,inter-score);return ;inter=inter-next;printf( 没有您所查询的数据!n);/数据存储 对于文件的数据的写入 在写入完成后一定要刷新缓冲区文件 才能保证数据真正从缓冲区输出到 否则无效使用完文件一定要关闭 /c语言的 fwrite和fread适合 二进制的读写 而 fscanf和 fprintf适合文本文件的读写fscanf是从留读取数据 fprintf是向留写入数据具体MSDNvoid WriteData(Student head)float max=Max_Score(head);float min=Min_Score(head);float avg=fAverage(head);float radio=fShowPass(head);fprintf(StoreData,tttttt学生成绩预览nn);fwrite(ttt学号tt姓名tt班级tt课程tt分数n,1,strlen(t学号tt姓名tt班级tt课程tt分数n)+1,StoreData);/数据在写入的过程中指针会不断地后移我们可以即时写入 即时刷新while(head!=NULL)fprintf(StoreData,nttt%dtt%stt%stt%stt%.2fnn,head-number,head-student_name,head-class_name,head-course_name,head-score);head=head-next;fprintf(StoreData,ttt最高分:%.2fnn,max);fprintf(StoreData,ttt最低分:%.2fnn,min);fprintf(StoreData,ttt平均分:%.2fnn,avg);fprintf(StoreData,ttt及格率:%.2f%nn,radio);fflush(StoreData); /必须刷新缓冲区或者关闭文件强制刷新 要不内容是不会输出到文件的int check =0 ;/初始化选择int delete_num=0;void main()system(color e1);Sleep(100);Start: printf(n); printf(*学生成绩管理系统*n); printf( 1-添 加 n); printf( 2-显 示 n); printf( 3-最高分 n); printf( 4-最低分 n); printf( 5-删 除 n); printf( 6-及 格 n); printf( 7-平均分 n); printf( 8-保 存 n); printf( 9-退 出 n); printf( * n); printf(请输入您要进行操作所对应的数字(1-9):); scanf(%d,&check); switch(check) case 1: if(GetCount(head)0) printf(已经创建数据库,1s后返回主菜单n); Sleep(1000); system(cls); goto Start; head=Create(); printf(创建成功,1s后返回主菜单n); Sleep(1000); system(cls); goto Start; break; case 2: if(GetCount(head)=0) printf(请先添加数据,1s后自动返回主菜单n); Sleep(1000); system(cls); goto Start; else Show_Info(head); printf(查看完毕,输入回车返回主菜单n); getchar(); getchar(); /和cin.get()类似有等待的作用 system(cls); goto Start; break; case 3: if(GetCount(head)=0) printf(请先添加数据,1s后自动返回主菜单n); Sleep(1000); system(cls); goto Start; else printf(n最高分: %.2fn,Max_Score(head); printf(查看完毕,输入回车返回主菜单n); getchar(); getchar(); /和cin.get()类似有等待的作用 system(cls); goto Start; case 4: if(GetCount(head)=0) printf(请先添加数据,1s后自动返回主菜单n); Sleep(1000); system(cls); goto Start; else printf(n最低分: %.2fn,Min_Score(head); printf(查看完毕,输入回车返回主菜单n); getchar(); getchar(); /和cin.get()类似有等待的作用 system(cls); goto Start; case 6: if(GetCount(head)=0) printf(请先添
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 实践应用2025年软件设计师试题及答案
- 如何培养学生的自主学习能力计划
- 2024年河北省文化和旅游厅下属事业单位真题
- 湖北省武汉市江岸区2025年八下数学期末学业质量监测模拟试题含解析
- 2024年贵州省商务厅下属事业单位真题
- 2024年南大奥宇高级中学招聘笔试真题
- 风险管理建议与企业应对措施试题及答案
- 打造高效学习计划软件设计师考试的试题及答案
- 2025年软考网络管理员考试复习笔记和试题及答案
- 代码注释与文档对照的作用试题及答案
- 统编版2024-2025第二学期小学六年级期末语文测试卷(有答案)
- 中华人民共和国民营经济促进法
- 2025年田径三级裁判试题及答案
- 保安证考试新手必看试题及2025年答案
- 小红书食用农产品承诺书示例
- 出货检验报告
- 科研成果研制任务书
- 完整版:美制螺纹尺寸对照表(牙数、牙高、螺距、小径、中径外径、钻孔)
- 市政道路综合整治工程施工部署方案
- 无机材料科学基础-第3章-晶体结构与晶体中的缺陷
- 桥梁工程施工工艺标准图集
评论
0/150
提交评论