简单的职工管理系统
- 格式:doc
- 大小:30.00 KB
- 文档页数:11
目录一、前言—--——--—-——-———-—————-———-——-———-—————---—-——————-—--————————-————————2二、需求分析—-———-—---—-——————————-———--——-—--——-————-—--——————————---—----—3 三、概要设计—-——-——-—————-———-—-—————————--——-----—--—--————--——-—---—-—————4四、详细设计—-———-———————--—-—-————-—-—————-—-—-———————-——-——-—-----————-—-—5五、调试分析————-————————-—————-——-————--—-——-——--——--—--—---—--——---—--—-——6六、用户使用说明—--——————-————-————-—-—-—-—--—————————-—————-—-———————-——-7 七、测试结果——————-—--—---——--——————--—-———----———--——-—-—-————————---—-———-8八、总结—-———---—-—--———-———-—--—---——--—————--—-—--—————--————————---—----—-11九、主要参考文献和附录—--——-——-—-————--——-——-—--———---—————-——-———————12前言员工管理系统是一个工作单位不可缺少的管理工具,它管理的数据对于公司的决策者和管理者来说都至关重要,所以员工管理系统应该能够为用户提供充足的信息和快捷的查询手段.但一直以来各个公司基本上都是靠传统的人工方式来管理员工信息,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于信息的查找、更新和维护都带来了不少的困难。
案例二用VC++制作一个教职工管理系统关键词:VC++应用程序向导增加对话框资源ADODC控件DataGrid控件对话框切换2.1 系统设计的目的和意义学校职工查询是学校管理中需要经常处理的一项工作,本案例结合一个简化的学校教职工管理系统的制作,介绍如何利用VC++的应用程序向导制作应用程序。
该系统的制作涉及一个数据库、两个数据表及其相关的对话框的制作开发,涉及在工程中增加对话框、调用对话框的方法以及应用程序向导的使用方法。
最重要的是,在本案例中,我们将介绍一种新的数据源引用方法,即使用ADODC控件引用数据源并制作应用系统的方法。
案例为学生学习使用VC++创建了一个基本例程,同样,作为本书的第二个例子,我们仍然采用向导创建上程的方法加以进行,案例程序是简单的,但方法是重要的。
2.2 系统功能设计本系统具有—般系统的数据处理功能,如数据录入、增加、修改、删除等,另外,本系统将涉及职工信息表和职工工资表两个表的操作,用户可以在两个表之间相互切换,因此系统制作小需要涉及到对话框相互切换的方法,它是一个重要而且常用的方法。
2.3 数据库与数据表的设计本系统将首先创建一个职工信息数据库,并在它之中创建两个数据表,一个是“职工信息数据表”,—个是“职工工资信息表”。
在本案例当中,我们仅用Microsoft Access 2003创建教职工管理数据库及其数据表,不再介绍其他方法。
2.3.1利用Microsoft Access 2003创建教职工管理数据库及其数据表微软公司的许多产品所支持的数据库结构与数据库驱动器类型均是通用的,因此,用户往往可以借助于相关的工具创建数据库与数据表,这里我们介绍采用Microsoft Access 2003创建数据库及其数据表的方法。
先定义职工信息数据表的结构,如表2.1所示,它专门用于记录教职工的基本情况。
表2.1 职工信息数据表的结构职工工资情况表的结构定义如表2.2所示,注意,这是一个简化了的职工工资数据表,因为工资表往往比较复杂,而且不同的单位工资表结构也有所不同.我们不可能定义一个“万能”的工资表结构,只能创建一个具有示范意义的工资数据表结构。
职工信息管理系统目录一,需求文档…………………………………………………………………………………二,设计文档……………………………………………………………………………….. 三,系统说明书及用户操作手册………………………………………………。
.。
四,预计人员分配资源调配和进度表………………………………………。
五,分工表………………………………………………………………………………….一,需求文档:1,编写目的:职工管理系统是一个工作单位不可缺少的管理工具,它管理的数据对于公司的决策者和管理者来说都至关重要,所以职工管理系统应该能够为用户提供充足的信息和快捷的查询手段。
通过对用户需求进行调查分析,写出需求分析文档作为项目设计的基本准则要求,以及系统分析员进行系统分析和测试人员进行测试时的手册,方便设计人员进一步设计规划。
2,需求概述:设计一个职工信息管理系统,是其具有以下功能:2。
1建立职工信息数据,录入职工信息(包括职工编号、姓名、性别、工资、出生年月、参加工作时间和年龄)并保存;2.2根据职工信息表,建立只含有姓名和年龄的职工信息简表;2.3浏览所有职工信息;2.4实现职工信息的增、删、查、改;2.5实现职工信息按姓名字母顺序或职工编号进行排序。
3,需求说明:职工信息管理系统所实现的功能:3。
1添加新职工信息:实现对新加入职工信息的录入,所有的信息当中主码即职工信息编号,必须填写。
3。
2删除职工信息:当公司有职工因故离职,需要删除职员信息时,释放掉它所占据的数据库空间,就可以在列表中选中所要删除的记录,然后点击删除。
如果确认删除则在弹出的消息框中点击确定即可删除所选的记录。
3。
3修改职工信息:由于某种原因可能导致在记录员工信息时出现错误,需要对员工信息进行修改。
在员工信息系统主窗口中选择所要修改的成员信息进行修改,点击修改后将会弹出消息框,如果确认修改则点击确定,则修改数据成功。
3。
4查询职工信息:支持多条件查询,根据职工的姓名、职工编号等信息进行查询,并显示所有符合查询条件的职工信息。
职工工资信息管理系统实验报告一、引言职工工资信息管理系统是一种用于管理和统计企业职工工资信息的系统,旨在提高工资管理的效率和准确性。
本实验旨在通过搭建一个简单的职工工资信息管理系统,对系统的功能和性能进行测试和评估。
二、系统需求分析职工工资信息管理系统应具备以下基本功能:1. 登录功能:提供登录界面,确保只有授权人员可以使用系统。
2. 职工信息录入功能:管理员或授权人员可以录入职工的基本信息,包括姓名、工号、岗位等。
3. 工资信息录入功能:管理员或授权人员可以录入职工的工资信息,包括基本工资、津贴、绩效工资等。
4. 工资计算功能:根据录入的工资信息,系统能够自动计算每位职工的实际工资。
5. 工资统计功能:系统能够生成工资报表,包括各部门职工工资总额、平均工资等统计信息。
6. 工资查询功能:管理员或授权人员可以通过系统查询特定职工的工资信息。
7. 数据备份与恢复功能:系统能够自动备份工资信息数据,并可在需要时方便地进行数据恢复。
三、系统设计与实现本实验采用Java语言和MySQL数据库进行系统的设计与实现。
系统前端采用Java Swing图形界面库,实现用户友好的操作界面;后端采用Java JDBC技术与MySQL数据库进行数据交互和管理。
1. 登录功能设计与实现登录功能是系统的入口,用户需要输入正确的用户名和密码才能进入系统。
在界面设计上,使用文本框和密码框接收用户输入,并通过按钮实现登录功能。
在数据库中存储用户信息表,包括用户名和密码字段,系统通过对比用户输入与数据库中的数据来实现用户的登录验证。
2. 职工信息录入功能设计与实现职工信息录入功能包括姓名、工号、岗位等信息的录入。
在界面上,通过文本框和下拉列表等来接收和展示用户输入。
用户输入完整的职工信息后,点击确定按钮将数据保存到数据库中。
3. 工资信息录入功能设计与实现工资信息录入功能包括基本工资、津贴、绩效工资等信息的录入。
在界面上,同样使用文本框等组件进行数据的输入和展示。
1.职工管理系统欢迎页面(如图1所示)该页面采用了简单大方的图片及色彩,没有太多的色彩及修饰,但是却已职员为背景核心,突出了主题,图中的向上的楼梯形式的箭头,更是激发着职员努力工作,步步高升。
图中的“您好,欢迎光临职工管理系统!”采用超链接的形式,点击后即可跳转到职工管理系统主界面。
图1该页面同样采用了简单大方的图片及色彩,以白色为主色,以职工为核新,突出了主题,图中的五名职员,体现出了以员工为主题的特色,也表达了员工之间的合作,团队精神。
右上角的三个超链接,可以在登录的同时分别实现职工首页,登录页面及注册页面,方便使用。
在迷你框中可实现已有用户的登录,下次自动登录可以方便下次登录,无需再次输入用户名和密码;如果忘记密码,点击忘记密码,即可轻松的找回,方便快捷。
图2该页面可以实现没有注册的用户的注册,只需填写自己职工号就可以实现注册,注册完信息后便可以马上登录,或者点右上角的登录,马上实现登录功能。
图3该页面可以实现员工信息的录入,浏览,查询,修改,删除以及退出功能,操作者只需点击所需功能的超链接就可以实现相应的功能,方便快捷。
图4该页面可以实现对员工信息的录入,只需按提示要求操作即可,录入无误后点击提交就可成功录入,若填写错误只需在相应的栏中修改,或者点击重置,修改全部项。
若想使用其它功能只需点击上面相应的超链接即可,轻松快捷。
图5当操作者想要浏览职工信息时,只需点击“职工信息查询功能”,页面将自动跳出查询页面,操作者只需按操作提示即可,确定后便可显示您所要查询职工的信息。
图6当操作者想要浏览职工信息时,只需点击“职工信息查询功能”,页面将自动跳出查询页面,操作者只需按操作提示即可,确定后便可显示您所要查询职工的信息。
图78.职工信息删除功能(如图8所示)当操作者想要删除职工信息时,只需点击“职工信息删除功能”,页面将自动跳出查询页面,操作者只需按操作提示即可,确定后便可删除您所要删除职工的信息。
目录一系统的背景2二系统的编译环境和语言2三系统类的设计33.1 类的对象:33.2 类的属性列表:33.3 类的行为:33.4 具体代码如下:3四系统运行入口的设计11五运行步骤13六数据文件16七参考文献16一系统的背景从事商业活动的公司迫切需要这样一个系统:它能高效的管理公司内部所有员工的个人信息,并能正确快速的对系统的使用者的操作做出回应,以提高效率,降低成本。
该系统能够满足以上的要求,使用户可以快速准确的管理公司员工的信息。
二系统的编译环境和语言该系统是采用C++语言在Turbo c下编译而成,。
因为在该系统中有明显的对象,即是公司的员工,且C++语言是一个非常强大的面向对象的语言,因此该系统使用C++编写将会简单,快速而有效。
Turbo C是一个经典且功能强大的编译器,是编译用C++语言写成的程序的首要工具。
三系统类的设计3.1 类的对象:系统有两个类:Employee :对象是公司里的每一个员工,是系统中最重要的类。
DBOperate :对象是系统的数据文件,完成对员工信息的保存和读取。
3.2 类的属性列表:Employee :员工的编号:EmployeeNum (long)员工的姓名:EmployName (string)员工所属部门:EmployeeDepart (string)员工级别:EmployeeGrade (string)员工工资:EmployeePay (float)员工工龄:EmpoyeeWorkTime (long)3.3 类的行为:Employee :添加新员工信息:NewInfo();员工信息浏览:ShowInfo();员工信息变更:RefreshInfo();发放工资:Pay(int EG);//EG为员工级别解聘员工:DeleteInfo();DBOperate :保存员工信息:WriteIn(int iflag);读取员工信息:ReadOut();更新员工总人数:RefreshMaxNum(int iflag);注释:当iflag 为1时,人数增大;为零时,人数不变,即是修改;为-1时,人数减少。
1、问题描述:对单位的职工进行管理,包括插入、删除、查找、排序等功能。
2、要求:职工对象包括姓名〔字符串〕、性别〔字符〕、出生年月〔数字〕、工作年月〔数字〕、学历〔字符串〕、职务〔字符串〕、住址〔字符串〕、〔字符串〕等信息。
〔1〕新增一名职工:将新增职工对象按姓名以字典方式职工管理文件中。
〔2〕删除一名职工:从职工管理文件中删除一名职工对象。
〔3〕查询:从职工管理文件中查询符合某些条件的职工。
〔4〕修改:检索某个职工对象,对其某些属性进行修改。
〔5〕排序:按某种需要对职工对象文件进行排序。
3、实现功能〔1〕由键盘输入职工对象,以文件方式保存。
程序执行时先将文件读入内存。
〔2〕对职工对象中的“姓名〞按字典顺序进行排序。
〔3〕对排序后的职工对象进行增、删、查询、修改、排序等操作。
4、代码:#include <stdlib.h>#include <stdio.h>#include <malloc.h>#include <string.h>typedef struct worker{int id;char name[20];char sex[3];int age;char edu[50];int wages;char adr[255];char phone[13];}WORKER, *PWORKER;//typedef struct WORKER *PWORKER;typedef struct link{WORKER w;struct link *next;}LINK, *PLINK;//typedef struct LINK *PLINK;/*创立职工信息链表*/PLINK create(){PLINK p=(PLINK)malloc(sizeof(LINK));if(NULL!=p){p->next=NULL;return p;}printf("内存缺乏!\n");return NULL;}/*显示程序界面文字*/void message(){printf("\t\t************************************************\n\n"); printf("\t\t>>>>>>>>>>>>>>欢送进入职工管理系统<<<<<<<<<<<<<<\n\n"); printf("\t\t************************************************\n\n"); printf("\t\t ************** Choose Function *************\n\n");printf("\t\t ************ 帮助请输入:0************\n\n"); printf("\t\t ************录入职工信息请输入:1************\n\n"); printf("\t\t ************浏览职工信息请输入:2************\n\n"); printf("\t\t ************查询职工信息请输入:3************\n\n"); printf("\t\t ************删除职工信息请输入:4************\n\n"); printf("\t\t ************修改职工信息请输入:5************\n\n"); printf("\t\t ************ 清屏请输入:6************\n\n"); printf("\t\t ************ 退出请输入:-1***********\n\n");printf("\t\t************************************************\n\n"); printf("\t\t************************************************\n\n"); }void find_sr(PLINK plink, char* str){for(PLINK curr = plink->next; curr != NULL; curr = curr->next){if(strcmp(curr->, str) == 0){printf("职工工号:%d\n",curr->w.id);printf("职工姓名:%s\n",curr->);printf("职工性别:%s\n",curr->w.sex);printf("职工年龄:%d\n",curr->w.age);printf("职工学历:%s\n",curr->);printf("职工工资:%d\n",curr->w.wages);printf("职工住址:%s\n",curr->w.adr);printf("职工:%s\n",curr->w.phone);}}}void findid(PLINK plink, int id){for(PLINK curr = plink->next; curr != NULL; curr = curr->next){if(curr->w.id == id){printf("职工工号:%d\n",curr->w.id);printf("职工姓名:%s\n",curr->);printf("职工性别:%s\n",curr->w.sex);printf("职工年龄:%d\n",curr->w.age);printf("职工学历:%s\n",curr->);printf("职工工资:%d\n",curr->w.wages);printf("职工住址:%s\n",curr->w.adr);printf("职工:%s\n",curr->w.phone);}}}void show(PLINK plink){for(PLINK curr = plink->next;curr != NULL; curr = curr->next){printf("职工工号:%d\n",curr->w.id);printf("职工姓名:%s\n",curr->);printf("职工性别:%s\n",curr->w.sex);printf("职工年龄:%d\n",curr->w.age);printf("职工学历:%s\n",curr->);printf("职工工资:%d\n",curr->w.wages);printf("职工住址:%s\n",curr->w.adr);printf("职工:%s\n",curr->w.phone);}}/*录入职工信息*/int add(PLINK p){PLINK h = NULL;PLINK q=(PLINK)malloc(sizeof(LINK));if(NULL==q){printf("录入失败提示:内存缺乏!\n");return -1;}printf("请输入职工号(数字):");scanf("%d",&q->w.id);h=p->next;while(h){if(h->w.id==q->w.id){free(q);printf("录入失败提示:此职工号已经存在!\n");return -1;}h=h->next;}printf("请输入职工姓名(文字):");scanf("%s",&q->);printf("请输入职工性别(文字):");scanf("%s",&q->w.sex);printf("请输入职工年龄(数字):");scanf("%d",&q->w.age);printf("请输入职工学历(文字):");scanf("%s",&q->);printf("请输入职工工资(数字):");scanf("%d",&q->w.wages);printf("请输入职工住址(文字):");scanf("%s",&q->w.adr);printf("请输入职工(数字):");scanf("%s",&q->w.phone);q->next=p->next;p->next=q;printf(".^_^.录入成功!.^_^.\n");return -1; }/*按姓名查询*/PLINK findname(PLINK p,char *name){message();printf("按姓名查询\n");printf("职工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t \n");while(NULL!=p->next){if(0==strcmp(p->next->,name)){printf("%d\t%s\t%s\t%d\t%s\t%d\t%s\t%s\n",p->next->w.id,p->next->,p->next->w.sex,p->next->w.adr,p->next->,p->next->w.wages,p->next->w.adr,p->next->w.phone);return p;}p=p->next;}printf(".^_^.查询结束!.^_^.\n");return NULL;}/*按职工号删除职工信息*/int del(PLINK p,int id){message();printf("按职工号删除职工信息\n");while(NULL!=p->next){if(p->next->w.id==id){PLINK q=p->next;p->next=p->next->next;free(q);printf(".^_^.删除成功!.^_^.\n");return 1;}p=p->next;}printf("没有你输入的职工号!\n");return -1;/*程序结束释放内存*/void release(PLINK p){PLINK q;while(NULL!=p->next){q=p;p=p->next;free(q);}free(p);}/*查询调用*/void search(){int id;char name[20];char str[20];PLINK pworker;int l;printf("\t\t\t\t*姓名查找按:1*\n");printf("\t\t\t\t*学历查找按:2*\n");printf("\t\t\t\t*职工号查按:3*\n");scanf("%d",&l);if(l>0&&l<4){switch(l){case 1:printf("请输入要查询的职工姓名:");scanf("%s",name);findname(pworker,name);break;case 2:printf("请输入要查询的职工学历: ");scanf("%s", str);find_sr(pworker, str);break;case 3:printf("请输入要查询的职工号:");scanf("%d",&id);findid(pworker,id);break;}printf("\n\n选择完毕!!!");}else printf("\t\t\t\t输入有误!!!");/*修改职工信息*/int modify(PLINK p){int id;PLINK q;PLINK h = NULL;printf("请输入职工号(数字):");scanf("%d",&id);h=p->next;while(h){if(h->w.id==id){break;}h=h->next;}if (h == NULL){printf("找不到此职工,请重试\n");return -1;}printf("请输入职工姓名(文字):");scanf("%s",&h->);printf("请输入职工性别(文字):");scanf("%s",&h->w.sex);printf("请输入职工年龄(数字):");scanf("%d",&h->w.age);printf("请输入职工学历(文字):");scanf("%s",&h->);printf("请输入职工工资(数字):");scanf("%d",&h->w.wages);printf("请输入职工住址(文字):");scanf("%s",&h->w.adr);printf("请输入职工(数字):");scanf("%s",&h->w.phone);q->next=p->next;p->next=q;printf(".^_^.修改成功!.^_^.\n");return -1;}int main(){int cmd=0;int id;char name[20];char str[20];PLINK pworker;if(!(pworker=create())){exit(0);}while(cmd!=-1){switch(cmd){case 0: message(); break;case 1: add(pworker); break;case 2: show(pworker); break;case 3: search(); break;case 4: printf("请输入要删除的职工号:");scanf("%d",&id);del(pworker,id);break;case 5: modify(pworker); break;case 6: message(); break;}printf("请输入操作命令数字:\n");scanf("%d",&cmd);}printf("\t\t>>>>>>>>>>>>>>>>>>>>谢谢使用<<<<<<<<<<<<<<<<<<<<\n\n");release(pworker);return 0;}4.测试结果:5.总结:本次课程设计是围绕数据结构进行。
1.课程论文题目职工信息管理系统程序设计一、题目要求职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。
试设计一职工信息管理系统,使之能提供以下功能:(1)系统以菜单的方式工作。
(2)职工信息录入功能(职工信息用文件保存)。
(3)职工浏览功能。
(4)职工信息查询功能,查询方式可按学历查询或者工号查询。
(5)职工信息的删除、修改功能(可选项)。
2.程序设计思路1、设计思路(1)根据题目要求,应该把职工工资信息用结构体形式输入,在定义一个全局变量和文件指针进行整个程序的运行,然后把职工工资信息送到文件中,所以应该提供一个结构体和文件的输入输出等操作;(2)在程序中需实现职工工资浏览、查询、统计等功能的操作,所以需要建立相应的功能模块来实现;(3)另外还需要提供键盘式选择菜单实现功能,在运行时达到所要的目的。
3.功能模块图5.算法设计1.主函数提供输入、处理和输出部分的函数调用,各功能模块采用菜单方式选择。
2浏览模块【分析】该模块的功能是浏览职工的全部信息3排序模块4查询模块【分析】该模块的功能是根据输入的职工按照工号和学历查找对应的记录,找到以后,可进行继续查找或修改信息的操作。
流程图如下:5修改模块【分析】该模块的功能是显示所有职工的信息,考虑到记录较多,建议采用分屏显示。
显示完所有记录后,输入要修改的职工的工号,根据工号查到职工的记录,并提示用户修改该记录的哪部分信息,根据用户做的选择修改相应信息。
流程图如下:6.程序代码#include<stdio.h>#define N 50struct worker{char id[50];char name[20];char sex[10];char age[10];char edu[20];char salary[10];char address[20];char tel[20];}worker[N];void save(int n) //保存函数,保存n个记录{ FILE *fp;int i;if((fp=fopen("worker.txt","wb"))==NULL) //以只写方式为输出打开一个二进制文件{ printf("\nCannot open file\n");}for(i=0;i<n;i++)if(fwrite(&worker[i],sizeof(struct worker),1,fp)!=1)printf("file write error\n");fclose(fp);}int load() //加载函数{ FILE *fp;int i;if((fp=fopen("worker.txt","rb"))==NULL){printf("\nCannot open file\n");return NULL;}for(i=0;!feof(fp);i++)fread(&worker[i],sizeof(struct worker),1,fp);fclose(fp);return(i-1);}void no_input(int i,int n) //工号输入函数,i表示第i个职工的信息,n 表示比较到第n个职工{ int j,k,w1;do{w1=0;printf("工号:");scanf("%s",worker[i].id);for(j=0;worker[i].id[j]!='\0';j++)if(worker[i].id[j]<'0'||worker[i].id[j]>'9') //判断工号是否为数字{puts("请重新输入!\n");w1=1;break;}if(w1!=1)for(k=0;k<n;k++) //比较到第N个职工if(k!=i&&strcmp(worker[k].id,worker[i].id)==0) //判断职工号是否有雷同{puts("请重新输入!\n");w1=1;break;}}while(w1==1);}void input(int i) //输入一个记录的函数{ no_input(i,i);printf("姓名:");scanf("%s",worker[i].name);printf("性别:");scanf(" %s",&worker[i].sex);printf("年龄:");scanf("%s",&worker[i].age);printf("工资:");scanf("%s",worker[i].salary);printf("学历:");scanf("%s",&worker[i].edu);printf("住址:");scanf("%s",worker[i].address);printf("电话:");scanf("%s",worker[i].tel);}void printf_one(int i) //显示一个记录的函数{printf("%10s %10s %5s %5s %8s %6s %10s %10s\n",worker[i].id,worker[i].name,worker[i].sex,worker[i].age,worker[i].salary,worker[i].edu,worker[i].address,worker[i].tel); }void printf_back() //一个任务结束后选择是好似浏览还是返回{ int k,w;printf("\n\n\tSuccessful^-^.\n\n");printf("接下来做什么?\n\n\t1).浏览全部\t2).返回: [ ]\b\b");scanf("%d",&w);if(w==1)browse();else menu();}modify_data(int i,int n) //修改函数{ int c,w1;do{puts("\nmodify by=>\n\n 1).工号 2).姓名 3).性别 4).年龄 5).工资6).学历 7).地址 8).电话 9).取消");printf("请选择?:[ ]\b\b");scanf("%d",&c);if(c>9||c<1){puts("\nChoice error!please again!");getchar();}}while(c>9||c<1);do{switch(c){case 1:no_input(i,n);break;case 2:printf("name:");scanf("%s",worker[i].name);break;case 3:printf("sex:");scanf("%s",worker[i].sex);break;case 4:printf("age:");scanf("%s",worker[i].age);break;case 5:printf("salary:");scanf("%s",worker[i].salary);break;case 6:printf("edu:");scanf("%s",worker[i].edu);break;case 7:printf("address:");scanf("%s",worker[i].address);break;case 8:printf("tel:");scanf("%s",worker[i].tel);break;case 9:menu();break;}puts("\nNow:\n");printf_face();printf_one(i);printf("\n确定?\n\n\t1).是2).否,重新修改3).不保存退出[ ]\b\b");scanf("%d",&w1);if(w1==1)save(n);}while(w1==2);return(w1);}printf_face() //显示数据结构项目{ printf("\n\t工号姓名性别年龄工资学历地址电话号码\n"); }void enter() //输入模块{ int i,n;printf("输入多少个职工信息(0-%d):",N-1);scanf("%d",&n);printf("\n 请输入职工信息\n\n");for(i=0;i<n;i++)input(i);if(i!=0)save(n);printf_back();}browse() //浏览模块{ int i,j,n;n=load();printf_face();for(i=0;i<n;i++){if((i!=0)&&(i%10==0)){printf("\n\n按任意键显示下一页...");getch();puts("\n\n");}printf_one(i);}printf("\t这里有 %d 条记录.\n",n);printf("\n按任意键返回...");getch();menu();}modify() //修改模块{struct worker s;FILE *fp;int i,n,k,w0=1,w1,w2=0;n=load();do{k=-1;printf_face();for(i=0;i<n;i++){if((i!=0)&&(i%10==0)) //目的是分屏显示{printf("\n\n记住要修改的工号.按任意键显示下一页");getch();puts("\n\n");}printf_one(i); //调用显示一个记录的函数}do{printf("\n\n输入要修改的职工工号! 工号:");scanf("%s",s.id); //输入要修改的IDfor(i=0;i<n;i++) //查找要修改的数据if(strcmp(s.id,worker[i].id)==0){k=i; //找到要修改的记录s=worker[i]; //把worker[i]备份,以便恢复}if(k==-1)printf("\n\n未找到请重输");}while(k==-1); //当k=-1表示没有找到printf_face(); //调用显示数据结构项目的函数printf_one(k); //调用显示一个记录的函数w1=modify_data(k,n); //修改记录并返回保存控制值w1,w1=1表示用户已确认修改if(w1==1){printf("\Successful^_^.\n\n修改另一个?\n\n\t1).是 2).否,保存退出\t[ ]\b\b");scanf("%d",&w0);w2=1; //用来控制保存,使w2=1是标记已有过修改}else{w0=0;if(w2==1)worker[k]=s;}if(w0!=1&&w2==1)save(n);}while(w0==1);menu();}search() //查询模块{ int c,w1;do{puts("\nsearch by=>\n\n1).工号 2}.学历 3).取消并返回"); printf("Which you needed?:[ ]\b\b");scanf("%d",&c);if(c>3||c<1){ puts("\nchoice error!please again!");getchar();}}while(c>3||c<1);{switch(c){case 1:search1();break;case 2:search2();break;case 3:menu();break;}}}search1() //按工号查询模块{int i,n,k,w1=1,w2,w3,w4;struct worker s;n=load();do{do{k=-1;printf("\n\n输入要查询的工号! id:");scanf("%s",s.id);printf_face();for(i=0;i<n;i++)if(strcmp(s.id,worker[i].id)==0){k=i;printf_one(k);break;}if(k==-1){printf("\n\nNo exit!please");printf("\n\n继续查找?\n\t1).是 2).否,返回 [ ]\b\b");scanf("%d",&w1);if(w1==2) menu();}}while(k==-1&&w1==1);w4=0;w3=0;if(k!=-1){printf("\n\n接下来干什么?\n\t1).查找另一个 2).修改 3).返回菜单[ ]\b\b");scanf("%d",&w2);switch(w2){case 1:search1();break;case 2:w3=modify_data(k,n);break;case 3:{menu();break;}}}}while(w2==1);menu();}search2() //按学历查询模块{int i,n,k,w1=1,w2,w3,w4;struct worker s;n=load();do{do{k=-1;printf("\n\n请输入你要查询的学历:\n");scanf("%s",);printf_face();for(i=0;i<n;i++)if(strcmp(,worker[i].edu)==0){k=i;printf_one(k);}if(k==-1){printf("\n\nNo exit!please");printf("\n\n继续查找?\n\t1).是 2).否,返回 [ ]\b\b");scanf("%d",&w1);if(w1==2) menu();}}while(k==-1&&w1==1);w4=0;w3=0;if(k!=-1){printf("\n\n接下来干什么?\n\t1).查找另一个 2).修改 3).返回菜单[ ]\b\b");scanf("%d",&w2);switch(w2){case 1:search2();break;case 2:w3=modify_data(k,n);break;case 3:{menu();break;}}}}while(w2==1);menu();}menu(){int n,w1;do{puts("\t\t*******************菜单*******************\n\n");puts("\t\t\t\t1.录入职工信息");puts("\t\t\t\t2.浏览职工信息");puts("\t\t\t\t3.查询职工信息");puts("\t\t\t\t4.修改职工信息");puts("\t\t\t\t5.退出");puts("\t\t****************************************\n\n");printf("请选择(1~5): [ ]\b\b");scanf("%d",&n);if(n<1||n>5) //对选择的数字作判断{w1=1;getchar();}else w1=0;} while(w1==1);switch(n){case 1:enter();break; //录入 case 2:browse();break; //浏览 case 3:search();break; //查询 case 4:modify();break; //修改 case 5:exit(0); //退出}}main(){menu();}7.程序运行结果下面是各个模块的的界面截图(1)、主菜单(2)、输入模块(3)、浏览模块(3)、查找模块(4)、修改模块8.编程中遇到的困难及解决方法温故而知新,可以为师矣。
数据结构课程设计简单的职工管理系统简单的职工管理系统设计1. 引言本文旨在设计一个简单的职工管理系统,用于匡助管理者进行职工信息的录入、查询、修改和删除等操作。
该系统基于数据结构的相关知识,通过合理的数据结构设计和算法实现,实现对职工信息的高效管理。
2. 功能需求2.1 职工信息录入系统提供一个录入界面,管理者可以输入职工的基本信息,包括职工编号、姓名、性别、年龄、职位等。
系统应该能够对输入的信息进行合法性验证,并将信息存储到合适的数据结构中。
2.2 职工信息查询系统提供一个查询界面,管理者可以根据职工的编号、姓名、职位等条件进行查询。
系统应该能够根据查询条件从数据结构中快速定位到符合条件的职工信息,并将结果展示给管理者。
2.3 职工信息修改系统提供一个修改界面,管理者可以根据职工的编号或者姓名等条件选择一个职工信息进行修改。
系统应该能够根据选择的职工信息,提供可修改的字段,并对输入的修改信息进行合法性验证,并更新数据结构中对应的职工信息。
2.4 职工信息删除系统提供一个删除界面,管理者可以根据职工的编号或者姓名等条件选择一个职工信息进行删除。
系统应该能够根据选择的职工信息,从数据结构中删除对应的职工信息,并给出相应的提示。
3. 数据结构设计为了高效地管理职工信息,我们可以采用链表作为基本的数据结构。
每一个节点表示一个职工信息,包括职工编号、姓名、性别、年龄、职位等字段。
节点之间通过指针进行连接,形成一个链表结构。
3.1 链表节点设计每一个链表节点包含以下字段:- 职工编号(int)- 姓名(string)- 性别(string)- 年龄(int)- 职位(string)- 指向下一个节点的指针(Node*)3.2 链表操作设计- 初始化链表:创建一个空链表,并初始化头节点指针为NULL。
- 添加节点:根据输入的职工信息创建一个新节点,并将其插入到链表的合适位置。
- 删除节点:根据职工的编号或者姓名等条件,找到对应的节点,并将其从链表中删除。
简单的职工管理系统#include<stdio.h>#include<stdlib.h>#include<ctype.h>#include<string.h>typedef struct //,,,,?,,?,,,,壬(,,,,,,,,,,,,,,?,,,,,,,,?,,?,?,,,?,,,, {char name[20];//,,,,char sex[4]; //,,,int birthday; //,,,,,,,,int year; //,,,,,,,,char degree[8]; // ,,///,,,?,,?,?,,,,,char position[30]; //?,,///,,,?,,,?,?,,,,,,,?,,char address[30]; // ,,?///?,,,?,,,ô,,,,,?,,,,,,char phone[15]; //,,///}employee;employee emp[80]; ///,,,,,,,,,,,,,"struct"?int menu_select() //,,,,,,,{char c;do{printf("?,,,,,,,\n"); //,,,,,??printf(" | 1. Input Records \n");printf(" | 2. Display All Records |\n");printf(" | 3. Sort |\n");printf(" | 4. Insert a Record |\n");printf(" | 5. Delete a Record |\n");printf(" | 6. Query |\n");printf(" | 7. Change |\n");printf(" | 0. Quit |\n");printf("Give your Choice(0-7):");c=getchar(); //,,,,,, ?}while(c<'0'||c>'7');return(c-'0'); //,,,,,,?}int Input(employee emp[],int n) //,,,,,,,,,,?{int i=0;char sign;do{printf("employee's name:\n"); //,,,,,,,,scanf("%s",&emp[i].name);///û"employee",,,,?,,"emp",,,,,,,?,,,,,,,,,,,, printf("employee's sex:\n");scanf("%s",&emp[i].sex); ///printf("employee's birthday:\n");scanf("%d",&emp[i]. birthday);///printf("employee's year:\n");scanf("%d",&emp[i].year); ///printf("employee's degree:\n");scanf("%s",&emp[i].degree);///printf("employee's position:\n");scanf("%s",&emp[i].position);///printf("employee's address:\n");scanf("%s",&emp[i].address);///printf("employee's phone:\n");scanf("%s",&emp[i].phone);///printf("any more records?(Y/N)\n");getchar();sign=getchar();//,,,,,ж,///,,?,,,,,У,,,,,,,,,,,,,,4,, i++;} while(sign!='n'&&sign!='N'); //,ж,return n+i;}Display(employee emp[],int n)//,,,,,,м,?{int i;printf(",,,,,?\n");for(i=0;i<n;i++)//,,,,,,///,,,,,,,,,,,,,,?,,,,{printf("num:\t\t%d\n",i+1);printf("name:\t\t%s\n",emp[i].name);printf("sex:\t\t%s\n",emp[i].sex);printf("birthday:\t%d\n",emp[i].birthday);printf("year:\t\t%d\n",emp[i].year);printf("degree:\t\t%s\n",emp[i].degree);printf("position:\t%s\n",emp[i].position);printf("phone:\t\t%s\n",emp[i].phone);}}void Sort_by_name(employee emp[],int n) /*,,,,,,,,*/ ? {int i,j;employee t;///,м,,,?,,,,?,,,,,,,??for(i=0;i<n-1;i++) /*ð,,,,,,,*/for(j=0;j<n-1-i;j++)if(strcmp(emp[j].name,emp[j+1].name)>0){strcpy(,emp[j+1].name); //,,,,,,,,strcpy(emp[j+1].name,emp[j].name);strcpy(emp[j].name,);strcpy(t.sex,emp[j+1].sex); //,,,,,,,strcpy(emp[j+1].sex,emp[j].sex);strcpy(emp[j].sex,t.sex);t.birthday=emp[j+1]. birthday;//,,,,,,,,,,,emp[j+1].birthday=emp[j].birthday;emp[j].birthday=t.birthday;t.year=emp[j+1].year; //,,,,,,,,emp[j+1].year=emp[j].year;emp[j].year=t.year;strcpy(t.degree,emp[j+1].degree); //,,?strcpy(emp[j+1].degree,emp[j].degree);strcpy(emp[j].degree,t.degree);strcpy(t.position,emp[j+1].position); //?,,strcpy(emp[j+1].position,emp[j].position);strcpy(emp[j].position,t.position);strcpy(t.address,emp[j+1].address); //??strcpy(emp[j+1].address,emp[j].address);strcpy(emp[j].address,t.address);strcpy(t.phone,emp[j+1].phone); // ,,strcpy(emp[j+1].phone,emp[j].phone);strcpy(emp[j].phone,t.phone);}}int Insert_a_record(employee emp[],int n) /*,,,,?,,,?*/ {printf("employee's name:\n");scanf("%s",&emp[n].name); ///i,?,n,,,,,,?,,printf("employee's sex:\n");scanf("%s",&emp[n].sex); ///printf("employee's birthday:\n");scanf("%d",&emp[n]. birthday);///printf("employee's year:\n");scanf("%d",&emp[n].year); ///printf("employee's degree:\n");scanf("%s",&emp[n].degree);///printf("employee's position:\n");scanf("%s",&emp[n].position);///printf("employee's address:\n");scanf("%s",&emp[n].address);///printf("employee's phone:\n");scanf("%s",&emp[n].phone);///n++;Sort_by_name(emp,n); /*,,,,,,,,,,*/printf(",,,,,,,?\n"); /*,,,??,,,,*/ ?return(n);}int Delete_a_record(employee emp[],int n) /*,,,,,,,,?,,,?,,,?*/ ?{ char s[20];int i=0,j;printf(",,,,,,,,,,:\n"); /*,,,,,,,*/ ?scanf("%s",s);while(strcmp(emp[i].name,s)!=0&&i<n) i++; /*,,,,,ж,*/if(i==n){printf("δ,,,,\n"); /*,,,,,,,,,*/ ??return(n);}for(j=i;j<n-1;j++) /*,,,,,*/ ?{///,,,,"stud",,,,"emp",,,,,,,,,?,,,,,,?,,,?,,,,,,,,,,,,,,?,,,,,,4,?, strcpy(emp[j].name,emp[j+1].name);strcpy(emp[j].sex,emp[j+1].sex);emp[j].birthday=emp[j+1].birthday;emp[j].year=emp[j+1].year;strcpy(emp[j].degree,emp[j+1].degree);strcpy(emp[j].position,emp[j+1].position);strcpy(emp[j].address,emp[j+1].address);strcpy(emp[j].phone,emp[j+1].phone);}printf(",,,,!\n"); /*,,,???,,,,*/ ?return(n-1);}void Query_a_record(employee emp[],int n) /*,,,?,,,,?,,,?*/{char s;int i=0;printf(",,,,,,, ,,,,:m ?,,:w \n"); /*,,,,,,,,,*/scanf("%s",s);while(strcmp(emp[i].sex,s)!=0&&i<n) i++; /*,,,,,ж,*/if(i==n){printf("δ,,,,,,?!\n"); /*,,,,,,,,,*/ ??return;}printf("%s\t\t%s\t\t%d\t\t%d\t\t%s\t\t%s\t\t%s\t\t%s\n",emp[i].name, \emp[i].sex,emp[i].birthday,emp[i].year,emp[i].degree,emp[i].position ,emp[i].address,emp[i].phone);}void Change_a_record(employee emp[],int n) //,,,,?,,,?,?,?{char s[20], c, m; ///,,,?,,"s",,?"c" ?int i=0;printf(",,,,,,,,,,:\n"); /*,,,,,,,*/ ?scanf("%s",s);while(strcmp(emp[i].name,s)!=0&&i<n) i++; /*,,,,,ж,*/if(i==n){printf("δ,,,,\n"); /*,,,,,,,,,*/ ??return(n);}printf(",,,,,,,?,?,,,, ,,d? ?,,p ??,,a ,,,,t\n");c=getchar();printf(",,,,,,,,?,,,,,:\n");scanf("%s",&m);switch(c){case 'd': strcpy(emp[i].degree,m); break;///,?,,,,,,,?,,,,,,,,,??? case 'p': strcpy(emp[i].position,m); break;case 'a': strcpy(emp[i].address,m); break;case 't': strcpy(emp[i].phone,m); break;default: printf(",,,,,,,!\n");}}void main() /*,,,,*/{int n=0;for(;;){switch(menu_select()) /*,,,ж,*/ ?{case 1:printf("Input Records\n"); /*,,,,,,,,,,?*/n=Input(emp,n);break;case 2:printf("Display All Records\n"); /*,,,,,,м,?*/ Display(emp,n);break;case 3:printf("Sort\n");Sort_by_name(emp,n); /*,,,,,,,,,,*/printf("Sort Suceessed!\n");break;case 4:printf("Insert a Record\n");n=Insert_a_record(emp,n); /*,,,,?,,,?*/break;case 5:printf("Delete a Record\n");n=Delete_a_record(emp,n); /*,,,,,,,,?,,,?,,,?*/? break;case 6:printf("Query\n");Query_a_record(emp,n); /*,,,?,,,,?,,,?*/ break;case 7:printf("Change\n");Change_a_record(emp,n); /*,,,,,,,,,,,,,,,,*/break;case 0:printf("Have a Good Luck,Bye-bye!\n"); /*,,,,,,,*/ exit(0);}}}。