学生成绩管理系统_第1页
学生成绩管理系统_第2页
学生成绩管理系统_第3页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、1 问题描述学生成绩管理系统学生成绩管理系统学生信息包括学期、学号、班级、姓名,和语文、数学、英语、计算机四门课成绩。并按班级、学期查询学生成绩, 并能录入、 修改,求学生平均成绩和总成绩, 输出不及格科目,按班级输出成绩单,按班级对学生成绩进行排序。2 系统分析2.1 题目 要求学生成绩管理系统设计学生成绩信息包括:学期, 学号, 班别,姓名,四门课程成绩 (语文、数学、英语和计算机 )。主要功能:(1)能按学期、按班级完成对学生成绩的录入、修改(2)能按班级统计学生的成绩, 求学生的总分及平均分, 设计并输出统计报表(3)能查询学生成绩,不及格科目及学生名单(4)能按班级输出学生的成绩单(

2、5)能按班级,按课程,对学生成绩进行排序。要求:使用二进制文件方式存储数据,系统以菜单方式工作2.2 算法设计1) 创建主菜单2) 实现学生成绩信息录入3) 实现学生成绩信息修改4) 实现学生成绩信息查询(a) 按学期、班级查询学生的成绩(b) 按学号查询学生的成绩(c) 查询不及格的科目和学生名单5) 实现学生成绩成绩统计(a) 按班级统计学生的总分、平均分(b) 按班级、课程对学生的总分进行排序6) 实现学生成绩信息浏览2.3 流程图2.4关键问题难点:指针p、函数。解决:head=NULL 无条件循环指针p指向新开辟的单元指针p是否为空是否输入学号p->num输出p->num

3、 是否为内存是否溢出输入姓名 p->name停止 for(i=0;i<3;i+)输入输入成绩返回 p->sum=s ;菜单 p->average=(float)s/3主函数:int main()新建函数:infor *in it()输入函数:infor *creat()显示函数 :struct infor *view(struct infor *head)删除函数:infor *delete(infor *head)按名字寻找函数:void lookup(infor *head)保存函数:void save(infor *head)按总分排序函数:infor *sort

4、(infor *head)计算总分和均分函数 :void zon g(struct infor *head)修改函:void change(struct infor *head)按学号排序函数:infor *index(infor *h)3系统实现3.1题目一(源代码)#in clude<stdio.h>#in clude<stdlib.h>#in clude <stri ng.h>#defi ne N 4struct inforint term;定义学期(1或2)/学号int clas;/定义班级(1或2班)int no;float chinese; /

5、定义四门成绩float english;float math;float computer;struct infor *link;int n=0 ;/*/ 函数功能 :创建链表,录入学生的相关信息,此函数返回一个指向链表头的指针/*struct infor *creat()struct infor *head=NULL,*p=NULL,*q=NULL;char c;fflush(stdin);printf(" 是否要输入信息 (y/n):");scanf("%c",&c);p=q=(struct infor *)malloc(sizeof(str

6、uct infor);q=head;while(p!=NULL&&c='y')n+;p=(struct infor *)malloc(sizeof(struct infor);printf(" 请输入要录入学生信息的学期 :");fflush(stdin);scanf("%d",&p->term); / 学期只能为 1 或 2 while(p->term!=1&&p->term!=2) getchar(); printf(" 输入错误 ! 请重新输入 :");

7、/ 若学期不 为 1 或 2 ,则输入有误 scanf("%d",&p->term);printf(" 请输入要录入学生成绩信息的班级 :");fflush(stdin); / 班级只能为1或2scanf("%d",&p->clas);while(p->clas!=1&&p->clas!=2)getchar();printf(" 输入错误 ! 请重新输入 :");scanf("%d",&p->clas);printf(&quo

8、t; 请输入该班的学生信息 !n");信息(包括学号、四门成绩)printf(" 请输入学生学号: ");fflush(stdin);scanf("%d",&p->no);printf(" 请输入学生姓名: ");fflush(stdin);scanf("%s",p->name);名printf(" 请输入语文成绩 (0-100):");scanf("%f",&p->chinese);printf(" 请输入数学成绩 (0

9、-100):");scanf("%f",&p->math);printf(" 请输入英语成绩 (0-100):");scanf("%f",&p->english);printf(" 请输入计算机成绩 (0-100):"); scanf("%f",&p->computer);if(n=1)head=p;else/ 输入学生/ 输入学生姓/ 输入四门成绩/ 创建新结点q->link=p;/ 链表结尾/ 链表返回头指/ 定义一个数组,存/ 设置

10、循环控制q=p;fflush(stdin);scanf("%c",&c);q->link=NULL;return(head);针/*/ 函数功能 :实现对学生信息的修改/*void change(struct infor *head)struct infor *p=head;char ch,m;char name9;储学生的姓名int num;if(p=NULL)printf("出错 !请先输入学生信息 !");while(1)n"); /输出要修改的信息printf("ttta、学号:n");printf(&

11、quot;tttb、姓名:n");printf("tttc、班级:n");printf("tttd 、成绩 :n");printf("ttt/ 清盘n");fflush(stdin);scanf("%c",&ch);if(ch='a')printf(" 你要修改的信息是 :学号 !n");/ 按姓名修改学号printf(" 请输入你要修改的学生姓名 :");scanf("%s",name);if (strcmp(name,

12、p->name)=0)新学号scanf("%d",&p->no);else printf(" 无法查找到该学生 !n");else if(ch='b')号修改该班级学生的信息printf(" 你要修改的信息是 :姓名 !n");printf(" 请输入你要修改的学生的学号 :");scanf("%d",&num);if(num=p->no)条件printf(" 请输入该学生的姓名 :");scanf("%s"

13、;,p->name);学生姓名/ 按学/ 输入学号,判断/ 输入要做修改的改班级的班级成绩else if(ch='c')printf(" 你要修改的信息是 : 班级 !n");printf(" 请输入你要修改的学生的学号 :");scanf("%d",&num);if(num=p->no)printf(" 请输入该学生的班级 :");scanf("%d",p->clas);else printf(" 无法查找到该学生 !n");els

14、e if(ch='d')printf(" 你要修改的信息是 :成绩 !n");/ 输入要做修改/ 找不到信息/ 按学号修改scanf("%d",&num);if(num=p->no)/ 输入学号scanf("%f",p->chinese);printf(" 请输入该学生新的数学成绩 :");scanf("%f",p->math);门成绩printf(" 请输入该学生新的英语成绩 :");scanf("%f",p-&

15、gt;english);printf(" 请输入该学生新的计算机成绩 :");scanf("%f",p->computer);/ 找不到信息/ 判断,是否else printf(" 无法查找该学生的信息 !n");else printf(" 出错 !n");p=p->link;printf(" 是否还要继续修改信息 (y/n):");还要修改信息 ,跳出循环fflush(stdin);if(m=getchar()='n')break;/*/ 函数功能:按照学号查询学生

16、信息/*void checkno(struct infor *head) / 按 学号查询学生的成绩struct infor *p;p=head;int num,i=0;printf(" 请输入你要查询的学生学号 :n");scanf("%d",&num);if(num=p->no) / 输入学号,判断条件");printf("printf("t 学期t学号t班别t姓名t语文t数学t英语t计算机tn");printf("%dt",p->term);printf("%

17、dt",p->clas); printf("%st",p->name); printf("%1ft",p->chinese); printf("%1ft",p->math); printf("%1ft",p->english); printf("%1ft",p->computer); i=2;/ 输出学生的班级/ 输出四门成绩if(i=0)printf(" 没找到该学生的信息 !"); / 找不到信息void checkclass

18、(struct infor *head)int banji,i=0;struct infor *p=head;while(p!=NULL)级查询学生的成绩/ 按班scanf("%d",&banji);if(banji=p->clas)printf("");printf("t学期t学号t班别t姓名t语文t数学t英语t计算机tn");printf("n");printf("%dt",p->term);/ 输出要查询成绩的班级printf("%dt",p->

19、;no);/ 输出查询成绩的学生学号printf("%dt",p->clas);/ 输出要查询成绩的班级printf("%st",p->name);/ 输出要查询成绩的学生姓名printf("%1ft",p->chinese);printf("%1ft",p->math);/ 输出四门成绩printf("%1ft",p->english);printf("n");i=2;p=p->link;if(i=0)printf(" 没找到学

20、生信息 !");找不到信息/ 输出错误,void checkterm(struct infor *head)数int xueqi,i=0;struct infor *p=head;while(p!=NULL)控制询学生的成绩printf(" 请输入你要查询成绩的学期 :");scanf("%d",&xueqi);if(xueqi=p->term)/ 定义按学期查找信息的函/ 设置循环/ 按 学期 查printf("");printf("t 学期t学号t班别t姓名t语文t数学t英语t计算机tn"

21、;);printf("printf("%dt",p->term);printf("%dt",p->no);printf("%dt",p->clas);printf("%st",p->name);printf("%1ft",p->chinese);printf("%1ft",p->math);printf("%1ft",p->english);printf("%1ft",p->co

22、mputer);printf("n");i=2;p=p->link;if(i=0)printf(" 没找到学生信息 !");n");/ 输出姓名/ 输出四门成绩/ 找不到信息/ 定义一个函数 ,查找不及格的void norich(struct infor *head)学生struct infor *p;p=head;int num,i=0;float toa;printf(" 请输入要查询成绩的学生学号 :");scanf("%d",&num);if(num=p->no)/ 查询学生的

23、成printf(" 正在查询该学生的成绩 ,请稍侯 >>>>>n"); 绩,输出不及格的科目while(p!=NULL)if(p->chinese<60)printf(" 该学生的语文不及格 !n");printf("n");/ 输出该学生的不及格科/ 对各门成绩if(p->math<60)目printf(" 该学生的数学不及格 !n");printf("n");i+;if(p->english<60)printf("

24、该学生的英语不及格 !n");进行判断printf("n");printf("n");i+;if(p->computer<60)printf(" 该学生的计算机不及格 !n");printf("n");if(i>0)printf("%s 同 学 共 有 %d 门 成 绩 不 及 格 !n 学 号 是:dn",p_ >n ame,i,p->no);printf("n");toa=p->chinese+p->math+p->

25、;english+p->computer;if(toa<240)printf(" 不及格学生名单为 :%s",p->name);/ 输出不及格的学生名单p=p->link;/ 定义一个查询学生信息的函数,调/ 设置循环控制条件void search(struct infor *head)用各子函数,进行查询char k,ch;struct infor *p=head;while(p!=NULL)/ 输出查询方式printf("ttt你要选择何种方式查询成绩 !n");printf("ttta、学号:n");pr

26、intf("tttb 、班级 :n");printf("tttc、学期:n");printf("tttd 、不及格的学生n");n");fflush(stdin);scanf("%c",&k);switch(k)/ 调用学号函数case 'a':checkno(head);break;case 'b':checkclass(head);break;case 'c':checkterm(head);break;case 'd':nori

27、ch(head);break;printf("n");printf(" 是否还要继续查询学生的信息 (y/n):");fflush(stdin);返回主菜单/*/ 函数功能 :对学生成绩进行统计,按班级求总分及平均分 /*void zong(struct infor *head) / 对该班级的学生成绩求总分、 平均分float toa=0,ave=0;int i=0;struct infor *p=head;while(p!=NULL)toa=p->chinese+p->math+p->english+p->computer;/

28、 输出学生的总分和平均分成绩ave=toa/N;printf(" 第 %d 个学生的总分为 :%1f!n",i+1,toa);printf("n");printf(" 第 %d 个学生的平均分 :%1f!n",i+1,ave);printf("n");printf(" 已经统计了第 %d 个学生的成绩 !n",i+1); / 统 计完毕printf("n");i+;p=p->link; / 指向下一 个结点void paixu(struct infor *head) /

29、 对该班级的学生成绩进行排序int i=0,j;float a10,t; / 把结点信息输入到数组,然后排序struct infor *p=head;while(p!=NULL)ai=p->chinese+p->math+p->computer+p->english;p=p->link;for(j=0;j<4;j+)for(i=0;i<3-j;i+)if(ai<ai+1)t=ai;ai=ai+1;ai+1=t;i+;for(i=0;i<4;i+)printf("%f ",ai);/ 用数组排序/ 输出排序后的总分void

30、 deal(struct infor * head)struct infor *p;p=head;int clas;/ 按学号和班级对学生成绩进行统计char ch1,ch2;/ 输入要统计成绩的班/ 设置循环控制条件/ 调用总分函数/ 清盘/ 调用排序函数printf(" 请输入要统计成绩的班级 (1 或 2):");级scanf("%d",&clas);printf(" 正在统计该班级学生的总分 ,请稍侯 !n");while(1)zong(p);printf(" 是否还要继续统计其他学生的成绩 (y/n):&q

31、uot;);fflush(stdin);if(ch1=getchar()='n')break;printf(" 是否要对该班的学生成绩进行排序 (y/n):");fflush(stdin);if(ch2=getchar()!='n')printf(" 正在对该班学生的总分进行排序,请稍侯 !n");paixu(p);printf("n");/*/ 函数功能:信息浏览,查看库中全部记录*struct infor *view(struct infor *head)struct infor *p;p=head

32、;printf("n");printf(”学期t学号t班别t姓名t语文t数学t英语t计算机tn");printf("n");while(p!=NULL)printf("%dt",p->term); printf("%dt",p->no);printf("%dt",p->clas); printf("%st",p->name); printf("%ft",p->chinese);printf("%1ft&qu

33、ot;,p->math);printf("%1ft",p->english); printf("%1ft",p->computer);p=p->link;printf("n");/ 查询学期/ 查询学号/ 查询姓名/ 查询四门成绩n");printf("return(head);/*/ 将信息存入磁盘文件 e:xys.txt ,该文件是一个文本文件/*void save(struct infor *head)FILE *fp;/ 定义文件指针struct infor *p=head;fp=f

34、open("d:xys.txt","w+");while(p!=NULL)fwrite(p,sizeof(struct infor),1,fp);p=p->link;fclose(fp); / 关闭磁盘文件 printf(" 数据存盘成功 !n");/*'*void main() struct infor *head;/ 创int sel;do建菜单printf("ttn");printf("tt 学生成绩信息管理系统 n");printf("ttn");pri

35、ntf("ttt1信息导入n");printf("ttt2信息修改n");printf("ttt3信息查询n");printf("ttt4信息浏览n");printf("ttt5统计成绩n");printf("ttn");printf("ttt6 数据存盘 n");printf("ttn");printf("ttt0 退出系统 n");printf("ttn");printf(" 请选择

36、 :");scanf("%d",&sel);switch(sel)/ 调用函数case 1:head=creat();break;case 2:change(head);break;case 3:search(head);break;case 4:view(head);break;case 5:deal(head);break;case 6:save(head);break;case 8:printf("nnttttA-A,再见!nnn");break;while(sel!=0);4 系统测试4.1 如何设计测试数据先输入学期、 班级,

37、再输入学生信息 (学号、语文、数学、英语、 计算机成绩(限定在 100 以内);再查询成绩可以按学号、 班级、 学期查询;同样修改可以按学号、班级、学期修改4.2 系统测试过程(1) 测试数据 1 及测试结果4 系统测试4.1 如何设计测试数据先输入学生班级、学期,再输入学生信息(学号、姓名、语文、数学、计算 机成绩(限定在 100 分以内);可以按学期、班级、学号查询成绩;同样也 可以按学期、班级、学号修改成绩;能求总分和平均分。4.2 系统测试过程( 1) 测试数据 1 及测试结果登陆界面:学生威缆倩息管理系绩入K谊龙瓷盘 导樓查洌成# 威威宓威统W M12 3 4 5 £输入信

38、息:!凶学主靖信息昶系统f*hnrvrwwrwiruirMTKmwAr«u«vr>mnim<wwvKMr«WM*A_rw«wwMVKMr«WYU»hm:fc数曙存盘ATMUlUiflJ AEAJ FUJFVJU AfAJJUrJ AAF JV A1W AJUMUAJTJ AJmTJMUIkAlk!- C:Documents and Settings'. Ad nil mstrd tor生刺8 管理条给 e“E町%入改询 导修g浏成 注習SS纵卄 戍康戊康筑 1 2 3 4- S9的信 ¥):> &g

39、t;:自»書'ULJ连凹盹 詹日成詹口加服-1-1 <y土生生:<Q<0個t目 insHHMr名 绩廉 信入入的学成型 入录書4±J文t =1输要m卷辜语数希M 择麦必IA入lAfAJAIAiA樣 请是请请请请请请请请输入成绩: k|PugT LIM)ajinentf ond 5etthgsAdministrator -S 而 l 学牛盛蒔管齐丟疔期丹rfsnjy的信>:自心绩自心 I I加信威信01胡7 7 <y4生注 力®i2ff- z-期的>:關>:的信?00zn息绩息T<03 信威信H1895 -9 ?d测d 1-150J >30J 7J19-、 < ± -± £ - ; I < < 一上-: : 息HHmlp名绩绩绩成信赛HH

温馨提示

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

评论

0/150

提交评论