2022年学生成绩管理.pdf
学生成绩管理西北师范大学 xxxx 计算机与电子信息工程系课程设计报告书课程名称 : C语言程序设计专业: 计算机科学与技术( 网络应用与技术 ) 课题名称 : 学生成绩管理班级: 学号: 姓名: 指导教师 : 2014-2015 学年 第二学期学生成绩管理(难易程度 :中) 1.课程设计要求学习成绩管理系统的主要要求为: 1) 能按学期、按班级完成对学生成绩的录入、修改2) 能按班级统计学生的成绩, 求学生的总分及平均分3) 能查询学生成绩 , 不及格科目及学生名单精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 16 页 - - - - - - - - - - 学生成绩管理4) 能按班级输出学生的成绩单2.设计目的及意义课题的设计旨在训练我们的基本编程能力, 使我们熟悉 C语言图形模式下的编程。本程序中涉及结构体、数组、绘图等方面的知识。通过本程序的训练, 使我们能对 C 语言有一个更深刻的了解。开发一个学生成绩管理系统, 采用计算机对学生成绩进行管理。3.课题说明本系统主要用于对学生的成绩进行管理。通过本系统, 可以将各个学生的成绩记录输入到系统中 , 保存到文件 , 便于查阅与相关管理。此外, 该系统还能实现对学生成绩记录的显示 , 查询以及插入或删除学生的成绩记录等功能。4.功能模块图5.功能描述主要功能用来对学生的成绩进行收集与输入。在学生信息保存在系统中的前提下 , 成绩录入需要输入学生资料, 比如班级 , 学号, 姓名。在准确输入学生资料后, 就可以对该学生的各科成绩进行录入。该学生各科成绩输入成功后, 系统会提示就是否继续进行操作, 如果想继续输入学生成绩就输入y, 不想再输入学生成绩的话就输入n, 再输入 n 之后, 系统返回到主菜单。 输入学生资料就是得分学期来进行处理 , 执行一次该模块只能输入一个学期的学生信息。在此过程中每输入一个学生的信息 , 通过循环在输入完成时将学生个数返回给n,case1 中就就是利用 n=input(stud,n)这一赋值过程来执行该函数中的输入过程。输入完成后按任意键即可返回菜单。6.执行住流程图学生成绩管理系统输入学生资料输 出 学生成绩查找显示学生成绩按照姓名查找修改学习资料显示所有学生名单查找删除学生信息从 文 件中 读 取信息保存学生资料退出程序精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 16 页 - - - - - - - - - - 学生成绩管理7.程序运行结果开始输 入 指 令10 输入 学生 资料查 找显 示成绩修 改资料显 示名单查 找删 除信息读 取查 找信息保 存资料输 出成绩1 2 3 4 5 6 7 8 9 退出精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 16 页 - - - - - - - - - - 学生成绩管理精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 16 页 - - - - - - - - - - 学生成绩管理精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 16 页 - - - - - - - - - - 学生成绩管理8.设计过程遇到的问题在输入了学生成绩之后, 若不退出程序继续读取文件, 同一个学生的信息会多次输出。输入的数据长度有要求, 不能够输入的太长否则就会输出结果排列不整齐甚至无法输出数据。输入学生成绩时只能连续输入相同学期的学生。输入的学生成绩等信息相同时如姓名, 程序不提示出错 , 不能处理。同时好多地方都不懂 , 不明白其中的原理 , 做起来不上手。9.课题总结第一次做这种设计面广、综合性强的课程设计刚开始难度还就是有点大的,主要就是在函数调用方面容易出现混乱, 刚开始的时候功能少还容易解决, 写到后面再在综合起来就容易出现问题。尤其就是在修改删除函数中要调用文件操作函数 , 查找函数 , 然后找到具体删除的可行性办法还就是不太容易, 最后采用后一项覆盖前一项的方法解决。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 16 页 - - - - - - - - - - 学生成绩管理10、设计课题感想这学期我们学习了C+ 这一编程语言 , 学的很浅薄 , 平时都只能编一些比较小的程序。这次课程设计花了很长时间, 学到了不少的知识 , 开拓了视野。并且 , 本设计不像平时编写的程序, 运行一下直接推出操作界面。而就是可以像一个计算机上使用的软件一样, 可以不用退出系统, 继续使用其功能 , 只需要在主函数中调用一个循环即可。除此之外, 还学习到了课程设计的流程相关的知识。不过大多属于网上搜的 , 自己的能力很弱不能做出来。附录代码#include #include #include #include #include #include #include using namespace std; typedef class public: int cls; char nam10; char num10; int chinese; int english; int computer; int math; Student; Student stud1100,stud2100; int menu() char a; while(a7|a0) system(cls); std:cout 欢迎使用学生成绩管理系统 ; std:coutstd:endl; std:cout* 学 生 成 绩 管 理 系 统* std:endl; std:coutsetw(32) 1、输入学生成绩 std:endl; std:coutsetw(32) 2、输出学生成绩 endl; std:coutsetw(32) 3、查找并显示学生成绩 endl; std:coutsetw(32) 4、按姓名查找 , 修改学生资料 endl; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 16 页 - - - - - - - - - - 学生成绩管理std:coutsetw(32) 5、显示所有学生名单 endl; std:coutsetw(32) 6、查找并删除学生信息 endl; std:coutsetw(32) 7、从文件读取数据 endl; std:coutsetw(32) 0、储存学生资料并退出系统endl; std:coutsetfill(=)setw(80)=endl; std:cout请选择 (0-7)endl; std:coutsetw(35) ; a=getchar(); return(a-0); /*/ int Input(Student stud,int n) /输入数据 ( 第一学期 ) 。 int i=0; char sign,x10; for(;sign !=n&sign !=N;) std:coutsetw(15) studn+i、nam; std:coutsetw(15) studn+i、cls; std:coutsetw(15) studn+i、num; std:coutsetw(15) studn+i、chinese; std:coutsetw(15) studn+i、math; std:coutsetw(15) studn+i、english; std:coutsetw(15) studn+i、computer; gets(x); std:coutsetw(10) ; std:cout&sign; i+; return(n+i); /*输出数据*/ void Display(Student stud, int n) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 16 页 - - - - - - - - - - 学生成绩管理 int i; std:coutsetw(15) setfill(-)setw(65)-endl; std:coutsetw(15) 班级学号姓名语文数学英语计算机总分平均分 endl; std:coutsetw(15) ; std:coutsetfill(-)setw(65)-endl; for(i=1;in+1;i+) std:coutsetw(15) ; int s=studi-1、chinese+studi-1、math+studi-1、english+studi-1、computer; std:cout studi-1、 cls studi-1、 num studi-1、nam studi-1、chinese studi-1、math studi-1、english studi-1、computer s s/41 & i%10=0) std:coutsetw(15) setfill(-)setw(35)-endl; std:coutsetw(15) ; system(pause); std:coutsetw(15) setfill(-)setw(35)-endl; std:coutsetw(15) ; system(pause); /*查找学生显示其信息*/ void Query(Student stud,int n) char nam20; std:coutsetw(15) 输入其姓名 :nam; int i=0; while(strcmp(studi、nam,nam)!=0&in) i+; if(i=n) coutttt没有发现该学生的资料! endl; return; std:coutsetw(15) 学号:studi、numendl; std:coutsetw(15) 班级:studi、clsendl; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 16 页 - - - - - - - - - - 学生成绩管理 std:coutsetw(15) 语文:studi、chineseendl; std:coutsetw(15) 英语:studi、englishendl; std:coutsetw(15) 数学:studi、mathendl; std:coutsetw(15) 计算机 :studi、computerendl; /*删除学生信息*/ int Delete(Student stud,int n) char s20; int i=0,j; std:coutsetw(15)请输入要删除的学生的姓名:s; while(strcmp(studi、nam,s)!=0&in) i+; if(i=n) printf(ttt没有发现该学生资料 !n); return(n); for(j=i;jn-1;j+) strcpy(studj、num,studj+1、num); strcpy(studj、nam,studj+1、nam); studj、cls=studj+1、cls; studj、chinese=studj+1、chinese; studj、math=studj+1、math; studj、english=studj+1、english; studj、computer=studj+1、computer; coutsetw(15) 当前信息已删除成功 !na; while(strcmp(studi、nam,na)!=0&in) i+; if(i=n) coutttt没有发现该学生的资料! endl; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 10 页,共 16 页 - - - - - - - - - - 学生成绩管理 std:cout修改班级 :studi、cls; std:cout修改学号 :studi、num; std:cout修改语文成绩 :studi、chinese; std:cout修改英语成绩 :studi、english; std:cout修改数学成绩 :studi、math; std:cout修改计算机成绩 :studi、computer; std:cout修改成功 endl; return(n); /*显示学生名单*/ void show(Student stud,int n) for(int i=0;in;i+) std:coutsetw(15)studi、namendl; system(pause); /*从文件读取数据*/ int AddfromText(Student stud, int n) int i=0,number,x=0,y=0; FILE *fp; char 20; coutsetw(15) ; if(fp=fopen(,rb)=NULL) coutsetw(15) 无法打开文件 endl; coutsetw(15) ; system(pause); return(n); fscanf(fp,%d,&number); for(;inumber;) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 11 页,共 16 页 - - - - - - - - - - 学生成绩管理 fscanf(fp,%d%s%s%d%d%d%d%d%dn,&studn+i 、 cls,&studn+i、num,&studn+i、nam,&studn+i、chinese, &studn+i、math,&studn+i、english,&studn+i、computer,&x,&y); i+; n+=number; fclose(fp); coutsetw(15) 读入成功 !endl; coutsetw(15) ; system(pause); return(n); /*将 所 有记录 写 进 文 件*/ void WritetoText(Student stud,int n) int i=0; FILE *fp; char 20; coutsetw(15) 将资料输入文件 endl; coutsetw(15) ; if(fp=fopen(,w+)=NULL) coutsetw(15) 无法打开文件 endl; system(pause); return; fprintf(fp,%dn,n); for(;in;) fprintf(fp,%-8d%-8s%-8s%-5d%-5d%-5d%-5d%-5d%-5dn,studi、cls,studi、num,studi、nam, studi、 chinese,studi、 math,studi、 english,studi、computer, studi、 chinese+studi、 math+studi、 english+studi、computer, (studi、 chinese+studi、 math+studi、 english+studi、computer)/4); i+; fclose(fp); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 12 页,共 16 页 - - - - - - - - - - 学生成绩管理 /*主函数调用*/ void main() int n1=0,n2=0; for(;) switch(menu() case 1: int t; std:coutsetw(15) 输入学生资料 endl; std:coutsetw(15) 输入学期 endl; std:coutsetw(15)t; if(t=1) n1=Input(stud1,n1); else if(t=2) n2=Input(stud2,n2); break; case 2: std:coutsetw(15) 输出所有学生资料 endl; if(n1!=0) std:coutsetw(15) 第一学期 :endl; std:coutsetw(15) ; Display(stud1,n1); if(n2!=0) std:coutsetw(15) 第二学期 :endl; std:coutsetw(15) ; Display(stud2,n2); break; case 3: int r; std:coutsetw(15) 查找学生 endl; std:coutsetw(15) 请输入学期 :r; if(r=1) Query(stud1,n1); else if(r=2) Query(stud2,n2); std:coutsetw(15) ; system(pause); break; case 4: int p; std:coutsetw(15) 修改学生资料 endl; std:coutsetw(15) 请输入学期 :p; if(p=1) std:coutsetw(15) 输入您要修改的学生的姓名:; n1=Revise(stud1,n1); else if(p=2) std:coutsetw(15) 输入您要修改的学生的姓名:; n2=Revise(stud2,n2); system(pause); break; case 5: std:coutsetw(15) 显示所有学生名单 endl; if(n1!=0) std:coutsetw(15) 第一学期 endl; show(stud1,n1); coutsetw(15) endl; if(n2!=0) std:coutsetw(15) 第二学期 endl; show(stud2,n2); system(pause); break; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 14 页,共 16 页 - - - - - - - - - - 学生成绩管理 case 6: std:coutsetw(15)查找并删除学生信息 endl; int o; std:cout请输入学期 :endl; std:coutsetw(15)o; if(o=1) std:coutsetw(15)第一学期 endl; n1=Delete(stud1,n1); if(o=2) std:coutsetw(15) 第二学期 endl; n2=Delete(stud2,n2); system(pause); break; case 7: coutsetw(15) 从文件中读入数据 endl; std:coutsetw(15)读取第一学期的文件 endl; n1=AddfromText(stud1,n1); std:coutsetw(15)读取第二学期的文件 endl; n2=AddfromText(stud2,n2); break; case 0: std:coutsetw(15) 将所有资料写入文件 endl; if(n1!=0) coutsetw(15) 存储第一学期学生资料 :endl; WritetoText(stud1,n1); if(n2!=0) coutsetw(15) 存储第二学期学生资料 :endl; WritetoText(stud2,n2); std:coutsetw(15) 输入成功 endl; int b; std:coutsetw(15) 请确定就是否退出系统 :endl; std:coutsetw(15) 0、退出系统 endl; std:coutsetw(15) 1、返回endl; std:coutsetw(15)b; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 15 页,共 16 页 - - - - - - - - - - 学生成绩管理if(b=0) std:coutsetw(15) 谢谢使用 endl; std:coutsetw(15) ; system(pause); exit(0); std:coutsetw(15) ; system(pause); break; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 16 页,共 16 页 - - - - - - - - - -