1、职工信息管理系统程序设计基础课程设计报告 设计题目 职工信息管理系统 专 业 计算机科学与技术 班 级 姓 名 学 号 完成日期 (空两行)1. 问题描述页码2. 系统设计页码3. 数据结构与算法描述页码4. 测试结果与分析页码5. 总 结页码6. 参考文献页码附录 程序源代码页码(要求:给出一级目录,宋体加粗,四号字,1.5倍行距。)(报告正文部分):课程设计题目(要求:正文部分一律用小四号字,宋体,1.5倍行距。一级标题靠左,四号加粗。二级、三级标题靠左,小四加粗。)1. 问题描述问题描述对单位的职工进行管理,包括插入、删除、查找、排序等功能。基本要求职工对象包括姓名、性别、出生年月、工作
2、年月、学历、职务、住址、电话等信息。1)新增一名职工:将新增职工对象按姓名以字典方式存到职工管理文件中。2)删除一名职工:从职工管理文件中删除一名职工对象。3)查询:从职工管理文件中查询符合某些条件的职工。4)修改:检索某个职工对象,对其某些属性进行修改。5)排序:按某种需要对职工对象文件进行排序。实现提示职工对象数不必很多,便于一次读入内存,所有操作不经过内外存交换。1)由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。2)对职工对象中的姓名按字典顺序进行排序。3)对排序后的职工对象进行增、删、查询、修改、排序等操作。选做内容将职工对象按散列法存储,并设计解决冲突的方法。在此基
3、础上实现增、删、查询、修改、排序等操作。2. 系统设计2.1 设计目标设计一个实用的简单职工信息管理系统,用链表来存储职工的基本信息和工资信息,完成对职工信息包括职工编号、职工姓名、出生日期、职工性别、职工职称、职工部门、职工工资等信息的新建、修改、删除、查找、排序、保存、显示等操作。2.2 设计思想设计一个菜单,通过菜单选择实现相应操作。对于输入的原始信息,使用链表存储它们。这样做的好处是,可以随时增加内容,也容易将职工信息从文件中删除。为职工设计一个类,单独设计完成这个文件读写的成员函数。使用结构数组作为职工信息的存储器,由它们和文件建立读写关系。需要显示它们时,先将文件读入内存,然后再显
4、示。需要显示输出职工信息时,则直接从内存链表中筛选。当然,需要显示原始信息时,也通过直接显示链表信息的方法实现。这四种数据的显示问题均通过一个成员函数来完成。用类的成员函数对链表的数据进行操作 1)新建函数 Link Create(Link Head);/ 创建一个带头节点的空链表 2)修改函数 Link Modify(Link Head);/修改单个节点 3)删除函数 Link Del(Link &Head);/ 4)查询函数 bool Search(Link Head)/ 查询同时满足“姓名”和“部门”的职工信息 Link Search_Unique_Front(Link Head)/ 查
5、询满足“职工代码“的职工信息(职工代码必需唯一)5)保存函数 void Save_ByFile(Link Head)/6)排序函数(包括按工资排序和按姓名进行字典排序)/Link Sort(Link Head)/Link Sort_byname(Link Head)7)显示函数 void Display_List(Link Head) 2.3 系统模块划分(要给出流程图)2.4 设计职工工资信息的数据结构表。表2-3 职工信息管理序号成员数数据类型可否为空1m_Codestring职工编号2m_Namestring职工姓名3m_Sexstring职工性别4m_Poststring职工职称5m_
6、Yearstring出生年月6m_Departmentstring职工部门7m_Wageunsigned int职工工资3. 数据结构与算法描述图3-1总体结构设计框图(图序、图名 图3-1 置于图的下方,宋体小四居中,单倍行距,图序与图名文字之间空一个汉字符宽度)4. 测试结果与分析(可将测试过程抓图说明)5.1新建函数 Link Create(Link Head)的测试。5.2保存函数 void Save_ByFile(Link Head)的测试。5.3显示函数 void Display_List(Link Head)的测试。5.4查询函数bool Search(Link Head)的测试
7、 5.5排序函数的Link Sort(Link Head)的测试 按姓名字典排序 按工资高低排序 5.6修改函数 Link Modify(Link Head)的测试 5.7删除函数 Link Del(Link &Head)的测试 5. 总 结通过一年对程序设计的学习,我已经能够进行简单的程序设计,这次课程设计对自己所学知识起到了检测和提高的作用。课程设计中用到了类、结构、链表、文件的储存和读取等方式对职工信息进行较为全面的管理,对一年来程序设计的学习有一个综合性的检测和应用。程序的设计中遇到不少问题,例如如何进行排序算法的边写,文件的读写功能等等,通过和同学的讨论与交流,解决了不少问题。程序的
8、调试过程中也有不少问题,例如标点、菜单的界面设计等。课程设计完成后,感觉上最大的收获就是在设计之前要有一个清晰的思路和完整的设计提纲,对各功能函数的作用做详细考虑。细心在这次课程设计中起到很关键的作用,一个标点、一个字母、一个符号都可能导致程序的不能运行,因此要有耐心认真完成。当然知识是不可缺少的,只有对这学期所学得知识能够真正掌握并能加以运用,才能顺利完成这次的课程设计。6. 参考文献 附录 程序源代码1、头文件structdef.h#include #include #include #include #include #include #include #include using na
9、mespace std; struct Employee /声明职工的结构作为链表节点。 /-数据域- string m_Code; /编号 string m_Name; /姓名 /unsigned short int m_Year; string m_Year; /出生年月 string m_Sex; /性别 string m_Post; / string m_Department; unsigned int m_Wage; /string m_Wage;/链表节点的指针域- struct Employee* Next; ;/*struct Employee /声明职工的结构作为链表节点。
10、/-数据域- char m_Code10; char m_Name10; unsigned short int m_Year; char m_Sex2; char m_Post12; char m_Department16; 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
11、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);Link Del(Link &); /void Save_ByFile(Link Head,fstream& ofile); void Save_ByFile(Link Head); Link Sort(Link Head); /void Load_ByFile(
12、Link &pNode,fstream & ifile);void Load_ByFile(Link &pNode);Link Sort_byname(Link Head); 2、修改和排序SortModify.cpp/修改职工信息函数Link Modify(Link Head) / 修改单一个节点。 string co; coutco; Link ptr; Link ptr_front; ptr_front=Head; while(ptr_front) ptr=ptr_front-Next; if(ptr=NULL) break; else if(ptr-m_Code=co) break;/
13、找到,为ptr ptr_front=ptr_front-Next; /string code,name,sex,post,department,year; /unsigned int wage; cout找到一条记录如下:n; cout-n; cout职工编号 职工姓名 出生日期 性别t职称t 部门t 工资n; Display_Node(ptr); cout-n; cout请输入你要修改的内容:n; cout -endl; cout 1.职工编号 2.职工姓名 endl; cout 3.出生日期 4.性 别 endl; cout 5.职工职称 6.部 门 endl; cout 7.职工工资 0
14、.取消修改 endl; cout -endl; int choice; string again; int flag=0; do coutendlchoice; switch(choice) case 1: coutcode; cinptr-m_Code; break; case 2: coutendlname; cinptr-m_Name; break; case 3: coutendlyear; cinptr-m_Year; break; case 4: coutsex; cinptr-m_Sex; break; case 5: coutpost; cinptr-m_Post; break
15、; case 6: coutdepartment; cinptr-m_Department; break; case 7: coutwage; cinptr-m_Wage; break; case 0: return Head; default: cout你的输入有误!请重新输入:; coutagain; if(again=N|again=n) flag=0;break; else if(again=Y|again=y) flag=1;break; else cout输入有误!请重新选择:; while(flag); coutNext=NULL)|(Head-Next-Next=NULL)/此
16、步条件判断非常有价值。 cout数据节点数少于2个,不用排序!Next-Next; ptr_F=Head; Head-Next-Next=NULL;/到此,分成了两个链表。 /第三步。 while(ptr) ptr_N=ptr-Next; ptr_F=Head;/ptr_F的归位。 while(ptr_F-Next) if(ptr-m_Wageptr_F-Next-m_Wage) ptr-Next=ptr_F-Next; ptr_F-Next=ptr; break; /if else ptr_F=ptr_F-Next; /while(ptr_F-Next) if(ptr_F-Next=NULL
17、) ptr-Next=ptr_F-Next; ptr_F-Next=ptr;/表示插到有序链表的最后面了。 ptr=ptr_N;/归位,准备下一次排序。 /while(ptr) coutn从高到低,排序成功!信息如下:Next=NULL)|(Head-Next-Next=NULL)/此步条件判断非常有价值。 cout数据节点数少于2个,不用排序!Next-Next; ptr_F=Head; Head-Next-Next=NULL;/到此,分成了两个链表。 /第三步。 while(ptr) ptr_N=ptr-Next; ptr_F=Head;/ptr_F的归位。 while(ptr_F-Nex
18、t) if(ptr-m_NameNext-m_Name) ptr-Next=ptr_F-Next; ptr_F-Next=ptr; break; /if else ptr_F=ptr_F-Next; /while(ptr_F-Next) if(ptr_F-Next=NULL) ptr-Next=ptr_F-Next; ptr_F-Next=ptr;/表示插到有序链表的最后面了。 ptr=ptr_N;/归位,准备下一次排序。 /while(ptr) coutn按字典序排序如下:endl; Display_List(Head); return Head; 3、新建和删除addelet.cpp/新建
19、链表存放职工信息Link Create(Link Head) /创建一个带头节点的空链表。 Head=(Link)new Node; if(!Head) cout分配内存失败!m_Code=; Head-m_Name=; Head-m_Year=; Head-m_Sex=; Head-m_Post=; Head-m_Department=; Head-m_Wage=; */ Head-Next=NULL; return Head; void Release(Link Head) /释放链表。 Link ptr;/声明一个操作用的指针。 while(Head!=NULL) ptr=Head; H
20、ead=Head-Next; delete ptr;/释放节点资源。 Link Add(Link Head) /前插法添加数据。 Link pNew;/ 声明一个新节点。 string again; int flag; string code,name,sex,post,department,year; /unsigned short int year; unsigned int wage; /string wage; do pNew=(Link)new Node; /数据 coutcode; coutendlname; coutendlyear; while(cin.fail() cout请
21、输入正确的日期格式。year; coutendlsex; if(sex=1|sex=2)break; else cout输入有误!请重新输入:; coutendlpost; coutendldepartment; coutendlwage; while(cin.fail() coutwage; coutm_Code=code; pNew-m_Name=name; pNew-m_Year=year; pNew-m_Sex=sex; pNew-m_Post=post; pNew-m_Department=department; pNew-m_Wage=wage; /*/* strcpy(pNew-
22、m_Code,code);/因ptr是前趋节点,所以要用ptr-Next; strcpy(pNew-m_Name,name); strcpy(pNew-m_Year,year); strcpy(pNew-m_Sex,sex); strcpy(pNew-m_Post,post); strcpy(pNew-m_Department,department); strcpy(pNew-m_Wage,wage); */ /* /指针域。 pNew-Next=Head-Next; Head-Next=pNew; cout数据添加成功!是否继续添加(Y/N)?again; if(again=N|again=n) flag=0;break; else if(again=Y|again=y) flag=1;break; else cout
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1