VC++课程设计--工资管理.docx
- 文档编号:137679
- 上传时间:2022-10-04
- 格式:DOCX
- 页数:28
- 大小:21.31KB
VC++课程设计--工资管理.docx
《VC++课程设计--工资管理.docx》由会员分享,可在线阅读,更多相关《VC++课程设计--工资管理.docx(28页珍藏版)》请在冰豆网上搜索。
VC++课程设计
—5.1工资管理
院系:
自动化学院
班级:
09101902
姓名:
刘凯强
学号:
0910190231
一.实验内容:
工资管理
1.1程序功能介绍:
这是一个员工工资管理程序。
工资管理的数据文件中存储有员工姓名和工
资,该程序可以录入、显示、修改、删除、查找员工姓名和工资。
1.2程序设计要求:
(1)用类的形式改写程序,将程序中工资数据用链表的形式存放,定义一个
链表类,封装主要的操作函数。
(2)显示、修改、删除数据项时大小写通用。
(3)工资数据按工资值的大小进行排序存放。
(4)修改、删除数据前增加提示信息,用户确认后才能进一步操作,否则操作取消
(5)增加程序的文件输入输出功能,在执行程序中首先将工资数据从文件中读出再进行管理,在程序结束时能将工资数据保存在原文件中。
二.源程序结构流程框图与说明
N
N
N
N
N
Y
Y
结束
按姓名修改工资
按姓名删除工资
按姓名查询工资
查看工资记录
新增工资记录
Y
Y
密码是否正确
输入密码
开始
否
是
是否为E
是否为D
是否为F
是否为L
是否为N
Y
三.基本数据结构
类:
classCList //定义链表类
{
protected:
CNode*pHead; //链表头结点指针public:
CList(){pHead=0;} //赋值
~CList(){DeleteList();} //析构函数
voidAddNode(CNode*pnode); //在首部添加结点
CNode*DeleteNode(CNode*); //删除一个指定的结点,返回该结点的指
针
CNode*LookUp(CSalary&);//查找一个指定的数据,返回该数据所在结
点在链表中的指针,若没找到返回0
voidShowList(); //打印整个链表voidDeleteList(); //删除整个链表
CNode*GetListHead(){returnpHead;} //返回链表首结点
CNode*GetListNextNode(CNode*); //返回链表指定结点的下一个结点voidInsert(CNode*); //按工资的顺序插入一个结点
};
classCNode //定义结点类
{
private:
CSalary*pData; //用于指向数据类的指针,这是每个数据的不同部分CNode*pNext; //指向链表的指针
public:
CNode(){pData=0;pNext=0;} //结点类构造函数CNode(CNode&node) //用于拷贝的构造函数
{
pData=node.pData; //私有成员的互相赋值
pNext=node.pNext; //私有成员的互相赋值
}
voidInputData(CSalary*pSal){pData=pSal;} //输入数据
voidShowNode(){pData->Show();}
CSalary*GetData(){returnpData;} //返回工资地址friendclassCList; //定义链表类为友元类
};
classCSalary //定义数据类
{
private:
charszName[20]; //存放姓名doubledlSalary; //工资
public:
CSalary(){strcpy(szName,"\0");dlSalary=0.0;} //数据初始化CSalary(char*name,doublesalary) //构造函数重载
{
strcpy(szName,name);dlSalary=salary; //赋值
}
voidSetSalary(char*,double); //置工资与姓名
doubleGetSal(){returndlSalary;} //返回工资
intCompare(CSalary&); //比较姓名,供查找用,比较结果为1,0voidShow(); //显示工资
};
成员函数:
voidAddNode(CNode*pnode); //在首部添加结点
Node*DeleteNode(CNode*); //删除一个指定的结点,返回该结点的指针CNode*LookUp(CSalary&);//查找一个指定的数据,返回该数据所在结点在链表中的指针,若没找到返回0
voidShowList(); //打印整个链表voidDeleteList(); //删除整个链表
CNode*GetListHead(){returnpHead;} //返回链表首结点
CNode*GetListNextNode(CNode*); //返回链表指定结点的下一个结点voidInsert(CNode*); //按工资的顺序插入一个结点
voidAddSalary(CList&SalaryList)//将记录添加到链表中,链表是唯一的voidDeleteData(CList&list)//根据姓名找到要删除的结点,再进行删除结点操作
voidLookUpData(CList&list)//寻找所要找的姓名的结点
int OpenFile(CList&list)//打开文件并建立有序链表对文件中的数据进行排序,最后输出
voidmain(void)//主函数
voidOutfun(void)//输出主菜单
intSaveFile(CList&List)//输入结点,保存文件voidSetNewData(CList&list)//修改工资数据
voidShowSalary(CList&list)//输出链表中的数据,显示员工的工资数据
四.程序设计思想
数据管理类程序的数据用链表的形式存储,将链表定义成一个
类,将结点视为类中的数据成员,也即将结点视为一个整体,涉及结点的插入、输出、删除等操作。
将结点也定义成一个类,涉及结点数据的输入和输出、复制等。
在结点中,涉及较多的是具体数据的形式,所以将具体的数据形式定义成数据类型的指针,所有针对数据的操作都转换为对指针的操作,在数据类再具体实现。
结点的操作也像链表一样通用。
将数据具体形式定义成一个类,涉及数据的输入、输出、比较等。
那么,针对不同的数据管理,只要改动这部分就可以了。
这样,就实现程序的结构化。
四.关于程序的思考
1.输入密码的时候是不是可以把输入的字符都显示为“*”。
2.还要想想和其他函数间的关系,有的函数可以调用,那就很方便,少编一些代码,还会减少出错的几率。
3.整个过程中对类的封装性进行了充分了解,特别是在调试的时候,对象成员的调用、参数的传递、函数的衔接遇到了不少麻烦。
链表部分还是不太清楚。
4.要输入数字的地方输入字母会出现错误。
五.附源程序#include
#include
#include
{
cout<<"**************************************\n";
cout<<"*
欢迎使用工资管理程序
*\n";
cout<<"*
cout<<"*
请选择以下功能
*\n";
*\n";
cout<<"*
cout<<"*
a:
新增工资记录
*\n";
*\n";
cout<<"*
l:
查看工资记录
*\n";
cout<<"*
f:
按姓名查询工资
*\n";
cout<<"*
d:
按姓名删除工资
*\n";
cout<<"*
e:
按姓名修改工资
*\n";
cout<<"*
q:
退出系统
*\n";
cout<<"**************************************\n";cout<<" 0910190231 刘凯强\n";cout<<"\n";
cout<<"请输入功能代码:
";
}
//数据类:
classCSalary //定义数据类
{
private:
charszName[20]; //存放姓名doubledlSalary; //工资
public:
CSalary(){ strcpy(szName,"\0");dlSalary=0.0;} //数据初始化
CSalary(char*name,doublesalary) //构造函数重载
{
strcpy(szName,name);dlSalary=salary; //赋值
}
voidSetSalary(char*,double); //置工资与姓名doubleGetSal(){returndlSalary;} //返回工资
intCompare(CSalary&); //比较姓名,供查找用,比较结果为1,0
voidShow(); //显示工资
};
voidCSalary:
:
SetSalary(char*name,doublesalary=0.0)
{
strcpy(szName,name);
dlSalary=salary;
}
intCSalary:
:
Compare(CSalary&Salary)
{
CSalarysal1,sal2;strcpy(sal1.szName,szName);strcpy(sal2.szName,Salary.szName);
strlwr(sal1.szName);strlwr(sal2.szName);
if(strcmp(sal1.szName,sal2.szName)==0)
{
Salary.dlSalary=dlSalary;return1;
}
elsereturn0;
}
voidCSalary:
:
Show()
{
cout<<"姓名:
"< "< } //结点类 classCNode //定义结点类 { private: CSalary*pData; //用于指向数据类的指针,这是每个数据的不同部分 CNode*pNext; //指向链表的指针public: CNode(){pData=0;pNext=0;} //结点类构造函数 CNode(CNode&node) //用于拷贝的构造函数 { pData=node.pData; //私有成员的互相赋值pNext=node.pNext; //私有成员的互相赋值 } voidInputData(CSalary*pSal){pData=pSal;} //输入数据voidShowNode(){pData->Show();} CSalary*GetData(){returnpData;} //返回工资地址 friendclassCList; //定义链表类为友元类 }; //链表类 classCList //定义链表类 { protected:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 课程设计 工资管理