当前位置:编程学习 > C/C++ >>

C++面向对象程序设计编程项目代码

答案:刚帮人写的一个工资查询程序,很简单。你可以看看。

#include <iostream>
#include <list>
#include <string>
#include <sstream>

using namespace std;



typedef struct tagEmpNode
{
string _ID;
string _name;
double _pay;
tagEmpNode *_next;
tagEmpNode();
tagEmpNode(const tagEmpNode& node);
}EmpNode,*PEmpNode;

typedef PEmpNode EmpList;


class EmpSys
{
private:
EmpList m_head,m_rear;
unsigned int m_size;
public:
EmpSys();
EmpSys(const EmpSys& old);
~EmpSys();
bool ReadData(istream& in);
bool Insert(EmpNode& newNode);
bool Delete(PEmpNode delNode);
double FindByName(const string& name);
double FindByID(const string& id);
PEmpNode GetByName(const string& name);
PEmpNode GetByID(const string& id);
bool AccendingByPay();
bool DecendingByPay();
void PrintList(ostream& out);
//Add
PEmpNode GetPrior(PEmpNode node);
bool Clear();
};



tagEmpNode::tagEmpNode()
{
_ID="0000000";
_name="NoName";
_pay=0;
_next=NULL;
}

tagEmpNode::tagEmpNode(const tagEmpNode &node)
{
_ID=node._ID;
_name=node._name;
_pay=node._pay;
_next=NULL;
}



EmpSys::EmpSys()
{
m_head=m_rear=new EmpNode;
m_size=0;
}


EmpSys::EmpSys(const EmpSys & old)
{
m_head=m_rear=new EmpNode;
m_size=0;
PEmpNode pTemp=m_head->_next;
PEmpNode pHead=old.m_head->_next;
for (;pHead;pHead=pHead->_next)
{
pTemp->_next=new EmpNode(*pHead);
pTemp=pTemp->_next;
}
}


EmpSys::~EmpSys()
{
Clear();
}


bool EmpSys::Clear()
{
if (m_head==NULL || m_head==m_rear)
{
return false;
}

PEmpNode pTemp=m_head->_next,pDel=NULL;
while(pTemp)
{
pDel=pTemp;
pTemp=pTemp->_next;
delete pDel;
}
m_head=m_rear=NULL;
m_size=0;
return true;
}



bool EmpSys::ReadData(std::istream &in)
{
EmpNode tmpNode;
string line;
while (getline(in,line))
{
istringstream strstream(line);
strstream>>tmpNode._ID>>tmpNode._name>>tmpNode._pay;
if (!Insert(tmpNode))
{
return false;
}
}
return true;
}


bool EmpSys::Insert(EmpNode& newNode) //ok
{
m_rear->_next=new EmpNode(newNode);
m_rear=m_rear->_next;
m_size++;
return true;
}

bool EmpSys::Delete(PEmpNode delNode) //ok
{
PEmpNode pTemp=m_head;
while (pTemp->_next)
{
if (pTemp->_next==delNode)
{
pTemp->_next=delNode->_next;
delete delNode;
m_size--;
return true;
}
pTemp=pTemp->_next;
}
return false;
}


double EmpSys::FindByID(const std::string &id) //ok
{
PEmpNode pTemp=m_head->_next;
while (pTemp)
{
if (pTemp->_ID==id)
{
return pTemp->_pay;
}
pTemp=pTemp->_next;
}
return 0;
}

double  EmpSys::FindByName(const std::string &name) //ok
{
PEmpNode pTemp=m_head->_next;
while (pTemp)
{
if (pTemp->_name==name)
{
return pTemp->_pay;
}
pTemp=pTemp->_next;
}
return 0;
}

PEmpNode EmpSys::GetByID(const std::string &id) //ok
{
PEmpNode pTemp=m_head->_next;
while (pTemp)
{
if (pTemp->_ID==id)
{
return pTemp;
}
pTemp=pTemp->_next;
}
return NULL;
}


PEmpNode EmpSys::GetByName(const std::string &name) //ok
{
PEmpNode pTemp=m_head->_next;
while (pTemp)
{
if (pTemp->_name==name)
{
return pTemp;
}
pTemp=pTemp->_next;
}
return NULL;
}

bool EmpSys::AccendingByPay()
{
PEmpNode insert=m_head,pMax=NULL,pTemp=NULL,preMax=NULL,preTemp=NULL;
for (unsigned int i=0;i<m_size-1;++i)
{
preMax=insert;
pMax=insert->_next;
preTemp=pMax;
pTemp=pMax->_next;
while(pTemp)
{
if (pTemp->_pay < pMax->_pay)
{
preMax=preTemp;
pMax=pTemp;
}
preTemp=pTemp;
pTemp=pTemp->_next;
}
if (preMax!=insert)
{
preMax->_next=pMax->_next;
pMax->_next=insert->_next;
insert->_next=pMax;
}
insert=pMax;
}
return true;
}


bool EmpSys::DecendingByPay()
{
PEmpNode insert=m_head,pMax=NULL,pTemp=NULL,preMax=NULL,preTemp=NULL;
for (unsigned int i=0;i<m_size-1;++i)
{
preMax=insert;
pMax=insert->_next;
preTemp=pMax;
pTemp=pMax->_next;
while(pTemp)
{
if (pTemp->_pay > pMax->_pay)
{
preMax=preTemp;
pMax=pTemp;
}
preTemp=pTemp;
pTemp=pTemp->_next;
}
if (preMax!=insert)
{
preMax->_next=pMax->_next;
pMax->_next=insert->_next;
insert->_next=pMax;
}
insert=pMax;
}
return true;
}


void EmpSys::PrintList(ostream& out) //ok
{
int i=0;
PEmpNode pTemp=m_head->_next;
while (pTemp)
{
++i;
out<<i<<">\tID:"<<pTemp->_ID<<"\t姓名:"<<pTemp->_name<<"\t工资:"<<pTemp->_pay<<endl;
pTemp=pTemp->_next;
}
}





//Add
PEmpNode EmpSys::GetPrior(PEmpNode node)
{
if (node==m_head)
{
return NULL;
}
PEmpNode pTemp=m_head;
while (pTemp)
{
if (pTemp->_next==node)
{
return pTemp;
}
}
return NULL;
}


//////////////////////////////////////////////////
//Other Function
//
void MainMenu()
{
system("cls");
cout<<endl<<endl;
cout<<"\t\t\t\t\t工资管理程序"<<endl;
cout<<"\t\t\t1:添加\t\t\t\t2:重置"<<endl;
cout<<"\t\t\t3:按增序输出\t\t\t4:按降序输出"<<endl;
cout<<"\t\t\t5:按姓名查找\t\t\t6:按ID查找"<<endl;
cout<<"\t\t\t7:按姓名删除\t\t\t8:按ID删除"<<endl;
cout<<"\t\t\t\t\t0:退出"<<endl<<endl;
cout<<"\t\t\t请输入你的选择:";
}


//工资系统
EmpSys newSys;

int main()
{
//显示菜单
bool working=true;
while (working)
{
MainMenu();
int choose=0;
string ID,name;
EmpNode tempNode;
PEmpNode pTemp;
cin>>choose;
switch(choose)
{
case 1:
cout<<"请按照ID,姓名,工资输入数据:";
cin>>tempNode._ID>>tempNode._name>>tempNode._pay;
newSys.Insert(tempNode);
cout<<"ID:"<<tempNode._ID<<"\t姓名:"<<tempNode._name<<"\t工资:"<<tempNode._pay<<endl;
cout<<"添加成功!"<<endl;
system("pause");
break;
case 2:
newSys.Clear();
break;
case 3:
newSys.AccendingByPay();
newSys.PrintList(cout);
system("pause");
break;
case 4:
newSys.DecendingByPay();
newSys.PrintList(cout);
system("pause");
break;
case 5:
cout<<"请输出要查找的姓名:";
cin>>name;
cout<<"姓名:"<<name<<"\t工资:"<<newSys.FindByName(name)<<endl;
system("pause");
break;
case 6:
cout<<"请输出要查找的ID:";
cin>>ID;
cout<<"ID:"<<ID<<

上一个:C++基础问题 显示转换和隐式转换
下一个:公司职员信息管理系统 用C或C++

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,