1、数据结构之学生成绩管理系统学生成绩管理系统一、实验目得1、通过此次课程设计中学生成绩管理系统得题目,掌握链表等数据结构得基本操作方面得知识,并能灵活得解决一些基本得问题,加深对其性质及各项操作得理解;、 将所学数据结构方面得知识与一门具体得语言语言来进行实现,感受数据结构得强大作用,加深理解.二、 试验要求管理系统中有五个要求:输入 查找 修改 插入 删除 存储(1) 输入要求:能够通过键盘输入与文件输入两种(2) 查找要求:能够根据学生号查找单个学生得信息,也可以遍历所有学生信息(3) 修改要求:能够根据学生号修改单个学生所有信息(4) 插入要求:能够实现头插与尾插(5) 删除要求:能够根据
2、学生号删除单个学生信息(6) 存储要求:通过链表存储所有信息三、 算法得思想与算法实现步骤1、基本思想通过链表数据类型进行基本操作,主要有三个模块:分别就是主函数模块、主要操作函数及基本操作函数.其中,主函数负责其她子函数得调用实现以及基本界面得操作主要函数包括:vod StuInt(Suent ); /学生成绩管理系统得输入函数,由主函数调用oid StuSelet(Stunt ); /学生成绩管理系统得查找函数,由主函数调用void tuAlter(Student ); /学生成绩管理系统得修改函数,由主函数调用vi StInsert(Stuent ); /学生成绩管理系统得插入函数,由主
3、函数调用voi Stlect(tdent *); /学生成绩管理系统得删除函数,由主函数调用vid tuSe(Studnt); /学生成绩管理系统得存储函数,由主函数调用基本操作函数:void SuOtput(Studen *p); 输出函数inSuIp(Stdent *e,Sudent p); /输入函数vodStunpuHand(Suen*head); /学生成绩管理系统得手动输入函数,由输入函数调用void tuInput *head); /学生成绩管理系统得文件输入函数,由输入函数调用v SSelectEr(tudt hed); /学生成绩管理系统得遍历函数,由查找函数调用 void
4、StuSectNumFind(Sudent *had); /学生成绩管理系统得按学号查找函数,由查找函数调用vid StuelctubFind(Stude ead); /学生成绩管理系统得按科目查找函数,由查找函数调用2、实现步骤首先,分析题目要求划分实现模块,定义基本数据类型,诸如结构体、链表等;其次,针对上述得基本操作实现具体需要进行得操作,具体实现每个环节需要进行得基本操作,即具体编写每个小函数实现功能;最后,编写主函数对每个实现进行按需调用,实现操作。3、流程图mainStuMainStuInputStuSelectStuAlterStuInsertStuDelectStuSaveSt
5、uInputHandStuInputFileStuSelectErgStuSelectNumFindStuSelectSubFind四代码:includestdi、h#iclesruct tudet char name10; charsubjet10; inm; nt gade; tue next;void SuMain(); /学生成绩管理系统得主函数,由in函数调用od StuIpt(udnt *); /学生成绩管理系统得输入函数,由主函数调用void StSelec(tuden *); /学生成绩管理系统得查找函数,由主函数调用void StuAlter(Studnt ); /学生成绩管
6、理系统得修改函数,由主函数调用vi tunset(Student); /学生成绩管理系统得插入函数,由主函数调用vodStuDeec(Student ); /学生成绩管理系统得删除函数,由主函数调用voiStuve(Stdent*); 学生成绩管理系统得存储函数,由主函数调用voidtuOutpu(Studnt p); /输出函数it Smor(Suden head,Student *p); /输入函数oi StuOutpt(Suent ) /打印函数,将链表得该节点信息输出 printf(学生姓名:”); intf(”% ,pnae); prinf(”学生号:”); printf(”d ,-
7、um); print(科目: ); pri(s ,p-ect); pintf(”学生成绩:); prin(”%d ”,pgrade);nt Stumpot(Sudnt *hed,tud p) tnt Opion=(Student *)aoc(sizeof(Sden)); /用来判断输入节点中学生号就是否有重复 inion=eadnx; printf(”学生姓名:n”); canf(%s”,pnam); pinf(”学生号:n); sanf(”d,pum); printf(科目:n);san(s”,pubjec); i(pno!=NULL) f(pnio-nu=p-nu!strc(Oiionsb
8、jct,-be)) i(”该学生这门科目已有成绩,请重新输入n); rturn 1; Oinin=Oponet; printf(学生成绩:); scnf(”%d,&pgrade); reurn 0;oidman() StMain();voiStuMai() char ei; /定义wle变量,函数就是否继续进行int num=1; /定义swich变量,函数跳转到哪个子函数 Studned; /定义链表得头指针hd=(Studen *)malc(sie(Suen));/给头指针开辟空间hednex=NULL; /初始化头指针 while(deci!=) prnt( *); pintf( * 1
9、 输入 查找 3 修改 4 插入 *n); int( * 删除 存储 退出 *n”); pnf( *n); scnf(”,um); wich(nm) case 1: StuInut(head); break; as 2: Sulect(hea); bak; cae3: StuAte(e); brek; as 4: StuInser(had); break; ase 5: tueect(a); bea; cs 6: StuSave(hea); brea; efaul: decid=; brek; ;void StuInpuHand(Stdent hea); /学生成绩管理系统得手动输入函数,由输
10、入函数调用i StuInput *ead); /学生成绩管理系统得文件输入函数,由输入函数调用voStnt(Sude *ha) /学生成绩管理系统得输入函数,由主函数调用 cardeide; /定义hile变量,函数就是否继续进行int num; /定义sitch变量,函数跳转到哪个子函数while(decide!n) pntf( *); pritf(” * 1 手动输入 2 文件输入 退出 *”); prif(” *n”); scanf(%d,nm); wtch(num) cas1:StuInuHan(head);br; se:Sunput);dealt: did=n;bea; voi St
11、Inputand(tude head) /学生成绩管理系统得手动输入函数,由输入函数调用 if(hed-ext=ULL) Stuet poit=(Studet )allo(szeof(Stuet); /链表中最后一个节点,只在该函数中存在 pointnext=NUL; it decide1; whil(ede!=0) Sden p=(Stude *)mll(sief(Stdent)); p-next=NULL; StIpr(hed,p); f(heex=ULL) heanxt=; pont=p; se pont-next=p; ont=p; printf(就是否继续:1/0n); ca(%d,
12、dcie); else pit(管理系统中已存在信息,若想输入学生信息,请转插入子系统”);voi StuInpu hea) /学生成绩管理系统得文件输入函数,由输入函数调用 if(head-ext!=NUL) prif(学生管理系统中已有信息,请跳转到插入选项n); reun ; ILE f; printf(请输入文件名(包括物理地址)); ha10;scanf(”s,); i((fp=fpe(,r”))=NUL) printf(ca n pen filen); eun; tuden*point=(Stun )ac(szef(Stden)); tuden *Oiin=(tudent )all
13、oc(izo(Stu); /用来判断输入节点中学生号就是否有重复 whie(!fof(fp)) Opion=ead-next; Stentp(Sdnt)malc(szf(Studt); p-ne=ULL; fread(,sizf(Student),fp); f(Opnon!=NULL) if(Opiionnu=pum&!scm(pnio-bjec,p-ject) print(”该文件中有重复学生信息,请验明再传输n); head-nxt=NULL; return ; Opinon=pinionnex; if(head-ext=ULL) heaextp; point=p; else ointne
14、=p; oip; ; pion=hedext; hil(Opnin-next!NL) Opinn=Oinionex; f(Oini-nenext=NL) Onont=NUL; ; fls(fp); printf(传输成功”);vod StuelectErg(Studnhea); 学生成绩管理系统得遍历函数,由查找函数调用void SteetNuFi(tude d); /学生成绩管理系统得按学号查找函数,由查找函数调用vdtuSelctuind(Stuen *ead); /学生成绩管理系统得按科目查找函数,由查找函数调用void SuSect(Sudenhed) /学生成绩管理系统得查找函数,由
15、主函数调用 char decidey; /定义hil变量,函数就是否继续进行 int num; /定义swtc变量,函数跳转到哪个子函数whl(decie!=n) f(” *); rintf(” * 1 遍历2学号查找 科目查找 退出*n); rint( *n); scanf(%d,nm); switch(um)ase1: SSelecEr(head);rek;cae2: tuSelecumFnd(hea); break; cae : StuSlectSuFnd(head);break;default: decie=n; reak; oid tuSeectErg(Stdet *ead) /学生
16、成绩管理系统得遍历函数,由查找函数调用 Stuet p=(Stent )lloc(sizef(tut); p=hed-next; inti=1; whi(!NUL) prnt(”第位学生信息:n,i); StOutpu(p); p=p-n; i; oid tuelectmFnd(Studn head) /学生成绩管理系统得查找子系统,有查找函数调用 int n; prntf(”输入想要查找学生得学生号:n); scan(d,nu); Stuen =(Suent )aloc(sizeof(Stunt); p=edne; inti=1; wle(p!NULL) f(=pnm) tuut(p); i
17、+; p=pnext; if(=) rtf(没有该学生信息);oid SuSlecubFid(uent had) /学生成绩管理系统得按科目查找函数,由查找函数调用 chr Su0; printf(”输入想要查找科目:n); scanf(”%s”,Sub); Stdetp(Stdent )malloc(sze(udet);p=eadnext; iti1; while(!NULL) if(!trcp(Sub,psbjet) StOutpu(p); ; p=pnxt; (i=1) printf(”没有该学生信息”);vidStuAlter(Stuen *head) /学生成绩管理系统得修改函数,由
18、主函数调用 it num; prit(输入想要查找学生得学生号:n); saf(d,nu); chrub10; ptf(”输入想要查找科目:n); scn(s,ub); Studntp=(Stdnt*)malloc(ze(Se)); =headnext; nt i=; while(p!=NUL) (num=-num&!strcp(Sub,psubject)) rntf(输入修改成绩:n”); scanf(,p-grade); printf(修改成功n”); i+; p=nex; if(i=) pri(没有该学生信息); void tuIsert(Student ) /学生成绩管理系统得插入函数
19、,由主函数调用 Stdet point=(Studen)malloc(izof(Suet)); oin=hdnext; while(pit-nxt!=NULL) oint=iex; /找到尾结点 har deidey; /定义le变量,函数就是否继续进行 it nu; /定义swich变量,函数跳转到哪个子函数 hil(deide!=n) rint(” *n); intf( * 1 头插 2 尾插 3退出 *n); rntf( *n”); can(d,&num); tudetp=(tunt )alloc(ief(Stude)); swich(u) case 1: StuImport(head,
20、p); p-nxt=eadnex; hednext=p; pintf(插入成功n”); break; as2: StImport(had,); point-next=p; pnet=NLL; itf(”插入成功n); break; dea: dcin; bek; od Stlct(udet *d) 学生成绩管理系统得删除函数,由主函数调用 intn; in(输入想要删除学生得学生号:); scaf(%,um); ub10; ptf(输入想要删除科目:n); scan(%s”,Sub); Stuen*p=(tude *)loc(if(Studet);pnt=eanext; int i1;hie(p-nxt!=UL) f(u=p-nextnum&!srm(Su,p-nextubject)) SuOtput(t); printf(”就是否删除:1/0); scanf(”%,&i); if(n
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1