@图灵不吃苹果
C++ 人员管理(带注释)
设计某小型公司的 employee(人员)类
1、类
1)employee 类:
基本信息:编号、姓名、性别、出生日期、职位等;
出生日期使用自定义的 Date(日期)类;
其中:基本信息为 private 属性,成员函数为public 属性;
多个构造函数:缺省构造函数、带参数的构造函数、带默认参数的构造函数;
可以从外部访问类成员的友员函数;
2)Date 类:成员变量:年、月、日成员函数:SetYear(int year)、SetMonth(int month)、SetDay(int day)GetYear()、GetMonth()、GetDay()
2、基本功能:
1)职工信息的录入;
2)职工信息的显示;
3)用对象数组保存已输入的职工对象;
4)可以修改人员的基本信息,如:姓名、职位等;
5)可以通过编号或姓名进行人员查询;
[实验提示]
1、注意带参数的构造函数和带默认参数的构造函数的声明与定义;
2、定义employee 类的成员变量时,应注意变量类型的声明;
3、在查询时,通过申明成employee 类的友元函数来访问类的成员变量;
[测试数据]
1、编号:10001 姓名:jack 出生日期:80 年11 月1 日 职位:普通
2、编号:10002 姓名:andy 出生日期:75 年1 月9 日 职位:经理
3、编号:10003 姓名:alex 出生日期:81 年4 月3 日 职位:秘书
4、编号:10005 姓名:lili 出生日期:82 年10 月1 日 职位:技师
代码部分
<头文件employee.>
本来想设计一下链表,但是后来老是出问题…就懒得弄了
#pragma once
#include <ostream>
using namespace std;
class Date {
public:
void setYear(int ye);
void setMonth(int mon);
void setDay(int da);
int getYear();
int getMonth();
int getDay();
friend ostream& operator<<(ostream& out, Date&a);
private:
int year;
int month;
int day;
};
class employee {
public:
employee();
employee(int i);
void setID(int i);
void setName(string n);
void setBirth(Date b);
void setSexual(char s);
void setJob(string j);
//employee* next;
// void setNext(employee* next);
// employee* getNext();
void print();
private:
int id;
string name;
Date birth;
char sexual;
string job;
friend int findID(employee& p,int i);
friend int findName(employee& p, string s);
};
/*class List {
public:
void Input(employee* s);
List();
void bianli();
private:
employee* head;
};
*/
#pragma once
<employee.cpp>
#include "employee.h"
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <chrono> //时间库函数
void Date::setYear(int ye)
{
this->year = ye;
}
void Date::setMonth(int mon)
{
this->month = mon;
}
void Date::setDay(int da)
{
this->day = da;
}
int Date::getYear()
{
return this->year;
}
int Date::getMonth()
{
return this->month;
}
int Date::getDay()
{
return this->day;
}
employee::employee()
{
id = 0;
sexual = 'm';
cout << "缺省参数构造完成" << endl;
}
employee::employee(int i=10)
{
this->id = i;
this->name = "zhang";
this->sexual = 'm';
this->job = "员工";
cout << "带默认参数的函数构造完成" << endl;
}
void employee::setID(int i)
{
this->id = i;
}
void employee::setName(string n)
{
this->name = n;
}
void employee::setBirth(Date b)
{
this->birth = b;
}
void employee::setSexual(char s)
{
this->sexual = s;
}
void employee::setJob(string j)
{
this->job = j;
}
/*void employee::setNext(employee* n)
{
next = n;
}
employee* employee::getNext()
{
return next;
}
*/
void employee::print()
{
cout << "编号: " << id << " 姓名: " << name << " 性别: " << sexual << endl;
cout << "出生日期: "<<birth;
cout <<" 职位 : " << job << endl;
}
ostream& operator<<(ostream& out, Date& a)
{
out << a.year << "年" << a.month << "月" << a.day << "日" ;
return out;
// TODO: 在此处插入 return 语句
}
int findID(employee& p,int i)
{
if (p.id == i) { return 0; }
else return -1;
}
int findName(employee& p, string s)
{
if (p.name == s)return 0;
else return -1;
}
/*ostream& operator<<(ostream& out, Date a)
{
out << Date::year << "年" << month << "月" << day << "日" << endl;
return out;
// TODO: 在此处插入 return 语句
}*/
/*void List::Input(employee* s)
{
employee* p = head;
while (p->getNext() != NULL)
{
p = p->getNext();
}
p = p->setNext(s);
}
List::List()
{
head = new employee;
if (NULL == head)
{
cout << "NULL list" << endl;
}
}
void List::bianli()
{
employee* p = head;
while (p->getNext() != NULL)
{
p = p->getNext();
p->print();
}
}
*/
<main.cpp>
//本来想通过构造List将员工串起来
//但是发现这样可能会报错 而且修改太繁琐 暂且依旧用数组的形式存储吧
//其中注释掉的代码都是 当时准备用链表存储 结果发现不行 就注释了...
//员工的生日用了Date类
//初始化员工信息的时候不用输入id
//自动根据序列号生成id
//Date类里重新构造了输出流 让生日的输出可以更加方便简洁
//修改员工信息中可以通过id 或者 姓名进行定位
//findid和findname都用了友元函数
//友元函数感觉在程序里理解就像是给外部程序一个接口
//可以不用通过类进行调用函数
//使用了一个循环
//同样的为了体现默认构造函数完成 使用了打印“构造完成”这种字样 来确认
#include <iostream>
#include "employee.h"
using namespace std;
int main()
{
//List mylist;
int num, idd;
int nian, yue, ri;
int swi, loc=-1;
string s;
char x;
Date d;
cout << "请输入员工数:";
cin >> num;
employee em[10];
for (int i = 0; i < num; i++) {
//employee* p = new employee;
cout << "请输入姓名:";
cin >> s;
em[i].setName(s);
cout << "请输入性别:";
cin >> x;
//p->setSexual(x);
em[i].setSexual(x);
cout << "请输入出生年/月/日:";
cin >> nian >> yue >> ri;
d.setYear(nian);
d.setMonth(yue);
d.setDay(ri);
em[i].setBirth(d);
cout << "请输入职位:";
cin >> s;
// p->setJob(s);
em[i].setJob(s);
idd = 10000 + i + 1;
//p->setID(idd);
em[i].setID(idd);
//mylist.Input(p);
em[i].print();
}
cout << "-------------------------------------" << endl;
for (int i = 0; i < num; i++)
{
em[i].print();
}
cout << "-------------------------------------" << endl;
while (1)
{
cout << "要通过什么查找:1.姓名 2.编号 (选项0退出)" << endl;
cin >> swi;
switch (swi) {
case 1: {
cout << "请输入要修改的成员姓名:";
cin >> s;
loc = -1;
for (int i = 0; i < num; i++)
{
if ((findName(em[i], s)) == 0) { loc = i; break; }
}
if (loc < 0)
{
cout << "没有找到这个名字;" << endl;
}
break;
}
case 2: {
cout << "请输入要修改的成员编号:";
cin >> idd;
loc = -1;
for (int i = 0; i < num; i++)
{
if ((findID(em[i], idd)) == 0) { loc = i; break; }
}
if (loc < 0) {
cout << "没有找到这个id;" << endl;
}
break;
}
case 0: {
cout << "-------------------------------------" << endl;
for (int i = 0; i < num; i++)
{
em[i].print();
}
cout << "-------------------------------------" << endl;
//mylist.bianli();
return 0;
}
}
if (loc >=0)
{
cout << "要修改什么:1.姓名;2.职位;3.生日;4.ID " << endl;
cin >> swi;
switch (swi)
{
case 1: {
cout << "输入修改后的姓名:";
cin >> s;
em[loc].setName(s);
break;
}
case 2:
{
cout << "输入修改后的职位:";
cin >> s;
em[loc].setJob(s);
break;
}
case 3:
{
cout << "输入修改后的出生日期 年/月/日:";
cin >>nian>>yue>>ri ;
d.setYear(nian);
d.setMonth(yue);
d.setDay(ri);
em[loc].setBirth(d);
break;
}
case 4:
{
cout << "输入修改后的ID:";
cin >> idd;
em[loc].setID(idd);
break;
}
default:break;
}
}
}
}