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

下载本文档

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

文档简介

课 程 设 计 课程名称_数据结构_题目名称_学生成绩管理系统_学生学院_专业班级_ _ _学 号 _ _学生姓名_ _ _ _指导教师_ _ _ _ 2011年 7月 2日目 录1 系统问题与功能分析31.1 课程设计内容31.2 系统功能需求分析31.3 数据结构设计32 系统设计42.1 总体设计42.2 详细设计52.2.1 界面设计52.2.2 各功能模块的设计63 系统编码设计83.1 预处理命令及结构体类型的声明83.2调用用户验证的函数83.3 调用menu函数93.4调用input函数113.5调用display函数123.6调用排序函数(Sort函数,heapsort函数和sift函数)123.6.1 调用Sort函数133.6.2调用sift函数(调整堆)143.6.3 调用heapsort函数153.7调用add_a_record函数163.8调用search_a_record函数173.9调用tongji函数194.0调用open_the_text函数234.1调用WritetoText函数244.2 调用end函数254.3 Main函数254系统运行295 简单总结396 附录401 系统问题与功能分析1.1 课程设计内容学生成绩管理系统注:此系统是在visual C+6.0环境下设计1.2 系统功能需求分析本系统应实现以下需求:功能需求:1、提供身份验证,和使用系统的权限设置、判定。2、(教师用户)能实现本班同学各学期各科成绩的录入、编辑,数据必须保存在文件中,以便反复使用。 3、(学生用户或游客)提供对学号或姓名,各学期、各学科成绩的查询。 4、(学生和教师用户)能按各学期、各学科分数排序输出(每一科都要能排序输出)。 5、(教师用户)能统计各科成绩分数段的分布(60以下、6070、7080、8090、90100)情况,并输出。性能需求:1、操作界面美观、友好,有必要的容错处理(如:能判定学号位数和只能由09数字字符组成、能判定合理的成绩0100等);2、查询应根据查询条件合理选择先进的查询方法(其中必须保证至少有一种查找采用了散列查找); 3、排序算法要求采用堆排序实现; 4、分数段统计结果要求保存在单独的文件中;1.3 数据结构设计本系统需要处理的数据主要有:姓名、成绩等,相关数据的类型及说明如下:数据数据类型说明学号字符数组长度50姓名字符数组长度50学期整型类型1或2成绩浮点类型0-100账户名称字符数组长度19密码字符数组长度13 2 系统设计2.1 总体设计按系统分析的功能要求将系统划分为以下几个主要功能模块与结构:学生成绩管理系统教师用户游客用户学生用户2文件调出1信息查询1信息查询3文件调出2信息排序7文件操作6信息排序5信息分段统计4信息查询3信息编辑2信息浏览1信息输入教师用户:(1) 本模块功能是输入学生的各类信息(2) 本模块的功能是显示学生的各类信息和规定输出格式(3) 本模块的功能是实现学生信息的添加与修改。(4) 本模块的功能是按姓名、学号、学科查询学生成绩情况,名单中包含学期、学号、姓名、课程名及成绩。(5) 本模块的功能是统计学生成绩分段情况,统计结果可输出到文件。(6)本模块的功能是对学生信息按不同学科分数从高到低进行排序。(7)本模块的功能是打开、保存、关闭数据文件。学生用户:(1)本模块的功能是按姓名、学号、学科查询学生成绩情况,名单中包含学期、学号、姓名、课程名及成绩。(2)本模块的功能是对学生信息按不同学科分数从高到低进行排序。(3)本模块的功能是打开数据文件。游客用户:(1)本模块的功能是按姓名、学号、学科查询学生成绩情况,名单中包含学期、学号、姓名、课程名及成绩。(2)本模块的功能是打开数据文件。2.2 详细设计2.2.1 界面设计1、用户验证界面设计 设计风格简洁明了,显示明白。2、菜单设计主菜单设计:主要运用一些简单符号,数字和文字清晰地表达出系统的主要功能,让使用者可以一目了然地了解系统功能,既美观又实用。子菜单设计:主要运用一些简单符号构成,将主菜单的功能细分化,让功能实现更加清晰简单,让使用者更好地使用系统。2、输入界面的设计以简单的风格设计输入界面,运用一些星星图形和直线,构成美观的输入界面,如3、信息显示界面的设计为把信息清晰地显示出来,采用对齐方式,运用直线把信息排列得整整齐齐。2.2.2 各功能模块的设计根据划分的功能模块,定义以下主要函数实现各功能: 1、主函数main()开始主函数主要作用是控制调用其它函数协调工作,主要用switch语句来实现其功能。其流程图如下: 显示欢迎界面用户验证界面菜单选择add函数Open函数Write函数Tongji函数Modify函数Search函数sort函数input函数Dispaly函数结束2、memu函数本函数的功能是出现一个菜单界面,主要通过printf()函数实现菜单的设计,通过循环语句实现读入选择的功能。3、input函数本函数的功能是输入学生的各类信息,主要通过while,for的循环语句和repeat函数实现,主要运用strcmp函数实现对输入重复学号和重复姓名的错误提示,以及对输入不合理成绩的错误提示。4、display函数本函数的功能是显示学生的各类信息和规定输出格式,主要通过for的循环语句和printf()函数实现。5、sort函数本函数的功能是对学生的成绩进行排序,主要通过for的循环语句和指针实现,通过堆排序按各学科进行排序。6、add-a-record函数本函数的功能是添加一个学生的信息,主要通过while,for的循环语句和repeat函数实现,主要运用strcmp函数实现对添加重复学号和重复姓名的错误提示,以及对输入不合理成绩的错误提示。7、Modify函数本函数的功能是修改学生信息,主要通过while,for的循环语句和repeat函数实现,主要运用strcmp函数实现对输入重复学号和重复姓名的错误提示,以及对输入不合理成绩的错误提示。8、统计函数本函数的功能是统计学生个分数段的信息,信息中包含学期、学号、姓名、课程名及成绩,主要通过for及if的循环语句实现。9、search-a-record函数本函数的功能是查找需要了解的学生的信息,主要通过循环语句实现,包括for语句,while语句和if语句。10、open-the-text函数本函数的功能是打开需要导入的文件,主要通过“rb”,fopen,fscanf,fprintf和fclose函数实现打开文件的功能11、write-to-text函数本函数的功能是保存信息输出到文件,主要通过“w”,fopen,fscanf,fprintf和fclose函数实现保存文件的功能3 系统编码设计3.1 预处理命令及结构体类型的声明#include /*引用库函数*/ #include #include #define N 1000 struct userint user_id;char user_name19;/最大18位char password13;/最大13位;typedef struct /*定义结构体数组*/ char num50; /*学号*/ char name50; /*姓名*/int term; float chinese; /*语文成绩*/float math; /* 数学成绩*/float english; /*英语成绩*/Student; Student studN;/*结构体数组变量*/3.2调用用户验证的函数int menu1()char c; do system(cls); /*运行前清屏*/ printf(tttt 欢迎使用n); printf(tttt n); printf(ttt 学生成绩管理系统n); printf(nttt请选择身份登陆n); printf(nttt1.教师); printf(nttt2.学生); printf(nttt3.游客); printf(nttt0.退出); printf(nttt请输入序号:); c=getchar(); /* 读入选择 */ while(c3); return(c-0); /*返回选择*/ 3.3 调用menu函数(系统总共有9个菜单函数,这里只给出3个主菜单的代码,详细请看程序运行文件,函数的功能是出现一个菜单界面)(1)教师主菜单int menu() /*菜单函数*/ char c; do system(cls); /*运行前清屏*/ printf(nnnttt09信管3班王晓媚3209005759n); /* 菜单界面*/ printf(ttt*n); printf(tttt 欢迎使用n); printf(tttt n); printf(ttt 学生成绩管理系统n); printf(t*n); printf(tt | 1.输入信息 * |n); printf(tt| * * * * * * * 2. 浏览记录 |n); printf(t | 3.学号排序 * * * * * * * |n); printf(t | * * * * * * * 4.添加信息 |n); printf(t | 5.计算成绩 * * * * * * * |n); printf(t | * * * * * * * 6.挂科信息 |n); printf(t | 7.查询信息 * * * * * * * |n); printf(t | * * * * * * * 8. 打开文件 |n); printf(t | 9.保存文件 * * * * * * * |n); printf(t| * 0.退出系统 |n); printf(t*n); printf(ttt请输入序号09: ); c=getchar(); /*读入选择*/ while(c9); return(c-0); /*返回选择*/ while(c9); return(c-0); /*返回选择*/ (2)学生主菜单int menu2() char c; do system(cls); printf(n); printf(tttt 欢迎使用n); printf(tttt n); printf(ttt 学生成绩管理系统n); printf(t*n); printf(tt | 1.查询信息 * |n); printf(tt| * * * * * * * 2. 排序信息 |n); printf(t | 3.打开文件 * * * * * * * |n); printf(t | * * * * * * * 4.返回登录界面 |n); printf(t | 0.退出系统 * * * * * * * |n); printf(t*n); printf(nt 温馨提示:若要使用查询功能,请先打开学生信息文件,谢谢!nn); printf(ttt请输入序号:); c=getchar(); while(c4); return(c-0); (3)游客主菜单int menu3() char c; do system(cls); printf(n); printf(tttt 欢迎使用n); printf(tttt n); printf(ttt 学生成绩管理系统n); printf(t*n); printf(tt | 1.查询信息 * |n); printf(tt| * * * * * * * 2. 打开文件 |n); printf(t | 3.返回登录界面 * * * * * * * |n); printf(t | * * * * * * * 0. 退出系统 |n); printf(t*n); printf(nt 温馨提示:若要使用查询功能,请先打开学生信息文件,谢谢!nn); printf(ttt请输入序号:); c=getchar(); while(c3); return(c-0); 3.4调用input函数(本函数的功能是输入学生的各类信息,时间复杂度为O(n) )int Input(Student stud,int n) /*输入若干条记录*/ int i=0,j; char sign; /*x10为清除多余的数据所用*/ while(sign!=n&sign!=N) /*判断*/ repeat1: printf(tt请输入学期:); scanf(tt%d,&studn+i.term); if(studn+i.term!=1&studn+i.term!=2) printf(ttt输入错误,请重新输入!n); goto repeat1; repeat2: printf(tt请输入学生证号:); /*交互输入*/ scanf(tt%s,studn+i.num); for(j=0;jn+i;j+) if(strcmp(studn+i.num,studj.num)=0) /*判断是否输入重复学生学号*/ printf(ttt学生学号已存在,请重新输入!n); goto repeat2;repeat3: printf(tt请输入学生姓名:); scanf(tt%s,studn+); for(j=0;jn+i;j+) if(strcmp(studn+,)=0) /*判断是否输入重复学生姓名*/ printf(ttt学生姓名已存在,请重新输入!n); goto repeat3; repeat4: printf(tt请输入语文成绩(0100):); scanf(ttt%g,&studn+i.chinese); if(studn+i.chinese100 ) /*输入不合理成绩的错误提示*/ printf(ttt输入错误,请重新输入!n); goto repeat4; /*重新输入该科成绩*/ repeat5:printf(tt请输入数学成绩(0100):); scanf(ttt%g,&studn+i.math); if(studn+i.math100 ) printf(ttt输入错误,请重新输入!n); goto repeat5; repeat6:printf(tt请输入英语成绩(0100):); scanf(ttt%g,&studn+i.english); if(studn+i.english100 ) printf(ttt输入错误,请重新输入!n); goto repeat6; printf(tt是否继续输入记录?(Y/N); scanf(tt%c,&sign); /*输入判断*/ i+; return(n+i); 3.5调用display函数(本函数的功能是显示学生的各类信息和规定输出格式,时间复杂度为O(n)void Display(Student stud,int n) /*浏览所有记录*/ int i; printf( -n); /*格式头*/ printf( 学期 学生证号 姓名 语文 数学 英语 n); printf( -n);for(i=1;in+1;i+) printf( %-8d%-15s%-15s%-15g%-15g%-5gn,studi-1.term,studi-1.num,,studi-1.chinese,studi-1.math,studi-1.english); printf(ttt); system(pause); 3.6调用排序函数(Sort函数,heapsort函数和sift函数)(本函数的功能是对学生的成绩进行排序,时间复杂度为O(n))3.6.1 调用Sort函数void Sort(Student stud,int n) int i; for(;) switch(menu6() case 1: heapsort(stud,n); printf(ttt语文成绩排序n); printf(n); printf(t-n); /*格式头*/ printf(t学期 学生证号 姓名 语文 n); printf(t-n);for(i=1;in+1;i+) printf(t%-8d%-15s%-15s%-15g%n,studi-1.term,studi-1.num,,studi-1.chinese); system(pause); break; case 2: heapsort1(stud,n); printf(ttt数学成绩排序n); printf(n); printf(t-n); /*格式头*/ printf(t学期 学生证号 姓名 数学 n); printf(t-n); for(i=1;in+1;i+) printf(t%-8d%-15s%-15s%-15g%n,studi-1.term,studi-1.num,,studi-1.math); system(pause); break; case 3: heapsort2(stud,n); printf(ttt英语成绩排序n); printf(n); printf(t-n); /*格式头*/ printf(t学期 学生证号 姓名 英语 n); printf(t-n); for(i=1;in+1;i+) printf(t%-8d%-15s%-15s%-15gn,studi-1.term,studi-1.num,,studi-1.english); system(pause); break; case 4: return; 3.6.2调用sift函数(调整堆)/*- 调整堆 -*/void sift(Student stud,int t,int w) int i,j; Student x; i=t; x=studi; j=2*i+1; while(j=w) if(jstudj+1.chinese) j+; if(x.chinesestudj.chinese) studi=studj;i=j;j=2*j+1; else break; studi=x;void sift1(Student stud,int t,int w) int i,j; Student x; i=t; x=studi; j=2*i+1; while(j=w) if(jstudj+1.math) j+; if(x.mathstudj.math) studi=studj;i=j;j=2*j+1; else break; studi=x;void sift2(Student stud,int t,int w) int i,j; Student x; i=t; x=studi; j=2*i+1; while(j=w) if(jstudj+1.english) j+; if(x.englishstudj.english) studi=studj;i=j;j=2*j+1; else break; studi=x;3.6.3 调用heapsort函数/*- 堆排序的算法 -*/void heapsort(Student stud,int j) int i; Student x; for(i=j/2-1;i=0;i-) sift(stud,i,j-1); for(i=j-1;i0;i-) x=stud0; stud0=studi; studi=x; sift(stud,0,i-1); void heapsort1(Student stud,int j) int i; Student x; for(i=j/2-1;i=0;i-) sift1(stud,i,j-1); for(i=j-1;i0;i-) x=stud0; stud0=studi; studi=x; sift1(stud,0,i-1); void heapsort2(Student stud,int j) int i; Student x; for(i=j/2-1;i=0;i-) sift2(stud,i,j-1); for(i=j-1;i0;i-) x=stud0; stud0=studi; studi=x; sift2(stud,0,i-1); 3.7调用add_a_record函数(本函数的功能是添加一个学生的信息,时间复杂度为O(n))int add_a_record(Student stud,int n) /* 添加多条信息*/char x10,sign; int j,i=0; while(sign!=n&sign!=N) /*判断*/ repeat1: printf(tt请输入学期:); scanf(tt%d,&studn+i.term); if(studn+i.term!=1&studn+i.term!=2) printf(ttt输入错误,请重新输入!n); goto repeat1; repeat2: printf(tt请输入学生证号:); /*交互输入*/ scanf(tt%s,studn+i.num); for(j=0;jn+i;j+) if(strcmp(studn+i.num,studj.num)=0) /*判断是否输入重复学生学号*/ printf(ttt学生学号已存在,请重新输入!n); goto repeat2;repeat3: printf(tt请输入学生姓名:); scanf(tt%s,studn+); for(j=0;jn+i;j+) if(strcmp(studn+,)=0) /*判断是否输入重复学生姓名*/ printf(ttt学生姓名已存在,请重新输入!n); goto repeat3; repeat4: printf(tt请输入语文成绩(0100):); scanf(ttt%g,&studn+i.chinese); if(studn+i.chinese100 ) /*输入不合理成绩的错误提示*/ printf(ttt输入错误,请重新输入!n); goto repeat4; /*重新输入该科成绩*/ repeat5:printf(tt请输入数学成绩(0100):); scanf(ttt%g,&studn+i.math); if(studn+i.math100 ) printf(ttt输入错误,请重新输入!n); goto repeat5; repeat6:printf(tt请输入英语成绩(0100):); scanf(ttt%g,&studn+i.english); if(studn+i.english100 ) printf(ttt输入错误,请重新输入!n); goto repeat6; gets(x); n+; printf(ttt添加成功!n); printf(tt是否继续添加记录?(Y/N); scanf(tt%c,&sign); /*输入判断*/ i+; return(n); 3.8调用search_a_record函数(本函数的功能是查找需要了解的学生的信息,时间复杂度为O(n))void search_a_record(Student stud,int n) /* 查询学生信息*/ char s20;int a; int i=0; for(;) switch(menu5() /*选择判断*/ case 1: printf(nnn);printf(ttt请输入要查询的学生的学号:); /*按学号查询*/scanf(ttt%s,s); if(i=n) printf(ttt无法找到该信息!n); system(pause); break; while(strcmp(studi.num,s)!=0&in) i+; printf(n); printf( -n); /*格式头*/ printf( 学期 学生证号 姓名 语文 数学 英语 n); printf( -n); printf( %-8d%-15s%-15s%-15g%-15g%-5gn,studi.term,studi.num,,studi.chinese,studi.math,studi.english); system(pause); break; case 2:printf(nnn);printf(ttt请输入要查询的学生的姓名:); /*按姓名查询*/scanf(ttt%s,s); while(strcmp(,s)!=0&in) i+; if(i=n) printf(ttt无法找到该信息!n); system(pause); break;printf(n); printf( -n); /*格式头*/ printf( 学期 学生证号 姓名 语文 数学 英语 n); printf( -n); printf( %-8d%-15s%-15s%-15g%-15g%-5gn,studi.term,studi.num,,studi.chinese,studi.math,studi.english); system(pause); break; case 3: printf(nnn);printf(ttt请输入要查询的学科(1语文 2数学 3英语):); /*按学科查询*/scanf(ttt%d,&a); if(a=1) printf(n); printf(t-n); /*格式头*/ printf(t学期 学生证号 姓名 语文 n); printf(t-n); printf(t% -8d%-15s%-15s%-15g%n,studi.term,studi.num,,studi.chinese); system(pause); if(a=2) printf(n); printf(t-n); /*格式头*/ printf(t学期 学生证号 姓名 数学 n); printf(t-n); printf(t% -8d%-15s%-15s%-15gn,studi.term,studi.num,,studi.math); system(pause); if(a=3) printf(n); printf(t-n); /*格式头*/ printf(t学期 学生证号 姓名 英语 n); printf(t-n); printf(t% -8d%-15s%-15s%-15gn

温馨提示

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

评论

0/150

提交评论