C-企业员工管理系统
VS2017
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#include <conio.h>
#pragma warning(disable:4996)
typedef struct Company
{
char id[10]; //id
char job[10]; //职务
char name[10]; //姓名
char sex[3]; //性别
int age; //年龄
char edu[3]; //学历
double wage; //工资
char tel[10]; //电话
char phone[13]; //手机
char qq[20]; //QQ
char address[30]; //住址
struct Company *next;
}company;
#define prt printf("编 号 职 务 姓 名 性 别 年 龄 学 历 工 资 电 话 手 机 QQ 住 址 \n");
#define prt1 printf("%4s%12s%11s%10s%12d%11s%13.2lf%13s%13s%13s%10s\n", p->id, p->job, p->name, p->sex, p->age, p->edu, p->wage, p->tel, p->phone, p->qq, p->address);
//全局变量
int C_staff; //员工总数
double C_wage = 0; //员工工资总数
int m_staff; //男员工
int w_staff; //女员工
company *C_mphead = NULL; //链表头
void C_creat(company **p); //创建链表
void C_password(void); //登陆密码
void C_main(void); //入口
void C_input(company *p); //输入员工信息
void C_search(company *pp); //查询员工信息
void C_prt(company *p); //显示员工信息
void C_modify(company *pp); //修改员工信息
void C_delete(company *pp); //删除员工信息
void C_sta(void); //统计员工信息
void C_rstpwd(void); //重置系统密码
void C_pprt(company *p); //打印
void C_destory(company *pp); //销毁链表
int main(void)
{
C_password();
system("pause");
return 0;
}
//打印
void C_pprt(company *p)
{
if (p != NULL)
{
prt;
prt1;
printf("\n");
}
}
//登陆密码
void C_password(void)
{
char C_pwd1[9];
char C_pwd2[9];
int C_n = 0;
FILE *pf = NULL;
if (!(pf = fopen("pwd.txt", "r+b")))
{
printf("读取文件失败!\n");
getchar();
exit(1);
}
fgetc(pf);
if (feof(pf))
{
rst1:
rewind(pf);
printf("请创建密码:");
scanf("%s", C_pwd1);
getchar();
printf("请确认密码:");
scanf("%s", C_pwd2);
getchar();
if (strcmp(C_pwd1, C_pwd2) == 0)
{
fwrite(C_pwd1, sizeof(char) * 9, 1, pf);
printf("密码创建成功!请重新打开系统!");
getchar();
exit(1);
}
else
{
printf("两次密码输入有误,请重新输入!\n");
goto rst1;
}
}
else
{
rst2:
rewind(pf);
printf("请输入登陆密码:");
scanf("%s", C_pwd1);
getchar();
fflush(stdin);
fread(C_pwd2, sizeof(char) * 9, 1, pf);
if (strcmp(C_pwd1, C_pwd2) == 0)
{
C_creat(&C_mphead);
system("cls");
C_main();
getchar();
}
else
{
C_n++;
if (C_n == 3)
{
printf("密码错误三次,按任意键退出!");
getchar();
exit(1);
}
printf("密码输入有误!请重新输入!\n");
goto rst2;
}
}
fclose(pf);
pf = NULL;
}
//入口
void C_main(void)
{
int i;
char key;
printf(" 企业员工管理系统\n");
printf(" ");
for (i = 0; i < 32; i++)
{
printf("*");
}
printf("\n");
printf(" | 1.输入员工信息 |\n\n");
printf(" | 2.查询员工信息 |\n\n");
printf(" | 3.显示员工信息 |\n\n");
printf(" | 4.修改员工信息 |\n\n");
printf(" | 5.删除员工信息 |\n\n");
printf(" | 6.统计员工信息 |\n\n");
printf(" | 7.重置系统密码 |\n\n");
printf(" | 0.退出系统 |\n");
printf(" ");
for (i = 0; i < 32; i++)
{
printf("*");
}
printf("\n\n");
rst:
printf("请输入选项(输入0退出):");
scanf("%c", &key);
getchar();
fflush(stdin);
if (key == '0')
{
C_destory(C_mphead);
exit(1);
}
switch (key)
{
case '1':
C_input(C_mphead); //输入员工信息
break;
case '2':
C_search(C_mphead); //查询员工信息
break;
case '3':
C_prt(C_mphead); //显示员工信息
break;
case '4':
C_modify(C_mphead); //修改员工信息
break;
case '5':
C_delete(C_mphead); //删除员工信息
break;
case '6':
C_sta(); //统计员工信息
break;
case '7':
C_rstpwd(); //重置系统密码
break;
case '0':
C_destory(C_mphead);
exit(1);
break;
default:
printf("输入有误!按任意键重新输入!\n");
getchar();
goto rst;
break;
}
}
//创建链表
void C_creat(company **p)
{
*p = (company *)malloc(sizeof(company));
(*p)->next = NULL;
}
//输入员工系统
void C_input(company *p)
{
company *C_phead = NULL;
company *C_pp = NULL;
C_phead = p;
if (p->next = NULL)
{
while (1)
{
C_pp = (company *)malloc(sizeof(company));
printf("请输入编号:\n");
scanf("%s", C_pp->id);
getchar();
printf("请输入职务:\n");
scanf("%s", C_pp->job);
getchar();
printf("请输入姓名:\n");
scanf("%s", C_pp->name);
getchar();
printf("请输入性别:\n");
scanf("%s", C_pp->sex);
getchar();
printf("请输入年龄:\n");
scanf("%d", &C_pp->age);
getchar();
printf("请输入学历:\n");
scanf("%s", C_pp->edu);
getchar();
printf("请输入工资:\n");
scanf("%lf", &C_pp->wage);
getchar();
printf("请输入电话:\n");
scanf("%s", C_pp->tel);
getchar();
printf("请输入手机:\n");
scanf("%s", C_pp->phone);
getchar();
printf("请输入QQ:\n");
scanf("%s", C_pp->qq);
getchar();
printf("请输入地址:\n");
scanf("%s", C_pp->address);
getchar();
fflush(stdin);
C_pp->next = NULL;
C_phead->next = C_pp;
C_phead = C_pp;
system("cls");
C_pprt(C_pp);
C_staff++;
if (strcmp(C_pp->sex, "男") == 0)
{
m_staff++;
}
else
{
w_staff++;
}
C_wage += C_pp->wage;
printf("输入成功!按任意键继续输入,按0返回主菜单!\n");
if (getch() == '0')
{
system("cls");
C_main();
}
system("cls");
}
}
else
{
while (C_phead->next != NULL)
{
C_phead = C_phead->next;
}
while (1)
{
C_pp = (company *)malloc(sizeof(company));
printf("请输入编号:\n");
scanf("%s", C_pp->id);
getchar();
printf("请输入职务:\n");
scanf("%s", C_pp->job);
getchar();
printf("请输入姓名:\n");
scanf("%s", C_pp->name);
getchar();
printf("请输入性别:\n");
scanf("%s", C_pp->sex);
getchar();
printf("请输入年龄:\n");
scanf("%d", &C_pp->age);
getchar();
printf("请输入学历:\n");
scanf("%s", C_pp->edu);
getchar();
printf("请输入工资:\n");
scanf("%lf", &C_pp->wage);
getchar();
printf("请输入电话:\n");
scanf("%s", C_pp->tel);
getchar();
printf("请输入手机:\n");
scanf("%s", C_pp->phone);
getchar();
printf("请输入QQ:\n");
scanf("%s", C_pp->qq);
getchar();
printf("请输入地址:\n");
scanf("%s", C_pp->address);
getchar();
fflush(stdin);
C_pp->next = NULL;
C_phead->next = C_pp;
C_phead = C_pp;
system("cls");
C_pprt(C_pp);
C_staff++;
if (strcmp(C_pp->sex, "男") == 0)
{
m_staff++;
}
else
{
w_staff++;
}
C_wage += C_pp->wage;
printf("输入成功!按任意键继续输入,按0返回主菜单!\n");
if (getch() == '0')
{
system("cls");
C_main();
}
system("cls");
}
}
}
//重置系统密码
void C_rstpwd(void)
{
FILE *pf = NULL;
char C_pwd1[9];
char C_pwd2[9];
if (!(pf = fopen("pwd.txt", "wb")))
{
printf("打开文件失败!按任意键退出!\n");
getchar();
exit(1);
}
rst1:
printf("请输入新的密码:");
scanf("%s", C_pwd1);
getchar();
printf("请再次确认新密码:");
scanf("%s", C_pwd2);
getchar();
if (strcmp(C_pwd1, C_pwd2) == 0)
{
fwrite(C_pwd1, sizeof(char) * 9, 1, pf);
printf("密码重置成功!请重新打开系统!");
getchar();
exit(1);
}
else
{
printf("两次密码输入有误,请重新输入!\n");
goto rst1;
}
fclose(pf);
pf = NULL;
}
//显示员工信息
void C_prt(company *pp)
{
company *p = pp->next;
prt;
while (p != NULL)
{
prt1;
p = p->next;
}
printf("显示完毕!按任意键返回主菜单!\n");
getch();
system("cls");
C_main();
}
//查询员工信息
void C_search(company *pp)
{
company *p = NULL;
p = pp->next;
char num;
char id[10];
char name[10];
char job[10];
printf("1>按编号查询\n");
printf("2>按姓名查询\n");
printf("3>按职位查询\n");
printf("请选择查询方式:");
scanf("%c", &num);
getchar();
if (num == '1')
{
printf("请输入需要查询的编号:");
scanf("%s", id);
getchar();
prt;
while (p != NULL)
{
if (strcmp(p->id, id) == 0)
{
prt1;
}
p = p->next;
}
printf("查询完毕!按任意键返回主菜单!\n");
getch();
system("cls");
C_main();
}
else if (num == '2')
{
printf("请输入需要查询的姓名:");
scanf("%s", name);
getchar();
prt;
while (p != NULL)
{
if (strcmp(p->name, name) == 0)
{
prt1;
}
p = p->next;
}
printf("查询完毕!按任意键返回主菜单!\n");
getch();
system("cls");
C_main();
}
else if (num == '3')
{
printf("请输入需要查询的职务:");
scanf("%s", job);
getchar();
prt;
while (p != NULL)
{
if (strcmp(p->job, job) == 0)
{
prt1;
}
p = p->next;
}
printf("查询完毕!按任意键返回主菜单!\n");
getch();
system("cls");
C_main();
}
}
//统计员工信息
void C_sta(void)
{
printf("员工总数: %d",C_staff);
printf("\n\n");
printf("男员工数: %d", m_staff);
printf("\n\n");
printf("女员工数: %d", w_staff);
printf("\n\n");
printf("总工资数: %.2lf", C_wage);
printf("\n\n");
printf("统计完毕!按任意键返回主菜单!\n");
getch();
system("cls");
C_main();
}
//删除员工信息
void C_delete(company *pp)
{
company *p = NULL;
company *pt = NULL;
company *ptemp = NULL;
char num;
char id[10];
printf("1>按编号删除\n");
printf("2>删除全部\n");
scanf("%c", &num);
getchar();
p = pp;
if (num == '1')
{
printf("请输入需要删除的编号:");
scanf("%s", id);
getchar();
fflush(stdin);
while (p->next != NULL)
{
if (strcmp(p->next->id, id) == 0)
{
ptemp = p->next;
p->next = ptemp->next;
free(ptemp);
ptemp = NULL;
}
else
{
p = p->next;
}
}
printf("删除完毕!按任意键返回主菜单!\n");
getch();
system("cls");
C_main();
}
else if (num == '2')
{
while (p->next != NULL)
{
ptemp = p->next;
p->next = ptemp->next;
free(ptemp);
ptemp = NULL;
}
printf("删除完毕!按任意键返回主菜单!\n");
getch();
system("cls");
C_main();
}
}
//修改员工信息
void C_modify(company *pp)
{
company *p = NULL;
char id[10];
printf("请输入需要修改的编号:");
scanf("%s", id);
getchar();
p = pp;
while (p->next != NULL)
{
if (strcmp(p->next->id, id) == 0)
{
printf("请输入编号:\n");
scanf("%s", p->next->id);
getchar();
printf("请输入职务:\n");
scanf("%s", p->next->job);
getchar();
printf("请输入姓名:\n");
scanf("%s", p->next->name);
getchar();
printf("请输入性别:\n");
scanf("%s", p->next->sex);
getchar();
printf("请输入年龄:\n");
scanf("%d", &p->next->age);
getchar();
printf("请输入学历:\n");
scanf("%s", p->next->edu);
getchar();
printf("请输入工资:\n");
scanf("%lf", &p->next->wage);
getchar();
printf("请输入电话:\n");
scanf("%s", p->next->tel);
getchar();
printf("请输入手机:\n");
scanf("%s", p->next->phone);
getchar();
printf("请输入QQ:\n");
scanf("%s", p->next->qq);
getchar();
printf("请输入地址:\n");
scanf("%s", p->next->address);
getchar();
fflush(stdin);
}
p = p->next;
}
printf("修改完毕!按任意键返回主菜单!\n");
getch();
system("cls");
C_main();
}
//销毁
void C_destory(company *pp)
{
company *p = pp;
company *ptemp = NULL;
while (p->next != NULL)
{
ptemp = p->next;
p->next = ptemp->next;
free(ptemp);
ptemp = NULL;
}
free(p);
p = NULL;
}