[C语言]学生成绩管理系统_第1页
[C语言]学生成绩管理系统_第2页
[C语言]学生成绩管理系统_第3页
[C语言]学生成绩管理系统_第4页
[C语言]学生成绩管理系统_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、一 设计内容1. 需求分析1.1项目需求概述 通过此系统可以实现如下功能:1) 数据信息的录入2) 学生、课程及成绩全部显示3) 查询功能4) 成绩修改及删除5) 成绩统计6) 退出系统功能要求及说明 1、数据信息的录入1)学生基本信息录入:学号不允许重复 录入信息保存在student文件中 2)课程信息的录入:录入信息保存在course文件中3)学生成绩录入:成绩信息保存在score文件中录入学生成绩信息时,综合成绩根据条件自动运算。运算方法:如果录入课程为公共课,则 综合成绩=平时成绩*30%+卷面成绩*70%如果录入课程为专业课,则 综合成绩=平时成绩*40%+卷面成绩*70%.说明:课

2、号S开头表示专业课,P开头表示公共基础课。2、学生、课程及成绩显示:输出所有的学生信息及成绩信息3、查询功能1)学生信息查询输入一个学号或姓名(可实现选择),查出此学生的基本信息并显示输出。输入性别、所在系名,可查询所有男生(女生)、本系所有的学生的基本信息并显示输出。 2)成绩查询:输入一个学号时,查询出此学生的所有课程成绩信息并以列表显示,显示内容包括:学号、课程名、平时成绩、卷面成绩、综合成绩输入一个学生的姓名时,查询出此学生的所有课程成绩信息并以列表显示,显示内容包括:学号、姓名、性别、所在系、课程名、综合成绩输入一门课程名称,可查询出所有选修这门课程的学生成绩。 4、成绩修改(要求先

3、输入密码)在修改成绩之前必须输入正确的用户密码才能进入成绩修改菜单进行操作。5、删除功能当在student.txt中删除一个学生时,自动地在score.txt中删除此人所有信息。6、成绩统计显示每门课程成绩最高的学生的基本信息显示每门课程的平均成绩显示每门课程不及格(综合成绩小于60分)的学生信息,并统计出人数。7、退出系统2. 概要设计功能模块图: 3. 详细设计 2.1 系统流程描述 2.2 主要数据变量结构定义 本系统主要定义了三个结构体,分别用于存储学生基本信息(struct student),课程信息(struct course),学生成绩(struct score) 其中,学生基本

4、信息和学生成绩分别定义了两个结构体变量(struct student inf,struct student inf230和struct score infs,struct score infs230) 具体的结构体定义如下: struct student/定义结构体名为student的结构变量inf char num10;/学生学号 char name10;/学生姓名 char sex10;/学生性别 char age10;/学生年龄 char dep10;/department,所在系;struct student inf;struct student inf230;struct cours

5、e/定义结构体名为course的结构变量infc char snum10;/课程编号 char sname10;/课程名称 char teacher10;/教课教师;struct course infc;struct score/定义结构体名为score的结构变量infs char num10;/学生学号 char snum10;/课程编号 float pscore;/平时成绩 float lscore;/卷面成绩 float sscore;/综合成绩;struct score infs;struct score infs230; 2.3 系统所有主要功能的主要函数的设计流程图和代码 1)主菜

6、单 int a;printf(-欢迎进入学生成绩管理系统-n);printf( n);printf( 1.教学信息登入(请输入1) n);printf( 2.查询学生信息(请输入2) n);printf( 3.修改学生信息(请输入3) n); printf( 4.学生信息统计(请输入4) n);printf( 5.显示全部学生信息(请输入5) n);printf( 6.删除学生信息(请输入6) n);printf( n);printf(-退出本系统(请输入7)-n);scanf(%d,&a);switch(a)/选择函数进行调用case 1:EI(); break; case 2:SF();b

7、reak;case 3: SR();break; case 4:SC();break; case 5:SS();break;case 6:SD();break;case 7:exit();break; default:printf(您输入有误,请重新输入n);MM();break; 2)信息登入函数(以登入学生基本信息为例) char x;FILE *fp; fp=fopen(student.txt,a); x=y;/fprintf(fp,学号 姓名 性别 年龄 所在系)while(x=y|x=Y)/判断是否继续循环输入printf(请输入学生学号n);scanf(%s,&inf.num);p

8、rintf(请输入学生姓名n);scanf(%s,&);printf(请输入学生性别n);scanf(%s,&inf.sex);printf(请输入学生年龄n);scanf(%s,&inf.age);printf(请输入学生所在系n);scanf(%s,&inf.dep);fprintf(fp,%-6s%-7s%-6s%-6s%-6sn,inf.num,,inf.sex,inf.age,inf.dep);printf(继续输入吗?是(y/Y)否(n/N)n);scanf(%S,&x);fclose(fp);printf(返回上一级菜单吗?是(y/Y),不(n/N

9、)n); char y;scanf(%s,&y); if(y=y|y=Y)EI();elseexit(); 3)信息查询函数(以根据学号或姓名进行查询的函数为例)printf(选择根据学号查询请输入1,选择根据姓名查询请输入2n); int a;int flag=0;FILE *op;FILE *o; scanf(%d,&a);int i=0; int j=0;switch(a)case 1:char n10;n2=0;op=fopen(student.txt,r);printf(请输入学号n); scanf(%s,&n);while (!feof(op)fscanf(op,%s,&inf.n

10、um);fscanf(op,%s,&);fscanf(op,%s,&inf.sex);fscanf(op,%s,&inf.age);fscanf(op,%s,&inf.dep);if (strcmp(n,inf.num)=0) if (flag=0)printf(学号 姓名 性别 年龄 所在系n);printf(%-6s%-7s%-6s%-6s%-6sn,inf.num,,inf.sex,inf.age,inf.dep);flag=1;i+; fclose(op);if (i=0)printf(n 文件中无记录!n);elseif (flag=0)printf(

11、 文件中无此人,请重新输入n);SFIa();printf(返回上一级菜单吗?是(y/Y),不(n/N)n);char y;scanf(%s,&y);if(y=y|y=Y)SFI();elseexit();break;case 2:char m10;printf(请输入姓名n); scanf(%s,&m);o=fopen(student.txt,r);while (!feof(o)fscanf(o,%s,&inf.num);fscanf(o,%s,&);fscanf(o,%s,&inf.sex);fscanf(o,%s,&inf.age);fscanf(o,%s,&inf.de

12、p);if (strcmp(m,)=0) if (flag=0)printf(学号 姓名 性别 年龄 所在系n);printf(%-6s%-7s%-6s%-6s%-6sn,inf.num,,inf.sex,inf.age,inf.dep);flag=1; j+; fclose(o);if (j=0)printf(n 文件中无记录!n);elseif (flag=0)printf( 文件中无此人,请重新输入n);SFIa();printf(返回上一级菜单吗?是(y/Y),不(n/N)n);char x;scanf(%s,&x);if(x=y|x=Y)SFI();e

13、lseexit();break;default:printf(您输入错误,请重新输入n);SFIa();break; 4)登陆界面函数(输入用户名和密码,修改成绩前需使用)printf(-学生成绩修改界面-n);printf( n);printf( 输入用户名及密码(请输入1) n);printf( n);printf(-返回主菜单(请输入2)-n);int a;char username10;char password10;char b10=admin; char c10=730;scanf(%d,&a);switch(a)case 1:printf(请输入用户名n);scanf(%s,us

14、ername);printf(请输入密码n);scanf(%s,password);if (strcmp(b,username)=0&strcmp(c,password)=0)/printf(输入正确n);sr();/else if(strcmp(b,username)!=0)printf(用户名错误,请重新输入n);SR();else if(strcmp(c,password)!=0)printf(密码错误,请重新输入n);SR();break;case 2:MM();break;default:printf(输入错误,请您重新输入n);SR();break; 5)信息修改函数char nu

15、m10;num2=0;char snum10;int flag1=0;int flag2=0;float ps;float ls;float ss;printf(请输入您所要修改学生的学号n);scanf(%s,num);FILE *op;FILE *fp;op=fopen(score.txt,r);fp=fopen(score.txt,r+);for(;) fscanf(op,%s,&infs.num); fscanf(op,%s,&infs.snum); fscanf(op,%s,&infs.pscore); fscanf(op,%s,&infs.lscore); fscanf(op,%s

16、,&infs.sscore); if (feof(op) break; if (strcmp(num,infs.num)=0) flag1=1; printf(请输入您所要修改的课程编号n); scanf(%s,snum); if(strcmp(snum,infs.snum)=0) flag2=1; printf(请输入修改后的平时成绩n); scanf(%f,&ps); printf(请输入修改后的卷面成绩n); scanf(%f,&ls); infs.pscore=ps; infs.lscore=ls; if(snum0=P) ss=0.7*ls+0.3*ps;/infs.sscore=0

17、.7*infs.lscore+0.3*infs.pscore; infs.sscore=ss;fp=fopen(score.txt,r+); fprintf(fp,%-6s%-7s%-10.2f%-10.2f%-10.2fn,infs.num,infs.snum,infs.pscore,infs.lscore,infs.sscore); else if(snum0=S) ss=0.6*ls+0.4*ps;/infs.sscore=0.6*infs.lscore+0.4*infs.pscore; infs.sscore=ss;fp=fopen(score.txt,r+); fprintf(fp,

18、%-6s%-7s%-10.2f%-10.2f%-10.2fn,infs.num,infs.snum,infs.pscore,infs.lscore,infs.sscore); else printf(您输入错误请重新输入n); SCI(); fclose(op);fclose(fp);if(flag1=0)printf(您输入的学号错误,请重新输入n);sr();if(flag2=0)printf(您输入的课程编号错误,请重新输入n);sr();printf(返回上一级菜单吗?是(y/Y),不(n/N)n);char p;scanf(%s,&p);if(p=y|p=Y)SR();elseexi

19、t(); 6)统计课程的平均成绩printf(请输入想要统计平均分的课程的课程编号n);scanf(%s,snum);for(;)fscanf(op,%s,&infs.num); fscanf(op,%s,&infs.snum); fscanf(op,%f,&infs.pscore); fscanf(op,%f,&infs.lscore); fscanf(op,%f,&infs.sscore);if (feof(op) break;if (strcmp(snum,infs.snum)=0)i+;score=score+infs.sscore;flag=1;if(flag=1)score=sco

20、re/i; printf(该课程的平均分如下:n); printf(%0.2fn,score);printf(返回上一级菜单吗?是(y/Y),不(n/N)n); char p; scanf(%s,&p); if(p=y|p=Y) MM(); else exit();else if(flag=0)printf(您输入错误,请重新输入n);SC();fclose(op); 7)统计不及格的人数及分数printf(请输入想要统计不及格人数的课程的课程编号n);scanf(%s,snum);for(;)fscanf(op,%s,&infs.num); fscanf(op,%s,&infs.snum);

21、 fscanf(op,%f,&infs.pscore); fscanf(op,%f,&infs.lscore); fscanf(op,%f,&infs.sscore);if (feof(op) break;if (strcmp(snum,infs.snum)=0)if(infs.sscore60) i+; printf(学号 课号 平时成绩 卷面成绩 综合成绩n);printf(%-6s%-7s%-10.2f%-10.2f%-10.2fn,infs.num,infs.snum,infs.pscore,infs.lscore,infs.sscore); flag2=1;flag=1;if(fla

22、g2=1) printf(该课程未通过的人数如下:n); printf(%dn,i);printf(返回上一级菜单吗?是(y/Y),不(n/N)n); char q; scanf(%s,&q); if(q=y|q=Y) MM(); else exit();else if(flag2=0)printf(您所选择的课程无未通过的人n);printf(返回上一级菜单吗?是(y/Y),不(n/N)n); char r; scanf(%s,&r); if(r=y|r=Y) MM(); else exit();if(flag=0)printf(您输入的课程编号错误,请重新输入n);SC();fclose(

23、op); 8)统计最高分printf(请输入所要查找最高分的科目n); scanf(%s,snum);for(;)fscanf(op,%s,&infs.num); fscanf(op,%s,&infs.snum); fscanf(op,%f,&infs.pscore); fscanf(op,%f,&infs.lscore); fscanf(op,%f,&infs.sscore);if (feof(op) break;if (strcmp(snum,infs.snum)=0)strcpy(infs2l.num,infs.num); strcpy(infs2l.snum,infs.snum); i

24、nfs2l.pscore=infs.pscore; infs2l.lscore=infs.lscore; infs2l.sscore=infs.sscore;for(j=0;)if(kinfs2j.sscore)k=infs2j.sscore;if(feof(op) break;j+;printf(%.2fn,k);printf(返回上一级菜单吗?是(y/Y),不(n/N)n); char v; scanf(%s,&v); if(v=y|v=Y) EI(); else exit(); 9)输出全部信息(包括学生基本信息,课程信息,学生成绩)printf(下面开始输出全部学生信息n);FILE

25、*op;op=fopen(student.txt,r);int x=0;for(x=0;x1;) fscanf(op,%s,&inf.num); fscanf(op,%s,&); fscanf(op,%s,&inf.sex); fscanf(op,%s,&inf.age); fscanf(op,%s,&inf.dep); if (feof(op) break; printf(%-6s%-7s%-6s%-6s%-6sn,inf.num,,inf.sex,inf.age,inf.dep);fclose(op);printf(下面开始输出全部课程信息n);FILE *

26、fp;fp=fopen(course.txt,r);printf(课号 课名 任课教师n);for(x=0;x1;) fscanf(fp,%s,&infc.snum); fscanf(fp,%s,&infc.sname); fscanf(fp,%s,&infc.teacher); if (feof(fp) break; printf(%-6s%-14s%-8s%n,infc.snum,infc.sname,infc.teacher);fclose(fp);printf(下面开始输出全部学生成绩n);FILE *o;o=fopen(score.txt,r);for(x=0;x1;) fscanf

27、(o,%s,&infs.num); fscanf(o,%s,&infs.snum); fscanf(o,%f,&infs.pscore);fscanf(o,%f,&infs.lscore);fscanf(o,%f,&infs.sscore); if (feof(o) break;printf(学号 课号 平时成绩 卷面成绩 综合成绩n); printf(%-6s%-7s%-10.2f%-10.2f%-10.2fn,infs.num,infs.snum,infs.pscore,infs.lscore,infs.sscore);fclose(o);printf(返回主菜单吗?是(y/Y),不(n/

28、N)n); char y;scanf(%s,&y); if(y=y|y=Y)MM();elseexit(); 10)删除函数int flag=0;FILE *op;FILE *fp;FILE *o;FILE *f;int i=0; int j=0;int l;int m;/int x;int k=0;int k1=0;int q=0;char n10; n2=0;op=fopen(student.txt,r);printf(请输入学号n); scanf(%s,&n);for(;)fscanf(op,%s,&inf.num);fscanf(op,%s,&);fscanf(op,%

29、s,&inf.sex);fscanf(op,%s,&inf.age);fscanf(op,%s,&inf.dep);if(strcmp(n,inf.num) strcpy(inf2k.num,inf.num);strcpy(,);strcpy(inf2k.sex,inf.sex);strcpy(inf2k.age,inf.age);strcpy(inf2k.dep,inf.dep);k+;/else/flag=1;i+;if (feof(op) break;fclose(op);fp=fopen(student.txt,w+);if (i=0)printf(

30、n 文件中无记录!n);else if(flag=0)printf( 文件中无此人,请重新输入n);SD();else if(flag=1)for(l=0;l!=k;l+)fprintf(fp,%-6s%-7s%-6s%-6s%-6sn,inf2l.num,,inf2l.sex,inf2l.age,inf2l.dep);if(feof(fp) break;fclose(fp);o=fopen(score.txt,r);for(;)fscanf(o,%s,&infs.num);/fscanf(op,%c,&infs.s);fscanf(o,%s,&infs.snum);fsc

31、anf(o,%f,&infs.pscore);fscanf(o,%f,&infs.lscore);fscanf(o,%f,&infs.sscore);if (feof(o)break;if (strcmp(n,infs.num)strcpy(infs2k1.num,infs.num);/infs2k.s=infs.s;strcpy(infs2k1.snum,infs.snum);infs2k1.pscore=infs.pscore;infs2k1.lscore=infs.lscore;infs2k1.sscore=infs.sscore;k1+;fclose(o);f=fopen(score.txt,w+);for(m=0;m!=k1;m+)fprintf(f,%-6s%-7s%-10.2f%-10.2f%-10.2fn,infs2m.num,infs2m.snum,infs2m.pscore,infs2m.lscore,infs2m.sscore); if(feof(f) break;fclose(f);printf(返回主菜单吗?是(y/Y),不(n/N)n); char y;scanf(%s,&y); if(y

温馨提示

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

评论

0/150

提交评论