赞
踩
企业员工管理系统主要是针对企业员工的基本信息进行增、删、改、查的相关操作,以便用户使用本管理系统时可以快速对企业员工的信息进行管理。
1.用户首次使用本系统时进行密码设置和初始化操作。
2.实现添加功能,即添加员工的相关信息。
3.实现查看功能,即显示系统中所有员工的相关信息。
4.实现查找功能,即可以通过多种条件对员工进行查询,如姓名、工号等。
5.实现修改功能,即输入员工的姓名修改其相关信息。
6.实现删除功能,即输入员工的姓名删除其相关信息。
7.实现统计员工人数的功能。
8.实现重新设置密码登录密码的功能。
9.退出系统。
(1).首次登陆用户信息初始化功能模块:当用户时首次使用本系统时,则需要根据提示进行设置密码和初始化的操作。
(2).输入员工信息功能模块:实现将用户从键盘输入的数据存储到对应字段或数据成员中,并检查输入的合法性。
(3).显示员工信息功能模块:用户根据提示操作显示系统中已有的员工的相关信息,如果系统中海没有存储员工信息则给出无法显示信息的提示。
(4).查询员工信息功能模块:根据用户输入的待查询记录的关键字,在数据结构中查找该记录,如找到则输出该员工的信息,否则给出无法找到的提示信息。
(5).修改员工信息功能模块:根据用户要求,根据提示操作,找到要修改信息的员工然后修改员工的相关信息,如年龄。工资等。
(6).删除员工信息功能模块:由用户输入选择删除相关的员工的信息。
(7).统计员工信息功能模块:统计本系统中员工的信息,如男、女员工的人数等。
(8).重置系统密码功能模块:根据用户的要求,将旧密码更换设置新密码。
(9).退出系统功能模块:在用户执行完相关系统操作之后,退出使用本系统。
(1)本系统中对是否是第一次使用本系统进行了处理,如果是第一次使用,则需要根据提示信息进行设置密码和初始化操作。其思路是:首先打开密码文件,判断是否为空,进而判断系统是否是第一次使用,如果是,系统会提示输入初始密码,如果不是,系统会进入登陆页面,提示输入登陆密码,代码如下:
void checkfirst() { FILE *fp,*fp1; //声明文件型指针 char pwd[9],pwd1[9],pwd2[9]; int i; char strt='8'; if((fp=fopen("employee.txt","rb"))==NULL) { printf("\n\t新系统,请进行相应的初始化操作!\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("employee.txt","wb"))==NULL) { printf("\n系统创建失败,请按任意键退出!\n"); getch(); exit(1); } i=0; while(pwd[i]) { pwd2[i]=(pwd[i]^strt); putw(pwd2[i],fp1);//将数组元素送入文件流中 i++; } fclose(fp1);//关闭文件流 printf("\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); } }
(2)自定义函数login()在初始化检测后调用,用于管理员的登录,用户根据提示密码,函数调用strcmp()函数对输入密码和密码文件中的读取数据进行比较,如果一致则进入系统,不一致会提示重新输入,如果3次不一致会强制退出:
void login()//检测登陆密码 { int i,n=3; char pwd[9]; do { printf("\n请输入登陆密码: "); for(i=0;i<8&&((pwd[i]=getch())!=13);i++) putch('*'); pwd[i]='\0'; if(strcmp(pwd,password)) { printf("\n密码错误,请重新输入!\n"); system("cls");//调用清屏命令 n--; } else break; }while(n>0); if(!n) { printf("密码输入3次错误,请退出!\n"); getch(); exit(1); } }
(3)自定义函数addemp()用于添加员工的信息,首先打开存储员工信息的数据文件,系统会提示用户输入相应的员工基本信息,当用户输入完成一个员工的信息后,系统会提示用户是否继续输入员工信息:
void addemp() { FILE *fp; EMP *emp1; int i=0; char choice='y'; if((fp=fopen("employee.txt","ab"))==NULL)// 追加打开一个二进制文件,并在文件末尾写数据 { printf("打开文件出错!\n"); getch(); exit(1); } do { i++; emp1=(EMP*)malloc(sizeof(EMP)); if(emp1==NULL) { printf("内存分配失败,请按任意键退出!\n"); getch(); return; } printf("\n\t请输入第%d各员工的信息\n",i); bound('_',40); 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('_',40); printf("\n是否继续输入?(y/n)"); fflush(stdin);//清除缓存区 choice=getchar(); if(toupper(choice)!='Y') { fclose(fp);//关闭文件流 printf("\n输入完毕,请按任意键返回!\n"); getchar(); return; } system("cls"); }while(1); }
(4)自定义函数delemp()实现删除员工的功能。在系统的功能菜单中选择删除信息的操作后,系统就会提示要删除的员工的姓名,输入要删除的员工的姓名后,如果系统从信息链表中找到相关信息后就会将信息显示出来,再次要求用户确定是否要删除,谨防误操作,提高信息的安全性。
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("\n员工 %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("家庭地址: %s \n",emp1->address); bound('_',40); printf("\n确定要删除该员工信息?(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; free(emp1); gsave=1; savedata();//保存数据 return; } else { emp2=emp1; emp1=emp1->next; } if(!findok) { bound('_',40); printf("\n没有找到姓名是: %s 的信息!\n",name); getch(); } return; } }
(7)自定义函数resetpwd()用于修改密码。在系统的功能菜单中选择修改的操作选项后,系统会提示输入旧密码,用户咋正确的输入旧密码后,根据提示即可实现密码的修改:
void resetpwd() { char pwd[9],pwd1[9]; int i; FILE *fp1; system("cls"); printf("\n请输入旧密码: \n"); for(i=0;i<8&&((pwd[i]=getchar())!=13);i++) putchar('*'); pwd[i]='\0'; if(strcmp(password,pwd)!=0) { printf("\n密码错误,请按任意键退出!\n"); getchar(); return; } do { printf("\n设置密码,请不要超过8位: "); for(i=0;i<8&&((pwd[i]=getchar())!=13);i++) putchar('*'); printf("\n请再确认一次密码: "); for(i=0;i<8&&((pwd[i]=getchar())!=13);i++) putchar('*'); pwd[i]='\0'; pwd1[i]='\0'; if(strcmp(pwd,pwd1)!=0)//比较两次输入的密码 printf("\n两次密码输入不一致,请重新输入! \n\n"); else break; }while(1); if((fp1=fopen("employee.tex","wb"))==NULL) { printf("\n系统创建失败,请按任意键退出!\n"); getchar(); exit(1); } i=0; while(pwd[i]) { putw(pwd[i],fp1);//将数组元素送入文件流中 i++; } fclose(fp1);//关闭文件流 printf("\n密码修改成功,请按任意键退出后,再重新进入!\n"); getch(); return; }
(8)主函数程序代码如下:
int main()
{
emp_first=emp_end=NULL;//链表指针初始化
gsave=gfirst=0;
checkfirst();
login();
readdata();
menu();
system("PAUSE");
return 0;
}
1.正常测试数据和运行结果
第一组:实现添加员工信息并显示添加后员工的信息的功能,操作如下图:
第二组:实现查询员工信息的功能,操作如下:
第三组:实现修改员工信息的功能,并显示修改后员工的信息,操作如下:
q:969060742 文档、代码、程序资源
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。