淮海工学院计算机工程学院课程设计报告设计名称:数据结构课程设计选题名称:学生成绩管理系统姓名:白文吉学号:2011122453专业班级:计算机科学与技术计算机111系(院):计算机工程学院设计时间:2012.12.24~2013.1.4设计地点:软件工程实验室、教室指导教师评语:签名:年月日成绩:数据结构课程设计报告第1页,共页1.课程设计目的1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4.训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。2.课程设计任务与要求:任务已知某学生成绩表中现有N位同学的成绩(要求各人数据不同),如:学号姓名成绩01101李平7501202王露7001205张强8501118曹雨90………………现需要删除已转学的某位同学的成绩,同时添加某位同学的成绩(学号、姓名、课程、成绩自定),插入位置按姓名升序排列。[基本要求](1)现有N位同学的数据要求从数据文件中读入,不用交互方式录入;(2)拟删除同学的姓名及新添加同学的数据采用交互方式输入;(3)删除及插入操作完毕,需将成绩表中的所有记录按姓名升序方式显示出来;(4)将更新后的成绩表保存到另一个数据文件中;(5)可以增加功能:如修改某位同学的成绩。要求:1、在处理题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。前期准备工作完备与否直接影响到后序上机调试工作的效率。在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。数据结构课程设计报告第2页,共页2、程序设计语言推荐使用C/C++,程序书写规范,源程序需加必要的注释;3、每位同学需提交可独立运行的程序;4、每位同学需独立提交设计报告书(每人一份),要求编排格式统一、规范、内容充实,不少于15页(代码不算);3.课程设计说明书数据结构课程设计报告第3页,共页一需求分析如今,对于各个教育部门来说,学生信息管理是一个非常重要的一事情,尤其是对成绩的管理,为了提高高校学生成绩信息的管理效率,方便对学生成绩信息进行管理、学校里面的学生和管理员方便去管理和查询学生成绩信息,就需要构建一个高效快捷的学生成绩管理系统,使学生成绩管理工作规范化,系统化,程序化,提高处理的速度和准确性,能够及时、准确、有效的查询和修改学生成绩信息。该系统需要实现以下几个功能:(1)对于已有的学生成绩能够从文件中读入(2)连续添加新学生的信息(3)根据学号删除学生的信息(4)根据学号找到并修改学生的任意一门成绩(5)将已经更新过的学生成绩信息按照学生姓名升序排序(6)将排过序的学生信息输出到文件中,方便打印二概要设计系统用到的抽象数据类型定义:ADTLinklist{数据元素:可以是任意类型的数据,但必须属于同一个数据对象。关系:单链表中的数据元素之间是线性关系。基本操作:(1)STUDENT*MallocNode();申请结点并初始化(2)CreateHeadLink();建立键表表头(3)InsertOneNode(STUDENT*t)插入一个结点(4)DesplayOneNode(STUDENT*t)向屏幕输出一个结点(5)GetInformation(STUDENT*t)获得一个结点的信息}ADTLinklist;2.系统中子程序及功能要求:(1)ReadInfoFormFile();从文件读入数据(2)OutputInformation();向屏幕输出所有结点信息(3)Insertonestudent();添加一个学生(4)DeleteNodeBystudentNumber()删除一个学生(5)CompositorByTotalMark();按姓名排序(6)Outputtofile();输出所有信息到文件(7)Choicesubject(STUDENT*t);修改一个成绩(8)Ifcontinue(STUDENT*t);询问部分(9)Changemark();查找并修改成绩3.各程序模块之间的调用关系数据结构课程设计报告第4页,共页开始进入欢迎界面功能选择界面建立链表表头从文件读入数据显示已有学生成绩信息添加一位学生的信息删除一位学生的信息修改学生成绩按姓名升序排序退出显示结果三详细设计第一个功能:显示已有学生成绩信息思路:在主函数中,调用建立表头函数,建立表头,并将表头的地址赋给头指针,头指针是一个全局变量,在一开始被赋值,便于在下面的其它函数中可被直接运用,不必作为实参传递;数据结构课程设计报告第5页,共页然后调用从文件读入数据函数,首先申请结点空间并初始化,在初始化的时候直接将新结点的指针域置零,这样在插入的时候只需要改变原链表的尾指针,便于插入操作,再利用循环,每次读入一个学生的信息,然后将数据分别赋给对应的变量,最后将结点插在表尾。文件读入后,直接调用显示函数,头指针已是全局变量,直接运用,用循环将所有结点信息输出到屏幕。第二个功能:添加一位学生的信息思路:添加一位学生信息和一开始的读入是一样的,这次是从键盘输入学生信息赋给对应变量,然后调用插入结点函数将新的学生信息插入到原链表的尾部,插入成功后有提示是否继续添加,若是,则调用第二个功能函数自己继续添加,若否,则将插入后的所有信息显示。第三个功能:删除一位学生的信息思路:首先用户从键盘输入一个要删除的学生的学号,然后根据学号查找该学生,同时设置两个指针,一个指最终指向要删除的结点,另一个指向要删除的结点的前一个结点,找到后,先将目标结点的指针域的值赋给前一个结点的指针域,然后将目标结点的空间释放,删除成功后,同样像在第二个功能中一样,询问是否继续删除,在都删除完了以后,再将新的所有学生信息输出。第四个功能:修改学生成绩思路:首先从键盘输入一个要修改的学生的学号,根据学号查找该学生,在找到后,询问要修改的是哪一门的成绩,确定后再输入新的成绩,修改完成后询问是否修改其它科目的成绩,若是,则调用选择科目函数自身继续修改,若否,则继续询问是否修改其他学生的成绩,若是,调用第四个功能函数,若否,则结束修改,并将新的所有信息输出。第五个功能:按姓名升序排序思路:就像数组里的冒泡排序一样,利用两层循环,第一次用第一个学生的姓名分别和后面每一个比较,若后者小于前者,则进行交换,第一趟结束后,最小的就在第一个位置,后然再拿第二个进行比较,最终所有的都会比较一遍,将所有信息按照姓名升序排好。四设计与调试分析1、欢迎界面2、功能选择界面(1)显示已有学生成绩信息(2)添加一位学生的信息(3)删除一位学生的信息(4)修改学生成绩(5)按姓名升序排序(6)退出在此界面选择要使用的功能的序号,选择后进入相应的功能界面。数据结构课程设计报告第6页,共页3、显示已有学生成绩信息屏幕上显示出原来文件中所存储的学生成绩信息,显示正确。4、添加一位学生的信息从键盘输入新的学生的信息,回车键结束,屏幕显示询问是否继续,选择否,然后屏幕显示出更新后的所有学生信息,显示正确。5、删除一位学生的信息从键盘输入一个学生的学号,回车键结束,屏幕显示删除成功并询问是否继续删除,选择否,然后屏幕显示删除后剩下的所有学生信息,显示正确。6、修改学生成绩从键盘输入一个学生的学号,回车键结束,询问要修改的科目,输入1,回车键确定,提示输入新的成绩,输入后回车键确定,询问是否修改其它成绩,选择No,确定,询问是否修改其他学生的成绩,选择No,确定,屏幕显示修改过后的新的学生成绩信息,显示正确。7、按姓名升序排序在功能选择界面选择该功能后,屏幕直接显示出按姓名升序排序后的学生信息,并且将屏幕上的信息输出到名为“newstudentfile”的txt文件中,屏幕显示正确,运行文件夹下有对应的文件。8、退出屏幕再次显示欢迎界面,显示正确。五用户手册(1)运行程序后进入欢迎界面,点击任意键进入功能选择界面;(2)在功能界面输入您所要使用的功能的序号,点回车键确定;(3)显示已有学生成绩信息:屏幕直接显示原有文件中所有信息,点击任意键返回功能选择界面(4)添加一位学生的信息:从键盘分别输入屏幕提示要输入的学生信息,每输入一个要点击回车键确定,在询问部分,可选择继续添加,也可选择添加结束,添加完毕后显示所有学生信息,点击任意键返回功能选择界面。(5)删除一位学生的信息:从键盘输入一个学生的学号,按回车键确定,删除成功后,提示是否继续删除,根据用户需要选择,删除完毕后显示所有学生信息,点击任意键返回功能选择界面。数据结构课程设计报告第7页,共页(6)修改学生成绩:输入一个学生的学号,提示选择修改的科目,选择后输入新的成绩,输入新成绩后按回车确定,询问是否修改其它科目的成绩,在修改完一个人的成绩后,提示是否修改其他人的成绩,所有修改都已完成后显示所有学生信息,点击任意键返回功能选择界面。(7)按姓名升序排序:直接显示排好顺序的学生信息,同时会向程序所在文件中输出一个名为“newstudentfile”的txt文件。(8)退出:返回欢迎界面六测试成果欢迎界面功能选择界面数据结构课程设计报告第8页,共页显示已有学生成绩信息数据结构课程设计报告第9页,共页添加一位学生的信息及询问成功添加后显示所有学生信息数据结构课程设计报告第10页,共页删除一个学生及询问数据结构课程设计报告第11页,共页删除后显示所有学生信息只修改一个人的一门成绩数据结构课程设计报告第12页,共页修改后的所有学生信息(学号为10015的成绩一已经修改为100)数据结构课程设计报告第13页,共页按姓名升序排序后的学生信息七附录(源程序清单)#includestdio.h#includeconio.h#includemalloc.h#includestring.h#includestdlib.h//清屏typedefstructSTUDENT//{charstudentNumber[10];/*学生学号*/charstudentName[20];/*学生姓名*/floatmark1;/*第1门成绩*/floatmark2;/*第2门成绩*/floatmark3;/*第3门成绩*/structSTUDENT*next;}STUDENT;STUDENT*headLink;/*链表表头指针,适用于全局*//************************************数据结构课程设计报告第14页,共页所有函数的声明************************************/voidCreateHeadLink();//建立链表表头STUDENT*MallocNode();//申请新结点并初始化voidInsertOneNode(STUDENT*t);//在表尾插入一个结点voidReadInfoFormFile();//从文件读入数据voidDesplayOneNode(STUDENT*t);//输出一个结点的信息voidOutputInformation();//向屏幕输出所有信息(第一个功能)voidGetInformation(STUDENT*t);//输入添加学生的信息voidInsertonestudent();//添加一个学生(第二个功能)voidDeleteNodeBystudentNumber();//删除一个学生(第三个功能)voidCompositorByTotalMark();//按姓名排序(第四个功能)voidOutputtofile();//输出所有信息到文件voidChoicesubject(STUDENT*t);//修改一个成绩voidIfcontinue(STUDENT*t);//询问部分voidChan