@圖靈不吃蘋果 #C++ 人員管理

圖靈不吃蘋果發表於2020-10-23

@圖靈不吃蘋果
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;
            }
         }
      }
}

相關文章