1、学生教务管理系统 学生教务管理系统 2 任务二 基于文件的学生/教务管理系统 2.1 前言 为了巩固我们C语言知识,并了解其在生活中的应用,由老师为我们带来了这个题目。通过实训,学会为实际应用涉及的数据选择适当的逻辑结构、存储结构及相应的算法,从而对C语言程序设计这门课能有一个更深刻的理解和认识;再者,实训相对于平时试验课来说,要完成的是一个难度较大的可执行综合性程序,培养需求分析和系统架构等处理复杂问题的能力,从而极大的提高学生的编程能力以及撰写文档的能力;希望能通过实训,实际做到理论和实践紧密结合,同时也为后续课程打下坚实的基础知识。 2.2 系统需求分析 2.2.1 问题定义 本系统可以
2、应用于教务处,进行对学生,教师,教务处人员的管理(添加,修改,删除,统计),人员查询,成绩查询(可以按照姓名查询,证件号查询)。 本系统主要面对学生,教师,教务处,所以进入该系统时可以选择不同的身份进入,若已存在账号,则可以直接进去选择自己的身份,若不存在账号,则需 2 要管理员进入添加,管理员可以进行的功能有成绩管理,学生管理,教师管理,管理员管理,每个模块都有添加,删除,修改,统计,查询五个基本功能。而教师则可以进行成绩的添加,修改,查询,等功能。学生只有查询和修改个人 信息的功能。 需求分析2.2.学管系管教学教学成管成个查修个管管管管管员 信息 理 2.3 系统设计 2.3.1系统架构
3、 将要实现的模块分级进行架构 3 学生管理系统 管理员模块:管理教师:教师添加,教师修改,教师删除,教师统计,教师查 询 管理学生:学生添加,学生修改,学生删除,学生统计,学生查 询管理管理员:管理员添加,管理员修改,管理员删除,管理员统 计,管理员查询成绩管理:计算个人成绩,计算各科成绩,计算平均成绩,计算 最高最低分,排序 学生模块:查询个人成绩,查询个人信息,修改个人信息,查教师模块:添加学生成绩,修改学生成绩,删除学生成绩,查询学生信息 询个人信息,修改个人信息。 2.3.2数据物理设计 学生 列姓charchar学 是 char 出身地 否 char 证份身 号 是char 方联系
4、式 4 教师为否据类可列名 数 空型 姓charchar教师char出身charcharchar课 管理列char姓char证件 是出身地 char char 否份身证 号 是char 系联方 式 5 成绩列名 数据类可否为char学floatfloatfloat语言floatfloatfloat总否float 平均分否 2.3.3功能模块管理员可以进行的功能有成绩管理,学生管理,教师管理,管理员管理,每个模块都有添加,删除,修改,统计,查询五个基本功能。而教师则可以进行成 绩的添加,修改,查询,等功能。学生只有查询和修改个人信息的功能。 6 2.4 系统实现 系统硬件环境为计算机,系统软件环
5、境:VC+6.0,TC3.0 2.4.4 系统功能模块设计与实现 2.4.4.1功能实现 下面分别对该模块中的具体功能进行详细描述,并配相应功能的截图 1. 添加功能 FILE *fp; char ch2; int i=0,ch1; 牰湩晴尨欢迎进入防灾科技学院学生管理系统n); 瀠楲瑮?添加请输入y,退出请输入nn); scanf(%c,&ch2); if(ch2=y) do fp=fopen(manager.txt,a+); /*输入所要添加的内容*/ 7 fwrite(&manageri,sizeof(struct manager),1,fp); printf(%s,%s,%s,%sn,
6、manageri.name,manageri.sex,manageri.mnum,manageri.zhiwei); 牰湩晴尨是否继续添加,继续添加请输入1,否则输入0n); scanf(%d,&ch1); i+; fclose(fp); while(ch1=1); 2. 修改功能 首先选择修改的依据,可以依据证件号,姓名两张方式修改。具体实现代 8 码如下: fp=fopen(manager.txt,+); 牰湩晴尨请输入需要修改的人员的编号n); scanf(%s,str); for(i=0;fread(&manageri,sizeof(struct manager),1,fp)!=0;i
7、+) if(strcmp(str,manageri.mnum)=0) printf(%s,%s,%s,%sn,manageri.name,manageri.sex,manageri.mnum,manageri. zhiwei); 牰湩晴尨确认修改,确认请输入1,退出则输入0n); scanf(%d,&ch1); if(ch1=1) /*选择修改的类型*/ scanf(%d,&ch2); 9 switch(ch2) case 1: 牰湩晴尨请输入所要修改的姓名n); scanf(%s,manageri.name); fwrite(&manageri,sizeof(struct manager),
8、1,fp); break; 3. 删除功能 删除可以依据证件号和姓名查询,删除方法是,先找到需要删除的人,然后 10 让排在其后的人员的信息替换这个人的信息。具体代码如下: FILE *fp; char name20; int i,flag,n,j,ch; fp=fopen(manager.txt,+); printf(original datan); for(i=0,flag=1;fread(&teacheri,sizeof(struct teacher),1,fp)!=0;i+) printf(%s,%s,%s,%sn,manageri.name,manageri.sex,manageri
9、.mnum,manageri.zhiwei); n=i+1; fclose(fp); do 牰湩晴尨请输入您所要删除的人员的名字n); scanf(%s,name); fp=fopen(manager.txt,); 11 for(i=0,flag=1;flag∈i+) if(strcmp(name,manageri.name)=0) for(j=i;jn-1;j+) /*后一个人的信息覆盖所需删除人的信息*/ flag=0; if(!flag) n=n-1; else printf(ot foundn); fp=fopen(manager.txt,w); for(i=0;in;i+) f
10、write(&manageri,sizeof(struct manager),1,fp); fclose(fp); fp=fopen(manager.txt,); for(i=0,flag=1;fread(&manageri,sizeof(struct 12 manager),1,fp)!=0;i+) printf(%s,%s,%s,%sn,manageri.na me,manageri.sex,manageri.mnum,manageri.zhiw ei); fclose(fp); 牰湩晴尨是否继续删除,继续请输入1,否则请输入0 n); scanf(%d,&ch); while(ch=1)
11、; 4. 查询功能 FILE *fp; int i; char name20; int ch1; 13 do 牰湩晴尨请输入姓名); scanf(%s,name); fp=fopen(manager.txt,); for(i=0;fread(&manageri,sizeof(struct manager),1,fp)!=0;i+) if(strcmp(name,manageri.name)=0) printf(%s,%s,%s,%sn,manageri.name,manageri.sex,manageri.mnum,manageri.zhiwei); fclose(fp); 牰湩晴尨继续请输入
12、1,否则输入0n); scanf(%d,&ch1); while(ch1=1); 14 统计功能5.FILE *fp; int n,i; fp=fopen(manager.txt,); for(i=0;fread(&manageri,sizeof(struct manager),1,fp)!=0;i+) n=i+1; fclose(fp); n,n); 名管理员牰湩晴尨共有%d 权限管理: 6.FILE *fp; char mnum10,str10; int i,flag,n; fp=fopen(manager.txt,+); 15 牰湩晴尨欢迎进入学生管理系统n); 牰湩晴尨请输入证件号n)
13、; scanf(%s,mnum); 牰湩晴尨请输入密码 n); scanf(%s,str); for(i=0;fread(&manageri,sizeof(struct manager),1,fp)!=0;i+) n=i+1;printf(%d,n); for(i=0,flag=1;in&flag;i+) if(strcmp(mnum,manageri.mnum)=0)&(strcmp(str,manageri.mima)=0) managermanage(); flag=0; fclose(fp); if(flag) 16 牰湩晴尨警告,密码输入错误n); 7成绩添加 由教师添加,根据教师所
14、教授课程而添加,具体实现代码: FILE *fp,*fp1,*fp2; int i,n,k,j; char tnum10,snum10; char 瑳?嵛尽慭桴?瑳?嵛尽桰?瑳?嵛尽彣慬杮慵敧,str4=english,str5=practise; 牰湩晴尨请输入您的教师号n); scanf(%s,tnum); fp=fopen( eacher.txt,); for(i=0;fread(&teacheri,sizeof(struct teacher),1,fp)!=0;i+) 17 if(strcmp(tnum,teacheri.tnum)=0) n=i; if(strcmp(teachern
15、.course,str1)=0) do fp1=fopen(student.txt,); fp2=fopen(grade.txt,a+); 牰湩晴尨请输入您所要添加学生的学号n); scanf(%s,snum); j=0; for(i=0;fread(&studenti,sizeof(struct student),1,fp1)!=0;i+) if(strcmp(snum,studenti.snum)=0) strcpy(gradej.num,studenti.snum); 牰湩晴尨请输入高等数学的成绩 18 n); scanf(%f,&gradej.math); fwrite(&gradej
16、,sizeof(struct grade),1,fp2); j+; fclose(fp1); fclose(fp2); 牰湩晴尨是否继续添加,是1,否0n); scanf(%d,&k); while(k=1); else if(strcmp(teachern.course,str4)=0) 继续添加其他课程 else 牰湩晴尨不存在这门课,请核实n); fclose(fp); 19 :成绩计算8FILE *fp; int i; fp=fopen(grade.txt,a+); for(i=0;fread(&gradei,sizeof(struct grade),1,fp)!=0;i+) grad
17、ei.sum=gradei.math+gradei.ph+g radei.english+gradei.c_language+gradei.practise; gradei.aver=gradei.sum/5; 绩总成的学%s号牰湩晴尨 学为的生%fn,gradei.num,gradei.sum); 是 20 牰湩晴尨学号为%s的学生的平均成绩是%fn,gradei.num,gradei.aver); fwrite(&gradei,sizeof(struct grade),1,fp); fclose(fp); 9成绩排序 主要是运用冒泡排序法。 代码: FILE *fp,*fp1; int i
18、,n,j; float temp; fp=fopen(grade.txt,); for(i=0;fread(&gradei,sizeof(struct grade),1,fp)!=0;i+); n=i+1; 21 for(i=0;in-1;i+) for(j=0;jn-i;j+) if(gradej.avergradej+1.aver) temp=gradej.aver; gradej.aver=gradej+1.aver; gradej+1.aver=temp; for(i=0;in-1;i+) 牰湩晴尨学号为%s的学生的成绩为%fn,gradei.num,gradei.aver); fp1
19、=fopen(grade1.txt,a+); fwrite(&gradei,sizeof(struct grade),1,fp1); fclose(fp1); fclose(fp); 10计算成绩最高最低分,、 采用穷比法,首先设第一个人的成绩是最高或最低,再和其他人员的成绩比较,直到所有人员比较完之后,找出最高分或最低分。具体实现代码如下: 22 FILE *fp,*fp1; int i,n,k; float max,min; fp=fopen(grade.txt,); fp1=fopen(count.txt,a+); for(i=0;fread(&gradei,sizeof(struct
20、grade),1,fp)!=0;i+) n=i+1; max=grade0.aver; min=grade0.aver; for(i=1;in;i+) if(maxgradei.aver) max=gradei.aver; k=i; grade_count.amax=max; strcpy(grade_count.str1,gradek.num); for(i=1;igradei.aver) 23 min=gradei.aver; k=i; grade_count.amin=min; strcpy(grade_count.str2,gradek.num); fwrite(&grade_count,sizeof(struct grade_count),1,fp); fclose(fp); fclose(fp1); 24
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2