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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构基础学生成绩管理系统c语言.docx

1、数据结构基础学生成绩管理系统c语言数据结构基础-学生成绩管理系统-c语言学 号: Xxxxx数据结构基础课程报告题 目学生成绩管理系统学 院XXX专 业XXX 班 级XXX姓 名XXX指导教师XXX2016年11月27日要设计的学生信息管理系统要完成学生信息的建立、显示、查找、插入、删除、保存、排序、修改、退出等基本功能,程序设计基础建立在已学过的数据结构、C语言等知识层面上,可自己增加程序的难度。我要设计的程序主要应用到C编程方法学1和数据结构2的主要知识。基本要求需实现程序的编译、链接、调试、运行。主要解决的问题是程序的编写,操作平台为VC+6.01.问题分析及算法设计5.1问题分析这个程

2、序要设计的整体思想就是模块化编程,因为程序集多个功能于一体,然后根据用户输入的要求执行相应的子模块,以此达到功能的实现。所以主函数就可以用switch结构实现,然后分别按功能编写模块函数了。5.2算法设计经过问题分析,程序的大体结构已经确定,然后就要考虑该使用那些算法了。因为程序要存储一连串的学生信息,且包含多个数据项,所以可以用数组、结构体、顺序表、单链表等实现,但要实现查找、排序、删除等各种功能,单链表就显得更适宜些,同时也能锻炼我们对链表的使用技巧,所以经过思量,决定用单链表来实现编程。2.系统设计方案6.1 系统功能首先要确定学生信息应包括:学号,姓名,科目,成绩业等。其次,学生信息管

3、理系统应提供的功能包括:(1)系统以菜单方式显示(2)要有学生信息录入功能(3)学生信息浏览功能(4)学生信息用文件保存(5)按学号查询、按姓名查询(6)可以按学号、科目成绩等排序(7)学生信息的删除修改(8)学生信息的修改(9)退出结合实际情况及自身能力,确定了以上要编写并实现的功能。6.2程序设计及运行结果(1)主函数模块设计之前已确定主函数可以用switch结构实现,只要将系统功能经分析排版后写入主函数中的每个case即可,所以主函数可如下编写3/主函数int main(void) menu(); /调用显示函数 while(1) printf(tt请选择相应的功能:); scanf(%

4、d,&a); switch(a) case 0: /退出系统 case 1: /学生信息输入 case 2: /信息显示 case 3: /查找信息 case 4: /删除学生信息 case 5 : /插入学生信息(尾插法) case 6: /学生信息排序 case 7 : /修改信息 case 8 : /保存成绩至文件 default: /输入其它情况,循环重新输入 break; system(pause); return 0;如此编写,可以使主函数既简单易懂,又不杂乱,能让读者一目了然,有了主函数,之后就可以往主函数中加子模块了。(2)“屏幕”显示函数模块设计显示屏幕,也就是要给用户提供功

5、能选择的主界面,需明了,整齐,要达到用户感觉到系统操作很其实简单的效果,所以编译排版之后的界面效果见下图可以从上图看出,只要用户按自己需求进行操作,就可以实现相应功能了。程序设计的该函数为void menu()。(3) 结构体定义“结构体名”用作结构体类型的标志,它又称“结构体标记”。声明一个结构体类型的一般形式为:Struct 结构体名成员表列;大括弧内是该结构体中的各个成员,由它们组成一个结构体。对各成员都应进行类型声明,即类型名 成员名我在结构体中定义了两个字符数组及三个整形变量,用于存储学号、姓名、三个科目的成绩,并在结构体中定义了一个指针,为单链表所需,用于指向下一结点。typede

6、f struct student /建立学生类 char num20; /学号 char name20; /姓名 int math; /数分 int English; /英语 int Data; /数据结构 struct student *next; /指针student;student *head=NULL; /头指针(1)信息输入模块对应函数为void create(),可用链表建立学生信息,所以先要建立一个头结点p1=(student *)malloc(sizeof(student);/建立头结点然后让指针指向下一个结点,依次根据用户输入的学生个数循环建立链表(学生信息)所以主要循环为w

7、hile while(numbernum,p2-name,&p2-math,&p2-English,&p2-Data); /输入学生信息 if(p2-num=0) printf(信息输入成功!n); break; length+; /链表的长度 p1-next=p2; p2-next=NULL; /结点相继后移 p1=p1-next; number+; /记录已输入的学生个数 printf(信息输入成功!n); /返回成功功能的选择是用户根据选择模块屏幕上的提示做出的操作,可以看到,在进行下一操作之前,系统会进行清屏,然后显示本次的操作结果。(2)显示模块及结果void display(),这

8、个模块并不是每个操作结果的输出函数,它会输出最终的结果,在进行了输入学生信息操作后,进行这个功能,系统就会输出全部的结果,见下图。可以看出,系统已把上次的操作清屏,然后根据输入的2 功能进行了显示操作。输出是按循环输出的,用指针指向链表的各项数据,依次输出。主要代码为while(p!=NULL) printf(tt%-13s%-11s%-9d%-9d%dn,p-num,p-name,p-math,p-English,p-Data); p=p-next; (3)查找模块及结果在程序设计时,并没有采用单一的按学号或按姓名查找的方式,而是既可以按学号查找,亦可按姓名查找,所以编写了void sear

9、ch1()和void search2()这两个查找函数,当输入的学号或姓名不在记录时,系统会显示“查无此人”,主要代码如下,链表不空时循环查找,然后用字符串比较函数4判断查找是否成功。while(p!=NULL)if(strcmp(p-num,xh)=0) /查找成功,显示查找信息./显示查找到的信息if(p=NULL) /链表遍历完成,返回查找信息printf(查无此人n);(4)删除模块void Delete() 为删除模块函数,按输入的学号删除信息,首先会根据用户输入的学号查找该学号对应的信息,如果记录中没有,则系统返回查无此人,如果查找成功,则会删除该学生的所有信息,代码同查找一样,在

10、while循环中用了字符串比较函数,若查找成功,则删除,否则返回查无此人。(5)插入函数模块void insert() 为插入函数,主要用了尾插法插入学生信息,主要代码如下void insert()q=(student *)malloc(sizeof(student); /建立新的结点. /输入学生信息 while(p!=NULL) /循环 if(strcmp(p-num,q-num)=0) /判断链表中是否已有该学号 printf(该学号已经存在,无法插入!n); return; /若链表中已有该学号,则返回 p=p-next; p=head; for(i=0;inext; q-next=p

11、-next; p-next=q; length+; /插入后链表长度增加 printf(插入成功!n); /返回成功插入函数的难点在于新结点建立、信息输入、将信息插入链表等步骤的链接,还有结点的移动等核心算法。(6)排序函数模块排序模块是我遇到的最大难题,难在不仅要对整形数比大小,还要对学号这个字符串比大小,在编译时,老是出错,也想了好些天,但在同学及老师的帮助下还是把问题解决了,而关键在于对字符串比较函数的应用 if(strcmp(p-num,p-next-num)0) ,这样编写问题就迎刃而解了。排序模块主要有按学号排序、按各科目成绩排序。按学号排序时,用的排序方法为结点交换的排序方法,主

12、要代码为while( head-next != tail ) /头指针不等于尾指针时 prep = head; p = head-next; while( p-next != tail ) if(strcmp(p-num,p-next-num)0) /利用字符串比较函数对学号比较大小 temp = p-next; /临时保存p的后继结点的值 prep-next = p-next; p-next = p-next-next; prep-next-next = p; p = temp; /完成交换 p = p-next; / 节点后移 prep = prep-next; tail = p; /完成

13、排序而按科目成绩排序时,采用的都是插入法排序,按成绩递减序列排序,核心算法如下void paixusf(student *&L) /将学生单链表按数分成绩递减排序 student *p,*pre,*q; p=L-next-next; /p指向L的第2个数据结点 L-next-next=NULL; /构造只含一个数据结点的有序表 while (p!=NULL) q=p-next; /q保存*p结点后继结点的指针 pre=L; /从有序表开头进行比较,pre指向插入*p的前驱结点 while (pre-next!=NULL & pre-next-mathp-math) pre=pre-next; /在有序表中找插入*p的前驱结点*pre p-next=pre-next; /将*pre之后插入*p pre-next=p; p=q; /扫描原单链表余下的结点 运行结果为(7)修改模块修改的时候,首先是根据用户输入的学号查找该学生,若查找成功,则将用户输入的信息临时保存,然后替换原先的信息5while(p!=NULL) if(strc

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

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