ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:262.04KB ,
资源ID:23598826      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23598826.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构学生成绩管理系统.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构学生成绩管理系统.docx

1、数据结构学生成绩管理系统 课 程 设 计 报 告课程设计名称:数据结构课程设计 系 : 三系 学 生 姓 名 : 班 级: 学 号: 成 绩: 指 导 教 师: 开 课 时 间:2011-2012学年一学期 课程设计任务书课程名称: 数据结构 指导教师: 专业班级: 学生姓名: 起止日期: 2012.12-2013.1 设计题目一:学生成绩管理系统1.实习目的 通过学习,了解并初步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、编码集成以及调试分析,熟练掌握数据结构的选择、设计、实现、以及操作方法,为进一步的开发应用打好基础。2.问题描述实现功能:学生相关信息的输入、输出、查找、读入

2、、显示、保存、排序、退出。3.需求分析 该程序所做的工作是对学生的成绩的管理,为师生进行学生成绩的记录、查询提供方便。此程序规定: 1.在成绩录入是,姓名为10个字母以内的字符串;各科成绩为整形;学号长整型,性别和出生日期为字符型; 2.程序的输出信息主要为:输出学生的各科成绩及排序统计学生相关成绩数据;3.程序的功能主要包括:学生本人信息的录入、修改、查找、学生本人及成绩的输出和统计;首先运行程序,包括4个选项,0.保存并退出系统. 1.按学号录入学生信息 2.按学号查询学生成绩 3.分段统计与排序输出。4.然后可以根据不同的需要选择不同的选项进行操作4.概要设计4.1系统用到的数据有:in

3、t Physics;/语文 int English;/英语 int Chinese;/数学 long number; /学号 char name10; /姓名 char sex10; /性别 char 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

4、 , int s, int m);/筛选(5)void HeapSort(HeapType &H);/ 堆排序。(6)void Segment(HeapType h);/统计各个分数段的人数(7)int Sort(Hash *H);/使用堆排序对各科成绩按从高到低排列输出(8)void create(Hash *H);/录入学生信息(9)void Find(Hash *H);/查询学生信息(10)void tongji(Hash *H);/分段统计及排序(11)void savedata(student *&p);(12)student *getdata();(13)void main();/

5、主函数内部可以实现多函数调用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 sex10; /性别 char date2

6、0; /出生日期 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 HeapAdjust (HeapType &H , int s,

7、 int m);/筛选void HeapSort(HeapType &H);/ 堆排序。void Segment(HeapType h);/统计各个分数段的人数int Sort(Hash *H);/使用堆排序对各科成绩按从高到低排列输出void create(Hash *H);/录入学生信息void Find(Hash *H);/查询学生信息void tongji(Hash *H);/分段统计及排序void savedata(student *&p);student *getdata();void main() int n,i; student *getdata(); Hash H5;/哈希表

8、 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; /插入链表尾部. 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); pr

9、intf(性别:%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/探测下一个地址,在链表中查找 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英

10、语:%dn语文:%dn,p-s.Physics,p-s.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-) /循环建立初始堆 HeapAdju

11、st ( H, i, H.length );/ 建大顶堆 for(i=H.length;i1;i-) t=H.r1; /将堆顶记录和当前未经排序子序列H.r1.i中最后一个记录相互交换 H.r1=H.ri; H.ri=t; HeapAdjust(H,1,i-1); /对 H.r1.i-1重新调整为大顶堆 void Segment(HeapType h)/统计各个分数段的人数 int a,b,c,d,e; int 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

12、+; 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,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.

13、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); Segment(a); /英文成绩 if(b.length1) HeapSort(b); printf(n英语成绩从高到低排列为:); for(i=b.length;i0;i-) printf(%3d,b.ri); Segment(

14、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)/录入学生信息 这个文件有问题 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

15、请输入第%d名学生的学号:,m); scanf(%d,&st-number);fprintf(fp,%d,st-number); printf(请输入姓名:); 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)

16、;fprintf(fp,%d,st-s .Physics ); st-s.English=0; printf(请输入英语成绩:); scanf(%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

17、(Hash *H)/查询学生信息 int key=0; int c; c=1; while(c) 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; if(fp=fopen(stu.txt, wb)=NULL) printf( 文件无法打开.n ); exit(0)

18、; 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-next; fclose(fp);/关闭文件student *getdata() FILE *fp; student *p, *he

19、ad=NULL, *tail=NULL; p=(student *)malloc(sizeof(student); if(fp=fopen(stu.dat,rb)=NULL) printf(文件不存在.n); exit(0); while(fread(p,sizeof(student),1,fp) /读数据到P数组里面 if(head=NULL)/如果头指针不为空,判断空链表的情况 head=p; tail=p;/头指针与尾指针同时指向第一块内存区域 else p=(student*)malloc(sizeof(student); tail-next=p;/如果头指针不为空,尾指针的指针指向新

20、开辟的内存单元 tail=p;/尾指针后移,指向新开辟的单元 tail-next=NULL;/尾指针的指针指向空 fclose(fp); return head;6通讯录程序运行结果:7通讯录程序设计过程中产生的问题及采取的措施:在此程序中,由于该程序与上个通讯录管理系统存在相同联系,所以在菜单的设计和swith语句的运用上不再陌生,有了前车之鉴,后车之师。但是学生成绩管理系统程序也存在诸多困难譬如在实现堆排序上以及散列存储和散列查找,都相对陌生,解决的方法主要去多方位查找资料和利用好相关资料,可以从书本上获得也可以从XX文库中得到,利用好就成为自己的资源了。8通讯录程序设计总结与展望:将近一

21、周的数据结构课程设计,通过vc6.0反复的尝试和测试此次设计,渐渐了解和掌握了用C语言和相关数据结构知识实现通讯录管理系统和学生成绩管理系统的实现,当然此程序还是有不少缺陷的,说明自己的努力还不过,还需要进一步去好好学习,本程序中把近一学期学习的数据结构应用到实践中去,用心去做,提高了自己的动手实践能力,加深了对理论知识的理解。以前对于C语言,数据结构的认识是模糊的,概念上的,现在通过自己动手做实验,对课本的认识更加深刻。课程设计过程中遇到了很多的困难,主要是由于自己对课本知识没有融会贯通 ,不能把书本知识应用到实践中,这次课程设计让我受益匪浅,我清醒的认识到,只要自己肯努力,愿意去付出行动,

22、不怕麻烦,就能收获好的结果,铭记一句话,付出总会有收获。此次课程设计过程中我遇到了很多困难,由于理论知识的欠缺,刚开始在实验过程中,无从下手,不知道该怎么编写这样一个程序。后来,经过查阅相关的资料以及请教身边的同学和老师,逐渐的对这个程序的实现有了一定的认识,慢慢的我开始有了自己的想法,逐渐有了自己的实现轮廓,就这样通过我在经历摸索以后逐渐完成了自己的课程设计报告。此次课程设计让我知道了自己还存在很多的不足,为我以后的学习提供了必要的参考意见,以后的学习生活中,我希望自己能够提高动手操作能力,真正的把理论知识应用到实践中去,更重要的是要脚踏实地去学习,认真去学!9参考文献:1严蔚敏.数据结构(C语言版)M.北京:清华大学出版社,2009.1.2:3-562 李春葆等著.数据结构教程(第三版).清华大学出版社,20093 李春葆等主编.数据结构教程上机实验指导(第三版). 清华大学出版社,2009

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1