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

下载本文档

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

文档简介

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

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

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

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

5、行按需调用,实现操作。3.流程图mainStuMainStuInputStuSelectStuAlterStuInsertStuDelectStuSaveStuInputHandStuInputFileStuSelectErgStuSelectNumFindStuSelectSubFind四代码:*include<stdio.h>*include<malloc.h>*include<string.h>struct Student char name10; char subject10; int num; int grade; Student *next;vo

6、id StuMain(); /学生成绩管理系统的主函数,由main函数调用void StuInput(Student *); /学生成绩管理系统的输入函数,由主函数调用void StuSelect(Student *); /学生成绩管理系统的查找函数,由主函数调用void StuAlter(Student *); /学生成绩管理系统的修改函数,由主函数调用void StuInsert(Student *); /学生成绩管理系统的插入函数,由主函数调用void StuDelect(Student *); /学生成绩管理系统的删除函数,由主函数调用void StuSave(Student *);

7、/学生成绩管理系统的存储函数,由主函数调用void StuOutput(Student *p); /输出函数int StuImport(Student *head,Student *p); /输入函数void StuOutput(Student *p) /打印函数,将链表的该节点信息输出 printf("学生姓名:"); printf("%s ",p->name);printf("学生号:");printf("%d ",p->num);printf("科目: ");printf(&q

8、uot;%s ",p->subject);printf("学生成绩:");printf("%d n",p->grade);int StuImport(Student *head,Student *p)Student *Opinion=(Student *)malloc(sizeof(Student); /用来判断输入节点中学生号是否有重复Opinion=head->next; printf("学生姓名:n"); scanf("%s",p->name);printf("学生

9、号:n");scanf("%d",&p->num);printf("科目:n");scanf("%s",p->subject);if(Opinion!=NULL) if(Opinion->num=p->num&&!strcmp(Opinion->subject,p->subject) printf("该学生这门科目已有成绩,请重新输入n");return 1; Opinion=Opinion->next;printf("学生成绩:

10、n");scanf("%d",&p->grade);return 0;void main() StuMain();void StuMain() char decide='y' /定义while变量,函数是否继续进行int num=1; /定义switch变量,函数跳转到哪个子函数Student *head; /定义链表的头指针head=(Student *)malloc(sizeof(Student); /给头指针开辟空间head->next=NULL; /初始化头指针 while(decide!='n') pr

11、intf(" *n"); printf(" * 1 输入 2 查找 3 修改 4 插入 *n");printf(" * 5 删除 6 存储 7 退出 *n"); printf(" *n"); scanf("%d",&num);switch(num) case 1: StuInput(head); break; case 2: StuSelect(head); break; case 3: StuAlter(head); break; case 4: StuInsert(head); br

12、eak; case 5: StuDelect(head); break; case 6: StuSave(head); break; default: decide='n' break;void StuInputHand(Student *head); /学生成绩管理系统的手动输入函数,由输入函数调用void StuInputFile(Student *head); /学生成绩管理系统的文件输入函数,由输入函数调用void StuInput(Student *head) /学生成绩管理系统的输入函数,由主函数调用 char decide='y' /定义while

13、变量,函数是否继续进行int num; /定义switch变量,函数跳转到哪个子函数while(decide!='n') printf(" *n"); printf(" * 1 手动输入 2 文件输入 3 退出 *n"); printf(" *n");scanf("%d",&num);switch(num)case 1:StuInputHand(head);break;case 2:StuInputFile(head);default:decide='n'break;void

14、 StuInputHand(Student *head) /学生成绩管理系统的手动输入函数,由输入函数调用 if(head->next=NULL) Student *point=(Student *)malloc(sizeof(Student); /链表中最后一个节点,只在该函数中存在 point->next=NULL; int decide=1; while(decide!=0) Student *p=(Student *)malloc(sizeof(Student); p->next=NULL; StuImport(head,p); if(head->next=NU

15、LL) head->next=p; point=p; else point->next=p; point=p; printf("是否继续:1/0n"); scanf("%d",&decide); else printf("管理系统中已存在信息,若想输入学生信息,请转插入子系统");void StuInputFile(Student *head) /学生成绩管理系统的文件输入函数,由输入函数调用 if(head->next!=NULL) printf("学生管理系统中已有信息,请跳转到插入选项n&qu

16、ot;); return ; FILE *fp; printf("请输入文件名(包括物理地址)n"); char filename10;scanf("%s",filename); if(fp=fopen(filename,"r")=NULL) printf("can not open filen"); return; Student *point=(Student *)malloc(sizeof(Student);Student *Opinion=(Student *)malloc(sizeof(Student);

17、 /用来判断输入节点中学生号是否有重复 while(!feof(fp) Opinion=head->next; Student *p=(Student *)malloc(sizeof(Student); p->next=NULL; fread(p,sizeof(Student),1,fp); if(Opinion!=NULL) if(Opinion->num=p->num&&!strcmp(Opinion->subject,p->subject) printf("该文件中有重复学生信息,请验明再传输n"); head-&g

18、t;next=NULL;return ; Opinion=Opinion->next; if(head->next=NULL) head->next=p; point=p; else point->next=p; point=p; ; Opinion=head->next; while(Opinion->next!=NULL) Opinion=Opinion->next; if(Opinion->next->next=NULL) Opinion->next=NULL; ; fclose(fp); printf("传输成功n&

19、quot;);void StuSelectErg(Student *head); /学生成绩管理系统的遍历函数,由查找函数调用 void StuSelectNumFind(Student *head); /学生成绩管理系统的按学号查找函数,由查找函数调用void StuSelectSubFind(Student *head); /学生成绩管理系统的按科目查找函数,由查找函数调用void StuSelect(Student *head) /学生成绩管理系统的查找函数,由主函数调用 char decide='y' /定义while变量,函数是否继续进行int num; /定义swi

20、tch变量,函数跳转到哪个子函数while(decide!='n') printf(" *n"); printf(" * 1 遍历 2 学号查找 3 科目查找 4 退出 *n"); printf(" *n");scanf("%d",&num);switch(num)case 1:StuSelectErg(head);break;case 2:StuSelectNumFind(head);break;case 3: StuSelectSubFind(head);break;default:de

21、cide='n'break;void StuSelectErg(Student *head) /学生成绩管理系统的遍历函数,由查找函数调用 Student *p=(Student *)malloc(sizeof(Student);p=head->next;int i=1;while(p!=NULL) printf("第%d位学生信息:n",i); StuOutput(p); p=p->next; i+;void StuSelectNumFind(Student *head) /学生成绩管理系统的查找子系统,有查找函数调用 int num; pri

22、ntf("输入想要查找学生的学生号:n"); scanf("%d",&num); Student *p=(Student *)malloc(sizeof(Student);p=head->next;int i=1;while(p!=NULL) if(num=p->num) StuOutput(p); i+; p=p->next; if(i=1) printf("没有该学生信息");void StuSelectSubFind(Student *head) /学生成绩管理系统的按科目查找函数,由查找函数调用 ch

23、ar Sub10; printf("输入想要查找科目:n"); scanf("%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) /学生成绩管理系统的修改函数,由主函数调用

24、 int num; printf("输入想要查找学生的学生号:n"); scanf("%d",&num);char Sub10; printf("输入想要查找科目:n"); 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("输入

25、修改成绩:n"); scanf("%d",&p->grade); printf("修改成功n"); i+; p=p->next; if(i=1) printf("没有该学生信息");void StuInsert(Student *head) /学生成绩管理系统的插入函数,由主函数调用 Student *point=(Student *)malloc(sizeof(Student); point=head->next; while(point->next!=NULL) point=point-&

26、gt;next; /找到尾结点 char decide='y' /定义while变量,函数是否继续进行 int num; /定义switch变量,函数跳转到哪个子函数 while(decide!='n') printf(" *n"); printf(" * 1 头插 2 尾插 3 退出 *n"); printf(" *n"); scanf("%d",&num); Student *p=(Student *)malloc(sizeof(Student); switch(num)

27、 case 1: StuImport(head,p); p->next=head->next; head->next=p; printf("插入成功n"); break; case 2: StuImport(head,p); point->next=p; p->next=NULL; printf("插入成功n"); break; default: decide='n' break; void StuDelect(Student *head) /学生成绩管理系统的删除函数,由主函数调用 int num; printf("输入想要删除学生的学生号:n"); scanf("%d",&num);char Sub10; printf("输入想要删除科目:n"); scanf("%s",Sub);

温馨提示

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

评论

0/150

提交评论