工资管理系统.docx

上传人:b****8 文档编号:9293527 上传时间:2023-02-04 格式:DOCX 页数:55 大小:430.78KB
下载 相关 举报
工资管理系统.docx_第1页
第1页 / 共55页
工资管理系统.docx_第2页
第2页 / 共55页
工资管理系统.docx_第3页
第3页 / 共55页
工资管理系统.docx_第4页
第4页 / 共55页
工资管理系统.docx_第5页
第5页 / 共55页
点击查看更多>>
下载资源
资源描述

工资管理系统.docx

《工资管理系统.docx》由会员分享,可在线阅读,更多相关《工资管理系统.docx(55页珍藏版)》请在冰豆网上搜索。

工资管理系统.docx

工资管理系统

课程设计任务书

学院

信息学院

专业

计算机科学与技术

学生姓名

学号

题目

工资管理系统

内容及要求:

内容:

(列出相应题目)

工资管理:

自己建立数据文件(提示可建立:

职工、工资级别、职工工资)完成:

①数据录入②查询(如:

职工的平均工资查询、某一级别人员的平均工资查询)③插入、删除、修改④排序(将职工姓名按工资额度进行)等功能。

要求:

1.设计数据结构,存储结构;

2.在Turboc或兼容环境完成上述题目的代码编写与调试;

3.程序运行界面交互性好;

4.给出两组测试数据。

任务交付:

1.程序源代码;2课程设计论文及电子文档。

进度安排:

本课程设计时间为16、17教学周。

其中包含设计、代码调试、课程设计论文撰写几个阶段。

第1周查找资料、完成初步设计、代码设计与初步调试;

第2周调试、测试、验收、课程设计论文撰写、答辩。

 

指导教师(签字):

 

年月日

学院院长(签字):

 

年月日

1、功能需求分析及初步设计

(1)在该部分中叙述整体功能及每个模块的功能要求。

(2)所设计文件

在C盘下定义“file.dat”文件,将职工信息写入其中。

2、概要设计

(1)程序中使用的存储结构设计说明

structEmployee//声明职工的结构作为链表节点。

{

intm_Code;//职工代码

charm_Name[20];//职工姓名

unsignedintm_Wage;//职工工资

intm_level;//工资级别

structEmployee*Next;//链表节点的指针域

};

(2)每个部分的算法设计说明。

 

1、整体算法流程图

2、Add(Head);函数算法流程图

 

 

3、Modify(Head)函数算法流程图;

 

4、Del(Head);函数的算法流程图

 

 

5、Search(Head)函数算法流程图;

 

 

6、Sort(Head);函数算法流程图

7、Display_List(Head);函数算法流程图

3、详细设计

(1)运行界面截图

主界面(菜单选项)

图3-1-1

职工注册界面(已经注册过两个,此界面为第三个职工注册)

图3-1-2

 

信息修改界面(修改代码为22222的职工信息)

图3-1-3

信息删除界面(删除代码为11111的职工信息)

图3-1-4

 

信息查询界面(查询姓名为ww的职工信息)

图3-1-5

排序界面(按工资从高到低排序)

图3-1-6

 

信息显示界面(显示所有职工信息)

图3-1-7

 

退出系统界面

图3-1-8

(2)相应算法实现的源程序(有注解说明)

1、职工注册

voidAdd(LinkHead)//前插法添加数据。

{

LinkpNew;//声明一个新节点。

charagain;

charname[20];

intcode,level;

unsignedintwage;

do

{

system("cls");

cout<<"\t*************************用户注册系统**************************\n"<

pNew=(Link)newNode;//数据域。

cout<<"请输入第"<

cout<<"请输入职工代码:

";

cin>>code;

Clear(code);

cout<

";

cin>>name;

cout<

";

cin>>wage;

sum+=wage;

n++;

while(cin.fail())

{

cout<<"请输入正确的工资数据。

"<

cin.clear();

fflush(stdin);

cin>>wage;

}

cout<

";

cin>>level;

Clear(level);

while(4<=level||level<=0)

{

cout<<"工资等级输入错误!

"<

cout<<"请重新输入工资级别:

";

cin>>level;

}

switch(level)

{

case1:

sum1+=wage;

n1+=1;break;

case2:

sum2+=wage;

n2+=1;break;

case3:

sum3+=wage;

n3+=1;break;

}

cout<

pNew->m_Code=code;

strcpy(pNew->m_Name,name);

pNew->m_Wage=wage;

pNew->m_level=level;//指针域。

pNew->Next=Head->Next;

Head->Next=pNew;

cout<<"数据添加成功!

是否继续添加?

(Y/N)"<

cin>>again;

}while(again=='Y'||again=='y');

system("pause");

system("cls");

}

2、信息修改

voidModify(LinkHead)//修改单一个节点。

{

system("cls");

cout<<"\t*************************信息修改系统**************************\n"<

Linkptr;

intcode;

charname[20];

ptr=Head->Next;

cout<

";

cin>>code;

Clear(code);

while(ptr)

{

if(ptr->m_Code==code)

{

cout<

cout<<"\t\t\t"<

<

<

<

cout<<"\t================================================================"<

Display_Node(ptr);//打印满足条件的节点。

cout<

sum-=ptr->m_Wage;

n-=1;

switch(ptr->m_level)

{

case1:

sum1-=ptr->m_Wage;

n1-=1;break;

case2:

sum2-=ptr->m_Wage;

n2-=1;break;

case3:

sum3-=ptr->m_Wage;

n3-=1;break;

}

intlevel;

unsignedintwage;

if(ptr)

{

cout<<"\t==============你现在可以修改此职工的信息了!

================"<

cout<<"请输入职工代码:

";

cin>>code;

cout<

";

cin>>name;

cout<

";

cin>>wage;

sum+=wage;

n++;

while(cin.fail())

{

cout<<"请输入正确的工资数据。

"<

cin.clear();

fflush(stdin);

cin>>wage;

}

cout<

";

cin>>level;

Clear(level);

while(4<=level||level<=0)

{

cout<<"工资等级输入错误!

"<

cout<<"请重新输入工资级别:

";

cin>>level;

}

switch(level)

{

case1:

sum1+=wage;

n1+=1;break;

case2:

sum2+=wage;

n2+=1;break;

case3:

sum3+=wage;

n3+=1;break;

}

cout<

ptr->m_Code=code;

strcpy(ptr->m_Name,name);

ptr->m_Wage=wage;

ptr->m_level=level;

cout<<"恭喜你,修改信息成功!

"<

system("pause");

system("cls");

}

}

ptr=ptr->Next;//查询下一节点。

if(ptr=NULL)

{

cout<<"没找到此职工的记录,无法修改。

"<

system("pause");

system("cls");

}

}

}

3、信息删除

LinkSearch_Unique_Front(LinkHead)//查询满足“职工代码“的职工信息(职工代码必需唯一)。

{

Linkptr;

intcode;

ptr=Head;

cout<<"请输入职工代码:

";

cin>>code;

Clear(code);

cout<

cout<<"\t\t\t"<

<

<

<

cout<<"\t=========================================================="<

while(ptr)

{

if(ptr->Next->m_Code==code)

{

Display_Node(ptr->Next);//打印满足条件的节点。

returnptr;//注意,是返回的查询到的节点的直接前趋节点。

}

ptr=ptr->Next;//查询下一节点。

}

returnptr;

}

voidDel(LinkHead)

{

system("cls");

cout<<"\t*************************信息删除系统**************************\n"<

Linkptr;

Linkptr_front;

ptr_front=Search_Unique_Front(Head);

if(ptr_front)

{

sum-=ptr_front->Next->m_Wage;

n-=1;

switch(ptr_front->Next->m_level)

{

case1:

sum1-=ptr_front->Next->m_Wage;

n1-=1;break;

case2:

sum2-=ptr_front->Next->m_Wage;

n2-=1;break;

case3:

sum3-=ptr_front->Next->m_Wage;

n3-=1;break;

}

ptr=ptr_front->Next;

ptr_front->Next=ptr_front->Next->Next;

deleteptr;//删除此节点。

cout<<"恭喜你,删除信息成功!

"<

}

else

cout<<"没找到此职工的记录,无法删除。

"<

system("pause");

system("cls");

}

4、信息查询

boolSearch(LinkHead)

{

system("cls");

cout<<"\t*************************用户查询系统**************************\n"<

cout<<"选择查询方式:

1、查询职工信息2、按职工的平均工资查询\n";

cout<<"3、按某一级别人员的平均工资查询"<

intlevel;

chari;

cin>>i;

if(i=='1')

{

Linkptr;

charname[20];

ptr=Head->Next;

cout<

";

cin>>name;

cout<

cout<<"\t\t\t"<

<

<

<

cout<<"\t================================================================"<

while(ptr)

{

if(strcmp(ptr->m_Name,name)==0)

{

Display_Node(ptr);//打印满足条件的节点。

cout<

system("pause");

system("cls");

returntrue;

}

ptr=ptr->Next;//查询下一节点。

}

cout<<"无此职工的信息。

"<

cout<

system("pause");

system("cls");

returnfalse;

}

elseif(i=='2')

{

doubleaver1;

aver1=sum/n;

cout<<"职工总数为:

"<

cout<<"所有职工的工资总数为:

"<

cout<<"所有职工的平均工资为:

"<

cout<

system("pause");

system("cls");

returntrue;

}

elseif(i=='3')

{

doubleaver2;

cout<<"请输入您要查找的级别:

";

cin>>level;

Clear(level);

cout<

switch(level)

{

case1:

aver2=sum1/n1;

cout<<"工资级别为"<

"<

cout<<"所有工资级别为"<

"<

break;

case2:

aver2=sum2/n2;

cout<<"工资级别为"<

"<

cout<<"所有工资级别为"<

"<

break;

case3:

aver2=sum3/n3;

cout<<"工资级别为"<

"<

cout<<"所有工资级别为"<

"<

break;

}

cout<<"\n工资级别为"<

"<

cout<

system("pause");

system("cls");

returntrue;

}

else

{

cout<<"选择错误,将返回主菜单!

";

}

cout<

system("pause");

system("cls");

returntrue;

}

5、工资排序

LinkSort(LinkHead)//创建带头节点的链表。

用直接插入法。

{

system("cls");

cout<<"\t*************************工资排行系统**************************\n"<

if((Head->Next==NULL)||(Head->Next->Next==NULL))//此步条件判断非常有价值。

{

cout<<"数据节点数少于2个,不用排序!

"<

returnHead;

}

//-----------第二步;

Linkptr;

Linkptr_F;

Linkptr_N;

ptr=Head->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_Wage>ptr_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)

{

ptr->Next=ptr_F->Next;

ptr_F->Next=ptr;//表示插到有序链表的最后面了。

}

ptr=ptr_N;//归位,准备下一次排序。

}//while(ptr)

cout<<"从高到低,排序成功!

"<

system("pause");

system("cls");

returnHead;

}

6、信息显示

voidDisplay_List(LinkHead)

{

system("cls");

cout<<"\t*************************信息显示系统**************************\n"<

Linkptr;

ptr=Head->Next;

cout<<"\t=========================所有职工信息=========================="<

cout<<"\t\t\t"<

<

<

<

cout<<"\t==============================================================="<

while(ptr)

{

Display_Node(ptr);

ptr=ptr->Next;

}

cout<<"\t==============================================================="<

system("pause");

system("cls");

}

4、测试数据及结果分析

(1)测试数据,测试输出的结果,时间复杂度分析

输入如下的测试数据:

图4-1-1

输出结果下图所示:

图4-1-2

时间复杂度为O(n),即此例为O

(2)。

(2)每个模块设计和调试时存在问题的思考

1、在删除模块,要删除某个节点,就要把此节点指向下一结点的地址赋给指向此节点的指针,可是如果,直接找到要删除的节点,就得不到指向他打指针。

所以我找到的是要删除的节点的前一个节点。

这样就解决了问题。

2、在文件操作模块,一开始文件只能保存,却读不出来。

后来发现,文件读取过程中需要分配一个结构体大小的存储空间,用以存放读出的数据。

然后,用了一个LinkpNode=newNode;解决了此问题。

(3)算法的改进设想。

1、职工代码应该各不相同,所以可以改进当输入职工代码重复时,提示输入错误,并要求重新输入。

2、职工代码有可能是0开头,如09030501,这里的代码定义为int

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1