#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <malloc.h>
#define N 100;
/********************************************结构体部分*******************************************************/
//构建员工的结构体
struct employee
{
int num;//编号
char name[8];//姓名
char sex[2];//性别
int Csrq;//出生日期
char Jrsj[5];//进入时间
char Sfzh[20];//身份证号
int Ssbm;//所属部门
int Zw;//职位
int state;
char phone[15];//电话号码
char mail[15];//电子邮件
char Qita[20];//其他w
};
struct employee em[100];
typedef struct loginUser
{
char userName[20];//登陆用户账号
char userPWD[20];//登陆密码
int userRole;//用户角色,0--未审核用户,1--普通用户,2--超级管理员(审核新注册用户)
struct loginUser *next;
} LoginUser;
typedef struct zwInfo//职务
{
int zwId;
char zwName[20];
char zwBZ[50];
} ZwInfo;
typedef struct bminfo//定义结构体数组,并自定义命名Bminfo
{
int bmid;//部门编号
char bmname[10];//部门名称
char bmphone[13];//部门电话
char bmCZphone[13];//部门传真电话
char bmaddress[50];//部门地址
char bmQTSM[50];//其他说明
struct bminfo *next;
} BmInfo;
/***************************************************************************************************/
LoginUser inUser;//已登陆用户,全局变量
/********************************************函数声明部分*******************************************************/
//函数声明
void showend(void);
void search();
void allshow();
void PrintZwTr();
void part();
void change();
void add();
void Fanhui();
void del();
void save(int);
void Tjzjinfo();
void Tjljinfo();
//void Tjage();
void tjinfo(int a);
int password(char *str,int size);//密码输入,“*”显示, p指向存储用户输入密码的数组,size为限制输入数
int StringLength(char *str,int max,int THEMAX,const int a);//限制输入字符长度,str为用于存储字符串的指针,max为自定义限制长度,THEMAX为自定义容错范围,a为选择超长是否截取(0:不截取即重新输入;1:截取即只取max长度)
int Login();//登陆系统函数,按ESC键退出,失败返回0,成功返回1,ESC退出返回2
int Logon();//用户注册函数,按ESC键退出,失败返回0,成功返回1,ESC退出返回2
void MainMenu();//主菜单函数
void Welcome();//登陆成功后,选择:进入系统、修改密码
void userManage();//用户管理
void PrintUserTr(int a ,char *userName,char *userPWD,char *userRole);//显示用户列表行,职务管理
void AddUser();//管理员添加用户
void AduUser();//管理员审核用户
void DelUser();//管理员删除用户
void ModifyPWD();//用户登陆后修改密码
void mainpage();//进入系统后主界面
void ExitSys();//退出系统,<Y/N>
void PrintZwTr(int a ,char *zwName,char *zwBZ);//显示职务列表行,职务管理
void ZwManage();//职务管理
void AddZW();//添加职务
void ModifyZW();//修改职务
void DelZW();//删除职务信息,假删除,将职务编号置为零
void BmManage(int a);//部门管理
void AddBM();//添加部门
void ModifyBM();//修改部门
void DelBM();//删除部门
void getZW(char *str,int a);//根据id获取职务名称
void getBM(char *str,int a);//根据id获取部门名称
void showZW();//显示职务名称
void showBM();//显示部门名称
/***********************************************************************************************************/
void main()
{
system("color 3F");
MainMenu(1);
}
/***********************************************************************************************************/
/********************************************魏凡设计部分*******************************************************/
void MainMenu()//主菜单函数
{
int a=1;
while (1)
{
int num,i;
char pointto[5];
system("cls");
for(i=0;i<5;i++)
{
pointto[i]='/0';
}
pointto[a-1]='<';
printf("/t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★/n");
printf("/t ★● 欢迎使用 ●★/n");
printf("/t ★● ●★/n");
printf("/t ★★★★★★★★ XWL ★★★★★★★★★/n");
printf("/n");
printf("/t/t ┏─────────────────┓/n/n/n");
printf("/t/t 1,输入密码 %c /n/n",pointto[0]);
printf("/t/t 2,用户注册 %c /n/n",pointto[1]);
printf("/t/t 3,退出系统 %c /n/n/n",pointto[2]);
printf("/t/t ┗─────────────────┛/n");
num=getch()-48;
if(num==-35)
{
switch(a)
{
case 1:
Login();
break;
case 2:
Logon();
break;
case 3:
printf("/t/t/t真的要退出吗?(Y/N)");
if(getch()=='y')
{
exit(0);
}
break;
}
}
else
{
if (num>0&&num<5)
{
a=num;
}
}
}
}
int password(char *p,int size)//密码输入,“*”显示, p指向存储用户输入密码的数组,size为限制输入数
{
//char p[20];
char key;
int i=0;
//memset(p,0,20);
//memset(str,0,20);
while(1)
{
if(i>size)
{
key=_getch();
if(key==8)
{
printf("/b /b");
i--;
}
if(key==13)
{
p[i]='/0';
//strcpy(str,p+1);
break;
}
continue;
}
p[i]=_getch();
if(p[i]==8)
{
if (i==0)
{
continue;
}
printf("/b /b");
i--;
continue;
}
else if(p[i]==13)
{
p[i]='/0';
//strcpy(str,p+1);
break;
}
printf("*");
i++;
}
return 0;
}
int Login()//登陆系统函数,按ESC键退出,失败返回0,成功返回1,ESC退出返回2
{
LoginUser user;
char userName[20];
char userPWD[20];
FILE *fp;
printf("/n/t/t/t/t账号:");
//gets(userName);
scanf("%s",userName);
printf("/n/t/t/t/t密码:");
//gets(userPWD);
//scanf("%s",userPWD);
password(userPWD,18);//密码输入函数,“*” 显示,限制18位
if ((fp=fopen("login.txt","r"))==NULL)
{
return 0;
}
else
{
rewind(fp);
while (!feof(fp))
{
fread(&user,sizeof(LoginUser),1,fp);
if (strcmp(user.userName,userName)==0)
{
if (user.userRole==0)
{
printf("/n该用户暂未经过审核/n请等待超级管理员审核……/n");
getch();
MainMenu();
return 0;
}
if (strcmp(user.userPWD,userPWD)==0)
{
strcpy(inUser.userName,user.userName);
strcpy(inUser.userPWD,user.userPWD);
inUser.userRole=user.userRole;
Welcome();
break;
}
else
{
printf("/n/n/t/t/t密码错误,登陆失败!按任意键返回!/n");
getch();
MainMenu();
}
}
}
if (inUser.userName==NULL)
{
printf("/n/n/t/t/t该用户不存在,登陆失败!按任意键返回!");
fclose(fp);
getch();
}
MainMenu();
}
}
int Logon()//用户注册函数,按ESC键退出,失败返回0,成功返回1,ESC退出返回2
{
FILE *fp;
char userName[20];
char userPWD[20];
LoginUser user;
LoginUser user1;
int usersCount=0;
do
{
int isNameVil=1;//用户名是否通过,1--通过,0--未通过
do
{
printf("输入账号:");
//gets(userName);
//scanf("%s",userName);
StringLength(userName,15,200,0);
if (strlen(userName)==0)
{
printf("用户名不能为空/n/n按任意键重新输入/n按ESC返回/n");
switch(_getch())
{
case 0x1b:
//fclose(fp);
return 2;
default:
//fclose(fp);
break;
}
}
} while(strlen(userName)==0);
if ((fp=fopen("login.txt","r"))==NULL)
{
printf("Can not open file!");
}
else
{
while (!feof(fp))
{
usersCount+=fread(&user,sizeof(LoginUser),1,fp);
if (strcmp(user.userName,userName)==0)
{
isNameVil=0;//用户名已存在,未通过
}
}
fclose(fp);
if (isNameVil)
{
if ((fp=fopen("login.txt","a"))==NULL)
{
printf("Can not open file!");
}
else
{
do
{
strcpy(user1.userName,userName);
printf("/n输入密码(18位以内):");
//gets(user1.userPWD);
//scanf("%s",user1.userPWD);
password(user1.userPWD,18);//密码输入函数,“*” 显示,限制18位
printf("/n确认密码:");
//gets(userPWD);
//scanf("%s",userPWD);
password(userPWD,18);//密码输入函数,“*” 显示,限制18位
if (strcmp(user1.userPWD,userPWD)!=0)
{
printf("/n两次输入不一致/n");
}
} while(strcmp(user1.userPWD,userPWD)!=0);
if (usersCount==0)
{
user1.userRole=2;
}
else
{
user1.userRole=0;
}
fseek(fp,0,SEEK_END);
fwrite(&user1,sizeof(LoginUser),1,fp);
printf("/n成功!");
fclose(fp);
_getch();
MainMenu();
//return 1;
}
}
else
{
printf("/n该用户名已存在/n按任意键重新输入/n按ESC返回/n");
switch(_getch())
{
case 0x1b:
fclose(fp);
return 2;
default:
break;
}
}
}
} while(1);
}
int StringLength(char *str,int max,int THEMAX,const int a)//限制输入字符长度,str为用于存储字符串的指针,max为自定义限制长度,THEMAX为自定义容错范围,a为选择超长是否截取(0:不截取即重新输入;1:截取即只取max长度)
{
char *p;
memset(str,0,max);
p=(char *)malloc(sizeof(char)*THEMAX);
while (1)
{
fflush(stdin);
gets(p);
if (a==0)
{
if (strlen(p)>max)
{
printf("输入字符过长,重新输入/n");
continue;
}
else
{
strcpy(str,p);
break;
}
}
else
{
strncpy(str,p,max);
str[max]='/0';
break;
}
}
free(p);
return 0;
}
void ExitSys()//退出系统,<Y/N>
{
char key;
printf("谢谢使用……/n");
printf("是否退出<Y/N>/n");
while (1)
{
scanf("%c",&key);
switch(key)
{
case 'y':
case 'Y':
exit(0);
break;
case 'n':
case 'N':
return;
break;
}
}
}
void Welcome()//登陆成功后,选择:进入系统、修改密码
{
int a=1;
while (1)
{
int num,i;
char pointto[5];
system("cls");
for(i=0;i<4;i++)
{
pointto[i]='/0';
}
pointto[a-1]='<';
printf("/t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★/n");
printf("/t ★● 欢迎使用 ●★/n");
printf("/t ★● ●★/n");
printf("/t ★★★★★★★★ XWL ★★★★★★★★★/n");
printf("/n");
printf("/t/t ┏─────────┓ /n");
printf("/t/t │ 主界面 │ /n");
printf("/t/t┏───┴─────────┴───┓/n/n/n");
printf("/t/t 1◆进入系统 %c /n/n",pointto[0]);
printf("/t/t 2◆修改密码 %c /n/n",pointto[1]);
if (inUser.userRole==2)
{
printf("/t/t 3◆用户管理 %c /n/n",pointto[2]);
printf("/t/t 4◆返 回 %c /n/n/n",pointto[3]);
}
else
{
printf("/t/t 3◆返 回 %c /n/n/n",pointto[2]);
}
printf("/t/t┗─────────────────┛/n");
num=getch()-48;
if(num==-35)
{
switch(a)
{
case 1:
mainpage(1);
return;
break;
case 2:
ModifyPWD();
break;
case 3:
case 4:
if (inUser.userRole==2)
{
if (a==3)
{
userManage();
}
else if (a==4)
{
return;
}
}
else
{
if (a==3)
{
return;
}
}
break;
}
}
else
{
if (num>0&&num<5)
{
a=num;
}
}
}
}
void ModifyPWD()//用户登陆后修改密码
{
FILE *fp;
LoginUser user;
LoginUser user1;
fpos_t oldpos;
char userPWD1[20];
char userPWD2[20];
printf("/n/t/t/t/t用户名:%s/n",inUser.userName);
printf("/n/t/t/t/t原始密码:");
//gets(userPWD1);
//scanf("%s",userPWD1);
password(userPWD1,18);
if (strcmp(userPWD1,inUser.userPWD)!=0)
{
printf("/n/t/t/t密码错误!任意键返回/n");
getch();
Welcome(2);
return;
}
printf("/n/t/t/t/t新密码:");
//gets(userPWD2);
//scanf("%s",userPWD2);
password(userPWD2,18);
printf("/n/t/t/t/t确认密码:");
//gets(user.userPWD);
//scanf("%s",user.userPWD);
password(user.userPWD,18);
if (strcmp(userPWD2,user.userPWD)!=0)
{
printf("/n/t/t/t两次输入密码不一致!任意键返回/n");
getch();
Welcome(2);
return;
}
if ((fp=fopen("login.txt","r++"))==NULL)
{
printf("Can not open file");
}
else
{
while ((fread(&user1,sizeof(LoginUser),1,fp))==1)
{
fgetpos(fp,&oldpos);
if (strcmp(inUser.userName,user1.userName)==0)
{
strcpy(user.userName,inUser.userName);
user.userRole=inUser.userRole;
fsetpos(fp,&oldpos);
fseek(fp,-sizeof(LoginUser),SEEK_CUR);
fwrite(&user,sizeof(LoginUser),1,fp);
fclose(fp);
printf("/n/t/t/t修改成功!任意键返回/n");
getch();
Welcome(2);
return;
break;
}
// fseek(fp,-sizeof(LoginUser),SEEK_CUR);
// fwrite(&user,sizeof(LoginUser),1,fp);
}
}
}
void PrintUserTr(int a ,char *userName,char *userPWD,char *userRole)//显示用户列表行,职务管理
{
printf("┃ %-7d┃%-22s┃%-22s┃%-16s┃/n",a,userName,userPWD,userRole);
}
void userManage()
{
FILE *fp;
LoginUser user;
LoginUser *h=NULL;
LoginUser *p=NULL;
LoginUser *s=NULL;
LoginUser *c=NULL;
char roleName[3][20]={{"未审核"},{"普通用户"},{"超级管理员"}};
int count=0;
int bh;
if (inUser.userRole!=2)
{
return;
}
while (1)
{
system("cls");
printf("/t/t/t/t用户管理/n/n");
if ((fp=fopen("login.txt","r"))==NULL)
{
printf("Can not open file!");
exit(0);
}
else
{
h=(LoginUser *)malloc(sizeof(LoginUser));
p=h;
printf("┏━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━┓/n");
while (fread(&user,sizeof(LoginUser),1,fp)==1)
{
s=(LoginUser *)malloc(sizeof(LoginUser));
s->userRole=user.userRole;
strcpy(s->userName,user.userName);
strcpy(s->userPWD,user.userPWD);
p->next=s;
p=s;
count++;
}
p->next=NULL;
bh=count;
while(h->next!=NULL)
{
h=h->next;
count--;
PrintUserTr(bh-count,h->userName,h->userPWD,roleName[h->userRole]);
if (count==0)
{
continue;
}
printf("┣━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━┫/n");
}
c=h;
while (c!=NULL)
{
h=c->next;
free(c);
c=h;
}
printf("┗━━━━┻━━━━━━━━━━━┻━━━━━━━━━━━┻━━━━━━━━┛/n");
}
printf("/t/t/t┌──────────┐/n");
printf("/t/t/t│ 1 → 添加用户 │/n");
printf("/t/t/t│ 2 → 审核用户 │/n");
printf("/t/t/t│ 3 → 删除用户 │/n");
printf("/t/t/t│ 4 → 返 回 │/n");
printf("/t/t/t└──────────┘/n");
switch(_getch())
{
case '1':
AddUser();
break;
case '2':
AduUser();
break;
case '3':
DelUser();
break;
case '4':
return;
}
}
}
void AddUser()
{
char userName[25];
LoginUser user;
FILE *fp;
int isNameVil=1;
if ((fp=fopen("login.txt","r+"))==NULL)
{
printf("Can not open file!");
getch();
return;
}
printf("添加用户/n/n");
do
{
isNameVil=1;
rewind(fp);
printf("输入用户名:");
StringLength(userName,20,200,0);
if (strlen(userName)==0)
{
isNameVil=0;
printf("/n用户名不能为空/n按任意键重新输入/n按ESC返回/n");
}
do
{
fread(&user,sizeof(LoginUser),1,fp);
if (strcmp(user.userName,userName)==0)
{
isNameVil=0;//用户名已存在,未通过
printf("/n该用户名已存在/n按任意键重新输入/n按ESC返回/n");
break;
}
} while(!feof(fp));
if (isNameVil==0)
{
switch(_getch())
{
case 0x1b:
fclose(fp);
return;
default:
break;
}
}
}while (isNameVil==0);
strcpy(user.userName,userName);
strcpy(user.userPWD,"123");
user.userRole=1;
fwrite(&user,sizeof(LoginUser),1,fp);
printf("/n添加成功!初始密码为123/n");
fclose(fp);
getch();
return;
}
void AduUser()
{
char roleName[3][20]={{"未审核"},{"普通用户"},{"超级管理员"}};
char userName[20];
LoginUser user;
char key;
FILE *fp;
fpos_t oldpos;
int isNameVil=1;
if ((fp=fopen("login.txt","r+"))==NULL)
{
printf("Can not open file!");
getch();
return;
}
printf("审核用户/n/n");
printf("请输入用户名:");
StringLength(userName,20,300,0);
while (fread(&user,sizeof(LoginUser),1,fp)==1)
{
fgetpos(fp,&oldpos);
if (strcmp(user.userName,userName)==0)
{
if (user.userRole==2)
{
printf("/n不能审核超级管理员!!!/n");
getch();
return;
}
printf("/n用户名:%s",user.userName);
printf("/n密 码:%s",user.userPWD);
printf("/n权 限:%s/n/n",roleName[user.userRole]);
printf("审核是否通过?<Y/N>……");
scanf("%c",&key);
switch(key)
{
case 'y':
case 'Y':
user.userRole=1;
break;
}
fsetpos(fp,&oldpos);
fseek(fp,-sizeof(LoginUser),SEEK_CUR);
fwrite(&user,sizeof(LoginUser),1,fp);
fclose(fp);
printf("已保存/n任意键返回/n");
_getch();
return;
}
}
fclose(fp);
printf("未找到!/n任意键返回/n");
_getch();
return;
}
void DelUser()
{
LoginUser *h=NULL;
LoginUser *p=NULL;
LoginUser *s=NULL;
LoginUser *c=NULL;
LoginUser *theUser=NULL;
char roleName[3][20]={{"未审核"},{"普通用户"},{"超级管理员"}};
char userName[20];
LoginUser user;
char key;
FILE *fp;
if ((fp=fopen("login.txt","r+"))==NULL)
{
printf("Can not open file!");
getch();
return;
}
printf("删除用户/n/n");
printf("请输入用户名:");
StringLength(userName,20,300,0);
h=(LoginUser *)malloc(sizeof(LoginUser));
p=h;
while (fread(&user,sizeof(LoginUser),1,fp)==1)
{
s=(LoginUser *)malloc(sizeof(LoginUser));
s->userRole=user.userRole;
strcpy(s->userName,user.userName);
strcpy(s->userPWD,user.userPWD);
if (strcmp(user.userName,userName)==0)
{
theUser=s;
}
p->next=s;
p=s;
}
fclose(fp);
p->next=NULL;
if (theUser!=NULL)
{
if (theUser->userRole==2)
{
printf("/n不能删除超级管理员!!!/n");
getch();
while (c!=NULL)
{
h=c->next;
free(c);
c=h;
}
return;
}
printf("/n用户名:%s",theUser->userName);
printf("/n密 码:%s",theUser->userPWD);
printf("/n权 限:%s/n/n",roleName[theUser->userRole]);
printf("是否删除?<Y/N>……");
scanf("%c",&key);
if (key=='Y'||key=='y')
{
if ((fp=fopen("login.txt","w"))==NULL)
{
printf("Can not open file!");
getch();
return;
}
while (h->next!=NULL)
{
h=h->next;
if (h==theUser)
{
continue;
}
printf("%d",fwrite(h,sizeof(LoginUser),1,fp));
}
fclose(fp);
printf("删除成功/n任意键返回/n");
getch();
}
while (c!=NULL)
{
h=c->next;
free(c);
c=h;
}
return;
}
else
{
fclose(fp);
printf("未找到!/n任意键返回/n");
while (c!=NULL)
{
h=c->next;
free(c);
c=h;
}
_getch();
return;
}
}
/*******************************************************************************************************************/
/********************************************王强设计部分***********************************************************/
void mainpage(int a)//主页面选择菜单
{
int num,i;
char pointto[6]="";
system("cls");
for(i=0;i<6;i++)
{
pointto[i]='/0';
}
pointto[a-1]='<';
printf("/t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★/n");
printf("/t ★● 欢迎使用 ●★/n");
printf("/t ★● XwL ●★/n");
printf("/t ★★★★★★★★★★~~~^_^~~~★★★★★★★★★★/n");
printf("/n");
printf("/t/t/t ┏─────────┓/n");
printf("/t/t/t │ 企业员工管理系统│ /n");
printf(" ┏─────────┴─────────┴────────┓/n/n/n");
printf("/t/t 1,企业员工信息管理 %c /n/n",pointto[0]);
printf("/t/t 2,部门信息管理 %c /n/n",pointto[1]);
printf("/t/t 3,职务管理 %c /n/n",pointto[2]);
printf("/t/t 4,员工信息统计 %c /n/n",pointto[3]);
printf("/t/t 5,返回 %c /n/n",pointto[4]);
printf("/t/t 6,退出 %c /n/n/n",pointto[5]);
printf("/t┗────────┬─────────┬────────┛/n");
printf("/t *************│ /1X /1w /1L │ *************/n");
printf(" *********************┗─────────┛**********************/n");
printf("╭︿︿︿╮/n");
printf("{/ o o /} /n");
printf(" ( (oo) )/n");
printf(" ︶ ︶︶ /n");
num=getch()-48;
if(num==-35)
{
switch(a)
{
case 1:
search();
return;
break;
case 2:
BmManage(1);
return;
break;
case 3:
ZwManage();
return;
break;
case 4:
tjinfo(1);
return;
break;
case 5:
Welcome(1);
return;
break;
case 0:
printf("/t/t/t真的要退出吗?(Y/N)");
if(getch()=='y')
{
system("exit");
}
else
{
mainpage(a);
}
}
}
else
{
mainpage(num);
}
}
/*****************************************************************************************************************/
/********************************************肖雄设计部分*******************************************************/
//员工信息管理
void search()
{
int key=0;
system("cls");
system("color 3F");
printf("/t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★/n");
printf("/t ★● 欢迎使用 ●★/n");
printf("/t ★● ●★/n");
printf("/t ★★★★★★★★ XWL ★★★★★★★★★/n");
printf("/n");
printf("/t/t/t /1/1员工信息查询/1/1 /n");
printf("/t/t ┌────────────────┐");
printf("/t/t/t/t/t │ 1 → 查看全部 │/n");
printf("/t/t │ │/n");
printf("/t/t │ 2 → 输入编号查询 │/n");
printf("/t/t │ │/n");
printf("/t/t │ 3 → 修改信息 │/n");
printf("/t/t │ │/n");
printf("/t/t │ 4 → 删除员工信息 │/n");
printf("/t/t │ │/n");
printf("/t/t │ 5 → 添加员工信息 │/n");
printf("/t/t │ │/n");
printf("/t/t │ 0 → 退出 │/n");
printf("/t/t └────────────────┘/n");
printf("/n/t/t请选择(0~5):");
flushall();
scanf("%d",&key);
//system("cls");
switch(key)
{
case 1:
allshow();
break;
case 2:
part();
break;
case 3:
change();
break;
case 4:
del();
break;
case 5:
add();
break;
case 0:
mainpage(3);
return;
break;
}
}
void creatdata()
{
FILE *fp;
int i;
int num;
fp=fopen("em","wb");
if(fp==NULL)
{
printf("open error!!/n");
exit(0);
}
else
{
for(i=0;i<3;i++)
{
printf("第%d个员工/n",i);
printf("/n");
printf("编号/n");
scanf("%d",&em[i].num);
printf("/n");
printf("姓名/n");
scanf("%s",&em[i].name);
printf("/n");
printf("请你输入性别以m为男f为女:/n");
scanf("%s",&em[i].sex);
printf("/n");
printf("出生日期/n");
scanf("%d",&em[i].Csrq);
printf("/n");
printf("进入时间/n");
scanf("%s",&em[i].Jrsj);
printf("/n");
printf("身份证号/n");
scanf("%s",&em[i].Sfzh);
printf("/n");
printf("部门/n");
showBM();
printf("/n");
scanf("%d",&em[i].Ssbm);
printf("/n");
printf("职位/n");
showZW();
printf("/n");
scanf("%d",&em[i].Zw);
printf("状态/n");
scanf("%d",&em[i].state);
printf("/n");
printf("电话号码/n");
scanf("%s",&em[i].phone);
printf("/n");
printf("电子邮件/n");
scanf("%s",&em[i].mail);
printf("/n");
printf("其他/n");
scanf("%s",&em[i].Qita);
printf("/n");
fwrite(&em[i],sizeof(struct employee),1,fp);
//fprintf(fp,"/n");
//fprintf(fp,"%d %s %s %s %s %d %d %d %d %d %d %d",em[i].num,em[i].name,em[i].sex,em[i].Csrq,em[i].Jrsj,em[i].Sfzh,em[i].Zw,em[i].state,em[i].phone,em[i].mail,em[i].Qita);
system("pause");
}
}
}
//显示全部的员工信息
void allshow()
{
FILE *fp;
int key;
int i;
int m;
char bm[5];
char zw[5];
char sdt[5];
long length;
long length1;
system("cls");
//以读写的方式打开指定的文件
fp=fopen("em","r+");
if(fp==NULL)
{
printf("open error!!/n");
//exit(0);
}
else
{
//rewind(fp);
/*下面的3句话动态的显示了
文件中有多少条的员工信息,
基本原理是首先通过把文件
的内部指针指到文件的末尾
再来算文件的总长度,然后
用总的长度来除以每个结构
体的长度lenth1*/
fseek(fp,0L,SEEK_END);
length=ftell(fp);
length1=sizeof(struct employee);
m=length/length1;
//调试用的代码
//printf("%d/n",m);
//rewind(fp);
//通过for循环查找文件中的全部数据
for (i=0;i<m;i++)
{
fseek(fp,i*sizeof(struct employee),0);
fread(&em[i],sizeof(struct employee),1,fp);
//这里不从0开始,是为后面的删除做准备
if(em[i].num!=0)
{
//a=em[i].Ssbm
//b=display_bm(a);
getZW(zw,em[i].Zw);
getBM(bm,em[i].Ssbm);
switch(em[i].state)
{
case 1:
strcpy(sdt, "在职");
break;
case 2:
strcpy(sdt, "离职");
break;
default:
strcpy(sdt, "离职");
break;
}
printf("┌─┬───┬──┬───┬───┬────────┬────┬───┐/n");
printf("│ │姓名 │性别│出生日│进入日│ 电话号码 │ 职位 │ 部门 │ /n");
printf("├─┼───┼──┼───┼───┼────────┼────┼───┤/n");
printf("│%-1d │%-5s │ %-2s │ %-5d│ %-5s│ %-15s│ %-3s │%-3s │/n",em[i].num,em[i].name,em[i].sex,em[i].Csrq,em[i].Jrsj,em[i].phone,zw,bm);
printf("├─┴───┴──┴───┼───┴────────┼────┼───┤/n");
printf("│ 身份证号 │ 邮箱 │ 状态 │ 其他 │/n");
printf("├────────────┼────────────┼────┼───┤/n");
printf("│%-24s│%-24s│ %-6s│%-6s│/n",em[i].Sfzh,em[i].mail,sdt,em[i].Qita);
printf("└────────────┴────────────┴────┴───┘/n");
}
}
Fanhui();
}
}
void part()
{
FILE *fp;
int key=0;
int i;
int m;
int b;
int a;
int num2;
char bm[5];
char zw[5];
char sdt[5];
long length;
long length1;
printf("┌─────┐/n");
printf("│用户编号:│/n");
printf("└─────┘/n");
scanf("%d",&num2);
fp=fopen("em","r+");
if(fp==NULL)
{
printf("open error!!/n");
//exit(0);
}
else
{
rewind(fp);
fseek(fp,0L,SEEK_END);
length=ftell(fp);
length1=sizeof(struct employee);
b=length/length1;
//printf("*************%d******************/n",b);
rewind(fp);
for (i=0;i<b;i++)
{
system("cls");
fseek(fp,i*sizeof(struct employee),0);
fread(&em[i],sizeof(struct employee),1,fp);
/*这里通过引入变量m和a成功的判断了
在文件中有没有员工的编号和要查找的
编号相同,若相同则给m赋值,再把其
对应的结构体数组的编号赋给a方便下
面要进行显示数据的步骤*/
if (num2==em[i].num)
{
m=1;
a=i;
}
}
//printf("******yyyyy*****/n");
//m=0;
//printf("%d****/n",m);
// printf("%d********/n",a);
if (m==1)
{
fread(&em[a],sizeof(struct employee),1,fp);
//注意这里给字符数组的赋值的方式
getZW(zw,em[a].Zw);
getBM(bm,em[a].Ssbm);
switch(em[a].state)
{
case 1:
strcpy(sdt, "在职");
break;
case 2:
strcpy(sdt, "离职");
break;
default:
strcpy(sdt, "离职");
break;
}
printf("┌─┬───┬──┬───┬───┬────────┬────┬───┐/n");
printf("│ │姓名 │性别│出生日│进入日│ 电话号码 │ 职位 │ 部门 │ /n");
printf("├─┼───┼──┼───┼───┼────────┼────┼───┤/n");
printf("│%-1d │%-5s │ %-2s │ %-5d│ %-5s│ %-15s│ %-3s │%-3s │/n",em[a].num,em[a].name,em[a].sex,em[a].Csrq,em[a].Jrsj,em[a].phone,zw,bm);
printf("├─┴───┴──┴───┼───┴────────┼────┼───┤/n");
printf("│ 身份证号 │ 邮箱 │ 状态 │ 其他 │/n");
printf("├────────────┼────────────┼────┼───┤/n");
printf("│%-24s│%-24s│ %-6s│%-6s│/n",em[a].Sfzh,em[a].mail,sdt,em[a].Qita);
printf("└────────────┴────────────┴────┴───┘/n");
Fanhui();
}
else
{
printf("┌─────┐/n");
printf("│无此用户哦│/n");
printf("└─────┘/n");
Fanhui();
}
}
}
void change()
{
FILE *fp;
int key=0;
int keys=0;
int i;
int m;
int a;
int b;
int num2;
char bm[5];
char zw[5];
char sdt[5];
long length;
long length1;
printf("┌─────┐/n");
printf("│用户编号:│/n");
printf("└─────┘/n");
scanf("%d",&num2);
fp=fopen("em","r+");
if(fp==NULL)
{
printf("open error!!/n");
//exit(0);
}
else
{
rewind(fp);
fseek(fp,0L,SEEK_END);
length=ftell(fp);
length1=sizeof(struct employee);
b=length/length1;
//printf("%d********",b);
for (i=0;i<b;i++)
{
system("cls");
fseek(fp,i*sizeof(struct employee),0);
fread(&em[i],sizeof(struct employee),1,fp);
if (num2==em[i].num)
{
m=1;
a=i;
}
}
//printf("%d********/n",m);
//printf("%d*****************/n",a);
if (m==1)
{
fread(&em[a],sizeof(struct employee),1,fp);
getZW(zw,em[a].Zw);
getBM(bm,em[a].Ssbm);
fseek(fp,-sizeof(struct employee),1);//*****************
switch(em[a].state)
{
case 1:
strcpy(sdt, "在职");
break;
case 2:
strcpy(sdt, "离职");
break;
default:
strcpy(sdt, "离职");
break;
}
printf("┌─┬───┬──┬───┬───┬────────┬────┬───┐/n");
printf("│ │姓名 │性别│出生日│进入日│ 电话号码 │ 职位 │ 部门 │ /n");
printf("├─┼───┼──┼───┼───┼────────┼────┼───┤/n");
printf("│%-1d │%-5s │ %-2s │ %-5d│ %-5s│ %-15s│ %-3s │%-3s │/n",em[a].num,em[a].name,em[a].sex,em[a].Csrq,em[a].Jrsj,em[a].phone,zw,bm);
printf("├─┴───┴──┴───┼───┴────────┼────┼───┤/n");
printf("│ 身份证号 │ 邮箱 │ 状态 │ 其他 │/n");
printf("├────────────┼────────────┼────┼───┤/n");
printf("│%-24s│%-24s│ %-6s│%-6s│/n",em[a].Sfzh,em[a].mail,sdt,em[a].Qita);
printf("└────────────┴────────────┴────┴───┘/n");
printf("┌─────────────┐/n");
printf("│ 修改用户信息 │/n");
printf("└─────────────┘/n");
printf("1修改编号/n");
printf("2修改名称/n");
printf("3修改性别/n");
printf("4修改出生日期/n");
printf("5修改进入日期/n");
printf("6修改职位/n");
printf("7修改部门/n");
printf("8修改状态/n");
printf("9修改邮箱/n");
printf("10修改其他/n");
scanf("%d",&key);
switch (key)
{
case 1:
printf("请你输入新的编号:/n");
scanf("%d",&em[a].num);
break;
case 2:
printf("请你输入新的名称:/n");
scanf("%s",&em[a].name);
break;
case 3:
printf("请你输入新的性别:/n");
scanf("%s",&em[a].sex);
break;
case 4:
printf("请你输入新的出生日期:/n");
scanf("%s",&em[a].Csrq);
break;
case 5:
printf("请你输入新的进入日期:/n");
scanf("%s",&em[a].Jrsj);
break;
case 6:
printf("请你输入新的职位:/n");
showZW();
printf("/n");
scanf("%s",&em[a].Zw);
break;
case 7:
printf("请你输入新的部门:/n");
showBM();
printf("/n");
scanf("%s",&em[a].Ssbm);
break;
case 8:
printf("请你输入新的状态:/n");
scanf("%s",&em[a].state);
break;
case 9:
printf("请你输入新的邮箱:/n");
scanf("%s",&em[a].mail);
break;
case 10:
printf("请你输入新的其他:/n");
scanf("%s",&em[a].Qita);
break;
case 0:
search();
break;
}
//fwrite(&em[a],sizeof(struct employee),1,fp);
fclose(fp);
save(b);
Fanhui();
}
else
{
printf("┌─────┐/n");
printf("│无此用户哦│/n");
printf("└─────┘/n");
Fanhui();
}
}
}
void add()
{
FILE *fp;
int i;
int b;
int num;
int key;
long length;
long length1;
fp=fopen("em","a+");
if(fp==NULL)
{
printf("open error!!/n");
exit(0);
}
else
{
rewind(fp);
fseek(fp,0L,SEEK_END);
length=ftell(fp);
length1=sizeof(struct employee);
b=length/length1;
i=b+1;
printf("第%d个员工/n",i);
printf("/n");
printf("编号/n");
scanf("%d",&em[i].num);
printf("/n");
printf("姓名/n");
scanf("%s",&em[i].name);
printf("/n");
printf("请你输入性别以m为男f为女:/n");
scanf("%s",&em[i].sex);
printf("/n");
printf("出生日期/n");
scanf("%d",&em[i].Csrq);
printf("/n");
printf("进入时间/n");
scanf("%s",&em[i].Jrsj);
printf("/n");
printf("身份证号/n");
scanf("%s",&em[i].Sfzh);
printf("/n");
printf("部门(");
showBM();
printf(")/n");
scanf("%d",&em[i].Ssbm);
printf("/n");
printf("职位(");
showZW();
printf(")/n");
printf("/n");
scanf("%d",&em[i].Zw);
printf("状态(1为在职,2为离职)/n");
scanf("%d",&em[i].state);
printf("/n");
printf("电话号码/n");
scanf("%s",&em[i].phone);
printf("/n");
printf("电子邮件/n");
scanf("%s",&em[i].mail);
printf("/n");
printf("其他/n");
scanf("%s",&em[i].Qita);
printf("/n");
fwrite(&em[i],sizeof(struct employee),1,fp);
Fanhui();
//fprintf(fp,"/n");
//fprintf(fp,"%d %s %s %s %s %d %d %d %d %d %d %d",em[i].num,em[i].name,em[i].sex,em[i].Csrq,em[i].Jrsj,em[i].Sfzh,em[i].Zw,em[i].state,em[i].phone,em[i].mail,em[i].Qita);
system("pause");
}
}
void del()
{
FILE *fp;
int key=0;
int keys=0;
int c;
int i;
int m;
int a;
int b;
int num2;
char bm[5];
char zw[5];
char sdt[5];
long length;
long length1;
printf("┌─────┐/n");
printf("│用户编号:│/n");
printf("└─────┘/n");
scanf("%d",&num2);
fp=fopen("em","r+");
if(fp==NULL)
{
printf("open error!!/n");
//exit(0);
}
else
{
rewind(fp);
fseek(fp,0L,SEEK_END);
length=ftell(fp);
length1=sizeof(struct employee);
b=length/length1;
//printf("%d**********",b);
for (i=0;i<b;i++)
{
system("cls");
fseek(fp,i*sizeof(struct employee),0);
fread(&em[i],sizeof(struct employee),1,fp);
if (num2==em[i].num)
{
m=1;
a=i;
}
}
//printf("%d**********",m);
if (m==1)
{
fread(&em[a],sizeof(struct employee),1,fp);
getZW(zw,em[a].Zw);
getBM(bm,em[a].Ssbm);
fseek(fp,-sizeof(struct employee),1);//*****************
switch(em[a].state)
{
case 1:
strcpy(sdt, "在职");
break;
case 2:
strcpy(sdt, "离职");
break;
default:
strcpy(sdt, "离职");
break;
}
printf("┌─┬───┬──┬───┬───┬────────┬────┬───┐/n");
printf("│ │姓名 │性别│出生日│进入日│ 电话号码 │ 职位 │ 部门 │ /n");
printf("├─┼───┼──┼───┼───┼────────┼────┼───┤/n");
printf("│%-1d │%-5s │ %-2s │ %-5d│ %-5s│ %-15s│ %-3s │%-3s │/n",em[a].num,em[a].name,em[a].sex,em[a].Csrq,em[a].Jrsj,em[a].phone,zw,bm);
printf("├─┴───┴──┴───┼───┴────────┼────┼───┤/n");
printf("│ 身份证号 │ 邮箱 │ 状态 │ 其他 │/n");
printf("├────────────┼────────────┼────┼───┤/n");
printf("│%-24s│%-24s│ %-6s│%-6s│/n",em[a].Sfzh,em[a].mail,sdt,em[a].Qita);
printf("└────────────┴────────────┴────┴───┘/n");
printf("┌───────────────┐/n");
printf("│ 确认删除用户信息? │/n");
printf("└───────────────┘/n");
printf("确认请按1,退出请按2.");
scanf("%d",&c);
if (c==1)
{
em[a].num=0;
fclose(fp);
save(b);
Fanhui();
}
else
{
search();
}
}
else
{
printf("┌─────┐/n");
printf("│无此用户哦│/n");
printf("└─────┘/n");
Fanhui();
}
}
}
void save(int b)
{
int i;
FILE *fp;
fp=fopen("em","r+");
for (i=0;i<b;i++)
{
fwrite(&em[i],sizeof(struct employee),1,fp);
}
}
void showend(void)
{
char key;
printf("/n/n/t/t谢谢使用!/n");
printf("/n/t/t确定要退出?(y/n)");
//flushall();
scanf("%c",&key);
switch (key)
{
case 'y':
exit (0);
break;
case 'n':
search();
break;
}
}
void Fanhui()
{
int key;
printf("┌─────────────┐/n");
printf("│返回上一级请按1,退出请按2!│/n");
printf("└─────────────┘/n");
scanf("%d",&key);
switch (key)
{
case 1:
search();
break;
case 2:
showend();
exit (0);
system("pause");
break;
}
}
void getZW(char *str,int a)//根据id获取职务名称
{
FILE *fp;
ZwInfo zw;
if ((fp=fopen("zwinfo.txt","r"))==NULL)
{
printf("Can not open the file!");
exit(0);
}
else
{
while (fread(&zw,sizeof(ZwInfo),1,fp)==1)
{
if (zw.zwId==a)
{
strcpy(str,zw.zwName);
return;
}
}
strcpy(str,"未分配");
return;
}
}
void getBM(char *str,int a)//根据id获取部门名称
{
FILE *fp;
BmInfo bm;
if ((fp=fopen("bminfo.txt","r"))==NULL)
{
printf("Can not open the file!");
exit(0);
}
else
{
while (fread(&bm,sizeof(BmInfo),1,fp)==1)
{
if (bm.bmid==a)
{
strcpy(str,bm.bmname);
fclose(fp);
return;
}
}
strcpy(str,"未分配");
fclose(fp);
return;
}
}
void showZW()//显示职务名称
{
FILE *fp;
ZwInfo zw;
if ((fp=fopen("zwinfo.txt","r"))==NULL)
{
printf("Can not open the file!");
exit(0);
}
else
{
while (fread(&zw,sizeof(ZwInfo),1,fp)==1)
{
if (zw.zwId!=0)
{
printf(" %d-%s ",zw.zwId,zw.zwName);
}
}
fclose(fp);
}
}
void showBM()//显示部门名称
{
FILE *fp;
BmInfo bm;
if ((fp=fopen("bminfo.txt","r"))==NULL)
{
printf("Can not open the file!");
exit(0);
}
else
{
while (fread(&bm,sizeof(BmInfo),1,fp)==1)
{
if (bm.bmid!=0)
{
printf(" %d-%s ",bm.bmid,bm.bmname);
}
}
fclose(fp);
return;
}
}
/*******************************************************************************************************************/
/********************************************李文婷设计部分**********************************************************/
void PrintZwTr(int a ,char *zwName,char *zwBZ)//显示职务列表行,职务管理
{
printf("┃ %-7d┃%-24s┃%-38s┃/n",a,zwName,zwBZ);
}
void ZwManage()//职务管理
{
ZwInfo zw[20];
ZwInfo zw1;
/*ZwInfo zwTest;*/
int count=0;
FILE *fp;
int i;
system("cls");
printf("/t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★/n");
printf("/t ★● 欢迎使用 ●★/n");
printf("/t ★● ●★/n");
printf("/t ★★★★★★★★ XWL ★★★★★★★★★/n");
printf("/n");
printf("/t/t/t/t职务管理/n/n");
if ((fp=fopen("zwinfo.txt","r"))==NULL)
{
printf("Can not open file!");
exit(0);
}
else
{
printf("┏━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓/n");
while (fread(&zw1,sizeof(ZwInfo),1,fp)==1)
{
if (zw1.zwId!=0)
{
zw[count].zwId=zw1.zwId;
strcpy(zw[count].zwName,zw1.zwName);
strcpy(zw[count].zwBZ,zw1.zwBZ);
count++;
}
}
for (i=0;i<count;i++)
{
PrintZwTr(zw[i].zwId,zw[i].zwName,zw[i].zwBZ);
if (i==count-1)
{
continue;
}
printf("┣━━━━╋━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━┫/n");
fseek(fp,-sizeof(ZwInfo),SEEK_CUR);
}
// count++;
//}
printf("┗━━━━┻━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━┛/n");
}
printf("/t/t/t┌──────────┐/n");
printf("/t/t/t│ 1 → 添加职务 │/n");
printf("/t/t/t│ 2 → 修改职务 │/n");
printf("/t/t/t│ 3 → 删除职务 │/n");
printf("/t/t/t│ 4 → 返 回 │/n");
printf("/t/t/t└──────────┘/n");
while (1)
{
switch(_getch())
{
case '1':
AddZW();
return;
break;
case '2':
ModifyZW();
return;
break;
case '3':
DelZW();
return;
break;
case '4':
mainpage(3);
return;
break;
}
}
}
void AddZW()//添加职务
{
ZwInfo zw;
ZwInfo zwRead;
int cout=0;
FILE *fp;
printf("添加职务/n/n");
printf("输入职务名称:");
//gets(zw.zwName);
//scanf("%s",zw.zwName);
StringLength(zw.zwName,20,200,0);
printf("输入职务说明:");
//gets(zw.zwBZ);
//scanf("%s",zw.zwBZ);
StringLength(zw.zwBZ,35,200,0);
if ((fp=fopen("zwinfo.txt","r+"))==NULL)
{
printf("Can not open file!");
exit(0);
}
else
{
while (!feof(fp))
{
fread(&zwRead,sizeof(ZwInfo),1,fp);
cout++;
}
zw.zwId=cout;
fwrite(&zw,sizeof(ZwInfo),1,fp);
printf("添加成功!");
fclose(fp);
ZwManage();
return;
}
}
void ModifyZW()//修改职务,输入职务编号进行修改
{
int a;
ZwInfo zw;
FILE *fp;
fpos_t oldpos;
printf("修改职务/n/n");
printf("请输入职务编号:");
scanf("%d",&a);
if ((fp=fopen("zwinfo.txt","r+"))==NULL)
{
printf("Can not open file!");
exit(0);
}
else
{
while (fread(&zw,sizeof(ZwInfo),1,fp)==1)
{
fgetpos(fp,&oldpos);
if (zw.zwId==a)
{
if (a==0)
{
break;
}
printf("输入职务名称(原:%s):",zw.zwName);
StringLength(zw.zwName,20,200,0);
printf("输入职务备注(原:%s):",zw.zwBZ);
//gets(zw.zwBZ);
//scanf("%s",zw.zwBZ);
StringLength(zw.zwBZ,35,200,0);
fsetpos(fp,&oldpos);
fseek(fp,-sizeof(ZwInfo),SEEK_CUR);
fwrite(&zw,sizeof(ZwInfo),1,fp);
fclose(fp);
printf("修改成功/n任意键返回/n");
_getch();
ZwManage();
return;
}
//fwrite(&zw,sizeof(ZwInfo),1,fp);
}
fclose(fp);
printf("未找到!/n任意键返回/n");
//fwrite(&zw,sizeof(ZwInfo),1,fp);
_getch();
ZwManage();
return;
}
}
void DelZW()//删除职务信息,假删除,将职务编号置为零;
{
int a;
ZwInfo zw;
FILE *fp;
fpos_t oldpos;
char key;
printf("删除职务/n/n");
printf("请输入职务编号:");
scanf("%d",&a);
if ((fp=fopen("zwinfo.txt","r+"))==NULL)
{
printf("Can not open file!");
exit(0);
}
else
{
while (fread(&zw,sizeof(ZwInfo),1,fp)==1)
{
fgetpos(fp,&oldpos);
if (zw.zwId==a)
{
if (a==0)
{
break;
}
printf("职务名称:%s/n",zw.zwName);
printf("职务备注:%s/n",zw.zwBZ);
printf("确认删除?<Y/N>/n");
while (1)
{
scanf("%c",&key);
switch(key)
{
case 'y':
case 'Y':
break;
case 'n':
case 'N':
return;
break;
}
if (key=='y'||key=='Y')
{
break;
}
}
zw.zwId=0;
fsetpos(fp,&oldpos);
fseek(fp,-sizeof(ZwInfo),SEEK_CUR);
fwrite(&zw,sizeof(ZwInfo),1,fp);
fclose(fp);
printf("修改成功/n任意键返回/n");
_getch();
ZwManage();
return;
}
//fwrite(&zw,sizeof(ZwInfo),1,fp);
}
fclose(fp);
printf("未找到!/n任意键返回/n");
_getch();
ZwManage();
return;
}
}
/*******************************************************************************************************************/
/********************************************梁芝芝设计部分*******************************************************/
void PrintBmTr(int a ,char *bmname,char *bmphone,char *bmCZphone,char *bmaddress,char *bmQTSM)//显示部门列表行,部门管理
{
printf("┃%-4d┃%-10s┃%-12s┃%-12s┃%-12s┃%-14s┃/n",a,bmname,bmphone,bmCZphone,bmaddress,bmQTSM);
}
void BmManage(int a)//部门管理
{
struct bminfo bmTest;
struct bminfo *h=NULL;
struct bminfo *p=NULL;
struct bminfo *s=NULL;
struct bminfo *c=NULL;
int count=0;
int num,i;
char pointto[4];
FILE *fp;
system("cls");//清屏
printf("/t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★/n");
printf("/t ★● 欢迎使用 ●★/n");
printf("/t ★● ●★/n");
printf("/t ★★★★★★★★ XWL ★★★★★★★★★/n");
printf("/n");
if ((fp=fopen("bminfo.txt","r"))==NULL)
{
printf("Can not open file!");
exit(0);
}
else
{
h=(struct bminfo *)malloc(sizeof(struct bminfo));//分配内存空间并返回第一个字节地址赋给h
p=h;//把h中所存的地址赋值给p
printf("┏━━┳━━━━━┳━━━━━━┳━━━━━━┳━━━━━━┳━━━━━━━┓/n");
while (fread(&bmTest,sizeof(BmInfo),1,fp)==1)//遍历每一条数据
{
if (bmTest.bmid!=0)
{
s=(BmInfo *)malloc(sizeof(BmInfo));//分配内存空间并返回第一个字节地址赋给s
s->bmid=bmTest.bmid;
strcpy(s->bmname,bmTest.bmname);
strcpy(s->bmphone,bmTest.bmphone);
strcpy(s->bmCZphone,bmTest.bmCZphone);
strcpy(s->bmaddress,bmTest.bmaddress);
strcpy(s->bmQTSM,bmTest.bmQTSM);
p->next=s;//将p所存的结构体数组指针中的的节点指向s
p=s;//将s指向的地址赋给p
count++;
}
}
p->next=NULL;
while (h->next!=NULL)
{
h=h->next;
PrintBmTr(h->bmid,h->bmname,h->bmphone,h->bmCZphone,h->bmaddress,h->bmQTSM);
if(count==1)
{
continue;
}
count--;
printf("┣━━╋━━━━━╋━━━━━━╋━━━━━━╋━━━━━━╋━━━━━━━┫/n");
}
c=h;
while (c!=NULL)
{
h=c->next;
free(c);
c=h;
}
printf("┗━━┻━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━━┛/n");
}
for(i=0;i<4;i++)
{
pointto[i]='/0';
}
pointto[a-1]='<';
printf("/t/t/t ┏─────────┓ /n");
printf("/t/t/t │ 部门管理 │ /n");
printf("/t/t/t┏──┴─────────┴──┓ /n");
printf("/t/t/t 1→添加部门 %c /n",pointto[0]);
printf("/t/t/t 2→修改部门 %c /n",pointto[1]);
printf("/t/t/t 3→删除部门 %c /n",pointto[2]);
printf("/t/t/t 4→返 回 %c /n",pointto[3]);
printf("/t/t/t┗───────────────┛ /n");
num=getch()-48;
if(num==-35)
{
switch(a)
{
case 1:
AddBM();
return;
break;
case 2:
ModifyBM();
return;
break;
case 3:
DelBM();
return;
break;
case 4:
mainpage(1);
return;
break;
}
}
else
{
BmManage(num);
}
}
void AddBM()//添加部门
{
BmInfo BM;
BmInfo BMRead;
int cout=0;
int i=0;
FILE *fp;
printf("添加部门/n/n");
printf("请输入部门名称:/n");
StringLength(BM.bmname,9,200,0);
printf("请输入部门联系电话:/n");
StringLength(BM.bmphone,11,200,0);
printf("请输入部门传真电话:/n");
//scanf("%s",BM.bmCZphone);
StringLength(BM.bmCZphone,11,200,0);
printf("请输入部门地址:/n");
//scanf("%s",BM.bmaddress);
StringLength(BM.bmaddress,11,200,0);
printf("其他说明:/n");
//scanf("%s",BM.bmQTSM);
StringLength(BM.bmQTSM,13,200,0);
/*fprintf(fp,"%d %s %s %s %s %s",BM[i].id,BM[i].name,BM[i].phone,BM[i].CZphone,BM[i].address,BM[i].QTSM);*/
if ((fp=fopen("bminfo.txt","r+"))==NULL)
{
printf("Can not open file!");
exit(0);
}
else
{
while (!feof(fp))
{
fread(&BMRead,sizeof(BmInfo),1,fp);
cout++;
}
BM.bmid=cout;
fwrite(&BM,sizeof(BmInfo),1,fp);
printf("添加成功!/n任意键返回/n");
fclose(fp);
_getch();
BmManage(1);
return;
}
}
void ModifyBM()//修改部门,输入部门编号进行修改
{
int a;
BmInfo BM;
FILE *fp;
fpos_t oldpos;//定义文件位置指针
printf("修改部门/n/n");
printf("请输入部门编号:");
scanf("%d",&a);
if ((fp=fopen("bminfo.txt","r+"))==NULL)
{
printf("Can not open file!");
exit(0);
}
else
{
while (fread(&BM,sizeof(BmInfo),1,fp)==1)
{
fgetpos(fp,&oldpos);
if (BM.bmid==a)
{
if (a==0)
{
break;
}
printf("输入部门名称(原:%s):",BM.bmname);
//scanf("%s",BM.bmname);
StringLength(BM.bmname,9,200,0);
printf("输入部门电话(原:%s):",BM.bmphone);
//scanf("%s",BM.bmphone);
StringLength(BM.bmphone,11,200,0);
printf("请输入部门传真电话(原:%s):",BM.bmCZphone);
//scanf("%s",BM.bmCZphone);
StringLength(BM.bmCZphone,11,200,0);
printf("请输入部门地址(原:%s):",BM.bmaddress);
//scanf("%s",BM.bmaddress);
StringLength(BM.bmaddress,11,200,0);
printf("其他说明(原:%s):",BM.bmQTSM);
//scanf("%s",BM.bmQTSM);
StringLength(BM.bmQTSM,13,200,0);
fsetpos(fp,&oldpos);
fseek(fp,-sizeof(BmInfo),1);
fwrite(&BM,sizeof(BmInfo),1,fp);
fclose(fp);
printf("修改成功/n任意键返回/n");
_getch();
BmManage(1);
return;
}
}
printf("未找到!");
fclose(fp);
return;
}
}
void DelBM()//删除部门信息,假删除,将部门编号置为零
{
int a;
BmInfo bm;
FILE *fp;
fpos_t oldpos;
char key;
printf("删除部门/n/n");
printf("请输入部门编号:");
scanf("%d",&a);
if ((fp=fopen("bminfo.txt","r+"))==NULL)
{
printf("Can not open file!");
exit(0);
}
else
{
while (fread(&bm,sizeof(BmInfo),1,fp)==1)
{
fgetpos(fp,&oldpos);
if (bm.bmid==a)
{
if (a==0)
{
break;
}
printf("部门名称:%s/n",bm.bmname);
printf("部门地址:%s/n",bm.bmaddress);
printf("确认删除?<Y/N>/n");
while (1)
{
scanf("%c",&key);
switch(key)
{
case 'y':
case 'Y':
break;
case 'n':
case 'N':
return;
break;
}
if (key=='y'||key=='Y')
{
break;
}
}
bm.bmid=0;
fsetpos(fp,&oldpos);
fseek(fp,-sizeof(BmInfo),SEEK_CUR);
fwrite(&bm,sizeof(BmInfo),1,fp);
fclose(fp);
printf("修改成功/n任意键返回/n");
_getch();
BmManage(1);
return;
}
}
fclose(fp);
printf("未找到!/n任意键返回/n");
_getch();
BmManage(1);
return;
}
}
/*******************************************************************************************************************/
/********************************************王强设计部分**********************************************************/
void tjinfo(int a)//显示员工统计信息选择菜单
{
int b;
int i,num;
char pointto[3];
system("cls");
for(i=0;i<3;i++)
{
pointto[i]='/0';
}
pointto[a-1]='<';
printf("/t★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★/n");
printf("/t ★● 欢迎使用 ●★/n");
printf("/t ★● ●★/n");
printf("/t ★★★★★★★★ XWL ★★★★★★★★★/n");
printf("/n");
printf("/t/t ┏─────────┓ /n");
printf("/t/t │ 员工信息统计 │ /n");
printf("/t/t┏───┴─────────┴───┓ /n/n/n");
printf("/t/t 1,在职人员明细统计 %c /n/n",pointto[0]);
printf("/t/t 2,离职人员信息统计 %c /n/n",pointto[1]);
printf("/t/t 3,返回 %c /n/n/n",pointto[2]);
printf("/t/t┗─────────────────┛ /n");
num=getch()-48;
if(num==-35)
{
switch(a)
{
case 1:
Tjzjinfo(1);
return;
break;
case 2:
Tjljinfo(2);
break;
case 3:
mainpage(4);
}
}
else
{
tjinfo(num);
}
}
void Tjzjinfo()//统计在职人数信息
{
FILE *fp;
int key;
int i;
int m;
int cot=0;
char bm[5];
char zw[5];
char sdt[5];
long length;
long length1;
system("cls");
//以读写的方式打开指定的文件
fp=fopen("em","r+");
if(fp==NULL)
{
printf("open error!!/n");
//exit(0);
}
else
{
//rewind(fp);
fseek(fp,0L,SEEK_END);
length=ftell(fp);
length1=sizeof(struct employee);
m=length/length1;
//调试用的代码
//printf("%d/n",m);
//rewind(fp);
//通过for循环查找文件中的全部数据
for (i=0;i<m;i++)
{
fseek(fp,i*sizeof(struct employee),0);
fread(&em[i],sizeof(struct employee),1,fp);
//这里不从0开始,是为后面的删除做准备
if(em[i].num!=0&&em[i].state==1)
{
cot++;
getZW(zw,em[i].Zw);
getBM(bm,em[i].Ssbm);
switch(em[i].state)
{
case 1:
strcpy(sdt, "在职");
break;
case 2:
strcpy(sdt, "离职");
break;
default:
strcpy(sdt, "离职");
break;
}
printf("┌─┬───┬──┬───┬───┬────────┬────┬───┐/n");
printf("│ │姓名 │性别│出生日│进入日│ 电话号码 │ 职位 │ 部门 │ /n");
printf("├─┼───┼──┼───┼───┼────────┼────┼───┤/n");
printf("│%-1d │%-5s │ %-2s │ %-5d│ %-5s│ %-15s│ %-3s │%-3s │/n",em[i].num,em[i].name,em[i].sex,em[i].Csrq,em[i].Jrsj,em[i].phone,zw,bm);
printf("├─┴───┴──┴───┼───┴────────┼────┼───┤/n");
printf("│ 身份证号 │ 邮箱 │ 状态 │ 其他 │/n");
printf("├────────────┼────────────┼────┼───┤/n");
printf("│%-24s│%-24s│ %-6s│%-6s│/n",em[i].Sfzh,em[i].mail,sdt,em[i].Qita);
printf("└────────────┴────────────┴────┴───┘/n");
}
}
printf("──────────/n");
printf("在职人数一共有:%d个/n",cot);
printf("──────────/n");
printf("/t/t/t/t/t/t/t┏────┓/n");
printf("/t/t/t/t/t/t/t按任意键返回/n");
printf("/t/t/t/t/t/t/t┗────┛/n");
getch();
tjinfo(1);
}
}
void Tjljinfo()//统计离职员工信息
{
FILE *fp;
int cot=0;
int key;
int i;
int m;
char bm[5];
char zw[5];
char sdt[5];
long length;
long length1;
system("cls");
//以读写的方式打开指定的文件
fp=fopen("em","r+");
if(fp==NULL)
{
printf("open error!!/n");
//exit(0);
}
else
{
//rewind(fp);
fseek(fp,0L,SEEK_END);
length=ftell(fp);
length1=sizeof(struct employee);
m=length/length1;
//通过for循环查找文件中的全部数据
for (i=0;i<m;i++)
{
fseek(fp,i*sizeof(struct employee),0);
fread(&em[i],sizeof(struct employee),1,fp);
if(em[i].num!=0&&em[i].state!=1)
{
cot++;
getZW(zw,em[i].Zw);
getBM(bm,em[i].Ssbm);
switch(em[i].state)
{
case 1:
strcpy(sdt, "在职");
break;
case 2:
strcpy(sdt, "离职");
break;
default:
strcpy(sdt, "离职");
break;
}
printf("┌─┬───┬──┬───┬───┬────────┬────┬───┐/n");
printf("│ │姓名 │性别│出生日│进入日│ 电话号码 │ 职位 │ 部门 │ /n");
printf("├─┼───┼──┼───┼───┼────────┼────┼───┤/n");
printf("│%-1d │%-5s │ %-2s │ %-5d│ %-5s│ %-15s│ %-3s │%-3s │/n",em[i].num,em[i].name,em[i].sex,em[i].Csrq,em[i].Jrsj,em[i].phone,zw,bm);
printf("├─┴───┴──┴───┼───┴────────┼────┼───┤/n");
printf("│ 身份证号 │ 邮箱 │ 状态 │ 其他 │/n");
printf("├────────────┼────────────┼────┼───┤/n");
printf("│%-24s│%-24s│ %-6s│%-6s│/n",em[i].Sfzh,em[i].mail,sdt,em[i].Qita);
printf("└────────────┴────────────┴────┴───┘/n");
}
}
printf("──────────/n");
printf("离职人数一共有:%d个/n",cot);
printf("──────────/n");
printf("/t/t/t/t/t/t/t┏────┓/n");
printf("/t/t/t/t/t/t/t按任意键返回/n");
printf("/t/t/t/t/t/t/t┗────┛/n");
getch();
tjinfo(2);
}
}
/*******************************************************************************************************************/
/*本系统相关详情
系统名称:企业员工管理系统
设计时间:2010年8月18日——2010年8月23日
设计地点:四川师范大学第一实验楼西403
设计团队:XWL【肖雄(组长),魏凡(主要编码人员),王强(编码人员),李文婷(测试和文档编写人员),梁芝芝(测试人员)】
美观设计:王强,梁芝芝,肖雄
合并人:肖雄
备注:团队人员全部参加编码阶段,只是每人侧重不同
*/
企业员工管理系统 c语言版
版权声明:本文为xiaoxionglishuang原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。