文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++实现学校人员管理系统

2024-04-02 19:55

关注

本文实例为大家分享了C++实现学校人员管理系统的具体代码,供大家参考,具体内容如下

题目要求

学校人员管理系统

1、建立一个学校类,在其中定义按照姓名增加人员的增加函数,删除人员的删除的函数和查询函数(以姓名为准)。
2、建立一个人员基类,要具有姓名和性别属性,并有输出函数(可定义为虚函数)。
3、建立一个员工类和一个学生类,均由人员类继承而来。要求:可以输出员工类(学生类)对象的属性(如:姓名、性别和工作证号码或学生学号),分别写出它们的输出函数的具体实现。
4、重载“>>”,实现用cin为员工类、学生类和在职学生类对象赋值。(选做)
5、编写main()主函数,测试上述功能,并以菜单方式实现对各种人员的增加、删除和查询(以姓名为线索)。
6、程序应采用多文件结构。
7、vs2019编译

实验源代码

head.h头文件函数声明



//系统头文件
#include<iostream>
#include<string>
using namespace std;

//全局变量
extern int p ;//保存人类个数
extern int Re;//保存当前学生所在位数
extern int Rs;//保存当前员工所在位数
extern int s ;//保存学生个数
extern int e ;//保存员工个数

//全局类数组的声明
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();//初始化函数
public:
    void setPerson();//调用初始化函数
    void setStatus(string);//设置身份
    string getName();//获取人的名字
    string getStatus();//获取人的身份
    static void setP(int);//当前添加第几个人
    static void setRs(int);//当前添加第几个学生
    static void setRe(int);//当前添加第几个员工
    static int getRe();//获取Re
    static int getRs();//获取Rs
    static int getP();//获取p
    virtual void show();//虚函数
};

//学校类
class school {
private:
    //增加人员
    static bool addPerson();
    //删除人员
    static bool deletePerson();
    //查询人员
    static Person queryPerson();
public:
    static bool getAdd();
    static bool getDel();
    static Person getQue();
};

//学生类
class Student :public Person {
private:
    string StudentNumber;
    string StudentDormitory;
public:
    //构造函数
    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 函数里的函数声明
void view();
bool doSwitch(char n);
extern char n;
char Cin();

Remain.cpp文件实现头文件

#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;



//人初始化函数
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函数
void Person::show() {
    cout << "姓名:" << name << "\t"
        << "性别:" << sex << "\t"
        << "年龄:" << age << "\t"
        << "工作:" << status << "\t";
}


//员工

//空参构造
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;
}

//学生
Student::Student(){}

void Student::show() {

    cout << "学号:" << this->StudentNumber << "\t"
        << "宿舍:" << this->StudentDormitory << endl;
}

int Student::getTotal() {
    return s;
}
void Student::setTotal(int i) {
    s = s + i;
}
string Student::getStuId() {
    return StudentNumber;
}
//学生>>重载
istream& operator >> (istream& i, Student& p) {
    p.setPerson();
    cout << "学号:" << 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("学生");
        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();
}



bool delS() {
    cout << "请输入你要删除的学生学号!" << endl;
    string s;
    cin >> s;
    int Sl = Student::getTotal();
    for (int i = 0; i < Sl; i++) {
        if (s == student[i].getStuId()) {
            //所有数组元素前移
            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()) {
            //所有数组元素前移
            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.学生------" << endl;
        if (school::getAdd()) cout << "添加成功!" << endl;
        else cout << "添加失败!" << endl;
        break;
    case '2':
        cout << "----请说明你要删除的人员种类1.学生,2.员工------" << endl;
        if (school::getDel())cout << "删除成功!"<<endl;
        else cout << "删除失败" << endl;
        break;
    case '3':
        cout << "请输入你要查询人的名字:" << endl;
        Person p = school::getQue();
        string s = p.getStatus();
        if (s == "学生") {
            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 << "------------欢迎来到学校人员管理系统------------" << "\n"
        << "----------------请选择以下选项-------------------" << "\n"
        << "----------------1.添加人员-----------------------" << "\n"
        << "----------------2.删除人员-----------------------" << "\n"
        << "----------------3.查询人员-----------------------" << "\n"
        << "-------------------#退出!--------------------" << endl;
}

Main.cpp撰写main函数

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯