今天学了c++的容器,然后就把之前的职工管理系统重新拿出来做了一遍,这次我是用list容器做的,vector的操作其实也是有着异曲同工之妙,vector首先是解决了数组的一个大缺陷------有上限,但是它本质上还是数组,只是动态分配内存了而已,还有一点不得不说c++比c强大的地方了,c里面如果要对数组插入删除的时候还是不怎么方便的,但是c++把这些操作封装在了一起,使用的时候只需要调用一下函数而已,将这部分的时间节省了下来,留下更多的时间来处理其他事情。list和之前的链表感觉差不多,也是将一些链表的操作封装起来了,原理还是一样的,不过还是要感谢这些把数组链表操作封装成一个一个库的那些人,正如牛顿所言,我看的比别人远,那是因为我站在巨人的肩膀上!感谢前辈们的贡献吧。以下的是代码:
#ifndef CONTROL_H
#define CONTROL_H
#include <iostream>
#include <fstream>
#include <string>
#include <list>
#include <Windows.h>
using namespace std;
class people
{
string m_name;
int m_age;
string m_sex;
public:
people(){};
people(string name, int age, string sex):m_name(name), m_age(age), m_sex(sex){}
string getname(){return m_name;}
int getage(){return m_age;}
string getsex(){return m_sex;}
};
class worker : public people
{
string m_num;
string m_bum;
string m_yobi;
int m_salary;
public:
worker(){};
worker(string num, string name, int age, string sex, string yobi, string bum, int salary):
people(name, age, sex),m_num(num), m_bum(bum), m_yobi(yobi), m_salary(salary){}
string getnum(){return m_num;}
string getbum(){return m_bum;}
string getyobi(){return m_yobi;}
int getsalary(){return m_salary;}
};
class Control
{
public:
void jiemian(); //界面显示
void init(); //注册职工
void xiugai(); //修改职工信息
void shanchu(); //删除职工信息
void chaxun(); //查询职工信息
void paiming(); //根据薪资排名
void pint(); //打印所有信息
};
#endif
#include "control.h"
bool SORT(worker& wor1, worker& wor2) //比较两个员工薪水的大小
{
return wor1.getsalary()>wor2.getsalary();
}
void Control::jiemian()
{
system("cls");
cout<<"\n\n\n";
cout<<"\t\t\t**************************************\n";
cout<<"\t\t\t* 欢迎来到职工管理系统 *\n";
cout<<"\t\t\t* 1 注册新职工 *\n";
cout<<"\t\t\t* 2 修改职工信息 *\n";
cout<<"\t\t\t* 3 删除职工信息 *\n";
cout<<"\t\t\t* 4 查询职工信息 *\n";
cout<<"\t\t\t* 5 薪资排名顺序 *\n";
cout<<"\t\t\t* 6 浏览所有信息 *\n";
cout<<"\t\t\t**************************************\n";
cout<<"\n\n\t\t请输入您的选择:";
}
void Control::init()
{
string num; //职工号
string name; //名字
int age; //年龄
string x; //性别 f为女 m为男
string yobi; //邮编
string bum; //部门
int salary; //工资
system("cls");
cout<<"\n\n\n";
cout<<"\t\t\t请输入职工号:";
cin>>num;
cout<<"\n\t\t\t请输入名字:";
cin>>name;
cout<<"\n\t\t\t请输入年龄:";
cin>>age;
cout<<"\n\t\t\t请输入性别:";
cin>>x;
cout<<"\n\t\t\t请输入邮编:";
cin>>yobi;
cout<<"\n\t\t\t请输入部门:";
cin>>bum;
cout<<"\n\t\t\t请输入工资:";
cin>>salary;
worker w(num, name, age, x, yobi, bum, salary);
ofstream out;
out.open("职工档案.txt", ios::out | ios::app);
if(!out)
{
cerr<<"open error!"<<endl;
return;
}
out.write((char*)&w, sizeof(worker));
out.close();
}
void Control::xiugai()
{
string str1;
int flag = 0;
string name; //名字
int age; //年龄
string x; //性别 f为女 m为男
string yobi; //邮编
string bum; //部门
int salary; //工资
system("cls");
cout<<"\n\n\n";
cout<<"\t\t\t请输入要修改人的职工号:";
cin>>str1;
ifstream in;
in.open("职工档案.txt", ios::in | ios::_Nocreate);
if(!in)
{
system("cls");
cout<<"\n\n\n\n\n\n\t\t\t\t系统中暂时无人!"<<endl;
in.close();
return;
}
worker wer;
list<worker> link;
list<worker>::iterator it = link.begin();
if (in.read((char*)&wer, sizeof(worker)))
{
link.push_back(wer);
while(1)
{
memset(&wer, 0 ,sizeof(worker));
if (in.read((char*)&wer, sizeof(worker)))
{
link.push_back(wer);
continue;
}
else
{
break;
}
}
}
else
{
system("cls");
cout<<"\n\n\n\n\n\n\t\t\t\t系统中暂时无人!"<<endl;
in.close();
return;
}
in.close();
for (it = link.begin(); it != link.end(); it++)
{
if (it->getnum() == str1)
{
flag = 1;
cout<<"\n\t\t\t请确认被修改人的名字:"<<it->getname()<<endl;
name = it->getname();
cout<<"\n\t\t\t请输入修改后的年龄:";
cin>>age;
cout<<"\n\t\t\t请输入修改后的性别:";
cin>>x;
cout<<"\n\t\t\t请输入修改后的邮编:";
cin>>yobi;
cout<<"\n\t\t\t请输入修改后的部门:";
cin>>bum;
cout<<"\n\t\t\t请输入修改后的薪资:";
cin>>salary;
link.erase(it);
worker wer(str1, name, age, x, yobi, bum, salary);
link.push_back(wer);
break;
}
}
if (flag)
{
Sleep(2);
system("cls");
cout<<"\n\n\n\n\n\n\t\t\t\t修改成功!"<<endl;
}
else
{
Sleep(2);
system("cls");
cout<<"\n\n\n\n\n\n\t\t\t\t查无此人!"<<endl;
return;
}
remove("职工档案.txt");
ofstream out;
out.open("职工档案.txt", ios::out | ios::app);
if(!out)
{
cerr<<"open error"<<endl;
return;
}
for (it = link.begin(); it != link.end(); it++)
{
worker w(it->getnum(), it->getname(), it->getage(), it->getsex(), it->getyobi(), it->getbum(), it->getsalary());
out.write((char*)&w, sizeof(worker));
memset(&w, 0, sizeof(worker));
}
out.close();
}
void Control::shanchu()
{
system("cls");
string str1;
int flag = 0;
cout<<"\n\n\n";
cout<<"\t\t\t请输入要删除人的职工号:";
cin>>str1;
ifstream in;
in.open("职工档案.txt", ios::in | ios::_Nocreate);
if(!in)
{
system("cls");
cout<<"\n\n\n\n\n\n\t\t\t\t系统中暂时无人!"<<endl;
in.close();
return;
}
worker wer;
list<worker> link;
list<worker>::iterator it = link.begin();
if (in.read((char*)&wer, sizeof(worker)))
{
link.push_back(wer);
while(1)
{
memset(&wer, 0 ,sizeof(worker));
if (in.read((char*)&wer, sizeof(worker)))
{
link.push_back(wer);
continue;
}
else
{
break;
}
}
}
else
{
system("cls");
cout<<"\n\n\n\n\n\n\t\t\t\t系统中暂时无人!"<<endl;
in.close();
return;
}
in.close();
if (link.begin() == link.end()) //只有一个元素
{
remove("职工档案.txt");
ofstream outfile;
outfile.open("职工档案.txt", ios::out);
outfile.close();
system("cls");
cout<<"\n\n\n\n\n\n\t\t\t\t删除成功!"<<endl;
return;
}
for (it = link.begin(); it != link.end(); it++)
{
if(it->getnum() == str1)
{
flag = 1;
link.erase(it);
break;
}
}
if(flag)
{
system("cls");
cout<<"\n\n\n\n\n\n\t\t\t\t删除成功!"<<endl;
}
else
{
system("cls");
cout<<"\n\n\n\n\n\n\t\t\t\t查无此人!"<<endl;
return;
}
remove("职工档案.txt");
ofstream out;
out.open("职工档案.txt", ios::out | ios::app);
if(!out)
{
cerr<<"open error"<<endl;
return;
}
for (it = link.begin(); it != link.end(); it++)
{
worker w(it->getnum(), it->getname(), it->getage(), it->getsex(), it->getyobi(), it->getbum(), it->getsalary());
out.write((char*)&w, sizeof(worker));
memset(&w, 0, sizeof(worker));
}
out.close();
}
void Control::chaxun()
{
system("cls");
string str1, str2;
int flag = 0;
cout<<"\n\n\n";
cout<<"\t\t\t请输入要查询的职工号:";
cin>>str1;
cout<<"\n\n\t\t\t请输入要查询的名字:";
cin>>str2;
ifstream in;
in.open("职工档案.txt", ios::in | ios::_Nocreate);
if(!in)
{
system("cls");
cout<<"\n\n\n\n\n\n\t\t\t\t系统中暂时无人!"<<endl;
in.close();
return;
}
worker wer;
list<worker> link;
list<worker>::iterator it = link.begin();
if (in.read((char*)&wer, sizeof(worker)))
{
link.push_back(wer);
while(1)
{
memset(&wer, 0 ,sizeof(worker));
if (in.read((char*)&wer, sizeof(worker)))
{
link.push_back(wer);
continue;
}
else
{
break;
}
}
}
else
{
system("cls");
cout<<"\n\n\n\n\n\n\t\t\t\t系统中暂时无人!"<<endl;
in.close();
return;
}
in.close();
for (it = link.begin();it != link.end(); it++)
{
if (it->getnum() == str1 && it->getname() == str2)
{
flag = 1;
cout<<"\n\t\t年龄:"<<it->getage()<<" 性别:"<<it->getsex()<<" 邮编:"<<it->getyobi()<<" 部门:"
<<it->getbum()<<" 薪资:"<<it->getsalary()<<endl;
}
}
if (flag == 0)
{
system("cls");
cout<<"\n\n\n\n\n\n\t\t\t\t查无此人!"<<endl;
}
}
void Control::paiming()
{
system("cls");
cout<<"\n\n\n";
ifstream in;
in.open("职工档案.txt", ios::in | ios::_Nocreate);
if(!in)
{
system("cls");
cout<<"\n\n\n\n\n\n\t\t\t\t系统中暂时无人!"<<endl;
in.close();
return;
}
worker wer;
list<worker> link;
list<worker>::iterator it = link.begin();
if (in.read((char*)&wer, sizeof(worker)))
{
link.push_back(wer);
while(1)
{
memset(&wer, 0 ,sizeof(worker));
if (in.read((char*)&wer, sizeof(worker)))
{
link.push_back(wer);
continue;
}
else
{
break;
}
}
}
else
{
system("cls");
cout<<"\n\n\n\n\n\n\t\t\t\t系统中暂时无人!"<<endl;
in.close();
return;
}
in.close();
link.sort(/*link.begin(), link.end(), */SORT);
for (it = link.begin(); it != link.end(); it++)
{
cout<<"职工号:"<<it->getnum()<<" 名字:"<<it->getname()<<" 年龄:"<<it->getage()<<" 性别:"<<it->getsex()
<<" 邮编:"<<it->getyobi()<<" 部门:"<<it->getbum()<<" 薪资:"<<it->getsalary()<<endl;
}
remove("职工档案.txt");
ofstream out;
out.open("职工档案.txt", ios::out | ios::app);
if(!out)
{
cerr<<"open error"<<endl;
return;
}
for (it = link.begin(); it != link.end(); it++)
{
worker w(it->getnum(), it->getname(), it->getage(), it->getsex(), it->getyobi(), it->getbum(), it->getsalary());
out.write((char*)&w, sizeof(worker));
memset(&w, 0, sizeof(worker));
}
out.close();
}
void Control::pint()
{
system("cls");
cout<<"\n\n\n";
ifstream in;
in.open("职工档案.txt", ios::in | ios::_Nocreate);
if(!in)
{
system("cls");
cout<<"\n\n\n\n\n\n\t\t\t\t系统中暂时无人!"<<endl;
in.close();
return;
}
worker wer;
list<worker> link;
list<worker>::iterator it = link.begin();
if (in.read((char*)&wer, sizeof(worker)))
{
link.push_back(wer);
while(1)
{
memset(&wer, 0 ,sizeof(worker));
if (in.read((char*)&wer, sizeof(worker)))
{
link.push_back(wer);
continue;
}
else
{
break;
}
}
}
else
{
system("cls");
cout<<"\n\n\n\n\n\n\t\t\t\t系统中暂时无人!"<<endl;
in.close();
return;
}
in.close();
for (it = link.begin(); it != link.end(); it++)
{
cout<<"职工号:"<<it->getnum()<<" 名字:"<<it->getname()<<" 年龄:"<<it->getage()<<" 性别:"<<it->getsex()
<<" 邮编:"<<it->getyobi()<<" 部门:"<<it->getbum()<<" 薪资:"<<it->getsalary()<<endl;
}
}
#include "control.h"
int main()
{
Control con;
char ecf; //选项
char sel[10];
while(1)
{
con.jiemian();
cin>>ecf;
switch(ecf)
{
case '1':
{
con.init();
break;
}
case '2':
{
con.xiugai();
cout<<"\n\n\t\t输入任意键返回:";
cin>>sel;
break;
}
case '3':
{
con.shanchu();
cout<<"\n\n\t\t输入任意键返回:";
cin>>sel;
break;
}
case '4':
{
con.chaxun();
cout<<"\n\n\t\t输入任意键返回:";
cin>>sel;
break;
}
case '5':
{
con.paiming();
cout<<"\n\n\t\t输入任意键返回:";
cin>>sel;
break;
}
case '6':
{
con.pint();
cout<<"\n\n\t\t输入任意键返回:";
cin>>sel;
break;
}
default:
{
system("cls");
cout<<"\n\n\n\n\n请输入1--6!"<<endl;
cout<<"\n\n\t\t输入任意键返回:";
cin>>sel;
break;
}
}
}
return 0;
}