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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构我的课程设计说明书.docx

1、数据结构我的课程设计说明书摘 要学生成绩管理涉及到的算法都是以链表或顺序表的基本运算作为基础的,此程序包括:添加学生成绩,查询学生成绩,修改学生成绩,删除学生成绩,求各科平均分,根据学生各科成绩平均分排序,查询学生所有成绩输出显示的功能。通过链表存储结构实现数据的输入,实现各子程序过程的演示,对异常输入信息报错。关键词:学生成绩管理的演示:学生成绩管理库的建立,学生成绩的删除,查找,添加,修改和排序,学生添加删除,修改查询,以及添加课程。前 言很多涉及学生成绩管理操作的算法都是以链表操作为基础,通过链表的建立,结点添加、查询与删除的演示,方便在学习中更好的理解链表结点的添加、查询、删除的过程。

2、通过对链表的建立,结点添加、查询与删除的演示,我们在对一些问题进行求解时,会发现有些问题很难找到规律,或者根本无规律可寻。对于这样的问题,可以利用计算机运算速度快的特点,先搜索查找所有可能出现的情况,再根据题目条件从所有可能的情况中,删除那些不符合条件的结点。在链表的建立算法中,在链表的第一个结点之前附设一个结点,称之为头结点。头结点的数据域可以不存储任何信息,也可存储如线性表的长度等类的附加信息,头结点的指针域存储指向第一个结点的指针。在插入结点的过程中,首先要生成一个数据域为X的结点,然后插入在链表中。根据插入操作的逻辑定义,还需要修改结点的指针域。在删除结点的过程中,首先查找到要删除的结

3、点,然后删除,再修改结点的指针域。总之,在一单链表中插入或删除一个结点算法实现时,仅需修改指针而不需要移动元素,因此它没有顺序存储结构所具有的弱点,所以在计算机实现多种算法中得到了广泛的应用。正 文1. 问题描述该设计要求学生以算法与数据结构课程成绩管理为背景,设计出一个简单的能够实现成绩管理功能的系统。通过该题目的设计过程,可以加深理解线性表、查找表的逻辑结构、存储结构,掌握查找、排序等基本运算的实现,进一步理解和熟练掌握课本中所学的各种数据结构,学会如何把学到的知识用于解决实际问题,培养学生的动手能力。2. 采用类c语言定义相关的数据类型学生成绩管理系统的功能实现如下:A. 使用链表存储结

4、构实现数据的输入B. 使用顺序查找实现各数据的查找C. 根据文字提示进行功能调用D对有异常的输入报错并重新输入(1)定义学生课程结构体的链表: struct kecheng char kechengname10; float data; struct kecheng *next;(2)定义学生结构体的链表:struct student1 char classname9; char name9; char number9; kecheng *ke;(2)定义操作对象结构体的链表:typedef struct student2 /建立操作对象结构体 student1 stu; struct stu

5、dent2 *next;student2,stud;3. 各模块的伪码算法1 添加学生void student:input() /增加学生至连表尾 stud *p; system(cls); int j=0; stud *s; if(head!=NULL) /判断头指针是否为空 p=head; while(1) if(p-next=NULL) break; p=p-next; char flag=y; while(flag=y) /创建连链表 s=(stud*)malloc(sizeof(stud);s-next=NULL;s-stu.ke=initkecheng(); cout班 级 姓 名

6、 学 号stu.ke; while(1) coutkechengnamenext; if(p1-next=NULL) break; couts-stu.classnames-stu.names-stu.number;/ 输入信息 p1=s-stu.ke; while(1) cinp1-data; p1=p1-next; if(p1-next=NULL) break; if(head=NULL) head=s; else p-next=s; p=s; j+; p1=s-stu.ke;float total;int i;total=0;i=0; while(1) total+=p1-data; p

7、1=p1-next;i+; if(p1-next=NULL) break; p1-data=total/(i*1.0); coutIs continue? y/nflag; cout您这次一共输入了j个学生endl; if(j=0)_sleep(1000);return; 2 删除学生void student:del(char number) /完成删除学生 if(!panduannum(number) return; if(head=NULL) cout非法,请确认有信息可以删除!endl; getch(); return; stud *p,*q; p=head; char flag=y;

8、int i=0,j=0; while(1) flag=y; for(i=0;istu.numberi) flag=n; if(flag=y)j=1;break; else if(p-next=NULL) break; p=p-next; if(!j) cout没有学号为number的学生!endl;getch();return; stud*s; s=(stud*)malloc(sizeof(stud); studcopy(s,p); output(s);coutnext; else while(q-next!=p) q=q-next; q-next=p-next; cout是否确认删除学生?y

9、/nch; if(ch=y) savefile(head); cout已成功保存文件!endl; getch(); else readfile();3 修改学生void student:modify(char number) if(!panduannum(number) return; if(head=NULL) cout非法,请确定您已将信息成功导入!endl;getch(); return ; stud *p,*q; p=head; char flag=y; int i=0,j=0; while(1) flag=y; for(i=0;istu.numberi) flag=n; if(fla

10、g=y)j=1;break; else if(p-next=NULL) break; p=p-next; if(!j) cout没有学号为number的学生!endl;getch();return; q=(stud*)malloc(sizeof(stud); studcopy(q,p); output(q);coutendl; cout请输入修改信息!endl;coutstu.ke;float total=0;i=0; while(1) coutkechengnamep1-data; total+=p1-data; p1=p1-next;i+; if(p1-next=NULL) break;

11、p1-data=total/(i*1.0); studcopy(q,p); output(q); savefile(head); cout已成功将修改后信息自动保存至文件!kechengname);break; p1=p1-next; x+; stud *p,*pa,*m,*head1,*p2,*t,*s,*q;int totalmember=0; p=head; head1=(stud*)malloc(sizeof(stud);head1-next=NULL; pa=(stud*)malloc(sizeof(stud);pa=NULL; while(1) /建立连表 p1=p-stu.ke;

12、 while(1) /查找课程 if(stringequal(p1-kechengname,kechengname) break; p1=p1-next; if(p1-datanext=s; q=s;totalmember+; if(p-next=NULL) break; p=p-next; if(pa=NULL) head1=NULL; return head1; m=pa; i=totalmember; while(1)/完成排序 char flag; flag=n; t=(stud*)malloc(sizeof(stud); studcopy(t,m); if(head1-next=NU

13、LL) head1-next=t; else p2=head1-next; kep1=t-stu.ke;kep2=p2-stu.ke; while(1) if(stringequal(kep1-kechengname,kechengname) break; kep1=kep1-next;kep2=kep2-next; if(kep1-data=kep2-data) head1-next=t; t-next=p2; else while(1) kep1=t-stu.ke;kep2=p2-stu.ke; while(1) if(stringequal(kep1-kechengname,kechen

14、gname) break; kep1=kep1-next;kep2=kep2-next; if(kep1-data=kep2-data) break; if(p2-next=NULL) flag=y;break; p2=p2-next; if(flag=y) p2-next=t; else t-next=p2-next;p2-next=t; if(m-next=NULL) break; m=m-next; head1=head1-next; return head1;5 对所有有课程低分学生查询stud *student:totalorder(unsigned int i) /完成对有低分的学

15、生的处理 if(head=NULL) return head; stud *p,*q,*r,*s; kecheng *p1; char flag=n; int totalnumber=0; int totalmember=0; int member=0; float percent=0; p=(stud*)malloc(sizeof(stud);p=NULL; q=(stud*)malloc(sizeof(stud);q=NULL; r=(stud*)malloc(sizeof(stud); r=head; while(1) /建立连表并统计信息 flag=n; p1=r-stu.ke; wh

16、ile(1) if(p1-datanext=NULL) break; p1=p1-next; if(flag=y) s=(stud*)malloc(sizeof(stud);s-next=NULL; studcopy(s,r); if(p=NULL) p=s; else q-next=s; q=s; totalmember+; member+; if(r-next=NULL) break; r=r-next; /输出统计信息 coutendl 输出所有满足要求的学生 endl;coutendl;output(p);coutendl; p1=initkecheng();int x=1;int j

17、;int totalkecheng=0; while(1) j=lowkechengnumber(x,i); coutkechengname低于等于i分一共j个人next-next=NULL) break; p1=p1-next;x+; cout总的低于i分的一共totalnumber 个人endl; percent=(totalmember*1.0)/(member*1.0);percent=percent*100; cout所有学生一共 member人 低分 totalmember人 低分率:int(percent)%endl; percent=totalkecheng*1.0/(memb

18、er*x);percent=percent*100; cout所有课程数为 member*x 低分: totalkecheng 门 百分率:int(percent)%endl; coutnext=NULL) break; p1=p1-next; return loworder(t,i);7 查询挂科学生void student:guake(int i) /对挂科学生的处理 int t=0,n=0; stud *p,*s,*head1,*q;kecheng *p1; head1=(stud*)malloc(sizeof(stud);head1=NULL; p=head; while(1) t=0

19、; p1=p-stu.ke; while(1) if(p1-datanext-next=NULL) break; p1=p1-next; if(t=i) /判断该学生挂科数是否满足条件 s=(stud*)malloc(sizeof(stud); studcopy(s,p); if(head1=NULL) head1=s; else q-next=s; q=s; n+; if(p-next=NULL) break; p=p-next; cout 现在输出挂了i门的所有学生endl; output(head1);coutendl; cout 一共有n个学生next=NULL.再将调试之后,程序通过

20、。B. 算法的时间复杂度和空间复杂度A.成绩信息的添加、查询、修改、删除、求平均分时间复杂度都为:O(n) B.成绩信息的排序时间复杂度为:O(n!)C.成绩信息的空间复杂度为:1164KB6. 软件使用说明书1输出学生成绩管理系统主菜单项2添加学生3删除学生4修改学生成绩5.查询学生成绩7. 显示所有学生信息8. 显示统计信息菜单9. 对单科低分学生查询9.对所有有课程低分学生查询10.查询低平均分学生并排序11.查询挂科学生设 计 总 结在这三周的数据结构课程设计中,我的题目是:学生成绩管理系统。这个设计是一个比较综合的练习,它主要用到链表、查找等相关知识。这三周课程设计中,通过该题目的设

21、计过程,我加深了对链表的理解,对链表结点的添加、查找、删除基本运算的实现有所掌握,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。在三周的课程设计中我遇到了很多的问题,我认识到一个人要完成所有的工作是非常困难和耗时的。这些问题在老师和同学许永锋帮助、和对各种资料的查阅下,得到了解决。这次课设培养了我自主动手,独立研究的能力,和团队合作的工作方法,在以后的学习中我会更加注意各个方面的能力的协调发展,为今后在学习工作中能更好的发展打下了坚实的基础。三周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积

22、累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,三周中我收益很大,学到很多。我相信如果时间更充裕我会把这次的课程设计做得更加完善。参考文献1 严蔚敏,吴伟民.数据结构题集(C语言版).清华大学出版社.2陈维兴,林小茶, C+面向对象程序设计教程,清华大学出版社.致 谢首先感谢我的指导老师张永老师,他在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。感谢我的数据结构老师张永老师和C+语言老师朱昌盛老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。我

23、的同学在设计完成后对程序的测试,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。附件 基本算法实现归并算法及应用/ 归并排序算法的实现.cpp : Defines the entry point for the console application./#include stdafx.h#include stdio.h#define MAXSIZE 50 /顺序表最大长度typedef int keytype; /自定义关键字类型为整型typedef int elemtype; typedef struct /定义记录类型 keytype key; elemtype otheritem;recdtype; /记录结点类型recdtype rMA

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

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