本次用到的头文件
#include <stdio.h>
#include <stdlib.h>//malloc申请空间
#include<string.h>//string类函数
#include<windows.h>//sleep函数使用
构建结构体,显示元素
typedef struct worker
{ char num[100];//职工号
char name[10];//姓名
char sex[10];//性别
char age[10];//年龄
char edu[20];//学历
char major[20];//职务
char wag[10];//工资
char address[100];//地址
char tel[20];//电话
struct worker *next;
} worker;
构建链表,头结点。
插入功能
worker *head;//头指针
void LinkedList()
{
head=(worker*)malloc(sizeof(worker));
head->next=NULL;//初始化链表
}
void insert()//插入职工信息
{
worker *newworker=(worker*)malloc(sizeof(worker)); //插入职工信息
printf("请输入职工的职工号 \n");
scanf("%s",newworker->num);
printf("请输入职工的姓名 \n");
scanf("%s",newworker->name);
printf("请输入职工的性别 \n");
scanf("%s",newworker->sex); //性别判断,是否合法
while(strcmp(newworker->sex,"男")!=0&&strcmp(newworker->sex,"女")!=0)
{
printf("非男非女。。。你认真的吗,再输一遍吧\n");
scanf("%s",newworker->sex); }
printf("请输入职工的年龄 \n"); ("%s",&newworker->age);
printf("请输入职工的学历 \n");
scanf("%s",newworker->edu);
printf("请输入职工的职务 \n");
scanf("%s",newworker->major);
printf("请输入职工的工资 \n");
scanf("%s",&newworker->wag);
printf("请输入职工的住址 \n");
scanf("%s",newworker->address);
printf("请输入职工的电话 \n");
scanf("%s",newworker->tel); //把新职工的信息插入链表
newworker->next=head->next;
head->next=newworker;
printf("录入成功!\n");
}
修改职工信息。
提供一种查改方法。
void change()//修改职工的信息
{
char worknum[100];
int emp;
int flag=0;//标识符,初始值为0,匹配到对象置换为1;
printf("请输入需要修改的职工的职工号 \n");
scanf("%s",worknum);
worker *flagp=head->next; while(flagp!=NULL)//遍历,保证链表不为空
{
if(strcmp(flagp->num,worknum)==0)//比中目标
{
flag=1;//标识为1,表示比中目标
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------ 7.修改电话------\n");
printf("\t\t\t------ 8.退出菜单------\n");
printf("\t\t\t请输入您要进行的操作对应的编号\n"); scanf("%d",&emp); while(emp!=8)
{
switch(emp)
{
case 1:
printf("\t\t\t修改前的职工姓名:%s\n",flagp->name);
printf("\t\t\t请输入修改后的姓名 \n");
scanf("%s",flagp->name);
break;
case 2:
printf("\t\t\t修改前的职工性别:%s\n",flagp->sex);
printf("\t\t\t请输入修改后的姓别 \n");
scanf("%s",flagp->sex);
break;
case 3:
printf("\t\t\t修改前的职工年龄:%s\n",flagp->age);
printf("\t\t\t请输入修改后的年龄 \n");
scanf("%s",&flagp->age);
break;
case 4:
printf("\t\t\t修改前的职工学历:%s\n",flagp->edu);
printf("\t\t\t请输入修改后的学历 \n");
scanf("%s",flagp->edu);
break;
case 5:
printf("\t\t\t修改前的职工工资:%s\n",flagp->wag);
printf("\t\t\t请输入修改后的工资 \n");
scanf("%s",&flagp->wag);
break; case 6:
printf("\t\t\t修改前的职工住址:%s\n",flagp->address);
printf("\t\t\t请输入修改后的住址 \n");
scanf("%s",flagp->address);
break;
case 7:
printf("\t\t\t修改前的职工电话:%s\n",flagp->tel);
printf("\t\t\t请输入修改后的电话 \n");
scanf("%s",flagp->tel);
break;
default:
printf("你tm故意找茬是吧,重来!"); }
printf("请在菜单中选择您要进行的操作\n");
scanf("%d",&emp);
}
break;
}
flagp=flagp->next;
}
if(flag==0)
{
printf("没有这个人啊!\n");
}
}
删除模块,此处提供两种查删方法
void del()//删除职工信息
{
char workernum[100],workername[100];
printf("\t\t---你想怎么删除呢?---\n");
printf("\t\t---1.通过职工号删除---\n");
printf("\t\t---2.通过职工名删除---\n");
printf("\t\t---3.退出这个小菜单---\n");
int emp;
while(1)
{
printf("你想干啥,看着小菜单选吧\n");
scanf("%d",&emp);
switch(emp)
{
case 1:
{
printf("想删谁的,把他工号打出来 \n");
scanf("%s",workernum);
worker *p1=head;
worker *p2=head->next;
while(p2!=NULL)
{
if(strcmp(p2->num,workernum)==0)//比中目标对象
{
p1->next=p2->next;//使p1指向p2下一个结点,释放p2.
free(p2); p2=NULL;//防止野指针出现
printf("\t\t删除成功,他没了\n");
break;
}
p1=p2;
p2=p2->next;
}
break;
}
break;
case 2:
{
printf("想删谁的,把他名字打出来 \n");
scanf("%s",workername);
worker *p1=head;
worker *p2=head->next;
while(p2!=NULL)
{
if(strcmp(p2->num,workername)==0)//比中目标对象
{
p1->next=p2->next;//使p1指向p2下一个结点,释放p2.
free(p2); p2=NULL;//防止野指针出现
printf("\t\t删除成功,他没了\n");
break;
}
p1=p2;
p2=p2->next;
}
break;
}
case 3:
return;
default:
printf("又来?好好输入。");
}
}
}
职工查找系统
此处提供两种查找方式
void sear1()
{
int emp;
printf("\t\t\t---你想怎么找人呢?---\n");
printf("\t\t\t---1.通过职工号查找---\n");
printf("\t\t\t---2.通过职工名查找---\n");
printf("\t\t\t---3.退出这个小菜单---\n");
while(1)
{
printf("从小菜单里面选一个吧 \n");
scanf("%d",&emp);
switch (emp)
{
case 1://按工号查找
{
printf("请输入你想找的职工的工号 \n");
char workernumber[100];
scanf("%s",workernumber);
worker *flagp1=head->next;
while(flagp1!=NULL)
{
if(strcmp(flagp1->num,workernumber)==0)
{
printf("工号:%s\n姓名:%s\n性别:%s\n年龄:%s\n学历:%s\n工资:%s\n住址:%s\n电话:%s\n"
,flagp1->num,flagp1->name,flagp1->sex,flagp1->age,flagp1->edu,flagp1-
>wag,flagp1->address,flagp1->tel);
break;
}
else
{
printf("查无此人!");
break;
}
flagp1=flagp1->next; }
break;
}
case 2:
{
printf("请输入你想找的职工的名字 \n");
char workername[40];
scanf("%s",workername);
worker *flagp1=head->next;
while(flagp1!=NULL)
{
if(strcmp(flagp1->name,workername)==0)
{
printf("工号:%s\n姓名:%s\n性别:%s\n年龄:%s\n学历:%s\n工资:%s\n住址:%s\n电话:%s\n",
flagp1->num,flagp1->name,flagp1->sex,flagp1->age,flagp1->edu,flagp1->wag,flagp1->address,flagp1->tel);
break;
}
else
printf("查无此人");
break;
flagp1=flagp1->next;
}
break;
}
case 3:
return;//退出
default:
printf("不是吧阿sir,你又输错了???,再来一遍。");
}
}
}
显示所有职工信息
void sear2()
{
worker *flagP=head->next; while(flagP!=NULL)
{
printf("职工号:%-15s 姓名:%-20s 性别:%-10s 年龄:%-20s 学历:%-20s 工资:%-20s 地址:%-10s 电话:%-10s\n",
&flagP->num,&flagP->sex,&flagP->age,&flagP->edu,&flagP->wag,&flagP->address,&flagP->tel);//向左对齐
flagP=flagP->next;
}
system("pause");
system("cls");}
职工信息保存模块
void savefile()
{
FILE *file=NULL;
file=fopen("worker.txt","w+");//可读写
if(!file)
{
printf("这个文件好像打不开啊\n"); }
else
{
struct worker *p;
for(p=head->next;p!=NULL;p=p->next)
{
fprintf(file,"职工名:%s\t姓名:%s\t性别:%s\t年龄:%s\t学历:%s\t工资:%s\t住址:%s\t电话:%s\t\n",
p->num,p->name,p->sex,p->age,p->edu,p->wag,p->address,p->tel); }
fclose(file);
printf("震惊!居然储存成功了\n");
}
}
主菜单以及欢迎页面
欢迎页面通过sleep实现暂时停留
//主菜单目录
void menu()
{
printf("\t\t\t\t|**************************************************|\n");
printf("\t\t\t\t|*****************职工信息管理系统*****************|\n");
printf("\t\t\t\t|**************************************************|\n");
printf("\t\t\t\t|-----------------1.新增职工信息-------------------|\n");
printf("\t\t\t\t|-----------------2.修改职工信息-------------------|\n");
printf("\t\t\t\t|-----------------3.删除职工信息-------------------|\n");
printf("\t\t\t\t|-----------------4.查找职工信息-------------------|\n");
printf("\t\t\t\t|-----------------5.查看所有职工信息---------------|\n");
printf("\t\t\t\t|-----------------6.保存职工信息-------------------|\n");
printf("\t\t\t\t|**************************************************|\n");
printf("\t\t\t\t|==================================================|\n");}
//初始界面
void welcome()
{
printf("\t\t\t\t*********欢迎进入职工信息管理系统**********\n");
printf("\t\t\t\t*******************************************\n");
printf("\t\t\t\t******请按照菜单所对应的数字进行操作*******\n");
指令输入操作模块
//操作系统
void operation()
{
system("cls");
int ad; welcome();
Sleep(1100);
system("cls");
int op; menu();
printf("请输入你想进行的操作 \n"); ad=scanf("%d",&op);
while(ad!=1)
{
while((getchar())!='\n');
printf("提示:只能输入数字!\n");
ad=scanf("%d",op); }
while(op!=7)
{
switch (op)
{
case 1:
printf("\t\t\t------插入职工信息------\n");
insert(); break; case 2:
printf("\t\t\t------修改职工信息------\n");
change();
break;
case 3:
printf("\t\t\t------删除职工信息------\n");
del();
break;
case 4:
printf("\t\t\t------查找职工信息------\n");
sear1();
break;
case 5:
printf("\t\t\t----查看所有职工信息----\n");
sear2();
break;
case 6:
printf("\t\t\t------职工信息保存------\n");
savefile();
break;
default:
printf("\t\t\t指令不合法,系统看不懂\n"); }
system("pause");
system("cls");
menu();
printf("请输入你要进行的操作 \n");
scanf("%d",&op); }
}
登陆系统
int login(char username[],char password[])
{
//默认初始用户名
char adminUsername[30]="admin";
//默认初始密码
char
adminUserPassword[30]="pass";
if(strcmp(username,adminUsername)==0&&strcmp(password,adminUserPassword)==0)
{
return 1;
}
else
{
return -1;
}
}
主函数,含有密码校验
int main()
{
LinkedList(); //输入用户名 密码
char username[30],password[30];
int loginSuccessTime=0; //判断是否登录成功
int FauleTime=0; //记录登录失败次数
while(loginSuccessTime!=1)
{
printf("\t\t\t初始账号: admin\n\t\t\t初始密码:pass\n\n");
printf("\t\t\t请输入用户名:");
scanf("%s",username);
printf("\t\t\t请输入密码 ");
scanf("%s",password);
loginSuccessTime=login(username,password);
if(loginSuccessTime==1)
{ //登陆成功进入系统
operation();
}
else if(loginSuccessTime==-1)
{
printf("\t\t\tshit! 对着抄你都抄不对\n\n");
FauleTime++; }
if(FauleTime>=3)
{
printf("\n你已经输错了三次,你没机会了。哎,你走吧。");
break;
}
}
return 0;
}