《2022年新版数据结构之学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《2022年新版数据结构之学生成绩管理系统.docx(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022年新版数据结构之学生成绩管理系统可编辑范本 可编辑范本 学生成果管理系统 一、试验目的通过此次课程设计中学生成果管理系统的题目 ,驾驭链表等数据结构的 基本操作方面的学问 ,并能敏捷的解决一些基本的问题 ,加深对其性质及各项操作 的理解; 将所学数据结构方面的学问与一门详细的语言 C 语言来进行实现, 感受数据结构的强大作用,加深理解。 二、试验要求 管理系统中有五个要求:输入 查找 修改 插入 删除 存储 输入要求:能够通过键盘输入和文件输入两种 查找要求:能够依据学生号查找单个学生的信息,也可以遍历全部学生信息 修改要求:能够依据学生号修改单个学生全部信息 插入要求:能够实现头插和
2、尾插 删除要求:能够依据学生号删除单个学生信息 存储要求:通过链表存储全部信息 三、算法的思想与算法实现步骤 1. 基本思想 通过链表数据类型进行基本操作,主要有三个模块:分别是主函数模块、 主要操作函数及基本操作函数。 其中,主函数负责其他子函数的调用实现以及基本界面的操作 主要函数包括: void StuInput; / 学生成果管理系统的输入函数,由主函数调用 void StuSelect; / 学生成果管理系统的查找函数,由主函数调用 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 *h
4、ead); / 学生成果管理系统的文件输入函数,由输入函数调用 void StuSelectErg(Student *head); / 学生成果管理系统的遍历函数,由查找函数调用 void StuSelectNumFind(Student *head); / 学生成果管理系统的按学号查找函数,由查找函 数调用 void StuSelectSubFind(Student *head); / 学生成果管理系统的按科目查找函数,由查找函数 调用 2. 实现步骤 首先,分析题目要求划分实现模块,定义基本数据类型,诸如结构体、链表 等; 其次,针对上述的基本操作实现详细须要进行的操作,详细实现每个环节需
5、 要进行的基本操作,即详细编写每个小函数实现功能; 最终,编写主函数对每个实现进行按需调用,实现操作。 流程图 代码: #in clude<stdio.h> #in clude<malloc.h> #in clude<stri ng.h> struct Stude nt char n ame10; char subject10; int num; int grade; Stude nt *n ext; ; void StuMain();/学生成果管理系统的主函数,由main函数调用 void StuInput(Student *);/学生成果管理系统的输入函
6、数,由主函数调用 void StuSelect(Student *); /学生成果管理系统的查找函数,由主函数调用 void StuAlter(Student *); /学生成果管理系统的修改函数,由主函数调用 void StuInsert(Student *);/学生成果管理系统的插入函数,由主函数调用 void StuDelect(Student *); / 学生成果管理系统的删除函数,由主函数调用 void StuSave(Student *); / 学生成果管理系统的存储函数,由主函数调用 void StuOutput(Student *p);/ 输出函数 int StuImport(
7、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 *Opinio
8、n=(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( 该学生这
9、门科目已有成果,请重新输入 n); return 1; Opinion=Opinion->next; printf( 学生成果: n); scanf(%d,p->grade); return 0; void main() StuMain(); void StuMain() void StuMain() char decide='y' int num=1; 子函数 Student *head; head=(Student *)malloc(sizeof(Student); head->next=NULL; / 定义 while 变量,函数是否接着进行 / 定
10、义 switch 变量,函数跳转到哪个 / 定义链表的头指针 / 给头指针开拓空间 / 初始化头指针 while(decide!='n') printf(printf(*n);1 输入 2 查找 printf( printf( * *n); 1 输入 2 查找 3 修改 4 插入 *n); printf( printf( * 5 删除 6 存储 7 退出 *n); *n); scanf(%d,num); switch(num) case 1: StuInput(head); break; case 2: StuSelect(head); break; case 3: Stu
11、Alter(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); / 学生成果管理系统的文件输入函数,由输入函数调用 pr
12、intf( printf( printf(*n);1 手动输入 2 printf( printf( printf( * *n); 1 手动输入 2 文件输入 3 退出 * *n); *n); void StuInput(Student *head) char decide='y' int num; 函数 / 学生成果管理系统的输入函数,由主函数调用 / 定义 while 变量,函数是否接着进行 / 定义 switch 变量,函数跳转到哪个子 while(decide!='n') scanf(%d,num); switch(num) case 1: Stu
13、InputHand(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) Stude
14、nt *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) / 学生成果管理系统的文件输入函数,由输入函数调用
15、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(St
16、udent);/ 用来推断输入节 点中学生号是否有重复 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( 该文件中有重复学生信息,请验明再传输
17、 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
18、( 传输胜利 n); void StuSelectErg(Student *head); / 学生成果管理系统的遍历函数,由查找函数调用 void StuSelectNumFind(Student *head); / 学生成果管理系统的按学号查找函数,由查找函 数调用 void StuSelectSubFind(Student *head); / 学生成果管理系统的按科目查找函数,由查找函数 调用 void StuSelect(Student *head) / 学生成果管理系统的查找函数,由主函数调用 char decide='y' int num; / 定义 while
19、变量,函数是否接着进行 / 定义 switch 变量,函数跳转到哪个子 函数 while(decide!='n') printf(*n); printf( * *n); printf( printf( * 1 遍历 2 学号查找 3 科目查找 4 退出 *n); *n); scanf(%d,num); switch(num) case 1: StuSelectErg(head); break; case 2: StuSelectNumFind(head); break; case 3: StuSelectSubFind(head); break; default: deci
20、de='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; pr
21、intf( 输入想要查找学生的学生号: 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)
22、; 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
23、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 StuI
24、nsert(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);
25、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; de
26、fault: 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
27、->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=
28、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); 第24页 共24页第 24 页 共 24 页第 24 页 共 24 页第 24 页 共 24 页第 24 页 共 24 页第 24 页 共 24 页第 24 页 共 24 页第 24 页 共 24 页第 24 页 共 24 页第 24 页 共 24 页第 24 页 共 24 页