c语言单链表实现职工工资管理.doc
/* 职工工资管理小软件 */#include<stdio.h>#include<string.h>#include<conio.h>#include<stdlib.h>/* 职工变量定义*/typedef struct employee/*数据域*/char sex10;/性别char age10;/年龄char post10; /岗位char EmployeeID15;/工号char name10;/int basesalary;/根本工资int postwage;/岗位工资float totalwage;/总工资/*指针域*/struct employee*next;LNode,*LinkList;/* 全局变量定义*/int iCount=0;int saveflag=0; /*是否需要存盘的标志变量*/* 函数声明*/void MainMenu();/登陆函数int menu();/主菜单函数LinkList CreatLinkList();/职工信息创建函数void stringinput(char *t,int lens,char *notice);/字符长度判断函数函数void ShowLinkList(pHead);/职工信息输出函数void OutOneNode(LinkList PNode);/输出一个节点的数据LinkList FindWorker(LinkList pHead);/职工信息查询函数void update(LinkList pHead);/职工信息修改函数void sortList(LinkList pHead);/职工工资排序函数LinkList FindWorker(LinkList pHead);/按职工查找LinkList Find_ByEmployeeID(LinkList pHead);/按职工工号查找LinkList LoadData(LinkList pHead);void UpdateInfo();/职工信息更新函数void SaveData(LinkList pHead);/职工信息保存函数/职工信息导入函数void author();/查询作者信息函数void back();/返回上一界面函数/* 系统主函数*/void main()int iChoice;for(;)system("cls");printf(" nnnn");printf(" 欢迎进入职工工资管理系统 nnn");printf(" 1 进入管理系统 nn");printf(" 2 查看作者信息 nn");printf(" 0 退出 nn");printf(" nnnn");printf(" 请输入您的选择(0-2): n");scanf("%d",&iChoice);while(iChoice<0|iChoice>2)system("cls");printf(" nnnn");printf(" 欢迎进入职工工资管理系统 nnn");printf(" 1 进入管理系统 nn");printf(" 2 查看作者信息 nn");printf(" 0 退出 nn");printf(" nnnn");printf(" 您的输入有误!n");printf(" 请重新输入您的选择(0-2):n");scanf("%d",&iChoice);switch(iChoice)case 1: MainMenu();break;case 2:author();back();break;case 0:system("cls");printf(" nnnnnn");printf(" 使用! nn");printf(" t再见!nnnn");exit(0);fflush(stdin);getchar();system("cls");/* 功能:登陆函数,进展密码验证*/void MainMenu() char key10,password10="123"int iNum=1;LinkList pHead; /定义单链表结点指针printf(" 请输入密码: t");scanf("%s",key);while(iNum<=3)if(strcmp(password,key)=0)while(1) int iChoice;iChoice=menu();system("cls");switch(iChoice) case 1:pHead=CreatLinkList();back();break;/创建职工信息case 2:ShowLinkList(pHead);back();break;/显示职工信息case 3:printf(" nnnn");printf(" 欢迎进入职工信息查询模块 nnnnn");FindWorker(pHead);back();break;/查询职工信息case 4:update(pHead);back();break;/职工信息添加 case 5:printf(" nnnn");printf(" 欢迎进入职工信息修改模块 nnnnn");update(pHead);back();break;/职工信息修改 case 6:SaveData(pHead);back();break;/职工信息保存case 7:sortList(pHead);back();break;/职工信息case 8: /save(pHead);break;/职工信息case 9:author();back();break;case 10: /copy();break;/职工信息case 11:/pHead=load(pHead);break;/职工信息case 0:system("cls");printf(" nnnn");printf(" 使用! nn");printf(" t再见!nnnn");/save();exit(0);fflush(stdin);getchar();system("cls");elseiNum+;printf("n 您是非法用户!请输入密码: t");scanf("%s",key);if(iNum>2) if(strcmp(password,key)=0)continue;elseprintf("n 输入密码错误3次,系统将自动退出!nn");printf("欢迎下次使用!nn");exit(0);/*功能: 主菜单函数,用于主显示菜单参数:iChoice 类型:int说明: 变量返回值: iChoice*/int menu()int iChoice ;system("cls");printf("n您是合法用户!");printf("nnn");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("nn");printf(" 请输入你所选择的选项(0-9):");scanf("%d",&iChoice);while(iChoice>12|iChoice<0)printf(" 您的输入有误!n"); printf(" 请重新输入你所选择的选项(0-9):");scanf("%d",&iChoice);return iChoice;/* 功能:输入字符长度判断函数,判断输入字符长度是否超过原定长度*/void stringinput(char *t,int lens,char *notice)char n50;doprintf(notice);/显示提示信息scanf("%s",n);/输出字符串if(strlen(n) >(size_t)lens)printf("n 输入字符过长!");/超过lens只重新输入while(strlen(n)>(size_t)lens);strcpy(t,n);/将输入的字符串拷贝到字符串t中/* 功能:职工信息创建*/LinkList CreatLinkList()/创建一个链表,包含n个节点LinkList pHead;LinkList pNew,pTail;int i,iNum=0;pHead=(LinkList)malloc(sizeof(LNode);/为头节点分配存空间if(pHead=NULL)printf("分配空间失败!");exit(1);elsepHead->next=NULL;/链表初始化system("cls");printf(" nnnn");printf(" 欢迎进入职工信息创建模块 nnnnn");printf(" 请输入要添加职工的个数: n ");scanf("%d",&iNum);if(iNum>0)/*利用for循环一次实现各节点的创建和数据的输入*/for(i=0;i<iNum;i+) pNew=(LinkList)malloc(sizeof(LNode);/为后继节点分配存空间if(pNew=NULL)printf("分配空间失败!");exit(1);elseprintf("nn");printf(" 请输入第%d个职工信息: nn",i+1);printf(" 提示:输入职工为0如此终止创建!nn");stringinput(pNew->name,10,"n请输入职工:tt");if(strcmp(pNew->name,"0")=0)break;stringinput(pNew->post,10,"n请输入职工岗位:tt");stringinput(pNew->EmployeeID,15,"n请输入职工工号:tt");stringinput(pNew->sex,10,"n请输入职工性别:tt");stringinput(pNew->age,10,"n请输入职工年龄:tt");printf("n请输入职工根本工资:t");scanf("%d",&pNew->basesalary);printf("n请输入职工岗位工资:t");scanf("%d",&pNew->postwage);if(pHead->next=NULL)pHead->next=pNew;pTail=pNew;iCount+;elsepTail->next=pNew;/将pNew链到链表中pTail=pNew;iCount+;pTail->next=NULL;/将链表的最后一个节点的指针域置空printf(" nn");printf(" 当前共输入%d个职工信息nn",iCount);printf(" nn");printf(" 职工信息创建完成! nn");return pHead;/*功能:输出一个节点的数据*/void OutOneNode(LinkList pNew)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(" nn"); /*功能:职工信息输出*/void ShowLinkList(LinkList pHead) int iNum=0;LinkList pNew;pNew=pHead;system("cls");printf(" nnnnn"); printf(" 欢迎进入职工信息浏览模块 nnnn");if(pNew = NULL)printf("n提示:没有记录可以显示!nn");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("nn 职工信息输出完成! n");printf("n 当前共有%d个职工! nnn",iNum); /*功能:查找职工信息*/LinkList FindWorker(LinkList pHead)LinkList perNode;char WorkNumber15;if(pHead->next = NULL)printf("当前没有职工信息.");return NULL;printf("请输入工作者的工号或:n ");scanf("%s",WorkNumber);for(perNode = pHead->next ; perNode != NULL; perNode = perNode->next)if(strcmp(WorkNumber,perNode->EmployeeID) = 0)break;if (perNode != NULL)printf("n该职工信息如下: nn");OutOneNode(perNode);return perNode;elsefor(perNode = pHead->next ; perNode != NULL; perNode = perNode->next)if(strcmp(WorkNumber,perNode->name) = 0)break;if (perNode != NULL)printf("n该职工信息如下: nn");OutOneNode(perNode);return perNode;printf("没有找到您要找的工人!nn");return NULL;/*功能:修改职工信息/*/void update(LinkList pHead)LNode *ptrWork = FindWorker(pHead);char type = 0;if (ptrWork != NULL)printf("请你输入你要修改的属性:n");printf("1:n");printf("2:职工号n");printf("3:性别n");printf("4:年龄n");printf("5:任职岗位n");printf("6:根本工资n");printf("7:岗位工资nn");do printf("t请选择:n");scanf("%d",&type); while (type > 7 | type < 0);switch (type)case 1:stringinput(ptrWork->name,10,"nt请输入职工:tt");break;case 2:stringinput(ptrWork->EmployeeID,15,"nt请输入职工工号:tt");break;case 3:stringinput(ptrWork->sex,10,"nt请输入职工性别:tt");break;case 4:stringinput(ptrWork->age,10,"nt请输入职工年龄:tt");break;case 5:stringinput(ptrWork->post,10,"nt请输入职工岗位:tt");break;cas