@图灵不吃苹果 #C++ 人员管理

@图灵不吃苹果
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;
            }
         }
      }
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值