c语言单链表实现职工工资管理.docx
《c语言单链表实现职工工资管理.docx》由会员分享,可在线阅读,更多相关《c语言单链表实现职工工资管理.docx(26页珍藏版)》请在冰豆网上搜索。
c语言单链表实现职工工资管理
/*******************************************************************************
职工工资管理小软件
*******************************************************************************/
#include
#include
#include
#include
/******************************************************************************
职工变量定义
******************************************************************************/
typedefstructemployee
{
/*数据域*/
charsex[10];//性别
charage[10];//年龄
charpost[10];//岗位
charEmployeeID[15];//工号
charname[10];//姓名
intbasesalary;//基本工资
intpostwage;//岗位工资
floattotalwage;//总工资
/*指针域*/
structemployee*next;
}LNode,*LinkList;
/******************************************************************************
全局变量定义
******************************************************************************/
intiCount=0;
intsaveflag=0;/*是否需要存盘的标志变量*/
/*****************************************************************************
函数声明
******************************************************************************/
voidMainMenu();//登陆函数
intmenu();//主菜单函数
LinkListCreatLinkList();//职工信息创建函数
voidstringinput(char*t,intlens,char*notice);//字符长度判断函数函数
voidShowLinkList(pHead);//职工信息输出函数
voidOutOneNode(LinkListPNode);//输出一个节点的数据
LinkListFindWorker(LinkListpHead);//职工信息查询函数
voidupdate(LinkListpHead);//职工信息修改函数
voidsortList(LinkListpHead);//职工工资排序函数
LinkListFindWorker(LinkListpHead);//按职工姓名查找
LinkListFind_ByEmployeeID(LinkListpHead);//按职工工号查找
LinkListLoadData(LinkListpHead);
voidUpdateInfo();//职工信息更新函数
voidSaveData(LinkListpHead);//职工信息保存函数
//职工信息导入函数
voidauthor();//查询作者信息函数
voidback();//返回上一界面函数
/*****************************************************************************
系统主函数
******************************************************************************/
voidmain()
{
intiChoice;
for(;;)
{
system("cls");
printf("\n\n\n\n");
printf("欢迎进入职工工资管理系统\n\n\n");
printf("1进入管理系统\n\n");
printf("2查看作者信息\n\n");
printf("0退出\n\n");
printf("\n\n\n\n");
printf("请输入您的选择(0-2):
\n");
scanf("%d",&iChoice);
while(iChoice<0||iChoice>2)
{
system("cls");
printf("\n\n\n\n");
printf("欢迎进入职工工资管理系统\n\n\n");
printf("1进入管理系统\n\n");
printf("2查看作者信息\n\n");
printf("0退出\n\n");
printf("\n\n\n\n");
printf("您的输入有误!
\n");
printf("请重新输入您的选择(0-2):
\n");
scanf("%d",&iChoice);
}
switch(iChoice)
{
case1:
MainMenu();break;
case2:
author();back();break;
case0:
system("cls");
printf("\n\n\n\n\n\n");
printf("谢谢使用!
\n\n");
printf("\t再见!
\n\n\n\n");
exit(0);
}
fflush(stdin);
getchar();
system("cls");
}
}
/*****************************************************************************
功能:
登陆函数,进行密码验证
*****************************************************************************/
voidMainMenu()
{
charkey[10],password[10]="123";
intiNum=1;
LinkListpHead;//定义单链表结点指针
printf("请输入密码:
\t");
scanf("%s",key);
while(iNum<=3)
{
if(strcmp(password,key)==0)
{
while
(1)
{
intiChoice;
iChoice=menu();
system("cls");
switch(iChoice)
{
case1:
pHead=CreatLinkList();back();break;//创建职工信息
case2:
ShowLinkList(pHead);back();break;//显示职工信息
case3:
printf("\n\n\n\n");
printf("欢迎进入职工信息查询模块\n\n\n\n\n");
FindWorker(pHead);back();break;//查询职工信息
case4:
update(pHead);back();break;//职工信息添加
case5:
printf("\n\n\n\n");
printf("欢迎进入职工信息修改模块\n\n\n\n\n");
update(pHead);back();break;//职工信息修改
case6:
SaveData(pHead);back();break;//职工信息保存
case7:
sortList(pHead);back();break;//职工信息
case8:
//save(pHead);break;//职工信息
case9:
author();back();break;
case10:
//copy();break;//职工信息
case11:
//pHead=load(pHead);break;//职工信息
case0:
system("cls");
printf("\n\n\n\n");
printf("谢谢使用!
\n\n");
printf("\t再见!
\n\n\n\n");
//save();
exit(0);
}
fflush(stdin);
getchar();
system("cls");
}
}
else
{
iNum++;
printf("\n您是非法用户!
请输入密码:
\t");
scanf("%s",key);
if(iNum>2)
{
if(strcmp(password,key)==0)
continue;
else
{
printf("\n输入密码错误3次,系统将自动退出!
\n\n");
printf("欢迎下次使用!
\n\n");
exit(0);
}
}
}
}
}
/************************************************************************
功能:
主菜单函数,用于主显示菜单
参数:
iChoice
类型:
int
说明:
变量
返回值:
iChoice
************************************************************************/
intmenu()
{
intiChoice;
system("cls");
printf("\n您是合法用户!
");
printf("\n\n\n");
printf("|*****************欢迎进入职工工资管理系统************************|\n");
printf("||\n");
printf("||\n");
printf("|1职工信息创建|\n");
printf("||\n");
printf("|2职工信息浏览|\n");
printf("||\n");
printf("|3职工信息查询|\n");
printf("||\n");
printf("|4职工信息添加|\n");
printf("||\n");
printf("|5职工信息修改|\n");
printf("||\n");
printf("|6职工信息保存|\n");
printf("||\n");
printf("|7职工信息删除|\n");
printf("||\n");
printf("|8职工信息读取|\n");
printf("||\n");
printf("|9职工工资排序|\n");
printf("||\n");
printf("|10职工工资统计|\n");
printf("||\n");
printf("|0退出系统|\n");
printf("||\n");
printf("||\n");
printf("|*****************************************************************|\n");
printf("\n\n");
printf("请输入你所选择的选项(0-9):
");
scanf("%d",&iChoice);
while(iChoice>12||iChoice<0)
{
printf("您的输入有误!
\n");
printf("请重新输入你所选择的选项(0-9):
");
scanf("%d",&iChoice);
}
returniChoice;
}
/*****************************************************************************
功能:
输入字符长度判断函数,判断输入字符长度是否超过原定长度
*****************************************************************************/
voidstringinput(char*t,intlens,char*notice)
{
charn[50];
do
{
printf(notice);//显示提示信息
scanf("%s",n);//输出字符串
if(strlen(n)>(size_t)lens)
printf("\n输入字符过长!
");//超过lens只重新输入
}while(strlen(n)>(size_t)lens);
strcpy(t,n);//将输入的字符串拷贝到字符串t中
}
/*****************************************************************************
功能:
职工信息创建
*****************************************************************************/
LinkListCreatLinkList()//创建一个链表,包含n个节点
{
LinkListpHead;
LinkListpNew,pTail;
inti,iNum=0;
pHead=(LinkList)malloc(sizeof(LNode));//为头节点分配内存空间
if(pHead==NULL)
{
printf("分配空间失败!
");
exit
(1);
}
else
pHead->next=NULL;//链表初始化
system("cls");
printf("\n\n\n\n");
printf("欢迎进入职工信息创建模块\n\n\n\n\n");
printf("请输入要添加职工的个数:
\n");
scanf("%d",&iNum);
if(iNum>0)
{
/*利用for循环一次实现各节点的创建和数据的输入*/
for(i=0;i{
pNew=(LinkList)malloc(sizeof(LNode));//为后继节点分配内存空间
if(pNew==NULL)
{
printf("分配空间失败!
");
exit
(1);
}
else
{
printf("\n\n");
printf("请输入第%d个职工信息:
\n\n",i+1);
printf("提示:
输入职工姓名为0则终止创建!
\n\n");
stringinput(pNew->name,10,"\n请输入职工姓名:
\t\t");
if(strcmp(pNew->name,"0")==0)
break;
stringinput(pNew->post,10,"\n请输入职工岗位:
\t\t");
stringinput(pNew->EmployeeID,15,"\n请输入职工工号:
\t\t");
stringinput(pNew->sex,10,"\n请输入职工性别:
\t\t");
stringinput(pNew->age,10,"\n请输入职工年龄:
\t\t");
printf("\n请输入职工基本工资:
\t");
scanf("%d",&pNew->basesalary);
printf("\n请输入职工岗位工资:
\t");
scanf("%d",&pNew->postwage);
if(pHead->next==NULL)
{
pHead->next=pNew;
pTail=pNew;
iCount++;
}
else
{
pTail->next=pNew;//将pNew链到链表中
pTail=pNew;
iCount++;
}
}
}
pTail->next=NULL;//将链表的最后一个节点的指针域置空
printf("\n\n");
printf("当前共输入%d个职工信息\n\n",iCount);
}
printf("\n\n");
printf("职工信息创建完成!
\n\n");
returnpHead;
}
/*******************************************************************************
功能:
输出一个节点的数据
********************************************************************************/
voidOutOneNode(LinkListpNew)
{
printf("------------------------------------------------------------------------------\n");
printf("|姓名|职工号|性别|年龄|任职岗位|基本工资|岗位工资|\n");
printf("------------------------------------------------------------------------------\n");
printf("|%9s|%10s|%7s|%5s|%10s|%10d|%10d|\n",pNew->name,pNew->EmployeeID,pNew->sex,pNew->age,pNew->post,pNew->basesalary,pNew->postwage);
printf("------------------------------------------------------------------------------\n");
printf("\n\n");
}
/*******************************************************************************
功能:
职工信息输出
********************************************************************************/
voidShowLinkList(LinkListpHead)
{
intiNum=0;
LinkListpNew;
pNew=pHead;
system("cls");
printf("\n\n\n\n\n");
printf("欢迎进入职工信息浏览模块\n\n\n\n");
if(pNew==NULL)
{
printf("\n提示:
没有记录可以显示!
\n\n");
return;
}
printf("------------------------------------------------------------------------------\n");
printf("|姓名|职工号|性别|年龄|任职岗位|基本工资|岗位工资|\n");
printf("------------------------------------------------------------------------------\n");
for(pNew=pHead->next;pNew!
=NULL;pNew=pNew->next)
{
printf("|%9s|%10s|%7s|%5s|%10s|%10d|%10d|\n",pNew->name,pNew->EmployeeID,pNew->sex,pNew->age,pNew->post,pNew->basesalary,pNew->postwage);
printf("------------------------------------------------------------------------------\n");
iNum++;
}
printf("\n\n职工信息输出完成!
\n");
prin