题⽬: ⽤⽂件实现的学⽣成绩管理系统(含全套完整资料)⽬的:
学⽣通过本次实验编程实现⼀个班级学⽣成绩的管理,使学⽣了解⽂件的主要操作(创建、读、写、增加和删除记录等)。内容和要求
1、编写⼀个学⽣成绩管理的软件系统,语⾔不限。2、软件中能够随时增加学⽣成绩记录(姓名、班级、学号、课程名称、成绩),这些记录存放到磁盘⽂件中。3、利⽤磁盘⽂件的系统接⼝函数编程实现对学⽣成绩
进⾏管理:以各种⽅式查询成绩、修改成绩;显⽰所有的学⽣成绩。4、编写将⼀个班级的成绩复制到另⼀个⽂件的功能。5、学习使⽤⽂件编程,实现指定班级成绩⽂件的删除操作。
6、能够对学⽣成绩记录进⾏⽂件备份和还原。
7、本实验的⽬的是练习⽂件操作,因此该软件不能使⽤数据库存放信息,只能⽤普通⽂件存放信息。⽬录
学⽣成绩管理系统课程设计报告 (2)⼀、需求分析 (2)
1、课程设计性质和⽬的 (2)2、输⼊的形式和输⼊值的范围 (2)3、输出的形式; (2)
4、程序所能达到的功能; (2)5、测试数据: (2)⼆、功能描述 (3)三、总体设计 (3)1、功能模块设计 (3)
2、其他模块代码设计(详参“程序清单”)//此处与“程序清单”Word⽂件有超链接功能。 (4)四、调试分析 (5)五、测试结果 (5)1、主界⾯:图5-1 (5)
2、录⼊学⽣信息界⾯:图5-2 (5)3、显⽰统计数据界⾯:图5-3 (6)
4、查询学⽣成绩界⾯:图5-4 (6)5、删除学⽣成绩界⾯:图5-5 (7)6、插⼊学⽣成绩界⾯:图5-6 (7)
7、对已有学⽣成绩降序排列界⾯:图5-7 (8)8、显⽰全部学⽣信息界⾯:图5-8 (8)六、⽤户使⽤说明 (9)七、课程设计的总结 (9)⼋、附录(源代码) (10)学⽣成绩管理系统课程设计报告⼀、需求分析
1、课程设计性质和⽬的
该课程设计的主要任务是运⽤在《数据结构》(⽤⾯向对象⽅法C++语⾔描述)课程中学到的理论知识来指导实践,使我们了解⾯向对象与⾯向过程之间的区别,学会⽤所学知识解决实际问题,并且通过综合课程设计,提⾼⼤家的实践动⼿技能,培养我们独⽴分析分析问题和解决问题的能⼒。2、输⼊的形式和输⼊值的范围
本系统是⼀个学⽣成绩管理系统,采⽤VC++6.0 编译器作为开发环境,这个环境是我们在学习C++的平台。输⼊数据类型主要是char、int、float等数据类型,输⼊内容包括:班级、学号、姓名、数据结构、C++ 程序设计、多媒体技术、⼤学英语、⾼等数学、⼤学体育、马克思主义政治经济学等数据。⽤户在输⼊学⽣数据时要保证输⼊数据格式的正确性,系统不会⾃动检测输⼊的数据是否正确,可⽤。具体要求(输⼊学⽣学号、班级姓名和课程成绩等的时候要按照其相应的数据类型进⾏输⼊,如:表1-1)。
3、输出的形式;
输出形式与输⼊形式类似,根据需要可以选择显⽰输⼊的各项内容,还可以选择显⽰计算好平均分后并排序后的记录,显⽰内容包括:班级、学号、姓名、平均分等数据。4、程序所能达到的功能;
⽤户运⾏程序后进⼊系统主界⾯,在主界⾯⽤户可以输⼊所有学⽣的数据并保存到⽂件中,也可以读取⽂件中已有的学⽣数据。⽤户在保存数据的时候,如果保存位置没有⽂件则⾃动新建⼀个⽂件进⾏保存。本系统同时只能对⼀个数据⽂件进⾏相关操作,不能同时打开多个数据⽂件,其类似于单⽤户操作系统。
当⽤户读取学⽣数据后可对其进⾏显⽰,插⼊,删除,修改,排序,计算平均分等相关操作。⽤户在操作过程中可随时对当前⽂件进⾏保存到⽂件操作,以防⽌修改的数据丢失。5、测试数据:
经过多次测试程序运⾏稳定,⽆致命错误。根据本次课程设计的要求对数据进⾏输⼊并分析数据输出结果。通过测试发现当⽤户正确输⼊时系统能够正确显⽰⽤户的输⼊,当⽤户输⼊错误时,系统并不会出现致命错误但其将显⽰⾮⽤户期望的数据。⼆、功能描述
此成绩管理系统主要利⽤单链表实现,由如下功能模块实现:1、录⼊模块。主要完成将学⽣记录存⼊单链表的⼯作。
2、显⽰统计数据模块。主要完成对⾃⼰所需的数据在链表内进⾏查询后的统计结果.3、查询模块。主要完成对已有学⽣的学号、姓名等数据进⾏查询
4、修改模块。主要完成对已有学⽣的成绩或者其他信息,由于录⼊错误或者其他错误进⾏修改。5、删除模块。主要⽤来删除不在需要的学⽣信息。
6、插⼊模块。主要是对漏录或者其他原因的学⽣信息,重新做⼀次录⼊信息。7、学⽣成绩排序模块。⽤于对已有的学⽣信息,按照其成绩的⾼低对其排序。8、显⽰学⽣成绩模块。是⽤来显⽰所有存在学⽣的全部成绩。三、总体设计1、功能模块设计void main() /*主函数*/{for(;;){
switch(menu()) /*选择判断*/{case 1:
Input(stud);/*输⼊学⽣成绩*/break;case 2:
Statistic(stud); /*输出学⽣统计数据*/break;case 3:
Lookup(stud); /*查找学⽣成绩*/cout<<\"\\\\";
system(\"pause\");break;case 4:
Modify(stud); /*修改学⽣成绩*/cout<<\"\\\\";system(\"pause\");break;case 5:
Delete(stud); /*按学号查找,删除学⽣信息*/cout<<\"\\\\";system(\"pause\");break;case 6:
Insert(stud);/*增加学⽣成绩*/cout<<\"\\\\";system(\"pause\");break;case 7:
Sort(stud); /*按平均分对成绩记录项进⾏降序排序*/cout<<\"\\\\";system(\"pause\");break;case 8:
Output(stud); /*显⽰全部学⽣成绩*/cout<<\"\\\\";system(\"pause\");break;case 0:
cout<>===============================\\n\" 链接功能。 每个函数的具体功能: 1)主函数main():定义学⽣结构体数组,调⽤录⼊、统计等函数对成绩表进⾏处理;2)录⼊函数Input():输⼊班级到政治课成绩;3)统计函数Statistic():计算平均成绩; 4)查询函数Lookup():查询指定学号学⽣成绩记录;5)修改函数Modify():修改指定学号学⽣成绩记录;6)删除函数Delete():删除指定学号学⽣记录;7)插⼊函数Insert():按平均分顺序插⼊新记录。 8) 排序函数Sort():按平均分对学⽣成绩记录项进⾏降序排序;9)输出函数Output():输出班级所有学⽣成绩记录;四、调试分析 内容主要包括:在调试过程中我我们对遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析。 1、由于在学C++这么语⾔的时候,对⽂件的写⼊与读出不是很精通,在刚开始时候对⽂件的操作不太明⽩,⼀致不能很好的操作⽂件,其中最⼤的问题是对已存在的⽂件读取问题,通过“显⽰全部学⽣成绩”将数据从⽂件中读取,可是在使⽤过程中总是出现读出错误, 2、内存的分配问题,这也是困惑了我好久的问题。对于我们初学者来说对内存的分配和释放问题是⽐较抽象和模糊的难题,本来使⽤链表的⽅式存储数据,然⽽待到排序时出现了交换数据困难的问题,以及分配空间繁琐释放空间不及时的问题,造成空间浪费使得程序运⾏效率低的问题。因此最后采⽤了顺序存储记录的⽅式,这样就能改变前述问题。整个调试过程中主要是这么⼏个问题,其余的是⼀些⼩问题,很容易的就调试出来了。五、测试结果1、主界⾯:图5-1 2、录⼊学⽣信息界⾯:图5-2 3、显⽰统计数据界⾯:图5-3 4、查询学⽣成绩界⾯:图5-4 5、删除学⽣成绩界⾯:图5-5 鉴于录⼊的数据⽐较少,就不做删除测试了!6、插⼊学⽣成绩界⾯:图5-6 7、对已有学⽣成绩降序排列界⾯:图5-7 8、显⽰全部学⽣信息界⾯:图5-8 六、⽤户使⽤说明 ⽤户运⾏程序后进⼊系统主界⾯,在主界⾯⽤户可以打开或者新建数据⽂件。⽤户新建或者打开⽂件要符合操作系统的要求,如果⽤户打开不存在的⽂件,那么系统将按照⽤户打开的⽂件名作为新的数据⽂件名,并对其进⾏相关操作。本系统同时只能对⼀个数据⽂件进⾏相关操作,不能同时打开多个数据⽂件,其类似于单⽤户操作系统。 当⽤户指定当前⽂件后可对其进⾏显⽰,插⼊,删除,修改,计算平均分等相关功能。⽤户在操作过程中可随时对当前⽂件进⾏保存到⽂件操作,以防⽌修改的数据丢失。操作完当前⽂件后,⽤户可以关闭该⽂件,在不退出本系统的前提下另⾏打开或者新建数据⽂件对其进⾏相关操作。七、课程设计的总结 这次的课程设计,虽然在调试程序时候有些疲劳和困倦,但带给我们每个⼈很多的收获。C++在⼤⼆的时候已经学了⼀个学期了,现在⼜学数据结构,仍有许多知识都存在似懂⾮懂的现象,这种现象通过实际的上机操作,已经减少了许多。对这些知识也有了更深的理解和很好的掌握。也有很多理论上说得过去的代码,但到了实际操作,却是⾏不通的。这种困惑,有许多已经通过实际操作解决了,并能够深刻认识,但也有很多没有明⽩。只能避过这些⽅法,换⽅法实现。 在课程设计之前,因为有了综合实验的经验与教训,明⽩了写代码这⼀步是⾮常重要的,因为当把代码输⼊电脑,并⽤编译器将其运⾏,发现通过不了,再来检查找出问题,这是⼀件⾮常⾟苦的事情,也很浪费时间。于是在课程设计的时候,我们先是花了好⼏天天的时间来把代码先弄好了,才输⼊电脑进⾏操作。觉得写程序,应该先找到该程序中的核⼼地⽅,⽤多种⽅法来实现该核⼼,这才可能避免等到发现逻辑上或者编译器不⽀持上的错误,才来想补救的措施,这样花费时间在想补救措施是很不值得的。此次任务的完成,也体现出同学之间的团结精神。实践是检验真理的唯⼀标准。没有实践,就不会发现和深刻体会它的真实所在。只有通过检验的真理,在⾃⼰的⼼⾥,才会认可它的真实性。⾯向对象程序设计的完成,使我们懂得了真理的重要性,理论和实际的相结合,才能真正把握所学和所掌握的知识。⼋、附录(源代码)详见程序清单 因篇幅问题不能全部显示,请点此查看更多更全内容