职工管理系统(list容器)

  今天学了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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值