#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/
企业员工管理系统 c语言版
最新推荐文章于 2024-08-13 11:44:17 发布
这是一个使用C语言编写的员工管理系统,包含了员工结构体、登录用户结构体、职务和部门结构体等,实现了登录、注册、用户管理、职务管理、部门管理等功能,包括增删改查操作。系统还提供了主菜单、用户登陆后的操作和密码输入的处理方法。
摘要由CSDN通过智能技术生成