欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實(shí)現(xiàn)學(xué)校人員管理系統(tǒng)

 更新時間:2022年03月16日 15:24:36   作者:梵高的豬v  
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)學(xué)校人員管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C++實(shí)現(xiàn)學(xué)校人員管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下

題目要求

學(xué)校人員管理系統(tǒng)

1、建立一個學(xué)校類,在其中定義按照姓名增加人員的增加函數(shù),刪除人員的刪除的函數(shù)和查詢函數(shù)(以姓名為準(zhǔn))。
2、建立一個人員基類,要具有姓名和性別屬性,并有輸出函數(shù)(可定義為虛函數(shù))。
3、建立一個員工類和一個學(xué)生類,均由人員類繼承而來。要求:可以輸出員工類(學(xué)生類)對象的屬性(如:姓名、性別和工作證號碼或?qū)W生學(xué)號),分別寫出它們的輸出函數(shù)的具體實(shí)現(xiàn)。
4、重載“>>”,實(shí)現(xiàn)用cin為員工類、學(xué)生類和在職學(xué)生類對象賦值。(選做)
5、編寫main()主函數(shù),測試上述功能,并以菜單方式實(shí)現(xiàn)對各種人員的增加、刪除和查詢(以姓名為線索)。
6、程序應(yīng)采用多文件結(jié)構(gòu)。
7、vs2019編譯

實(shí)驗(yàn)源代碼

head.h頭文件函數(shù)聲明

/*頭文件Head.h,聲名所有需要的函數(shù)或者系統(tǒng)頭文件*/

//系統(tǒng)頭文件
#include<iostream>
#include<string>
using namespace std;

//全局變量
extern int p ;//保存人類個數(shù)
extern int Re;//保存當(dāng)前學(xué)生所在位數(shù)
extern int Rs;//保存當(dāng)前員工所在位數(shù)
extern int s ;//保存學(xué)生個數(shù)
extern int e ;//保存員工個數(shù)

//全局類數(shù)組的聲明
extern int maxEmployee;
extern int maxStudent;
extern Employee* employee;
extern Student* student;

//人類聲明
class Person {
private:
?? ?string name;//姓名
?? ?string sex;//性別
?? ?int age;//年齡
?? ?string status;//身份
?? ?void init();//初始化函數(shù)
public:
?? ?void setPerson();//調(diào)用初始化函數(shù)
?? ?void setStatus(string);//設(shè)置身份
?? ?string getName();//獲取人的名字
?? ?string getStatus();//獲取人的身份
?? ?static void setP(int);//當(dāng)前添加第幾個人
?? ?static void setRs(int);//當(dāng)前添加第幾個學(xué)生
?? ?static void setRe(int);//當(dāng)前添加第幾個員工
?? ?static int getRe();//獲取Re
?? ?static int getRs();//獲取Rs
?? ?static int getP();//獲取p
?? ?virtual void show();//虛函數(shù)
};

//學(xué)校類
class school {
private:
?? ?//增加人員
?? ?static bool addPerson();
?? ?//刪除人員
?? ?static bool deletePerson();
?? ?//查詢?nèi)藛T
?? ?static Person queryPerson();
public:
?? ?static bool getAdd();
?? ?static bool getDel();
?? ?static Person getQue();
};

//學(xué)生類
class Student :public Person {
private:
?? ?string StudentNumber;
?? ?string StudentDormitory;
public:
?? ?//構(gòu)造函數(shù)
?? ?Student();
?? ?// >>重載
?? ?friend istream& operator >> (istream& i, Student& p);
?? ?static int getTotal();
?? ?static void setTotal(int);
?? ?string getStuId();
?? ?void show();
};

//員工類
class Employee : public Person {
private:
?? ?string EmployeeNumber;
?? ?string EmployeeDormitory;
public:
?? ?Employee();
?? ?friend istream& operator >> (istream& i, Employee& p);
?? ?static int getTotal();
?? ?static void setTotal(int);
?? ?string getEpyId();
?? ?void show();
};


//main 函數(shù)里的函數(shù)聲明
void view();
bool doSwitch(char n);
extern char n;
char Cin();

Remain.cpp文件實(shí)現(xiàn)頭文件

#include"Head.h"
//引用全局變量
int p = 0;
int s = 0;
int e = 0;
int Re = 0;
int Rs = 0;

int maxEmployee = 1000;
int maxStudent = 1000;
Employee* employee = new Employee[maxEmployee];
Student* student = new Student[maxStudent];
char n;

/*人類*/

//人初始化函數(shù)
void Person::init() {
?? ?cout << "姓名:" << endl;
?? ?cin >> name;

cout << "性別:" << endl;
?? ?cin >> sex;

?? ?cout << "年齡:" << endl;
?? ?cin >> age;
}

//
void Person::setPerson() {
?? ?init();
}

//
string Person::getName() {
?? ?return name;
}

void Person::setP(int i) {
?? ?p = p + i;
}
int Person::getP() {
?? ?return p;
}

void Person::setStatus(string s) {
?? ?status = s;
}

string Person::getStatus() {
?? ?return status;
}

void Person::setRs(int j) {
?? ?Rs = j;
}
void Person::setRe(int j) {
?? ?Re = j;
}
int Person::getRs() {
?? ?return Rs;
}
int Person::getRe() {
?? ?return Re;
}

//人類show函數(shù)
void Person::show() {
?? ?cout << "姓名:" << name << "\t"
?? ??? ?<< "性別:" << sex << "\t"
?? ??? ?<< "年齡:" << age << "\t"
?? ??? ?<< "工作:" << status << "\t";
}


//員工

//空參構(gòu)造
Employee::Employee(){}

void Employee::show() {
?? ?cout << "工號:" << EmployeeNumber << "\t"
?? ??? ?<< "宿舍:" << EmployeeDormitory << endl;
}

int Employee::getTotal() {
?? ?return e;
}
void Employee::setTotal(int i) {
?? ?e = e + i;
}
string Employee::getEpyId() {
?? ?return EmployeeNumber;
}
//員工>>重載
istream& operator >> (istream& i, Employee& p) {
?? ?p.setPerson();
?? ?cout << "工號:" << endl;
?? ?i >> p.EmployeeNumber;
?? ?cout << "宿舍:" << endl;
?? ?i >> p.EmployeeDormitory;
?? ?return i;
}

//學(xué)生
Student::Student(){}

void Student::show() {

?? ?cout << "學(xué)號:" << this->StudentNumber << "\t"
?? ??? ?<< "宿舍:" << this->StudentDormitory << endl;
}

int Student::getTotal() {
?? ?return s;
}
void Student::setTotal(int i) {
?? ?s = s + i;
}
string Student::getStuId() {
?? ?return StudentNumber;
}
//學(xué)生>>重載
istream& operator >> (istream& i, Student& p) {
?? ?p.setPerson();
?? ?cout << "學(xué)號:" << endl;
?? ?i >> p.StudentNumber;
?? ?cout << "宿舍:" << endl;
?? ?i >> p.StudentDormitory;
?? ?return i;
}

/*添加
*/
bool school::addPerson() {
?? ?int n;
?? ?cin >> n;
?? ?if (n != 1 && n != 2) return false;
?? ?if (n == 2) {
?? ??? ?Student t;
?? ??? ?cin >> t;
?? ??? ?t.setStatus("學(xué)生");
?? ??? ?student[Student::getTotal()] = t;
?? ??? ?Student::setTotal(1);
?? ??? ?Person::setP(1);
?? ??? ?return true;
?? ?}
?? ?if (n == 1) {
?? ??? ?Employee e;
?? ??? ?cin >> e;
?? ??? ?e.setStatus("員工");
?? ??? ?employee[Employee::getTotal()] = e;?? ??? ?
?? ??? ?Employee::setTotal(1);
?? ??? ?Person::setP(1);
?? ??? ?return true;
?? ?}
?? ?return false;
}
bool school::getAdd() {
?? ?return addPerson();
}

/*刪除員工和學(xué)生,刪除對象*/

bool delS() {
?? ?cout << "請輸入你要刪除的學(xué)生學(xué)號!" << endl;
?? ?string s;
?? ?cin >> s;
?? ?int Sl = Student::getTotal();
?? ?for (int i = 0; i < Sl; i++) {
?? ??? ?if (s == student[i].getStuId()) {
?? ??? ??? ?//所有數(shù)組元素前移
?? ??? ??? ?for (int j = i; j < Sl; j++) {
?? ??? ??? ??? ?student[j] = student[j + 1];
?? ??? ??? ?}
?? ??? ??? ?Student::setTotal(-1);
?? ??? ??? ?return true;
?? ??? ?}
?? ?}
?? ?return false;
}

bool delE() {
?? ?cout << "請輸入你要刪除的員工工號!" << endl;
?? ?string s;
?? ?cin >> s;
?? ?int El = Employee::getTotal();
?? ?for (int i = 0; i < El; i++) {
?? ??? ?if (s == employee[i].getEpyId()) {
?? ??? ??? ?//所有數(shù)組元素前移
?? ??? ??? ?for (int j = i; j < El; j++) {
?? ??? ??? ??? ?employee[j] = employee[j + 1];
?? ??? ??? ?}
?? ??? ??? ?Employee::setTotal(-1);
?? ??? ??? ?return true;
?? ??? ?}
?? ?}
?? ?return false;
}


bool school::deletePerson() {
?? ?int n;
?? ?cin >> n;
?? ?if (n != 1 && n != 2) return false;
?? ?if (n == 1) {
?? ??? ?return delS();
?? ?}
?? ?else return delE();
?? ?return false;
}


bool school::getDel() {
?? ?return deletePerson();
}

//查詢

Person school::queryPerson() {
?? ?string s;
?? ?cin >> s;
?? ?Person p;
?? ?for (int j = 0; j < Student::getTotal(); j++) {
?? ??? ?if (s == student[j].getName()) {
?? ??? ??? ?student[j].setRs(j);
?? ??? ??? ?p = (Person)student[j];
?? ??? ??? ?break;
?? ??? ?}
?? ?}
?? ?for (int j = 0; j < Employee::getTotal(); j++) {
?? ??? ?if (s == employee[j].getName()) {
?? ??? ??? ?employee[j].setRe(j);
?? ??? ??? ?p=(Person)employee[j];
?? ??? ??? ?break;
?? ??? ?}
?? ?}
?? ?return p;
}

Person school::getQue(){
?? ?return queryPerson();
}

//菜單
bool doSwitch(char n) {
?? ?if (n == '#')return false;
?? ?switch (n)
?? ?{
?? ?case '1':
?? ??? ?cout << "----請說明你要添加的人員種類1.員工,2.學(xué)生------" << endl;
?? ??? ?if (school::getAdd()) cout << "添加成功!" << endl;
?? ??? ?else cout << "添加失敗!" << endl;
?? ??? ?break;
?? ?case '2':
?? ??? ?cout << "----請說明你要刪除的人員種類1.學(xué)生,2.員工------" << endl;
?? ??? ?if (school::getDel())cout << "刪除成功!"<<endl;
?? ??? ?else cout << "刪除失敗" << endl;
?? ??? ?break;
?? ?case '3':
?? ??? ?cout << "請輸入你要查詢?nèi)说拿郑? << endl;
?? ??? ?Person p = school::getQue();
?? ??? ?string s = p.getStatus();
?? ??? ?if (s == "學(xué)生") {
?? ??? ??? ?int j = p.getRs();
?? ??? ??? ?Student s = student[j];
?? ??? ??? ?Person p = (Person)s;
?? ??? ??? ?p.show();
?? ??? ??? ?s.show();
?? ??? ?}
?? ??? ?else if (s == "員工") {
?? ??? ??? ?int j = p.getRe();
?? ??? ??? ?Employee s = employee[j];
?? ??? ??? ?Person p = (Person)s;
?? ??? ??? ?p.show();
?? ??? ??? ?s.show();
?? ??? ?}
?? ??? ?else cout << "找不到該人!" << endl;
?? ??? ?break;
?? ?}
?? ?return true;?? ?
}

char Cin() {
?? ?cin >> n;
?? ?return n;
}
void view() {
?? ?cout << "------------歡迎來到學(xué)校人員管理系統(tǒng)------------" << "\n"
?? ??? ?<< "----------------請選擇以下選項(xiàng)-------------------" << "\n"
?? ??? ?<< "----------------1.添加人員-----------------------" << "\n"
?? ??? ?<< "----------------2.刪除人員-----------------------" << "\n"
?? ??? ?<< "----------------3.查詢?nèi)藛T-----------------------" << "\n"
?? ??? ?<< "-------------------#退出!--------------------" << endl;
}

Main.cpp撰寫main函數(shù)

#include"Head.h"
int main() {
?? ?while (true) {
?? ??? ?view();?
?? ??? ?if (!doSwitch(Cin())) {
?? ??? ??? ?delete[] student;
?? ??? ??? ?delete[] employee;
?? ??? ??? ?break;
?? ??? ?}?? ??? ?
?? ?}
?? ?return 0;
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言:利用指針編寫程序,用梯形法計(jì)算給定的定積分實(shí)例

    C語言:利用指針編寫程序,用梯形法計(jì)算給定的定積分實(shí)例

    今天小編就為大家分享一篇C語言:利用指針編寫程序,用梯形法計(jì)算給定的定積分實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • C++選擇排序算法實(shí)例詳解

    C++選擇排序算法實(shí)例詳解

    這篇文章主要為大家詳細(xì)介紹了C++選擇排序算法實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Windows下ncnn環(huán)境配置教程詳解(VS2019)

    Windows下ncnn環(huán)境配置教程詳解(VS2019)

    這篇文章主要介紹了Windows下ncnn環(huán)境配置(VS2019),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • C++全密碼生成的實(shí)現(xiàn)代碼

    C++全密碼生成的實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了C++全密碼生成的實(shí)現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • C++11中std::move、std::forward、左右值引用、移動構(gòu)造函數(shù)的測試問題

    C++11中std::move、std::forward、左右值引用、移動構(gòu)造函數(shù)的測試問題

    這篇文章主要介紹了C++11中std::move、std::forward、左右值引用、移動構(gòu)造函數(shù)的測試,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • C語言實(shí)現(xiàn)串的順序存儲表示與基本操作

    C語言實(shí)現(xiàn)串的順序存儲表示與基本操作

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)串的順序存儲表示與基本操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 使用C++的ORM框架QxORM詳解

    使用C++的ORM框架QxORM詳解

    這篇文章主要介紹了使用C++的ORM框架QxORM的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C++二分法在數(shù)組中查找關(guān)鍵字的方法

    C++二分法在數(shù)組中查找關(guān)鍵字的方法

    這篇文章主要介紹了C++二分法在數(shù)組中查找關(guān)鍵字的方法,涉及C++數(shù)組查找算法的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • C語言形參和實(shí)參的區(qū)別詳解

    C語言形參和實(shí)參的區(qū)別詳解

    在函數(shù)定義和調(diào)用過程中,形參和實(shí)參是非常重要的概念,本文主要介紹了C語言形參和實(shí)參的區(qū)別,具有一定的參考價值,感興趣的可以了解一下
    2023-05-05
  • C++拷貝構(gòu)造函數(shù)中的陷阱

    C++拷貝構(gòu)造函數(shù)中的陷阱

    這篇文章主要介紹了C++拷貝構(gòu)造函數(shù)中的陷阱,拷貝構(gòu)造函數(shù)大家都比較熟悉,通俗講就是傳入一個對象,拷貝一份副本。不過看似簡單的東西,實(shí)際不注意的話就會產(chǎn)生問題,下面我們就來看看C++拷貝構(gòu)造函數(shù)中都有哪些陷阱吧
    2022-01-01

最新評論