⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 工资管理.cpp

📁 用C++实现的工资管理系统!这里用了数据结构中的链表!
💻 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 + -