当前位置:   article > 正文

c++ 实现人员管理_设计一个工人类(cworker), 数据成员:员工编号、姓名、出生日期; 成员函数:构造函

设计一个工人类(cworker), 数据成员:员工编号、姓名、出生日期; 成员函数:构造函
功能:设计某小型公司的employee(职员)类

  • (1)employee类:
    基本信息:编号、姓名、性别、出生日期、职位等
    出生日期采用自定义的Date类
    其中:基本信息为private属性,成员函数为public属性
    employee类有多个构造函数:缺省构造函数、带参数的构造函数、带默认参数的构造函数;可以从外部访问类成员的友元函数
    (2)Date类
    成员变量:年、月、日
    成员函数:SetYear(int year)、SetMonth(int month)、SetDay(int day)、GetYear()、GetMonth()、GetDay()
  • 基本功能
    (1)职工信息的录入
    (2)职工信息的显示
    (3)用对象数组保存已输入的职工对象
    (4)可以修改人员的基本信息,如:姓名、职位等
    (5)可以通过编号或姓名进行人员查询
注意:
//1、注意带参数的构造函数和带默认参数的构造函数的定义与声明
//2、定义employee类的成员变量时,应注意变量类型的声明
//3、在查询时,通过声明成emplyee的友元函数来访问类的成员变量
  • 1
  • 2
  • 3
  • 4
代码:
#include<iostream>
#include<string.h>
#define N 100   //总的职员个数 
using namespace std;

//Date类 
class Date
{
	public:
		Date();
		Date(int year, int month, int day);
		~Date(void);
		void SetYear(int year);
		void SetMonth(int month);
		void SetDay(int day);
		int GetYear();
		int GetMonth();
		int GetDay();
		
	private:
		int year;
		int month;
		int day;
};

//employee类
class Employee
{
	public:
		Employee();
		Employee( int ,int, int, string, string, char, string);
		~Employee(void);
		void SetInfo(int year, int month, int day, string number, string name, char sex, string position);
		void Show();
		
		friend int searchInfo(Employee* obj, string index)
		{
			if(index==obj->name||index==obj->number){
				cout<<"查询到关于"<<index<<"的相关信息如下:"<<endl;
				cout<<"姓名:"<<obj->name<<endl;
				cout<<"编号:"<<obj->number<<endl;
				cout<<"性别:"<<obj->sex<<endl;
				cout<<"出生日期:"<<obj->birthDay.GetYear()<<"-"<<obj->birthDay.GetMonth()<<"-"<<obj->birthDay.GetDay()<<endl;
				cout<<"职位:"<<obj->position<<endl;
				return 1;
			}
			else  return -1;
		}
	
	private:
		string number;
		string name;
		char sex;
		Date birthDay;
		string position;
 };
 
Employee::Employee()
{
	cout<<"Employee object is being created by constructor without parameters!"<<endl;
}

Employee::Employee(int year, int month, int day, string number, string name, char sex, string position):birthDay(year,month,day),number(number),name(name),sex(sex),position(position)
{
	cout<<"Employee object is being created by constructor with parameters!"<<endl;
}

Employee::~Employee(void)
{
	cout<<"Employee object is being deleted!"<<endl;
}

void Employee::SetInfo(int year, int month, int day, string number, string name, char sex, string position)
{
	this->birthDay.SetYear(year);
	this->birthDay.SetMonth(month);
	this->birthDay.SetDay(day); 
	this->number=number;
	this->name=name;
	this->sex=sex;
	this->position=position; 
}

void Employee::Show()
{
	cout<<"职员"<<this->name<<"的基本信息如下:"<<endl;
	cout<<"\t编号:"<<this->number<<endl;
	cout<<"\t性别:"<<this->sex<<endl;
	cout<<"\t出生日期:"<<this->birthDay.GetYear()<<"-"<<this->birthDay.GetMonth()<<"-"<<this->birthDay.GetDay()<<endl;
	cout<<"\t职位:"<<this->position<<endl; 
}


Date::Date(void)
{
	cout<<"Date object is being created by constructor without parameters!"<<endl;
}

Date::Date(int year, int month, int day):year(year),month(month),day(day)
{
	cout<<"Date object is being created by constructor with paramters!"<<endl;
}

Date::~Date(void)
{
	cout<<"Date object is being deleted!"<<endl;
}

void Date::SetYear(int year)
{
	this->year=year;
}

void Date::SetMonth(int month)
{
	this->month=month;
}

void Date::SetDay(int day)
{
	this->day=day;
}

int Date::GetYear()
{
	return year;
}

int Date::GetMonth()
{
	return month;
}

int Date::GetDay()
{
	return day;
}

//程序的主函数
int main()
{
	string number;
	string name;
	char sex;
	int year;
	int month;
	int day;
	string position;
	int input; //存放此次要录入信息的职员的个数 
	int total=0; //存放已录入信息的职员总数 
	int choice;//用户选择项 
	char flag; //判断释放需要修改信息 
	bool tag=true;//判断是否查询成功 
	string index;
	Employee *emp[N];
	while(1){
		cout<<"*****************************"<<endl;
		cout<<"*     1、职工信息录入       *"<<endl;
		cout<<"*     2、职工信息的显示     *"<<endl;
		cout<<"*     3、查询职工信息       *"<<endl;
		cout<<"*     0、退出               *"<<endl;
		cout<<"*****************************"<<endl;
		cout<<"请输入您的选项:"<<endl;
		cin>>choice;
		switch(choice){
			case 1:
				cout<<"请输入您要录取信息的职工个数:"<<endl;
				cin>>input;
				for(int i=0;i<input;i++){
					cout<<endl<<"请输入职工"<<i+1<<"的信息:"<<endl;
					cout<<"编号:";
					cin>>number;
					cout<<flush<<"姓名:";
					cin>>name;
					cout<<flush<<"性别(F/M):";
					cin>>sex; 
					cout<<flush<<"出生年月日:";
					cin>>year>>month>>day; 
					cout<<flush<<"职位:";
					cin>>position;
					emp[total+i]=new Employee(year,month,day,number,name,sex,position); 
					cout<<endl<<"是否需要对职工"<<name<<"的信息进行修改?Y/N"<<endl;
                    cin>>flag;
                    if(flag=='Y'||flag=='y'){
					    cout<<"请输入修改后职工"<<name<<"的信息:"<<endl;
						cout<<"编号:";
						cin>>number;
						cout<<flush<<"姓名:";
						cin>>name;
						cout<<flush<<"性别(F/M):";
						cin>>sex; 
						cout<<flush<<"出生年月日:";
						cin>>year>>month>>day;
						cout<<flush<<"职位:";
						cin>>position;
				        emp[total+i]->SetInfo(year,month,day,number,name,sex,position);
				        cout<<"信息修改成功!"<<endl;
					}
				}
				total=total+input;
				cout<<endl;
				break;
			case 2:
				cout<<"\n以下是已录入的所有职工的信息,共"<<total<<"个:\n"<<endl;
				for(int i=0;i<total;i++){
					emp[i]->Show();
				}
				cout<<endl;
				break;
			case 3:
				cout<<"\n请输入您要查询的职工名字或者编号:"<<endl;
				cin>>index;
				for(int i=0;i<total;i++){
					if( searchInfo(emp[i], index)>0 ){
						tag=false; 
						continue;
					}
				}
				if(tag){
					cout<<"很抱歉,没有查找到相关的信息,也许是信息还未录入!" <<endl;
				}
				tag=true;   //标志型的数据,在用完之后一定要恢复原来的值! 
				cout<<endl;
				break;
			case 0:
				for(int i=0;i<total;i++){
		            delete emp[i];
	            }
				exit(0);
			default:
				cout<<"输入不正确!"<<endl; 
		}
	}
	return 0;
 } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
运行结果截屏:

在这里插入图片描述

参考资料:

c++构造函数的默认参数
c++动态对象数组的知识总结
c++对象数组中delete 和 delete[] 的区别
c++对象数组调用构造/析构函数的方法

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/910855
推荐阅读
相关标签
  

闽ICP备14008679号