📄 工资管理.cpp
字号:
#include<iostream>
#include<string>
#include<iomanip>
#include<fstream>
using namespace std;
#include"List.h"
class CSalary:public CData
{
private:
char szName[20];
double dlPlaceSalary;
double dlBonus;
public:
CSalary(){ strcpy(szName,"\0");dlPlaceSalary=0.0;dlBonus=0.0;}
CSalary(char * ,double,double);
void SetSalary(char * ,double,double);
int Compare(CData &);
void Show();
};
CSalary::CSalary(char * szname,double dlplace,double dlbonus)
{ strcpy(szName,szname);
dlPlaceSalary=dlplace;
dlBonus=dlbonus;
}
void CSalary::SetSalary(char * szname,double dlplace,double dlbonus)
{ strcpy(szName,szname);
dlPlaceSalary=dlplace;
dlBonus=dlbonus;
}
int CSalary::Compare(CData &data) //比较姓名,供查找用,比较结果为1,0
{ CSalary &temp=(CSalary &)data;
return strcmp(szName,temp.szName);
}
void CSalary::Show() //打印一个结点的数据
{
cout<<setw(15)<<szName<<setw(12)<<dlPlaceSalary<<setw(8)<<dlBonus<<setw(12)<<(dlPlaceSalary+dlBonus)<<endl;
}
void AddRecord(CList &SalaryList) //将记录添加到链表中
{
CNode *pNode;
CSalary *pSal;
char szName[20];
double dlPlaceSalary,dlBonus;
cout<<"请输入姓名(输入0结束): ";
cin.getline(szName,20);
while(strcmp(szName,"0"))
{
cout<<"请输入职务工资: ";
cin>>dlPlaceSalary;
cout<<"请输入奖金: ";
cin>>dlBonus;
cin.ignore();
pSal=new CSalary; //生成新的数据类对象
pSal->SetSalary(szName,dlPlaceSalary,dlBonus); //数据类对象赋值
pNode=new CNode; //生成新的结点
pNode->InputData(pSal); //结点赋值
SalaryList.AddNode(pNode); //结点加入链表
cout<<"请输入姓名(输入0结束): ";
cin.getline(szName,20);
}
cout<<endl<<endl;
}
void DisplayRecord(CList &SalaryList) //显示全部链表数据
{
cout<<setw(15)<<"姓名"<<setw(12)<<"职务工资"<<setw(8)<<"奖金"<<setw(12)<<"工资总额"<<endl;
SalaryList.ShowList();
cout<<endl<<endl;
}
void LookUpRecord(CList &SalaryList) //按照姓名查找工资表的数据
{
CNode * pLook;
char szName[20];
cout<<"请输入您需要查找的姓名(输入0结束)";
cin.getline(szName,20);
while(strcmp(szName,"0"))
{
CSalary salary(szName,0,0); //生成结点
pLook=SalaryList.LookUp(salary); //查找指定结点的数据
if(pLook)
{
cout<<"在工资表中找到"<<szName<<",内容是:"<<endl;
pLook->ShowNode();
}
else
cout<<"在工资表中查找不到"<<szName<<"."<<endl;
cout<<"输入您需要查找的姓名(输入0结束)";
cin.getline(szName,20);
}
cout<<endl<<endl;
system("pause");
}
void DeleteRecord(CList &SalaryList) //在链表中删除指定结点的数据
{
CNode *pLook;
char szName[20];
cout<<"请输入您需要删除的姓名(输入0结束)";
cin.getline(szName,20);
while(strcmp(szName,"0"))
{
CSalary salary(szName,0,0);
pLook=SalaryList.LookUp(salary);
if(pLook) //删除时应先查找出结点
{
cout<<"在工资表中找到"<<szName<<",内容是:"<<endl;
pLook->ShowNode();
SalaryList.DeleteNode(pLook);
cout<<szName<<"的资料已删除."<<endl;
delete pLook;
}
else
cout<<"在工资表中找不到"<<szName<<"."<<endl;
cout<<"请输入您需要删除的姓名(输入0结束)";
cin.getline(szName,20);
}
cout<<endl<<endl;
}
void StoreFile(CList &SalaryList) //将链表中的数据保存在文件中
{
ofstream outfile("SALARY.DAT",ios::binary);
if(! outfile)
{
cout<<"数据文件打开错误,没有将数据存如文件!\n";
return;
}
CNode * pnode;
CSalary *pSal;
pnode=SalaryList.GetListHead(); //取出链表首结点指针
while(pnode)
{
pSal=(CSalary *)pnode->GetData(); //返回结点指向的数据域指针
outfile.write((char *)pSal,sizeof(CSalary)); //将数据域写入文件
pnode=SalaryList.GetListNextNode(pnode); //取下一结点的指针
}
outfile.close();
}
void Operate(string&strChoice,CList &SalaryList) //根据主菜单选项进行操作
{
if(strChoice=="1")
AddRecord(SalaryList);
else if(strChoice=="2")
DisplayRecord(SalaryList);
else if(strChoice=="3")
LookUpRecord(SalaryList);
else if(strChoice=="4")
DeleteRecord(SalaryList);
else if(strChoice=="0")
StoreFile(SalaryList);
else
cout<<"输入错误,请重新输入您的选择: "<<endl;
}
void LoadFile(CList &SalaryList) //在程序开始首先查找有无数据文件,找到后读取文件数据
{
ifstream infile("SALARY.DAT",ios::binary);
if(!infile)
{
cout<<"没有数据文件!\n\n";
return ;
}
CNode * pNode;
CSalary * pSal;
while(!infile.eof())
{
pSal=new CSalary; //定义数据域对象
infile.read((char * )pSal,sizeof(CSalary));
pNode=new CNode;
pNode->InputData(pSal); //数据域对象内容生成结点
SalaryList.AddNode(pNode); //将接点加入链表
}
SalaryList.DeleteNode(pNode); //由于文件的关系,多读了一次,所以将首接点删除
infile.close();
}
int main(void)
{ CList SalaryList; //定义链表的对象
system("cls");
cout<<"\t欢迎进入工资管理系统\n";
LoadFile(SalaryList); //从文件中输入数据
string strChoice; //接受主菜单选项
do
{
cout<<" ****************************"<<endl;
cout<<"\t1.添加工资记录\n";
cout<<"\t2.显示工资记录\n";
cout<<"\t3.按姓名查询工资数据\n";
cout<<"\t4.按姓名删除工资数据\n";
cout<<"\t0.退出系统\n";
cout<<" ****************************"<<endl;
cout<<"请输入您的选择:";
cin>>strChoice;
cin.ignore();
Operate(strChoice,SalaryList);
}while(strChoice!="0");
cout<<"\n\n\t欢迎再次使用工资管理系统\n\n";
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -