数据结构课程设计报告--学生成绩管理系统_第1页
数据结构课程设计报告--学生成绩管理系统_第2页
数据结构课程设计报告--学生成绩管理系统_第3页
数据结构课程设计报告--学生成绩管理系统_第4页
数据结构课程设计报告--学生成绩管理系统_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、淮 海 工 学 院 计算机工程学院课程设计报告设计名称: 数据结构课程设计 选题名称: 学生成绩管理系统 姓 名: 白文吉 学 号: 专业班级: 计算机科学与技术 计算机111 系 (院): 计算机工程学院 设计时间: 2012.12.242013.1.4 设计地点: 软件工程实验室、教室 成绩:指导教师评语: 签名: 年 月 日1课程设计目的1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。 2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4.训练用系

2、统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。2课程设计任务与要求:任务已知某学生成绩表中现有N位同学的成绩(要求各人数据不同),如:学号姓名成绩01101李平7501202王露7001205张强8501118曹雨90 现需要删除已转学的某位同学的成绩,同时添加某位同学的成绩(学号、姓名、课程、成绩自定),插入位置按姓名升序排列。 基本要求 (1)现有N位同学的数据要求从数据文件中读入,不用交互方式录入;(2)拟删除同学的姓名及新添加同学的数据采用交互方式输入;(3)删除及插入操作完毕,需将成绩表中的所有记录

3、按姓名升序方式显示出来;(4)将更新后的成绩表保存到另一个数据文件中;(5)可以增加功能:如修改某位同学的成绩。要求:1、在处理题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。前期准备工作完备与否直接影响到后序上机调试工作的效率。在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。 2、程序设计语言推荐使用C/C+,程序书写规范,源程序需加必要的注释;3、每位同学需提交可独立运行的程序;4、每位同学需独立提交设计报告书(每人一份),要求编排格式统一、规范、内容充实,不少于15页(代

4、码不算);3课程设计说明书一 需求分析如今,对于各个教育部门来说,学生信息管理是一个非常重要的一事情,尤其是对成绩的管理,为了提高高校学生成绩信息的管理效率,方便对学生成绩信息进行管理、学校里面的学生和管理员方便去管理和查询学生成绩信息,就需要构建一个高效快捷的学生成绩管理系统,使学生成绩管理工作规范化,系统化,程序化,提高处理的速度和准确性,能够及时、准确、有效的查询和修改学生成绩信息。该系统需要实现以下几个功能:(1)对于已有的学生成绩能够从文件中读入(2)连续添加新学生的信息(3)根据学号删除学生的信息(4)根据学号找到并修改学生的任意一门成绩(5)将已经更新过的学生成绩信息按照学生姓名

5、升序排序(6)将排过序的学生信息输出到文件中,方便打印二 概要设计1. 系统用到的抽象数据类型定义: ADT Linklist数据元素:可以是任意类型的数据,但必须属于同一个数据对象。关系:单链表中的数据元素之间是线性关系。基本操作:(1) STUDENT *MallocNode(); 申请结点并初始化 (2)CreateHeadLink(); 建立键表表头(3) InsertOneNode(STUDENT *t) 插入一个结点(4) DesplayOneNode(STUDENT *t) 向屏幕输出一个结点(5) GetInformation(STUDENT *t) 获得一个结点的信息ADT

6、Linklist;2. 系统中子程序及功能要求: (1) ReadInfoFormFile(); 从文件读入数据(2) OutputInformation(); 向屏幕输出所有结点信息(3) Insertonestudent(); 添加一个学生(4) DeleteNodeBystudentNumber() 删除一个学生(5) CompositorByTotalMark(); 按姓名排序(6) Outputtofile(); 输出所有信息到文件(7) Choicesubject(STUDENT *t); 修改一个成绩(8) Ifcontinue(STUDENT *t); 询问部分(9) Chan

7、gemark(); 查找并修改成绩3. 各程序模块之间的调用关系三 详细设计第一个功能:显示已有学生成绩信息思路:在主函数中,调用建立表头函数,建立表头,并将表头的地址赋给头指针,头指针是一个全局变量,在一开始被赋值,便于在下面的其它函数中可被直接运用,不必作为实参传递;然后调用从文件读入数据函数,首先申请结点空间并初始化,在初始化的时候直接将新结点的指针域置零,这样在插入的时候只需要改变原链表的尾指针,便于插入操作,再利用循环,每次读入一个学生的信息,然后将数据分别赋给对应的变量,最后将结点插在表尾。文件读入后,直接调用显示函数,头指针已是全局变量,直接运用,用循环将所有结点信息输出到屏幕。

8、第二个功能:添加一位学生的信息思路:添加一位学生信息和一开始的读入是一样的,这次是从键盘输入学生信息赋给对应变量,然后调用插入结点函数将新的学生信息插入到原链表的尾部,插入成功后有提示是否继续添加,若是,则调用第二个功能函数自己继续添加,若否,则将插入后的所有信息显示。第三个功能:删除一位学生的信息思路:首先用户从键盘输入一个要删除的学生的学号,然后根据学号查找该学生,同时设置两个指针,一个指最终指向要删除的结点,另一个指向要删除的结点的前一个结点,找到后,先将目标结点的指针域的值赋给前一个结点的指针域,然后将目标结点的空间释放,删除成功后,同样像在第二个功能中一样,询问是否继续删除,在都删除

9、完了以后,再将新的所有学生信息输出。第四个功能:修改学生成绩思路:首先从键盘输入一个要修改的学生的学号,根据学号查找该学生,在找到后,询问要修改的是哪一门的成绩,确定后再输入新的成绩,修改完成后询问是否修改其它科目的成绩,若是,则调用选择科目函数自身继续修改,若否,则继续询问是否修改其他学生的成绩,若是,调用第四个功能函数,若否,则结束修改,并将新的所有信息输出。第五个功能:按姓名升序排序思路:就像数组里的冒泡排序一样,利用两层循环,第一次用第一个学生的姓名分别和后面每一个比较,若后者小于前者,则进行交换,第一趟结束后,最小的就在第一个位置,后然再拿第二个进行比较,最终所有的都会比较一遍,将所

10、有信息按照姓名升序排好。四 设计与调试分析1、欢迎界面2、功能选择界面(1)显示已有学生成绩信息(2)添加一位学生的信息(3)删除一位学生的信息(4)修改学生成绩(5)按姓名升序排序(6)退出在此界面选择要使用的功能的序号,选择后进入相应的功能界面。3、显示已有学生成绩信息 屏幕上显示出原来文件中所存储的学生成绩信息,显示正确。4、添加一位学生的信息 从键盘输入新的学生的信息,回车键结束,屏幕显示询问是否继续,选择否,然后屏幕显示出更新后的所有学生信息,显示正确。5、删除一位学生的信息 从键盘输入一个学生的学号,回车键结束,屏幕显示删除成功并询问是否继续删除,选择否,然后屏幕显示删除后剩下的所

11、有学生信息,显示正确。6、修改学生成绩从键盘输入一个学生的学号,回车键结束,询问要修改的科目,输入1,回车键确定,提示输入新的成绩,输入后回车键确定,询问是否修改其它成绩,选择No,确定,询问是否修改其他学生的成绩,选择No,确定,屏幕显示修改过后的新的学生成绩信息,显示正确。7、按姓名升序排序在功能选择界面选择该功能后,屏幕直接显示出按姓名升序排序后的学生信息,并且将屏幕上的信息输出到名为“newstudentfile”的txt文件中,屏幕显示正确,运行文件夹下有对应的文件。8、退出屏幕再次显示欢迎界面,显示正确。五 用户手册(1)运行程序后进入欢迎界面,点击任意键进入功能选择界面;(2)在

12、功能界面输入您所要使用的功能的序号,点回车键确定;(3)显示已有学生成绩信息:屏幕直接显示原有文件中所有信息,点击任意键返回功能选择界面(4)添加一位学生的信息:从键盘分别输入屏幕提示要输入的学生信息,每输入一个要点击回车键确定,在询问部分,可选择继续添加,也可选择添加结束,添加完毕后显示所有学生信息,点击任意键返回功能选择界面。(5)删除一位学生的信息:从键盘输入一个学生的学号,按回车键确定,删除成功后,提示是否继续删除,根据用户需要选择,删除完毕后显示所有学生信息,点击任意键返回功能选择界面。(6)修改学生成绩:输入一个学生的学号,提示选择修改的科目,选择后输入新的成绩,输入新成绩后按回车

13、确定,询问是否修改其它科目的成绩,在修改完一个人的成绩后,提示是否修改其他人的成绩,所有修改都已完成后显示所有学生信息,点击任意键返回功能选择界面。(7)按姓名升序排序:直接显示排好顺序的学生信息,同时会向程序所在文件中输出一个名为“newstudentfile”的txt文件。(8)退出:返回欢迎界面六 测试成果欢迎界面功能选择界面显示已有学生成绩信息添加一位学生的信息及询问成功添加后显示所有学生信息删除一个学生及询问删除后显示所有学生信息只修改一个人的一门成绩修改后的所有学生信息(学号为10015的成绩一已经修改为100)按姓名升序排序后的学生信息七 附录(源程序清单)#include#in

14、clude#include#include#include/清屏typedef struct STUDENT/char studentNumber10;/*学生学号*/char studentName20;/*学生姓名*/float mark1;/*第1门成绩*/float mark2;/*第2门成绩*/float mark3;/*第3门成绩*/struct STUDENT *next;STUDENT;STUDENT *headLink;/*链表表头指针,适用于全局*/*所有函数的声明*/void CreateHeadLink();/建立链表表头STUDENT *MallocNode();/申

15、请新结点并初始化void InsertOneNode(STUDENT *t);/在表尾插入一个结点void ReadInfoFormFile();/从文件读入数据void DesplayOneNode(STUDENT *t);/输出一个结点的信息void OutputInformation();/向屏幕输出所有信息(第一个功能)void GetInformation(STUDENT *t);/输入添加学生的信息void Insertonestudent();/添加一个学生(第二个功能)void DeleteNodeBystudentNumber();/删除一个学生(第三个功能)void Com

16、positorByTotalMark();/按姓名排序(第四个功能)void Outputtofile();/输出所有信息到文件void Choicesubject(STUDENT *t);/修改一个成绩void Ifcontinue(STUDENT *t);/询问部分void Changemark();/查找并修改成绩(第五个功能)void Welcomeinterface();/欢迎界面void Choiceinterface();/选择功能界面void First();/第一个功能void Second();/第二个功能void Third();/第三个功能void Thouth();/

17、第四个功能void Fifth();/第五个功能void main()CreateHeadLink();ReadInfoFormFile();Welcomeinterface();/*函数功能:显示欢迎界面*/void Welcomeinterface()printf(n);printf(n);printf(n);printf(n);printf( );printf(*n);printf(n);printf(n);printf(n);printf( );printf( 欢迎使用学生成绩管理系统n);printf(n);printf(n);printf(n);printf( );printf(*

18、n);printf(n);printf(n);printf(n);printf(n);system(pause);system(cls);Choiceinterface();/*函数功能:显示功能选择界面*/void Choiceinterface()int n;printf(n);printf(n);printf( );printf(*n);printf(n);printf( );printf( 系统功能n);printf( );printf( 1、显示已有学生成绩信息n);printf( );printf( 2、添加一位学生的信息n);printf( );printf( 3、删除一位学生的

19、信息n);printf( );printf( 4、修改学生成绩n);printf( );printf( 5、按姓名升序排序n);printf( );printf( 6、退出n);printf(n);printf( );printf(*n);printf(n);printf(n);printf(请输入您要使用的功能的序号:);scanf(%d,&n);system(cls);switch(n)case 1:First();break;case 2:Second();break;case 3:Third();break;case 4:Thouth();break;case 5:Fifth();br

20、eak;case 6:Welcomeinterface();break;/*函数功能:第一个功能实现*/void First()OutputInformation();printf(按任意键返回主菜单n);system(pause);system(cls);Choiceinterface();/*函数功能:第二个功能实现*/void Second()int n;Insertonestudent();printf(n);printf(是否继续添加?nn);printf(t1.Yest2.Non);printf(请输入您的选择序号:);scanf(%d,&n);if(n=1)system(cls)

21、;Second();elsesystem(cls);printf(添加后的学生信息n);OutputInformation();printf(按任意键返回主菜单n);system(pause);system(cls);Choiceinterface();/*函数功能:第三个功能实现*/void Third()int n;DeleteNodeBystudentNumber();printf(n);printf(是否继续删除?nn);printf(t1.Yest2.Non);printf(请输入您的选择序号:);scanf(%d,&n);if(n=1)system(cls);Third();els

22、esystem(cls);printf(删除后的学生信息n);OutputInformation();printf(按任意键返回主菜单n);system(pause);system(cls);Choiceinterface();/*函数功能:第四个功能实现*/void Thouth()int n;Changemark();printf(n);printf(是否继续修改其他人的成绩?nn);printf(t1.Yest2.Non);printf(请输入您的选择序号:);scanf(%d,&n);if(n=1)system(cls);Thouth();elsesystem(cls);printf(

23、修改后的学生信息n);OutputInformation();printf(按任意键返回主菜单n);system(pause);system(cls);Choiceinterface();/*函数功能:第五个功能实现*/void Fifth()CompositorByTotalMark();printf(按任意键返回主菜单n);system(pause);system(cls);Choiceinterface();/*函数功能:建立链表表头*/void CreateHeadLink()STUDENT *p;p=(STUDENT*)malloc(sizeof(STUDENT);headLink=

24、p;/给表头指针赋初值p-next=NULL;/*函数功能:申请一个新结点,并将其初始化*/STUDENT *MallocNode()STUDENT *p;int i;p=(STUDENT*)malloc(sizeof(STUDENT);if(p=NULL)return NULL;for(i=0;istudentNumberi=0;for(i=0;istudentNamei=0;p-mark1=0.0;p-mark2=0.0;p-mark3=0.0;p-next=NULL;/便于在插入结点时直接插在表尾return p;/*函数功能:在表尾插入一个结点*/void InsertOneNode(

25、STUDENT *t)STUDENT *p;p=headLink;/表头指针前面已赋值while(p-next)p=p-next;p-next=t;/*函数功能:从文件读入数据*/void ReadInfoFormFile()FILE *fp;STUDENT *p;fp=fopen(student.txt,r);if(!fp)printf(文件不存在n);return;p=MallocNode();while(fscanf(fp,%s%s%f%f%f,p-studentNumber,p-studentName,&(p-mark1),&(p-mark2),&(p-mark3)0)InsertOn

26、eNode(p);p=MallocNode();fclose(fp);/*函数功能:输出一个结点的信息*/void DesplayOneNode(STUDENT *t)printf(%st,t-studentNumber);printf(%stt,t-studentName);printf(%.2ft,t-mark1);printf(%.2ft,t-mark2);printf(%.2ft,t-mark3);printf(%.2ft,t-mark1+t-mark2+t-mark3);printf(%.2ftn,(t-mark1+t-mark2+t-mark3)/3);/*函数功能:向屏幕输出所有

27、信息*/void OutputInformation()STUDENT *p;p=headLink-next;if(p=NULL)printf(现在没有学生信息,请先输入学生信息nn);return;printf(n学号t姓名tt成绩1t成绩1t成绩3t总成绩t平均成绩nn);while(p)DesplayOneNode(p);p=p-next;/*函数功能:输入添加学生的信息*/void GetInformation(STUDENT *t)printf(请输入学生学号:);scanf(%s,t-studentNumber);printf(请输入学生姓名:);scanf(%s,t-studen

28、tName);printf(请输入第1门成绩:);scanf(%f,&(t-mark1);printf(请输入第2门成绩:);scanf(%f,&(t-mark2);printf(请输入第3门成绩:);scanf(%f,&(t-mark3);/*函数功能:添加一个学生*/void Insertonestudent()STUDENT *p;printf(添加一个学生:n);p=MallocNode();GetInformation(p);InsertOneNode(p);printf(添加成功!n);/*函数功能:根据用户输入的学号删除该学生*/void DeleteNodeBystudentN

29、umber()char studentNumber10;STUDENT *p,*q;int flag=0;printf(删除一个学生n);printf(请输入要删除的学生学号:);scanf(%s,studentNumber);p=headLink;q=headLink-next;while(q)if(strcmp(q-studentNumber,studentNumber)=0)p-next=q-next;free(q);flag=1;break;p=p-next;q=q-next;if(!flag)printf(不存在该学号的学生n);return;printf(成功删除n);/*函数功能

30、:按姓名排序*/void CompositorByTotalMark()STUDENT exchange,*r,*p,*q;r=headLink-next;if(r=NULL)printf(现在还没学生信息,请先输入学生信息n);return;while(r)/*两层while循环实现排序*/p=r;q=r-next;while(q)if(strcmp(p-studentName,q-studentName)0)strcpy(exchange.studentNumber,p-studentNumber);/*先复制p结点信息到exchange*/strcpy(exchange.studentN

31、ame,p-studentName);exchange.mark1=p-mark1;exchange.mark2=p-mark2;exchange.mark3=p-mark3;strcpy(p-studentNumber,q-studentNumber);/*再复制q结点信息到p*/strcpy(p-studentName,q-studentName);p-mark1=q-mark1;p-mark2=q-mark2;p-mark3=q-mark3;strcpy(q-studentNumber,exchange.studentNumber);/*最后复制exchange结点信息到q*/strcp

32、y(q-studentName,exchange.studentName);q-mark1=exchange.mark1;q-mark2=exchange.mark2;q-mark3=exchange.mark3;q=q-next;r=r-next;printf(按姓名升序排序n);OutputInformation();Outputtofile();/*函数功能:输出所有信息到文件*/void Outputtofile()STUDENT *p;p=headLink-next;FILE *fp;fp=fopen(newstudentfile.txt,w);fprintf(fp,n学号t姓名tt成绩1t成绩1t成绩3t总成绩t平均成绩nn);while(p)fprintf(fp,%st,p-studentNumber);fprintf(fp,%stt,p-studentName);fprintf(fp,%.2ft,p-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论