亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? employee.cpp

?? 簡單工資系統,是學習C++的好例子
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//注
//vc++6.0下編譯通過
//c-free不能通過。原因是iso_base::left在c-free里沒有.也許要寫成	iso::left才行.

//如果改進的話
//1.可以寫函數類,比如比較大小的。然后傳給通用算法,這樣就省去了寫sort的麻煩。--7月5日
//

#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <vector>
#include <stdlib.h>
#include <exception>
#include <list>
#include <algorithm>




using namespace std;


/**********************************************/
/**********************************************/
class MyException:public exception{
private:
    string _ErrorCode;
protected:
    void setErrorCode(string code){_ErrorCode=code;};
public:
    void printErrorCode(){cout<<_ErrorCode;}
};

/**********************************************/
class YeahException:public MyException{
public:
    YeahException(){setErrorCode("年份錯誤\n");};
} ;

/**********************************************/
class MonthException:public MyException{
public:
    MonthException(){setErrorCode("月份錯誤\n");};
} ;

/**********************************************/
class DayException:public MyException{
public:
    DayException(){setErrorCode("這個世界沒有出現過這一天\n");};
} ;
/**********************************************/
class SexException:public MyException{
public:
    SexException(){setErrorCode("性別錯誤\n");};
} ;

/**********************************************/
/**********************************************/


/**********************************************/
/**********************************************/
class BDay
{


private:
    int _year;
    int _month;
    int _day;
	string inttostr(int i)
	{
		int c;
		char ch;
		string str;
		if (i==0) str="0";
		while (i!=0)
		{	
			c=i%10;
			ch='0'+c;
			str=str+ch;
			i=i/10;
		}
		return reverse(str);
	}
	string& reverse(string& str)
	{
		char ch;
		int i=0;
		while (i!=str.length()/2){
			ch=str[str.length()-1-i];
			str[str.length()-1-i]=str[i];
			str[i]=ch;
			i++;
		}
		return str;
	}	


public:
  int getYear(){return _year;}
  int getMonth(){return _month;}
  int getDay(){return _day;}
	
  BDay(const BDay &o)
  {
    _year=o._year;
    _month=o._month;
    _day=o._day;
  }
  void setYear(int year)
  {
       if (year>9999||year<-9999){
           YeahException e;
           throw  e;
        }
       _year=year;
  }
  void setMonth(int month)
  {
       if (month>12||month<1){
           MonthException e;
           throw  e;
        }
       _month=month;
  }
  void setDay(int day)
  {
        if (day<1||day>31) {
            DayException e;
            throw e;
        }
        if ((_month==2)&&(day==29)&&(!((_year%4==0&&_year%100!=0)||(_year&400==0)))){
            DayException e;
            throw e;
        }
        switch(_month){
            case 2:
                if (day>28){
                    DayException e;
                    throw e;
                }
                break;
            case 4: case 6: case 9: case 11:
                if(day>30){
                    DayException e;
                    throw e;
                }
                break;
        }
        
		_day=day;
	
  }
  BDay(){_year=1983;_month=6;_day=30;}
  BDay(int year,int month,int day)
  {
	setYear(year);
	setMonth(month);
	setDay(day);
  }
  BDay(string day)
  {

    int i=day.find("-",0);
	/*
	if (i>=4)
    {
        DayException e;
        throw e;
    }
	*/
    char chyear[5];
    day.copy(chyear,i,0);
    setYear(atoi(chyear));
	
	int j=day.find("-",i+1);
	char chmonth[3];
	day.copy(chmonth,j-i-1,i+1);
	setMonth(atoi(chmonth));
	
	i=day.find("-",j+1);
	
	char chday[3];
	day.copy(chday,i-j-1,j+1);
	setDay(atoi(chday));

  }
  //////////////////////////
  string getBirthday()
  {
	 
	return inttostr(_year)+"-"+inttostr(_month)+"-"+inttostr(_day);
  }


  BDay operator=(const BDay &o)
  {
    _year=o._year;
    _month=o._month;
    _day=o._day;
    return *this;
  }

 
} ;


/**********************************************/
/**********************************************/


class CEmployee {
private:

	static int Class_id;
	int _id;//存放編號
    string _name;
    string _sex;
    BDay _birthday; //顯示格式:1980-1-1,請自己設計并實現類BDay.
	//float pay;
	
public:
	
	static void setClass_id(int i){Class_id =i;}
	string getSex(){return _sex;};
	string getBirthday(){return _birthday.getBirthday();};
	
	int operator<(CEmployee& o)
	{
		if (computePay()>o.computePay()){return -1;}
		else
		{
			if(computePay()<o.computePay()){return 1;}
			return 0;
		}
	};
		
	int operator>(CEmployee& o)
	{
		if (computePay()>o.computePay()){return -1;}
		else
		{
			if(computePay()>o.computePay()){return 1;}
			return 0;
		}
	};

	int getid()
	{
		return _id;
	}

    CEmployee(const string& nm, const string& sex, const BDay& bd);//構造函數
    string EmpolyeeName();//返回雇員名字
    virtual float computePay(){return 0;};//計算雇員薪水
	virtual string getPosition(){return "雇員";}

	virtual void printInfo(ostream& stream=cout)//初始值的作用就是寫了一堆東西,發現少了個參數,然后加進去,給它個默認的值
	{
	
		stream
			<<setiosflags(ios_base::left)
			<<setw(10)<<getid()
			<<setw(15)
			<<EmpolyeeName()
			<<setw(10)<<getPosition()
			<<setw(10)<<getSex()
			<<setw(15)<<getBirthday()
			<<setiosflags(ios_base::left)<<setw(10)<<computePay()
			<<endl;
	}
	static void printInfoHint(ostream& stream=cout)
	{
		stream
			<<setiosflags(ios_base::left)
			<<setw(10)<<"編號"
			<<setw(15)
			<<"姓名"
			<<setw(10)<<"職位"
			<<setw(10)<<"性別"
			<<setw(15)<<"生日"
			<<setiosflags(ios_base::left)<<setw(10)<<"薪金"<<endl;
	}
};

int CEmployee::Class_id=1;
CEmployee::CEmployee(const string& nm, const string& sex, const BDay& bd)
{
    _name=nm;
    if (sex!="男"&&sex!="女")
    {
        SexException e;
        throw e;
    }
    _sex=sex;
    _birthday=bd;
	_id=CEmployee::Class_id;
	CEmployee::Class_id++;

}
/*
CEmployee::CEmployee(const CEmployee& o)
{
    _name=o._name;
    _sex=o._sex;
    _birthday=o._birthday;

}
*/
string CEmployee::EmpolyeeName()
{
  return _name;
}




/**********************************************/
class CManager : public CEmployee{
private :
    float _salary;//固定月薪
public :
    CManager(const string& nm, const string& sex, const BDay& bd):CEmployee(nm,sex,bd){_salary=0.0;}; //初始化父類屬性值,并初始化月薪為0.0
    void setSalary(float salary){_salary=salary;}; //修改CManager月薪值
    virtual float computePay(){return _salary;};
	virtual string getPosition(){return "經理";}
	


};

/**********************************************/
class CWage : public CEmployee {
private :
    float _wage;//時薪
    float _hours;//小時
public :
    CWage(const string& nm, const string& sex, const BDay& bd):CEmployee(nm,sex,bd){_wage=0; _hours=0;};//自己編寫CWage的恰當的構造函數。注意在生成一個CWage對象時構造函數必須初始化該對象的_wage, _hours屬性值為0.0,0.0。
    void setWage(float wg){_wage=wg;};// 修改對象的時薪值
    void setHours(float hrs){_hours=hrs;};// 修改對象的工作時間
    virtual float computePay(){return _wage*_hours;};// 計算薪水,Cwage的薪水= 工作時間*時薪
	virtual string getPosition(){return "時工";}
};

/**********************************************/
class CSales : public CWage{
private :
    float _comm; //每件提成
    float _sale; //銷售數量
public :
    CSales(const string& nm, const string& sex, const BDay& bd):CWage(nm,sex,bd){_comm=0;_sale=0;};//初始化其父類的所有屬性值,并初始化_comm, _sale為0.0,0.0
    void setCommission(float comm){_comm=comm;}; //修改對象的提成
    void setSales(float sale){_sale=sale;}; //修改對象的銷售數量
    virtual float computePay(){return CWage::computePay()+_comm*_sale;};// 計算薪水,CSales薪水= 工作時間*時薪+ 每件提成*銷售數量
	virtual string getPosition(){return "銷售";}
};

/**********************************************/
/**********************************************/
class IdoIt // 接口
{
public:
virtual void doIt()=0;
};

/**********************************************/
class Menu:public IdoIt{
private:
    int id;
	string _title;
protected:
    vector<IdoIt *> _op ;
    vector<string> _hint;
	
public:
    Menu(){id=0;}
	void addTitle(string str){_title=str;};
    void addMenu(string hint,IdoIt *op)
    {
        _op.push_back(op);
        _hint.push_back(hint);
        ++id;
    }
    void show()
    {
        system("cls");
        //為了菜單的美觀,所以打回車
        for (int spa=0;spa<(15-id)/2;++spa){
            cout<<endl;
        }

		cout<<"                                  "<<_title<<endl<<endl;//輸出標題

        for(int i=0;i<_hint.size();++i){
            cout<<"                              "<<i+1<<"."<<_hint[i]<<endl;//i+1的原因在于atoi()出錯返回0,所以不應該有0的菜單

        }
        //打印請選擇
        if (id>0){
            cout<<endl<<"                              "<<"請選擇:"<<1<<"-"<<id<<" " ;
        }
        else
        {
            cout<<"                              "<<"沒有菜單"<<endl ;
        }
        //對選擇進行操作
        int choice=0;
		string str;
		cin>>str;
        //choice=cin.get()-'0';
		choice=atoi(str.c_str());
        if(choice>id||choice<1){

          //  (*this).show();
        }
        else
        {
            _op[choice-1]->doIt();//choice-1的原因在于id與顯示的序號的不同,
        }
           (*this).show();
    }
    virtual void doIt()
    {
        (*this).show();

    }
} ;


/**********************************************/
//功能模塊類
class CFunction:public IdoIt
{
private:
    void (*_p)();//函數指針聲明
    static list<CEmployee *> _emplyeelist;
	static const string TOP;
	static const string LEFT;
//print,save,report可以合并,不過在private里,所以無所謂
static void print()
{
	system("cls");
	cout<<endl;//為了美觀
	CEmployee::printInfoHint();//列表名

	list<CEmployee *>::iterator p=CFunction::_emplyeelist.begin();

	int pagectrl=0; //用來控制換頁
	while(p!=_emplyeelist.end())
	{	
		
		if (pagectrl==20){
			cout<<"下一頁";
			system("pause");
			system("cls");
			pagectrl=0;
			cout<<endl;//為了美觀
			CEmployee::printInfoHint();//列表名
		}
		pagectrl++;
		(*p)->printInfo();
		p++;
		
	}
	system("pause");

	
};
static void report()
{
	ofstream salarydata;

	salarydata.open(CFunction::salaryfilename.c_str());
	CEmployee::printInfoHint(salarydata);//列表名

	list<CEmployee *>::iterator p=CFunction::_emplyeelist.begin();
	while(p!=_emplyeelist.end())
	{	

		(*p)->printInfo(salarydata);
		p++;
		
	}
	salarydata.close();
}
static string getnameformline(char * line)
{
string str(line);
return str.substr(10,10);

	

}
static string getsexformline(char * line)
{
string str(line);
return str.substr(35,2);



}
static string getbirthformline(char * line)
{
string str(line);
return	str.substr(45,10);



}
static float getpayformline(char * line)
{
	string str(line);
	return atof(str.substr(60,10).c_str());



}
static string getpositionformline(char * line)
{
	string str(line);
	return str.substr(25,4);
}
static void load()
{

	ifstream f;
	char line[101];
	f.open(CFunction::employeefilename.c_str(),ios::in);

	while(f.good())
	{

		f.getline(line,100);
		string str(line);
		if (f.good()) {
			if (CFunction::getpositionformline(line)=="經理")
			{
				CManager *m=new CManager(CFunction::getnameformline(line),CFunction::getsexformline(line),CFunction::getbirthformline(line));	
				
				m->setSalary(getpayformline(line));
				CFunction::push_back(m);
				
			
			}
			if (CFunction::getpositionformline(line)=="時工")
			{
				CWage *m=new CWage(CFunction::getnameformline(line),CFunction::getsexformline(line),CFunction::getbirthformline(line));
				//因為只關心薪金,所以下邊的實現是可行的
				m->setHours(1);
				m->setWage(getpayformline(line));
				CFunction::push_back(m);
			
			}
			if (CFunction::getpositionformline(line)=="銷售")
			{
				CSales *m=new CSales(CFunction::getnameformline(line),CFunction::getsexformline(line),CFunction::getbirthformline(line));
				//因為只關心薪金,所以下邊的實現是可行的
				m->setHours(1);
				m->setWage(getpayformline(line));				
				CFunction::push_back(m);
			
			}
		}

	//	if (f.good()) cout<<line<<endl<<<<endl;
	}

	f.close();

}
static void save()
{
	ofstream salarydata;
	salarydata.open(CFunction::employeefilename.c_str());
//	CEmployee::printInfoHint(salarydata);//列表名

	list<CEmployee *>::iterator p=CFunction::_emplyeelist.begin();
	while(p!=_emplyeelist.end())
	{	

		(*p)->printInfo(salarydata);
		p++;
		
	}
	salarydata.close();

}
static void sortbyid()
{


	list<CEmployee *>::iterator begin,end,p1,p2,temp;
	begin=CFunction::_emplyeelist.begin();
	end=CFunction::_emplyeelist.end();
//因為用迭代器,有些指針有的操作迭代器沒有,所以下邊的代碼看起來可能會有些奇怪
	//而且即使用for,判斷停止的時候一樣是用!=。

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
夜夜嗨av一区二区三区| 欧美性xxxxx极品少妇| 青娱乐精品视频| 亚洲午夜激情av| 亚洲成人av电影在线| 亚洲高清视频中文字幕| 婷婷久久综合九色综合绿巨人 | 亚洲自拍偷拍九九九| 亚洲嫩草精品久久| 一区二区三区国产精华| 亚洲一二三四在线| 极品销魂美女一区二区三区| 日精品一区二区| 麻豆极品一区二区三区| 韩国理伦片一区二区三区在线播放| 麻豆精品久久久| 国产精品一区二区免费不卡| 国产电影一区在线| 99久久精品免费看| 欧美性猛片aaaaaaa做受| 欧美日韩精品久久久| 欧美顶级少妇做爰| 欧美一级国产精品| 在线播放国产精品二区一二区四区| 日韩视频一区二区在线观看| 久久精品免视看| 亚洲精品免费视频| 午夜激情久久久| 国产99久久久国产精品免费看| 一本大道久久精品懂色aⅴ| 欧美久久婷婷综合色| 欧美伦理影视网| 久久亚洲春色中文字幕久久久| 欧美经典三级视频一区二区三区| 亚洲综合在线五月| 国产一区二区0| 欧美麻豆精品久久久久久| 欧美国产一区二区| 肉肉av福利一精品导航| 丁香婷婷综合激情五月色| 欧美日韩国产精选| 国产精品人人做人人爽人人添| 日韩激情一区二区| 91麻豆国产香蕉久久精品| 日韩欧美国产综合在线一区二区三区| 中文字幕av资源一区| 日本麻豆一区二区三区视频| www.av精品| 这里只有精品免费| 亚洲激情一二三区| 国产99久久久国产精品免费看| 69久久夜色精品国产69蝌蚪网| 136国产福利精品导航| 久久精品国产网站| 欧洲精品中文字幕| 国产精品高清亚洲| 国产传媒欧美日韩成人| 欧美成人vr18sexvr| 天堂午夜影视日韩欧美一区二区| 99精品视频一区二区| 国产日韩精品久久久| 久久成人免费日本黄色| 4438x成人网最大色成网站| 亚洲精品免费视频| 色悠悠久久综合| 亚洲视频每日更新| yourporn久久国产精品| 国产精品三级视频| 国产iv一区二区三区| 国产色一区二区| 国产69精品久久久久777| 久久精品视频在线免费观看| 国精产品一区一区三区mba视频| 欧美一区中文字幕| 蜜臀a∨国产成人精品| 日韩一区二区三区av| 日本不卡视频在线| 欧美一卡二卡三卡| 久久精品免费看| 久久色在线视频| 国产 日韩 欧美大片| 国产精品乱码妇女bbbb| 94色蜜桃网一区二区三区| 亚洲乱码国产乱码精品精小说 | 中文字幕一区av| 色婷婷综合久久| 亚洲成av人影院在线观看网| 精品视频在线免费| 日韩avvvv在线播放| 精品99999| 波多野结衣欧美| 亚洲午夜电影在线| 精品欧美久久久| kk眼镜猥琐国模调教系列一区二区| 中文字幕综合网| 欧美二区乱c少妇| 国产一区二区三区综合| 中文字幕亚洲一区二区va在线| 在线观看日韩国产| 青青草一区二区三区| 国产欧美日韩精品a在线观看| av成人动漫在线观看| 五月天视频一区| 久久免费美女视频| 日本韩国欧美国产| 美女mm1313爽爽久久久蜜臀| 国产精品女主播av| 欧美日韩一区国产| 国产精品77777| 午夜精品久久久久久久久久| 久久精品免视看| 337p亚洲精品色噜噜噜| www.欧美日韩| 蜜桃视频一区二区| 一区二区在线免费| 久久久精品综合| 在线不卡的av| 91丨porny丨最新| 国产一区二区调教| 亚洲国产日韩在线一区模特| 久久久久久免费| 欧美欧美欧美欧美首页| 成人性生交大片免费看在线播放 | 久久99国产精品免费| 亚洲人成网站色在线观看| 欧美久久久久久久久久| 国产成人亚洲综合a∨猫咪 | 91精品国产美女浴室洗澡无遮挡| 粉嫩高潮美女一区二区三区 | 亚洲国产日产av| 国产精品久久久久久久久动漫| 欧美一区二区在线免费观看| 色哟哟国产精品| 国产精品亚洲人在线观看| 日本91福利区| 一区二区三区蜜桃网| 中文乱码免费一区二区| 欧美本精品男人aⅴ天堂| 欧美性一二三区| 91免费在线播放| 91视频免费观看| 99久久免费精品高清特色大片| 粉嫩久久99精品久久久久久夜 | 亚洲精品视频一区二区| 国产精品久久久久桃色tv| 精品日韩在线一区| 日韩美一区二区三区| 91精品国产综合久久小美女| 欧美亚洲日本一区| 在线观看三级视频欧美| 在线观看免费视频综合| 欧洲视频一区二区| 在线观看欧美日本| 欧美三级视频在线播放| 在线免费观看日韩欧美| 欧美色视频在线观看| 欧美色综合久久| 欧美一区二区视频网站| 日韩亚洲欧美一区| 精品国产一区二区三区av性色| 亚洲精品一区二区精华| 亚洲精品一区二区精华| 国产精品天干天干在观线| 综合激情成人伊人| 一区二区三区在线不卡| 亚洲一区在线视频观看| 亚洲va国产天堂va久久en| 亚洲成人免费观看| 免费av网站大全久久| 久久99久久精品欧美| 国产99久久久国产精品免费看| 成人一级片在线观看| 日本久久一区二区| 欧美三级视频在线播放| 欧美一区二区三区小说| 久久亚洲影视婷婷| |精品福利一区二区三区| 一区二区三区日韩精品视频| 日韩精品国产欧美| 国产精品1区2区3区| 色999日韩国产欧美一区二区| 91麻豆精品国产91久久久资源速度| 日韩欧美国产三级| 国产精品大尺度| 婷婷开心久久网| 成人av资源站| 欧美久久久影院| 国产精品视频免费看| 午夜视频在线观看一区二区| 狠狠色丁香久久婷婷综| 99久久精品99国产精品| 欧美一区二区三区日韩视频| 中文字幕久久午夜不卡| 亚洲成人黄色小说| 成人黄色777网| 日韩欧美一区中文| 亚洲综合色自拍一区| 国产成人一级电影| 日韩精品专区在线影院重磅| 成人欧美一区二区三区小说 |