自己写的一个企业管理程序,很简陋,随便看看吧

#include <iostream>
#include<fstream>
#include <string>
#include <cstdlib>
#include <VECTOR>
using namespace std;
void _manager();
void _technician();
void _salesman();
findoutand(string str1)
{
	string::size_type p=str1.find("&");
	if(p!=string::npos)
		return 1;
	else
		return 0;
}
findoutdoller(string str1)                            //查找函数
{
	string::size_type p=str1.find("$");
	if(p!=string::npos)
		return 1;
	else
		return 0;
}
class base_employee
{
private:
	string number;		//职工号
	string name;		//姓名
	string age;			//年龄
	string sex;         //性别
	int ranking;        //排名
public:
	base_employee()
	{
		number="NULL";
		name="Noname";
		age="18";
		sex="mid";
		ranking=0;
	}
	
	void number_Input(string _number)
	{
		number=_number;
	}
	void name_Input(string _name)
	{
		name=_name;
	}
	void age_Input(string _age)
	{
		age=_age;                                          //定义所有的输入数据的公用接口
	}
	void sex_Input(string _sex)
	{
		sex=_sex;
	}
	void ranking_Input(int _ranking)
	{
		ranking=_ranking;
	}
	
	string number_output()
	{
		return number;
	}
	string name_output()
	{
		return name;
	}
	string age_output()                                    //获取数据的接口函数
	{
		return age;
	}
	string sex_output()
	{
		return sex; 
	}
	int ranking_output()
	{
		return ranking;
	}
    /
};
/
class manager:public base_employee      //技术员
{
	private:
		string post;                       //职位
		double weage;						//工资
	public:
		manager()                   //默认构造函数
		{
			post="经理";
			weage=0;
		}
		manager(string Tpost)                   //构造函数
		{
			post=Tpost;
			weage=0;
		}

		void weage_Input(int _weage)
		{
			weage=_weage;                 //输入数据(工资)
		}
		void post_input(string _post)
		{
			post=_post;           //输入你的职位
		}

		string post_output()
		{
			return post;
		}                            //获取数据的函数
		double weage_output()
		{
			return weage;
		}
};
class technician:public manager
{
public:
	technician(string Tpost2="技术员"):manager(Tpost2)     //二重继承,并用默认实参来初始化自己的成员
	{
	}
};
class salesman:public manager
{
public:
	salesman(string Tpost3="销售员"):manager(Tpost3)     //二重继承,并用默认实参来初始化自己的成员
	{

	}
};
//经理类工资和数据录入函数开始:
/
ofstream ofile;
void _manager()
{
	manager mager;
	string number;
	string name;
	string sex;
	string post;
	string age;
	double weage;
renum1: cout<<"请输入你的职工号"<<endl;
	cin>>number;
	if(findoutand(number)||findoutdoller(number))
	{
		cout<<"你的输入带有非法参数,请重新输入!";
		goto renum1;
	}
	number+="&";
	mager.number_Input(number);   //数据输入开始
	cout<<"请输入你的姓名"<<endl;
renum2:	cin>>name;
	if(findoutand(name)||findoutdoller(name))
	   {
		cout<<"你的输入带有非法参数,请重新输入!";
		goto renum2;
	}
	mager.number_Input(name);
renum3: cout<<"请输入你的性别"<<endl;
	   cin>>sex;
	   if(findoutand(sex)||findoutdoller(sex))
	   {
		   cout<<"你的输入带有非法参数,请重新输入!";
		   goto renum3;
	   }
	mager.sex_Input(age);
renum4: cout<<"请输入你的年龄"<<endl;
	   cin>>age;
	   if(findoutand(age)||findoutdoller(age))
	   {
		   cout<<"你的输入带有非法参数,请重新输入!";
		   goto renum4;
	}
	mager.age_Input(age);
renum5: cout<<"请输入你的职位"<<endl;
	   cin>>post;
	   if(findoutand(post)||findoutdoller(post))
	   {
		   cout<<"你的输入带有非法参数,请重新输入!";
		   goto renum5;
	}
	mager.post_input(post);
	cout<<"请输入你的工资"<<endl;
	cin>>weage;
	mager.weage_Input(weage);
	//char Name[20];
	//strcpy(Name,name.c_str());
	//strcat(Name,".txt");
	//ofstream ofile("data.txt");
	ofile.open("data.txt",ofstream::out | ofstream::app);
	ofile<<number<<'$';
	ofile<<name<<'$';
	ofile<<sex<<'$';
	ofile<<age<<'$';
	ofile<<post<<'$';
	ofile<<weage<<'$';
	//ofile<<'$'<<'\n';
	ofile.close();
}
void _technician()
{
	technician mager;
	string number;
	string name;
	string sex;
	string age;
	string post;
	double weage;
retec1: cout<<"请输入你的职工号"<<endl;
	   cin>>number;
	   if(findoutand(number)||findoutdoller(number))
	   {
		   cout<<"你的输入带有非法参数,请重新输入!";
		   goto retec1;
	}
	number+="&";
	mager.number_Input(number);   //数据输入开始
retec2: cout<<"请输入你的姓名"<<endl;
       cin>>name;
	   if(findoutand(name)||findoutdoller(name))
	   {
		   cout<<"你的输入带有非法参数,请重新输入!";
		   goto retec2;
	}
	mager.number_Input(name);
retec3: cout<<"请输入你的性别"<<endl;
	   cin>>sex;
	   if(findoutand(sex)||findoutdoller(sex))
	   {
		   cout<<"你的输入带有非法参数,请重新输入!";
		   goto retec3;
	   }
	mager.sex_Input(sex);
retec4: cout<<"请输入你的年龄"<<endl;
	   cin>>age;
	   if(findoutand(age)||findoutdoller(age))
	   {
		   cout<<"你的输入带有非法参数,请重新输入!";
		   goto retec4;
	}
	mager.age_Input(age);
retec5: cout<<"请输入你的职位"<<endl;
	   cin>>post;
	   if(findoutand(post)||findoutdoller(post))
	   {
		   cout<<"你的输入带有非法参数,请重新输入!";
		   goto retec5;
	}
	mager.post_input(post);
	cout<<"请输入你工作的时间"<<endl;
	float time=0;
	cin>>time;
	weage=100*time;
	mager.weage_Input(weage);
	//char Name[20];
	//strcpy(Name,name.c_str());
	//strcat(Name,".txt");
	//ofstream ofile("data.txt");
	ofile.open("data.txt",ofstream::out | ofstream::app);
	ofile<<number<<'$';
	ofile<<name<<'$';
	ofile<<sex<<'$';
	ofile<<age<<'$';
	ofile<<post<<'$';
	ofile<<weage<<'$';
	//ofile<<'$'<<'\n';
	ofile.close();
}
void _salesman()
{
	technician mager;
	string number;
	string name;
	string sex;
	string age;
	string post;
	double weage;
resa1: cout<<"请输入你的职工号"<<endl;
    cin>>number;
	if(findoutand(number)||findoutdoller(number))
	{
		cout<<"你的输入带有非法参数,请重新输入!";
			goto resa1;
	}
	number+="&";
	mager.number_Input(number);   //数据输入开始
resa2: cout<<"请输入你的姓名"<<endl;
       cin>>name;
	   if(findoutand(name)||findoutdoller(name))
	   {
		   cout<<"你的输入带有非法参数,请重新输入!";
		   goto resa2;
	}
	mager.number_Input(name);
resa3: cout<<"请输入你的性别"<<endl;
    cin>>sex;
	   if(findoutand(sex)||findoutdoller(sex))
	   {
		   cout<<"你的输入带有非法参数,请重新输入!";
		   goto resa3;
	   }
	mager.sex_Input(sex);
resa4: cout<<"请输入你的年龄"<<endl;
	cin>>age;
	if(findoutand(age)||findoutdoller(age))
	   {
		cout<<"你的输入带有非法参数,请重新输入!";
		goto resa4;
	}
	mager.age_Input(age);
resa5: cout<<"请输入你的职位"<<endl;
	cin>>post;
	if(findoutand(post)||findoutdoller(post))
	   {
		cout<<"你的输入带有非法参数,请重新输入!";
		goto resa5;
	}
	mager.post_input(post);
    cout<<"请输入你销售额"<<endl;
	float salesmoney=0;
	cin>>salesmoney;
	weage=0.4*salesmoney;
	mager.weage_Input(weage);
	//char Name[20];
	//strcpy(Name,name.c_str());
	//strcat(Name,".txt");
	//ofstream ofile("data.txt");
	ofile.open("data.txt",ofstream::out | ofstream::app);
	ofile<<number<<'$';
	ofile<<name<<'$';
	ofile<<sex<<'$';
	ofile<<age<<'$';
	ofile<<post<<'$';
	ofile<<weage<<'$';
	//ofile<<'$'<<'\n';
	ofile.close();
}
/
int main()
{
back: cout<<"请输入您要使用的功能(1.数据录入,2.数据统计,3.删除数据,4.退出)"<<endl;
	  cout<<"请注意!输入个人信息时,请不要输入$以及&字符,否则将引起程序数据错乱!"<<endl;
	int chose=0;
	cin>>chose;
	while(chose==1)
	{
		int chosejob=0;
		cout<<"请选择你的职业(1.经理,2.技术员,3.销售员,0.退出)"<<endl;
		cin>>chosejob;
		while(chosejob==1)
		{
			_manager();
			break;
		}
		while(chosejob==2)
		{
			_technician();
			break;
		}
		while(chosejob==3)
		{
			_salesman();
			break;
		}
		if(chosejob==0)
			break;
	}
		while(chose==2)
		{
			int count=0;
			vector<manager> bowl;//用来存放数据
			ifstream infile("data.txt");    //绑定文件
			string a[10000];                  //静态数组存放数据
			string str;                       //string字符串用来进行临时中转
			//string* p=new string[];			//定义动态数组
			infile>>str;    //将文件中的数据存入str		
			//cout<<str;
			int tempcount=0;             //置0
			int ix=0;                    //ix为静态数组下标
			//string can;
			//cout<<str;             //数据读入至字符串成功!
			string::iterator p=str.begin();
			if(str.empty())
			{
				cout<<"数据库中目前找不到任何数据,请输入一些数据后再进行统计,谢谢!"<<endl;
				break;
			}
			
			while(*p!=NULL)
			{
				manager item;
				a[ix]=*p;
				//cout<<a[ix]<<endl;
				++ix;
				++p;
				if(*p=='$')
				{
					++p;   //用以屏蔽$字符
					++tempcount; //人员的内容项目计数器+1,根据$字符来判断当前数据属于类中的什么部分。
					for(int i=1;i<ix;i++)
					{
						a[0]+=a[i];
					}
					//cout<<a[0]<<endl;
					if(tempcount==1)
					{
						bowl.push_back(item);
						bowl[count].number_Input(a[0]);												//此处的算法用途为将文件中的数据按照一定算法放入容器内部,以供冒泡排序之用。
					}
					else if(tempcount==2)
					{
						bowl.push_back(item);
						bowl[count].name_Input(a[0]);
					}
					else if(tempcount==3)
					{
						bowl.push_back(item);
						bowl[count].sex_Input(a[0]); 
					}
					else if(tempcount==4)
					{
						bowl.push_back(item);
						bowl[count].age_Input(a[0]);
					}
					else if(tempcount==5)
					{
						bowl.push_back(item);
						bowl[count].post_input(a[0]);
					}
					else if(tempcount==6)
					{
						bowl.push_back(item);
						double money;
						money=atof(a[0].c_str());                     //字符数组的转化
						bowl[count].weage_Input(money);
						++count;         //人员计数器加一
						tempcount=0;      //由于到了最后,所以要重新置为0
						 
					}
					 ix=0;                              //数组重置
				}
			}				
			
			int j;
			manager temp;
			for(int i=0;i<count-1;i++)
			{
				for(j=0;j<count-1-i;j++)
					if(bowl[j].weage_output()<bowl[j+1].weage_output())
					{
						temp=bowl[j];                                                        //冒泡排序算法结束
						bowl[j]=bowl[j+1];
						bowl[j+1]=temp;
					}
			}
			///
			cout<<"职工号"<<"|"<<"姓名"<<"|"<<"性别"<<"|"<<"年龄"<<"|"<<"岗位"<<"|"<<"工资"<<"|"<<"排名"<<endl;
			for(i=0;i<count;i++)
			{
				bowl[i].ranking_Input(i+1);
				cout<<bowl[i].number_output()<<"|"<<bowl[i].name_output()<<"|"<<bowl[i].age_output()<<"|"<<bowl[i].post_output()<<"|"<<bowl[i].weage_output()<<"|"<<bowl[i].ranking_output()<<endl;
			}
			chose=0;
		}
		while(chose==3)
		{
			int tempcount=0;
    		ifstream infile("data.txt"); //绑定文件
			string arr[1000];
			string del_str;
			string _str;
			infile>>_str;
			if(_str.empty())
			{
				cout<<"无数据!程序即将退出!"<<endl;
				break;
			}
			cout<<_str<<endl;//数据读入成功!
			cout<<"请输入你要删除的职工号"<<endl;
			cin>>del_str;
			del_str+="&";
			string::iterator p=_str.begin();
			string::iterator first=p;  //记住当前p所指向的字符串(str的首字符)
			string::iterator last=p;  //用于尾部的指针
			int ix=0;
			while(*p!=NULL)
			{
				string tempstr;  //临时str存放的是当前指向的属性,与del_str进行比较
				arr[ix]=*p;//
				++p;           //将数据存进数组
				++ix;      ///
			    if(*p=='$')
				{
					++tempcount;
					++p;
					for(int i=1;i<ix;i++)
					{
						arr[0]+=arr[i];
					}
					tempstr=arr[0];
					cout<<tempstr<<endl;
					if(tempstr==del_str)//如果当前的临时变量等于需要删除的变量
					{
						tempcount=1;                                        //每次找到匹配头的时候就将计数器重新置为1  因为找到了职工号,所以$已经有了1个,所以置为1而不是0
					  while(*p!='$'||tempcount!=6)                          //只要我们的$符号不为6,或者我们的*p还不为$,我们就继续执行循环体中的语句。
					  {
						  ++p;                              //一上来我们就要把指针p加一,这样我们就能够计算$符号的个数,来决定我们这个职工的所有属性到底指完了没。(☆_☆)/~~
						  if(*p=='$')
						  {
							  ++tempcount; 
						  }
					  }
					  last=p;                       //最后,我们将last指针变为P当前所指的数据,这样我们就完成了first和last指针的正确数据指向!
					  p=_str.erase(first,last+1);//调用string类型的函数来删除两个指针中间的值,+1是为了删除最后一个$。↖(^ω^)↗
					}
					ix=0;
					first=p;                                      //在这里我们将first的指针指向P,否则会产生指针永远指向头的情况,会造成只能顺序删除而不能随机删除的情况,
				}                                                 //这个情况debug了我一个小时,把first指针给忘了……细心很重要啊!(ー_ー)!!
				
			}
			ofstream("data.txt").close();        //清空原数据
			ofile.open("data.txt",ofstream::out | ofstream::app);  //重新打开文件
			ofile<<_str;   //将_str中的内容全部写入文件,这样做效率太低,不过我暂时没什么好办法,希望大神能给出更完美的算法,谢谢!
			chose=0;                        //给予跳出循环的条件,完成~!`(*∩_∩*)′
		}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值