个人体会
项目任务:
这次的学生成绩管理系统,做了管理员和超级管理员的任务,对于老师这种看起来可能比较难的任务,担心自己并不能好好实现它该有的功能,实现了管理员和超级管理员对于下级账号的添加、删除、解锁、重置等功能,对于密码的修改,界面的排版、编辑。
#include"hanshu.h"
#include"admin_menu.h"
#include"fuzhu.h"
#include"hanshu1.h"
#include"super_admin.h"
#include"teacher.h"
int k;
int year2 = 2018;
//添加教师
void teacher_add(void)
{
system("clear");
puts("----教师添加----");
printf("\n请选择添加方式(1.单个添加/2.批量添加)");
char ch=getch();
if(49 == ch)
{
if(k>100)
{
show_msg("\n教师已满",1);
}
else
{
for(int i=k;i<100;i++)
{
if(0 == tea[i].number)
{
printf("\n");
printf("请输入工号:");
scanf("%s",tea[i].id);
//tea[i].id = m;
printf("\n请输入姓名:");
scanf("%s",tea[i].name);
printf("\n请输入性别:");
scanf("%s",tea[i].sex);
printf("\n请输入出生年份:");
scanf("%d",&tea[i].year);
printf("\n请输入入职年份:");
scanf("%d",&tea[i].year1);
puts("\n添加教师成功!\n");
tea[i].number = 1;
tea[i].age=(year2-tea[i].year);
tea[i].work=(year2-tea[i].year1);
strcpy(tea[i].pass,"123456");
k++;
return;
}
}
}
}
if(50 == ch)
{
printf("\n");
FILE* frp = fopen("teacher.dat","r");
if(NULL != frp)
{
//int i=k;
while(k++<100)
{
fscanf(frp,"%s %s %s %d %d",tea[k].id,tea[k].name,tea[k].sex,&tea[k].year,&tea[k].year1);
if(feof(frp))
{
break;
}
tea[k].number = 1;
tea[k].age=(year2-tea[k].year);
tea[k].work=(year2-tea[k].year1);
strcpy(tea[k].pass,"123456");
// printf("%s %s %s %d %d\n",tea[i].id,tea[i].name,tea[i].sex,tea[i].age,tea[i].work);
}
}
show_msg("\n教师添加成功",1);
return;
}
}
//删除教师
void teacher_del(void)
{
system("clear");
printf("请输入要删除的教师姓名");
char key[20];
gets(key);
int index = _find_name(key);
if(-1 != index)
{
tea[index].number = -1;
show_msg("\n删除成功",1);
return;
}
if(-1 == index)
{
show_msg("教师已离职",1);
return;
}
}
//修改教师信息
void teacher_change(void)
{
system("clear");
printf("请输入要修改的教师姓名:");
char key[20];
gets(key);
int index = find_tea_id(key);
if(-1 != index)
{
printf("\n工号:%s 姓名:%s 性别:%s 年龄:%d 工龄:%d\n",tea[index].id,tea[index].name,tea[index].sex,tea[index].age,tea[index].work);
printf("请输入要修改的信息:\n");
puts("请输入新名字:");
scanf("%s",tea[index].name);
printf("\n请输入新年龄:");
scanf("%d",&tea[index].age);
puts("\n请输入新工龄:");
scanf("%d",&tea[index].work);
show_msg("\n修改成功\n",1);
return;
}
}
//重置教师密码
void teacher_password_reset(void)
{
system("clear");
printf("请输入要重置密码的教师姓名:");
char key[20];
gets(key);
int index = _find_name(key);
if(-1 != index)
{
strcpy(tea[index].pass,"123456");
show_msg("密码重置成功",1);
return;
}
if(-1 == index)
{
show_msg("查无此人",1);
return;
}
}
//解锁教师帐号
void teacher_au_unlock(void)
{
system("clear");
printf("请输入要解锁帐号的教师姓名:");
char key[20];
gets(key);
int index = _find_name(key);
if(-1 != index)
{
if(1 == tea[index].lock)
{
tea[index].lock = 0;
show_msg("\n解锁成功",1);
return;
}
if(0 == tea[index].lock)
{
show_msg("\n该帐号未锁定",1);
return;
}
}
}
//查询教师
void teacher_find(void)
{
system("clear");
printf("请输入要查询的教师姓名:");
char key[20];
gets(key);
for(int i=0;i<100;i++)
{
if(strstr(tea[i].name,key))
printf("工号:%s 姓名:%s 性别:%s 年龄:%d 工龄:%d\n",tea[i].id,tea[i].name,tea[i].sex,tea[i].age,tea[i].work);
}
key_continue();
return;
}
//显示在职教师
void teacher_act_show(void)
{
system("clear");
puts("----在职教师-----");
for(int i=0;i<100;i++)
{
if(tea[i].number>0)
printf("工号:%s 姓名:%s 性别:%s 年龄:%d 工龄:%d\n",tea[i].id,tea[i].name,tea[i].sex,tea[i].age,tea[i].work);
}
key_continue();
}
//显示离职教师
void teacher_quit_show(void)
{
system("clear");
puts("----离职教师----");
for(int i=0;i<100;i++)
{
if(-1 == tea[i].number)
printf("工号:%s 姓名:%s 性别:%s 年龄:%d 工龄:%d\n",tea[i].id,tea[i].name,tea[i].sex,tea[i].age,tea[i].work);
}
key_continue();
}
//修改密码
void admin_password_change(int i)
{
system("clear");
puts("----密码修改----");
puts("请输入新密码:");
char key1[20];
char key2[20];
gets(key1);
loop: puts("请再输入一遍:");
gets(key2);
if(strcmp(key2,key1) != 0)
{
show_msg("\n两次密码不一致",1);
goto loop;
}
else
{
strcpy(adm[i].password,key1);
show_msg("\n密码修改成功",1);
return;
}
}
所遇困难:
虽然管理员和超级管理员的功能跟上次的电话簿项目很类似,但是在自己写代码的时候还是会经常碰到问题,比如有时跳转不出来,不能反悔上级界面,在写.h文件的时候由于自己只写了一份,接下来的都是复制,导致了头文件里的文件名都重复了,没有改成所在的文件名,在整合编译的时候疯狂出警告,提醒函数未声明,找了半天还是找不到问题所在,去看.c文件的头文件添加,发现都已经加了,但是为什么还会有这种问题,最后还是请教大师兄,发现了文件名的问题,在小组分工时,由于没有好好的商讨结构体的变量,导致在写的时候,自己用的结构体变量没有在对方的结构体里,一直跳出错误,还要自己再去进行添加。
个人总结:
在写项目的时候,还是要先进行一个系统的讨论,将各种细节,布局,将一个整体的框架构建好,商讨好函数名,防止函数名的冲突,规范代码,能更好的在后面调试时找出问题所在,而不是看一天都不知道哪里出错。