学生学习成绩管理系统(共34页).doc
《学生学习成绩管理系统(共34页).doc》由会员分享,可在线阅读,更多相关《学生学习成绩管理系统(共34页).doc(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上中南大学本科生课程设计报告书题 目学生学习成绩管理系统学生姓名学 院信息科学与工程学院专业班级C语言程序设计实践报告一、设计实践的目的、任务与要求本设计实践是 “C语言程序设计”课程学习的一个关键环节。它是根据教学计划的要求,在教师的指导下,对学生实施程序设计训练的必要过程,是对前期课堂学习内容的综合应用及其效果的检验和提高。其目的在于培养学生综合运用理论知识来分析和解决实际问题的能力、以及严谨的科学态度和良好的程序设计习惯。本次设计实践,要求设计者基于结构化程序设计思想和所用C语言开发环境与工具,并运用“软件工程”和“数据结构”中的有关概念和方法,针对具体设计题和要
2、求,分析功能要求,划分功能模块,用链表结构设计功能模块函数,以菜单方式调用相应功能模块来实现信息和数据处理。本次设计时间为二周,要求独立完成,具体任务如下:1、学习、掌握采用结构化程序设计思想进行Turbo C(或Win TC,VC)环境下程序设计的方法;另外学习C语言简单图形语句以及简单图形界面设计(参见参考文献5、6)。2、采用C语言设计一个“学生学习成绩管理系统”,上机编程、调试并演示该管理系统中的各功能模块(具体内容见四)。3、设计完成后,每人必须按时提交与验收程序一致的、能按设计功能和性能要求运行的程序的清单,一份关于本次程序设计和使用介绍的纸质文档即程序设计、使用说明书及个人总结(
3、实践心得、体会等)。二、任务“学生学习成绩管理系统”的基本功能说明“学生学习成绩管理系统”用于对学生学习成绩数据文件的新文件创建和老文件管理,并可以进行密码设置。具体要求实现的功能如下:1、输入添加记录:将每一个学生的学号、姓名和各科学习成绩作为一个记录进行输入或添加。要求经过密码验证后能建立一个新的数据文件或给已建立好的数据文件增加记录。2、显示、查询记录:能按学生姓名(或学号)显示、查询一个或多个学生的各门(或某门)功课的成绩和平均成绩。3、修改记录:可以对数据文件中的任意记录的数据进行修改,在修改前后对该记录的内容进行显示,并设确认提示。(要求设置密码,验证通过后方可进入修改环节)4、删
4、除记录:可以删除数据文件中的任一记录,包括逻辑删除(具有恢复功能)和物理删除(不可恢复)。(说明:该功能也应设置为经过验证密码后才可实施删除)5、成绩排序:采用不同的排序方法对单科成绩和总(或平均)成绩进行排序,但不能改变原记录的顺序。6、统计功能:(A)计算各门课程全班总成绩及平均成绩;(B)统计各门课程得分为100、9099、8089、7079、6069和不及格学生的人数,以及与全班总人数的百分比。7、数据文件保存和上载功能:能按文件名保存已建立的或修改的整体记录数据,能按文件名上载/倒入保存在磁盘的整体记录数据。8、其他:该软件应具有系统名称、设计单位或个人等基本信息。三、此程序的功能存
5、储学生的成绩信息,可以添加、显示、排序、查询、修改、删除、恢复、统计学生的信息,运行程序时,先输入专业班级,如果没有对应的文件,进入操作完成后,选择保存或退出系统并保存所做更改时,程序将创建一个和你输入的专业班级同名的文件存储你输入或改变的学生信息,如果有对应的文件,你进入操作时,程序将找到相关文件,读取文件里面的信息。如果是第一次进入,先设置密码,连续两次输入相同的密码,如果不是第一次进入,要输入原来设置的密码,进入后根据提示选择序号进行相关操作,操作过程中,如果输入错误信息,程序可以处理输入的一些错误信息,如果想中途保存,可以选择保存,再进行其它操,也可以最后退出程序时,选择退出系统并保存
6、;如果并不想保存此前的操作,可以选择退出系统不保存。可以对存储被删除学生信息的文件进行删除操作,但要在没有调用删除和恢复函数之前,如果在调用删除和恢复函数之后操作,将提示“数据正在被使用,请下次启动程序时再清理,按任意键返回”。四、程序设计方案1、数据结构 采用链表存储学生的基本信息,包括学号、姓名、学生成绩2、整体设计思想 在main主函数中定义一个结构体指针变量head,对于添加、修改、删除这样的函数,有参数,它们的实参都为head,返回值也赋给head,对于排序函数有参数,实参也为head,但不对head直接处理,因为我们并不希望经过排序后就改变原有学生逻辑顺序,对于排序这样的函数所需的
7、变量,由head提供学生信息,再创建另外一个链表,然后排序函数再对这个新链表处理,处理后不返回任何值 。head在各函数之间传递信息,每个函数运行后,都要保证head要么为NULL(没有学生成绩信息),要么为学生成绩的最新信息。在启动程序的时候把NULL赋给head,当head变量作为一个实参数传递给函数时,此时head为NULL,函数对head变量不做任何处理,而读取已经保存在文件里的已有学生信息进行处理,如果文件里也没有学生信息,则返回到主界面;如果文件里有学生信息,根据函数的功能对学生进行处理,再把函数返回的学生信息赋给head,此时head存有学生的最新信息,此时如果head做为实参传
8、递给函数时,函数对head进行处理,而不关心原来已经存在文件里的学生信息。对于被删除的学生信息用全局变量delstu存储,基本思想和head一样。学生学习成绩管理 系统输入或添加记录显示查询和统计修改记录删除记录成绩排序恢复已删除记录保存退出系统并保存退出系统不保存清理被删除的 学生记 录重置密码 学生成绩管理系统示意图 readfile()insert ()main( ) create ( )check( )modify()delselect()show()recover()cleandelnum()savereplace()exit(0)recreate()index()checkmenu
9、()readfile()modifymenu()index()readfile()index() del()recreate()sort()readfile()readdelnum()index()del() insert()readfile()readdelnum()savedelnum()index()del() 学生成绩管理系统程序结构示意图 3、具体函数实现 void mainmenu();用来显示程序的主菜单void checkmenu();用来显示查询和统计函数的子菜单void sortmenu();用来显示排序函数的子菜单void modifymenu();用来显示修改函数的子菜
10、单struct student *readfile();从原有文件中读取学生信息,创建链表,输出链表头,如果没有学生信息,输出NULLstruct student *readdelnum(); 读出delnum文件所存储的被删除的学生信息,创建链表,输出链表头,如果没有被删除的学生信息,输出NULL void print(struct student *);输入链表,显示链表里的学生信息void printone(struct student *);输入链表,只显示链表头的信息void savedelnum(struct student *head)把被删除的学生信息保存到delnum文件中,
11、并替换原文件void savereplace(struct student *);以写入的方式把链表head存储的信息保存在student文件里struct student *insert ();输入新的学生信息,并根据学号插入struct student *recreate(struct student *head);输入一个链表头head,重新创建一个新链表,如果输入的链表头head为NULL与a=1, (即delselect函数被调用过),则输出NULL;如果输入的链表头head为NULL与a=0,则输出readfile()返回的链表;如果输入的链表head不为NULL,则用head存储
12、的学生信息重新创建一个新链表,输出新链表的表头。struct student *index(struct student *,long);参数为链表头head和学生学号,根据输入的学生学号,找到此学号并输出此学号的结构体指针变量,如果找不到或head等于NULL,输出NULL。struct student *del(struct student *,long);参数为链表头head和学生学号,根据输入的学生学号,找到此学号并删除此学生的信息,输出链表头head。 struct student *create (struct student *);输入一个链表头head,如果head为NULL与
13、a=0,head= readfile(),然后输入学生的信息,把输入的学生信息根据学号插入到head链表;输出head void show(struct student *);输入一个链表头head,然后把参数传递给struct student *recreate(struct student *head);得到一个新链表,再把新链表传递给排序函数struct student *sort(struct student *);得到排序后的链表,然后用void print(struct student *)函数显示排序后的链表内容。 struct student *modify(struct st
14、udent *);输入一个链表头head,如果head的输出等于NULL与a=1,输出NULL;如果head等于NULL与a=0 ,把readfile()的输出赋给head;把head和输入要修改的学号传递给函数struct student *index(struct student *,long); 如果index()的输出为NULL,输出head;如果index()的输出不为NULL,把index()输出链表头的信息赋给函数中的变量struct student *p;然后输入要修改的学生信息赋给变量p,调用printone()函数显示修改后的学生信息,在把p存储的修改后的学生信息赋给ind
15、ex()输出的链表头;最后输出head。struct student *delselect(struct student *);输入一个链表头head,如果head等于NULL与a=1,输出NULL;如果head等于NULL与a=0 ,把readfile()的输出赋给head;如果delstu=NULL与b=0,把readdelnum()的输出赋给delstu,把head和输入要删除的学号传递给函数struct student *index(struct student *,long);如果 index()的输出为NULL,则跳过del函数;如果index()的输出不为NULL,把index(
16、)输出链表头的信息赋给函数中的变量struct student *p,然后调用struct student *del(struct student *head,long num)函数删除该学号的信息,最后把p中的信息放到存储被删除学生的链表中; void check(struct student *head)输入一个链表头head,然后把参数传递给struct student *recreate(struct student *head);得到一个新链表,如果新链表为NULL,则退出函数;如果新链表不为NULL,用print()函数显示学生信息,然后选择序号进行查询或显示统计结果。struct
17、 student * recover(struct student *);输入一个链表头head,如果head等于NULL与a=0,把readfile()的输出赋给head,如果delstu=NULL与b=0,把readdelnum()的输出赋给delstu,把delstu和要恢复的学号传递给函数struct student *index(struct student *,long);如果 index()的输出为NULL,则跳过del函数;如果index()的输出不为NULL,把index()输出链表头的信息赋给函数中的变量struct student *p,然后调用struct studen
18、t *del(struct student *head,long num)函数删除该学号的信息,最后把p中的信息放到存储学生信息的head链表中;void cleandelnum()从delnum文件中把被删除的学生彻底删除,此函数只有在delselect函数和recover函数在被调用之前使用,如果在delselect函数和recover函数在被调用之后使用,在主函数退出系统并不保存时,delnum文件中的信息已经被改变。 void code(); 采用文件保存输入的密码,第一次使用时先设置密码,不是第一次使用时,输入以前的密码五、程序调试过程 程序编好后,在进行测试的过程中,当输入多个学生
19、信息进行测试时,发现在调用index函数后,再调用print函数显示时,将输出该学生以及后面的学生的信息,所以重新写了一个printone函数。对于recover函数,当head为NULL,如果进行恢复操作,返回意料之外的值,把原来的语句head1=head; while(head1-next!=NULL) head1=head1-next; head1-next=q; 改为:head1=head; if(head=NULL) head=q; else while(head1-next!=NULL) head1=head1-next; head1-next=q; 为了实现退出系统并不保存功能,
20、把原来delselect函数和recover函数里的用来保存被删除和被恢复学生信息的函数save函数(直接对文件进行写入操作),改为定义一个全局变量delstu来保存此信息。当用一个学生信息进行测试时,发现如果调用delselect函数把这个学生信息删除,再进入别的函数,此时在别的函数里还能发现此学生的信息,保存时,此学生信息也被保存在student文件中,再用多个函数进行测试,发现如果调用delselect不把学生信息全部删除,程序运行结果跟意料的一样;如果全部删除,再进入别的函数后,则学生信息全部都不能删除,不进入别的函数,直接保存,则运行结果跟意料的一样。对这样的结果进行分析,发现是由于
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 学习 成绩管理系统 34
限制150内