//头文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//存储员工信息的结构体
typedef struct employee
{
int num; //员工号
char duty[10]; //员工职务
char name[10]; //员工姓名
char sex[3]; //员工性别
unsigned char age; //员工年龄
char edu[10]; //教育水平
int salary; //员工工资
char tel_office[13]; //办公电话
char tel_home[13]; //家庭电话
char mobile[13]; //手机
char qq[11]; //qq号码
char address[31]; //家庭住址
struct employee *next;
}EMP;
//全局变量
char password[9]; //系统密码
EMP *emp_first,*emp_end; //定义指向链表的头结点和尾节点的指针
char gsave,gfirst; //判断标示
//自定义函数声明
void addemp(void); //添加员工信息的函数
void findemp(void); //查找员工信息的函数
void listemp(void); //显示员工信息列表的函数
void modifyemp(void); //修改员工信息的函数
void summaryemp(void); //统计员工信息的函数
void delemp(void); //删除员工信息的函数
void resetpwd(void); //重置系统的函数
void readdata(void); //读取文件数据的函数
void savedata(void); //保存数据的函数
int modi_age(int s); //修改员工年龄的函数
int modi_salary(int s); //修改员工工资的函数
char *modi_field(char *field,char *s,int n); //修改员工其他信息的函数
EMP *findname(char *name); //按员工姓名查找员工信息
EMP *findnum(int num); //按员工工号查找员工信息
EMP *findtelephone(char *name); //按员工的通讯号码查找员工信息
EMP *findqq(char *name); //按员工的QQ号查找员工信息
void displayemp(EMP *emp,char *field,char *name); //显示员工信息
void checkfirst(void); //初始化检测
void bound(char ch,int n); //画出分界线
void login(); //登录检测
void menu(); //主菜单列表
/**
* 员工信息添加
*/
void addemp()
{
FILE *fp; //声明一个文件型指针
EMP *emp1; //声明一个结构型指针
int i=0;
char choice='y';
if((fp=fopen("employee.dat","ab"))==NULL) //判断信息文件中是否有信息
{
printf("打开文件employee.dat出错!\n");
getch();
return;
}
do{
i++;
emp1=(EMP *)malloc(sizeof(EMP)); //申请一段内存
if(emp1==NULL) //判断内存是否分配成功
{
printf("内存分配失败,按任意键退出!\n");
getch();
return;
}
printf("请输入第%d个员工的信息,\n",i);
bound('_',30);
printf("工号:");
scanf("%d",&emp1->num);
printf("职务:");
scanf("%s",&emp1->duty);
printf("姓名:");
scanf("%s",&emp1->name);
printf("性别:");
scanf("%s",&emp1->sex);
printf("年龄:");
scanf("%d",&emp1->age);
printf("文化程度:");
scanf("%s",&emp1->edu);
printf("工资:");
scanf("%d",&emp1->salary);
printf("办公电话:");
scanf("%s",&emp1->tel_office);
printf("家庭电话:");
scanf("%s",&emp1->tel_home);
printf("移动电话:");
scanf("%s",&emp1->mobile);
printf("QQ:");
scanf("%s",&emp1->qq);
printf("地址:");
scanf("%s",&emp1->address);
emp1->next=NULL;
if(emp_first==NULL) //判断链表头指针是否为空
{
emp_first=emp1;
emp_end=emp1;
}else {
emp_end->next=emp1;
emp_end=emp1;
}
fwrite(emp_end,sizeof(EMP),1,fp); //对数据流添加数据项
gfirst=0;
printf("\n");
bound('_',30);
printf("\n是否继续输入?(y/n)");
fflush(stdin); //清除缓冲区
choice=getch();
if(toupper(choice)!='Y') //把小写字母转换成大写字母
{
fclose(fp); //关闭文件流
printf("\n输入完毕,按任意键返回\n");
getch();
return;
}
system("cls");
}while(1);
}
void bound(char ch,int n)
{
while(n--)
putch(ch);
printf("\n");
return;
}
/*首次使用,进行用户信息初始化*/
void checkfirst()
{
FILE *fp,*fp1; //声明文件型指针
char pwd[9],pwd1[9],pwd2[9],pwd3[9],ch;
int i;
char strt='8';
if((fp=fopen("config.bat","rb"))==NULL) //判断系统密码文件是否为空
{
printf("\n新系统,请进行相应的初始化操作!\n");
bound('_',50);
getch();
do{
printf("\n设置密码,请不要超过8位:");
for(i=0;i<8&&((pwd[i]=getch())!=13);i++)
putch('*');
printf("\n再确认一次密码:");
for(i=0;i<8&&((pwd1[i]=getch())!=13);i++)
putch('*');
pwd[i]='\0';
pwd1[i]='\0';
if(strcmp(pwd,pwd1)!=0) //判断两次新密码是否一致
{
printf("\n两次密码输入不一致,请重新输入!\n\n");
}
else break;
}while(1);
if((fp1=fopen("config.bat","wb"))==NULL)
{
printf("\n系统创建失败,请按任意键退出!");
getch();
exit(1);
}
i=0;
while(pwd[i])
{
pwd2[i]=(pwd[i]^ strt);
putw(pwd2[i],fp1); //将数组元素送入文件流中
i++;
}
fclose(fp1); //关闭文件流
printf("\n\n系统初始化成功,按任意键退出后,再重新进入!\n");
getch();
exit(1);
}else{
i=0;
while(!feof(fp)&&i<8) //判断是否读完密码文件
pwd[i++]=(getw(fp)^strt); //从文件流中读出字符赋给数组
pwd[i]='\0';
if(i>=8) i--;
while(pwd[i]!=-1&&i>=0)
i--;
pwd[i]='\0'; //将数组最后一位设定为字符串的结束符
strcpy(password,pwd); //将数组pwd中的数据复制到数组password中
}
}
void delemp()
{
int findok=0;
EMP *emp1,*emp2;
char name[10],choice;
system("cls"); //对屏幕清屏
printf("\n输入要删除的员工姓名:");
scanf("%s",name);
emp1=emp_first;
emp2=emp1;
while(emp1)
{
if(strcmp(emp1->name,name)==0)
{
findok=1;
system("cls");
printf("员工:%s的信息如下:\n",emp1->name);
bound('_',40);
printf("工号:%d\n",emp1->num);
printf("职务:%s\n",emp1->duty);
printf("姓名:%s\n",emp1->name);
printf("性别:%s\n",emp1->sex);
printf("年龄:%d\n",emp1->age);
printf("文化程度:%s\n",emp1->edu);
printf("工资:%d\n",emp1->salary);
printf("办公电话:%s\n",emp1->tel_office);
printf("家庭电话:%s\n",emp1->tel_home);
printf("移动电话:%s\n",emp1-
- 1
- 2
- 3
前往页