课程设计说明书设计题目:学生管理系统专业:xxxxxx班级:xxxxxxxxxxxxxxxxxx设计人:xxxxxxxxxxxxxxx 山东科技大学2015年 1 月 3 日学生管理系统1.需求分析说明学生信息管理者用此程序所要完成的主要工作为:输入学生的个人信息、查找学生信息、通过此系统可以方便的进行上述工作。
每位同学所包含的信息有:姓名、学号、语文成绩、数学成绩和英语成绩。
1.1 主函数模块本模块的主要功能是调用各个模块,实现程序的主要功能。
1.2 排序功能本模块的主要功能是根据用户的选择进行数组的创建,并对输入数据或者随机产生的数据进行排序1.3 输入子模块本模块的主要功能是通过键盘录入学生信息,并对用户输入数据进行处理,创建数组。
1.4 系统需求分析开发环境:Windows XP以上版本操作系统实用软件:编写实验报告:Microsoft Office Word编译工具:visual C++ 6.0二、概要设计2.1 功能模块图功能模块图2.2各模块的算法设计说明(1)存储学生信息功能,定义结构体student,用scanf和cin函数进行输入。
流程图如图2.1.1 存储学生信息流程图:存储学生信息流程图相应代码设计:typedef struct A{char a[20];//学生姓名int num;//学生学号int chscore,mascore,enscore;//学生的语文数学英语成绩} Student; //存储学生个人信息的结构体typedef struct{Student *elem;int length;} SqList;(2)查找有补考的同学,并按成绩降序排列输出。
流程图如图2.1.2查找有补考同学信息功能流程图:查找有补考同学信息功能流程图(3)将学生按照学号的升幂排序,为后续查询学生用二分查找提供条件。
流程图如图2.1.3sort函数排序流程图:sort函数排序流程图(4)查找学生个人信息,根据用户输入的学号进行查找。
查找方法为二分查找。
(5)主函数流程图如图3.1.4主函数流程图:主函数流程图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结构体,多组情况,每组输入两个整数分别表示学生的总数和查询数量。
3.2输出有补考学生的全部信息调用sort()函数,首先将学生按成绩排序,运用for循环和if(L.elem[i].chscore<60||L.elem[i].mascore<60||L.elem[i].enscore<6 0)语句输出,如果总成绩相同,学号小的在前面。
3.3 排序调用sort()函数对Student按照学号升序进行排序,此函数中采用了冒泡排序的方法,此方法只有在前一个学生的学号大于后一个学生的学号时,才会需要一个辅助空间用作暂存记录,空间复杂度低,并且稳定。
3.4 查询学生信息运用for循环函数,输入要查询学生的学号,对已经排序的student进行二分查找,low<=high时遍历,如果nu==s[mid].no 时找到输出学生的信息语句:{printf("%s %d %d %d %d\n",L.elem[i].a,L.elem[i].num,L.elem[i].chs core,L.elem[i].mascore,L.elem[i].enscore);}如果没有输出printf("NOT FOUND\n");3.5退出程序主函数中while(~)等待输入,用户只要在运行的页面中输入ctrl+z,即可退出系统。
四、运行结果及分析本程序需用二分法,其余方法超时,在输入输出时注意用标准语言输入,注意格式。
在运行框内输入Zhangyi 201501 90 90 90Zhanger 201502 80 80 80Zhangsan 201404 70 70 70Zhangsi 201504 60 60 60Zhangwu 201505 50 50 50wcr 1124 100 100 100loushangdashen 1234 60 60 602015012015032015051201506输出结果为下图:五.总结通过这次课程设计,我学会了很多,首先,我对自身的知识掌握度加大了,以前只是单纯的课本掌握,现在通过编写,修改,测试程序,对课程设计中的一些知识更加了解了。
其次,对于一些比较死板的知识,通过运用,对它提高了很大的兴趣,而且,自己设计的程序能够运行出来,自己非常有自豪感,满足感。
总的说来,努力还是很有成效的,锻炼了整体的能力,并且通过一次次的调试来读懂程序,程序更加完善。
数据结构在编程语言中是一门相当有技术含量的语言,学会并能够掌握它,对以后的生活帮助很大。
附:主要算法的源代码#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<iostream>using namespace std;typedef int Status;#define OK 1#define ERROR 0#define OVERFLOW -2#define MAXSIZE 2001typedef struct{char a[20];int num;int chscore,mascore,enscore;} Student;typedef struct{Student *elem;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 < b.num;elsereturn sum1 > sum2;}bool cmpp (const Student &a,const Student &b){return a.num < b.num;}void CreatList(SqList &L,int n){L.elem=new Student[MAXSIZE];for(int i=0; i<n; i++){scanf("%s",L.elem[i].a);cin>>L.elem[i].num>>L.elem[i].chscore>>L.elem[i].m ascore>>L.elem[i].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.elem[mid].num) return mid;else if(num<L.elem[mid].num) high=mid-1;else low=mid+1;}return 0;}int main(){int m,n,a;SqList L;scanf("%d%d",&m,&n);CreatList(L,m);sort(L.elem,L.elem+n,cmp);for(int i=0; i<m; i++){if(L.elem[i].chscore<60||L.elem[i].mascore<60||L.e lem[i].enscore<60)printf("%s %d %d %d %d\n",L.elem[i].a,L.el em[i].num,L.elem[i].chscore,L.elem[i].mascore,L.elem[i].enscore);}sort(L.elem,L.elem+n,cmpp);for(int i=0; i<n; i++){int b;cin>>a;b=Sesrch_Bin(L,a);if(b==0)printf("NOT FOUND\n");elseprintf("%s %d %d %d %d\n",L.elem[b-1].a,L. elem[b-1].num,L.elem[b-1].chscore,L.elem[b-1].mascore,L.elem[b-1]. enscore);}}。