0508190124帅环宇工资管理Word下载.docx
- 文档编号:19835224
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:25
- 大小:22.92KB
0508190124帅环宇工资管理Word下载.docx
《0508190124帅环宇工资管理Word下载.docx》由会员分享,可在线阅读,更多相关《0508190124帅环宇工资管理Word下载.docx(25页珍藏版)》请在冰豆网上搜索。
//显示工资
voidModifyData();
//修改数据函数
};
第二个为结点类,该类涉及结点的输入、输出、复制等。
在结点中,涉及较多的是具体数据的形式,所以将具体数据形式定义成数据类型的指针,所有针对数据的操作都转换为对指针的操作,在数据类中再具体实现。
classCNode//定义结点类
CSalary*pData;
/*用于指向数据类的指针,这是每个数据的不同部分*/
CNode*pNext;
//指向链表的指针
CNode();
//结点的构造函数
CNode(CNode&
node);
//用于拷贝的构造函数
voidInputData(CSalary*pdata);
//输入数据
voidShowNode();
//显示数据
CSalary*GetData();
//返回数据
friendclassCList;
//定义链表类为友元类
第三个类为链表类,将结点视为类中的数据成员,也即将结点石视为一个整体。
该类涉及结点的插入、输出、删除等操作。
因此在这个链表类中所定义的方法(函数)基本上是通用的。
classCList//定义链表类
protected:
CNode*pHead;
//链表头结点指针
CList();
//构造函数
~CList();
//析构函数
voidAddNode(CNode*pnode);
//在首部添加结点
voidDeleteNode(CNode*);
//删除一个指定的结点,返回该结点的指针
CNode*LookUp(CSalary&
/*查找一个指定的数据,返回该数据所在结点的指针,若未找到返回0*/
voidShowList();
//打印整个链表
voidDeleteList();
//删除整个链表
CNode*GetListHead();
//返回链表首结点
CNode*GetListNextNode(CNode*);
//返回链表指定结点的下一个结点
voidInsert(CNode*);
//按工资的顺序插入一个结点
CNode*GetLastNode();
//返回链表的最后一个结点
第四个类为函数类,将主函数所需的函数用类封装起来,实现程序的结构化。
该类的成员数据为链表类的一个成员,涉及添加、显示、查找、删除、修改等功能函数以及读取和保存文件。
classCFunction
CListlist;
voidOpenFile();
//读取文件函数
voidSaveFile();
//保存文件函数
voidAddRecord();
//增加数据函数
voidShowRecord();
//显示数据函数
voidLookUpRecord();
//查找数据函数
voidEditRecord();
//修改数据函数
voidDeleteRecord();
//删除数据函数
(2)显示、修改、删除数据时大小写通用。
为实现该功能,设计了一个大小写转换函数,将输入的姓名数据全部转换为小写存储。
在每次添加、修改、删除时,均在输入姓名后调用该函数,使程序不在区分大小写。
该函数如下:
char*change(char*oldname)//将输入字符状串转换成小写
inti;
for(i=0;
oldname[i]!
='
\0'
;
i++)
{oldname[i]=tolower(oldname[i]);
}/*tolower为C++库函数,可将字符串转换成小写*/
returnoldname;
}
(3)工资数据按工资值的大小进行排序存放。
实现该功能的函数为链表类的一个成员函数。
即在插入结点时就按照工资大小的顺序插入。
该函数为:
voidCList:
:
Insert(CNode*pnode)////按工资的顺序插入一个结点
CNode*p,*q;
if(pHead==0)
{
pHead=pnode;
pHead->
pNext=0;
return;
}
if(pHead->
pData->
GetSal()>
pnode->
GetSal())
pnode->
pNext=pHead;
p=pHead;
while(p&
&
p->
GetSal()<
q=p;
p=p->
pNext;
q->
pNext=pnode;
pnode->
pNext=p;
(4)修改、删除数据前增加提示信息,用户确认后才能进一步操作,否则操作取消。
该功能的实现较为简单,使用dowhile语句ifelse语句进行嵌套即可。
以修改函数中的提示信息为例,实现该功能的语句如下:
charchoice;
do
{
p->
ShowNode();
cout<
<
"
\t\t确认修改?
(Y/N)"
//提示功能,确认后再修改
cin>
>
choice;
if(choice=='
N'
||choice=='
n'
)break;
else
{
p->
GetData()->
ModifyData();
break;
}
}while(choice!
Y'
choice!
y'
edit!
}
(5)增加程序的文件输入输出功能,在执行程序中首先将工资数据从文件中读出再进行管理,在程序结束时能将工资数据保存在原文件中。
有关文件的操作涉及输入输出流,需使用C++的库函数,这些库函数所在的头文件为<
fstream.h>
。
在该程序中,使用一个文本文档data.txt来保存数据。
输入和输出分别用2个功能函数来实现。
这2个函数均包含在函数类中。
函数如下:
voidCFunction:
OpenFile()//读取文件
ifstreaminfile("
data.txt"
charname[20];
doublesalary;
while(infile>
name>
salary)
CSalary*psalary=newCSalary;
psalary->
SetSalary(name,salary);
CNode*pnode=newCNode;
InputData(psalary);
list.AddNode(pnode);
SaveFile()//保存文件
ofstreamoutfile("
CNode*p=list.GetListHead();
while(p)
strcpy(name,p->
GetName());
salary=p->
GetSal();
outfile<
name<
"
salary<
endl;
p=list.GetListNextNode(p);
cout<
\t\t存档成功!
\n"
(6)使程序更加人性化。
对原程序做了部分修改,使程序更加人性化。
添加欢迎和结束界面、修改主菜单样式、添加作者信息功能,等。
修改增加数据函数,使函数实现不断输入,直到使用者确认停止(输入0)停止。
这些修改使程序更加适合人性化使用。
三.关键函数变量说明:
//姓名
//工资
CFunctionPerson;
//定义使用的对象
charchoice;
/*主菜单中用来选择的变量。
使用字符型变量,避免出现死循环*/
四.课程设计心得:
该程序的编写遇到以下问题:
1)文件输入输出流。
由于这部分知识比较难,而考试内容又少,因此掌握得比较薄弱。
这个细小的环节使我在程序中无法前进,因此,只能通过自己看以前的课本和C++课程设计书中的案例来弥补。
后来终于通过自己努力将该功能编写好。
2)大小写处理。
在开始编写的时候,我的想法只是设计一个函数,将大写转换成小写。
而在实际过程中,发现大小写不确定,而且可能出现大小写混合输入的可能,极易造成死循环的出现。
后来通过对书中案例的研究,才记起一个可以将大写转换成小写的函数。
3)按顺序存放数据。
这个功能也是我开始考虑的问题,但我的想法是插入数据后在独立编写一个排序函数,但在实际过程中发现,这种做法是极其繁琐的。
后来在书中链表章节里发现可以直接按顺序插入结点才恍然大悟。
该程序存在的不足:
1)该程序在添加新记录的时候不检测是否姓名已存在,如输入的姓名已经存在在文档中,将会同时有两个记录存在,容易造成混乱。
2)在按顺序插入数据以后,则成员数据的顺序已固定不能更改。
如在此时修改人员工资,修改后的工资不再适合原来的顺序,也不能再进行更改。
这时候如果打印数据,将出现工资数据已不再按照大小排序了。
在该程序设计中,我遇到了许多困难。
但是通过这个程序的编写,我对类的封装,和链表的操作有了更深的理解。
我明白了仅仅懂得书本上的知识和考试能通过是不行的。
要想真正学会编写程序,就必须通过实际的案例,一步一步地编写整个程序,在这个过程中,才能真正学会程序语言的真谛。
五.原程序代码:
/*VC++课程设计_工资管理程序
姓名:
帅环宇
学号0508190124*/
#include<
iostream.h>
string.h>
stdlib.h>
/*************************************************************************/
//转换大小写函数,将字符串全部换成小写存储
}/*tolower为C++库函数,可将字符串转换成小写*/
/*******************************************************************/
//数据类
//返回姓名
//成员函数
CSalary:
CSalary()//构造函数
strcpy(szName,"
dlSalary=0.0;
CSalary(char*name,doublesalary)//构造函数
strcpy(szName,name);
dlSalary=salary;
voidCSalary:
SetSalary(char*name,doublesalary)//置工资与姓名
char*CSalary:
GetName()//返回姓名
returnszName;
doubleCSalary:
GetSal()//返回工资
returndlSalary;
intCSalary:
Compare(CSalary&
salary)//比较姓名
if(strcmp(szName,salary.szName)==0)return1;
elsereturn0;
Show()//显示数据
\n\t\t人员姓名:
szName<
工资:
dlSalary<
ModifyData()//修改数据函数
doubletemp;
\t\t输入修改后的工资数据:
cin>
temp;
if(temp>
0)
cout<
\t\t修改成功!
dlSalary=temp;
else
\t\t修改失败!
/***************************************************************************/
//结点类
//用于指向数据类的指针,这是每个数据的不同部分
//成员函数
CNode:
CNode()
pData=0;
pNext=0;
CNode(CNode&
node)
pData=node.pData;
pNext=node.pNext;
voidCNode:
InputData(CSalary*pdata)
pData=pdata;
ShowNode()
pData->
Show();
CSalary*CNode:
GetData()
returnpData;
/***********************************************************************/
//链表类
classCList//定义链表类
//链表头结点指针
//构造函数
//析构函数
//在首部添加结点
//删除一个指定的结点,返回该结点的指针
/*查找一个指定的数据,返回该数据所在结点的指针,若未找到返回0*/
//打印整个链表
//删除整个链表
//返回链表首结点
//返回链表指定结点的下一个结点
//按工资的顺序插入一个结点
//返回链表的最后一个结点
CList:
CList()//构造函数
pHead=0;
~CList()//析构函数
DeleteList();
AddNode(CNode*pnode)//在首部添加结点
GetLastNode()->
DeleteNode(CNode*pnode)//删除一个指定的结点,返回该结点的指针
if(pnode==pHead&
pHead->
pNext==0)
deletepHead->
pData;
deletepHead;
pHead=0;
elseif(pnode==pHead)
CNode*p=pnode->
pHead=p;
CNode*p=pHead;
while(p&
pNext!
=pnode)
p=p->
CNode*q=pnode->
deletepnode->
deletepnode;
p->
pNext=q;
CNode*CList:
LookUp(CSalary&
salary)/*查找一个指定的数据,返回该数据所在结点的指针,若未找到返回0*/
if(pHead==0)return0;
CNode*pn=pHead;
while(pn)
if(pn->
Compare(salary)==0)returnpn;
pn=pn->
return0;
ShowList()//打印整个链表
if(!
pHead)
\t\t当前没有纪录!
CNode*p=pHead;
p->
DeleteList()//删除整个链表
if(pHead==0)return;
deletep->
deleteq;
GetListHead()//返回链表首结点
returnpHead;
GetListNextNode(CNode*pnode)//返回链表指定结点的下一个结点
returnpnode->
Insert(CNode*pnode)//按工资的顺序插入一个结点
GetLastNode()//返回链表的最后一个结点
return0;
while(p-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 0508190124 环宇 工资管理