收藏 分享(赏)

学生管理系统 《数据结构》课程设计报告.doc

上传人:精品资料 文档编号:10766403 上传时间:2020-01-08 格式:DOC 页数:31 大小:1.16MB
下载 相关 举报
学生管理系统 《数据结构》课程设计报告.doc_第1页
第1页 / 共31页
学生管理系统 《数据结构》课程设计报告.doc_第2页
第2页 / 共31页
学生管理系统 《数据结构》课程设计报告.doc_第3页
第3页 / 共31页
学生管理系统 《数据结构》课程设计报告.doc_第4页
第4页 / 共31页
学生管理系统 《数据结构》课程设计报告.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

1、信息科学与技术学院数据结构课程设计报告题目名称: 学生管理系统专业班级: 11 级计科 2 班学生姓名: 陶 鑫学生学号: 2011508035指导教师: 郭 理完成日期:2013-01-091 课程设计的目的 .11.1 课程设计的目的 11.2 课程设计的题目 11.3 题目要求 12 概要设计 22.1 存储结构 22.2 基本操作 33 详细设计 33.1 流程图 33.2 源程序 104 测试 .215 课程设计总结 .296 参考书目: .2901 课程设计的目的1.1 课程设计的目的更好的掌握数据结构这门课程,会用数据结构的基本思想及算法解决实际问题。更好的掌握链表,能进行各种基

2、本的操作,提高编程能力。1.2 课程设计的题目学生管理系统1.3 题目要求使用下面的数据,用 C/C+设计一个简单的学籍管理系统,实现出最基本的功能。学生基本信息文件(A.TXT)及其内容:A.TXT 文件不需要编程录入数据,可用文本编辑工具直接生成学号 姓名 性别 宿舍号码 电话号码01 张成成 男 501 8773211102 李成华 女 101 8772311203 王成凤 女 101 8772311204 张明明 男 502 8773433305 陈东 男 501 8773211106 李果 男 502 8773433307 张园园 女 102 87756122 . 学生成绩基本信息文

3、件(B.TXT)及其内容:学号 课程编号 课程名称 学分 平时成绩 实验成绩 卷面成绩 综合成绩 实得学分01 A01 大学物理 3 66 78 82 02 B03 高等数学 4 78 -1 9001 B03 高等数学 4 45 -1 8802 C01 VF 3 65 76 66 . . (一) 功能要求及说明:(1) 数据录入功能 : 对 B.TXT 进行数据录入,只录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共 7 个数据. 综合成绩、学分由程序根据条件自动运算。综合成绩的计算:如果本课程的实验成绩为 -1,则表示无实验,综合成绩=平时成绩*30%+卷面成绩*

4、70%; 如果实验成绩不为-1, 表示本课程有实验 ,综合成绩=平时成绩*15%+实验成绩*.15%+卷面成绩*70% . 1实得学分的计算: 采用等级学分制 . 综合成绩在 90-100 之间 ,应得学分=学分*100% 综合成绩在 80-90 之间 ,应得学分=学分*80%综合成绩在 70-80 之间 ,应得学分=学分*75% 综合成绩在 60-70 之间 ,应得学分=学分*60%综合成绩在 60 以下 ,应得学分=学分*0%(2)查询功能:分为学生基本情况查询和成绩查询两种A:学生基本情况查询:A1-输入一个学号或姓名(可实现选择) ,查出此生的基本信息并显示输出。A2-输入一个宿舍号码

5、,可查询出本室所有的学生的基本信息并显示输出。B:成绩查询:B1:输入一个学号时,查询出此生的所有课程情况,格式如下:学 号:xx 姓 名:xxxxx课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx 共修:xx 科,实得总学分为: xxx(3)删除功能:当在 A.TXT 中删除一个学生时,自动地在 B.TXT 中删除此人所有信息。(4 ) 排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。(二)其它要

6、求:(1) 只能使用 C/C+语言,源程序要有适当的注释,使程序容易阅读(2) 至少采用文本菜单界面(如果能采用图形菜单界面更好)(3) 学生可自动增加新功能模块(视情况可另外加分)(4)写出课程设计报告,具体要求见相关说明文档2 概要设计2.1 存储结构首先,为了能使自己得到锻炼,存储结构我使用了顺序存储与链式存储,学生基本信息用的数组来存储,对学生成绩基本信息使用链表进行存储。结构体定义如下:/学生基本信息的结构体定义typedef struct studentstring xuehao; /学号string name; /姓名string gender; /性别string sushe;

7、 /宿舍号string tel;/电话2student;/学生成绩信息的结构体定义typedef struct gradestring xuehao;/学号string courseno; /课程号string coursename; /课程名称int xuefen; /学分int pingshi; /平时成绩int shiyan; /实验成绩int juanmian;/卷面成绩float zonghe;/综合成绩float shide;/实得学分grade *next;grade;2.2 基本操作(1)数据录入功能(2)查询功能(3)删除功能(4)排序功能(5)显示所有学生信息(6)保存(7

8、)退出3 详细设计3.1 流程图各个算法的设计如下:1.主函数:int main( );从 A.txt 中读取存储的学生基本信息到内存,以便进行处理,过程如图 13图 12.菜单函数:void menu(student *stu,grade *head,grade *gra);stu 是指向学生基本信息数组的指针,head 是指向学生成绩信息链表头结点的指针,gra 是指向学生成绩信息链表最后一个结点的指针。用于进行指示进行各种操作,是与每个函数都相联系的一个函数,功能操作见图 2开始创建存储学生信息的单链表的头结点将学生信息读取到内存调用菜单函数结束6 保存 0 退出开始输入 i菜单4 排序

9、3 删除 5 显示学生信息2 查询1 数据录入其他有误误保存 退出开始输入菜单排序删除 显示学生信息查询数据录入其他有误误结束4图 23.数据录入函数:void luru(grade *gra);其中 gra 是指向单链表最后一个结点的指针,用于后插法中进行插入。将学生成绩信息依次输入单链表中,其中单链表边输入边创建,综合成绩和实得学分可由计算机自己计算。流程图见图 3Y N90-100 80-90 70-80 60-70 60 以下输入学生平时成绩输入学生实验成绩输入学生卷面成绩输入学生课程编号输入学生的学号输入学生学分开始gra-shiyan=-1综合成绩=平时成绩*30%+卷面成绩*70

10、%判断成绩范围应得学分=学分*100% 应得学分=学分*80% 应得学分=学分*75% 应得学分=学分*60% 应得学分=0结束综合成绩=平时成绩*15%+实验成绩*.15%+卷面成绩*70% 输入学生平时成绩输入学生实验成绩输入学生卷面成绩输入学生课程编号输入学生的学号输入学生学分开始综合成绩 平时成绩 卷面成绩5图 34.查询功能:void lookfor(student *p,grade *head);P 为指向学生基本信息数组的指针,head 为指向学生成绩链表的头结点的指针。有学生基本情况查询和成绩查询两种大功能,基本情况查询又分为按学号或姓名查找单个学生基本信息,也可输入宿舍号查询

11、整个宿舍学生的基本信息。成绩查询只要输入学号便可查询相应学生的成绩信息。见图 4图 45.删除功能:void del(student *stu,grade *head);stu 为指向学生基本信息数组的指针,head 为指向学生成绩链表的头结点的指针。执行删除功能时在存储学生基本信息的数组中与存储学生成绩信息的链表1.输入一个学号或姓名 2.输入一个宿舍号码 a 按学号查找 b 按姓名查找 输出一个宿舍学生信息输出相应学生信息输出相应学生所有成绩结束开始输入 iA:学生基本情况查询 B:成绩查询输入 j 输入学号6中同时删除该学生信息,以便进行下面操作与向文件中存储信息。功能见图 5图 56.

12、排序功能:void sort(grade *head);head 为指向学生成绩链表的头结点的指针。下面流程图实现的是按综合成绩升序排序,使用的选择排序法,虽说使用的存储结构为链式存储结构,但排序时并非改变的指针指向,而是只修改存储的信息,指针指向不用改变。如图 6开始输入要删除学生的学号在学生基本信息中删除 在学生成绩基本信息中删除结束7NYNYNY 图 67.显示所有学生信息:void show(student *stud);P!=NULLhead-zonghep-zonghe交换相邻节点中数据p=p-nexthead=head-next开始head=head-nexthead-next!

13、=NULLp=head-next!交换相邻节点中数据结束8stud 为指向学生基本信息数组的指针用于显示内存中学生基本情况信息,以便更好了解学生的一些情况.NY图 78.保存功能:void save1(student *stud); void save2(grade *head);stud 为指向学生基本信息数组的指针,head 为指向学生成绩链表的头结点的指针。函数用于将内存中数据存储到文件中以便更好保存信息。NY NYi+开始i=1studi.xuehao!=“0“输出学号,姓名,性别,宿舍,电话号结束开始输入ii=1I=2保存学生基本信息到 A.TXT保存学生成绩信息到 B.TXT输入有

14、误,重新操作!结束9图 83.2 源程序#define num 10#include .#include #include /定义文件输入输出流using namespace std;/学生基本信息的结构体定义typedef struct studentstring xuehao; /学号string name; /姓名string gender; /性别string sushe; /宿舍号string tel;/电话student;/学生成绩信息的结构体定义typedef struct gradestring xuehao;/学号string courseno; /课程号string cou

15、rsename; /课程名称int xuefen; /学分int pingshi; /平时成绩int shiyan; /实验成绩int juanmian;/卷面成绩float zonghe;/综合成绩float shide;/实得学分grade *next;grade;void luru(grade *gra);void menu(student *stu,grade *head,grade *gra);void lookfor(student *p,grade *head);void sort(grade *head);void out(grade *head);void sort1(gra

16、de *head);void del(student *stu,grade *head);void show(student *stu);10void save1(student *stud);void save2(grade *head);void leave();/数据录入void luru(grade *gra)string str;coutstr;gra-xuehao=str;coutgra-courseno;coutgra-coursename;coutgra-xuefen;coutgra-pingshi;coutgra-shiyan;coutgra-juanmian;/综合成绩计算

17、if(gra-shiyan=-1)gra-zonghe=gra-pingshi*0.3+gra-juanmian*0.7;elsegra-zonghe=gra-pingshi*0.15+gra-juanmian*0.7+gra-shiyan*0.15;/实得学分的计算if(gra-zonghe=90else if(gra-zonghe=80)gra-shide=gra-xuefen*0.8;else if(gra-zonghe=70)gra-shide=gra-xuefen*0.75;else if(gra-zonghe=60)gra-shide=gra-xuefen*0.60;else if

18、(gra-zongheshide=0;else couti;switch(i)/学生基本情况查询 case A:coutj;/A1-输入一个学号或姓名(可实现选择) ,查出此生的基本信息并显示输出。if(j=1) coutk;if(k=a)coutstr;for( j=1;jstr;for( j=1;jstr; for( j=1;jstr;for(j=1;jnext;/指向首元结点while(head!=NULL)if(head-xuehao=str)coutcoursenocoursenamezongheshideshide;head=head-next; /指针后指coutnext;gra

19、de *q;coutstr;/在学生基本信息中删除for(int i=1;stui.xuehao!=“0“;i+)if(stui.xuehao=str) for(int j=i;stuj.xuehao!=“0“;j+)stuj.gender=stuj+1.gender;stuj.name=stuj+1.name;stuj.sushe=stuj+1.sushe;stuj.tel=stuj+1.tel;stuj.xuehao=stuj+1.xuehao;stuj.gender=“0“;stuj.name=“0“;stuj.sushe=“0“;stuj.tel=“0“;stuj.xuehao=“0“

20、;/在学生成绩基本信息中删除while(p)if(p-xuehao=str)head-next=p-next;q=p;p=p-next;delete q;elsep=p-next;head=head-next;coutnext;head-next;head=head-next)for(grade *p=head-next;p;p=p-next)if(head-zonghep-zonghe)temp-xuehao=head-xuehao;head-xuehao=p-xuehao;p-xuehao=temp-xuehao;temp-courseno=head-courseno;head-cours

21、eno=p-courseno;p-courseno=temp-courseno;temp-coursename=head-coursename;head-coursename=p-coursename;p-coursename=temp-coursename;temp-xuefen=head-xuefen;head-xuefen=p-xuefen;p-xuefen=temp-xuefen;temp-pingshi=head-pingshi;head-pingshi=p-pingshi;p-pingshi=temp-pingshi;temp-shiyan=head-shiyan;head-shi

22、yan=p-shiyan;p-shiyan=temp-shiyan;temp-juanmian=head-juanmian;head-juanmian=p-juanmian;p-juanmian=temp-juanmian;temp-zonghe=head-zonghe;head-zonghe=p-zonghe;15p-zonghe=temp-zonghe;temp-shide=head-shide;head-shide=p-shide;p-shide=temp-shide;/数据交换coutnext;head-next;head=head-next)for(grade *p=head-nex

23、t;p;p=p-next)if(head-shideshide)temp-xuehao=head-xuehao;head-xuehao=p-xuehao;p-xuehao=temp-xuehao;temp-courseno=head-courseno;head-courseno=p-courseno;p-courseno=temp-courseno;temp-coursename=head-coursename;head-coursename=p-coursename;p-coursename=temp-coursename;temp-xuefen=head-xuefen;head-xuefe

24、n=p-xuefen;p-xuefen=temp-xuefen;temp-pingshi=head-pingshi;head-pingshi=p-pingshi;p-pingshi=temp-pingshi;temp-shiyan=head-shiyan;head-shiyan=p-shiyan;p-shiyan=temp-shiyan;16temp-juanmian=head-juanmian;head-juanmian=p-juanmian;p-juanmian=temp-juanmian;temp-zonghe=head-zonghe;head-zonghe=p-zonghe;p-zon

25、ghe=temp-zonghe;temp-shide=head-shide;head-shide=p-shide;p-shide=temp-shide;coutnext;coutxuehaocoursenocoursenamexuefenpingshishiyanjuanmianzongheshidenext;/显示所有学生信息void show(student *stud)for(int i=1;studi.xuehao!=“0“;i+) coutnext;outfilexuehaocoursenocoursenamexuefenpingshishiyanjuanmianzongheshid

26、enext;outfile.close(); /关闭文件void leave()couti;switch(i)case 1:p=new grade;p-next=NULL;gra-next=p;gra=p;luru(gra); system(“pause“);system(“cls“);menu(stu,head,gra);break;case 2:lookfor(stu,head);system(“pause“);system(“cls“);menu(stu,head,gra);break;case 3:del(stu,head);system(“pause“);system(“cls“);

27、menu(stu,head,gra);break;case 4:couti;19if(i=1)sort(head);else if(i=2)sort1(head);elsecouti;if(i=1)save1(stu);else if(i=2)save2(head);elsecoutnext=NULL;r=gra1; for(int i=0;istudi.xuehaostudi.namestudi.genderstudi.sushestudi.tel; infile.close(); /关闭文件 menu(stud,gra1,r);return 0;4 测试 (1)菜单界面显示各种功能需进行的

28、各种操作,界面如下:21当输入操作有误时结果如下:(2)数据录入功能负责录入学生成绩信息,综合成绩和实得学分将由计算机自己完成。学生成绩由链表相连时间复杂度为 O(1),但程序还存在漏洞,当输入成绩为非数字类型时便会出现错误,还需进行完善。22输入成绩为非数字类型时便会出现错误,还需进行完善。如下图:(3)查询功能按提示进行操作得到的结果如下图,其中包括正确操作与非正确操作下的情况。 2324无成绩输入时成绩查询结果为:有成绩输入时查询结果:25(4)排序功能当已有成绩输入时操作结果如下:当无成绩输入时,给出提示“请先输入学生成绩信息再排序!”26(5)删除功能:删除后需保存,经保存后便可在相应文件中观察到相应信息的改变。(6) 保存功能分为学生基本信息保存和学生成绩保存两个功能:27(7)显示所有学生信息功能:(8)退出功能:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报