企业员工管理系统开发
企业员工管理系统开发
- 程序介绍
- 代码
程序介绍
系统介绍
企业员工信息管理系统主要是对企业员工的基本信息进行增、删、改、查的相关操作,以便用户可以快速地对这些信息进行管理。本系统对管理者的控制更加严格,只设置一个管理账号。
操作流程
用户在编译完成后会产生一个系统的可执行文件,用户只要双击可执行文件就可以进入系统,如果是第一次进入系统,首先要对系统进行初始化,如图所示,初始化完成后,再次双击系统执行文件,进入如图的界面。
用户在输入正确密码后,进入系统的功能选择界面如图所示。在这个界面用户可以选择相应的操作。
代码
//头文件
#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->mobile);printf("QQ号码:%s\n",emp1->qq);printf("住址:%\n",emp1->address);bound('_',40);printf("您真的要删除该员工吗?(y/n)");fflush(stdin); //清除缓冲区choice=getchar();if(choice!='y' && choice!='Y'){return;}if(emp1==emp_first){emp_first=emp1->next;}else{emp2->next=emp1->next;}printf("员工%s已被删除",emp1->name);getch();free(emp1);gsave=1;savedata(); //保存数据return; } else{ emp2=emp1;emp1=emp1->next;}} if(!findok){bound('_',40);printf("\n没有找到姓名是:%s的信息!\n",name); //没找到信息后的提示getch(); } return;
}void displayemp(EMP *emp,char *field,char *name)
{if(emp){printf("\n%s:%s信息如下:\n",field,name);bound('_',30); printf("工号:%d\n",emp->num);printf("职务:%s\n",emp->duty);printf("姓名:%s\n",emp->name);printf("性别:%s\n",emp->sex);printf("年龄:%d\n",emp->age);printf("文化程度:%s\n",emp->edu);printf("工资:%d\n",emp->salary);printf("办公电话:%s\n",emp->tel_office);printf("家庭电话:%s\n",emp->tel_home);printf("移动电话:%s\n",emp->mobile);printf("QQ号码:%s\n",emp->qq);printf("住址:%s\n",emp->address);bound('_',30); }else {bound('_',40);printf("资料库中没有%s为:%s的员工!请重新确认!",field,name);}return;
}/**
* 按照姓名查找员工信息
*/
EMP *findname(char *name)
{EMP *emp1;emp1=emp_first;while(emp1){if(strcmp(name,emp1->name)==0) //比较输入的姓名和链表中的记载姓名是否相同{return emp1;}emp1=emp1->next; } return NULL;
}/**
* 按照员工号查询
*/
EMP *findnum(int num) //声明一个结构体指针
{EMP *emp1;emp1=emp_first;while(emp1){if(num==emp1->num) return emp1;emp1=emp1->next; } return NULL;
}
/**
* 按照通讯号码查询员工信息
*/
EMP *findtelephone(char *name)
{EMP *emp1;emp1=emp_first;while(emp1){if((strcmp(name,emp1->tel_office)==0)||(strcmp(name,emp1->tel_home)==0)||(strcmp(name,emp1->mobile)==0)) //使用逻辑或判断通讯号码return emp1;emp1=emp1->next;} return NULL;
}/**
* 按照员工QQ号查询员工信息
*/
EMP *findqq(char *name)
{EMP *emp1;emp1=emp_first;while(emp1){if(strcmp(name,emp1->qq)==0) return emp1;emp1=emp1->next; } return NULL;
}/**
* 查询员工信息
*/
void findemp()
{int choice,ret=0,num;char str[13];EMP *emp1;system("cls");do{printf("\t查询员工信息\n");bound('_',30);printf("\t1.按姓名查询\n");printf("\t2.按工号查询\n");printf("\t3.按电话查询\n");printf("\t4.按QQ号查询\n");printf("\t0.返回主菜单\n");bound('_',30);printf("\n请选择菜单:");do{fflush(stdin);choice=getchar();system("cls");switch(choice){case '1':printf("\n输入要查询的员工姓名:");scanf("%s",str);emp1=findname(str);displayemp(emp1,"姓名",str);getch();break; case '2':printf("\n请输入要查询的员工的工号"); scanf("%d",&num); emp1=findnum(num);itoa(num,str,10);displayemp(emp1,"工号",str);getch();break;case '3':printf("\n输入要查询员工的电话:");scanf("%s",str);emp1=findtelephone(str); displayemp(emp1,"电话",str);getch();break;case '4':printf("\n输入要查询的员工的QQ号:");scanf("%s",str);emp1=findqq(str);displayemp(emp1,"QQ号码",str);getch();break;case '0':ret=1;break; } }while(choice<'0'||choice>'4');system("cls");if(ret) break;}while(1);
}void listemp()
{EMP *emp1;printf("\n资料库中的员工信息列表\n");bound('_',40);emp1=emp_first;while(emp1) {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->mobile);printf("QQ号码:%s\n",emp1->qq);printf("住址:%s\n",emp1->address); bound('_',40);emp1=emp1->next; } printf("\n显示完毕,按任意键退出!\n");getch();return;
}/*检测登录密码*/
void login()
{int i,n=3;char pwd[9];do{printf("请输入密码:");for(i=0;i<8 && ((pwd[i]=getch())!=13);i++)putch('*');pwd[i]='\0';if(!strcmp(pwd,password)){printf("\n密码错误,请重新输入!\n");getch();system("cls");n--;}elsebreak;} while(n>0); //密码输入三次的控制if(!n){printf("请退出,你已输入三次错误密码!");getch();exit(1);}
}void menu()
{char choice;system("cls");do{printf("\n\t\t\t\t 企业员工管理系统\n\n");printf("\t\t\t-------------------------------------\n");printf("\t\t\t|\t\t\t\t |\n");printf("\t\t\t| \t1、输入员工信息\t\t |\n");printf("\t\t\t|\t\t\t\t |\n");printf("\t\t\t| \t2、查询员工信息\t\t |\n");printf("\t\t\t|\t\t\t\t |\n");printf("\t\t\t| \t3、显示员工信息\t\t |\n");printf("\t\t\t|\t\t\t\t |\n");printf("\t\t\t| \t4、修改员工信息\t\t |\n");printf("\t\t\t|\t\t\t\t |\n");printf("\t\t\t| \t5、删除员工信息\t\t |\n");printf("\t\t\t|\t\t\t\t |\n");printf("\t\t\t| \t6、统计员工信息\t\t |\n");printf("\t\t\t|\t\t\t\t |\n");printf("\t\t\t| \t7、重置系统密码\t\t |\n");printf("\t\t\t|\t\t\t\t |\n");printf("\t\t\t| \t0、退出系统\t\t |\n");printf("\t\t\t|\t\t\t\t |\n");printf("\t\t\t-------------------------------------\n");printf("\n\t\t\t请选择您需要的操作:");do{fflush(stdin);choice=getchar();system("cls");switch(choice){case '1':addemp(); //调用员工信息添加函数break;case '2':if(gfirst){printf("系统信息中无员工信息,请先添加员工信息!\n");getch();break; } findemp(); //调用员工信息查找函数break;case '3':if(gfirst){printf("系统信息中无员工信息,请先添加员工信息!\n");getch();break; }listemp(); //员工列表函数break;case '4':if(gfirst){printf("系统信息中无员工信息,请先添加员工信息!\n");getch();break; }modifyemp(); //员工信息修改函数break;case '5':if(gfirst){printf("系统信息中无员工信息,请先添加员工信息!\n");getch();break; }delemp(); //删除员工信息的函数break;case '6':if(gfirst){printf("系统信息中无员工信息,请先添加员工信息!\n");getch();break; }summaryemp(); //统计函数break; case '7':resetpwd(); //重置系统的函数break;case '0':savedata(); //保存数据的函数exit(0);default:printf("请输入0~7之间的数字");getch();menu();} } while(choice<'0'||choice>'7'); system("cls");}while(1);
}int modi_salary(int salary)
{int newsalary;printf("原来的工资数为:%d",salary);printf("新的工资数:");scanf("%d",&newsalary); return(newsalary);
}int modi_age(int age)
{int newage;printf("原来的年龄为:%d",age);printf("新的年龄:");scanf("%d",&newage); return(newage);
}char *modi_field(char *field,char *content,int len)
{char *str;str=malloc(sizeof(char)*len);if(str==NULL){printf("内存分配失败,按任意键退出!");getch();return NULL; }printf("原来%s为:%s\n",field,content);printf("修改为(内容不要超过%d个字符!):",len);scanf("%s",str); return str;
}void modifyemp()
{EMP *emp1;char name[10],*newcontent;int choice;printf("\n请输入您要修改的员工的姓名:");scanf("%s",&name);emp1=findname(name);displayemp(emp1,"姓名",name);if(emp1){printf("\n 请输入你要修改的内容选项!\n");bound('_',40);printf("1.修改职务 2.修改年龄\n");printf("3.修改文化程度 4.修改工资\n");printf("5.修改办公室电话 6.修改家庭电话\n");printf("7.修改移动电话 8.修改QQ号码 \n");printf("9.修改住址 0.返回\n ");bound('_',40);do{fflush(stdin); //清除缓冲区choice=getchar();switch(choice) //操作选择函数{case '1':newcontent=modi_field("职务",emp1->duty,10); //调用修改函数修改基本信息if(newcontent!=NULL){strcpy(emp1->duty,newcontent);free(newcontent); } break;case '2':emp1->age=modi_age(emp1->age);break;case '3':newcontent=modi_field("文化程度",emp1->edu,10);if(newcontent!=NULL){strcpy(emp1->edu,newcontent); //获取新信息内容free(newcontent); } break;case '4':emp1->salary=modi_salary(emp1->salary);break;case '5':newcontent=modi_field("办公室电话",emp1->tel_office,13);if(newcontent!=NULL){strcpy(emp1->tel_office,newcontent);free(newcontent); } break;case '6':newcontent=modi_field("家庭电话",emp1->tel_home,13);if(newcontent!=NULL){strcpy(emp1->tel_home,newcontent);free(newcontent); } break;case '7':newcontent=modi_field("移动电话",emp1->mobile,12);if(newcontent!=NULL){strcpy(emp1->mobile,newcontent);free(newcontent); } break;case '8':newcontent=modi_field("QQ号码",emp1->qq,10);if(newcontent==NULL){strcpy(emp1->qq,newcontent);free(newcontent); } break; case '9':newcontent=modi_field("住址",emp1->address,30);if(newcontent!=NULL){strcpy(emp1->address,newcontent);free(newcontent); //释放内存空间} break; case '0':return; } }while(choice<'0' || choice>'9');gsave=1;savedata(); //保存修改的数据信息printf("\n修改完毕,按任意键退出!\n");getch();} return;
}/*读取数据*/
void readdata(void)
{FILE *fp;EMP *emp1;if((fp=fopen("employee.dat","rb"))==NULL){gfirst=1;return; } while(!feof(fp)){emp1=(EMP *)malloc(sizeof(EMP));if(emp1==NULL){printf("内存分配失败!\n");getch();return; } fread(emp1,sizeof(EMP),1,fp);if(feof(fp)) break;if(emp_first==NULL){emp_first=emp1;emp_end=emp1; }else{emp_end->next=emp1;emp_end=emp1; }emp_end->next=NULL;}gfirst=0;fclose(fp);
}void resetpwd()
{char pwd[9],pwd1[9],ch;int i;FILE *fp1;system("cls");printf("\n请输入旧密码:\n");for(i=0;i<8 && ((pwd[i]=getch())!=13);i++)putch('*');pwd[i]='\0';if(strcmp(password,pwd)){printf("\n密码错误,请按任意键退出!\n"); //比较旧密码,判断用户权限getch();return; } 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]){putw(pwd[i],fp1);i++;}fclose(fp1); //关闭文件流printf("\n密码修改成功,按任意键退出!\n");getch();return;
}void savedata()
{FILE *fp;EMP *emp1;if(gsave==0) return;if((fp=fopen("employee.dat","wb"))==NULL){printf("打开文件employee.dat出错!\n");getch();return;}emp1=emp_first;while(emp1){fwrite(emp1,sizeof(EMP),1,fp);emp1=emp1->next;}gsave=0;fclose(fp);
}void summaryemp()
{EMP *emp1;int sum=0,num=0,man=0,woman=0;emp1=emp_first;while(emp1){num++;sum+=emp1->salary;char strw[2];strncpy(strw,emp1->sex,2);if((strcmp(strw,"ma")==0)||(strcmp(emp1->sex,"男")==0)) man++;else woman++;emp1=emp1->next;}printf("\n下面是相关员工的统计信息!\n");bound('_',40);printf("员工总数是:%d\n",num);printf("员工的工资总数是:%d\n",sum);printf("男员工数为:%d\n",man);printf("女员工数为:%d\n",woman);bound('_',40);printf("按任意键退出!\n");getch();return;
}int main(void)
{system("color f0\n"); //白底黑字emp_first=emp_end=NULL;gsave=gfirst=0;checkfirst();login();readdata();menu();system("PAUSE");return 0;
}
企业员工管理系统开发相关推荐
- [附源码]java毕业设计企业员工管理系统
项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...
- JAVA毕业设计HTML5企业员工管理系统计算机源码+lw文档+系统+调试部署+数据库
JAVA毕业设计HTML5企业员工管理系统计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计HTML5企业员工管理系统计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构 ...
- HTML5期末大作业:管理系统网站设计——蓝色OA企业员工管理系统(10页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源
HTML5期末大作业:管理系统网站设计--蓝色OA企业员工管理系统(10页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码 常 ...
- java计算机毕业设计企业员工管理系统源码+程序+lw文档+mysql数据库
java计算机毕业设计企业员工管理系统源码+程序+lw文档+mysql数据库 java计算机毕业设计企业员工管理系统源码+程序+lw文档+mysql数据库 本源码技术栈: 项目架构:B/S架构 开发语 ...
- 视频教程-C#WinForm工业企业销售管理系统开发-C#
C#WinForm工业企业销售管理系统开发 二十多年的企业管理软件开发经历,熟知管理软件的整个开发流程,熟练掌握VFP语言,掌握VB语言,了解JAVA.asp.net.CSS.HTML/HTML5等语 ...
- Springboot企业员工管理系统52y0w计算机毕业设计-课程设计-期末作业-毕设程序代做
Springboot企业员工管理系统52y0w计算机毕业设计-课程设计-期末作业-毕设程序代做 [免费赠送源码]Springboot企业员工管理系统52y0w计算机毕业设计-课程设计-期末作业-毕设程 ...
- [附源码]java毕业设计生产型企业员工管理系统
项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...
- java计算机毕业设计HTML5企业员工管理系统MyBatis+系统+LW文档+源码+调试部署
java计算机毕业设计HTML5企业员工管理系统MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计HTML5企业员工管理系统MyBatis+系统+LW文档+源码+调试部署 本源码技 ...
- java计算机毕业设计HTML5企业员工管理系统源码+mysql数据库+系统+lw文档+部署
java计算机毕业设计HTML5企业员工管理系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计HTML5企业员工管理系统源码+mysql数据库+系统+lw文档+部署 本源码技术栈 ...
最新文章
- BASH命令和SHELL脚本学习
- python程序结构有哪几种_三、python程序结构之分支结构
- spark源码编译记录
- 自然语言处理太难?按这个方式走,就是砍瓜切菜!
- Windows导出所有计划任务方法
- 悲观锁 引起死锁_悲观锁定时如何避免可怕的死锁-以及Java 8的一些用法!
- mysql set语句_mysql--乱码解决(6)
- python建立py文件夹过程_Pycharm创建python文件自动添加日期作者等信息(步骤详解)...
- IT人必去的几大网站,国内外知名IT网站罗列!
- 蓝桥杯——阿尔法乘积
- python常见的数据结构
- python排序算法的时间复杂度_Python算法的时间复杂度和空间复杂度(实例解析)
- linux系统移植和根文件系统制作
- 温度转换问题——从C到Python
- 缅怀:腾讯游戏毛星云(浅墨)突然离世
- VMware12安装centOS8(vm虚拟机安装centos8教程)
- 高通apq8098平台sd卡总结
- 这个案例你可以直接拿去用。
- 极光推送报错time_to_live value should be a non-negative integertime_to_live value should be a non-negativ
- 规划云:GIS相关模块