学生教务管理系统

发布时间:2020-06-30 03:50:04   来源:文档文库   
字号:

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

2.1 前言

为了巩固我们C语言知识,并了解其在生活中的应用,由老师为我们带来了这个题目。通过实训学会实际应用涉及的数据选择适当的逻辑结构、存储结构及相应的算法,从而对C语言程序设计这门课能有一个更深刻的理解和认识;再者,实训相对于平时试验课来说,要完成的是一个难度较大的可执行综合性程序,培养需求分析和系统架构等处理复杂问题的能力,从而极大的提高学生的编程能力以及撰写文档的能力;希望能通过实训,实际做到理论和实践紧密结合,同时也为后续课程打下坚实的基础知识。

2.2 系统需求分析

2.2.1 问题定义

本系统可以应用于教务处,进行对学生,教师,教务处人员的管理(添加,修改,删除,统计),人员查询,成绩查询(可以按照姓名查询,证件号查询)

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

2.2.2需求分析

2.3 系统设计

2.3.1系统架构

将要实现的模块分级进行架构

学生管理系统

管理员模块:

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

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

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

成绩管理:计算个人成绩,计算各科成绩,计算平均成绩,计算最高最低分,排序

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

教师模块:添加学生成绩,修改学生成绩,删除学生成绩,查询学生信息,查询个人信息,修改个人信息。

2.3.2数据物理设计

学生

列名

数据类型

可否为空

姓名

char

学号

char

出身地

char

身份证号

char

联系方式

char

教师

列名

数据类型

可否为空

姓名

char

教师号

char

出身地

char

身份证号

char

联系方式

char

课程

char

管理员

列名

数据类型

可否为空

姓名

char

证件号

char

出身地

char

身份证号

char

联系方式

char

成绩

列名

数据类型

可否为空

学号

char

数学成绩

float

体育成绩

float

英语成绩

float

C语言成绩

float

社会实践

float

总分

float

平均分

float

2.3.3功能模块

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

2.4 系统实现

系统硬件环境为计算机,系统软件环境:VC++6.0TC3.0

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

2.4.4.1功能实现

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

1. 添加功能

FILE *fp;

char ch2;

int i=0,ch1;

printf("欢迎进入防灾科技学院学生管理系统\n");

printf("添加请输入y,退出请输入n\n");

scanf("%c",&ch2);

if(ch2=='y')

{

do

{

fp=fopen("manager.txt","a+");

/*输入所要添加的内容*/

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

printf("%s,%s,%s,%s\n",manager[i].name,manager[i].sex,manager[i].mnum,manager[i].zhiwei);

printf("是否继续添加,继续添加请输入1,否则输入0\n");

scanf("%d",&ch1);

i++;

fclose(fp);

}while(ch1==1);

}

2. 修改功能

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

fp=fopen("manager.txt","r+");

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

scanf("%s",str);

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

{

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

{

printf("%s,%s,%s,%s\n",manager[i].name,manager[i].sex,manager[i].mnum,manager[i]. zhiwei);

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

scanf("%d",&ch1);

if(ch1==1)

{

/*选择修改的类型*/

scanf("%d",&ch2);

switch(ch2)

{

case 1:{

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

scanf("%s",manager[i].name);

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

}break;

3. 删除功能

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

FILE *fp;

char name[20];

int i,flag,n,j,ch;

fp=fopen("manager.txt","r+");

printf("original data\n");

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

printf("%s,%s,%s,%s\n",manager[i].name,manager[i].sex,manager[i].mnum,manager[i].zhiwei);

n=i+1;

fclose(fp);

do

{

printf("请输入您所要删除的人员的名字\n");

scanf("%s",name);

fp=fopen("manager.txt","r");

for(i=0,flag=1;flag&&i

{

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

{

for(j=i;j

{

/*后一个人的信息覆盖所需删除人的信息*/

}flag=0;

}

}

if(!flag)

n=n-1;

else printf("not found\n");

fp=fopen("manager.txt","w");

for(i=0;i

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

fclose(fp);

fp=fopen("manager.txt","r");

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

printf("%s,%s,%s,%s\n",manager[i].name,manager[i].sex,manager[i].mnum,manager[i].zhiw ei);

fclose(fp);

printf("是否继续删除,继续请输入1,否则请输入0 \n");

scanf("%d",&ch);

}while(ch==1);

}

4. 查询功能

FILE *fp;

int i;

char name[20];

int ch1;

do

{

printf("请输入姓名");

scanf("%s",name);

fp=fopen("manager.txt","r");

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

{

if(strcmp(name,manager[i].name)==0) printf("%s,%s,%s,%s\n",manager[i].name,manager[i].sex,manager[i].mnum,manager[i].zhiwei);

}

fclose(fp);

printf("继续请输入1,否则输入0\n");

scanf("%d",&ch1);

}while(ch1==1);

}

5. 统计功能

FILE *fp;

int n,i;

fp=fopen("manager.txt","r");

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

n=i+1;

fclose(fp);

printf("共有%d名管理员\n",n);

6. 权限管理:

FILE *fp;

char mnum[10],str[10];

int i,flag,n;

fp=fopen("manager.txt","r+");

printf("欢迎进入学生管理系统\n");

printf("请输入证件号\n");

scanf("%s",mnum); printf("请输入密码\n");

scanf("%s",str);

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

{

n=i+1;printf("%d",n);

}

for(i=0,flag=1;i

{

if((strcmp(mnum,manager[i].mnum)==0)&&(strcmp(str,manager[i].mima)==0))

{

managermanage();

flag=0;

}

}

fclose(fp);

if(flag)

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

}

7.成绩添加

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

FILE *fp,*fp1,*fp2;

int i,n,k,j;

char tnum[10],snum[10];

char str1[]="math",str2[]="ph",str3[]="c_language",str4[]="english",str5[]="practise";

printf("请输入您的教师号\n");

scanf("%s",tnum);

fp=fopen("teacher.txt","r");

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

{

if(strcmp(tnum,teacher[i].tnum)==0)

n=i;

}

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

{

do{

fp1=fopen("student.txt","r");

fp2=fopen("grade.txt","a+");

printf("请输入您所要添加学生的学号\n");

scanf("%s",snum);

j=0;

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

{

if(strcmp(snum,student[i].snum)==0)

strcpy(grade[j].num,student[i].snum);

}

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

scanf("%f",&grade[j].math);

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

j++ fclose(fp1);

fclose(fp2);

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

scanf("%d",&k);

}while(k==1);

}

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

{

继续添加其他课程

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

fclose(fp);

}

8.成绩计算

FILE *fp;

int i;

fp=fopen("grade.txt","a+");

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

{

grade[i].sum=grade[i].math+grade[i].ph+grade[i].english+grade[i].c_language+grade[i].practise;

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

printf("学号为%s的学生的总成绩是%f\n",grade[i].num,grade[i].sum);

printf("学号为%s的学生的平均成绩是%f\n",grade[i].num,grade[i].aver);

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

}

fclose(fp);

9.成绩排序

主要是运用冒泡排序法。

代码:

FILE *fp,*fp1;

int i,n,j;

float temp;

fp=fopen("grade.txt","r");

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

n=i+1;

for(i=0;i

{

for(j=0;j

if(grade[j].aver

{

temp=grade[j].aver;

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

grade[j+1].aver=temp;

}

}

for(i=0;i

{

printf("学号为%s的学生的成绩为%f\n",grade[i].num,grade[i].aver);

}

fp1=fopen("grade1.txt","a+");

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

fclose(fp1);

fclose(fp);

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

采用穷比法,首先设第一个人的成绩是最高或最低,再和其他人员的成绩比较,直到所有人员比较完之后,找出最高分或最低分。具体实现代码如下:

FILE *fp,*fp1;

int i,n,k;

float max,min;

fp=fopen("grade.txt","r");

fp1=fopen("count.txt","a+");

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

{

if(max

max=grade[i].aver;

k=i;

}

grade_count.amax=max;

strcpy(grade_count.str1,grade[k].num);

for(i=1;i

{

if(min>grade[i].aver)

min=grade[i].aver;

k=i;

}

grade_count.amin=min;

strcpy(grade_count.str2,grade[k].num);

fwrite(&grade_count,sizeof(struct grade_count),1,fp);

fclose(fp);

fclose(fp1);

}

本文来源:https://www.2haoxitong.net/k/doc/ed19d7182dc58bd63186bceb19e8b8f67d1cef1f.html

《学生教务管理系统.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式