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

上传人:xins****2008 文档编号:118304005 上传时间:2022-07-11 格式:DOC 页数:13 大小:89.50KB
返回 下载 相关 举报
数据结构之学生成绩管理系统_第1页
第1页 / 共13页
数据结构之学生成绩管理系统_第2页
第2页 / 共13页
数据结构之学生成绩管理系统_第3页
第3页 / 共13页
点击查看更多>>
资源描述
学生成绩管理系统一、实验目的1.通过此次课程设计中学生成绩管理系统的题目,掌握链表等数据结构的基本操作方面的知识,并能灵活的解决一些基本的问题,加深对其性质及各项操作的理解;2.将所学数据结构方面的知识与一门具体的语言C语言来进行实现,感受数据结构的强大作用,加深理解。二、试验要求管理系统中有五个要求:输入 查找 修改 插入 删除 存储(1) 输入要求:能够通过键盘输入和文件输入两种(2) 查找要求:能够根据学生号查找单个学生的信息,也可以遍历所有学生信息(3) 修改要求:能够根据学生号修改单个学生所有信息(4) 插入要求:能够实现头插和尾插(5) 删除要求:能够根据学生号删除单个学生信息(6) 存储要求:通过链表存储所有信息三、 算法的思想与算法实现步骤1.基本思想通过链表数据类型进行基本操作,主要有三个模块:分别是主函数模块、主要操作函数及基本操作函数。其中,主函数负责其他子函数的调用实现以及基本界面的操作主要函数包括:void StuInput(Student *); /学生成绩管理系统的输入函数,由主函数调用void StuSelect(Student *); /学生成绩管理系统的查找函数,由主函数调用void StuAlter(Student *); /学生成绩管理系统的修改函数,由主函数调用void StuInsert(Student *); /学生成绩管理系统的插入函数,由主函数调用void StuDelect(Student *); /学生成绩管理系统的删除函数,由主函数调用void StuSave(Student *); /学生成绩管理系统的存储函数,由主函数调用基本操作函数:void StuOutput(Student *p); /输出函数int StuImport(Student *head,Student *p); /输入函数void StuInputHand(Student *head); /学生成绩管理系统的手动输入函数,由输入函数调用void StuInputFile(Student *head); /学生成绩管理系统的文件输入函数,由输入函数调用void StuSelectErg(Student *head); /学生成绩管理系统的遍历函数,由查找函数调用 void StuSelectNumFind(Student *head); /学生成绩管理系统的按学号查找函数,由查找函数调用void StuSelectSubFind(Student *head); /学生成绩管理系统的按科目查找函数,由查找函数调用2.实现步骤首先,分析题目要求划分实现模块,定义基本数据类型,诸如结构体、链表等;其次,针对上述的基本操作实现具体需要进行的操作,具体实现每个环节需要进行的基本操作,即具体编写每个小函数实现功能;最后,编写主函数对每个实现进行按需调用,实现操作。3.流程图mainStuMainStuInputStuSelectStuAlterStuInsertStuDelectStuSaveStuInputHandStuInputFileStuSelectErgStuSelectNumFindStuSelectSubFind四代码:#include#include#includestruct Student char name10; char subject10; int num; int grade; Student *next;void StuMain(); /学生成绩管理系统的主函数,由main函数调用void StuInput(Student *); /学生成绩管理系统的输入函数,由主函数调用void StuSelect(Student *); /学生成绩管理系统的查找函数,由主函数调用void StuAlter(Student *); /学生成绩管理系统的修改函数,由主函数调用void StuInsert(Student *); /学生成绩管理系统的插入函数,由主函数调用void StuDelect(Student *); /学生成绩管理系统的删除函数,由主函数调用void StuSave(Student *); /学生成绩管理系统的存储函数,由主函数调用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(%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(学生号: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(学生成绩: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) printf( *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); break; 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变量,函数是否继续进行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 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=NULL) 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); 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); /用来判断输入节点中学生号是否有重复 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-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);void StuSelectErg(Student *head); /学生成绩管理系统的遍历函数,由查找函数调用 void StuSelectNumFind(Student *head); /学生成绩管理系统的按学号查找函数,由查找函数调用void StuSelectSubFind(Student *head); /学生成绩管理系统的按科目查找函数,由查找函数调用void StuSelect(Student *head) /学生成绩管理系统的查找函数,由主函数调用 char decide=y; /定义while变量,函数是否继续进行int num; /定义switch变量,函数跳转到哪个子函数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:decide=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; printf(输入想要查找学生的学生号: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) /学生成绩管理系统的按科目查找函数,由查找函数调用 char 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) /学生成绩管理系统的修改函数,由主函数调用 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(输入修改成绩: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-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) 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); Student *p=(Student *)malloc(sizeof(Student);p-next=head-next;int i=1;while(p-next!=NULL) if(num=p-next-num&!strcmp(Sub,p-next-subject) StuOutput(p-next); printf(是否删除:1/0n); scanf(%d,&i); if(num=head-next-num&!strcmp(Sub,head-next-subject) head-next=head-next-next; else p-next=p-next-next; i=2; printf(删除成功n); break; p=p-next; if(i=1) printf(没有该学生信息n);void StuSave(Student *head) /学生成绩管理系统的存储函数,由主函数调用 FILE *fp;char filename10;printf(请输入存储文件名(包括物理地址)n);scanf(%s,filename);Student *p=(Student *)malloc(sizeof(Student); p=head-next;if(fp=fopen(filename,w)=NULL) printf(cannot open file); return; printf(input data:/n); while(p!=NULL) fwrite(p,sizeof(Student),1,fp); /* 成块写入文件*/p=p-next; fclose(fp);
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!