Esempio n. 1
0
File: Database.cpp Progetto: wkcn/HR
void Database::Detail(int id){
	//显示编号为id的员工的详细资料
	if (staffs.count(id) == 0){
		cout << "不存在编号为" << id <<"的成员" << endl;
		return;
	}
	Staff *p = staffs[id];
	cout << "姓名:" << p->GetName() <<"\t编号:"<<id<<"\t年龄:"<< p->GetAge()<<endl;
	static string ssk[] = {"员工","销售员","管理者","销售经理"};
	static string sst[] = {"在职","离职","请假"};
	cout << "职位:" << ssk[int(p->GetKind())];
   	cout << "\t状态:" << sst[int(p -> GetState())];
	cout << endl;
	SalesMan *sa = dynamic_cast<SalesMan*>(p);
	Manager *ma = dynamic_cast<Manager*>(p);
	SalesManager *sam = dynamic_cast<SalesManager*>(p);
	Achievement achi = p -> GetAchievement();
	switch (p->GetKind()){
		case SALESMAN:
			cout << "销售额:" << achi.sales << endl;
			cout << "所归属销售经理编号:" << sa -> GetManagerID();
			cout << endl;break;
		case MANAGER:
			cout << "完成事项数:" << achi.events;
			cout << endl;break;
		case SALESMANAGER:
			cout << "所管理销售人员的总销售额:" << achi.sales;
			cout << "\t完成事项数:" << achi.events << endl;
			cout << "所管理的销售人员: " << endl;
			PrintStaffs(slaves[p->GetID()]);
			break;
		default:
			cout << "资料有误" << endl;
	}
}
Esempio n. 2
0
File: Database.cpp Progetto: wkcn/HR
void Database::Save(){
	//若未修改则不保存
	if (!changed)return;
	changed = false;
	ofstream fout("staff.dat");
	//Form Header
	fout<<"id#name#kind#age#state#manager_id#sales#events\n";	//注意,比如名字输入时要检查,不能存在#
	for(auto &mp : staffs){
		Staff *p = mp.second;

		fout << p->GetID() << "#";
		fout << p->GetName() << "#";
		fout << p->GetKind() << "#";
		fout << p->GetAge() << "#";
		fout << p->GetState() << "#";

		//注意,SalesManager由于继承了SalesMan,其指针也可以转为SalesMan*
		if(p->GetKind() == SALESMAN){
			SalesMan *sa = dynamic_cast<SalesMan*>(p);
			fout << sa->GetManagerID() << "#";
		}else{
			fout << "-1#";
		}

		Achievement ach = p->GetAchievement();
		fout << ach.sales << "#" << ach.events << endl;
	}
	fout.close();
}
Esempio n. 3
0
File: Database.cpp Progetto: wkcn/HR
void Database::PrintStaffs(set<int> &s){
	//根据编号打印员工的姓名及编号
	if (s.size() == 0){
		cout << "无";
	}
	bool first = true;
	for (auto u:s){
		Staff *p = staffs[u];
		if (!first)cout<<",";
		cout << p->GetName()<<"("<<p->GetID()<<")";
		first = false;
 	}
	cout << endl;
} 
Esempio n. 4
0
File: Database.cpp Progetto: wkcn/HR
void Database::Check(){
	//检查哪个销售人员不在管理范围内
	set<int> vs;
	for(auto &mp:staffs){
		Staff *p = mp.second;
		if (p -> GetKind() == SALESMAN){
			SalesMan *sa = dynamic_cast<SalesMan*>(p);
			int manager_id = sa -> GetManagerID();
			if (staffs.count(manager_id) == 0)vs.insert(p->GetID());
		}
	}
	if (vs.empty()){
		cout << "数据库正确" << endl;
	}else{
		cout << "以下销售者不在管理范围内,请更正" << endl;
		PrintStaffs(vs);
	}
}
Esempio n. 5
0
File: Database.cpp Progetto: wkcn/HR
void Database::Show(Exp * filter){

	//若不传入过滤器,则使用全局的viewFilter
	if (!filter)
		filter = viewFilter;

	//获取筛选结果
	vector<Staff *> vs;
	GetStaffList(vs,filter);

	//排序
	sort(vs.begin(),vs.end(),comparer);

	//更正显示页数
	max_page = ceil(vs.size() * 1.0 / page_items);
	if (cur_page > max_page)cur_page = max_page;
	if (cur_page < 1)cur_page = 1;

	//填表,为了显示得更好
	Form form;
	//Header
	form.write(0,0,"ID");
	form.write(0,1,"Name");
	form.write(0,2,"Age");
	form.write(0,3,"State");
	form.write(0,4,"Kind");
	form.write(0,5,"Manager ID");
	form.write(0,6,"Sales");
	form.write(0,7,"Events");

	size_t start = (cur_page - 1) * page_items;
	size_t end = start + page_items;
	//[start,end)
	if (end > vs.size())end = vs.size();
	size_t items = end - start;
	for (size_t i = 0;i < items;++i){
		//多态
		size_t r = start + i;
		Staff *s = vs[r];
		form.write(i+1,0,ITOS(s->GetID()));
		form.write(i+1,1,s->GetName());
		form.write(i+1,2,ITOS(s->GetAge()));
		switch(s->GetState()){
			case ACTIVE:
				form.write(i+1,3,"在职");break;
			case RESIGN:
				form.write(i+1,3,"离职");break;
			case LEAVE:
				form.write(i+1,3,"请假");break;
		}
		switch(s->GetKind()){
			case SALESMAN:
				form.write(i+1,4,"SalesMan");break;
			case MANAGER:
				form.write(i+1,4,"Manager");break;
			case SALESMANAGER:
				form.write(i+1,4,"SalesManager");break;
			case STAFF:
				break;
		}
		SalesMan *psalesman = dynamic_cast<SalesMan*>(s);
	    Manager *pmanager = dynamic_cast<Manager*>(s);
		SalesManager *psalesmanager = dynamic_cast<SalesManager*>(s);
		//因为必定只有3类
		if (psalesmanager){
			form.write(i+1,5,"--");
			Achievement ac = psalesmanager -> GetAchievement();
			form.write(i+1,6,ITOS(ac.sales));
			form.write(i+1,7,ITOS(ac.events));
		}else{
			if (psalesman){
				int manager_id = psalesman -> GetManagerID();
				if (manager_id == -1){
					form.write(i+1,5,"NULL");
				}else{
					form.write(i+1,5,ITOS(manager_id));
				}
				Achievement ac = psalesman -> GetAchievement();
				form.write(i+1,6,ITOS(ac.sales));
				form.write(i+1,7,"--");
			}else{
				form.write(i+1,5,"--");
				Achievement ac = pmanager -> GetAchievement();
				form.write(i+1,6,"--");
				form.write(i+1,7,ITOS(ac.events));
			}
		}
	}	

	cout << "筛选条件:" << filterName << endl;
	form.print();
	cout << "第" << cur_page << "/" << max_page << "页 (共"<<vs.size()<<"项)" << "\t";
	cout << "( n:下一页 N:上一页 gg 39:跳转到39页 )" << endl;

}