align: justify; text-indent: 2em; margin-top: 0px; margin-bottom: 0px; -ms-text-justify: inter-ideograph;">T=St;
break;
}
if(St->next ==NULL)
{
printf(" 您的学号输入错误!\n");
st_password(save_St,save_Te);
}
else
St=St->next ;
}
printf(" 请输入您的密码:");
for(n=0;n<3;n++)
{
for(g=0;g<32;g++)
{
k=getch();
if (k==13)
break;
j[g]=k;
printf("*");
}
j[g]='\0';
if(strcmp(j,St->key )==0)
student(save_St,save_Te,T);
if(n==2)
{
printf("\n 您三次输入密码错误,系统自动退出\n");
exit(-1);
}
else
printf("\n 密码输入错误,请重新输入:");
}
}
void student(struct student *St,struct teacher *Te,struct student *T)//学生主页
{
int choose=0;
struct teacher *save_Te=Te;
struct student *save_St=St;
printf("\n\n 欢迎进入学生界面\n");
printf("--------------------------------------------------------\n\n");
printf(" 1:查看自己的信息\n");
printf(" 2:修改自己的密码\n");
printf(" 3:选课\n");
printf(" 请选择您的操作内容:");
scanf("%d",&choose);
switch(choose)
{
case 1:student_information(save_St,save_Te,T);
break;
case 2:change_student_password(save_St,save_Te,T);
break;
case 3:choose_course(save_St,save_Te,T);
break;
}
}
void student_information(struct student *St,struct teacher *Te,struct student *T)//学生查看自己的信息
{
int choose=0;
struct teacher *Tsave=Te;
struct student *Ssave=St;
printf("学号:%d ",T->ID );
printf("姓名:%s ",T->name );
printf("密码:%s ",T->key );
printf("年龄:%d ",T->age );
printf("年级:%d ",T->grade );
printf("名次:%d ",T->placing );
printf("选课标号:%d ",T->symble );
printf("自己的成绩:%.2f ",T->score[0]);
printf("班级的平均的成绩:%.2f ",T->score[1]);
printf("年级平均成绩:%.2f\n",T->score[2]);
printf("请选择下一步操作(1.回到学生的界面 2.退出):");
scanf("%d",&choose);
if(choose==1)
student(Ssave,Tsave,T);
else
exit(-1);
}
void change_student_password(struct student *St,struct teacher *Te,struct student *T)//学生修改自己的密码
{
struct student *save_s=St;
int choose=0;
printf(" 请输入新的密码:");
scanf("%s",T->key );
printf(" 密码修改成功!\n");
wb_st(save_s);
printf("请选择下一步操作(1.回到学生的界面 2.退出):");
scanf("%d",&choose);
if(choose==1)
student(St,Te,T);
else
exit(-1);
}
void choose_course(struct student *St,struct teacher *Te,struct student *T)//学生选课
{
struct student *save_s=St;
int choose=0;
Te=Te->next ;
for(;;)
{
printf(" 老师姓名:%s 老师授课标号:%d 老师所授课程:%s\n ",Te->name ,Te->symble ,Te->sub );
if(Te->next ==NULL)
break;
else
Te=Te->next ;
}
printf("请选择老师授课标号:");
scanf("%d",&T->symble );
wb_st(save_s);
printf("选课成功!\n");
printf("请选择下一步操作(1.回到学生的界面 2.退出):");
scanf("%d",&choose);
if(choose==1)
student(St,Te,T);
else
exit(-1);
}
teacher.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include "share.h"
void te_password(struct student *St,struct teacher *Te)//老师验证密码
{
int i,n,g,choose=0;
char j[32],k;
struct teacher *save_Te=Te;
struct teacher *T;
struct student *save_St=St;
printf(" 请输入您的编号:");
scanf("%d",&i);
for(;;)
{
if(i==Te->ID )
{
T=Te;
break;
}
if(Te->next ==NULL)
{
printf(" 您的编号输入错误!\n");
te_password(save_St,save_Te);
}
else
Te=Te->next ;
}
printf(" 请输入您的密码:");
for(n=0;n<3;n++)
{
for(g=0;g<32;g++)
{
k=getch();
if (k==13)
break;
j[g]=k;
printf("*");
}
j[g]='\0';
if(strcmp(j,Te->key )==0)
teacher(save_St,save_Te,T);
if(n==2)
{
printf("\n 您三次输入密码错误,系统自动退出\n");
exit(-1);
}
else
printf("\n 密码输入错误,请重新输入:");
}
}
void teacher(struct student *St,struct teacher *Te,struct teacher *T)//老师主页
{
int choose=0;
struct teacher *save_Te=Te;
struct student *save_St=St;
save_Te=Te;
save_St=St;
printf("\n\n 欢迎进入教师界面\n");
printf("------------------------------------------------------\n\n");
printf(" 1:查看自己的信息\n");
printf(" 2:修改自己的密码\n");
printf(" 3:修改学生的成绩\n");
printf(" 请选择您的操作内容:");
scanf("%d",&choose);
switch(choose)
{
case 1: teacher_information(save_Te,save_St,T);
break;
case 2: change_teacher_password(save_Te,save_St,T);
break;
case 3: change_score(save_St,save_Te,T);
break;
}
}
void teacher_information(struct teacher *Te,struct student *St,struct teacher *T)//老师自己的信息
{
int choose=0;
struct teacher *Tsave=Te;
struct student *Ssave=St;
printf("编号:%d ",T->ID );
printf("姓名:%s ",T->name );
printf("密码:%s ",T->key );
printf("授课标号:%d ",T->symble );
printf("所授课程:%s \n",T->sub );
printf("请选择下一步操作(1.回到老师的界面 2.退出):");
scanf("%d",&choose);
if(choose==1)
teacher(Ssave,Tsave,T);
else
exit(-1);
}
void change_teacher_password(struct teacher *Te,struct student *St,struct teacher *T)//老师修改自己的密码
{
struct teacher *Tsave=Te;
struct student *Ssave=St;
struct teacher *save_t=Te;
int choose=0;
printf(" 请输入新的密码:");
scanf("%s",T->key );
printf(" 密码修改成功!\n");
wb_te(save_t);
printf("请选择下一步操作(1.回到老师的界面 2.退出):");
scanf("%d",&choose);
if(choose==1)
teacher(Ssave,Tsave,T);
else
exit(-1);
}
void change_score(struct student *St,struct teacher *Te,struct teacher *T)//老师修改学生的成绩
{
int i;
int choose=0;
struct student *save=St;
struct student *save_St=St;
struct student *save_s=St;
printf(" 您可以修改以下学生的成绩\n");
for(;;)
{
if(St->symble ==T->symble )
{
printf("学号:%d ",St->ID );
printf("姓名:%s\n ",St->name );
}
if(St->next ==NULL)
break;
else
St=St->next ;
}
printf(" 请输入要修改学生的学号:");
scanf("%d",&i);
for(;;)
{
if(i==save->ID )
{
printf(" 请输入该学生自己的成绩:");
scanf("%f",&save->score[0]);
printf(" 请输入该学生班级的平均的成绩:");
scanf("%f",&save->score[1]);
printf(" 年级的平均成绩:");
scanf("%f",&save->score[2]);
printf(" 修改学生成绩成功!\n");
wb_st(save_s);
}
if(save->next ==NULL)
break;
else
save=save->next ;
}
printf("请选择下一步操作(1.回到老师的界面 2.退出):");
scanf("%d",&choose);
if(choose==1)
teacher(save_St,Te,T);
else
exit(-1);
}
admin.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include "share.h"
void wb_st(struct student *S)//覆盖学生信息
{
fp=fopen("student.txt","wb+");
S=S->next ;
while(S!=NULL)
{
fwrite(S,sizeof(struct student),1,fp);
S=S->next ;
}
}
void wb_te(struct teacher *S)//覆盖老师信息
{
fp1=fopen("teacher.txt","wb+");
S=S->next ;
while(S!=NULL)
{
fwrite(S,sizeof(struct teacher),1,fp1);
S=S->next ;
}
}
void admin_password(struct student *St,struct teacher *Te,struct adminstrator *Admin)//管理员验证密码
{
int i,g,n;
char j[32],k;
struct student *save_St=St;
struct teacher *save_Te=Te;
printf(" 请输入您的账号:");
scanf("%d",&i );
if(i!=Admin->ID )
{
printf(" 您的账号输入错误!\n");
admin_password(save_St,save_Te,Admin);
}
printf(" 请输入您的密码:");
for(n=0;n<3;n++)
{
for(g=0;g<32;g++)
{
k=getch();
if (k==13)
break;
j[g]=k;
printf("*");
}
j[g]='\0';
if(strcmp(j,Admin->key )==0)
adminstrator(save_St,save_Te,Admin);
if(n==2)
{
printf("\n 您三次输入密码错误,系统自动退出\n");
exit(-1);
}
else
printf("\n 密码输入错误,请重新输入:");
}
}
void adminstrator(struct student *St,struct teacher *Te,struct adminstrator *Admin)
{
int choose=0;
struct student *save_St=St;
struct teacher *save_Te=Te;
printf("\n\n 欢迎进入管理员界面\n");
printf("------------------------------------------------------\n\n");
printf(" 1: 对学生进行管理\n");
printf(" 2: 对老师进行管理\n");
printf(" 3: 修改自己的密码\n");
printf("------------------------------------------------------\n");
printf(" 请选择您的管理对象:");
scanf("%d",&choose);
switch(choose)
{
case 1: to_student(save_St,save_Te,Admin);
break;
case 2: to_teacher(save_St,save_Te,Admin);
break;
case 3: change_adminstrator_password(save_St,save_Te,Admin);
break;
}
}
void change_adminstrator_password(struct student *St,struct teacher *Te,struct adminstrator *Admin)//管理员修改自己的密码
{
struct student *save_St=St;
struct teacher *save_Te=Te;
int i;
fp2=fopen("adminstrator.txt","w");
printf(" 请输入新密码:");
scanf("%s",Admin->key );
fprintf(fp2,"%s",Admin->key);
printf(" 密码修改成功!\n");
printf("请选择下一步操作(1.回到管理员的界面 2.退出):");
scanf("%d",&i);
if(i==1)
adminstrator(save_St,save_Te,Admin);
else
exit(-1);
}
void to_student(struct student *St,struct teacher *Te,struct adminstrator *Admin)//对学生进行管理
{
int choose=0;
printf("\n\n 以下是对学生的操作管理\n");
printf("------------------------------------------------------\n");
printf(" 1: 添加一个学生信息\n");
printf(" 2: 查看一个学生信息\n");
printf(" 3: 修改一个学生信息\n");
printf(" 4: 删除一个学生信息\n");
printf("------------------------------------------------------\n");
printf(" 请选择您的操作内容:");
scanf("%d",&choose);
switch(choose)
{
case 1: add_student_information(St,Te,Admin);
break;
case 2: look_student_information(St,Te,Admin);
break;
case 3: change_student_information(St,Te,Admin);
break;
case 4: delete_student_information(St,Te,Admin);
wb_st(St);
break;
}
}
void to_teacher(struct student *St,struct teacher *Te,struct adminstrator *Admin)//对老师进行管理
{
int choose=0;
printf("\n\n 以下是对老师的操作管理\n");
printf("------------------------------------------------------\n");
printf(" 1: 添加一个老师信息\n");
printf(" 2: 查看一个老师信息\n");
printf(" 3: 修改一个老师信息\n");
printf(" 4: 删除一个老师信息\n");
printf("------------------------------------------------------\n");
printf(" 请选择您的操作内容:");
scanf("%d",&choose);
switch(choose)
{
case 1: add_teacher_information(St,Te,Admin);
break;
case 2: look_teacher_information(St,Te,Admin);
break;
case 3: change_teacher_information(St,Te,Admin);
break;
case 4: delete_teacher_information(St,Te,Admin);
break;
}
}
void add_student_information(struct student *St,struct teacher *Te,struct adminstrator *Admin)//增加学生信息
{
int j;
struct student *save_St=St;
struct teacher *save_Te=Te;
struct student *p1=St;
struct student *save_S=St;
for(;;)
{
if(St->next ==NULL)
break;
else
St=St->next;
}
p1=(struct student *)malloc(sizeof(struct student));
St->next =p1;
printf("------------------------------------------------------\n");
printf(" 请输入学生的学号:");
scanf("%d",&p1->ID );
printf(" 请输入学生的姓名:");
scanf("%s",p1->name );
printf(" 请输入学生的密码:");
scanf("%s",p1->key );
printf(" 请输入学生的年龄:");
scanf("%d",&p1->age );
printf(" 请输入学生的年级:");
scanf("%d",&p1->grade );
printf(" 请输入学生的名次:");
scanf("%d",&p1->placing );
printf("------------------------------------------------------\n\n");
p1->next =NULL;
//fwrite(p1,sizeof(struct student),1,fp);
wb_st(save_S);
printf("请选择下一步操作(1.回到对学生管理的界面 2.回到管理员界面 3.退出):");
scanf("%d",&j);
if(j==1)
to_student(save_St,save_Te,Admin);
if(j==2)
adminstrator(save_St,save_Te,Admin);
else
exit(-1);
}
void look_student_information(struct student *St,struct teacher *Te,struct adminstrator *Admin)//查看学生信息
{
int ID,j;
struct student *save_St=St;
struct student *p1=St;
struct teacher *save_Te=Te;
struct teacher *p2=Te;
St=St->next ;
printf("------------------------------------------------------\n");
for(;;)
{
printf("学号:%d ",St->ID);
printf("姓名:%s ",St->name);
printf("密码:%s ",St->key);
printf("年龄:%d ",St->age);
printf("年级:%d ",St->grade);
printf("名次:%d \n",St->placing);
if(St->next ==NULL)
break;
else
St=St->next ;
}
printf("-------------------------------------------------------\n");
printf(" 请输入要查找学生的学号:");
scanf("%d",&ID);
for(;;)
{
if(ID==save_St->ID)
{
printf("学号:%d ",save_St->ID);
printf("姓名:%s ",save_St->name);
printf("密码:%s ",save_St->key);
printf("年龄:%d ",save_St->age);
printf("年级:%d ",save_St->grade);
printf("名次:%d \n",save_St->placing);
printf("------------------------------------------------------\n");
printf("请选择下一步操作(1.回到对学生管理的界面 2.回到管理员界面 3.退出):");
scanf("%d",&j);
if(j==1)
to_student(p1,p2,Admin);
if(j==2)
adminstrator(p1,p2,Admin);
else
exit(-1);
}
if(save_St->next ==NULL)
{
printf(" 对不起,学号输入错误!");
break;
}
else
save_St=save_St->next ;
}
}
void change_student_information(struct student *St,struct teacher *Te,struct adminstrator *Admin)//改变学生信息
{
int ID,j;
struct student *save_St=St;
struct teacher *save_Te=Te;
struct student *save_S=St;
printf("------------------------------------------------------\n");
printf(" 请输入要修改的学号:");
scanf("%d",&ID);
for(;;)
{
if(ID==St->ID)
{
printf(" 请输入学生的学号:");
scanf("%d",&St->ID );
printf(" 请输入学生的姓名:");
scanf("%s",St->name );
printf(" 请输入学生的密码:");
scanf("%s",St->key );
printf(" 请输入学生的年龄:");
scanf("%d",&St->age );
printf(" 请输入学生的年级:");
scanf("%d",&St->grade );
printf(" 请输入学生的名次:");
scanf("%d",&St->placing );
printf(" 修改学生信息成功!\n");
wb_st(save_S);
printf("请选择下一步操作(1.回到对学生管理的界面 2.回到管理员界面 3.退出):");
scanf("%d",&j);
if(j==1)
to_student(save_St,save_Te,Admin);
if(j==2)
adminstrator(save_St,save_Te,Admin);
else
exit(-1);
}
if(St->next ==NULL)
{
printf(" 对不起,学号输入错误!");
break;
}
else
St=St->next ;
}
}
void delete_student_information(struct student *St,struct teacher *Te,struct adminstrator *Admin)//删除学生信息
{
int ID,j;
struct student *save_St=St;
struct student *p1=St;
struct teacher *save_Te=Te;
struct student *save_s=St;
printf("------------------------------------------------------\n");
printf(" 请输入要删除学生的学号:");
scanf("%d",&ID);
for(;;)
{
if(ID==St->ID )
{
save_St->next =St->next ;
printf("删除学生信息成功!\n");
wb_st(save_s);
printf("请选择下一步操作(1.回到对学生管理的界面 2.回到管理员界面 3.退出):");
scanf("%d",&j);
if(j==1)
to_student(save_s,save_Te,Admin);
if(j==2)
adminstrator(save_s,save_Te,Admin);
else
break;
}
if(St->next ==NULL)
{
printf(" 对不起,学号输入错误!\n");
break;
}
else
{
save_St=St;
St=St->next ;
}
}
}
void add_teacher_information(struct student *St,struct teacher *Te,struct adminstrator *Admin)//增加老师信息
{
int j;
struct student *save_St=St;
struct teacher *save_Te=Te;
struct teacher *p1=Te;
struct teacher *save_T=Te;
for(;;)
{
if(Te->next ==NULL)
break;
else
Te=Te->next;
}
p1=(struct teacher *)malloc(sizeof(struct teacher));
Te->next =p1;
printf("------------------------------------------------------\n");
printf(" 请输入老师的编号:");
scanf("%d",&p1->ID );
printf(" 请输入老师的姓名:");
scanf("%s",p1->name );
printf(" 请输入老师的密码:");
scanf("%s",p1->key );
printf(" 请输入老师授课标号:");
scanf("%d",&p1->symble );
printf(" 请输入老师所授科目:");
scanf("%s",p1->sub );
printf("------------------------------------------------------\n\n");
p1->next =NULL;
wb_te(save_T);
printf("请选择下一步操作(1.回到对老师管理的界面 2.回到管理员界面 3.退出):");
scanf("%d",&j);
if(j==1)
to_teacher(save_St,save_Te,Admin);
if(j==2)
adminstrator(save_St,save_Te,Admin);
else
exit(-1);
}
void look_teacher_information(struct student *St,struct teacher *Te,struct adminstrator *Admin)//查看老师信息
{
int ID,j;
struct student *save_St=St;
struct student *p1=St;
struct teacher *save_Te=Te;
struct teacher *p2=Te;
Te=Te->next ;
printf("------------------------------------------------------\n");
for(;;)
{
printf("编号:%d ",Te->ID);
printf("姓名:%s ",Te->name);
printf("密码:%s ",Te->key);
printf("标号:%d ",Te->symble);
printf("所授科目:%s \n",Te->sub);
if(Te->next ==NULL)
break;
else
Te=Te->next ;
}
printf("-------------------------------------------------------\n");
printf(" 请输入要查找老师的编号:");
scanf("%d",&ID);
for(;;)
{
if(ID==save_Te->ID)
{
printf("学号:%d ",save_Te->ID);
printf("姓名:%s ",save_Te->name);
printf("密码:%s ",save_Te->key);
printf("标号:%d ",save_Te->symble);
printf("所授科目:%s \n",save_Te->sub);
printf("------------------------------------------------------\n");
printf("请选择下一步操作(1.回到对老师管理的界面 2.回到管理员界面 3.退出):");
scanf("%d",&j);
if(j==1)
to_teacher(p1,p2,Admin);
if(j==2)
adminstrator(p1,p2,Admin);
else
exit(-1);
}
if(save_Te->next ==NULL)
{
printf(" 对不起,编号输入错误!");
break;
}
else
save_Te=save_Te->next ;
}
}
void change_teacher_information(struct student *St,struct teacher *Te,struct adminstrator *Admin)//改变老师信息
{
int ID,j;
struct student *save_St=St;
struct teacher *save_Te=Te;
struct teacher *save_T=Te;
printf("------------------------------------------------------\n");
printf(" 请输入要修改的编号:");
scanf("%d",&ID);
for(;;)
{
if(ID==Te->ID)
{
printf(" 请输入老师的编号:");
scanf("%d",&Te->ID );
printf(" 请输入老师的姓名:");
scanf("%s",Te->name );
printf(" 请输入老师的密码:");
scanf("%s",Te->key );
printf(" 请输入老师的标号:");
scanf("%d",&Te->symble );
printf(" 请输入老师所授科目:");
scanf("%s",Te->sub );
printf(" 修改老师信息成功!\n");
wb_te(save_T);
printf("请选择下一步操作(1.回到对老师管理的界面 2.回到管理员界面 3.退出):");
scanf("%d",&j);
if(j==1)
to_teacher(save_St,save_Te,Admin);
if(j==2)
adminstrator(save_St,save_Te,Admin);
else
exit(-1);
}
if(Te->next ==NULL)
{
printf(" 对不起,编号输入错误!");
break;
}
else
Te=Te->next ;
}
}
void delete_teacher_information(struct student *St,struct teacher *Te,struct adminstrator *Admin)//删除老师信息
{
int ID,j;
struct student *save_St=St;
struct student *p1=St;
struct teacher *save_Te=Te;
struct teacher *save_t=Te;
printf("------------------------------------------------------\n");
printf(" 请输入要删除老师的编号:");
scanf("%d",&ID);
for(;;)
{
if(ID==Te->ID )
{
save_Te->next =Te->next ;
printf("删除老师信息成功!\n");
wb_te(save_t);
printf("请选择下一步操作(1.回到对老师管理的界面 2.回到管理员界面 3.退出):");
scanf("%d",&j);
if(j==1)
to_teacher(save_St,save_t,Admin);
if(j==2)
adminstrator(save_St,save_t,Admin);
else
break;
}
if(Te->next ==NULL)
{
printf(" 对不起,编号输入错误!\n");
break;
}
else
{
save_Te=Te;
Te=Te->next ;
}
}
}
,目录
1 需求分析…………………………………………………………3
1.1学生需求……………………………………………………3
1.2老师需求……………………………………………………3
1.3管理员需求…………………………………………………3
1.4使用者需求…………………………………………………3
1.5安全需求……………………………………………………4
2 模块分析…………………………………………………………5
2.1总体模块流程图……………………………………………5
3 详细设计…………………………………………………………6
3.1学生模块……………………………………………………6
3.2教师模块……………………………………………………7
3.3管理员模块…………………………………………………8
心得总结…………………………………………………………… 11
附录………………………………………………………………… 13
1需求分析
1.1学生需求
a) 可以查看自身所有的信息(学号,姓名,密码,年龄,年级,名次,成绩)
b) 仅可以修改自己的密码
c) 选课的权利(Chinese,English,CLanguage)
1.2老师需求
a) 可以修改自己的密码
b) 可以查看和修改他所授科目的班级学生的所受科目的成绩
c) 可以查看所有关于自身的信息(教师编号,教师姓名,教师密码)
1.3管理员需求
对学生
a) 可以添加一个学生的信息(学号不得重复)
b) 可以查看一个学生的所有信息
c) 修改学生的信息: 按照学号,姓名删除(如果重名,打印出所有的同名的学生信息)
d) 删除学生的信息:按照学号,姓名删除(如果重名,打印出所有的同名的学生信息)
对老师
a) 可以添加一个老师的信息(教师编号不得重复)
b) 可以查看一个老师的所有信息
c) 修改老师的信息: 按照教师编号,姓名删除,如果重名,打印出所有同名老师的信息
d) 删除老师的信息: 按照教师编号,姓名删除,如果重名,打印出所有同名老师信息
1.4使用者需求
a) 登录选择(选择学生,老师或管理员)
b) 有好的不同身份(学生,老师,管理员)的登陆界面
c) 简易的操作方式
1.5安全需求
a) 输入密码才可进入学生信息管理系统
b) 密码输入不得回显或者是以*代替输入的字符
c) 密码验证后才能进入系统,但有两次错误的机会,如果连续三次错误将自动退出 程序
d) 密码不能以明文方式写入password.txt中,需要加密
2总体模块分析
2.1总体基本流程图分析
用户选择登录方式,有学生,老师和管理员三种选择。选择登录方式后,输入自己的帐号和密码,帐号输入错误将会提示“账号输入错误,请重新输入”,如果密码输入错误,请重新输入,三次输入错误,系统自动退出。密码输入正确后将进入对应的界面,有不同的功能,执行相应的功能后,有两种选择,分别是回到对应的界面和对出界面。其中管理员有三种选择。对自己,对学生和对老师,管理员可以切换界面,比如可以从对老师管理界面换成对学生管理界面。
3.详细设计模块分析
3.1学生模块主要函数
—void stu_information(struct stu *,int *)
—参数:1学生信息链表的首地址
2该学生的学号
—返回值:无
—功能:查看自己的所有信息
—void choose_course(struct stu *,int *,struct teac *)
—参数:1学生信息链表的首地址
2该学生的学号
3老师信息链表首地址
—返回值:无
—功能:该学生选课
3.2老师模块主要函数
—void teac_information(struct teac *,int *)
—参数:1老师信息链表的首地址
2该老师的编号
—返回值:无
—功能:查看自己的所有信息
—void change_score(struct stu *,struct teac *,int *)
—参数:1学生信息链表的首地址
2老师信息链表的首地址
3老师的编号
—返回值:无
—功能:该老师修改学生成绩
3.3管理员模块主要函数
对学生
—void add_stu_information(struct user *,struct stu *)
—参数:1用户密码链表的首地址
2学生信息链表的首地址
—返回值:无
—功能:管理员添加一个学生信息
—void stu_information(struct stu *)
—参数:学生信息链表的首地址
—返回值:无
—功能:管理员查看学生的所有信息
—void change_stu_information(struct stu *)
—参数:学生信息链表的首地址
—返回值:无
—功能:管理员修改学生信息
—void delete_stu_information(struct user *,struct stu *)
—参数:1用户密码链表的首地址
2学生信息链表的首地址
—返回值:无
—功能:管理员删除学生信息
对老师
—void add_teac_information(struct user *,struct teac *)
—参数:1用户密码链表的首地址
2老师信息链表的首地址
—返回值:无
—功能:管理员添加一个老师信息
—void teac_information(struct teac *)
—参数:老师信息链表的首地址
—返回值:无
—功能:查看老师的所有信息
—void change_teac_information(struct teac *)
—参数:老师信息链表的首地址
—返回值:无
—功能:修改老师的所有信息
—void delete_teac_information(struct user *,struct teac *)
—参数:1用户密码链表的首地址
2老师信息链表的首地址
—返回值:无
—功能:删除老师的所有信息
心得体会
学生管理系统是一功能十分強大的管理系统,它集各种功能用于一身,可以完成教学中的各种操作,如老师对学生的成绩的添加,修改等。学生管理系统功能强大,程序编写也十分复杂,工作量很大,编写需要特别认真。一个小小的失误都可能使程序出现很多的bug。
建立学生管理系统,采用计算机对学生以及老师进行管理,进一步提高办学效益和现代化水平。帮助广大教师提高工作效率,实现学生信息管理工作流程的系统化、规范化和自动化。
这次完成学生管理系统分三步.
(1)是对要写成的学生管理系统做全面的需求分析,即对学生管理系统要使用的编写方法,管理功用,运行方式进行分析,并作出明确的解决方案.针对这次的学生管理系统,它的流程是:以管理员,老师和学生三种方式进入,要有密码认证,错误三次将自动退出.学生进入系统在能查看此学生的各科目的成绩,平均分,还能修改自己的密码以及选课.老师进入系统也能查看对应各位学生的成绩,并能添加,修改学生的成绩,对学生成绩进行总分,平均分的运算,以及修改自己的密码.管理员进入系统分别能对老师和学生进行管理,都有四种功能,分别是添加,查看,修改和删除学生或老师的信息.
(2)是程序的编写.由于学生管理系统的功能十分強大,程序的编写也十分的复杂,所以我们三人一组,一起编写程序,遇到问题是共同解决.程序的编写是一项困难的任务,完成此程序必需运用书中的大部分知识,而且要有清晰的思路,有较強的语言组织能力.这次程序的编写与之前有很大的不同之处,要求我们创建一个工程,包括student.c,teacher.c,admin.c,share.c,share.h.不同程序模块的链接功能.刚开始大家都不熟悉如何创建项目,但随着大家的慢慢熟悉,都能熟练地创建项目并运用.
(3)是程序的检查和调用.程序写完后并不能保证它一定能运行,所以要对它进行调试,发现其中的bug,并作出相应的修改,以完善程序,使其逻辑性,运算能力都符合题目要求,使学生管理系统的运行
程序系统中包括学生模块,教师模块,管理员模块,学生成绩查询时在账号及学号进入界面后能够对其的选修课成绩查询,但是不能修改,可以对自己的密码进行修改。教师可以上传成绩。管理员可以对教师信息,学生信息,课程信息进行修改与添加。但是不能对其成绩进行改变。
学生管理系统,运行,管理员登陆账号为120,密码为123456.在管理员界面可以修改自己的密码.
经过这次开发,我们尽力了从需求分析到成品发布的全部过程。从中我们认识到,要开发一个软件,必须对它所有涉及到的各个方面都要有所了解。关键地方必须熟悉。作为设计者的系统分析阶段,必须对不同模块的联系,工作量有正确的认识才能合理的分配任务。开发者要时刻保持清醒,要有合理的进度和质量的控制,才能保证按时按量的完成任务。
附录(代码)
Share.h
FILE *fp;
FILE *fp1;
FILE *fp2;
/* 学生 */
/*----------------------------------------------------------------------------*/
void student(St,Te,T);//学生模块函数
void st_password(struct student *,struct teacher *);//学生验证密码
void student_information(struct student *,struct teacher *,struct student *);//学生查看自己的信息
void change_student_password(struct student *,struct teacher *,struct student * );//学生修改自己的密码
void choose_course(struct student *,struct teacher *,struct student *);//学生选课
struct student *create_student();//创建学生链表
void wb_st(struct student *);//覆盖学生信息
struct student //学生基本信息
{
int ID;
char name[32];
char key[32];
int age;
int grade;
int placing; //名次
int symble;//学生选课标号
float score[3]; //float[0]为学生自己成绩,float[1]为班级平均成绩,float[2]为所有班级的平均成绩
struct student *next;
};
/*----------------------------------------------------------------------------*/
/* 老师 */
/*----------------------------------------------------------------------------*/
void teacher(St,Te,T);//老师模块函数
void te_password(struct student *,struct teacher *);//老师验证密码
void teacher_information(struct teacher *,struct student *,struct teacher * );//老师查看自己的信息
void change_teacher_password(struct teacher *,struct student *,struct teacher *);//老师修改自己的密码
void change_score(struct student *,struct teacher *,struct teacher *);//老师修改学生的成绩
struct teacher *create_teacher();//创建老师链表
void wb_te(struct teacher *);//覆盖老师信息
struct teacher //老师基本信息
{
int ID;
char name[32];
char key[32];
int symble;//老师授课标号
char sub[32];
struct teacher *next;
};
/*----------------------------------------------------------------------------*/
/* 管理员 */
/*----------------------------------------------------------------------------*/
void adminstrator(St,Te,Admin);//管理者模块函数
void admin_password(struct student *,struct teacher *,struct adminstrator *);//管理员验证密码
void change_adminstrator_password(struct student *,struct teacher *,struct adminstrator *);//管理员修改自己的密码
void to_student(St);//对学生管理
void add_student_information(struct student *,struct teacher *,struct adminstrator *);//管理员添加一个学生
void look_student_information(struct student *,struct teacher *,struct adminstrator *);//管理员查看学生信息
void change_student_information(struct student *,struct teacher *,struct adminstrator *);//管理员修改学生信息
void delete_student_information(struct student *,struct teacher *,struct adminstrator *);//管理员删除学生信息
void to_teacher(Te);//对老师管理
void add_teacher_information(struct student *,struct teacher *,struct adminstrator *);//管理员添加一个老师
void look_teacher_information(struct student *,struct teacher *,struct adminstrator *);//管理员查看老师信息
void change_teacher_information(struct student *,struct teacher *,struct adminstrator *);//管理员修改老师信息
void delete_teacher_information(struct student *,struct teacher *,struct adminstrator *);//管理员删除老师信息
struct adminstrator *create_adminstrator();//创建管理员链表
struct adminstrator //管理员基本信息
{
int ID;
char key[32];
};
/*----------------------------------------------------------------------------*/
main.c
#include <stdio.h>
#include "share.h"
void main()
{
int choose=0;
struct student *St;
struct teacher *Te;
struct adminstrator *Admin;
fp=fopen("student.txt","ab+");
fp1=fopen("teacher.txt","ab+");
fp2=fopen("adminstrator.txt","r");
St=create_student();
Te=create_teacher();
Admin=create_adminstrator();
printf(" 欢迎来到学生选课系统\n");
printf("-------------------------------------------------------\n");
printf(" 1. 学生登录界面\n");
printf(" 2. 老师登录界面\n");
printf(" 3. 管理员登陆界面\n");
printf("-------------------------------------------------------\n");
printf(" 请选择你的登录身份:");
scanf("%d",&choose);
switch(choose)
{
case 1: st_password(St,Te);
break;
case 2: te_password(St,Te);
break;
case 3: admin_password(St,Te,Admin);
break;
}
}
share.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "share.h"
struct student *create_student()
{
struct student *head,*p,*save;
head=(struct student *)malloc(sizeof(struct student));
save=head;
head->ID =119;
strcpy(head->name ,"wangrui");
strcpy(head->key ,"123456");
head->age =18;
head->grade =9;
head->placing =1;
head->symble =0;
head->score [0]=0;
head->score [1]=0;
head->score [2]=0;
for(;;)
{
p=(struct student*)malloc(sizeof(struct student));
fread(p,sizeof(struct student),1,fp);
head->next=p;
head=head->next;
if(p->next ==NULL)
break;
}
head->next =NULL;
return save;
}
struct teacher *create_teacher()
{
struct teacher *head,*p,*save;
head=(struct teacher *)malloc(sizeof(struct teacher));
save=head;
/* head->ID =110;
strcpy(head->name ,"zongyu");
strcpy(head->key ,"123456");
head->symble =0;
strcpy(head->sub ,"chinese");*/
for(;;)
{
p=(struct teacher*)malloc(sizeof(struct teacher));
fread(p,sizeof(struct teacher),1,fp1);
head->next=p;
head=head->next;
if(p->next ==NULL)
break;
}
head->next =NULL;
return save;
}
struct adminstrator *create_adminstrator()
{
struct adminstrator *head;
fp2=fopen("adminstrator.txt","r");
head=(struct adminstrator *)malloc(sizeof(struct adminstrator));
head->ID =120;
//strcpy(head->key ,"123456");
//fprintf(fp2,"%s",head->key);
fscanf(fp2,"%s",&head->key);
return head;
}
student.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "share.h"
void st_password(struct student *St,struct teacher *Te)//学生验证密码
{
int i,n,g;
char j[32],k;
struct student *save_St=St;
struct student *T;
struct teacher *save_Te=Te;
printf(" 请输入您的学号:");
scanf("%d",&i );
for(;;)
{
if(i==St->ID )
{