功能说明:
学生:
姓名 性别 学号 密码 语文 数学 英语
1、第一次登录强制修改密码。
2、查询成绩
排名 不显示姓名和学号。
平均分
最高分
最低分
3、修改密码
4、查看个人信息
5、三次密码错误锁定帐号,由教师解锁
教师:
姓名 性别 工号 密码
1、第一次登录强制修改密码。
2、添加学生(学生的学号自动生成)
单个添加
批量导入
3、删除学生
输入两人次学号确定
删除的学生要记录保存在已退学的文件中
4、查找学生
按姓名查找
按学号查找
5、修改学生信息
修改学生基础信息
修改学生成绩
6、录入学生成绩
单个录入
批量导入
7、重置学生密码
8、显示所有在校学生信息
9、显示所有退出学生信息
10、三次密码错误锁定帐号,由校长解锁
校长:
admin
1、第一次登录强制修改密码。
2、能重置自己的密码
3、能重置教师密码
4、添加教师
5、删除教师
6、显示所有在职教师
7、显示所有离职教师
操作说明:
1.同一目录下新建一个data.txt文档存储数据.
2.注意操作名字密码时不要越界.
代码:*
#include <stdio.h>
#include <stdlib.h>
#include <getch.h>
#include <string.h>
//学生结构体
typedef struct Stu
{
char name[20];
char sex;
int num;
char password[7];
int chinese;
int math;
int english;
int lock;
}Stu;
//离开学生结构体
typedef struct Str
{
char name[20];
char sex;
int num;
}Str;
//设计老师的结构体
typedef struct Tch
{
char name[20];
char sex;
int num;
char password[7];
int lock;
}Tch;
//设计离职老师的结构体
typedef struct Tch_exit
{
char name[20];
char sex;
int num;
}Tch_exit;
Stu stu[100];//学生
Str str[100];//离开学生
Tch ste[100];//教师
Tch_exit stb[100];//离职教师
int count=0;
int cnt=0;
int a=0;//记录教师数
int b=0;//记录离职教师数
char master_password[20];
// 按任意按键继续
void anykey_continue(void)
{
puts("按任意按键继续...");
stdin->_IO_read_ptr = stdin->_IO_read_end;
getch();
}
// 显示提示信息几秒
void show_msg(const char* msg,float sec)
{
printf("%s",msg);
fflush(stdout);
usleep(sec*1000000);
}
//学生
void list()
{
for(int i = 0;i<100;i++)
{
if(stu[i].sex)
{
printf("姓名:%s 性别:%s 学号:%d 语文:%d 数学:%d 英语:%d\n",stu[i].name,'w' == stu[i].sex?"女":"男",stu[i].num,stu[i].chinese,stu[i].math,stu[i].english);
}
}
anykey_continue();
}
void find()
{
int max=0,min=100;
double avg=0;
printf("请输入学号:\n");
int number;
scanf("%d",&number);
int i=0;
for(i=0;i<100;i++)
{
if(stu[i].num==number)
{
printf("语文:%d数学:%d英语:%d\n",stu[i].chinese,stu[i].math,stu[i].english);
break;
}
}
if(i==99)
{
printf("输入有误,请重新输入\n");
anykey_continue();
return;
}
for(int i=0;i<100;i++)
{
if(stu[i].sex)
{
if(stu[i].chinese>max)
{
max=stu[i].chinese;
}
if(stu[i].chinese<min)
{
min=stu[i].chinese;
}
avg=stu[i].chinese+avg;
}
}
printf("语文 最高分: %d 最低分:%d 平均分:%f\n",max,min,avg/100);
max=0;
min=100;
avg=0;
//数学
for(int i=0;i<100;i++)
{
if(stu[i].sex)
{
if(stu[i].math>max)
{
max=stu[i].math;
}
if(stu[i].chinese<min)
{
min=stu[i].math;
}
avg=stu[i].math+avg;
}
}
printf("数学 最高分: %d 最低分:%d 平均分:%f\n",max,min,avg/100);
//英语
max=0;
min=100;
avg=0;
for(int i=0;i<100;i++)
{
if(stu[i].english)
{
if(stu[i].english>max)
{
max=stu[i].english;
}
if(stu[i].english<min)
{
min=stu[i].english;
}
avg=stu[i].english+avg;
}
}
printf("英语 最高分: %d 最低分:%d 平均分:%f\n",max,min,avg/100);
anykey_continue();
}
void change()
{
printf("请输入你的学号:\n");
int number;
scanf("%d",&number);
for(int i=0;i<100;i++)
{
if(stu[i].sex)
{
if(stu[i].num==number)
{
printf("请输入重置后的密码");
char a[20]={};
scanf("%s",a);
strcpy(stu[i].password,a);
printf("重置成功!\n");
anykey_continue();
return;
}
else
{
printf("查无此人,检查查询条件\n");
anykey_continue();
return;
}
}
}
}
//教师
void add()
{
int a;
printf("请输入添加的学生个数:\n");
scanf("%d",&a);
for(int i=0;i<a;i++)
{
int j=0;
while(stu[j].sex) j++;
printf("请输入学生姓名性别学号:\n");
scanf("%s%s%d",stu[j].name,&stu[j].sex,&stu[j].num);
cnt++;
anykey_continue();
}
}
void del()
{
printf("请输入要删除学生姓名:\n");
char key[20] = {};
scanf("%s",key);
for(int i = 0; i<100 ;i++)
{
if(stu[i].sex)
{
if(!strcmp(key,stu[i].name))
{
printf("删除%s %s %d成功\n",stu[i].name,'w'==stu[i].sex?"女":"男",stu[i].num);
int j=0;
while(str[j].sex) j++;
strcpy(str[j].name,stu[i].name);
strcpy(&str[j].sex,&stu[i].sex);
//strcpy(&str[j].num,&stu[i].num);
str[j].num=stu[i].num;
stu[i].sex = 0;
cnt--;
anykey_continue();
return;
}
}
}
show_msg("没找到该学生,检查删除条件",1.5);
}
void found()
{
char name[20];
printf("请输入要查询的姓名:\n");
scanf("%s",name);
for(int i=0;i<100;i++)
{
if(stu[i].sex)
{
if(!strcmp(stu[i].name,name))
{
printf("%s %s %d \n",stu[i].name,'w'==stu[i].sex?"女":"男",stu[i].num);
anykey_continue();
return;
}
}
}
printf("查无此人\n");
anykey_continue();
}
void modify()
{
char key[20] = {};
printf("请输入要修改的学生姓名:\n");
scanf("%s",key);
for(int i=0;i<100;i++)
{
if(stu[i].sex)
{
if(!strcmp(key,stu[i].name))
{
printf("请重新输入该学生姓名 性别 学号:\n");
scanf("%s%s%d",stu[i].name,&stu[i].sex,&stu[i].num);
printf("修改成功\n");
anykey_continue();
return;
}
}
}
show_msg("没找该学生,检查查询条件",1.5);
}
void input()
{
int a;
printf("请输入录入的学生个数:\n");
scanf("%d",&a);
for(int i=0;i<a;i++)
{
char name[20]={};
printf("请输入录入学生的姓名\n");
scanf("%s",name);
for(int j=0;j<100;j++)
{
if(!strcmp(stu[j].name,name))
{
printf("请输入成绩语文数学英语:\n");
scanf("%d%d%d",&stu[j].chinese,&stu[j].math,&stu[j].english);
printf("录入成功\n");
anykey_continue();
}
}
}
}
void reset()
{
char name[20];
printf("请输入您想重置的学生姓名:\n");
scanf("%s",name);
for(int i=0;i<100;i++)
{
if(!strcmp(stu[i].name,name))
{
printf("请输入重置后的密码");
char a[10];
scanf("%s",a);
strcpy(stu[i].password,a);
printf("重置成功!\n");
anykey_continue();
return;
}
else
{
printf("没找该学生,检查查询条件\n");
anykey_continue();
return;
}
}
}
void online(void)
{
for(int i = 0;i<100;i++)
{
if(stu[i].sex)
{
printf("%s %s %d %d %d %d\n",stu[i].name,'w'==stu[i].sex?"女":"男",stu[i].num,stu[i].chinese,stu[i].math,stu[i].english);
}
}
anykey_continue();
}
void leave()
{
for(int i=0;i<100;i++)
{
if(str[i].sex)
{
printf("%s %s %d\n",str[i].name,'w'==str[i].sex?"女":"男",str[i].num);
}
}
anykey_continue();
}
//校长
void chongzhi_a(void)//重置自己的密码
{
printf("请输入重置后的密码:\n");
scanf("%s",master_password);
printf("设置成功,请重新登录!\n");
anykey_continue();
}
void chongzhi_j(void)//重置教师的密码
{
char name[20];
printf("请输入需要重置的教师姓名:\n");
scanf("%s",name);
for(int i=0;i<100;i++)
{
if(!strcmp(name,ste[i].name))
{
printf("请输入重置后的教师的密码\n");
ste[i].lock=0;
char a[20];
scanf("%s",a);
strcpy(ste[i].password,a);
printf("重置成功\n");
anykey_continue();
return;
}
else
{
printf("查无此人,检查查询条件\n");
anykey_continue();
return;
}
}
}
void tianjia_js(void)//添加教师
{
for(int i=0;i<100;i++)
{
if(!ste[i].sex)
{
printf("请输入要添加的教师的姓名性别工号\n");
scanf("%s%s%d",ste[i].name,&ste[i].sex,&ste[i].num);
a++;
printf("添加成功\n");
anykey_continue();
return;
}
}
printf("人数已满,请升级\n");
anykey_continue();
}
void shanchu_js(void)//删除教师
{
char name[20]={};
printf("请输入删除的教师的姓名\n");
scanf("%s",name);
for(int i=0;i<100;i++)
{
if(!strcmp(name,ste[i].name))
{
printf("删除成功\n");
int j=0;
while(stb[j].sex) j++;
strcpy(stb[j].name,ste[i].name);
strcpy(&stb[j].sex,&ste[i].sex);
//strcpy(&stb[j].num,&ste[i].num);
stb[j].num=ste[i].num;
ste[i].sex=0;
a--;
anykey_continue();
return;
}
}
printf("查无此人,检查查询条件\n");
anykey_continue();
}
void xianshi_zxjs(void)//显示所有在校教师
{
for(int i=0;i<100;i++)
{
if(ste[i].sex)
{
printf("%s %s %d\n",ste[i].name,'w'==ste[i].sex?"女":"男",ste[i].num);
}
}
anykey_continue();
return;
}
void xianshi_txjs(void)//显示所有退休教师
{
for(int i=0;i<100;i++)
{
if(stb[i].sex)
{
printf("%s %c %d\n",stb[i].name,stb[i].sex,stb[i].num);
}
}
anykey_continue();
return;
}
void master(void)
{
int cnt=0;
char password[20];
if(0 == master_password[0])
{
printf("这是您第一次登录,请设置您的密码:\n");
scanf("%s",master_password);
printf("设置成功,请重新登录!\n");
anykey_continue();
}
else
{
while(cnt<3)
{
printf("请输入您的密码:\n");
scanf("%s",password);
if(!strcmp(password,master_password))
{
printf("密码正确!\n");
anykey_continue();
for(;;)
{
system("clear");
printf("-------------------------------\n");
printf(" 1、重置密码\n");
printf("-------------------------------\n");
printf(" 2、重置教师密码\n");
printf("-------------------------------\n");
printf(" 3、添加教师\n");
printf("-------------------------------\n");
printf(" 4、删除教师\n");
printf("-------------------------------\n");
printf(" 5、显示所有在职教师\n");
printf("-------------------------------\n");
printf(" 6、显示所有离职教师\n");
printf("-------------------------------\n");
printf(" 7、退出管理员模式\n");
printf("-------------------------------\n");
switch(getch())
{
case '1': chongzhi_a();break;//重置自己的密码
case '2': chongzhi_j();break;//重置教师的密码
case '3': tianjia_js();break;//添加教师
case '4': shanchu_js();break;//删除教师
case '5': xianshi_zxjs();break;//显示所有在校教师
case '6': xianshi_txjs();break;//显示所有退休教师
case '7':return;
}
}
}
else
{
printf("密码错误,请重试!\n");
cnt++;
anykey_continue();
}
}
printf("你已三次输错密码,请想清楚后重试\n");
anykey_continue();
}
}
void teacher()
{
int cnt=0;
char name[10];
char password[7];
printf("请输入您的姓名\n");
scanf("%s",name);
for(int i=0;i<100;i++)
{
if(ste[i].sex)
{
if(!strcmp(ste[i].name,name))
{
if(ste[i].lock==1)
{
printf("帐号已锁定,请解锁\n");
anykey_continue();
return;
}
if(ste[i].password[0])
{
while(cnt<3)
{
printf("请输入您的密码\n");
scanf("%s",password);
if(!strcmp(password,ste[i].password))
{
printf("密码正确!\n");
for(;;)
{
system("clear");
printf("-------------------------------\n");
printf("1、添加学生\n");
printf("-------------------------------\n");
printf("2、删除学生\n");
printf("-------------------------------\n");
printf("3、查找学生\n");
printf("-------------------------------\n");
printf("4、修改学生信息\n");
printf("-------------------------------\n");
printf("5、录入学生成绩\n");
printf("-------------------------------\n");
printf("6、重置学生密码\n");
printf("-------------------------------\n");
printf("7、显示所有在校学生信息\n");
printf("-------------------------------\n");
printf("8、显示所有退出学生信息\n");
printf("-------------------------------\n");
printf("0、退出系统\n");
printf("-------------------------------\n");
switch(getch())
{
case '1':add();break;
case '2':del();break;
case '3':found();break;
case '4':modify();break;
case '5':input();break;
case '6':reset();break;
case '7':online();break;
case '8':leave();break;
case '0':return;
}
}
}
else
{
printf("密码错误!\n");
cnt++;
}
}
ste[i].lock=1;
printf("帐号已锁定,请解锁\n");
anykey_continue();
return;
}
else
{
printf("这是您第一次登录,请设置您的密码!:\n");
scanf("%s",ste[i].password);
printf("设置成功!请重新登录!\n");
anykey_continue();
return;
}
}
}
}
//若直至退出循环仍未找到该用户名,则此人尚未录入
printf("查无此人!\n");
anykey_continue();
}
void sTudent()
{
int cnt=0;
char name[20];
char password[7];
printf("请输入您的姓名\n");
scanf("%s",name);
for(int i=0;i<100;i++)
{
if(stu[i].sex)
{
if(!strcmp(stu[i].name,name))
{
if(stu[i].lock==1)
{
printf("帐号已锁定,请解锁\n");
anykey_continue();
return;
}
if(stu[i].password[0])
{
while(cnt<3)
{
printf("请输入您的密码\n");
scanf("%s",password);
if(!strcmp(password,stu[i].password))
{
printf("密码正确!\n");
for(;;)
{
system("clear");
printf("-------------------------------\n");
printf(" 1、查询成绩\n");
printf("-------------------------------\n");
printf(" 2、修改密码\n");
printf("-------------------------------\n");
printf(" 3、查询个人信息\n");
printf("-------------------------------\n");
printf(" 0、退出系统\n");
printf("-------------------------------\n");
switch(getch())
{
case '1':find(); break;
case '2':change();break;
case '3':list();break;
case '0':return ;
}
}
}
else
{
printf("密码错误!\n");
cnt++;
}
}
printf("帐号已锁定,请解锁\n");
stu[i].lock=1;
anykey_continue();
return;
}
else
{
printf("这是您第一次登录,请设置您的密码!:\n");
scanf("%s",stu[i].password);
printf("设置成功!请重新登录!\n");
anykey_continue();
return;
}
}
}
}
//若直至退出循环仍未找到该用户名,则此人尚未录入
printf("查无此人!\n");
anykey_continue();
}
int main(int argc,const char* argb[])
{
FILE *fp;
fp=fopen("data.txt","r");
fread(master_password,sizeof(master_password),1,fp);
fread(ste,sizeof(ste),1,fp);
fread(stb,sizeof(stb),1,fp);
fread(stu,sizeof(stu),1,fp);
fread(str,sizeof(str),1,fp);
fclose(fp);
for(;;)
{
system("clear");
printf("-----------------------------\n");
printf(" 欢迎使用学生管理系统!\n");
printf("-----------------------------\n");
printf(" 1、校长系统\n");
printf("-----------------------------\n");
printf(" 2、教师系统\n");
printf("-----------------------------\n");
printf(" 3、学生系统\n");
printf("-----------------------------\n");
printf(" 0、退出系统\n");
printf("-----------------------------\n");
switch(getch())
{
case '1':master();break;
case '2':teacher();break;
case '3':sTudent();break;
case '0':
fp=fopen("data.txt","w");
fwrite(master_password,sizeof(master_password),1,fp);
fwrite(ste,sizeof(ste),1,fp);
fwrite(stb,sizeof(stb),1,fp);
fwrite(stu,sizeof(stu),1,fp);
fwrite(str,sizeof(str),1,fp);
fclose(fp);
return 0;
}
}
}