数据结构课程设计-职工管理系统
- 格式:doc
- 大小:175.50 KB
- 文档页数:25
辽宁工业大学课程设计说明书题目:数据结构课程设计学院(系):电子与信息工程学院专业班级:计算机科学与技术专业学号:学生姓名:指导教师:教师职称:副教授起止时间: 2009.12.01—2009.12.08课程设计(论文)任务及评语院(系):电子与信息工程教研室:软件工程目录第1章课程设计目的与要求 (1)1.1课程设计目的 (1)1.2课程设计的实验环境 (1)1.3课程设计的预备知识 (1)1.4课程设计要求 (1)第2章课程设计内容 (2)2.1第五类题目 (2)2.2题目的具体实现 (2)2.3题目内容 (2)2.4思考题解析 (16)总结 (18)参考文献 (19)第1章课程设计目的与要求1.1 课程设计目的本课程设计是计算机科学与技术专业、软件工程专业的专业技术实践课。
本实践课的主要目的是:使学生学会利用在课堂中学过的理论知识,解决相应的实际问题,深入理解和灵活掌握所学的内容,培养学生理论和实践相结合的能力,培养学生分析问题解决问题的能力。
同时,在实验步骤规范化、程序设计方法等方面受到比较系统和规范的训练。
通过实践设计使学生进一步加深对程序设计的规范化及对复杂程序设计步骤的理解。
1.2 课程设计的实验环境PC机,WindowsXP,Win-tc。
1.3 课程设计的预备知识C语言程序设计、高级程序设计应用、数据结构。
1.4 课程设计要求(1)认真查找资料,分析每个题目应选择的数据结构(逻辑结构和物理结构);(2)按时到实验室调试程序,遵守实验室的规章制度,爱护设备;(3)每个题目编写源程序时,每个子功能定义为相应的子函数,在主函数中调用各子函数,程序结构清晰,有必要的注释,可读性强。
(4)程序健壮性强,当数据输入错误时,要进行相应的处理;(5)分析算法的时间复杂度,要求算法的效率尽可能高;(6)对于排序算法,要验证排序算法的稳定性。
第2章课程设计内容2.1 第五类题目1、简单的职工管理系统a.问题描述对单位的职工进行管理,包括插入、删除、查找、排序等功能。
目录一、问题描述 1二、测试数据 1三、算法思想 1四、模块划分 1五、数据结构 2六、源程序 2七、测试情况 7八、设计体会 8参考文献 9一、问题描述(1)自定义一个类型表示员工各信息,定义一个顺序表存储员工信息,包括员工编号、姓名、性别、职务、出生年月、学历、电话、地址等。
(2)系统能够完成员工信息的输入、输出、查询、更新、插入、删除、排序等功能,并且数据能由文件导入和导出到文件。
(3)通过菜单选择进行哪一项操作,并输出每一项操作结果。
二、测试数据1 李一女 1989.10.2 本科职员 188******** 广西南宁2 苏三女 1986.3.18 本科职员 180******** 广西北海3 孙大云女 1987.12.1 本科秘书 180******** 广西柳州5 陈二男 1986.7.12 硕士经理 150******** 广西梧州三、算法思想线性表是最常用且最简单的一种线性结构,由数据元素组成,而数据元素又可以包含若干个数据项。
线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,通常用数组表示。
对顺序表的操作可借鉴数组的算法。
在本次课程设计中的员工管理信息系统,每个员工为一个数据元素,包括编号、姓名、性别、学历等数据项。
用一个数组来存储员工信息,对其进行的输入、删除、输出等操作可由一般数组的算法变换而得。
四、模块划分(1)自定义一个数据类型ElemType,表示员工信息,定义一个顺序表List,将员工信息存放于顺序表中,包括员工的编号、姓名、性别、职务、出生年月、学历、电话、地址等,并完成顺序表的初始化;(2)void ListInput(List &L,int n),函数作用是输入员工信息,需要一个循环完成每个员工信息的输入,最后要修改表长;(3)int LocateElem(List L,int num),函数作用是在顺序表里查找某编号员工的信息,从第一个员工开始找,通过编号的两两比较,若找到与要查找员工的编号一致的员工,则返回员工的位置,并在主函数中输出此与员工的信息;(4)void ListInsert(List &L,ElemType e)函数功能是新员工信息的插入,先判断表是否满或此员工的信息是否已存在,若是则不进行插入操作;否则,保持员工编号顺序不变,找到插入点的位置,把从插入点后一位的数据都往后移一个位置,把新信息插入,最后使表长增1;(5)void ListDelete(List &L,int bh)函数作用是员工信息的删除,若表空或所要删除的员工信息不存在,则不进行下一步操作;否则,把删除点后的数据都往前移覆盖其前一个元素,最后使表长减1;(6)void BubbleSort(List &L)函数功能是通过冒泡法试员工信息按编号从小到大排序,进行n-1趟,每趟使小编号的员工信息往上放在表的前端,把编号大的员工信息往下沉到表的末端;(7)ChangeM(List &L),更新员工信息,由菜单选择需要修改的信息项进行修改,并保存新的信息;(8)void newFile(List &L),生成一个新的txt文件,存放员工信息,存入计算机内存;(9)void readFile(List &L),把员工信息从文件中导出;(10)void main()主函数,通过菜单和各函数的调用实现各部分的操作。
攀枝花学院数据结构课程设计(论文)题目:职工基本信息管理学生姓名:学号: *********所在院(系):数学与计算机学院专业:计算机科学与技术班级: 2010级计本2班第二组指导教师:周朝职称:讲师2011 年 6 月7 日攀枝花学院本科学生课程设计任务书注:任务书由指导教师填写。
目录一、需求分析 (4)二、概要设计 (5)1、输入功能的实现 (5)2、系统处理功能的实现 (5)3、输出的实现 (5)4、系统功能结构 (5)5、模块函数构造 (6)三、详细设计 (6)1、抽象数据类型定义 (6)2、主函数设计 (7)3、查找算法设计 (8)4、排序算法设计 (8)四、调试分析 (11)五、用户使用说明 (11)六、测试结果 (12)七、附录 (16)1、参考文献 (16)2、实验程序 (16)一、需求分析职工管理系统是一个工作单位不可缺少的管理工具,它管理的数据对于公司的决策者和管理者来说都至关重要,所以职工管理系统应该能够为用户提供充足的信息和快捷的查询手段。
但一直以来各个公司基本上都是靠传统的人工方式来管理职工信息,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于信息的查找、更新和维护都带来了不少的困难。
当今社会,信息迅速膨胀,随着各个公司的规模增大,有关信息管理工作所涉及的数据量越来越大,职工信息量也大大增加,利用传统的手工查询、登记、修改等方法的处理速度远远跟不上公司的需求,有的公司不得不靠增加人力、物力来进行信息管理。
随着计算机技术的不断提高,计算机作为知识经济时代的产物,其强大的功能已为人们深刻认识,它已进入人类社会的各个行业和领域并发挥着越来越重要的作用,成为人们工作和生活中不可缺少的一部分。
而作为计算机应用的一部分,使用计算机对职工进行管理,具有手工管理所无法比拟的优点。
例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
数据结构课程设计简单的职工管理系统简单的职工管理系统设计1. 引言本文旨在设计一个简单的职工管理系统,用于匡助管理者进行职工信息的录入、查询、修改和删除等操作。
该系统基于数据结构的相关知识,通过合理的数据结构设计和算法实现,实现对职工信息的高效管理。
2. 功能需求2.1 职工信息录入系统提供一个录入界面,管理者可以输入职工的基本信息,包括职工编号、姓名、性别、年龄、职位等。
系统应该能够对输入的信息进行合法性验证,并将信息存储到合适的数据结构中。
2.2 职工信息查询系统提供一个查询界面,管理者可以根据职工的编号、姓名、职位等条件进行查询。
系统应该能够根据查询条件从数据结构中快速定位到符合条件的职工信息,并将结果展示给管理者。
2.3 职工信息修改系统提供一个修改界面,管理者可以根据职工的编号或者姓名等条件选择一个职工信息进行修改。
系统应该能够根据选择的职工信息,提供可修改的字段,并对输入的修改信息进行合法性验证,并更新数据结构中对应的职工信息。
2.4 职工信息删除系统提供一个删除界面,管理者可以根据职工的编号或者姓名等条件选择一个职工信息进行删除。
系统应该能够根据选择的职工信息,从数据结构中删除对应的职工信息,并给出相应的提示。
3. 数据结构设计为了高效地管理职工信息,我们可以采用链表作为基本的数据结构。
每一个节点表示一个职工信息,包括职工编号、姓名、性别、年龄、职位等字段。
节点之间通过指针进行连接,形成一个链表结构。
3.1 链表节点设计每一个链表节点包含以下字段:- 职工编号(int)- 姓名(string)- 性别(string)- 年龄(int)- 职位(string)- 指向下一个节点的指针(Node*)3.2 链表操作设计- 初始化链表:创建一个空链表,并初始化头节点指针为NULL。
- 添加节点:根据输入的职工信息创建一个新节点,并将其插入到链表的合适位置。
- 删除节点:根据职工的编号或者姓名等条件,找到对应的节点,并将其从链表中删除。
12信计2013-2014(一)数据结构课程设计设计题目员工信息管理系统设计时间2014.1.6~2014.1.10学生姓名葛考学生学号20120402127所在班级12精算指导教师刘风华徐州工程学院数学与物理科学学院题目员工信息管理系统一、需求分析员工信息管理系统设计,具体功能如下:1、系统以菜单方式工作,应为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并且在此过程中能够尽可能的兼容用户使用过程中的输入异常情况。
2、员工信息录入系统(员工信息用文件保存),注意员工按员工编号进行区分,即每个员工的员工编号都是唯一的,不允许出现两个员工或员工编号相同的情况。
3、可对员工信息进行查询,具体分为:按姓名查询、按员工号查询、按生日查询;4、可对员工信息进行删除;5、可对员工信息进行修改,但应注意员工号不能修改,修改应逐个进行,一个员工记录的更改不应影响其他的员工记录;6、可对全部的员工信息进行显示v(员工信息浏览),注意员工信息的显示规范;员工信息应包括姓名、员工编号、性别、年龄、生日、学历、职务、联系电话、住址。
二、概要设计2.1、抽象数据类型ADT List{数据对象:D={ai|ai∈ElemSet,i=1,2,······,n,n>=0}数据关系:R1={<ai-1,ai>|ai-1,ai∈D,i=1,2,······,n}基本操作:Init List(&L);操作结果:构造一个空的线性表L。
DestroyList(&L);初始条件:线性表L存在。
操作结果:销毁线性表L。
LocateElem(L,I,&e);初始条件:线性表L存在,1<i<Listlength(L)。
操作结果:用e返回线性表L中第i个数据元素的值。
数据结构课程设计报告一、课程设计目的:综合运用线性表、查找、排序的相关知识,解决一个实际应用问题。
通过本次实习,要求熟练掌握线性表的存储结构,能在对应的存储结构上进行各种操作,并能分析不同的查找和排序方法的性能。
二、设计基本信息:每个员工的信息包括:编号、姓名、性别、出生年月、学历、职务、电话、住址等三、课程设计需要实现的功能:(1)查询:按特定条件查找员工。
(2)更新:按编号对某个员工的某项信息进行修改。
(3)插入:加入新员工的信息。
(4)删除:按编号删除已离职的员工的信息。
(5)排序:按工资,对所有员工的信息进行排序。
四、功能实现代码:#include <string>#include <iostream>#include <fstream>#include <iomanip>#include <memory.h>#include <stdio.h>#include <conio.h>#include <stdlib.h>using namespace std;struct Employee{//声明职工的结构作为链表节点。
//-----数据域-----string m_Code;string m_Name;unsigned short int m_Year;string m_Gender;string m_Edu;string m_Post;unsigned int m_Tel;string m_Add;unsigned int m_Wage;//链表节点的指针域---struct Employee* Next;};typedef struct Employee Node;typedef Node* Link;//-------函数声明-------------Link Create(Link Head);void Release(Link Head);Link Add(Link Head);bool Search(Link Head);Link Search_Unique(Link Head);void Display_List(Link Head);void Display_Node(Link pNode);Link Modify(Link Head);Link Del(Link Head);void Save_ByFile(Link Head,fstream& ofile); Link Sort(Link Head);//-------函数实现--------------------------Link Create(Link Head){//创建一个带头节点的空链表。
数据结构课程设计题目名称:简单的职工管理系统计算机科学与技术学院一.需求分析1.问题描述对单位的职工进行管理,包括插入、删除、查找、排序等功能。
2.要求职工对象包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。
(1)新增一名职工:将新增职工对象按姓名以字典方式职工管理文件中。
(2)删除一名职工:从职工管理文件中删除一名职工对象。
(3)查询:从职工管理文件中查询符合某些条件的职工。
(4)修改:检索某个职工对象,对其某些属性进行修改。
(5)排序:按某种需要对职工对象文件进行排序。
3.实现提示职工对象数不必很多,便于一次读入内存,所有操作不经过内外存交换。
(1)由键盘输入职工对象,以文件方式保存。
程序执行时先将文件读入内存。
(2)对职工对象中的"姓名"按字典顺序进行排序。
(3)对排序后的职工对象进行增、删、查询、修改等操作。
二.概要设计1.设计一个职工的结构体typedef struct Worker{char* name;char* sex;char* Bothdate;char* Workdate;char* school;char* duty;char* address;char* phone;struct Worker *next;}worker;2.主体函数(1).输入函数void Scanfwork(worker** phead,worker** pend,int num);(2).输出函数void Printfwork(worker* phead);(3).查询职工函数void Findworker(worker* phead);(4).更新职工函数void Updata(worker* phead);(5).删除职工函数void Delwork(worker** phead,worker** pend);void Delete(worker** phead,worker** pend,char* name);(6).按字典排序函数worker* Sort(worker** phead,worker** pend,int num);(7).文件调用函数void save(worker* phead);(8).增加职工函数void Addworker(worker** phead,worker** pend,worker* p);worker* GetnodeIn();三.详细设计1.流程图2.代码详细分析(1).输入函数void Scanfwork(worker** phead,worker** pend,int num) {int i;srand((unsigned int)time(0));for(i=0;i<num;i++){Addworker(phead,pend,Getwork());}}(2).输出函数void Printfwork(worker* phead){while(phead){printf("%s %s %s %s %s %s %s %s\n",phead->name,phead->s ex,phead->Bothdate,phead->Workdate,phead->school,phead->duty,phea d->phone,phead->address);phead=phead->next;}printf("b返回主菜单");key=getchar();switch (key){case 'b':return;break;default:printf("按错了\n");}}(3).查询职工函数void Findworker(worker* phead){char* keyword = NULL;worker* w=NULL;worker* newhead=NULL;worker* newend=NULL;worker* pDel=NULL;worker* bj=phead;while(1){while(1){printf("请输入要查询的关键字:");keyword=getstring();printf("按a键确认你的输入,按其他键重新输入:");if(getkey()=='a'){break;}else{free(keyword);keyword=NULL;}}phead=bj;while(phead){if(strncmp(phead->name,keyword,strlen(keyword))==0||strncmp(phead->sex,keyword,strlen(keyword))==0|| strncmp(phead->Bothdate,keyword,strlen(keyword))==0||strncmp(phead->Workdate,keyword,strlen(keyword))==0||strncmp(phead->school,keyword,strlen(keyword))==0||strncmp(phead->duty,keyword,strlen(keyword))==0||strncmp(phead->address,keyword,strlen(keyword))==0||strncmp(phead->phone,keyword,strlen(keyword))==0){w=(worker*)malloc(sizeof(worker));w->name=phead->name;w->sex=phead->sex;w->Bothdate=phead->Bothdate;w->Workdate=phead->Workdate;w->duty=phead->duty;w->school=phead->school;w->address=phead->address;w->phone=phead->phone;w->next=NULL;Addworker(&newhead,&newend,w);}phead=phead->next;}if(newhead!=NULL){Printfwork(newhead);while(newhead){pDel=newhead;newhead=newhead->next;free(pDel);pDel=NULL;}newhead=NULL;newend=NULL;}if(key=='b'){return;}else{printf("没有找到\n");}}}(4).更新职工函数void Updata(worker* phead){worker* bj=phead;char* name1;while(1){printf("请输入要修改的名字");name1=getstring();phead=bj;while(phead){if(strncmp(phead->name,name1,strlen(name1))==0){printf("请输入新的电话号码");free(phead->phone);phead->phone=getstring();}phead=phead->next;}printf("y继续修改,其他键返回");if(getkey()!='y'){return;}}}(5).删除职工函数void Delwork(worker** phead,worker** pend){char* name1;while(1){printf("请输入删除的姓名:");name1=getstring();Delete(phead,pend,name1);printf("按y继续删除其他键返回主菜单\n");if(getkey()!='y'){return;}}}void Delete(worker** phead,worker** pend,char* name) {worker* bj= *phead;worker* pDel=NULL;if(strncmp((*phead)->name,name1,strlen(name1))==0) {pDel=*phead;*phead=(*phead)->next;free(pDel);pDel=NULL;return;}while(bj->next!=NULL){if(strncmp(bj->next->name,name1,strlen(name1))==0){pDel=bj->next;bj->next=bj->next->next;free(pDel);pDel=NULL;if(bj->next==NULL){*pend=bj;}return;}bj=bj->next;}}(6).按字典排序函数worker* Sort(worker** phead,worker** pend,int num){int i;int j;worker* bj=*phead;worker* sign=NULL;worker* sign1=NULL;char temp[20]={0};char temp1[20]={0};char temp2[20]={0};char temp3[20]={0};char temp4[20]={0};char temp5[20]={0};char temp6[15]={0};char temp7[12]={0};for(i=0;i<num;i++){bj=(*phead);sign=bj;for(j=i+1;j<num;j++){sign1=sign->next;if(strncmp(sign->name,sign1->name,strlen(sign1->name))>=0) {strcpy(temp,sign->name);strcpy(temp1,sign->sex);strcpy(temp2,sign->Bothdate);strcpy(temp3,sign->Workdate);strcpy(temp4,sign->school);strcpy(temp5,sign->duty);strcpy(temp6,sign->address);strcpy(temp7,sign->phone);strcpy(sign->name,sign1->name);strcpy(sign->sex,sign1->sex);strcpy(sign->Bothdate,sign1->Bothdate);strcpy(sign->Workdate,sign1->Workdate);strcpy(sign->school,sign1->school);strcpy(sign->duty,sign1->duty);strcpy(sign->address,sign1->address);strcpy(sign->phone,sign1->phone);strcpy(sign1->name,temp);strcpy(sign1->sex,temp1);strcpy(sign1->Bothdate,temp2);strcpy(sign1->Workdate,temp3);strcpy(sign1->school,temp4);strcpy(sign1->duty,temp5);strcpy(sign1->address,temp6);strcpy(sign1->phone,temp7);}sign=sign->next;}}return *phead;}(7).文件调用函数void save(worker* phead){FILE* pf;fopen_s(&pf,"F:\\worker.txt","w+");while(phead){fprintf(pf,"%s %s %s %s %s %s %s %s\n",phead->name,phea d->sex,phead->Bothdate,phead->Workdate,phead->school,phead->du ty,phead->phone,phead->address);phead=phead->next;}fclose(pf);}(9).增加职工函数void Addworker(worker** phead,worker** pend,worker* p){if(*phead==NULL){*phead=p;}else{(*pend)->next=p;}*pend=p;}worker* GetnodeIn(){worker* w=(worker*)malloc(sizeof(worker));printf("请输入名字\n");w->name=getstring();printf("请输入性别\n");w->sex=getstring();printf("请输入出生年月\n");w->Bothdate=getstring();printf("请输入工作年月\n");w->Workdate=getstring();printf("请输入学历\n");w->school=getstring();printf("请输入职务\n");w->duty=getstring();printf("请输入电话\n");w->phone=getstring();printf("请输入住址\n");w->address=getstring();w->next=NULL;return w;}四.调试分析1.在写职工程序的时候遇到了单链表排序问题,解决的方法我选择了询问网络以及身边的朋友2.当写删除的时候遇到了头删除的问题,解决方法我选择了查看书籍3.当调用文件保存的时候也遇到了问题,例如文件内容不能直接覆盖,数据不能全部输出等问题,解决的方法我选择了询问网络,查看视频等4.在写职工程序的时候,虽然遇到了很多问题,我通过自己的努力以及身边朋友的帮助,使我克服了问题,这次的课程设计提高我自己写代码能力,以及训练了我运用链表的增删改查方面的知识和文件的调用存取方面的知识。
一、前言----------------------------------------------------------------------2二、需求分析----------------------------------------------------------------3三、概要设计----------------------------------------------------------------4四、详细设计----------------------------------------------------------------5五、调试分析----------------------------------------------------------------6六、用户使用说明----------------------------------------------------------7七、测试结果----------------------------------------------------------------8八、总结---------------------------------------------------------------------11九、主要参考文献和附录------------------------------------------------12员工管理系统是一个工作单位不可缺少的管理工具,它管理的数据对于公司的决策者和管理者来说都至关重要,所以员工管理系统应该能够为用户提供充足的信息和快捷的查询手段。
但一直以来各个公司基本上都是靠传统的人工方式来管理员工信息,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于信息的查找、更新和维护都带来了不少的困难。
广东某某学院《数据结构课程设计》题目:企业员工管理系统学号:姓名:年级:学院:专业:指导教师:一、功能需求运用所学知识设计一个企业员工管理系统,对单位的员工进行管理,包括插入、删除、查找、排序等功能。
员工对象包括姓名、性别、年龄、职位、工龄等信息。
二、功能分析员工对象包括姓名、性别、年龄、职位、工龄等信息。
(1)新增一名员工:将新增员工对象按姓名以字典方式员工管理文件中,基本信息中的编号是按照添加顺序自动增加的。
(2)删除一名员工:从员工管理文件中删除一名员工对象,分为根据编号删除、根据姓名删除。
(3)查询:从员工管理文件中查询符合某些条件(编号、姓名)的员工。
(4)修改:根据编号检索出对象,既可以对整个对象修改,也可对某个属性修改。
(5)排序:按照年龄、工龄对所有的员工排序(降序),也可以回复排序以前的员工现实状态。
三、基本思想数据结构链表:可以不需要初始化容量并且可以任意增减元素链式存储:插入及删除元素时方便五、测试结果六、调试情况分析1.操作界面相对简洁,基本功能已实现七、心得体会1.这是一个特殊的学期,因为疫情在学习上的常态都被打乱了,在家度过了这个特殊的学期。
在这个学期虽然在家也没有停止学习的步伐,但是比起在学校的学习效率差了不少。
经过了一个学期的学习,我对于数据结构有了一定的了解,也对于c/c++有了进一步认识。
在线上的学习过程,我一开始对数据结构不太上心在一些基础知识的掌控上不是很到位,在做课程设计的任务当中比较常在一些基础知识的认识上犯错。
不过因为在线上学习,所以在不懂的时候还可以通过看课堂视频的回放,查补自己的一些缺漏。
2.因为长期在家学习,所以对于学习怠慢了不少。
我在上一个学期对于c/c++掌握得不够透彻,又因为这个学期的怠慢,在这次课程设计过程中被指针绕晕过不少回,在一些函数类型的定义上也出过不少的错误。
学习不进则退,在这次课程设计中我认识到了,多练习才可以更好的掌握这个课程的知识,它不是一个可以通过死记硬背就可以掌握好的。
/*Linklist.h*/#include"stdio.h"#include"stdlib.h"#include "string.h"#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2typedef struct LNode{char id[20];char name[10];char sex[10];char birth[10];char edu[10];char duty[10];char phone[20];char address[30];struct LNode *next;}LNode,*Linklist;//定义节点类型int CreatList(Linklist &L){Linklist p;p=(Linklist)malloc(sizeof(LNode));if(!p){return (0);}else{printf("请输入员工编号\n");scanf("%s",p->id);printf("请输入员工姓名\n");scanf("%s",p->name);printf("请输入员工性别\n");scanf("%s",p->sex);printf("请输入员工生日\n");scanf("%s",p->birth);printf("请输入员工学历\n");scanf("%s",p->edu);printf("请输入员工职务\n");scanf("%s",p->duty);printf("请输入员工电话\n");scanf("%s",p->phone);printf("请输入员工地址\n");scanf("%s",p->address);}p->next=L->next;L->next=p;}//头插法生成单链表int Initlist(Linklist &L){L=(Linklist)malloc(sizeof(LNode));if(!L)return (0);L->next=NULL;return OK;}//初始化单链表void Display(Linklist &L){Linklist p;for(p=L->next;p;p=p->next){printf("编号%s\n",p->id);printf("姓名%s\n",p->name);printf("性别%s\n",p->sex);printf("生日%s\n",p->birth);printf("学历%s\n",p->edu);printf("职务%s\n",p->duty);printf("电话%s\n",p->phone);printf("地址%s\n",p->address);printf("============================\n");}}//显示所有员工信息int SearchID(Linklist &L,char id[20]){LNode *p;p=L;while(p){if(strcmp(p->id,id)==0){printf("编号%s\n",p->id);printf("姓名%s\n",p->name);printf("性别%s\n",p->sex);printf("生日%s\n",p->birth);printf("学历%s\n",p->edu);printf("职务%s\n",p->duty);printf("电话%s\n",p->phone);printf("地址%s\n",p->address);}p=p->next;}return OK;}//ID查询int SearchName(Linklist &L,char name[10]) {LNode *p;p=L;while(p){if(strcmp(p->name,name)==0){printf("编号%s\n",p->id);printf("姓名%s\n",p->name);printf("性别%s\n",p->sex);printf("生日%s\n",p->birth);printf("学历%s\n",p->edu);printf("职务%s\n",p->duty);printf("电话%s\n",p->phone);printf("地址%s\n",p->address);}p=p->next;}return OK;}//姓名查询void SortID(Linklist &L ,char id[20]){Linklist La;Linklist p,q,m;La=(Linklist)malloc(sizeof(LNode));La->next =NULL;while(L->next){for(q=L->next ,p=L->next ;p->next ;p=p->next ){if((strcmp( p->next->id,q->id ))>0 ){m=p;q=p->next ;}}if(q==L->next){L->next =L->next->next ;}else{m->next =q->next ;}q->next =La->next ;La->next =q ;}L=La;Display(L);}//编号排序void SortName(Linklist &L ,char name[10]){Linklist La;Linklist p,q,m;La=(Linklist)malloc(sizeof(LNode));La->next =NULL;while(L->next){for(q=L->next ,p=L->next ;p->next ;p=p->next ){if((strcmp( p->next->name,q->name ))>0 ){m=p;q=p->next ;}}if(q==L->next){L->next =L->next->next ;}else{m->next =q->next ;}q->next =La->next ;La->next =q ;}L=La;Display(L);}//姓名排序void SortSex(Linklist &L ,char sex[10]){Linklist La;Linklist p,q,m;La=(Linklist)malloc(sizeof(LNode));La->next =NULL;while(L->next){for(q=L->next ,p=L->next ;p->next ;p=p->next ){if((strcmp( p->next->sex,q->sex))>0 ){m=p;q=p->next ;}}if(q==L->next){L->next =L->next->next ;}else{m->next =q->next ;}q->next =La->next ;La->next =q ;}L=La;Display(L);}//性别排序void SortBirth(Linklist &L ,char birth[10]){Linklist La;Linklist p,q,m;La=(Linklist)malloc(sizeof(LNode));La->next =NULL;while(L->next){for(q=L->next ,p=L->next ;p->next ;p=p->next ){if((strcmp( p->next->birth,q->birth ))>0 ){m=p;q=p->next ;}}if(q==L->next){L->next =L->next->next ;}else{m->next =q->next ;}q->next =La->next ;La->next =q ;}L=La;Display(L);}//出生年月排序void SortEdu(Linklist &L ,char edu[10]){Linklist La;Linklist p,q,m;La=(Linklist)malloc(sizeof(LNode));La->next =NULL;while(L->next){for(q=L->next ,p=L->next ;p->next ;p=p->next ){if((strcmp( p->next->edu,q->edu ))>0 ){m=p;q=p->next ;}}if(q==L->next){L->next =L->next->next ;}else{m->next =q->next ;}q->next =La->next ;La->next =q ;}L=La;Display(L);}//学历排序void SortDuty(Linklist &L ,char duty[10]){Linklist La;Linklist p,q,m;La=(Linklist)malloc(sizeof(LNode));La->next =NULL;while(L->next){for(q=L->next ,p=L->next ;p->next ;p=p->next ){if((strcmp( p->next->duty,q->duty ))>0 ){m=p;q=p->next ;}}if(q==L->next){L->next =L->next->next ;}else{m->next =q->next ;}q->next =La->next ;La->next =q ;}L=La;Display(L);}//职务排序void SortPhone(Linklist &L ,char phone[20]){Linklist La;Linklist p,q,m;La=(Linklist)malloc(sizeof(LNode));La->next =NULL;while(L->next){for(q=L->next ,p=L->next ;p->next ;p=p->next ){if((strcmp( p->next->phone,q->phone ))>0 ){m=p;q=p->next ;}}if(q==L->next){L->next =L->next->next ;}else{m->next =q->next ;}q->next =La->next ;La->next =q ;}L=La;Display(L);}//电话排序void SortAddress(Linklist &L ,char address[30]){Linklist La;Linklist p,q,m;La=(Linklist)malloc(sizeof(LNode));La->next =NULL;while(L->next){for(q=L->next ,p=L->next ;p->next ;p=p->next ){if((strcmp( p->next->address,q->address ))>0 ){m=p;q=p->next ;}}if(q==L->next){L->next =L->next->next ;}else{m->next =q->next ;}q->next =La->next ;La->next =q ;}L=La;Display(L);}//地址排序int Alter(Linklist &L,char id[20]){LNode *p;p=L;while(p){if(strcmp(p->id,id)==0){printf("请输入员工编号\n");scanf("%s",p->id);printf("请输入员工姓名\n");scanf("%s",p->name);printf("请输入员工性别\n");scanf("%s",p->sex);printf("请输入员工生日\n");scanf("%s",p->birth);printf("请输入员工学历\n");scanf("%s",p->edu);printf("请输入员工职务\n");scanf("%s",p->duty);printf("请输入员工电话\n");scanf("%s",p->phone);printf("请输入员工地址\n");scanf("%s",p->address);}p=p->next;}return OK;}//更改int Del(Linklist &L,char id[20]){LNode *p;LNode *r;p=L->next;r=L;while(!(strcmp(p->id,id)==0)&&p){r=p;p=p->next;}if(!p)printf("\n删除位置不合理\n");else{r->next=p->next;free(p);printf("删除成功\n");}return OK;}//按ID删除//主函数void main(){Linklist L;int a;char m;char name[10];char id[20];char sex[10];char birth[10];char edu[10];char duty[10];char phone[20];char address[30];Initlist(L);int y;int x=1;while(x){printf("****************************\n");printf("欢迎进入员工管理系统!\n");printf("****************************\n");printf("1-添加员工信息\n");printf("2-查询员工信息\n");printf("3-排序员工信息\n");printf("4-显示所有员工信息\n");printf("5-更改员工信息\n");printf("6-删除员工信息\n");printf("7-退出\n");printf("****************************\n");printf("请选择操作序号并按回车:");scanf("%d",&y);switch(y){case 1: CreatList(L);do{printf("是否继续输入?(y/n)");getchar();scanf("%c",&m);if(m=='y'){CreatList(L);}}while(m!='n');break;case 2: printf("请输入查询方式(1按编号查询,2按姓名查找)");scanf("%d",&a);if(a==1){printf("请输入查询员工编号\n");scanf("%s",&id);SearchID(L,id);}if(a==2){printf("请输入查询员工姓名\n");scanf("%s",&name);SearchName(L,name);}break;case 3: printf("请选择排序条件:1.编号2.姓名3.性别4.出生年月5.学历6.职务7.电话8.地址0.退出\n");scanf("%d",&a);if(a==1){printf("编号排序\n");SortID(L,id);}if(a==2){printf("姓名排序\n");SortName(L,name);}if(a==3){printf("性别排序\n");SortSex(L,sex);}if(a==4){printf("出生年月排序\n");SortBirth(L, birth);}if(a==5){printf("姓名排序\n");SortDuty(L,duty);}if(a==6){printf("姓名排序\n");SortEdu(L,edu);}if(a==7){printf("姓名排序\n");SortPhone(L,phone);}if(a==8){printf("姓名排序\n");SortAddress(L,address);}break;case 4: printf("所有员工信息如下所示\n");Display(L);break;case 5: printf("请输入更改员工编号");getchar();scanf("%s",&id);Alter(L,id);break;case 6: printf("请输入删除员工编号");getchar();scanf("%s",&id);Del(L,id);break;case 7: x=0;break;default:printf("请输入正确序号!\n");break;}}}。
课程设计报告(本科)课程:数据结构学号:姓名:班级:教师:时间:计算机科学与技术系创建文件,录入信息,并保存到文件中以修改生日为例,修改职工的某些属性附录:源程序代码# include <stdio.h># include <stdlib.h>#include <windows.h> //Sleep()函数的头文件功能:执行挂起一段时间#include<conio.h> //getch() 函数的头文件# include <string.h># include <iostream.h>typedef struct{char name[18];char sex[8]; //性别;男male,女femalechar birthday[11];char workday[11];char xueli[10];char zhiwu[10];char address[10];char tel[12];}xinxi;typedef struct XX{char name[18];char sex[8]; //性别;男male,女femalechar birthday[11];char workday[11];char xueli[10];char zhiwu[10];char address[10];char tel[12];struct XX *next;}node,*linklist;char fname[15]="work10.txt"; //不重新创建文件时,对文件work10.txt进行操作;若创建新文件则其值改变//--------------------------------------------------------------------------------------//辅助函数//--------------------------------------------------------------------------------------void menu(){cout<<"|------------------------------------------------------------------------------|"; // - 80个cout<<"| 欢迎使用职工管理系统|"; cout<<"|------------------------------------------------------------------------------|";cout<<"| 0、结束操作|"; cout<<"| 1、创建职工文件|"; cout<<"| 2、添加职工信息|"; cout<<"| 3、删除职工信息|"; cout<<"| 4、查找职工信息|"; cout<<"| 5、修改职工信息|"; cout<<"| 6、排序职工信息|"; cout<<"| 7、显示所有职工信息|"; cout<<"|------------------------------------------------------------------------------|";}void EXIT(){printf("\n\n\n\n\n\n");printf("|------------------------------------------------------------------------------|");printf("| 谢谢使用!|");printf("| |");printf("| 欢迎下次使用!|");printf("| |");printf("| 再见!|");printf("|------------------------------------------------------------------------------|");}void writef(xinxi worker0){FILE*fp;if((fp=fopen(fname,"a"))==NULL){printf("文件不存在!请先创建!\n");exit(0);}if(fwrite(&worker0,sizeof(xinxi),1,fp)!=1)printf("file write error!\n");fclose(fp);printf("信息保存成功!\n");}void print(linklist L){linklist q;q=L->next;while (q){printf("姓名%s\n",q->name);printf("性别%s\n",q->sex);printf("生日%s\n",q->birthday);printf("工日%s\n",q->workday);printf("学历%s\n",q->xueli);printf("职务%s\n",q->zhiwu);printf("地址%s\n",q->address);printf("电话%s\n",q->tel);cout<<endl;q=q->next;}}void readall(linklist &L,xinxi worker0){int i;L=new node;L->next=NULL;linklist u,p;p=L;FILE *fp;if((fp=fopen(fname,"r"))==NULL){printf("无法打开此文件!");exit(0);}while(!feof(fp)){if(fread(&worker0,sizeof(xinxi),1,fp)!=1){if(feof(fp)){fclose(fp);break;}elseprintf("read file error!\n");}u=new node;for(i=0;i<18;i++)u->name[i]=[i];for(i=0;i<8;i++)u->sex[i]=worker0.sex[i];for(i=0;i<11;i++)u->birthday[i]=worker0.birthday[i];for(i=0;i<11;i++)u->workday[i]=worker0.workday[i];for(i=0;i<10;i++)u->xueli[i]=worker0.xueli[i];for(i=0;i<10;i++)u->zhiwu[i]=worker0.zhiwu[i];for(i=0;i<10;i++)u->address[i]=worker0.address[i];for(i=0;i<11;i++)u->tel[i]=worker0.tel[i];u->tel[i]=NULL;p->next=u;p=u;}fclose(fp);p->next=NULL;}//-------------------------------------------------------------------------------------- //功能函数//-------------------------------------------------------------------------------------- void create(){void insert();FILE*fp;int num,i;printf("请输入文件名:");scanf("%s",fname);strcat(fname,".txt"); //串连接函数,把第二个字符串添加到第一个字符串后面if((fp=fopen(fname,"w"))==NULL){printf("打开文件出错!\n");exit(0);}fclose(fp);cout<<"文件创建成功!"<<endl;cout<<"下面开始输入职工信息!"<<endl<<"任意键继续..."<<endl;getch();system("cls");cout<<"你想输入多少个职工信息?请输入:";cin>>num;for(i=0;i<num;i++)insert();}void insert(){xinxi worker;int i;for(i=0;i<18;i++)[i]=' ';for(i=0;i<8;i++)worker.sex[i]=' ';for(i=0;i<11;i++)worker.birthday[i]=' ';for(i=0;i<11;i++)worker.workday[i]=' ';for(i=0;i<10;i++)worker.xueli[i]=' ';for(i=0;i<10;i++)worker.zhiwu[i]=' ';for(i=0;i<10;i++)worker.address[i]=' ';for(i=0;i<12;i++)worker.tel[i]=' ';cout<<"请按以下顺序输入职工信息!"<<endl;cout<<"姓名性别生日工日学历职务地址电话"<<endl;scanf("%s%s%s%s%s%s%s%s",&,&worker.sex,&worker.birthday,&worker.wo rkday,&worker.xueli,&worker.zhiwu,&worker.address,&worker.tel);writef(worker);}void del(linklist &L){linklist p,r;jp_c:char name[10],c;int x=0;p=L->next;r=L;system("cls");system("color f0");printf("请输入删除职工的名字:");scanf("%s",name);while(p) //名字不匹配且未找到链尾{if(strcmp(p->name,name)==0){r->next=p->next;free(p);x++;printf("删除成功!\n");printf("是否继续删除(Y/N)?\n");cin>>c;if(c=='Y'||c=='y')goto jp_c;else{printf("是否输出删除后的职工信息(Y/N)?\n");cin>>c;if(c=='Y'||c=='y'){cout<<"*****************************"<<endl;print(L);cout<<"*****************************"<<endl;cout<<"输出完成!"<<endl<<"任意键继续..."<<endl;getch();return;}elsereturn;}}r=p;p=p->next;}if(x==0)printf("未找到该职工的信息!\n");}void search_name(linklist L){int i;node *p;p=L->next;char name[10];int n=0;printf("请输入要查找职工的姓名:");scanf("%s",name);printf("正在进行查找,请稍候...\n");int k=3;for(i=0;i<350000000*k;i++) //延时3秒{}while(p){if(strcmp(p->name,name)==0){printf("该职工的信息如下:\n");printf("********************************\n");printf("姓名%s\n",p->name);printf("性别%s\n",p->sex);printf("生日%s\n",p->birthday);printf("工日%s\n",p->workday);printf("学历%s\n",p->xueli);printf("职务%s\n",p->zhiwu);printf("地址%s\n",p->address);printf("电话%s\n",p->tel);printf("********************************\n");cout<<endl;n++;}p=p->next;}if(n==0)printf("未找到该职工的信息!\n");}void search_tel(linklist L){int i;node *p;p=L->next;char tel[12];int n=0;printf("请输入要查找职工的电话:");scanf("%s",tel);printf("正在进行查找,请稍候...\n");int k=3;for(i=0;i<350000000*k;i++) //延时3秒{}while(p){if(strcmp(p->tel,tel)==0){printf("该职工的信息如下:\n");printf("********************************\n");printf("姓名%s\n",p->name);printf("性别%s\n",p->sex);printf("生日%s\n",p->birthday);printf("工日%s\n",p->workday);printf("学历%s\n",p->xueli);printf("职务%s\n",p->zhiwu);printf("地址%s\n",p->address);printf("电话%s\n",p->tel);printf("********************************\n");cout<<endl;n++;}p=p->next;}if(n==0)printf("未找到该职工的信息!\n");}void search_and(linklist L){int i;node *p;p=L->next;char tel[12],name[10];int n=0;printf("请输入要查找职工的姓名和电话:");scanf("%s%s",name,tel);printf("正在进行查找,请稍候...\n");int k=3;for(i=0;i<350000000*k;i++) //延时3秒{}while(p){if((strcmp(p->name,name)==0)&&(strcmp(p->tel,tel)==0)){printf("该职工的信息如下:\n");printf("********************************\n");printf("姓名%s\n",p->name);printf("性别%s\n",p->sex);printf("生日%s\n",p->birthday);printf("工日%s\n",p->workday);printf("学历%s\n",p->xueli);printf("职务%s\n",p->zhiwu);printf("地址%s\n",p->address);printf("电话%s\n",p->tel);printf("********************************\n");cout<<endl;n++;}p=p->next;}if(n==0)printf("未找到该职工的信息!\n");}void search(linklist &L){jp_c3:int choose;char ch;system("cls");system("color f0");printf("你想按什么进行查找?\n");printf("1、姓名2、电话3、综合查找\n");printf("请选择:");scanf("%d",&choose);switch(choose){case 1:search_name(L);break;case 2:search_tel(L);break;case 3:search_and(L);break;default: cout<<"输入错误!\n";}cout<<"继续按其他分类查找?Y/N:";cin>>ch;if(ch=='Y'||ch=='y')goto jp_c3;}void xiugai(linklist &L){linklist p,q;p=L->next;char name[10],ch;int i=0,choose;system("cls");system("color f0");printf("请输入要修改的职工的名字:");scanf("%s",name);while(p){if(strcmp(p->name,name)==0){printf("你想修改什么?\n");printf("--------------------------------------------------------------------------------");printf("1、姓名2、性别3、生日4、工日5、学历6、职务7、地址8、电话\n");printf("--------------------------------------------------------------------------------");jp_c4:printf("请选择:");scanf("%d",&choose);printf("\n********************************\n");for(int j=0;;j++){switch(choose){case 1:printf("请输入员工姓名:");scanf("%s",p->name);break;case 2:printf("请输入员工性别:");scanf("%s",p->sex);break;case 3:printf("请输入员工生日:");scanf("%s",p->birthday);break;case 4:printf("请输入员工工日:");scanf("%s",p->workday);break;case 5:printf("请输入员工学历:");scanf("%s",p->xueli);break;case 6:printf("请输入员工职务:");scanf("%s",p->zhiwu);break;case 7:printf("请输入员工地址:");scanf("%s",p->address);break;case 8:printf("请输入员工电话:");scanf("%s",p->tel);break;default: cout<<"输入错误!\n";}cout<<"继续修改?Y/N:";cin>>ch;if(ch=='Y'||ch=='y'){printf("********************************\n\n");goto jp_c4;}else{q=p;break;}}i++;}p=p->next;}if(i){system("cls");system("color f0");cout<<"修改成功!"<<endl<<"修改后该职工的信息为:"<<endl;printf("********************************\n");printf("姓名%s\n",q->name);printf("性别%s\n",q->sex);printf("生日%s\n",q->birthday);printf("工日%s\n",q->workday);printf("学历%s\n",q->xueli);printf("职务%s\n",q->zhiwu);printf("地址%s\n",q->address);printf("电话%s\n",q->tel);printf("********************************\n");cout<<endl;}elsecout<<"不存在职工信息,无法修改!"<<endl;}void rank_name(linklist &L){void Show_all(linklist L);linklist La;linklist p,q,m;La=(linklist)malloc(sizeof(node));La->next =NULL;while(L->next){for(q=L->next,p=L->next;p->next;p=p->next){if((strcmp( p->next->name,q->name ))>0 ){m=p;q=p->next ;}}if(q==L->next){L->next =L->next->next ;}else{m->next =q->next ;}q->next =La->next ;La->next =q ;}L=La;cout<<"按姓名排序后";Show_all(L);}void rank_birthday(linklist &L){void Show_all(linklist L);linklist La;linklist p,q,m;La=(linklist)malloc(sizeof(node));La->next =NULL;while(L->next){for(q=L->next,p=L->next;p->next;p=p->next){if((strcmp( p->next->birthday,q->birthday ))>0 ){m=p;q=p->next ;}}if(q==L->next){L->next =L->next->next ;}else{m->next =q->next ;}q->next =La->next ;La->next =q ;}L=La;cout<<"按生日排序后";Show_all(L);}void rank_workday(linklist &L){void Show_all(linklist L);linklist La;linklist p,q,m;La=(linklist)malloc(sizeof(node));La->next =NULL;while(L->next){for(q=L->next,p=L->next;p->next;p=p->next){if((strcmp( p->next->workday,q->workday ))>0 ){m=p;q=p->next ;}}if(q==L->next){L->next =L->next->next ;}else{m->next =q->next ;}q->next =La->next ;La->next =q ;}L=La;cout<<"按工日排序后";Show_all(L);}void rank(linklist &L){int i;jp_c2:int choose;char ch;system("cls");system("color f0");printf("你想按什么进行排序?\n");printf("1、姓名2、生日3、工日\n");printf("请选择:");scanf("%d",&choose);printf("正在进行排序,请稍候...\n");int k=3;for(i=0;i<350000000*k;i++) //延时3秒{}switch(choose){case 1:rank_name(L);break;case 2:rank_birthday(L);break;case 3:rank_workday(L);break;default: cout<<"输入错误!\n";}cout<<"继续按其他分类排序?Y/N:";cin>>ch;if(ch=='Y'||ch=='y')goto jp_c2;}void Show_all(linklist L){linklist p;p=L->next;system("cls");system("color f0");cout<<"所有职工信息:"<<endl;cout<<"--------------------------------------------------------------------------------";cout<<"姓名性别生日工日学历职务地址电话"<<endl;while(p){printf("%-9s",p->name);printf("%-7s",p->sex);printf("%-13s",p->birthday);printf("%-13s",p->workday);printf("%-8s",p->xueli);printf("%-10s",p->zhiwu);printf("%-9s",p->address);printf("%-11s",p->tel);p=p->next;}cout<<"--------------------------------------------------------------------------------"; }//--------------------------------------------------------------------------------------//主函数//--------------------------------------------------------------------------------------int main(){char ch;int m;linklist L;xinxi Worker;system("title 职工管理系统");system("color f0");menu();readall(L,Worker);for(int i=0;;i++){cout<<"请选择:";cin>>m;if(m==0)break;switch (m){case 1: create();readall(L,Worker);break;case 2: insert();readall(L,Worker);break;case 3: del(L); break;case 4: search(L); break;case 5: xiugai(L); break;case 6: rank(L); break;case 7: Show_all(L); break;default: cout<<"输入错误!\n";}cout<<"continue? Y/N:";cin>>ch;if(ch=='Y'||ch=='y'){system("cls");menu();continue;}elsebreak;}system("cls");system("color 3f");EXIT();printf("\n任意键退出程序!\n");getch();return 0;}。
职工管理系统课程设计报告c语言一、引言职工管理系统是一个针对公司或组织内部职工信息管理的软件系统,主要用于记录职工的基本信息、工作情况、考勤记录等,方便管理人员进行数据统计和分析。
本文将介绍一个基于C语言的职工管理系统的设计与实现。
二、系统设计1. 系统功能职工管理系统主要包括以下功能模块:•添加新职工信息•修改职工信息•删除职工信息•查询职工信息•统计各部门职工人数•统计各职工职务人数2. 数据结构为了有效地存储和管理职工信息,系统采用了以下数据结构:•职工信息结构体•部门信息结构体3. 主要算法系统主要采用以下算法实现各功能模块:•添加职工信息:通过链表添加新结点•修改职工信息:更新结点中的字段信息•删除职工信息:在链表中删除指定结点•查询职工信息:根据输入的关键词在链表中查找•统计职工人数:遍历链表统计人数•统计职务人数:遍历链表统计各职务人数三、系统实现系统采用C语言编写,通过文件读写实现数据的持久化存储。
程序运行时,首先读取保存在文件中的职工信息并加载到内存中,用户可以通过交互式界面选择相应功能进行操作。
操作完成后,系统会将数据写回文件,保证数据的持久性。
四、系统优化与改进为了提高系统的性能和用户体验,可以考虑以下改进方案:•引入数据库存储,提高数据读写效率•添加更多的查询条件,提供更灵活的查询功能•增加权限管理模块,限制不同用户的操作权限•完善异常处理机制,提高系统的稳定性和可靠性五、总结通过本次课程设计,我们深入学习了C语言的应用,掌握了职工管理系统的设计与实现方法。
未来可以基于此系统进行更多功能的扩展和优化,提高系统的实用性和适用性。
以上是本文对职工管理系统课程设计报告的详细介绍,希望能对读者有所帮助。
职工管理系统课程设计一、课程目标知识目标:1. 学生能理解职工管理系统的基本概念和功能,掌握其基本操作流程。
2. 学生能掌握职工管理系统中的数据录入、查询、更新和删除等基本操作。
3. 学生能了解数据库管理的基本原理,并将其应用于职工管理系统的实际操作中。
技能目标:1. 学生能运用所学知识,独立进行职工管理系统的基本操作,包括录入新员工信息、查询员工数据、更新员工资料和删除离职员工信息。
2. 学生能通过实际操作,培养问题解决能力和团队协作能力,提高在信息化办公环境下的工作效率。
3. 学生能运用数据库管理技能,对职工管理系统进行优化和拓展,满足不同场景下的管理需求。
情感态度价值观目标:1. 学生通过学习职工管理系统,培养对信息技术学科的兴趣和热情,提高信息素养。
2. 学生在学习过程中,培养良好的团队合作意识,尊重他人意见,积极沟通,共同解决问题。
3. 学生通过了解职工管理系统在企业管理中的重要性,认识到信息技术在现代社会中的广泛应用和价值,增强社会责任感。
课程性质分析:本课程为信息技术学科,结合职工管理系统,注重实践操作和实际应用。
课程设计注重培养学生的动手能力和解决实际问题的能力。
学生特点分析:学生为初中年级,具备一定的计算机操作基础,对新鲜事物充满好奇心,喜欢动手实践,但注意力容易分散,需要激发兴趣和引导。
教学要求:1. 教学内容与实际应用紧密结合,注重培养学生的学习兴趣和动手能力。
2. 教学过程中,教师应关注学生个体差异,给予个性化指导,提高学生的学习效果。
3. 教学评价以学生的实际操作能力为主要依据,关注学生在学习过程中的进步和成长。
二、教学内容本课程教学内容紧密结合职工管理系统,依据课程目标,制定以下教学大纲:1. 职工管理系统概述- 了解职工管理系统的基本概念、功能和作用- 学习职工管理系统的发展历程和应用领域2. 职工管理系统操作流程- 学习职工信息录入、查询、更新和删除等基本操作- 掌握职工管理系统中的权限管理和数据备份恢复功能3. 数据库管理原理- 学习数据库的基本概念、分类和结构- 掌握数据库设计原则和SQL语句编写方法4. 实践操作与案例分析- 结合实际案例,进行职工管理系统的操作实践- 分析职工管理系统在实际应用中的优缺点,探讨优化方案5. 信息技术与团队协作- 培养学生在职工管理系统操作中的团队协作能力- 学习如何在信息化办公环境中进行有效沟通与协作教学内容安排与进度:1. 第1-2周:职工管理系统概述、操作流程学习2. 第3-4周:数据库管理原理、SQL语句编写方法3. 第5-6周:实践操作与案例分析、信息技术与团队协作4. 第7-8周:课程总结、学生项目展示与评价教材章节及内容:1. 教材第1章:职工管理系统概述2. 教材第2章:职工管理系统操作流程3. 教材第3章:数据库管理原理4. 教材第4章:实践操作与案例分析5. 教材第5章:信息技术与团队协作三、教学方法本课程根据教学内容和课程目标,选择以下多样化的教学方法,以激发学生的学习兴趣和主动性:1. 讲授法:- 对于职工管理系统概述、数据库管理原理等理论性较强的内容,采用讲授法进行教学。
学号数据结构课程设计设计说明书员工管理系统起止日期:2011年12月12 日至2011 年12月16日学生姓名班级成绩指导教师(签字)电子与信息工程系2011年12 月16日天津城市建设学院课程设计任务书2010—2011学年第1学期电子与信息工程系软件工程专业班级课程设计名称: 数据结构课程设计设计题目: 员工管理系统完成期限:自2011 年12 月12 日至2011 年12 月16 日共 1 周设计依据、要求及主要内容(可另加附页):一、设计目的熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。
二、设计要求(1)重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;(2)按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭者与被抄袭者皆以零分计入本课程设计成绩。
凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩;(3)学生在接受设计任务后,首先要按设计任务书的要求编写设计进程表;(4)认真编写课程设计报告.三、设计内容员工管理系统1)问题描述每个员工的信息包括:编号、姓名、性别、出生年月、学历、职务、电话、住址等.系统能够完成员工信息的查询、更新、插入、删除、排序等功能.2)基本要求(1) 排序:按不同关键字,对所有员工的信息进行排序。
(2) 查询:按特定条件查找员工.(3)更新:按编号对某个员工的某项信息进行修改。
(4) 插入:加入新员工的信息。
(5)删除:按编号删除已离职的员工的信息。
四、参考文献1.王红梅.数据结构.清华大学出版社2.王红梅.数据结构学习辅导与实验指导.清华大学出版社3.严蔚敏,吴伟民.数据结构(C语言版).清华大学出版社一、需求分析我认为首先建立一个数组,数组中包含员工的基本信息,每个员工的信息包括:编号、姓名、性别、出生年月、学历、职务、电话、住址等。
然后再设计具体功能的程序,比如说查找员工的信息就要建立查找的代码,并且还要建立和主函数的关系,根据主菜单的提示可以选择自动的转向你所要查询的内容,然后还能够返回到主函数主界面,这样用户就可以完成下一步的操作,最终我设计的这个系统能够完成员工信息的查询、更新、插入、删除、排序等功能,在主界面可以实现这些功能,根据用户需求进行相应的操作。
一、前言----------------------------------------------------------------------2二、需求分析----------------------------------------------------------------3三、概要设计----------------------------------------------------------------4四、详细设计----------------------------------------------------------------5五、调试分析----------------------------------------------------------------6六、用户使用说明----------------------------------------------------------7七、测试结果----------------------------------------------------------------8八、总结---------------------------------------------------------------------11九、主要参考文献和附录------------------------------------------------12员工管理系统是一个工作单位不可缺少的管理工具,它管理的数据对于公司的决策者和管理者来说都至关重要,所以员工管理系统应该能够为用户提供充足的信息和快捷的查询手段。
但一直以来各个公司基本上都是靠传统的人工方式来管理员工信息,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于信息的查找、更新和维护都带来了不少的困难。
当今社会,信息迅速膨胀,随着各个公司的规模增大,有关信息管理工作所涉及的数据量越来越大,员工信息量也大大增加,利用传统的手工查询、登记、修改等方法的处理速度远远跟不上公司的需求,有的公司不得不靠增加人力、物力来进行信息管理。
随着计算机技术的不断提高,计算机作为知识经济时代的产物,其强大的功能已为人们深刻认识,它已进入人类社会的各个行业和领域并发挥着越来越重要的作用,成为人们工作和生活中不可缺少的一部分。
而作为计算机应用的一部分,使用计算机对员工进行管理,具有手工管理所无法比拟的优点。
例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高员工管理的效率,也是公司的科学化、正规化管理和与世界接轨的重要条件。
员工管理系统作为一种管理软件正在各公司中得到越来越广泛的应用,且已达到了良好效果。
需求分析员工信息管理系统是企业管理中的一个重要内容,随着时代的进步,企业也逐渐变得庞大起来。
如何管理好企业内部员工的信息,成为企业管理中的一个大问题。
在这种情况下,开发一个人力资源管理系统就显得非常必要现在,市场上可以选购的应用开发产品很多,流行的也有数十种。
在目前市场上这些众多的程序开发工具中,有些强调程序语言的弹性与执行效率;有些则偏重于可视化程序开发工具所带来的便利性与效率的得高,各有各的优点和特色,也满足了不同用户的需求。
然而,语言的弹性和工具的便利性是密不可分的,只强调程序语言的弹性,却没有便利的工具作配合,会使一些即使非常简单的界面处理动作,也会严重地浪费程序设计师的宝贵时间;相反,如果只有便利的工具,却没有弹性的语言作支持,许多特殊化的处理动作必需要耗费数倍的工夫来处理,使得原来所标榜的效率提高的优点失去了作用。
本系统结合公司实际的人事、制度,经过实际的需求分析,采用功能强大的Visual C++ 6.0作为开发工具而开发出来的管理系统。
整个系统从符合操作简便、界面友好、灵活、实用、安全的要求出发,本管理系统具有如下功能:1、问题描述对单位的员工进行管理,包括插入、删除、查找、排序等功能。
2、要求员工对象包括姓名、性别、年龄、职位、工龄等信息。
(1)新增一名员工:将新增员工对象按姓名以字典方式员工管理文件中,基本信息中的编号是按照添加顺序自动增加的。
(2)删除一名员工:从员工管理文件中删除一名员工对象,分为根据编号删除、根据姓名删除。
(3)查询:从员工管理文件中查询符合某些条件(编号、姓名)的员工。
(4)修改:根据编号检索出对象,既可以对整个对象修改,也可对某个属性修改。
(5)排序:按照年龄、工龄对所有的员工排序(降序),也可以回复排序以前的员工现实状态。
3、实现提示员工对象数不必很多,便于一次读入内存,所有操作不经过内外存交换。
(1)当启动程序是,自动从文件(message.txt)中读出员工信息(2)由键盘输入员工对象存入链表当中。
(3)对员工对象中的"编号、年龄、工龄"按字典顺序进行排序。
(4)对排序后的员工对象进行增、删、查询、修改、排序等操作。
(5)当退出程序时,将此刻单链表中存储的数据写入到文件(message.txt)中去,保存起来。
概要设计(一)数据类型定义:typedef struct{int num; //编号char name[MAX_NUM];//姓名int age; //年龄char job[MAX_NUM];//职位;int workTime;// 工龄}People;ypedef struct node{People people;struct node * next;int len;//表示链表长度}linklist;(二)流程图:(图1)(三)各程序模块之间的层次图:(图2)详细设计1、主菜单模块:显示员工管理系统的主菜单,供用户选择所需的功能,通过自己定义的void main()函数来实现。
2、添加员工模块:输入员工的编号、姓名、年龄、职位、工龄以,通过自己定义的void addMessage()函数来实现。
3、查询员工信息模块:浏览所有员工的相关信息,通过自己定义的void searchPeople ()函数来实现。
(1)按员工姓名查询:可以按员工工号来查询员工的相关信息,通过自己定义的void searchPeopleByName( )函数来实现。
(2)按员工编号查询:可以按员工职务来查询员工的相关信息,通过自己定义的void searchPeopleByNum( )函数来实现。
(3)退出。
4、删除员工模块:删除需要删除的员工的所有信息,通过自己定义的void deletePeople( )函数来实现。
(1)按员工姓名删除模块:可以按员工工号来删除员工的相关信息,通过自己定义的void deletePeopleByName( )函数来实现。
(2)按员工编号删除模块:可以按员工编号删除员工的相关信息,通过自己定义void deletePeopleByNum( )函数来实现。
(3)退出5、修改模块:可以修改需要修改的员工的相关信息,通过自己定义的 void editMessage ()函数来实现。
(1)修改整条记录,可以修改该员工的全部信息,通过自己定义的void editAll()函数来实现。
(2)修改部分记录,可以修改该员工的部分信息,通过自己定义的void editSome()函数来实现。
(3)退出。
6、员工信息排序模块:可以按照规定要求对员工信息排序,通过自己定义的void sort()函数来实现。
(1)按年龄排序:可以按员工工号对员工信息排序,通过自己定义的void sortByAge ()函数来。
(2)按工龄排序:可以按员工工龄对员工信息排序,通过自己定义的void sortByWorkTime()函数来实现。
(3)回复原排序:可以回复排序前的顺序,通过自己定义的void sortByNum ()函数来实现。
(4)退出。
7、退出系统模块:退出员工信息管理系统,通exit(0)函数来实现。
函数调用图:(图3)调试分析测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验是否满足规定的需求或弄清预期结果与实际结果之间的差别。
在调试查询修改功能过程中,查询的结果显示,没有找到员工信息,最后发现查找的结点不正确,查询应该与输入的值和头结点next比较。
此外查询结点不知道如何循环,反复修改程序才知道如何继续查找而不出错误。
本次课程设计是围绕数据结构进行。
根据问题描述可知,需要解决问题并不复杂,整个问题只需要实现一个员工管理系统功能,那就是在这个系统中实现对员工信息的插入、删除、查询、排序、修改。
但是,为了实现该功能,却需要优秀的算法和数据结构以保证实现的时间和空间效率。
把员工信息存储在一个单链表中,利用指针实现对员工信息的各项基本操作。
虽然设计的程序完成了题目描述所需要实现的功能,但是仍然存在不如人意的地方。
可以排序上面多设计几个算法,实现多角度排序。
在这个系统中没有员工序号的信息,所以允许员工姓名相同,在一定程度上可能存在员工信息重复。
经过这次数据结构课程设计,我们不仅及时巩固的了数据结构、算法、以及软件工程的知识,并明白数据结构和算法对于程序时间和空间性能的影响,及软件工程提供的开发流程和工具对于实现特定功能程序的重要意义。
当我们面对一个实际问题,应该迅速根据问题性质和特点抽象成特定的数据结构,当然每个问题都有可能能够抽象成多种数据结构,每种数据结构适应于不同的算法。
因此应该综合考虑这样的数据结构、算法以及它们的空间和时间效率,然后从中选择一个作为实现程序的基础。
用户使用说明进入员工管理系统,首先看到的就是主菜单界面,然后提示:“请选择主菜单(0---6):”如果选择1,进入添加员工模块,按照提示语依次录入员工对象信息。
选择2,进入展示员工所有的信息模块,DOS界面显示刚才录入的员工信息。
选择3,进入员工查询模块,在此模块下:系统提示:按姓名查询、按编号查询,系统根据用户选择进行相应的处理,退出查询模块时,系统进入主菜单模块。
选择4,进入删除员工模块,在此模块下:系统提示:按编号删除、按姓名删除,系统根据用户选择,进行相应的处理,退出删除模块时,系统进入主菜单模块。
选择5,进入修改员工信息模块,在该模块下:系统提示:修改整条信息,修改部分信息,系统根据用户选择,进行相应的功能处理。
当用户选择退出修改模块时,系统进入主菜单模块。
选择6,进入排序模块,在该模块下:系统提示:按年龄排序、按工龄排序、回复原排序,系统根据用户的选择,进行相应的处理。
选择0,退出系统。
测试结果(一)当操作人员运行程序时,弹出的DOS界面如下:(二)根据提示语,输入1,添加员工信息,操作如下界面:(三)在主菜单输入2,进入输出员工功能,操作如下:添加员工、展示所有员工信息功能实现。