《2022年数据结构-学生成绩管理系统定义 .pdf》由会员分享,可在线阅读,更多相关《2022年数据结构-学生成绩管理系统定义 .pdf(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、课 程 设 计 报 告课程设计名称:数据结构课程设计系:三系学 生 姓 名 :班级:学号:成绩:指 导 教 师:开 课 时 间:2011-2012学年一学期名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 16 页 - - - - - - - - - 课 程 设 计 任 务书课程名称:数据结构指导教师:专业班级:学生姓名:起止日期: 2012.12-2013.1 设计题目一:学生成绩管理系统名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - -
2、 - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 16 页 - - - - - - - - - 1. 实习目的通过学习, 了解并初步掌握设计、实现较大系统的完整过程,包括系统分析、 编码设计、编码集成以及调试分析,熟练掌握数据结构的选择、设计、实现、以及操作方法,为进一步的开发应用打好基础。2. 问题描述实现功能:学生相关信息的输入、输出、查找、读入、显示、保存、排序、退出。3. 需求分析该程序所做的工作是对学生的成绩的管理,为师生进行学生成绩的记录、查询提供方便。此程序规定: 1.在成绩录入是, 姓名为 10 个字母以内的字符串;各科成绩为整形;学号长整
3、型,性别和出生日期为字符型; 2.程序的输出信息主要为:输出学生的各科成绩及排序统计学生相关成绩数据;3. 程序的功能主要包括:学生本人信息的录入、修改、查找、学生本人及成绩的输出和统计;首先运行程序,包括4 个选项, 0.保存并退出系统. 1.按学号录入学生信息2.按学号查询学生成绩3.分段统计与排序输出。4. 然后可以根据不同的需要选择不同的选项进行操作4. 概要设计4.1 系统用到的数据有:int Physics;/ 语文int English;/ 英语int Chinese;/数学long number; / 学号char name10; /姓名char sex10; / 性别char
4、 date20; / 出生日期score s; /成绩4.2 用到的主要函数:(1)int hash(int key); / 用除留余数法构造哈希函数(2)int Build_Hash(Hash *H,stu st);/输入一组关键字,建立 Hash 表,用链地址法处理冲突(3)int Search(Hash *H,int key);/ 成绩查询(4)void HeapAdjust (HeapType &H , int s, int m);/筛选(5)void HeapSort(HeapType &H);/ 堆排序。(6)void Segment(HeapType h);/ 统计各个分数段的人
5、数(7)int Sort(Hash *H);/ 使用堆排序对各科成绩按从高到低排列输出名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 16 页 - - - - - - - - - (8)void create(Hash *H);/ 录入学生信息(9)void Find(Hash *H);/查询学生信息(10)void tongji(Hash *H);/分段统计及排序(11)void savedata(student *&p); (12)student *getdata()
6、; (13)void main();/ 主函数内部可以实现多函数调用4.3 本实验从整体上分为四大模块:(1)创建并录入学生相关信息; (2)按学号查询学生成绩信息; (3)分段统计成绩与排序输出; (4)退出管理系统;5. 详细设计#include #include #include #include typedef struct /成绩结构定义 int Physics;/ 语文int English;/ 英语int Chinese;/数学score; typedef struct student /学生信息结构定义 long number; /学号char name10; /姓名char
7、sex10; / 性别char date20; / 出生日期score s; /成绩struct student *next; student,*stu; typedef stu Hash;/定义哈希表的类型typedef struct /堆结构定义 int r20;/ 记录分数int length;/ 长度HeapType; int hash(int key); / 用除留余数法构造哈希函数int Build_Hash(Hash *H,stu st);/ 输入一组关键字,建立 Hash表,用链地址法处理冲突int Search(Hash *H,int key);/ 成绩查询void Heap
8、Adjust (HeapType &H , int s, int m);/筛选名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 16 页 - - - - - - - - - void HeapSort(HeapType &H);/ 堆排序。void Segment(HeapType h);/ 统计各个分数段的人数int Sort(Hash *H);/ 使用堆排序对各科成绩按从高到低排列输出void create(Hash *H);/ 录入学生信息void Find(Hash
9、 *H);/ 查询学生信息void tongji(Hash *H);/分段统计及排序void savedata(student *&p); student *getdata(); void main() int n,i; student *getdata(); Hash H5;/ 哈希表for(i=0;inumber); if(Hi=NULL) Hi=st; / 作为链表的第一个结点else for(p=Hi;p-next;p=p-next); if(p-number=st-number) printf( 已存在该学号的学生,添加学生信息出错!n); return 0; p-next=st;
10、/ 插入链表尾部 . return 1; int Search(Hash *H,int key)/ 成绩查询 int i; stu p; i=hash(key); if(Hi) if(Hi-number=key)/在表头 printf( 学号 :%dn 姓名 :%sn,key,Hi-name); printf( 性别 :%sn 出生日期 :%s:%sn,Hi-sex, Hi-date); printf(n 各科分数如下:n); printf(物理:%dn英语:%dn语文:%dn,Hi-s.Physics,Hi-s.English,Hi-s.Math); return 1; else/探测下一个
11、地址,在链表中查找名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 16 页 - - - - - - - - - for(p=Hi-next;p;p=p-next) if(p-number=key) printf( 学号 :%dn 姓名 :%sn,key,p-name); printf( 性别 :%sn 出生日期 :%sn,p-sex,p-date); printf(n 各科分数如下:n); printf(物理:%dn英语:%dn语文:%dn,p-s.Physics,p-s
12、.English,p-s.Math); return 1; return 0; void HeapAdjust (HeapType &H , int low, int high)/堆排序 int rc; int j; rc=H.rlow; /rc 是 low for(j=2*low;j=high;j*=2 )/j沿 Key 较大的孩子结点向下筛选/rj 是 ri 的左孩子 if ( jhigh & H.rjH.rj+1) /如果右孩子较大,把j 指向右孩子+j; / j 为 Key 较大记录的下标if (!(rc0;i-) /循环建立初始堆HeapAdjust ( H, i, H.length
13、 );/ 建大顶堆for(i=H.length;i1;i-) t=H.r1; /将堆顶记录和当前未经排序子序列H.r1.i 中最后一个记录相互交换H.r1=H.ri; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 16 页 - - - - - - - - - H.ri=t; HeapAdjust(H,1,i-1); / 对 H.r1.i-1 重新调整为大顶堆 void Segment(HeapType h)/ 统计各个分数段的人数 int a,b,c,d,e; int
14、i; a=b=c=d=e=0; for(i=1;i=90) a+; else if(h.ri=80) b+; else if(h.ri70) c+; else if(h.ri60) d+; else e+; printf(n90 分以上的有 %d 人n,a); printf(80-90 分的有 %d 人n,b); printf(70-80 分的有 %d 人n,c); printf(60-70 分的有 %d 人n,d); printf(60 分以下的有 %d 人n,e); int Sort(Hash *H)/ 使用堆排序对各科成绩按从高到低排列输出 HeapType a,b,c; int i,j
15、,k,m; stu st; j=k=m=1; a.length=b.length=c.length=0; /把哈希表中的数据放到堆结构中for(i=0;is.Physics; b.rk=st-s.English; c.rm=st-s.Math; j+; k+; m+; a.length+; b.length+; c.length+; st=st-next; if(a.length1) / 物理成绩HeapSort(a); printf( 物理成绩从高到低排列为:);/ 按学号进行每位学生成绩由高到低排序for(i=a.length;i0;i-) printf(%3d,a.ri); Segmen
16、t(a); /英文成绩if(b.length1) HeapSort(b); printf(n 英语成绩从高到低排列为:); for(i=b.length;i0;i-) printf(%3d,b.ri); Segment(b); /语文成绩if(c.length1) HeapSort(c); printf(n 语文成绩从高到低排列为:); for(i=c.length;i0;i-) printf(%3d,c.ri); Segment(c); return 0; void create(Hash *H)/ 录入学生信息这个文件有问题 名师资料总结 - - -精品资料欢迎下载 - - - - - -
17、 - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 16 页 - - - - - - - - - FILE *fp; fp=fopen(stu.txt,wb); stu st;int m; int c; c=1; m=0; while(c) m+; st=(stu)malloc(sizeof(student); st-next=NULL; st-number=0; printf(n 请输入第 %d 名学生的学号 :,m); scanf(%d,&st-number);fprintf(fp,%d,st-number); printf( 请输入
18、姓名 :); scanf(%s,st-name); fprintf(fp,%s,st-name ); printf( 请输入性别 :); scanf(%s,st-sex);fprintf(fp,%s,st-sex ); printf( 请输入出生年月:); scanf(%s,st-date);fprintf(fp,%s,st-date ); st-s.Physics=0; printf( 请输入物理成绩:); scanf(%d,&st-s.Physics);fprintf(fp,%d,st-s .Physics ); st-s.English=0; printf( 请输入英语成绩:); sca
19、nf(%d,&st-s.English);fprintf(fp,%d,st-s.English ); st-s.Math=0; printf( 请输入语文成绩:); scanf(%d,&st-s.Math);fprintf(fp,%d,st-s .Math ); Build_Hash(H,st); printf(n 继续 ?选(1/0):); scanf(%d,&c); fclose(fp); printf(n*此系统共有 %d 名学生 !*n,m); void Find(Hash *H)/ 查询学生信息 int key=0; int c; c=1; while(c) 名师资料总结 - - -
20、精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 16 页 - - - - - - - - - printf(n 请输入要查询学生的学号:); scanf(%d,&key); if(!Search(H,key) printf( 不存在该学生的信息!n); printf( 要继续查询吗 ?输入 1 继续 ,输入 0 结束 !(1/0):); scanf(%d,&c); /分段统计及排序void tongji(Hash *H) Sort(H); void update(stu p) FILE *fp
21、; if(fp=fopen(stu.txt, wb)=NULL) printf( 文件无法打开 .n ); exit(0); while(p!=NULL) fwrite(p,sizeof(student),1,fp);/ 写入数据p=p-next; fclose(fp);/ 关闭文件 void savedata(student *&p) FILE *fp; if(fp=fopen(data.dat, ab)=NULL) printf( 文件无法打开 .n ); exit(0); while(p!=NULL) fwrite(p,sizeof(student),1,fp);/ 写入数据p=p-ne
22、xt; fclose(fp);/ 关闭文件名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 16 页 - - - - - - - - - student *getdata() FILE *fp; student *p, *head=NULL, *tail=NULL; p=(student *)malloc(sizeof(student); if(fp=fopen(stu.dat,rb)=NULL) printf( 文件不存在 .n); exit(0); while(fre
23、ad(p,sizeof(student),1,fp) /读数据到 P 数组里面if(head=NULL)/ 如果头指针不为空,判断空链表的情况 head=p; tail=p;/ 头指针与尾指针同时指向第一块内存区域 else p=(student*)malloc(sizeof(student); tail-next=p;/ 如果头指针不为空,尾指针的指针指向新开辟的内存单元tail=p;/ 尾指针后移,指向新开辟的单元tail-next=NULL;/尾指针的指针指向空 fclose(fp); return head; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - -
24、 - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 16 页 - - - - - - - - - 6 通讯录程序运行结果:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 16 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 16 页 - - - - - - -
25、- - 7 通讯录程序设计过程中产生的问题及采取的措施:在此程序中,由于该程序与上个通讯录管理系统存在相同联系,所以在菜单的设计和swith 语句的运用上不再陌生,有了前车之鉴,后车之师。但是学生成绩管理系统程序也存在诸多困难譬如在实现堆排序上以及散列存储和散列查找,都相对陌生, 解决的方法主要去多方位查找资料和利用好相关资料,可以从书本上获得也可以从百度文库中得到,利用好就成为自己的资源了。8 通讯录程序设计总结与展望:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共
26、16 页 - - - - - - - - - 将近一周的数据结构课程设计,通过 vc6.0 反复的尝试和测试此次设计,渐渐了解和掌握了用 C语言和相关数据结构知识实现通讯录管理系统和学生成绩管理系统的实现,当然此程序还是有不少缺陷的,说明自己的努力还不过,还需要进一步去好好学习,本程序中把近一学期学习的数据结构应用到实践中去,用心去做, 提高了自己的动手实践能力,加深了对理论知识的理解。以前对于C语言, 数据结构的认识是模糊的,概念上的,现在通过自己动手做实验, 对课本的认识更加深刻。课程设计过程中遇到了很多的困难,主要是由于自己对课本知识没有融会贯通,不能把书本知识应用到实践中,这次课程设计
27、让我受益匪浅,我清醒的认识到,只要自己肯努力,愿意去付出行动,不怕麻烦,就能收获好的结果,铭记一句话,付出总会有收获。此次课程设计过程中我遇到了很多困难,由于理论知识的欠缺,刚开始在实验过程中,无从下手, 不知道该怎么编写这样一个程序。后来,经过查阅相关的资料以及请教身边的同学和老师, 逐渐的对这个程序的实现有了一定的认识,慢慢的我开始有了自己的想法,逐渐有了自己的实现轮廓,就这样通过我在经历摸索以后逐渐完成了自己的课程设计报告。此次课程设计让我知道了自己还存在很多的不足,为我以后的学习提供了必要的参考意见,以后的学习生活中,我希望自己能够提高动手操作能力,真正的把理论知识应用到实践中去,更重要的是要脚踏实地去学习,认真去学!9 参考文献:1 严蔚敏 . 数据结构 (C 语言版 )M. 北京 : 清华大学出版社,2009.1.2:3-56 2 李春葆等著 . 数据结构教程(第三版).清华大学出版社,2009 3 李春葆等主编 . 数据结构教程上机实验指导(第三版). 清华大学出版社,2009 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 16 页 - - - - - - - - -