学生成绩管理系统
PS.上周和同学一起写了一个学生成绩管理系统,可读可写该有的功能都有,就差个图形化界面就可以送给学校用了。
主要功能
1.学生能够登入系统查询语文、数学、英语三科成绩,及三科的平均分、总分、排名。
2.教师能够管理学生、录入学生考试成绩。
3.管理员能够管理教师,超级管理员有且只有一个,只为管理普通管理员。
4.除超级管理员外,所以用户连续登入三次账号被锁定,需要上级用户才能解锁。
5.除超级管理员外,所有用户ID要求有序且唯一。
6.除超级管理员外,所有用户登入必须修改密码。
编写代码前的准备
1.分析整个系统功能的实现
首先我们定义了3个结构体,分别代表学生,老师,和管理员。代码如下
struct Admin
{
int number;
char name[20];
char code[20];
int year;
int work_year;
char sex;
char state;
};
struct Teacher
{
int number;
char name[20];
char sex;
int year;
int work_year;
char code[20];
char state;
};
struct Student
{
char code[20];
char name[20];
int number;
int year;
int math;
int English;
int chinese;
char sex;
char state;
};
考虑到我们可能会经常用到某些函数,我们决定先写出来放在一个公共的头文件中。
第一个函数 清理输入缓冲区 由于scanf和gets经常会出bug我们决定自己写一个输入函数。
void clear_stdin(void)
{
stdin->_IO_read_ptr=stdin->_IO_read_end;
}
har* get_str(char* str,size_t size)
{
if(NULL == str) return str;
clear_stdin();
fgets(str,size,stdin);
if(size-1 == strlen(str))
{
if('\n'==str[size-2])
str[size-2]= '\0';
else
clear_stdin();
}
else
str[strlen(str)-1]='\0';
}
接下来考虑到我们有3个界面,老师学生还有管理员都需要账号密码登入,所以我们又写了一个相对隐蔽的密码输入函数和密码规则函数。
int password_rule(char *str)
{
int x=strlen(str);
if(x<6 || x>10)
return 0;
for(int i=0;str[i];i++)
{
if(str[i]<'0' || str[i]>'9')
return 0;
}
return 1;
}
void password_input(char* str)
{
for(int i=0;i<20;i++)
{
str[i]=getch();
if(i>0&&127 == str[i])
{
i-=2;
printf("\b \b");
continue;
}
if(127 == str[i])
{
i--;
continue;
}
if('\n'==str[i])
{
str[i]='\0';
break;
}
putchar('*');
}
}
最后我们添加了一些管理系统中常用的函数
void anykey_continue(void)
{
puts("按任意键返回......");
getch();
}
void show_msg(char* msg,int sec,int color)
{
if(0==color)
printf("\n\033[01;31m%s\n\033[00m\n",msg);
if(1==color)
printf("\n\033[01;32m%s\n\033[00m\n",msg);
if(2==color)
printf("\n\033[01;33m%s\n\033[00m\n",msg);
sleep(sec);
}
主界面
void interface(void);
void student_interface(void);
void teacher_interface(void);
void administratorsr_interface(void);
void super_administrators_interface(void);
int cmp_stu_num(int num);
int cmp_stu_code(int num,char *str);
int cmp_tea_num(int num);
int cmp_tea_code(int num,char *str);
int cmp_adm_num(int num);
int cmp_adm_code(int num,char *str);
void student_interface_son(int i);
int cmp_stu_code(int num,char *str)
{
if(num<0) return 0;
int i=strcmp(str,student[num].code);
if(i==0) return 1;
else return 0;
}
int cmp_stu_num(int num)
{
for(int i=0;student[i].number;i++)
{
if(student[i].number==num)
return i;
}
return -1;
}
int cmp_tea_code(int num,char *str)
{
if(num<0) return 0;
int i=strcmp(str,teacher[num].code);
if(i==0) return 1;
else return 0;
}
int cmp_tea_num(int num)
{
for(int i=0;teacher[i].number;i++)
{
if(teacher[i].number==num)
return i;
}
return -1;
}
int cmp_adm_code(int num,char *str)
{
if(num<0) return 0;
int i=strcmp(str,admin[num].code);
if(i==0) return 1;
else return 0;
}
int cmp_adm_num(int num)
{
for(int i=0;admin[i].number;i++)
{
if(admin[i].number==num)
return i;
}
return -1;
}
void interface(void)
{
system("clear");
puts("-----指针学生信息管理系统-----");
puts("1.学生入口");
puts("2.教师入口");
puts("3.管理员入口");
puts("5.退出");
}
void student_interface(void)
{
system("clear");
puts("----------学生登录----------");
puts("1.登入学生成绩查询系统");
puts("2.返回主界面");
int stu_num=0;
char stu_code[20];
int index=0;
switch(getch())
{
case 49:
while(1)
{
system("clear");
puts("-----登入学生成绩查询系统-----");
puts("1.输入账号密码:");
puts("2.退出");
switch(getch())
{
case 49:printf("请输入账号:");
scanf("%d",&stu_num);
printf("请输入密码:");
getch();
password_input(stu_code);
int i=cmp_stu_num(stu_num);
if(-1==i)
{
show_msg("账号不存在!",1,0);
continue;
}
if(student[i].state=='1')
{
show_msg("该账号已经被冻结!",1,0);
return;
}
if(student[i].state=='2')
{
show_msg("您已离校!无法登入!",1,0);
return;
}
if(cmp_stu_code(i,stu_code))
{
system("clear");
printf("%s同学,欢迎你!\n",student[i].name);
sleep(2);
student_interface_son(i);
index=0;
}
else if(2==index)
{
show_msg("你的账号已经被锁定",1,0);
student[i].state='1';
anykey_continue();
return;
}
else
{
printf("\n\033[01;33m你还剩%d次机会!\n\033[00m\n",2-index);
index++;
anykey_continue();
};
;break;
case 50:return;
}
}
;break;
case 50:return;break;
}
}
void teacher_interface(void)
{
system("clear");
puts("----------教师登录----------");
puts("1.登入教师管理系统");
puts("2.返回主界面");
int tea_num=0;
char tea_code[20];
int index=0;
switch(getch())
{
case 49:
while(1)
{
system("clear");
puts("-----登入教师管理系统-----");
puts("1.输入账号密码:");
puts("2.退出");
switch(getch())
{
case 49:printf("请输入教师工号:");
scanf("%d",&tea_num);
printf("请输入密码:");
getch();
password_input(tea_code);
int i=cmp_tea_num(tea_num);
if(-1==i)
{
show_msg("账号不存在!",1,0);
continue;
}
if(teacher[i].state=='1')
{
show_msg("该账号已经被冻结!",1,0);
return;
}
if(cmp_tea_code(i,tea_code))
{
system("clear");
printf("%s老师,欢迎您!\n",teacher[i].name);
sleep(2);
teacher_interface_son(i);
index=0;
}
else if(2==index)
{
show_msg("你的账号已经被锁定",1,0);
teacher[i].state='1';
anykey_continue();
return;
}
else
{
printf("\n\033[01;33m你还剩%d次机会!\n\033[00m\n",2-index);
index++;
anykey_continue();
};
;break;
case 50:return;
}
}
;break;
case 50:return;break;
}
}
void administratorsr_interface(void)
{
system("clear");
puts("----------管理员登录----------");
puts("1.登入管理员管理系统");
puts("2.返回主界面");
int adm_num=0;
char adm_code[20];
int index=0;
switch(getch())
{
case 49:
while(1)
{
system("clear");
puts("-----登入管理员管理系统-----");
puts("1.输入账号密码:");
puts("2.退出");
switch(getch())
{
case 49:printf("请输入管理员工号:");
scanf("%d",&adm_num);
printf("请输入密码:");
getch();
password_input(adm_code);
int i=cmp_adm_num(adm_num);
if(-1==i)
{
show_msg("账号不存在!",1,0);
anykey_continue();
continue;
}
if(admin[i].state=='1')
{
show_msg("该账号已经被冻结!",1,0);
anykey_continue();
return;
}
if(cmp_adm_code(i,adm_code))
{
system("clear");
printf("%s管理员,欢迎您!\n",admin[i].name);
sleep(2);
admin_interface_son(i);
index=0;
}
else if(2==index)
{
show_msg("你的账号已经被锁定",1,0);
admin[i].state='1';
anykey_continue();
return;
}
else
{
printf("\n\033[01;33m你还剩%d次机会!\n\033[00m\n",2-index);
index++;
anykey_continue();
};
;break;
case 50:return;
}
}
;break;
case 50:return;break;
}
}
void super_administrators_interface(void)
{
while(1)
{
system("clear");
puts("1.请输入指令:");
puts("2.退出");
switch(getch())
{
case 49:system("clear");
puts("输入口令:");
char sup_adm_mima[30]={};
password_input(sup_adm_mima);
int index=strcmp(sup_adm_mima,"asdfghjkl123456789");
if(index==0)
{
show_msg("登入成功!!",1,0);
super_administrators_interface_son();
}
else
{
anykey_continue();
return;
};break;
case 50:return;
}
}
}
教师界面
int _find_num( int key);
char *_find_name(char* name,char* key);
void _show_stu(int key,int b);
void add_stu_more(void);
void add_stu(void);
void del_stu(void);
void modify_stu(void);
void reset_code(void);
void unlock_account(void);
void find_name_stu(void);
void show_01_stu(void);
void show_2_stu(void);
void add_score_more(void);
void add_score(void);
void modify_score(void);
void sort_score(void);
void find_name_num_score(void);
void teacher_interface_son(int i);
void student_achievement_management(void);
void student_information_management(void);
void change_tea_password(int i);
int _find_num( int key)
{
for(int i=0 ;i<stu_count;i++)
{
if(student[i].number==key && student[i].state!= '2')
{
return i;
}
}
return -1;
}
char *_find_name(char* name,char* key)
{
int count=0;
for(int i=0;i<stu_count;i++)
{
if(0==strcmp(student[i].name,name) && (student[i].state=='0'|| student[i].state=='1'))
{
key[count]=i+'0';
count++;
}
}
key[count]='\0';
return key;
}
void _show_stu(int key,int b)
{
system("clear");
printf("学号:%4d ",student[key].number);
printf("性别:%3s ",'1'==student[key].sex?"男":"女");
printf("姓名:%4s ",student[key].name);
if(b==1)
{
printf("语文:%4d ",student[key].chinese);
printf("数学:%4d ",student[key].math);
printf("英语:%4d ",student[key].English);
}
printf("\n");
sleep(1);
}
void add_stu_more(void)
{
system("clear");
puts("---------导入学生---------");
FILE* fp=fopen("add_stu.txt","r");
if(NULL==fp)
{
perror("fopen");
return ;
}
while(1)
{
int num=100000;
stu_count++;
fscanf(fp,"%s %d %c",student[stu_count-1].name,&student[stu_count-1].year,&student[stu_count-1].sex);
if(feof(fp)==1)
{
stu_count--;
break;
}
student[stu_count-1].number=num+stu_count;
strcpy(student[stu_count-1].code,"123456");
student[stu_count-1].state='0';
}
fclose(fp);
show_msg("添加成功!按任意键返回!",1,1);
getch();
}
void add_stu(void)
{
system("clear");
printf("----------增加学生---------\n");
stu_count++;
int num=100000;int sex=0;
student[stu_count-1].number=num+stu_count;
strcpy(student[stu_count-1].code,"123456");
printf("请输入姓名:\n");
gets(student[stu_count-1].name);
while(1)
{
printf("请输入性别1.男 2.女\n");
sex=getch();
if(sex==49||sex==50)
{
printf("%s\n",sex==49?"男":"女");
student[stu_count-1].sex=sex;
break;
}
else
show_msg("性别输入错误!",1,0);
}
student[stu_count-1].state='0';
printf("请输入出生年份:\n");
scanf("%d",&student[stu_count-1].year);
show_msg("添加成功!",1,1);
sleep(1);
}
void del_stu(void)
{
system("clear");
int key=0;int num=0;int yes;
printf("----------删除学生---------\n");
printf("请输入需删除学生的学号\n");
while(1)
{
scanf("%d",&key);
getchar();
num=_find_num(key);
if(-1==num)
{
show_msg("该学生学号不存在!",1,0);
show_msg("是否重新输入?y/n",1,2);
yes=getch();
if(121==yes || 89==yes)
{ continue; }
else
{ break; }
}
else
{
_show_stu(num,0);
show_msg("是否继续删除?y/n",1,2);
yes=getch();
if(yes==121 || yes==89)
{
student[num].state='2';
show_msg("删除成功!",1,1);
break;
}
else
{
printf("输入学号:\n");
}
}
}
sleep(1);
}
void modify_stu(void)
{
system("clear");
int key=0;int num=0;char name[20];int year=0;
printf("----------修改信息---------\n");
printf("请输入需修改学生的学号\n");
scanf("%d",&key);
getchar();
num=_find_num(key);
if(-1==num)
show_msg("该学生学号不存在!",1,0);
else
{
printf("输入修改的姓名:\n");
strcpy(student[num].name,gets(name));
printf("输入出生年份:\n");
scanf("%d",&year);
student[num].year=year;
show_msg("修改成功!",1,1);
}
sleep(1);
}
void reset_code(void)
{
system("clear");
int key=0;int num=0;
printf("----------重置密码----------\n");
printf("请输入需要重置密码学生的学号\n");
scanf("%d",&key);
getchar();
num=_find_num(key);
if(-1==num)
show_msg("该学生学号不存在!",1,0);
else
{
strcpy(student[num].code,"123456");
show_msg("修改成功!",1,1);
}
sleep(1);
}
void unlock_account(void)
{
system("clear");
int key=0;
printf("----------解锁账号----------\n");
printf("请输入需要解锁账号的学生的学号:\n");
scanf("%d",&key);
getchar();
for(int i=0 ;i<stu_count;i++)
{
if(student[i].number==key && student[i].state == '1')
{
student[i].state= '0';
show_msg("解锁成功!",1,1);
sleep(1);
return;
}
}
show_msg("该账号不存在或未被锁定!",1,0);
show_msg("任意键结束显示",1,2);
getch();
}
void find_name_stu(void)
{
system("clear");
char key[100] ;char name[20];int num=0;
printf("----------按姓名查找----------\n");
while(1)
{
printf("请输入需要查找人姓名:\n");
gets(name);
_find_name(name,key);
num=strlen(key);
if(0==num)
{
show_msg("查无此人!",1,0);
anykey_continue();
break;
}
for(int i=0;i<num;i++)
{
printf("学号:%4d ",student[key[i]-'0'].number);
printf("性别:%3s ",'1'==student[key[i]-'0'].sex?"男":"女");
printf("姓名:%4s \n",student[key[i]-'0'].name);
}
show_msg("是否结束查找?y/n",1,2);
num=getch();
if(num==121 ||num==89)
break;
}
}
void show_01_stu(void)
{
system("clear");
char key[500];
printf("----------显示在校学生---------\n");
int num=0;
for(int i=0;i<stu_count;i++)
{
if(student[i].state!='2')
{
key[num]=i+'0';
num++;
}
}
for(int i=0;i<num;i++)
{
printf("学号:%4d ",student[key[i]-'0'].number);
printf("性别:%3s ",'1'==student[key[i]-'0'].sex?"男":"女");
printf("姓名:%4s \n",student[key[i]-'0'].name);
}
show_msg("任意键结束显示!",1,2);
getch();
}
void show_2_stu(void)
{
system("clear");
char key[500];int num=0;
printf("----------显示离校学生---------\n");
for(int i=0;i<stu_count;i++)
{
if(student[i].state=='2')
{
key[num]=i+'0';
num++;
}
}
for(int i=0;i<num;i++)
{
printf("学号:%4d ",student[key[i]-'0'].number);
printf("性别:%3s ",'1'==student[key[i]-'0'].sex?"男":"女");
printf("姓名:%4s \n",student[key[i]-'0'].name);
}
show_msg("任意键结束显示",1,2);
getch();
}
void student_information_management(void)
{
while(1)
{
system("clear");
printf("-------------学生信息管理--------------\n");
puts("0.批量导入学生");
puts("1.添加学生");
puts("2.删除学生");
puts("3.修改学生基本信息");
puts("4.重置学生密码");
puts("5.解锁学生账号");
puts("6.根据姓名查询学生基本信息");
puts("7.显示所有在读学生");
puts("8.显示所有退学学生");
puts("9.返回上层");
switch(getch())
{
case 48: add_stu_more();break;
case 49: add_stu();break;
case 50: del_stu();break;
case 51: modify_stu();break;
case 52: reset_code();break;
case 53: unlock_account();break;
case 54: find_name_stu();break;
case 55: show_01_stu();break;
case 56: show_2_stu();break;
case 57: return;
}
}
}
void add_score_more(void)
{
system("clear");
puts("---------导入学生成绩---------");
FILE* fp=fopen("add_score.txt","r");
int n=0;
if(NULL==fp)
{
perror("fopen");
return ;
}
while(1)
{
fscanf(fp,"%d%d%d%d",&score[n].num,&score[n].chinese,&score[n].math,&score[n].English);
if(feof(fp)==1)
{
break;
}
n++;
}
fclose(fp);
for(int i=0;i<n;i++)
{
for(int j=0;j<stu_count;j++)
{
if(score[i].num==student[j].number)
{
student[j].chinese=score[i].chinese;
student[j].math=score[i].math;
student[j].English=score[i].English;
}
}
}
show_msg("添加成功!按任意键返回!",1,1);
getch();
}
void add_score(void)
{
system("clear");
int key=0;int num=0;int yes=0;
while(1)
{
system("clear");
puts("----------成绩录入----------");
printf("请输入需录入成绩学生的学号\n");
scanf("%d",&key);
getchar();
num=_find_num(key);
if(-1==num)
{
show_msg("该学生学号不存在!",1,0);
show_msg("是否重新输入?y/n",1,2);
yes=getch();
if(121==yes || 89==yes)
{ continue; }
else
{ break; }
}
else
{
_show_stu(num,1);
puts("请输入语文成绩:");
scanf("%d",&student[num].chinese);
puts("请输入数学成绩: ");
scanf("%d",&student[num].math);
puts("请输入英语成绩:");
scanf("%d",&student[num].English);
getchar();
show_msg("是否继续输入?y/n",1,2);
yes=getch();
if(121==yes || 89==yes)
{ continue; }
else
{ break; }
}
}
sleep(1);
}
void modify_score(void)
{
system("clear");
int key=0;int num=0;int yes=0;
while(1)
{
system("clear");
puts("----------成绩修改----------");
puts("请输入需录入成绩学生的学号");
scanf("%d",&key);
getchar();
num=_find_num(key);
if(-1==num)
{
show_msg("该学生学号不存在!",1,0);
show_msg("是否重新输入?y/n",1,2);
yes=getch();
if(121==yes || 89==yes)
{ continue; }
else
{ break; }
}
else
{
_show_stu(num,1);
puts("请输入语文成绩:");
scanf("%d",&student[num].chinese);
puts("请输入数学成绩: ");
scanf("%d",&student[num].math);
puts("请输入英语成绩:");
scanf("%d",&student[num].English);
getchar();
show_msg("是否继续修改?y/n",1,2);
yes=getch();
if(121==yes || 89==yes)
{ continue; }
else
{ break; }
}
}
}
void find_name_num_score(void)
{
int key=0,yes;
while(1)
{
int num=0;
system("clear");
puts("----------成绩查询----------");
puts("请输入需要查询学生的学号:");
scanf("%d",&key);
getchar();
num=_find_num(key);
if(-1==num)
{
show_msg("该学生学号不存在!",1,0);
show_msg("是否重新输入?y/n,",1,2);
yes=getch();
if(121==yes || 89==yes)
{ continue; }
else
{ break; }
}
else
{
_show_stu(num,1);
show_msg("任意键结束显示!",1,2);
getch();
break;
}
}
}
void sort_score(void)
{
system("clear");
int count_c[500]={},count_m[500]={},count_e[500]={},count[500]={};
for(int i=0;i<stu_count;i++)
{
if(student[i].state!='2')
{
for(int j=0;j<stu_count;j++)
{
if(student[j].state!='2')
{
if(student[j].chinese > student[i].chinese)
count_c[i]++;
if(student[j].math > student[i].math)
count_m[i]++;
if(student[j].English > student[i].English)
count_e[i]++;
if(student[j].chinese+student[j].math+student[j].English > student[i].chinese+student[i].math+student[i].English )
count[i]++;
}
}
}
}
printf(" 学号 姓名 语文排名(语文分数) 数学排名(数学分数) 英语排名(英语分数) 总排名(总分)\n");
for(int i=0;i<stu_count;i++)
{
if(student[i].state!='2')
{
printf("%6d\t",student[i].number);
printf("%s\t",student[i].name);
printf("%6d(%3d)\t",count_c[i]+1,student[i].chinese);
printf("%10d(%3d)\t",count_m[i]+1,student[i].math);
printf("%6d(%3d)\t",count_e[i]+1,student[i].English);
printf("%7d(%3d)\n",count[i]+1,student[i].chinese+student[i].math+student[i].English);
}
}
show_msg("任意键结束显示!",1,2);
getch();
}
void student_achievement_management(void)
{
while(1)
{
system("clear");
printf("------------学生成绩管理---------------\n");
puts("1.单个录入成绩");
puts("2.值导入成绩");
puts("3.修改学生成绩");
puts("4.根据学号或姓名查找成绩");
puts("5.按各科分数或部分排序");
puts("6.返回上层");
switch(getch())
{
case 49: add_score();break;
case 50: add_score_more();break;
case 51: modify_score();break;
case 52: find_name_num_score();break;
case 53: sort_score();break;
case 54: return;
}
}
}
void change_tea_password(int i)
{
while(1)
{
printf("请输入新密码:");
char new_code[20];
password_input(new_code);
if(0==password_rule(new_code))
{
show_msg("密码格式错误",1,2);
continue;
}
if(0==strcmp(new_code,"123456"))
{
show_msg("不能修改为初始密码!",1,2);
continue;
}
strcpy(teacher[i].code,new_code);
puts("输入成功");
anykey_continue();
break;
}
}
void teacher_interface_son(int i)
{
if(0==strcmp(teacher[i].code,"123456"))
{
system("clear");
while(1)
{
show_msg("第一次登入请修改密码,密码不能为初始值",1,2);
printf("请输入新密码:");
char new_code[20];
password_input(new_code);
if(0==password_rule(new_code))
{
show_msg("密码格式错误",1,2);
continue;
}
strcpy(teacher[i].code,new_code);
show_msg("输入成功",1,1);
anykey_continue();
break;
}
}
while(1)
{
system("clear");
printf("--------教师界面--------\n");
printf("工号:%d\n",teacher[i].number);
printf("性别:%s\n",teacher[i].sex=='1'?"男":"女");
printf("姓名:%s\n",teacher[i].name);
printf("年龄:%ld\n",(time(NULL)/(SUM_SEC))+1970-teacher[i].year);
printf("工龄:%ld\n",(time(NULL)/(SUM_SEC))+1970-teacher[i].work_year);
printf("1、学生信息管理:\n");
printf("2、学生成绩管理:\n");
printf("3、修改登入密码:\n");
printf("4、返回主菜单:\n");
switch(getch())
{
case 49:student_information_management();break;
case 50:student_achievement_management();break;
case 51:printf("修改登入密码\n");change_tea_password(i);;break;
case 52:printf("返回主菜单\n");return;break;
}
}
}
学生界面
void total_ranking(int n);
void single_ranking(int n);
void student_interface_son(int i);
void change_stu_password(int i);
void single_ranking(int n)
{
int count_c=1,count_m=1,count_e=1;
for(int i=0;i<500;i++)
{
if(student[i].state=='0')
{
if(student[i].chinese > student[n].chinese)
count_c++;
if(student[i].math > student[n].math)
count_m++;
if(student[i].English > student[n].English)
count_e++;
}
}
printf("语文成绩排名:%d\n",count_c);
printf("数学成绩排名:%d\n",count_m);
printf("英语成绩排名:%d\n",count_e);
}
void total_ranking(int n)
{
int count=1;
for(int i=0;i<500;i++)
{
if(student[i].state=='0')
{
if(student[i].chinese+student[i].math+student[i].English > student[n].chinese+student[n].math+student[n].English )
count++;
}
}
printf("总成绩排名:%d\n",count);
}
void change_stu_password(int i)
{
while(1)
{
printf("请输入新密码:");
char new_code[20];
password_input(new_code);
if(0==password_rule(new_code))
{
show_msg("密码格式错误",1,2);
continue;
}
if(0==strcmp(new_code,"123456"))
{
show_msg("不能修改为初始密码!",1,2);
continue;
}
strcpy(student[i].code,new_code);
show_msg("输入成功!",1,1);
anykey_continue();
break;
}
}
void student_interface_son(int i)
{
if(0==strcmp(student[i].code,"123456"))
{
system("clear");
while(1)
{
puts("第一次登入请修改密码,密码不能为初始值");
printf("请输入新密码:");
char new_code[20];
password_input(new_code);
if(0==password_rule(new_code))
{
show_msg("密码格式错误",1,2);
continue;
}
strcpy(student[i].code,new_code);
show_msg("输入成功!",1,1);
anykey_continue();
break;
}
}
while(1)
{
system("clear");
printf("--------学生界面--------\n");
printf("学号:%d\n",student[i].number);
printf("姓名:%s\n",student[i].name);
printf("性别:%s\n",student[i].sex=='1'?"男":"女");
printf("年龄:%ld\n",(time(NULL)/(SUM_SEC))+1970-student[i].year);
printf("语文成绩:%d\n",student[i].chinese);
printf("数学成绩:%d\n",student[i].math);
printf("英语成绩:%d\n",student[i].English);
printf("平均分:%.2lf\n",(student[i].chinese+student[i].math+student[i].English)/3.0);
printf("总分:%d\n",student[i].chinese+student[i].math+student[i].English);
printf("--------------------\n");
printf("1、查看单科成绩排名:\n");
printf("2、总分成绩排名:\n");
printf("3、修改登入密码:\n");
printf("4、返回主菜单:\n");
printf("--------------------\n");
switch(getch())
{
case 49:printf("*查看单科成绩排名*\n");single_ranking(i);anykey_continue();break;
case 50:printf("*查看总分成绩排名*\n");total_ranking(i);anykey_continue();break;
case 51:printf("修改登入密码\n");change_stu_password(i);;break;
case 52:printf("返回主菜单\n");return ;
}
}
}
管理员界面
void admin_interface_son(int i);
int _find_teacher_num( int key);
char *_find_teacher_name(char* name,char* key);
void _show_teacher(int key,int b);
void add_teacher(void);
void del_teacher(void);
void modify_teacher(void);
void reset_teacher_code(void);
void unlock_teacher_account(void);
void find_teacher_name(void);
void show_01_teacher(void);
void show_2_teacher(void);
void teacher_information_management(void);
void change_adm_password(int i);
int _find_teacher_num( int key)
{
for(int i=0 ;i<teacher_count;i++)
{
if(teacher[i].number==key && teacher[i].state != '2')
{
return i;
}
}
return -1;
}
char *_find_teacher_name(char* name,char* key)
{
int count=0;
for(int i=0;i < teacher_count;i++)
{
if(0==strcmp(teacher[i].name,name) && (teacher[i].state=='0'|| teacher[i].state=='1'))
{
key[count]=i+'0';
count++;
}
}
key[count]='\0';
return key;
}
void _show_teacher(int key,int b)
{
system("clear");
printf("工号:%4d ",teacher[key].number);
printf("性别:%3s ",'1'==teacher[key].sex?"男":"女");
printf("姓名:%4s \n",teacher[key].name);
sleep(1);
}
void add_teacher(void)
{
system("clear");
printf("----------增加教师---------\n");
teacher_count++;
int num=200000,sex=0;
teacher[teacher_count-1].state='0';
strcpy(teacher[teacher_count-1].code,"123456");
teacher[teacher_count-1].number=num+teacher_count;
printf("请输入姓名:\n");
gets(teacher[teacher_count-1].name);
while(1)
{
printf("请输入性别1.男 2.女\n");
sex=getch();
if(sex==49||sex==50)
{
printf("%s\n",sex==49?"男":"女");
teacher[teacher_count-1].sex=sex;
break;
}
else
show_msg("性别输入错误!",1,2);
}
printf("请输入出生年份:\n");
scanf("%d",&teacher[teacher_count-1].year);
printf("请输入参加工作的年份:\n");
scanf("%d",&teacher[teacher_count-1].work_year);
show_msg("添加成功!",1,1);
}
void del_teacher(void)
{
system("clear");
int key=0;int num=0;int yes;
printf("----------删除教师---------\n");
printf("请输入需删除教师的工号\n");
while(1)
{
scanf("%d",&key);
getchar();
num=_find_teacher_num(key);
if(-1==num)
{
show_msg("该教师工号不存在!",1,0);
show_msg("是否重新输入?y/n",1,2);
yes=getch();
if(121==yes || 89==yes)
{ continue; }
else
{ break; }
}
else
{
_show_teacher(num,0);
show_msg("是否继续删除?y/n",1,2);
yes=getch();
if(yes==121 || yes==89)
{
teacher[num].state='2';
show_msg("删除成功!",1,1);
break;
}
else
{
printf("输入工号:\n");
}
}
}
sleep(1);
}
void modify_teacher(void)
{
system("clear");
int key=0;int num=0;char name[20];int year=0;int yes=0;
printf("----------修改信息---------\n");
printf("请输入需修改教师的工号\n");
while(1)
{
scanf("%d",&key);
getchar();
num=_find_teacher_num(key);
if(-1==num)
{
show_msg("该教师工号不存在!",1,0);
show_msg("是否重新输入?y/n",1,2);
yes=getch();
if(121==yes || 89==yes)
{ continue; }
else
{ break; }
}
else
{
printf("输入修改的姓名:\n");
strcpy(teacher[num].name,gets(name));
printf("输入入职年份:\n");
scanf("%d",&year);
teacher[num].year=year;
show_msg("修改成功!",1,1);
break;
}
}
sleep(1);
}
void reset_teacher_code(void)
{
system("clear");
int key=0;int num=0;int yes=0;
printf("----------重置密码----------\n");
printf("请输入需要重置密码教师的工号\n");
while(1)
{
scanf("%d",&key);
getchar();
num=_find_teacher_num(key);
if(-1==num)
{
show_msg("该教师工号不存在!",1,0);
show_msg("是否重新输入?y/n",1,2);
yes=getch();
if(121==yes || 89==yes)
{ continue; }
else
{ break; }
}
else
{
strcpy(teacher[num].code,"123456");
show_msg("修改成功!",1,1);
break;
}
}
sleep(1);
}
void unlock_teacher_account(void)
{
system("clear");
int key=0;
printf("----------解锁账号----------\n");
while(1)
{
printf("请输入需要解锁账号的教师的工号:\n");
scanf("%d",&key);
getchar();
for(int i=0 ;i<teacher_count;i++)
{
if(teacher[i].number==key && teacher[i].state == '1')
{
teacher[i].state= '0';
show_msg("解锁成功!",1,1);
anykey_continue();
return;
}
}
show_msg("查无此人",1,0);
return;
}
}
void find_teacher_name(void)
{
system("clear");
char key[100]={};char name[20];int num=0;
printf("----------按姓名查找----------\n");
while(1)
{
printf("请输入需要查找人姓名:\n");
gets(name);
_find_teacher_name(name,key);
num=strlen(key);
if(num==0)
{
show_msg("查无此人",1,0);
return;
}
for(int i=0;i<num;i++)
{
printf("工号:%4d ",teacher[key[i]-'0'].number);
printf("姓名:%4s ",teacher[key[i]-'0'].name);
printf("性别:%3s \n",'1'==teacher[key[i]-'0'].sex?"男":"女");
}
show_msg("是否结束查找?y/n",1,2);
num=getch();
if(num==121 ||num==89)
{
break;
}
}
}
void show_01_teacher(void)
{
system("clear");
char key[500];int num=0;
printf("----------显示在职教师---------\n");
for(int i=0;i<teacher_count;i++)
{
if(teacher[i].state!='2')
{
key[num]=i+'0';
num++;
}
}
key[num]='\0';
for(int i=0;i<num;i++)
{
printf("工号:%4d ",teacher[key[i]-'0'].number);
printf("姓名:%4s ",teacher[key[i]-'0'].name);
printf("性别:%3s\n",'1'==teacher[key[i]-'0'].sex?"男":"女");
}
show_msg("按任意键继续!",1,2);
getch();
}
void show_2_teacher(void)
{
system("clear");
char key[500];int num=0;
printf("----------显示离职教师---------\n");
for(int i=0;i<teacher_count;i++)
{
if(teacher[i].state=='2')
{
key[num]=i+'0';
num++;
}
}
key[num]='\0';
for(int i=0;i<num;i++)
{
printf("工号:%4d ",teacher[key[i]-'0'].number);
printf("姓名:%4s ",teacher[key[i]-'0'].name);
printf("性别:%3s\n",'1'==teacher[key[i]-'0'].sex?"男":"女");
}
show_msg("按任意键继续!",1,2);
getch();
}
void teacher_information_management(void)
{
while(1)
{
system("clear");
printf("-------------教师信息管理--------------\n");
puts("1.添加教师");
puts("2.删除教师");
puts("3.修改教师基本信息");
puts("4.重置教师密码");
puts("5.解锁教师账号");
puts("6.根据姓名查询教师基本信息");
puts("7.显示所有在职教师");
puts("8.显示所有离职教师");
puts("9.返回上层");
switch(getch())
{
case 49: add_teacher();break;
case 50: del_teacher();break;
case 51: modify_teacher();break;
case 52: reset_teacher_code();break;
case 53: unlock_teacher_account();break;
case 54: find_teacher_name();break;
case 55: show_01_teacher();break;
case 56: show_2_teacher();break;
case 57: return;
}
}
}
void change_adm_password(int i)
{
while(1)
{
printf("请输入新密码:");
char new_code[20];
password_input(new_code);
if(0==password_rule(new_code))
{
show_msg("密码格式错误",1,0);
continue;
}
if(0==strcmp(new_code,"123456"))
{
show_msg("不能修改为初始密码!",1,0);
continue;
}
strcpy(admin[i].code,new_code);
show_msg("输入成功!",1,1);
anykey_continue();
break;
}
}
void admin_interface_son(int num)
{
if(0==strcmp(admin[num].code,"123456"))
{
system("clear");
while(1)
{
puts("第一次登入请修改密码,密码不能为初始值");
printf("请输入新密码:");
char new_code[20];
password_input(new_code);
if(0==password_rule(new_code))
{
show_msg("密码格式错误",1,0);
continue;
}
strcpy(admin[num].code,new_code);
show_msg("输入成功!",1,1);
anykey_continue();
break;
}
}
while(1)
{
system("clear");
printf("--------管理员界面--------\n");
printf("工号:%d\n",admin[num].number);
printf("姓名:%s\n",admin[num].name);
printf("-------------------------\n");
printf("1、教师信息管理:\n");
printf("2、修改登入密码:\n");
printf("3、返回主菜单:\n");
switch(getch())
{
case 49:teacher_information_management();break;
case 50:printf("修改登入密码\n");change_adm_password(num);;break;
case 51:printf("返回主菜单\n");return;break;
}
}
}
超级管理员界面
void adm_add(void);
int adm_sec_num(int num);
void super_administrators_interface_son(void);
int adm_sec_num(int num)
{
for(int i=0;i<adm_count;i++)
{
if(admin[i].state!='2' && num == admin[i].number)
return i;
}
return -1;
}
void replace_adm(void)
{
puts("输入要重置密码的管理员的工号:");
int num=0;
scanf("%d",&num);
getchar();
int index=adm_sec_num(num);
if(-1==index)
{
show_msg("查无此管理员",1,0);
anykey_continue();
}
else
{
strcpy(admin[index].code,"123456");
show_msg("重置密码成功",1,1);
anykey_continue();
}
}
void unlock_adm(void)
{
puts("输入要解锁的管理员的工号:");
int num=0;
scanf("%d",&num);
getchar();
int index=adm_sec_num(num);
if(-1==index)
{
show_msg("查无此管理员",1,0);
anykey_continue();
}
else
{
admin[index].state='0';
show_msg("解锁成功",1,1);
anykey_continue();
}
}
void list_adm(void)
{
system("clear");
for(int i=0;i<adm_count;i++)
{
if(admin[i].state=='2')
continue;
else
printf("姓名:%s 工号:%d\n",admin[i].name,admin[i].number);
}
anykey_continue();
}
void super_administrators_interface_son(void)
{
while(1)
{
system("clear");
puts("1.添加或删除管理员");
puts("2.重置管理员密码");
puts("3.解锁管理员账号");
puts("4.显示所有管理员");
puts("5.返回上级菜单");
switch(getch())
{
case 49:adm_add();;break;
case 50:replace_adm();;break;
case 51:unlock_adm();;break;
case 52:list_adm();;break;
case 53:return;
}
}
}
void adm_add(void)
{
system("clear");
puts("1.添加管理员");
puts("2.删除管理员");
puts("3.返回上级菜单");
while(1)
{
int num=0;
switch(getch())
{
case 49:
system("clear");
printf("----------增加管理员---------\n");
adm_count++;
int num=300000,sex=0;
admin[adm_count-1].state='0';
strcpy(admin[adm_count-1].code,"123456");
admin[adm_count-1].number=num+adm_count;
printf("请输入姓名:\n");
gets(admin[adm_count-1].name);
while(1)
{
printf("请输入性别1.男 2.女\n");
sex=getch();
if(sex==49||sex==50)
{
printf("%s\n",sex==49?"男":"女");
admin[adm_count-1].sex=sex;
break;
}
else
show_msg("性别输入错误!",1,0);
}
printf("请输入出生年份:\n");
scanf("%d",&admin[adm_count-1].year);
show_msg("添加成功!",1,1);
sleep(1);
return;
;break;
case 50:
puts("请输入要删除的管理员的工号:");
scanf("%d",&num);
getchar();
int index=adm_sec_num(num);
if(-1==index)
{
show_msg("查无此管理员!",1,0);
anykey_continue();
return;
}
else
{
admin[index].state='2';
show_msg("删除成功!",1,1);
anykey_continue();
return;
}
;break;
case 51:return;break;
}
}
};