职工管理系统源代码课程设计报告书Word文档下载推荐.docx
《职工管理系统源代码课程设计报告书Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《职工管理系统源代码课程设计报告书Word文档下载推荐.docx(27页珍藏版)》请在冰豆网上搜索。
unsignedintm_Wage;
structEmployee*Next;
};
2、函数定义
LinkCreate(LinkHead);
//创建一个带头节点的空链表
voidRelease(LinkHead);
//修改单个节点
LinkAdd(LinkHead);
//添加职工信息
boolSearch(LinkHead);
//查询同时满足“姓名”和“部门”的职工信息
LinkSearch_Unique(LinkHead);
//查询满足“职工代码“的职工信息
voidDisplay_List(LinkHead);
//显示职工信息函数
voidDisplay_Node(LinkpNode);
//在标准输出设备上输出。
LinkModify(LinkHead);
//修改职工信息函数
LinkDel(LinkHead);
//删除信息
voidSave_ByFile(LinkHead);
//保存函数
LinkSort(LinkHead);
//按工资排序
voidLoad_ByFile(LinkpNode);
LinkSort_byname(LinkHead);
//按姓名进行字典排序
3、数据结构与算法描述
三.核心算法
主要算法的设计思想:
本程序主要是使用链表来实现操作。
使用链表这样做的好处是,可以随时增加内容,也容易将职工信息从文件中删除。
使用结构数组作为职工信息的存储器,由它们和文件建立读写关系。
需要显示它们时,先将文件读入内存,然后再显示。
需要显示输出职工信息时,则直接从内存链表中筛选。
当然,需要显示原始信息时,也通过直接显示链表信息的方法实现。
这四种数据的显示问题均通过一个成员函数来完成。
用类的成员函数对链表的数据进行操作
1)新建函数LinkCreate(LinkHead);
//创建一个带头节点的空链表
2)修改函数LinkModify(LinkHead);
//修改单个节点
3)删除函数LinkDel(Link&
Head);
//
4)查询函数:
boolSearch(LinkHead)//查询同时满足“姓名”和“部门”的职工信息
LinkSearch_Unique_Front(LinkHead)//查询满足“职工代码“的职工信息(职工代码必需唯一)
5)保存函数voidSave_ByFile(LinkHead)//
6)排序函数(包括按工资排序和按姓名进行字典排序)
//LinkSort(LinkHead)
//LinkSort_byname(LinkHead)
7)显示函数voidDisplay_List(LinkHead)
四.课程设计内容及相关程序界面
本课程设计的主要内容是简单的设计了一个职工管理系统。
(1)首先定义本课程设计程序运行后首先显示程序启动程序进入画面,输入用户名和密码后方可进入该系统,其输出界面如下:
①新建函数LinkCreate(LinkHead)的测试:
②2保存函数voidSave_ByFile(LinkHead)的测试。
显示职工信息函数voidDisplay_List(LinkHead)的测试
查询函数boolSearch(LinkHead)的测试
排序函数的LinkSort(LinkHead)的测试
按姓名字典排序:
按工资高低排序:
修改函数LinkModify(LinkHead)的测试
修改后的职工信息显示:
删除函数LinkDel(Link&
Head)的测试
五.心得体会
通过一年对程序设计的学习,我已经能够进行简单的程序设计,这次课程设计对自己所学知识起到了检测和提高的作用。
课程设计中用到了类、结构、链表、文件的储存和读取等方式对职工信息进行较为全面的管理,对一年来程序设计的学习有一个综合性的检测和应用。
程序的设计中遇到不少问题,例如如何进行排序算法的边写,文件的读写功能等等,通过和同学的讨论与交流,解决了不少问题。
程序的调试过程中也有不少问题,例如标点、菜单的界面设计等。
课程设计完成后,感觉上最大的收获就是在设计之前要有一个清晰的思路和完整的设计提纲,对各功能函数的作用做详细考虑。
细心在这次课程设计中起到很关键的作用,一个标点、一个字母、一个符号都可能导致程序的不能运行,因此要有耐心认真完成。
当然知识是不可缺少的,只有对这学期所学得知识能够真正掌握并能加以运用,才能顺利完成这次的课程设计。
附:
程序源代码
//.h文件:
{//声明职工的结构作为链表节点。
//-----数据域-----
stringm_Code;
//
typedefstructEmployeeNode;
typedefNode*Link;
//-------函数声明-------------
//修改职工信息函数
LinkModify(LinkHead)
{//修改单一个节点。
stringco;
cout<
<
"
输入你要修改的职工编号:
;
cin>
>
co;
Linkptr;
Linkptr_front;
ptr_front=Head;
while(ptr_front)
{
ptr=ptr_front->
Next;
if(ptr==NULL)break;
elseif(ptr->
m_Code==co)
{break;
//找到,为ptr
}
ptr_front=ptr_front->
}
找到一条记录如下:
\n"
---------------------------------------------------------------\n"
职工编号职工姓名出生日期性别\t职称\t部门\t工资\n"
Display_Node(ptr);
请输入你要修改的内容:
╭------------------------------------╮"
endl;
∣1.职工编号2.职工姓名∣"
∣3.出生日期4.性别∣"
∣5.职工职称6.部门∣"
∣7.职工工资0.取消修改∣"
╰------------------------------------╯"
intchoice;
stringagain;
intflag=0;
do{
cout<
endl<
请选择:
cin>
choice;
switch(choice){
case1:
cout<
请输入职工编号:
cin>
ptr->
m_Code;
break;
case2:
请输入职工姓名:
m_Name;
case3:
请输入职工出生日期:
m_Year;
case4:
请输入职工性别(1.男/2.女):
//cin>
sex;
m_Sex;
case5:
请输入职工职称:
post;
m_Post;
case6:
请输入职工部门:
department;
m_Department;
case7:
请输入职工工资:
wage;
m_Wage;
case0:
returnHead;
default:
你的输入有误!
请重新输入:
是否继续(y/n)?
while
(1){
again;
if(again=="
N"
||again=="
n"
){flag=0;
break;
}
elseif(again=="
Y"
y"
){flag=1;
elsecout<
输入有误!
请重新选择:
}while(flag);
信息已成功修改,请注意保存!
\n\n"
returnHead;
//对职工信息进行排序(包括按工资排序和按姓名进行字典排序)
LinkSort_byname(LinkHead)
{//我创建的是带头节点的链表。
用直接插入法。
if((Head->
Next==NULL)||(Head->
Next->
Next==NULL))//此步条件判断非常有价值。
{
数据节点数少于2个,不用排序!
}
//-----------第二步;
Linkptr_F;
Linkptr_N;
ptr=Head->
ptr_F=Head;
Head->
Next=NULL;
//到此,分成了两个链表。
//第三步。
while(ptr)
ptr_N=ptr->
ptr_F=Head;
//ptr_F的归位。
while(ptr_F->
Next)
{
if(ptr->
m_Name<
ptr_F->
m_Name)
{
ptr->
Next=ptr_F->
ptr_F->
Next=ptr;
break;
}//if
else
ptr_F=ptr_F->
}
}//while(ptr_F->
if(ptr_F->
Next==NULL)
ptr->
ptr_F->
//表示插到有序链表的最后面了。
}
ptr=ptr_N;
//归位,准备下一次排序。
}//while(ptr)
\n按字典序排序如下:
Display_List(Head);
//新建链表存放职工信息
LinkCreate(LinkHead)
{//创建一个带头节点的空链表。
Head=(Link)newNode;
if(!
Head)
分配内存失败!
returnNULL;
voidRelease(LinkHead)
{//释放链表。
//声明一个操作用的指针。
while(Head!
=NULL)
ptr=Head;
Head=Head->
deleteptr;
//释放节点资源。
LinkAdd(LinkHead)
{//前插法添加数据。
LinkpNew;
//声明一个新节点。
intflag;
stringcode,name,sex,post,department,year;
//unsignedshortintyear;
unsignedintwage;
//stringwage;
do
pNew=(Link)newNode;
//数据
请输入职工代码:
code;
请输入职工姓名:
name;
请输入职工出生日期:
year;
while(cin.fail())
请输入正确的日期格式。
cin.clear();
fflush(stdin);
if(sex=="
1"
||sex=="
2"
)break;
请输入职工职称:
请输入职工部门:
请输入职工工资:
请输入正确的工资数据:
}
pNew->
m_Code=code;
m_Name=name;
m_Year=year;
m_Sex=sex;
m_Post=post;
m_Department=department;
m_Wage=wage;
//指针域。
Next=Head->
Head->
Next=pNew;
数据添加成功!
是否继续添加(Y/N)?
system("
cls"
);
数据添加成功,请注意保存!
}
//删除职工信息
LinkDel(LinkHead)
stringcode;
输入你要删除的职工代码:
while(ptr_front){
m_Code==code){
flag=1;
ptr_front->
Next=ptr->
deleteptr;
//删除此节点。
if(flag)cout<
\n该条记录已成功删除!
注意文件的保存!
elsecout<
没找到此职工的记录,无法删除!
//查询职工信息函数
boolSearch(LinkHead)
{//查询同时满足"
姓名"
和"
部门"
的职工信息。
stringdepartment;
stringname;
请输入部门:
请输入姓名:
----------------查询结果:
if((ptr->
m_Name==name)&
&
(ptr->
m_Department==department))
----------------------------------------------------------------"
职工代码职工姓名出生日期性别\t职称\t部门\t工资\n"
Display_Node(ptr);
//打印满足条件的节点。
returntrue;
ptr=ptr->
//查询下一节点。
无此职工的信息!
returnfalse;
LinkSearch_Unique_Front(LinkHead)
{//查询满足"
职工代码"
的职工信息(职工代码必需唯一)。
ptr=Head;
请输入职工代码:
-----------------------------"
-------------------------------------------------------------"
while(ptr->
if(ptr->
m_Code==code){
Display_Node(ptr->
Next);
returnptr;
//注意,是返回的查询到的节点的直接前趋节点。
ptr->
returnptr;
//显示职工信息函数
voidDisplay_List(LinkHead)
if(ptr!
=NULL){
\n所有职工信息如下:
"
----------------------------------------------"
职工代码