C语言实战学校管理系统之校长篇
此篇代码实现的是学校管理系统校长的主要功能
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <getch.h>
#include "principal.h"
#include "system.h"
#include "teacher.h"
#include "student.h"
char G_pri_sec[50] = "123";
static int find_max_id(void)
{
int sign=0,max=89999999;
for(int i=0;i<TEACHER_ON_MAX;i++)
{
if(G_teacher_on[i].id!=0)
{
if(G_teacher_on[i].id>max)
{
max=G_teacher_on[i].id;
}
sign++;
if(sign>=G_teacher_on_len)
{
break;
}
}
}
sign=0;
for(int i=0;i<TEACHER_OFF_MAX;i++)
{
if(G_teacher_off[i].id!=0)
{
if(G_teacher_off[i].id>max)
{
max=G_teacher_off[i].id;
}
sign++;
if(sign>=G_teacher_off_len)
{
break;
}
}
}
return max;
}
int find_teacher(int id)
{
for(int i=0;i<TEACHER_ON_MAX;i++)
{
if(G_teacher_on[i].id==id)
{
return i;
}
}
return -1;
}
int find_teacher_off(int id)
{
for(int i=0;i<TEACHER_OFF_MAX;i++)
{
if(G_teacher_off[i].id==id)
{
return i;
}
}
return -1;
}
static void code(void)
{
int k = strcmp("123",G_pri_sec);
if(k==0)
{
first_code(k,G_pri_sec);
printf("修改成功\n");
sleep(2);
}
int flag=0;
char ch=0;
char buff[12]={};
while(1)
{
system("clear");
BUFF_CLEAR;
flag=0;
printf("请输入密码\n");
while((ch = getch()) != '\n')
{
if(ch == 127 && flag!=0)
{
flag--;
printf("\b \b");
}else if(flag<12 && ch!=127)
{
buff[flag++] = ch;
putchar('*');
}
}
buff[flag] = '\0';
encryption(1,buff);
if(strcmp(G_pri_sec,Plaintext) == 0)
{
printf("\n登录成功!\n");
sleep(2);
break;
}
else
{
printf("\n密码错误\n");
sleep(1);
}
}
}
void show_teacher_on(void)
{
system("clear");
for(int i =0; i<G_teacher_on_len+G_teacher_off_len; i++)
{
if(G_teacher_on[i].id)
{
printf("姓名: %s\n性别: %c\n工号:%d\n",
G_teacher_on[i].name,G_teacher_on[i].sex,G_teacher_on[i].id);
printf("-------------------\n");
}
}
printf("输入任意键继续..");
BUFF_CLEAR;
getchar();
}
void show_teacher_off(void)
{
system("clear");
for(int i =0; i<G_teacher_off_len; i++)
{
printf("姓名: %s\n性别: %c\n工号:%d\n",
G_teacher_off[i].name,G_teacher_off[i].sex,G_teacher_off[i].id);
printf("-------------------\n");
}
printf("输入任意键继续..");
BUFF_CLEAR;
getchar();
}
void add_teacher(void)
{
BUFF_CLEAR;
system("clear");
int k = 0;
printf("1.单个添加\n2.批量添加\n请输入你的选择:\n");
int ch = 0, next_id = find_max_id();
int back = 0;
while(1)
{
back = scanf("%d", &ch);
if(back == 0 || (ch != 1 && ch!= 2))
{
BUFF_CLEAR;
printf("输入非法!请重新输入\n");
}
else
{
break;
}
}
char n_tea[50] = {};
if(ch == 1)
{
while(G_teacher_on[k].id)
{
if(k<TEACHER_ON_MAX-1)
{
k++;
}
else if(k == TEACHER_ON_MAX-1)
{
printf("系统繁忙..\n");
sleep(2);
return;
}
}
while(1)
{
printf("请输入教师的姓名\n");
fgets_t(n_tea,50);
if(strlen(n_tea)<20)
{
strcpy(G_teacher_on[k].name,n_tea);
break;
}
else
{
printf("名字非法!\n");
}
}
while(1)
{
printf("请输入教师的性别m/w(仅第一个字符有效)\n");
fgets_t(n_tea,50);
if(n_tea[0]=='m' || n_tea[0]=='M' || n_tea[0]=='w' || n_tea[0]=='W')
{
G_teacher_on[k].sex = n_tea[0];
break;
}
else
{
printf("性别非法!\n");
}
}
strcpy(G_teacher_on[k].secret,"123");
G_teacher_on[k].id = ++next_id;
G_teacher_on_len += 1;
printf("添加成功!\n");
}
if(ch == 2)
{
BUFF_CLEAR;
printf("\n请输入需要导入的文件路径,注意:文件格式为姓名 性别\n");
system("ls");
char path[30] = {};
scanf("%s", path);
FILE* frp = fopen(path,"r");
if(frp == NULL)
{
printf("读取文件失败!\n");
sleep(3);
return;
}
int k1 = 0;
Teacher tp = {};
while(fscanf(frp,"%s %c",tp.name,&tp.sex) == 2)
{
strcpy(tp.secret,"123");
tp.id = ++next_id;
while(G_teacher_on[k1].id)
{
if(k1<TEACHER_ON_MAX-1)
{
k1++;
}
else if(k1 == TEACHER_ON_MAX-1)
{
printf("系统繁忙..\n");
sleep(2);
return;
}
}
memcpy(&G_teacher_on[k1],&tp,sizeof(Teacher));
G_teacher_on_len++;
}
fclose(frp);
frp = NULL;
printf("批量导入成功!\n");
}
printf("输入任意建继续..");
BUFF_CLEAR;
getchar();
}
void del_teacher(void)
{
BUFF_CLEAR;
system("clear");
printf("请输入工号:\n");
int num = 0;
while(1 != scanf("%d", &num))
{
BUFF_CLEAR;
printf("输入非法!请重新输入\n");
}
int k = find_teacher(num);
if(k == -1)
{
printf("没有此教师!\n");
sleep(3);
return;
}
printf("请再次输入要删除教师工号:\n");
int num1 = 0;
while(1 != scanf("%d", &num1))
{
BUFF_CLEAR;
printf("输入非法!请重新输入\n");
}
if(num1 != num)
{
printf("输入工号不匹配,请稍后再试..\n");
sleep(3);
return;
}
memcpy(&G_teacher_off[G_teacher_off_len],&G_teacher_on[k],sizeof(Student));
G_teacher_off_len += 1;
G_teacher_on[k].id = 0;
G_teacher_on_len -= 1;
printf("删除成功!\n");
printf("输入任意建继续..");
BUFF_CLEAR;
getchar();
}
void unlock_teacher(void)
{
BUFF_CLEAR;
system("clear");
printf("请输入工号:");
int num = 0;
while(1 != scanf("%d", &num))
{
BUFF_CLEAR;
printf("输入非法!请重新输入\n");
}
int k = find_teacher(num);
if(k == -1)
{
printf("没有此教师!\n");
sleep(3);
return;
}
G_teacher_on[k].flag = 0;
printf("解锁成功!\n");
printf("输入任意建继续..");
BUFF_CLEAR;
getchar();
}
void reset_teacher(void)
{
BUFF_CLEAR;
system("clear");
printf("请输入工号:");
int new_id = 0;
while(1 != scanf("%d", &new_id))
{
BUFF_CLEAR;
printf("输入非法!请重新输入\n");
}
int k = find_teacher(new_id);
if(k == -1)
{
printf("没有此教师!\n");
sleep(3);
return;
}
first_code(0,G_teacher_on[k].secret);
G_teacher_on[k].flag = 0;
printf("重置成功!\n");
printf("输入任意建继续..");
BUFF_CLEAR;
getchar();
}
void reset_me(void)
{
system("clear");
first_code(0,G_pri_sec);
printf("重置成功!\n");
printf("输入任意建继续..");
BUFF_CLEAR;
getchar();
}
void main_principal(void)
{
system("clear");
code();
system("clear");
while(1)
{
BUFF_CLEAR;
system("clear");
printf("---------欢迎进入校长系统---------\n\n");
printf("请选择您需要的功能\n");
printf("1.显示所有在职教师 2.显示所有离职教师\n");
printf("3.添加教师 4.删除教师\n");
printf("5.重置教师密码 6.解锁教师帐号\n");
printf("7.重置自己密码 0.退出系统\n");
int choice = 0;
while(1 != scanf("%d", &choice))
{
BUFF_CLEAR;
printf("输入违法!请重新输入\n");
}
switch(choice)
{
case 1:
show_teacher_on();
break;
case 2:
show_teacher_off();
break;
case 3:
add_teacher();
break;
case 4:
del_teacher();
break;
case 5:
reset_teacher();
break;
case 6:
unlock_teacher();
break;
case 7:
reset_me();
break;
case 0:
return;
default:
printf("无效指令!\n");
sleep(2);
break;
}
}
}