数据结构之学生成绩管理系统_第1页
数据结构之学生成绩管理系统_第2页
数据结构之学生成绩管理系统_第3页
数据结构之学生成绩管理系统_第4页
数据结构之学生成绩管理系统_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、学生成绩管理系统一、实验目的1. 通过此次课程设计中学生成绩管理系统的题目,掌握链表等数据结构的基 本操作方面的知识,并能灵活的解决一些基本的问题,加深对其性质及各项操作的 理解;2. 将所学数据结构方面的知识与一门具体的语言一一C语言来进行实现, 感受数据结构的强大作用,加深理解。二、试验要求管理系统中有五个要求:输入查找修改插入删除存储(1) 输入要求:能够通过键盘输入和文件输入两种(2) 查找要求:能够根据学生号查找单个学生的信息,也可以遍历所有学生信息(3) 修改要求:能够根据学生号修改单个学生所有信息(4) 插入要求:能够实现头插和尾插(5) 删除要求:能够根据学生号删除单个学生信息

2、(6) 存储要求:通过链表存储所有信息三、算法的思想与算法实现步骤1 基本思想 通过链表数据类型进行基本操作,主要有三个模块:分别是主函数模 块、主要操作函数及基本操作函数。其中,主函数负责其他子函数的调用实现以及基本界面的操作 主要函数包括:void Stulnput (Student *); 学生成绩管理系统的输入函数,由主函数调用void StuSelect (Student *); 学生成绩管理系统的查找函数,由主函数调用void StuAlter(Student *);/学生成绩管理系统的修改函数,由主函数调用void Stulnsert(Student *); /学生成绩管理系统的

3、插入函数,由主函数调用void StuDelect(Student *); /学生成绩管理系统的删除函数,由主函数调用void StuSave(Student *); /学生成绩管理系统的存储函数,由主函数调用基本操作函数:void StuOutput(Student *p);/ 输出函数int Stulmport(Student *head,Student *p); / 输入函数void StulnputHand(Student *head); /学生成绩管理系统的手动输入函数,由输入函数调用void StulnputFile(Student *head); /学生成绩管理系统的文件输入函数

4、,由输入函数调用void StuSelectErg(Student *head); /学生成绩管理系统的遍历函数,由查找函数调用void StuSelectNumFind(Student *head); /学生成绩管理系统的按学号查找函数,由查找函 数调 用void StuSelectSubFind(Student *head); /学生成绩管理系统的按科目查找函数,由查找函数 调 用2.实现步骤首先,分析题目要求划分实现模块,定义基本数据类型,诸如结构体、链表等;其次,针对上述的基本操作实现具体需要进行的操作,具体实现每个环节需要进行的基本操作,即具体编写每个小函数实现功能;最后,编写主函数

5、对每个实现进行按需调用,实现操作。3. 流程图四. 代码:#in clude#in clude#in clude struct Stude nt char n ame10;char subject10;int num;int grade;Stude nt *n ext;void StuMain();学生成绩管理系统的主函数,由 main函数调用 void Stulnput(Student *); 学生成绩管理系统的输入函数,由主函数调用void StuSelect(Student *); 学生成绩管理系统的查找函数,由主函数调用void StuAlter(Student J;/学生成绩管理系统

6、的修改函数,由主函数调用void Stulnsert(Student *);/学生成绩管理系 统的插入函数,由主函数调用void StuDelect(Student *); 学生成绩管理系统的删除函数,由 主函数调用void StuSave(Student *); 学生成绩管理系统的存储函数,由主函数调用void StuOutput(Student *p);/ 输出函数int Stulmport(Student *head,Student *p); / 输入函数void StuOutput(Student *p) /打印函数,将链表的该节点信息输出printf(” 学生姓名:”);printf

7、(%s ,p-name);printf(n 学生号:”);printf(*%d ,p-num);printf(科目:”);printf(%s *,p-subject);printf(” 学生成绩:”);printf(”d n”,pgrade);int Stulmport(Student *head,Student *p)(Student *Opinion=(Student *)malloc(sizeof(Student);/ 用来判断输入节点中学生号是否有重复Opinion=head-n ext;printf(学生姓名:nH); scanf(”s”,pname);printf(” 学生号:n)

8、; scanf(%d,&p-num);printf(科目:n); scanf(%s,p-subject);if(Opinion!=NULL)num=pnum&!strcmp(Opinionsubject,psubject) grade);return 0;void main()StuMain();void StuMain()char decide=y;int num=1;子函数Student *head;head=(Student *)malloc(sizeof(Student); head-next=NULL;定义while变量,函数是否继续进行 定义switch变量,函数跳转到哪 个定义链

9、表的头指针/给头指针开辟空间可编辑范本while(decide!=n)printf(H*nM);*printf(,f1输入2查找3修改4插入*printf(f,5删除6存储7退出nn);printf(Hit*nn);scanf(”cr,&num);switch( num)case 1:Stulnput(head); break;case 2:StuSelect(head); break;case 3:StuAlter(head); break;case 4:Stu Insert(head); break;case 5:StuDelect(head); break;case 6:StuSave(

10、head); break;default:decide= rf;break;void StulnputHand(Student *head); /学生成绩管理系统的手动输入函数,由输入函数调用void StulnputFile(Student *head); /学生成绩管理系统的文件输入函数,由输入函数调用(printf(M itprintf(uprintf(H1手动输入2文件输入3退出 it*void Stulnput(Student *head)(学生成绩管理系统的输入函数,由主函数调用char decide=y; int num;函数定义while变量,函数是否继续进行定义switch变

11、量,函数跳转到哪个子while(decide!=nf)scanf(”d”,&num);switch( num)case 1:StulnputHand(head); break;case 2:StulnputFile(head);default:deciderf;break;void StulnputHand(Student *head) /学生成绩管理系统的手动输入函数,由输入函数调用next=NULL)(Student *point=(Student *)malloc(sizeof(Student); / 链表中最后一个 节点,只在该 函数中存在point-next=NULL;int dec

12、ide=1;while(decide!=O)Student *p=(Student *)malloc(sizeof(Student); p-next=NULL;Stulmport(head5p); if(head-next=NULL)(head-next=p; point=p;)elsenext=p; point=p;printf(K 是否继续:1/0nM);scanf(%d,&decide);elseprintf(”管理系统中已存在信息,若想输入学生信息,请转插入子系统”);void StulnputFile(Student *head) /学生成绩管理系统的文件输入函数,由输入函数调用(i

13、f(head-next!=NULL)(printf(-学生管理系统中已有信息,请跳转到插入选项n):return ;FILE *fp;printfC*请输入文件名(包括物理地址)n”);char filename10;scanf(n%s,filename);if(fp=fopen(filename,r)=NULL)(printf(Hcan not open filerY);return;Student *point=(Student *)malloc(sizeof(Student);Student *Opinion=(Student *)malloc(sizeof(Student);/ 用来判

14、断输入节点中学生号是否有重复while(!feof(fp) Opin ion=head-n ext;Student *p=(Student *)malloc(sizeof(Student); p-next=NULL;fread(p,sizeof(Stude nt),1 ,fp);if(Opi nion!=NULL)可编辑范本if(Opinion- num=p- num&!strcmp(Opi nion-subject,p-subject) (printf(-该文件中有重复学生信息,请验明再传输n-);head- next=NULL;return ;Opinion=Opin ion-next;

15、if (head-next=N U LL)head-n ext=p;poin t=p;)elsepoint- next=p;poin t=p;);Opinion=head-n ext;while(Opinion-next!=NULL)Opinion=Opinionn ext;if(Opinion-next-next=NULL) Opinion-next=NULL;;fclose(fp);printf(u 传输成功 nn);void StuSelectErg(Student *head); /学生成绩管理系统的遍历函数,由查找函数调用void StuSelectNumFind(Student *

16、head); /学生成绩管理系统的按学号查找函数,由查找函 数调 用void StuSelectSubFind(Student *head); /学生成绩管理系统的按科目查找函数,由查找函数 调 用void StuSelect(Student *head) /学生成绩管理系统的查找函数,由主函数调用定义while变量,函数是否继续进行 char decide-/; int num;定义switch变量,函数跳转到哪个子函数while(decide!=n)( it*.、printf(n*nH);printf(Hprintff* scanf(” d”,&num);遍历2学号查找3科目查找4退出*n

17、n);*pfl switch(num)(case 1:StuSelectErg(head); break;case 2:StuSelectNumFind(head); break;case 3:StuSelectSubFind(head); break;default:decide=n,;break;void StuSelectErg(Student *head) /学生成绩管理系统的遍历函数,由查找函数调用(Student *p=(Student *)malloc(sizeof(Student); p=head-next;int i=1;while(p!=NULL)(printf(M第%d位

18、学生信息:n;i);StuOutput(p); p=p-next; i+;void StuSelectNumFind(Student *head) /学生成绩管理系统的查找子系统,有查找函数调用( int num;printf(”输入想要查找学生的学生号:n”); scanf(H%dH,&num);Student *p=(Student *)malloc(sizeof(Student); p=head-next;int i=1;while(p!=NULL)if(nu m=p-num)StuOutput(p);i+;p=p-next;if(i=1)printf(“没有该学生信息”);void S

19、tuSelectSubFind(Student *head) /学生成绩管理系统的按科目查找函数,由查找函数 调 用(char Sub10;printf(输入想要查找科目:n);scanf(n%s,Sub);Student *p=(Student *)malloc(sizeof(Student); p=head-next;int i=1;while(p!=NULL)(if(!strcmp(Sub,p-subject)StuOutput(p);i+;p=p-next;if(i=1)printf(”没有该学生信息”);void StuAlter(Student *head) /学生成绩管理系统的修

20、改函数,由主函数调用(int num;printfC*输入想要查找学生的学生号:n”);scanf(” d”,&num);char Sub10;printf(输入想要查找科目:nH);scanf(%s,Sub);Student *p=(Student *)malloc(sizeof(Student); p=head-next;int i=1;while(p!=NULL)if(num=p-num&!strcmp(Sub,p-subject)可编辑范本printf(H 输入修改成绩:n); scanf(H%d,&p-grade); printf(修改成功 n“); i+;p=p-n ext;if(

21、i=1) printff没有该学生信息“);void Stulnsert(Student *head) /学生成绩管理系统的插入函数,由主函数调用Student *point=(Student *)malloc(sizeof(Student);poin t=head-n ext;while(point-next!=NULL)point=point-next; / 找到尾结点char decide=y; /定义while变量,函数是否继续进行int num;/定义switch变量,函数跳转到哪个子函数while(decide!=n)printf(,f*n );printf(n * 1 头插 2

22、尾插3 退出 *nn);printf(”scanf(,f%dH,&num);Student *p=(Student *)malloc(sizeof(Student);switch( num) case 1:Stulmport(head,p); pnext=head-next; head-next=p; printf(M 插入成功nH); break;case 2:Stulmport(head,p); point-next=p; p-next=NULL; printf(M 插入成 功 nn); break;default:deciderf; break;)void StuDelect(Student *head) /学生成绩管理系统的删除函数,由主函数调用int num;printf(输入想要删除学生的学生号:n”);scanf(” d”,&num);char Sub10

温馨提示

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

评论

0/150

提交评论