学生成绩管理系统(链表版)_第1页
学生成绩管理系统(链表版)_第2页
学生成绩管理系统(链表版)_第3页
学生成绩管理系统(链表版)_第4页
学生成绩管理系统(链表版)_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言应用实验报告题 目学生成绩管理系统(链表版)目 录第1章需求分析3第2章总体设计32。1 系统的程序流程图32。2系统的全局变量和常量32.3系统的函数介绍3第3章详细设计33。1 主函数设计33.2 录入函数设计43。3 排序函数设计43.4 查找函数设计43.5修改函数设计43。6插入函数设计43.7 删除函数设计43.8 保存函数设计43.9 显示函数设计43.10 退出函数设计4第4章测试5总结5参考文献5附录程序源代码5第1章 第1章需求分析(1)能完成学生成绩的插入、查询、修改、删除、输出等功能;(2)采用单链表存储结构实现;(3)所有数据以外部文件方式保存第2章 第2章总体

2、设计2。1 系统的程序流程图绘制一个系统的总体程序流程图,主要展示系统从开始以后,可以经过哪些流程,最后结束。按姓名修改某位同学的成绩按姓名修改某位同学的成绩输出链表内容输出链表内容进入系统浏览初始学生信息按姓名修改某位同学的成绩输入同学的相关信息查找按姓名删除某位同学的成绩初始学生成绩排序浏览所有同学的信息及排名插入新的成绩查看初始学生总分及平均分保存最终结果到可浏览文件退出系统主菜单统计学生信息录入2。2系统的全局变量和常量系统全局变量int n;char a;头文件:include "stdio。h"#include ”time。h"include ”str

3、ing。h"include ”stdlib。h”include ”conio.h”2。3系统的函数介绍把系统中的每个函数的原型列出来,解释一下函数的返回值及形式参数的含义;最后,再介绍一下每个函数的功能。void Create(int n)/创建链表void List() /输出链表内容void list() /输出链表所有内容void save() /文件保存void save1() /文件保存void read() /文件读取void read1() /文件读取void SAVE() /保存到可浏览文件void SAVE1() /保存到可浏览文件void sort_data_co

4、py(Lstu p,Lstu s)/交换排序时的值void sort()/对初始成绩进行排序void sort1()/对所有数据进行排序void search_print(Lstu *p)/输出查找信息void search_choose() /选择按分数段查找方式void search() /查找void modify_choose(Lstu p,int n)/选择修改方式void modify() /按姓名修改void Insert()/按序号插入void del() /按姓名删除void statistics() /成绩统计int menu() /菜单(主界面)第3章 第3章详细设计按函

5、数,写出函数的原型声明,并画出每个函数的程序流程图。 3。1 主函数设计函数3。2 录入函数设计添加的信息包括学号(不允许重复)、姓名(不允许重复)、语文成绩、数学成绩和英语成绩,如流程图所示:开始插入数据输入学生成绩信息调用类成员函数采用单链表保存数据结束调用类成员函数保存数据到文件中本程序采用的是尾插法,就是每次将新申请的结点插在终端结点的后面,其执行过程如图所示.尾插法建立单链表操作示意图3。3 排序函数设计可按照学号、语文成绩、数学成绩、英语成绩和平均分分别排序。如图所示:结束输入排序编号判断抱歉,没有此排序输出学生的信息排序开始NY3。4 查找函数设计按姓名、学号和分数段查找学生成绩

6、的流程图分别如下图4.3所示.结束输入要查找姓名判断抱歉没有该学生输出该学生的信息按姓名查找开始NY图4.3按姓名查找学生成绩信息流程图在单链表中,即使知道被访问结点的位置i,也不能像顺序表那样直接按序号访问,而只能从头指针出发,设置一个工作指针p,顺next域逐个结点往下搜索。当p指向某个结点时判断是否为第i个结点,若是则查找成功;否则,将工作指针p后移,即将p指向原来所指结点的后继结点.直到p为NULL时查找失败。单链表查找过程如图4。4所示。图4。4单链表查找过程的示意图按学号查询学生成绩信息同按姓名查找学生成绩信息,此处不再详细列出.(3)学生成绩修改模块3。5修改函数设计首先要查找与

7、要修改数据相匹配的信息,若没有则返回失败.否则把相应的信息输出,然后再重新输入新的数据并保存到单链表.返回主菜单开始修改操作输入姓名姓名一致执行修改功能NY3.6插入函数设计首先要确定插入数据的位置,执行插入操作,然后再输入数据并保存到单链表.开始插入操作选择要插入的位置判断插入的位置执行插入功能NY返回主菜单3.7 删除函数设计当选择删除功能时,首先输入要删除的同学的姓名,然后输入要删除的同学的学号,如果该同学存在并且姓名与学号匹配的上,则进行删除操作,否则返回失败.其流程图如下:开始删除操作输入姓名姓名姓名一致执行删除功能返回主菜单NY删除操作定义为将单链表的第i个结点删去。因为在单链表中

8、结点ai存储地址在其前驱结点ai1的指针域,所以必须首先找到ai-1的存储地址p,然后令p的next域指向ai 的后继结点,即把结点ai从链上摘下来,最后释放结点ai的存储空间,如图4。6所示.在单链表中删除结点指针的变化情况3。8 保存函数设计输入学生信息应保存到学生基本信息文件中,修改后的信息将可保存到可浏览的文件,如图所示:开始保存操作输入保存到文件名判断文件名的格式执行删除功能返回主菜单NY3.9 显示函数设计从单链表表头遍历整个单链表,将所有数据输出。其部分代码如下:void read() /文件读取 FILE *fp; Lstu *p,p1; if(fp=fopen(”初始值二进制

9、。txt",”rb”))=NULL) printf(”Cannot open the filen”); exit(0); head=(Lstu)malloc(sizeof(Lstu)); p1=head; while(!feof(fp) p=(Lstu *)malloc(sizeof(Lstu); if(fread(p,sizeof(Lstu),1,fp)=1) p1next=p; p1=p1-next; head=headnext;fclose(fp);3.10 退出函数设计第4章 第4章测试主要进行功能性测试,即验证各个功能模块是否正确运行.可以采用运行系统进行截图的方法来验证系

10、统结果的正确性。在完成了系统各方面的设计后,并不是可以运行就完成的,为了保证系统性能的稳定性跟安全性等,就要对系统做测试。测试环境如下:l 硬件:P4C 2。4GHz,500GB硬盘,2内存;l 软件:Windows 7 Personal SP1,分辨率1366*768,Microsoft Visual C+ 6。0.运行的主界面如图所示: 点击1输入学生相关信息,如图所示: 浏览初始学生信息,如图所示: 查看初始学生总分及平均分,如图所示: 查找,如图所示:按姓名查找: 初始学生成绩排序,如图所示:按平均成绩进行排序: 插入新成绩,如图所示: 按姓名修改某位学生的成绩,如图所示:选择修改数学

11、成绩: 按姓名删除某位学生的成绩,如图所示: 浏览所有学生的信息及排名,如图所示: 保存最终结果到可浏览的文件中,如图所示:统计,如图所示:总结写这次实验课的收获和感想。参考文献附录 程序源代码/程序名称:xsglxt。CPP/程序功能:采用链表与文件实现一个简单的学生成绩管理系统.#include "stdio.h"include "time。h”#include ”string。h”#include "stdlib.h”include "conio.h”define NULL 0typedef struct Lstu int cla,ID;

12、 long num; char name20; char sex20; float chinese,math,english; float sum,ave; Lstu next;Lstu;Lstu head;void Create(int n) /创建链表Lstu p,s;int i;for(i=0;i<n;i+) if(i=0)p=(Lstu )malloc(sizeof(Lstu));printf(”请输入第%d个人的信息n”,i+1);printf(”请输入班级: ”);scanf(”d”,pcla); printf("请输入学号: ");scanf(”ld”,

13、&p>num); printf(”请输入姓名: ”);scanf("s”,pname);printf(”请输入性别: ");scanf(”%s",psex);printf(”请输入语文成绩: ”);scanf(”f”,pchinese);printf(”请输入数学成绩: ”);scanf("f",p>math);printf(”请输入英语成绩: ”);scanf("%f”,p-english);psum=pchinese+p->math+p->english;p>ave=p-sum/3;head=

14、p;if(n=1) pnext=NULL; elses=(Lstu )malloc(sizeof(Lstu);printf(”请输入第d个人的信息n”,i+1);printf("请输入班级: ");scanf("d”,scla); printf("请输入学号: ”);scanf("ld”,s-num); printf(”请输入姓名: ”);scanf("%s”,s-name);printf("请输入性别: ");scanf(”%s”,ssex);printf(”请输入语文成绩: ”);scanf(”f”,&

15、s>chinese);printf(”请输入数学成绩: ”);scanf("%f”,smath);printf("请输入英语成绩: ”);scanf(”%f”,s-english);s>sum=schinese+s>math+s-english;save=s->sum/3; p-next=s;p=s;s-next=NULL;void List() /输出链表内容 Lstu p;int i=0; p=head; if(p=NULL)printf(”Sorry,Its a Empty Listn");elseprintf(”nnt-n"

16、;);printf(”t%5s5s -10s%-8s7s-10s10s%10sn”,"序号”,"班级","学号”,”姓名",”性别”,”语文成绩”,"数学成绩”,"英语成绩”);printf("t-n");while (p)i+;p>ID=i; printf(”t 4d5d -7d -8s7s-10。2f-10.2f%-10。2fn",pID,p>cla,pnum,pname,p-sex,p-chinese,pmath,penglish); printf("t-n"

17、;); p=p->next; void list() /输出链表所有内容 Lstu p;int i=0; p=head; if(p=NULL)printf("Sorry,Its a Empty Listn");elseprintf(”n -n”);printf(” 5s5s 7s -8s%-7s10s10s10s%8s%8sn”,”序号”,”班级”,”学号”,”姓名","性别”,”语文成绩","数学成绩”,"英语成绩","总分",”平均分”);printf(" -n”);whil

18、e (p)i+;pID=i; printf(” 4d6d-12d%8s%-7s-10。2f10。2f%-10.2f-8。2f-8。2fn”,pID,p>cla,p>num,p->name,psex, pchinese,p->math,p->english,psum,p-ave); printf(” -n”); p=pnext; void save() /文件保存 FILE *fp; Lstu p; p=head; if(fp=fopen(”初始值二进制。txt”,”wb”))=NULL) printf(”Cannot open the file ”); exit(

19、0); while(p) fwrite(p,sizeof(Lstu),1,fp); p=p-next; fclose(fp);void save1() /文件保存 FILE fp; Lstu p; p=head; if(fp=fopen("初始值二进制备用。txt",”wb”)=NULL) printf(”Cannot open the file ”); exit(0); while(p) fwrite(p,sizeof(Lstu),1,fp); p=pnext; fclose(fp);void read() /文件读取 FILE fp; Lstu p,p1; if(fp=

20、fopen(”初始值二进制。txt”,”rb"))=NULL) printf("Cannot open the filen”); exit(0); head=(Lstu)malloc(sizeof(Lstu); p1=head; while(!feof(fp) p=(Lstu )malloc(sizeof(Lstu)); if(fread(p,sizeof(Lstu),1,fp)=1) p1next=p; p1=p1>next; head=headnext;fclose(fp);void read1() /文件读取 FILE fp; Lstu *p,p1; if(fp

21、=fopen(”初始值二进制备用。txt”,"rb"))=NULL) printf("Cannot open the filen”); exit(0); head=(Lstu*)malloc(sizeof(Lstu)); p1=head; while(!feof(fp)) p=(Lstu *)malloc(sizeof(Lstu)); if(fread(p,sizeof(Lstu),1,fp)=1) p1-next=p; p1=p1>next; head=head-next;fclose(fp);void SAVE() /保存到可浏览文件 FILE *fp;

22、 Lstu p;int i=0; p=head; if(fp=fopen(”初始值可浏览文件。txt”,”w+”)=NULL) printf("Cannot open the file "); exit(0); fprintf(fp,”nnt-n”); fprintf(fp,”t5s-5s 10s8s%-7s-10s10s10sn",”序号",”班级”,”学号”,”姓名”,”性别”,”语文成绩”,”数学成绩",”英语成绩”); fprintf(fp,”t-nn”);while(p) i+;pID=i; fprintf(fp,"t -4

23、d-5d -7d 8s7s-10。2f%10。2f%-10.2fn”,pID,pcla,p-num,pname, psex,p->chinese,p-math,p-english); fprintf(fp,”t-n"); p=pnext; fclose(fp);void SAVE1() /保存到可浏览文件 FILE fp;char filename20; Lstu *p;int i=0; p=head; printf(”请输入保存到可浏览文件的文件名: "); scanf("s”,filename); if((fp=fopen(filename,”w+”)=

24、NULL) printf(”Cannot open the file "); exit(0); fprintf(fp,”n -n”); fprintf(fp," 5s-5s 7s 8s7s%-10s10s10s%8s%-8sn”,”序号”,"班级”,”学号”,"姓名","性别",”语文成绩",”数学成绩”,"英语成绩","总分",”平均分"); fprintf(fp,” -n”);while(p) i+;p-ID=i; fprintf(fp,” -4d-5d %7d

25、 8s%-7s10。2f10。2f-10。2f8.2f8。2fn”,p>ID,pcla,pnum,pname,psex, pchinese,p->math,p>english,p-sum,p-ave); fprintf(fp,”-n”); p=p->next; fclose(fp);void sort_data_copy(Lstu p,Lstu s) /交换排序时的值int cla1;cla1=pcla;p-cla=scla;s-cla=cla1;long num1;num1=p-num;p->num=s-num;snum=num1;char name120;st

26、rcpy(name1,p>name);strcpy(pname,s-name);strcpy(s-name,name1);char sex120;strcpy(sex1,p-sex);strcpy(p->sex,ssex);strcpy(ssex,sex1);float chinese1;chinese1=pchinese;p->chinese=schinese;s-chinese=chinese1;float math1;math1=pmath;pmath=smath;smath=math1;float english1;english1=penglish;penglish

27、=senglish;s>english=english1;float sum1;sum1=psum;psum=s-sum;ssum=sum1;float ave1;ave1=p-ave;p>ave=s-ave;save=ave1;void sort() /对初始成绩进行排序Lstu *p,s;int n;char a;read();p=head;if(p=NULL)printf(”Sorry,Its a Empty Listn”);printf(”n按Enter键继续n”);a=getch();elsewhile(1)system(”cls");printf("

28、n排序前结果为:n”);read();list(); printf(”t =*=*=*=*=*=按学号排序(1)n"); printf(”t =*=*=*=*=按语文成绩排序(2)n”);printf("t =*=*=*=*=按数学成绩排序(3)n");printf(”t *=*=按英语成绩排序(4)n"); printf(”t =*=*=*=按平均分排序(5)n");printf("t =*=*=回主菜单(0)nn”);printf(”t请输入选择: ”); scanf("d",n); for(p=head;pn

29、ext!=NULL;p=pnext)for(s=p-next;s!=NULL;s=snext) switch(n) case 1: if(p->num>snum)sort_data_copy(p,s);break;case 2: if(pchinese<s->chinese)sort_data_copy(p,s);break;case 3: if(pmath<s>math)sort_data_copy(p,s);break;case 4: if(p->englishs-english)sort_data_copy(p,s);break;case 5:

30、if(p>ave>save)sort_data_copy(p,s);break;case 0: break;default : printf(”chooe error!”);break;if(n=0)printf("n按Enter键回主菜单n”);a=getch();break;elseprintf("排序后结果为:n”);list();SAVE1();printf("n按Enter键继续n");a=getch();void sort1() /对所有数据进行排序Lstu *p,*s;int n;char a;read1();p=head;if

31、(p=NULL)printf(”Sorry,Its a Empty Listn");printf(”n按Enter键继续n");a=getch();elsewhile(1)system(”cls");printf(”n排序前结果为:n”);read1();list(); printf("t *=*=*=*=按学号排序(1)n”); printf(”t *=*=按语文成绩排序(2)n”);printf("t =*=*=*=*=*=按数学成绩排序(3)n");printf("t *=*=*=*=按英语成绩排序(4)n”); pr

32、intf(”t =*=*=按平均分排序(5)n");printf(”t *=*=*=*=回主菜单(0)nn”);printf(”t请输入选择: ”); scanf(”d",&n); for(p=head;pnext!=NULL;p=p->next)for(s=p>next;s!=NULL;s=s-next) switch(n) case 1: if(p-num>s>num)sort_data_copy(p,s);break;case 2: if(pchinese<schinese)sort_data_copy(p,s);break;ca

33、se 3: if(p>maths-math)sort_data_copy(p,s);break;case 4: if(penglish<s-english)sort_data_copy(p,s);break;case 5: if(pavesave)sort_data_copy(p,s);break;case 0: break;default : printf(”chooe error!");break;if(n=0)printf(”n按Enter键回主菜单n”);a=getch();break;elseprintf("排序后结果为:n");list()

34、;SAVE1();printf("n按Enter键继续n");a=getch();void search_print(Lstu *p) /输出查找信息printf("t-n");printf("t%-5s %7s %8s7s-10s-10s%-10sn",”班级”,”学号","姓名”,”性别”,”语文成绩”,"数学成绩”,”英语成绩”);printf("t-n");printf(”t%5d %-7d 8s%7s10。2f10。2f10。2fn",p->cla,pnum,

35、p>name,p-sex,p-chinese,p>math,penglish);printf(”t-n”);void search_choose() /选择按分数段查找方式Lstu *p;int n,i=1,flag=0;float a,b;p=head;printf("t*=*=*=*=*=*=按语文分数段查找(1)n");printf(”t=*=*=*=按数学分数段查找(2)n");printf(”t=*=*=*=按英语分数段查找(3)nn");printf(”t请输入选择: ”);scanf("%d",n);prin

36、tf(”请输入分数下限(包括输入的分数): "); scanf("f”,a);printf("请输入分数上限(包括输入的分数): ”);scanf(”f",&b); switch(n) case 1: while(p) if((pchinese)>=a&(pchinese)<=b) flag=1; p=pnext; if(flag=0) printf(”没有此分数段的同学!n”); elseprintf("您所查找的同学信息如下:n”); printf(”t-n”); printf(”t%5s %7s 8s%7s10

37、s%10s10sn”,”班级",”学号”,”姓名",”性别",”语文成绩”,”数学成绩”,"英语成绩”);p=head;printf("t-n”); while(p) if((p>chinese)>=a(pchinese)<=b) printf("t5d %-7d %8s-7s-10.2f10。2f-10。2fn",pcla,p>num,p>name,psex,pchinese,pmath,p-english); printf("t-n”); p=p-next; break;case

38、2: while(p) if(p-chinese)=a&(pmath)=b) flag=1; p=p>next; if(flag=0) printf(”没有此分数段的同学!n”); elseprintf("您所查找的同学信息如下:n”); printf(”t-n"); printf(”t%-5s -7s 8s7s%10s10s10sn”,”班级”,"学号",”姓名”,"性别",”语文成绩”,”数学成绩”,”英语成绩”);printf(”t-n”);p=head; while(p) if(p-chinese)>=a&

39、amp;(p-math)=b) printf(”t5d -7d %8s7s10。2f10。2f%10。2fn”,pcla,pnum,pname,p->sex,pchinese,pmath,penglish); printf(”t-n”); p=p->next;break; case 3: while(p) if(p>chinese)>=a&(penglish)=b) flag=1; p=p-next; if(flag=0) printf(”没有此分数段的同学!n”); elseprintf(”您所查找的同学信息如下:n”); printf(”t-n”); pri

40、ntf(”t%-5s -7s 8s7s10s10s%10sn”,”班级",”学号”,"姓名”,”性别”,”语文成绩”,”数学成绩”,”英语成绩");printf("t-n”);p=head; while(p) if(pchinese)=a(p->english)=b) printf("t-5d %7d 8s-7s%10。2f10.2f%10.2fn”,pcla,pnum,pname,p-sex,pchinese,pmath,p-english); printf(”t-n”); p=p->next;break; default : p

41、rintf("chooe error!”);break;void search() /查找Lstu p;int n;long m;char str20;p=head;if(p=NULL)printf(”Sorry,It's a Empty Listn”);elseprintf(”nnt*=*=*=*=*=*=*=按学号查找(1)n”);printf("t=*=*=按姓名(2)n");printf(”t=*=*=*=*=*=分数段查找(3)nn”);printf(”t请输入选择: ”);scanf(”%d",n);switch(n) case 1:

42、 printf(”请输入学号: ”); scanf(”%ld",m); if(pnum=m) printf(”您所查找的同学信息如下:n”); search_print(p); else while(pnext!=NULL&p->next->num!=m)p=pnext; if(p>next=NULL)printf("It havent this numbern”); else printf(”您所查找的同学信息如下:n"); search_print(p-next);break;case 2: printf(”请输入姓名: ”); sc

43、anf("s",str); if(strcmp(p>name,str)=0) printf("您所查找的同学信息如下:n"); search_print(p); else while(p>next!=NULL&&strcmp(p-nextname,str)!=0)p=p-next; if(pnext=NULL)printf(”It haven't this namen”); else printf(”您所查找的同学信息如下:n”); search_print(p>next);break; case 3: sear

44、ch_choose();break; default : printf(”chooe error!”);break;void modify_choose(Lstu *p,int n) /选择修改方式Lstu *s;printf("t=*=*=*=*=*=*=*=修改语文成绩(1)n”);printf("t*=*=*=*=修改数学成绩(2)n”);printf(”t*=*=*=*=*=*=修改英语成绩(3)n”);printf(”t=*=*=*=*=修改所有成绩(4)n”);printf("t=*=*=*=*=*=回主菜单(0)nn");printf(”t请输入选择: ”);scanf(”d",n);s=(Lstu )malloc(sizeof(Lstu));switch(n) case 1: printf(”请输入新的语文成绩: "

温馨提示

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

评论

0/150

提交评论