链表 + 文件
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct staff
{
char num[20]; //职工号
char name[20]; //姓名
char sex[5]; //性别
char birthday[20];//出生日期
char study[20]; //学历
int salary; //工资
char live[20]; //住址
char tel[20]; //电话
struct staff *next;
}STAFF;
STAFF *FindLast(STAFF *head);//查找尾节点
void InsertLast(STAFF *head,STAFF *Pt);//在尾结点插入
STAFF *BuildHand(STAFF *head);//手动录入员工信息
void *BuildFile(STAFF *head);//文件录入员工信息
void Print(STAFF *head);//输出员工信息
void SeekName(STAFF *head);//按姓名查找职员
void SeekNum(STAFF *head);//按职工号查找职员
STAFF *Delete(STAFF *head);//删除员工信息
void InsertJiaRu(STAFF *head);//插入职工信息;
void *Change(STAFF *head);//修改员工信息
void Save(STAFF *head);
void menu();//菜单
int main()
{
STAFF *head = (STAFF*)malloc(sizeof(STAFF));
head->next = NULL;
int k;
BuildFile(head);
while(1)
{
menu();
scanf("%d", &k);
switch(k)
{
case 1: head=BuildHand(head); break;
case 2: SeekName(head); break;
case 3: SeekNum(head); break;
case 4: head=Delete(head); break;
case 5: Change(head); break;
case 6: Print(head); break;
case 0: printf(" 谢谢对本系统的使用!\n");
Save(head);
exit(0);
break;
}
system("pause");
system("cls");
}
printf("************************************谢谢使用************************************\n");
return 0;
}
STAFF *FindLast(STAFF *head)//查找尾节点
{
STAFF *pr;
pr = head;
while(pr->next != NULL)
{
pr = pr->next;
}
return pr;
}
void InsertLast(STAFF *head,STAFF *Pt)//在尾结点插入
{
STAFF *prePt;
prePt = FindLast(head);
prePt->next = Pt;
Pt->next = NULL;
}
void *BuildFile(STAFF *head)//文件录入员工信息
{
STAFF *prePt;
char num[20]; //职工号
char name[20]; //姓名
char sex[5]; //性别
char birthday[20];//出生日期
char study[20]; //学历
int salary; //工资
char live[20]; //住址
char tel[20]; //电话
FILE *fp;
fp=fopen("wenjian.txt","r");
if(fp == NULL)
{
printf("Failed!\n");
}
char check[20];
while(fscanf(fp,"%s%s%s%s%s%d%s%s\n", num, name, sex, birthday, study, &salary, live, tel) != EOF)
{
STAFF *Pt = (STAFF*)malloc(sizeof(STAFF));
strcpy(Pt->num, num);
strcpy(Pt->name, name);
strcpy(Pt->sex, sex);
strcpy(Pt->birthday, birthday);
strcpy(Pt->study, study);
Pt->salary = salary;
strcpy(Pt->live, live);
strcpy(Pt->tel, tel);
InsertLast(head, Pt);
}
fclose(fp);
}
STAFF *BuildHand(STAFF *head)//手动录入员工信息
{
int num;
printf("请输入需要录入信息的员工数量:");
scanf("%d", &num);
STAFF *Pt, *prePt;
Pt = (STAFF*)malloc(sizeof(STAFF));
if(Pt!=NULL)
{
printf("请输入职工号:");
scanf("%s", Pt->num);
printf("请输入员工姓名:");
scanf("%s", Pt->name);
printf("请输入员工性别:");
scanf("%s", Pt->sex);
printf("请输入员工出生日期:");
scanf("%s", Pt->birthday);
printf("请输入员工学历:");
scanf("%s", Pt->study);
printf("请输入员工工资:");
scanf("%d", &Pt->salary);
printf("请输入员工住址:");
scanf("%s", Pt->live);
printf("请输入员工电话:");
scanf("%s", Pt->tel);
prePt = FindLast(head);
prePt->next = Pt;
Pt->next = NULL;
}
else
{
printf("Failed!\n");
exit(0);
}
for(int i = 1; i < num; i ++)
{
Pt = (STAFF*)malloc(sizeof(STAFF));
if(Pt != NULL)
{
printf("请输入职工号:");
scanf("%s", Pt->num);
printf("请输入员工姓名:");
scanf("%s", Pt->name);
printf("请输入员工性别:");
scanf("%s", Pt->sex);
printf("请输入员工出生日期:");
scanf("%s", Pt->birthday);
printf("请输入员工学历:");
scanf("%s", Pt->study);
printf("请输入员工工资:");
scanf("%d", &Pt->salary);
printf("请输入员工住址:");
scanf("%s", Pt->live);
printf("请输入员工电话:");
scanf("%s", Pt->tel);
InsertLast(head, Pt);
}
else
{
printf("Failed!\n");
exit(0);
}
}
return head;
}
void Print(STAFF *head)//输出员工信息
{
STAFF *p = head;
if(p->next == NULL)
{
printf("没有职工信息可以输出!\n");
}
else
{
p = p->next;
printf("\n职工号\t姓名\t性别\t出生日期\t学历\t工资\t住址\t电话号码\n");
while(p != NULL)
{
printf("%s\t%s\t%s\t%s\t%s\t%d\t%s\t%s\n", p->num, p->name, p->sex, p->birthday, p->study,
p->salary, p->live, p->tel);
p=p->next;
}
}
}
void SeekName(STAFF *head)//按姓名查找职员
{
STAFF *Pt = head;
char na[20];
printf("\n请输入查找职员的姓名:\n");
scanf("%s", na);
while(strcmp(Pt->name, na) != 0 && Pt->next != NULL)
{
Pt = Pt->next;
}
if(strcmp(Pt->name, na) == 0)
{
printf("\n职工号\t姓名\t性别\t出生日期\t学历\t工资\t住址\t电话号码\n");
printf("%s\t%s\t%s\t%s\t%s\t%d\t%s\t%s\n", Pt->num, Pt->name, Pt->sex, Pt->birthday, Pt->study,
Pt->salary, Pt->live, Pt->tel);
}
else
{
printf("\n未查找到该员工!\n");
}
}
void SeekNum(STAFF *head)//按工号查找职员
{
STAFF *Pt = head;
char nu[20];
printf("请输入查找职工的职工号:\n");
scanf("%s", nu);
while(strcmp(Pt->num,nu) != 0 && Pt->next != NULL)
{
Pt = Pt->next;
}
if(strcmp(Pt->num, nu) == 0)
{
printf("\n职工号\t姓名\t性别\t出生日期\t学历\t工资\t住址\t电话号码\n");
printf("%s\t%s\t%s\t%s\t%s\t%d\t%s\t%s\n", Pt->num, Pt->name, Pt->sex, Pt->birthday, Pt->study,
Pt->salary, Pt->live, Pt->tel);
}
else
{
printf("\n未查找到该员工!\n");
}
}
void InsertJiaRu(STAFF *head)//插入职工信息;
{
STAFF *Pt = (STAFF*)malloc(sizeof(STAFF));
printf("请输入职工号:");
scanf("%s", Pt->num);
printf("请输入员工姓名:");
scanf("%s", Pt->name);
printf("请输入员工性别:");
scanf("%s", Pt->sex);
printf("请输入员工出生日期:");
scanf("%s", Pt->birthday);
printf("请输入员工学历:");
scanf("%s", Pt->study);
printf("请输入员工工资:");
scanf("%d", &Pt->salary);
printf("请输入员工住址:");
scanf("%s", Pt->live);
printf("请输入员工电话:");
scanf("%s", Pt->tel);
InsertLast(head, Pt);
}
STAFF *Delete(STAFF *head)//删除员工信息
{
STAFF *Pt = head, *nowPt = NULL;
char nu[20];
if(Pt == NULL)
{
printf("\n现在没有职工信息可以删除!\n");
}
printf("\n请输入你要删除的职工号:\n");
scanf("%s", nu);
if(strcmp(Pt->num, nu) == 0)
{
head = head->next;
free(Pt);
printf("删除成功!\n");
}
while(Pt->next != NULL)
{
if(strcmp(Pt->next->num, nu) == 0)
{
nowPt = Pt->next;
Pt->next = Pt->next->next;
free(nowPt);
break;
}
Pt = Pt->next;
}
return head;
}
void *Change(STAFF *head)//修改员工信息
{
STAFF *Pt = head;
printf("\n请输入密码:\n");
char mi[20];
scanf("%s",mi);
if(strcmp(mi,"123456")==0)
{
printf("密码正确!\n");
char nu[20];
printf("请输入要修改的职工的职工号:");
scanf("%s", nu);
while(strcmp(Pt->num, nu) != 0 && Pt->next != NULL)
{
Pt = Pt->next;
}
if(strcmp(Pt->num, nu) == 0)
{
printf("请输入职工号:");
scanf("%s", Pt->num);
printf("请输入员工姓名:");
scanf("%s", Pt->name);
printf("请输入员工性别:");
scanf("%s", Pt->sex);
printf("请输入员工出生日期:");
scanf("%s", Pt->birthday);
printf("请输入员工学历:");
scanf("%s", Pt->study);
printf("请输入员工工资:");
scanf("%d", &Pt->salary);
printf("请输入员工住址:");
scanf("%s", Pt->live);
printf("请输入员工电话:");
scanf("%s", Pt->tel);
}
else
{
printf("\n未找到职工\n");
}
}
else
{
printf("密码错误!\n");
}
}
void Save(STAFF *head)
{
FILE *fp;
fp = fopen("wenjian.txt","w+");
STAFF *p = head->next;
if(p != NULL)
{
while(p != NULL)
{
fprintf(fp, "%s %s %s %s %s %d %s %s\n", p->num, p->name, p->sex, p->birthday, p->study, p->salary, p->live, p->study);
p = p->next;
}
}
else
{
printf("没有信息可以存入!\n");
}
fclose(fp);
}
void menu()//菜单
{
printf(" -----------------------------------------------------------------------\n");
printf("\t\t\t 欢迎使用职工管理系统\n");
printf("\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 5.修改职工信息。\n");
printf("\t\t\t 6.输出职工信息。\n");
printf("\t\t\t 0.保存并退出。\n");
printf("--------------------------------------------------------------------------------\n");
printf("\t\t\t 选择对应编号:");
}