当前位置:文档之家› 职工信息管理系统

职工信息管理系统

1 绪论1.1 课题背景及目的公司的扩张和人员的变动都需要处理相应职工的信息,凭借人力很难用最短的时间整理出需要的职工信息。

运用计算机系统对职工档案进行管理,能够提高管理效率、节约时间、方便管理人员管理信息。

因此需要设计一个职工信息管理系统,系统以菜单的方式工作,可以录入、查询、删除等。

职工的信息包括工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不可重复),使查询职工信息变得又快又简单。

1.2课题的研究方法本系统主要的设计思想是实现对职工信息的录入、删除、排序、查询等主要功能。

职工信息以文件的形式存储,这要用到文件存储数据结构。

数据结构的构造类型包括结构体变量、结构体数组、结构体指针等。

基本类型有整形字符型,其中字符型用来定义职工编号、姓名、工资、电话、地址等。

一维数组struct worker work[]用于定义员工的总人数,结构体struct worker用于存放员工的资料。

系统的人机接口采用简单的字符界面进行交互。

系统的设计方法是结构化设计方法,采用C语言进行开发。

软件开发平台采用Visual C++6.0。

[1]第1页 /共 30页2 概要设计2.1软件模块结构图职工信息管理系统可以分为显示员工资料、录入员工资料、查询员工信息、删除员工信息、对员工信息进行排序、退出信息系统。

图2.1 职工信息管理系统模块结构图第2页 /共 30页3 详细设计3.1数据结构设计定义一维数组struct worker work[50];用于定义员工的总人数,当员工总人数超过50后便不能再录入员工资料。

[1]结构体struct worker用于存放存放员工的资料,包括员工的基本信息:工号,姓名,年龄,学历,工资,住址,电话号码。

struct worker{int num; 工号char name[15]; 名字char xingbie; 性别int age; 年龄char exp[6]; 学历int wage; 工资char address[20]; 住址char tel[12]; 电话号码};int count=0; 当前工人个数int sort_type=0; 当前排序类型第3页 /共 30页3.2界面设计3.2.1 登录主界面设置用户名和密码,输入正确方可进入主界面。

由strcmp函数判断,代码实现:if((strcmp(username,"abcde")==0)&&(strcmp(pwd,"123456")==0)) [2]如果输入用户名和密码错误超过三次,则自动退出程序。

代码实现:for(i=0;i<3;i++){printf("\n请输入用户名:");gets(username);printf("\n请输入6位密码:");gets(pwd);……if(k==0)printf("\n连续输入三次错误将退出程序:n");Sleep(2000);quit();3.2.2主界面第4页 /共 30页进入主界面后用户可以根据自己的需要选择相应的选项1.显示员工资料;2.录入员工资料;3.员工信息查询;4.删除员工信息;0.退出信息系统。

[3]代码实现:while ((n!='1')&&(n!='2')&&(n!='3')&&(n!='4')&&(n!='5')&&(n!='0')){printf("\n请选择:")……{case '1':display();break;case '2':if(count<50)input();else{printf("记录数已满\n");Sleep(2000);system("cls");homepage();第5页 /共 30页}break;……default:printf("\n选项错误\n");}}}3.2.3 显示员工信息界面一条信息由员工的工号、姓名、性别、年龄、学历、工资、住址和电话组成,用户登录此界面可查看相应的信息,用switch()语句来实现。

代码实现:void display(){int i;char c;printf("备注:学历(1=中专,2=大专,3=本科,4=硕士,5=博士,6=其它):\n\n\n");switch(sort_type){case 0: printf("\t\t未排序:\n\n"); break;第6页 /共 30页case 1:printf("\t\t按工号排序:\n\n"); //sort();break;case 2:printf("\t\t按工资排序:\n\n");//sort();break;}printf("\t工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话\n");……3.2.4 录入员工信息界面登录此界面可以录入新员工的信息,当系统中的员工人数达到上限时不可以录入新信息。

if(work[count].num==work[i].num);numcheck=0判定录入的工号是否重复,重复的话会有重新输入的提示,避免职工信息的重复。

当记录数已满时,通过sleep(2000),使之回到主界面,进行其他选项设置。

[2]代码实现:void input(){ int i,numcheck;char c;do{ printf("工号:\n");scanf("%d",&work[count].num);numcheck=1;if(work[count].num<0)printf("请输入正整数:\n");……第7页 /共 30页do{c=getchar();if(c=='y'||c=='Y'){count++;……3.2.5 查询员工信息界面员工信息的查询可以按工号或学历进行查询。

用if函数来实现。

通过while ((choice!=1)&&(choice!=2));这个选择来实现查询的方式,选择“1”为工号查询,选择“2”则为按学历查询。

if (find_num==work[i].num)即为根据职工号进行查询,strcmp(findedu,work[i].exp)根据学历进行职工信息查询。

代码实现:void find(){int i,j;int choice=0;int find_num;char findedu[6];char c;system("cls");第8页 /共 30页printf("\t\t请选择查询功能:\n");……}while ((choice!=1)&&(choice!=2));if (choice==1){printf("\n\t请输入要查询的职工号\n");scanf("%d",&find_num);printf("\n正在查询,请稍候");for(i=0;i<20;i++){printf(".");Sleep(100);}system("cls");printf("\n\n按任意键返回\n");c=getch();system("cls");homepage();}3.2.6 删除员工信息界面第9页 /共 30页首先要进行职工信息查询,然后再对查询到的职工进行删除。

printf("%d",&del_num);即为显示要删除的职工号,if(c=='y'||c=='Y')则是确定是否删除选定的职工信息。

最后通过homepage()回到主界面。

代码实现:void del(){int i,j,del_num,match=0;char c;system("cls");printf("请输入要删除的员工工号:\n");scanf("%d",&del_num);waiting();for(i=0;i<count;i++){if(work[i].num==del_num){match=1;for(j=i;j<count;j++)work[j]=work[j+1];第10页 /共 30页4 使用说明及运行实例(1)登录主界面按提示输入用户名和密码登录主界面,输入累计错误三次自动退出系统。

用户名:abcde;密码:123456图4.1 登陆界面(2)主界面进入主界面选择相应的选项进行操作第11页 /共 30页第 12页 /共 30页图4.2 主界面(3) 查询员工信息界面如图4.3按所选功能输入相应的信息查询员工资料。

图 4.3 查询信息界面(4)显示员工信息第 13页 /共 30页图 4.4 无序显示员工信息(5) 删除员工信息界面如图4.5.1按提示输入信息,并确认。

图 4.5 删除员工信息界面(6)录入界面如图4.6输入员工的相应信息,输入工号重复后系统提示重新输入。

图4.6 录入员工界面(7)退出程序显示界面图4.7 退出系统显示界面第14页 /共 30页5 总结5.1 遇到的问题及解决办法(1)些字符或字符串的定义上出项错误,如定义职工电话号码的时候,用成了float类型,而正确的应该是char类型。

(2)对排序模块进行设计时流程图没设计好,导致运行程序时间过长。

(3)在进行模块函数设计时,find()函数功能没有设计好,导致部分函数代码过长,可读性降低。

再次重写里面的一部分代码,浪费了大量的时间。

5.2 心得体会这次的课程设计让我学会了许多函数的使用,培养了分析问题、解决问题的能力,同时也体会到了C语言操作灵活、执行效率高等特点。

在整个课程设计中,我认为最重要的就是耐心和细心。

在编写过程中注意拼写,仔细编写程序;在程序编译中出现很多错误的时候能够耐心去修改,这些都是需要学习的。

只有这样,才能很好的完成程序。

上机操作可以加深对数组、循环等语句的理解。

刚开始拿到题目不知道从哪里下手,只有去搜集一些课外资料和咨询师兄师姐们的意见。

相关主题