易妖游戏网
您的当前位置:首页学生教务管理系统方案

学生教务管理系统方案

来源:易妖游戏网


专业资料

2任务二基于文件的学生/教务管理系 统 2.1前言

为了巩固我们C语言知识,并了解其在生活中的应用, 由老师为我们带来了这个题目。 实训,学会为实际应用涉及的数据选择适当的逻辑结构、存储结构及相应的算法,从而对 语言程序设计这门课能有一个更深刻的理解和认识; 完成的是一个难度较大的可执行综合性程序,

再者,实训相对于平时试验课来说,

通过 C 要

培养需求分析和系统架构等处理复杂问题的能

希望能通过实训,实际做到理论

力,从而极大的提高学生的编程能力以及撰写文档的能力; 和实践紧密结合,同时也为后续课程打下坚实的基础知识。

2.2系统需求分析

2.2.1 问题定义

本系统可以应用于教务处,进行对学生,教师,教务处人员的管理(添加,修改, 删除,统计),人员查询,成绩查询(可以按照姓名查询,证件号查询)。 本系统主要面对学生,教师,教务处,所以进入该系统时可以选择不同的身份进 入,若已存在账号,则可以直接进去选择自己的身份,若不存在账号,则需要管 理员进入添加,管理员可以进行的功能有成绩管理,学生管理,教师管理,管理 员管理,每个模块都有添加,删除,修改,统计,查询五个基本功能。而教师则 可以进行成绩的添加,修改,查询,等功能。学生只有查询和修改个人信息的功

word完美格式

专业资料

222需求分析

2.3系统设计

2.3.1系统架构

将要实现的模块分级进行架构 学生管理系统 管理员模块:

管理教师:教师添加,教师修改,教师删除,教师统计,教师查询

word完美格式

专业资料

管理学生:学生添加,学生修改,学生删除,学生统计,学生查询 管理管理员:管理员添加,管理员修改,管理员删除,管理员统计,

管理员查询

成绩管理:计算个人成绩,计算各科成绩,计算平均成绩,计算

最高最低分,排序

学生模块:查询个人成绩,查询个人信息,修改个人信息

教师模块:添加学生成绩,修改学生成绩,删除学生成绩,

查询学生信息,查询个人信息,修改个人信息。

232数据物理设计

学生

列名 数据类型 可否为空 姓名 char 否 学号 char 否 出身地 char 是 身份证号 char 否

联系方式 char 是 教师

列名 数据类型 可否为空 姓名 char 否 教师号 char 否 出身地 char 是 身份证号 char 否 联系方式 char 是

课程 char 否 管理员

列名 数据类型 可否为空 姓名 char 否 证件号 char 否 出身地 char 是 身份证号 char 否 联系方式 char 是 成绩

word完美格式

专业资料

列名 学号 数学成绩 体育成绩 英语成绩 C语言成绩 社会实践 总分 平均分

数据类型 char float float float float float float float 可否为空 否 否 否 否 否 否 否 否 233功能模块

管理员可以进行的功能有成绩管理,学生管理,教师管理,管理员管理,每个模 块都有添加,删除,修改,统计,查询五个基本功能。而教师则可以进行成绩的 添加,修改,查询,等功能。学生只有查询和修改个人信息的功能。

2.4系统实现

系统硬件环境为计算机,系统软件环境:

VC++6.0, TC3.0

2.4.4系统功能模块设计与实现 2.4.4.1 功能实现

下面分别对该模块中的具体功能进行详细描述,并配相应功能的截图 1.添加功能

FILE *fp; char ch2; int i=0,ch1; prin tf(\" printf(”

欢迎进入防灾科技学院学生管理系统 \\n\"); 添加请输入y,退出请输入n\\n\");

scan f(\"%c\if(ch2=='y')

word完美格式

专业资料

{

do {

fp=fope n(\" \"ma nager.txt“,“a+“); /*输入所要添加的内容*/

fwrite(&man ager[i],sizeof(struct man ager),1,fp);

prin tf(\"%s,%s,%s,%s\\n\er[i].zhiwei);

printf(-

是否继续添加,继续添加请输入

1,否则输入0\\n”);

scan f(\"%d\i++; fclose(fp); }while(ch 1==1); }

炎迎进A昨灾科茨学虧主管理系统 添加厲刖人入n 备输入您想添加的管理员的姓名 Jang 青轴入您想添加的的管理员证件号 L2345t7 青输入您想添加的管理员的性别 nan 青设定初始密码 1.23456 青输入管理员的职位 lezhanif 青输入管理员的联系方式 312343123 ^1234567 是否继续i忝加,继续添加请输人:L,否则输入❺ 2.修改功能

首先选择修改的依据,可以依据证件号,姓名两张方式修改。具体实现代 码如下:

fp=fope n( “ma nager.txt“,“r+“);

printf(-

请输入需要修改的人员的编号 \\n\");

scan f(\"%s\

for(i=0;fread(&man ager[i],sizeof(struct man ager),1,fp)!=0;i++) {

if(strcmp(str,ma nager[i]. mnum)==0)

word完美格式

专业资料

{

word完美格式

专业资料

prin tf(\"%s,%s,%s,%s\\n\an ager[i].

zhiwei);

printf(”

确认修改,确认请输入 1,退出则输入0\\n\");

scan f(\"%d\if(ch仁=1) {

/*选择修改的类型*/ scan f(\"%d\switch(ch2) { case 1:{

printf(”

请输入所要修改的姓名\\n\");

sca nf(\"%s\fwrite(&man ager[i],sizeof(struct

ma nager),1,fp);

}break;

加询改甲岀

理谨理谨理请 2345B7 ang, ^11,1234567, kezhang 甬认修改,确认请输入―退岀则输入H 改改改改改

曇证岀密职选请你联码位47 3 2 14 ^ 亏所请萦请输改部入人请的 继续请谕入匚 否则谙输入0 3.删除功能

删除可以依据证件号和姓名查询,删除方法是,先找到需要删除的人,然后 让排在其后的人员的信息替换这个人的信息。具体代码如下:

FILE *fp; char n ame[20]; int i,flag,n,j,ch;

fp=fope n(\" 'ma nager.txt\prin tf(\"origi nal data\\n\");

for(i=0,flag=1;fread(&teacher[i],sizeof(struct teacher),1,fp)!=0;i++)

word完美格式

专业资料

prin tf(\"%s,%s,%s,%s\\n\an ager[i].zhiwei); n=i+1; fclose(fp); do { printf(\"

请输入您所要删除的人员的名字

\\n\");

sca nf(\"%s\fp=fope n(\"ma nager.txt\for(i=0,flag=1;flag&&i< n;i++) {

if(strcmp( name,ma nager[i]. name)==0) {

for(j=i;j< n-1;j++)

{

/*后一个人的信息覆盖所需删除人的信息 }flag=0;

} }

if(!flag) n=n-1;

else printf(\"not found'n ”); fp=fope n(\"ma nager.txt\for(i=0;i< n;i++)

fwrite(&man ager[i],sizeof(struct man ager),1,fp); fclose(fp);

fp=fope n(\"ma nager.txt\

for(i=0,flag=1;fread(&man ager[i],sizeof(struct man ager),1,fp)!=0;i++)

prin tf(\"%s,%s,%s,%s\\n\an ager[i].zhiw ei); fclose(fp); prin tf(\"

是否继续删除,继续请输入

1,否则请输入0 \\n\");

*/

sca nf(\"%d\}while(ch==1); }

word完美格式

专业资料

主选择刪曹主月照证件灵入除宀照姓名号创衣出请输爭式宀

inal data ,man^1234567^kezhang 、继续请输入苏否则请输入回 4.查询功能

FILE *fp; int i;

char n ame[20]; int chi; do

{

printf(\" 请输入姓名”); sca nf(\"%s\

fp=fope n( \"ma nager.txt\

for(i=0;fread(&man ager[i],sizeof(struct man ager),1,fp)!=0;i++) {

if(strcmp( name,ma nager[i]. name)==0)

prin tf(\"%s,%s,%s,%s\\n\num,m an ager[i].zhiwei);

} fclose(fp);

printf(\" 继续请输入1,否则输入0\\n”); scan f(\"%d\}while(ch 1==1); }

诸诜岸苦询的兀工匚 搀罐查迪窗呈、 擅证库揑章询请输入2 逋茁i書扁入0 1青输入姓名昨呷 uang r nan ,1234567^ JceshanQf 继续请输入一否则输入问 word完美格式

3 4 5 AAA 1 2 BA

专业资料

5.统计功能

FILE *fp; int n,i;

fp=fope n(\"ma nager.txt\

for(i=0;fread(&man ager[i],sizeof(struct man ager),1,fp)!=0;i++) n=i+1; fclose(fp); printf(”

rug 共有%€名管理员\\n\);

篡《理员理员嘗理员改理员尊加理口出询青嶄入 ........... fi:s:冃主月宀圭冃主月主冃主^77-12 3 4 5 人」」 -KF - -- FT - -Kr 1]- $ I 1 I \\ T L- T T 0 -.HI - 亠入一人入入 , ■ 7.

、员 6.权限管理: FILE *fp;

char mn um[10],str[10]; int i,flag, n;

fp=fope n( \"ma nager.txt\printf(\" 欢迎进入学生管理系统\\n\"); printf(\" 请输入证件号\\n\"); scanf(\"%s\scan f(\"%s\

for(i=0;fread(&man ager[i],sizeof(struct man ager),1,fp)!=0;i++) {

n=i+1;pri ntf(\"%d\}

for(i=0,flag=1;i< n&& flag;i++)

{

if((strcmp( mnum ,ma nager[i].m nu m)==0)&&(strcmp(str,ma nager[i].mima)==0)) {

man agerma nage(); flag=0; } }

fclose(fp); if(flag) prin tf(\" }

L口口P乂尸■

仙T=FM珈、LJ曰口ug \\±升网,电

请输入密码 \\n\");

警告,密码输入错误\\n\");

word完美格式

专业资料

7.成绩添加

由教师添加,根据教师所教授课程而添加,具体实现代码:

FILE *fp,*fp1,*fp2; int i,n ,k,j;

char tnum[10],snum[10]; char

str1[]=\"math\

II.

5

printf(\"

请输入您的教师号\\n”);

scan f(\"%s\fp=fope n(\"teacher.txt\

for(i=0;fread(&teacher[i],sizeof(struct teacher),1,fp)!=0;i++) {

if(strcmp(t nu m,teacher[i].t num)==0) n=i;

}

if(strcmp(teacher[ n].course,str1)==0)

{

do{

fp仁 fope n( \"stude nt.txt\fp2=fope n( \"grade.txt\printf(\" j=0;

for(i=0;fread(&stude nt[i],sizeof(struct

stude nt),1,fp1)!=0;i++)

{

if(strcmp(s nu m,stude nt[i].s num)==0) strcpy(grade[j]. nu m,stude nt[i].s nu m); }

printf(”

请输入高等数学的成绩\\n\");

请输入您所要添加学生的学号

\\n\");

sca nf(\"%s\

word完美格式

专业资料

scan f(\"%f\

fwrite(&grade[j],sizeof(struct grade),1,fp2); j++ ; fclose(fp1); fclose(fp2);

printf(\" 是否继续添加,是 1,否0\\n\"); scan f(\"%d\

}while(k==1);

}

else if(strcmp(teacher[ n].course,str4)==0) {

继续添加其他课程

else printf(\"

fclose(fp);

}

不存在这门课,请核实 \\n\");

8 •成绩计算:

FILE *fp; int i;

fp=fope n(\"grade.txt\

for(i=0;fread(&grade[i],sizeof(struct grade),1,fp)!=0;i++)

{

grade[i].sum=grade[i].math+grade[i].ph+grade[i].e nglish+grade[i].c_la nguag e+grade[i].practise;

grade[i].aver=grade[i].sum/5;

printf(\"学号为 %s的学生的总成绩是 %f\\n\printf(\"

学号为 %s的学生的平均成绩是 %f\\n\

word完美格式

专业资料

fwrite(&grade[i],sizeof(struct grade),1,fp);

}

fclose(fp);

科请计贾请出请询人请序绩 A£fix ^^^ t 2 2 2 1 3冲生一生号牛尹号牛厶□心刖备号芻的天学英语成^#0-000000 是否继续查询,龛冃输入丄,否输入D 备输入您所要查询成绩的学生的学号 not found 是否继续查询,是匚否0 9.成绩排序

主要是运用冒泡排序法。 代码:

FILE *fp,*fp1; int i,n,j; float temp;

fp=fope n(\"grade.txt\

for(i=0;fread(&grade[i],sizeof(struct grade),1,fp)!=0;i++); n=i+1;

for(i=0;i< n_1;i++) {

for(j=0;j if(grade[j].avertemp=grade[j].aver;

grade[j].aver=grade[j+1].aver; grade[j+1].aver=temp; }

}

人输人5 4的忌成绩>34.000000 的平均应啻是6-800000 的总成绩>157.000000 的平均成绩是31・400000 I word完美格式

专业资料

for(i=0;i< n_1;i++) {

printf(\" 学号为 %$的学生的成绩为 %f\\n\fp1= fope n(\"grade1.txt\

fwrite( &grade[i],sizeof(struct grade),1,fp1); fclose(fpl); fclose(fp);

10•计算成绩最高最低分,、

采用穷比法,首先设第一个人的成绩是最高或最低,

较,直到所有人员比较完之后,找出最高分或最低分。具体实现代码如下FILE *fp,*fp1; int i,n,k; float max, min;

fp=fope n( \"grade.txt\fp仁 fope n(\"co un t.txt\

for(i=0;fread(&grade[i],sizeof(struct grade),1,fp)!=0;i++)

n=i+1;

max=grade[0].aver; min=grade[0].aver; for(i=1;i< n; i++) {

if(max}

grade_co un t.amax=max;

strcpy(grade_co un t.str1,grade[k]. nu m); for(i=1;i< n; i++) {

if(mi n> grade[i].aver) min=grade[i].aver; k=i;

}

grade_co un t.am in=min;

strcpy(grade_co un t.str2,grade[k]. nu m);

fwrite( &grade_co un t,sizeof(struct grade_co un t),1,fp); fclose(fp); fclose(fp1); }

word完美格式

再和其他人员的成绩比:

因篇幅问题不能全部显示,请点此查看更多更全内容