#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; //给予跳出循环的条件,完成~!`(*∩_∩*)′
}
}
自己写的一个企业管理程序,很简陋,随便看看吧
最新推荐文章于 2015-10-29 22:33:30 发布