《数据结构大作业(12页).doc》由会员分享,可在线阅读,更多相关《数据结构大作业(12页).doc(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-数据结构大作业-第 12 页课程设计说明书设计题目: 学生管理系统专 业: xxxxxx班级: xxxxxxxxxxxxxxxxxx设 计 人: xxxxxxxxxxxxxxx山 东 科 技 大 学2015年 1 月 3 日山 东 科 技 大 学课 程 设 计 任 务 书专业: xxx 班级:xxxxx 学号:xxxxxxx一、 课程设计题目:学生管理系统二、 设计原始资料:1、数据结构(C语言版) 人民邮电出版社2、C+面向对象程序设计 电子工业出版社3、程序设计基础-基于C语言 科学出版社三、 设计应解决下列各主要问题:1、 首先输入所有学生的信息。2、输出一个学生学号后,能查找到此学生
2、的信息并输出结果(采用查找方法实现)3、要求是用结构体,链或数组等实现上述要求4、先按总成绩高的优先输出,总成绩相同学号小的优先输出四、 设计说明书应附有下列图纸: 1、功能模块图 2、存储学生信息流程图 3、查询个人信息流程图 4、主函数流程图 五、命题发出日期:2015年11月3日设计完成日期:2016年1月3日设计指导教师(签章): 系主任(签章): 课程设计成绩评定表分类成绩平时考勤(20%)平时实验(30%)综合实验(30%)课程设计说明书质量(20%)总分指导教师(签章):年月日 学生管理系统 学生信息管理者用此程序所要完成的主要工作为:输入学生的个人信息、查找学生信息、通过此系统
3、可以方便的进行上述工作。每位同学所包含的信息有:姓名、学号、语文成绩、数学成绩和英语成绩。1.1 主函数模块 本模块的主要功能是调用各个模块,实现程序的主要功能。 1.2 排序功能 本模块的主要功能是根据用户的选择进行数组的创建,并对输入数据或者随机产生的数据进行排序1.3 输入子模块 本模块的主要功能是通过键盘录入学生信息,并对用户输入数据进行处理,创建数组。1.4 系统需求分析开发环境:Windows XP以上版本操作系统实用软件:编写实验报告:Microsoft Office Word二、概要设计2.1 功能模块图 开始 退出系统查询学生信息输出有补考的同学添加学生信息 功能模块图(1)
4、存储学生信息功能,定义结构体student,用scanf和cin函数进行输入。流程图如图 存储学生信息流程图: 程序开始 初始化存入结构体数组中 inYN 结束 存储学生信息流程图 相应代码设计:typedef struct Achar a20;/学生姓名 int num;/学生学号int chscore,mascore,enscore;/学生的语文数学英语成绩 Student; /存储学生个人信息的结构体typedef structStudent *elem;int length; SqList;(2) 查找有补考的同学,并按成绩降序排列输出。流程图如图查找有补考同学信息功能流程图: 开始用
5、sort函数排序,再进行判断输出信息L.elemi.chscore60|L.elemi.mascore60|L.elemi.enscore60 Y 结束没有补考的同学 N 查找有补考同学信息功能流程图 (3) 将学生按照学号的升幂排序,为后续查询学生用二分查找提供条件。流程图如图sort函数排序流程图: 开始调用sort函数 in? N Ya.num b.num? N 结束 Y 交换 sort函数排序流程图(4) 查找学生个人信息,根据用户输入的学号进行查找。查找方法为二分查找。(5) 主函数流程图如图主函数流程图: 开始 结束二分查找 i p?输出有补考的同学Scanf和cin函数in?Cr
6、eatList(L,m);构造一个学生系统N YNYNY 主函数流程图2.2 各模块函数 bool cmp (const Student &a,const Student &b);/按照总成绩进行排序bool cmpp (const Student &a,const Student &b);/按照学号进行排序void CreatList(SqList &L,int n);/建立数组void Sesrch_Bin(SqList &L,int n);/进行二分查找三、详细设计3.1 输入学生信息程序运行后,创建一个student结构体,多组情况,每组输入两个整数分别表示学生的总数和查询数量。 调用
7、sort()函数,首先将学生按成绩排序,运用for循环和if(L.elemi.chscore60|L.elemi.mascore60|L.elemi.enscore60)语句输出,如果总成绩相同,学号小的在前面。3.3 排序调用sort()函数对Student按照学号升序进行排序,此函数中采用了冒泡排序的方法,此方法只有在前一个学生的学号大于后一个学生的学号时,才会需要一个辅助空间用作暂存记录,空间复杂度低,并且稳定。 3.4 查询学生信息运用for循环函数,输入要查询学生的学号,对已经排序的student进行二分查找,low=high时遍历,如果nu=smid.no 时找到输出学生的信息语句
8、:printf(%s %d %d %d %dn,L.elemi.a,L.elemi.num,L.elemi.chscore,L.elemi.mascore,L.elemi.enscore);如果没有输出printf(NOT FOUNDn); 主函数中while()等待输入,用户只要在运行的页面中输入ctrl+z,即可退出系统。四、 运行结果及分析本程序需用二分法,其余方法超时,在输入输出时注意用标准语言输入,注意格式。在运行框内输入 Zhangyi 201501 90 90 90Zhanger 201502 80 80 80Zhangsan 201404 70 70 70Zhangsi 201
9、504 60 60 60Zhangwu 201505 50 50 50wcr 1124 100 100 100loushangdashen 1234 60 60 602015012015032015051201506输出结果为下图:五.总结 通过这次课程设计,我学会了很多,首先,我对自身的知识掌握度加大了,以前只是单纯的课本掌握,现在通过编写,修改,测试程序,对课程设计中的一些知识更加了解了。其次,对于一些比较死板的知识,通过运用,对它提高了很大的兴趣,而且,自己设计的程序能够运行出来,自己非常有自豪感,满足感。 总的说来,努力还是很有成效的,锻炼了整体的能力,并且通过一次次的调试来读懂程序,
10、程序更加完善。数据结构在编程语言中是一门相当有技术含量的语言,学会并能够掌握它,对以后的生活帮助很大。附:主要算法的源代码#include#include#include#include#includeusing namespace std;typedef int Status;#define OK 1#define ERROR 0#define OVERFLOW -2#define MAXSIZE 2001typedef structchar a20;int num;int chscore,mascore,enscore; Student;typedef structStudent *ele
11、m;int length; SqList;bool cmp (const Student &a,const Student &b)int sum1 = a.chscore + a.mascore + a.enscore;int sum2 = b.chscore + b.mascore + b.enscore;if(sum1 = sum2)return a.num sum2;bool cmpp (const Student &a,const Student &b)return a.num b.num;void CreatList(SqList &L,int n)L.elem=new Studen
12、tMAXSIZE;for(int i=0; iL.elemi.numL.elemi.chscoreL.elemi.mascoreL.elemi.enscore;L.length=n;void Sesrch_Bin(SqList &L,int n)int low=0,high=L.length-1,mid;while(low=high)mid=(low+high)/2;if(num=L.elemmid.num) return mid;else if(numL.elemmid.num) high=mid-1;else low=mid+1;return 0;int main()int m,n,a;S
13、qList L;scanf(%d%d,&m,&n);CreatList(L,m);sort(L.elem,L.elem+n,cmp);for(int i=0; im; i+)if(L.elemi.chscore60|L.elemi.mascore60|L.elemi.enscore60)printf(%s %d %d %d %dn,L.elemi.a,L.elemi.num,L.elemi.chscore,L.elemi.mascore,L.elemi.enscore);sort(L.elem,L.elem+n,cmpp);for(int i=0; ia;b=Sesrch_Bin(L,a);if(b=0)printf(NOT FOUNDn);elseprintf(%s %d %d %d %dn,L.elemb-1.a,L.elemb-1.num,L.elemb-1.chscore,L.elemb-1.mascore,L.elemb-1.enscore);
限制150内