c++实训,学校人员管理系统

题目要求

学校人员管理系统

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

实验源代码

head.h头文件函数声明

/*头文件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;
}

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
1、问题描述 某高校有四类员工教师、实验员、行政人员教师兼行政人员共有的信息包括编号、姓名、性别、年龄等。其中教师还包含的信息有所在系部、专业、职称实验员还包含的信息由所在实验室、职务行政人员还包含的信息有政治面貌、职称等。 2、功能要求 (1)添加功能程序能够任意添加上述四类人员的记录可提供选择界面供用户选择所要添加的人员类别要求员工的编号要唯一如果添加了重复编号的记录时则提示数据添加重复并取消添加。 (2)查询功能可根据编号、姓名等信息对已添加的记录进行查询如果未找到给出相应的提示信息如果找到则显示相应的记录信息。 (3)显示功能可显示当前系统中所有记录每条记录占据一行。 (4)编辑功能可根据查询结果对相应的记录进行修改修改时注意编号的唯一性。 (5)删除功能主要实现对已添加的人员记录进行删除。如果当前系统中没有相应的人员记录则提示“记录为空”并返回操作否则输入要删除的人员的编号或姓名根据所输入的信息删除该人员记录如果没有找到该人员信息则提示相应的记录不存。 (6)统计功能能根据多种参数进行人员的统计。能统计四类人员数量以及总数,统计男、女员工的数量。 (7)保存功能可将当前系统中各类人员记录存入文件中存入方式任意。 (8)读取功能可将保存在文件中的人员信息读入到当前系统中供用户进行使用。
修正了已发现的所有错误.欢迎大家下载试用.. 一、项目名称:学校学生信息管理系统。 二、项目目标:实现对学校学生的信息管理——信息的建立和维护、信息的检索。 三、主要功能: 1.信息的输入:建立学生档案文件。 2.信息维护: 添加:增加新学生; 修改:学生信息的改变; 删除:学生减少。 3.信息处理 按要求检索学生信息; 按要求统计信息。 四、界面系统 1.系统管理员进入 (请输入密码) 2.一级菜单 (1 信息维护 2 信息检索 3 信息统计 4 退出) 3. 二级菜单 信息维护 (1 建立学生成绩文件 2 添加学生记录 3 删除学生记录 4 修改学生记录 5 返回上级菜单) 信息检索 (1 按班级查找 2 返回上级菜单) 信息统计 (1 成绩统计 2 返回上级菜单) 五、主要功能说明: 1.用口令(密码)形式验证管理员身份(可输入三次),合法者可进入,否则程序结束。 2.有关功能说明 1)建立学生成绩表(模块a) 建立新的学生成绩文件; 建立若干学生记录,包括姓名、学号、班级、课程编号、成绩。 2)添加学生记录(模块b) 在已存在的学生成绩文件中添加新记录。 3)删除学生记录(模块c) 在学生成绩文件中删除有三门课程不及格的学生记录; 删除前,逐条显示符合删除条件的学生姓名、成绩,确认后再删除。 4)修改学生信息(模块d) 输入学生学号,在学生成绩文件中找出该学生记录; 在屏幕上逐条显示该学生的各条记录; 每显示一条,询问是否修改,如果“Y”,输入修改后数据, 将文件原记录删除,保存新的记录; 5)按姓名和班级查找(模块e) 输入姓名显示相应信息。 6)信息统计(模块f) 同时按照班级和课程统计每门课程、每个班级的平均成绩,最高分、最低分; 在屏幕上先依次显示各门课程,对应的各个班级的统计数据。 7)退出信息管理系统,返回操作系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值