c++实现高校人员新系统管理系统

高校人员信息管理系统

前言

1.功能简陋,提供给网友学习
2.关键功能为 Read(读文件) 和 Write(写文件)
3.操作数据时都是对vector操作
4.题目

人员基本信息数据有:编号、姓名、性别、出生年月、年龄(必须通过计算得到);人员分为教师和学生两类,
教师又分为行政人员和专任教师两类;教师有参加工作时间、所在系部等信息;行政人员有职务信息;
专任教师有职称信息;学生有专业、所在班级等信息。
具体设计要求实现如下功能:
1.增加一位人员记录
2.显示全部人员记录
3.计算教师平均年龄
4.删除一个人员记录
5.按系部输出人员信息
6.按姓名检索所有息
7.保存
0.退出

废话不多,代码如下.

c++代码

#include <ctime>
#include <iostream>
#include <cstring>
#include<stdlib.h>
#include<fstream>
#include<iomanip>
#include<vector>
using namespace std;

char file1[] = "HM_Student.txt";
char file2[] = "HM_AdminStaff.txt";
char file3[] = "HM_FullTimeStaff.txt";

int CalcuAge(char* birthday){
	time_t nowtime;
	struct tm* p;
	time(&nowtime);
	p = localtime(&nowtime);
	int year = p->tm_year+1900;
	string s;
	s = birthday;
	int age = year - atoi((s.substr(0,4)).c_str());
	return age;
}
//人员类 
class Person{
	private:
		char Id[10];
		char Name[10];
		bool Sex;
		char Birthday[10];
		int Age;
	public:
		Person(){
		}
		virtual ~Person(){
		}
		Person(char* id, char* name, bool sex, char* birthday){
			strcpy(this->Id,id);
			strcpy(this->Name,name);
			this->Sex = sex;
			strcpy(this->Birthday,birthday);
			this->Age = CalcuAge(birthday);
		}
		virtual void toString(){
			if(this->Sex){
				cout << this->Id << setw(17) << this->Name << setw(17) << "男" 
				<< setw(17) 
				<< this->Birthday << setw(17) << this->Age << setw(17);
			}
			else
				cout << this->Id << setw(17)<< this->Name << setw(17) << "女"
				<< setw(17)
				<< this->Birthday << setw(17) << this->Age << setw(17); 
		
		}
		void InputInfo(){
			cout << "id :";
			cin >> this->Id;
			cout << endl << "name :";
			cin >> this->Name;
			cout << endl << "sex(1为男,0为女) :";
			cin >> this->Sex;
			cout << endl << "Birthday :";
			cin >> this->Birthday;
			this->Age = CalcuAge(this->Birthday);
		}
		char *getId(){
			return this->Id;
		}
		char *getName(){
			return this->Name;
		} 
		int getAge(){
			return this->Age;
		} 
};
class Teacher:public Person{
	private:
		int JobTime;//参加工作时间(年) 
		char Department[10];//所在部系 
	public:
		Teacher(){
		}
		Teacher(char* id, char* name, bool sex, char* birthday, int jobtime, char* department)
		:Person(id,name,sex,birthday),JobTime(jobtime){	
			strcpy(this->Department,department);
		}
		~Teacher(){
		}
		void InputTeacInfo(){
			this->InputInfo();
			cout << endl << "JobTime :";
			cin >> this->JobTime;
			cout << endl << "Department :";
			cin >> this->Department;
		}
		void toString(){
			Person::toString();
			cout << this->JobTime << setw(17) << this->Department << setw(17);
		}
		char * getDep(){
			return this->Department;
		}
}; 
class Student:public Person{
	private:
		char Major[10];//专业
		char Class[10];//所在班级 
	public:
		Student(char* id, char* name, bool sex, char* birthday, char* major, char* Class)
		:Person(id,name,sex,birthday){
			strcpy(this->Major,major);
			strcpy(this->Class,Class);
		}
		~Student(){
		}
		Student(){
		}
		void InputStuInfo(){
			cout << "请输入以下学生信息:" << endl;
			this->InputInfo();
			cout << endl << "Major :";
			cin >> this->Major;
			cout << endl << "Class :";
			cin >> this->Class;
			cout << endl;
		}
		void toString(){
			Person::toString();
			cout << this->Major << setw(17) << this->Class << setw(17) << endl;
		}
};
class AdminStaff:public Teacher{
	private:
		char DutyInfo[10];//职务信息 
	public:
		AdminStaff(){
		} 
		AdminStaff(char* id, char* name, bool sex, char* birthday, int jobtime, char* department, char* dutyinfo)
		:Teacher(id,name,sex,birthday,jobtime,department){
			strcpy(this->DutyInfo,dutyinfo);
		}
		~AdminStaff(){
		}
		void InputAdminInfo(){
			this->InputTeacInfo();
			cout << endl << "DutyInfo :";
			cin >> this->DutyInfo;
			cout << endl;
		}
		void toString(){
			Teacher::toString();
			cout << this->DutyInfo << setw(17) << endl;
		}
};
class FullTimeStaff:public Teacher{
	private:
		char TitleInfo[10];//职称信息 
	public:
		FullTimeStaff(){
		}
		FullTimeStaff(char* id, char* name, bool sex, char* birthday, int jobtime, char* department, char* titleinfo)
		:Teacher(id,name,sex,birthday,jobtime,department){
			strcpy(this->TitleInfo,titleinfo);
		} 
		~FullTimeStaff(){
		}
		void InputFullTInfo(){
			this->InputTeacInfo();
			cout << endl << "TitleInfo :";
			cin >> this->TitleInfo;
			cout << endl;
		}
		void toString(){
			Teacher::toString();
			cout << this->TitleInfo << setw(17) << endl;
		}
};

void Welcome(){
	cout << "******************************************************************************************************************" << endl;
	cout << endl;
	cout << endl;
	cout << endl;
	cout << endl;
	cout << endl;
	cout << setw(85) << "欢 迎 使 用 高 校 人 员 信 息 管 理 系 统 !" << endl;
	cout << endl;
	cout << setw(67) << "开发者 zsj" << endl;
	cout << endl;
	cout << endl;
	cout << endl;
	cout << setw(75) << "Copyright zsj 2120027215" << endl;
	cout << endl;
} 
void Select(){
	cout << "******************************************************************************************************************" << endl;
	cout << "1.增加一位人员记录" << endl;
	cout << "2.显示全部人员记录" << endl;
	cout << "3.计算教师平均年龄" << endl;
	cout << "4.删除一个人员记录" << endl;
	cout << "5.按系部输出人员信息" << endl;
	cout << "6.按姓名检索所有信息" << endl;
	cout << "7.保存" << endl;
	cout << "0.退出" << endl;
	cout << endl;
	cout << endl;
	cout << "按相应键以选择以上操作:" << endl;
}
template <class T> 
void Read(vector<T> *v_T_r,char *fileName)
{
    ifstream infile(fileName,ios::in | ios::binary);//以读方式打开文件
    if (!infile)
    {
    	ofstream createfile(fileName);
    	if (!createfile)
    	{
	        cout<<"create file error!"<<endl;
	        exit(0);
    	}
    	createfile.close();
    	ifstream infile(fileName,ios::in | ios::binary);//以读方式打开文件
        if (!infile)
    	{
	        cout<<"open file error!"<<endl;
	        exit(0);
    	}
    }
    T t;
    while (infile.read((char*)&t,sizeof(t)))//强制类型转换为(char*),
    {
        v_T_r->push_back(t);
    }
    infile.close();
} 
template<class T>
void Write_fg(vector<T> *v_T_fg,char *fileName){
	ofstream outfile(fileName,ios::out|ios::binary);
	if(!outfile){
		cout << "open error" << endl;
		exit(-1);
	}
	int n = v_T_fg->size();
	for(int i = 0; i < n; ++i){
		outfile.write((char *)&v_T_fg->at(i),sizeof(v_T_fg->at(i)));
	} 
	outfile.close();
}
template<class T>
void Write(vector<T> *v_T_w,char *fileName){
	ofstream outfile(fileName,ios::app|ios::binary);
	if(!outfile){
		cout << "open error" << endl;
		exit(-1);
	}
	int n = v_T_w->size();
	for(int i = 0; i < n; ++i){
		outfile.write((char *)&v_T_w->at(i),sizeof(v_T_w->at(i)));
	} 
	outfile.close();
}
template<class T> 
void DeleteById(vector<T> *v_T_r,char *fileName){
	Read(v_T_r,fileName);
	char id[10];
	cout << "请输入要删除人员的id:" << endl;
	cin >> id;
	int n = v_T_r->size();
	int i;
	for(i = 0; i < n; ++i){
		if(!(strcmp(v_T_r->at(i).getId(),id))){
			break;
		}
	} 
	vector<T> v_T_w_fg;
	v_T_r->erase(v_T_r->begin()+i);
	v_T_w_fg.assign(v_T_r->begin(), v_T_r->end());
	Write_fg(&v_T_w_fg,fileName);
	v_T_r->clear();
}
template<class T>
void FindByName(vector<T> *v_T_r,char *fileName,int symbol){
	Read(v_T_r,fileName);
	char name[10];
	cout << "请输入要检索的人员姓名:";
	cin >> name;
	int n = v_T_r->size();
	int cnt = 0;
	for(int i = 0; i < n; ++i){
		if(!(strcmp(v_T_r->at(i).getName(),name))){
			++cnt;
		}
	} 
	if(!cnt){
		cout << "查无此人" << endl;
	}
	else {
		if(symbol == 1){
			cout << setw(17) << "Id" << setw(17) << "Name" << setw(17) << "Sex" 
			<< setw(17) << "Birthday" << setw(17) << "Age" << setw(17) << "Major" 
			<< setw(17) << "Class" << setw(17) << endl;
			for(int i = 0; i < n; ++i){
				if(!(strcmp(v_T_r->at(i).getName(),name))){
					v_T_r->at(i).toString();
				}
			} 
		}
		else if(2 == symbol){
			cout << setw(17) << "Id" << setw(17) << "Name" << setw(17) << "Sex" 
			<< setw(17) << "Birthday" << setw(17) << "Age" << setw(17) << "JobTime" 
			<< setw(17) << "Department" << setw(17) << "DutyInfo" << setw(17) << endl;
			for(int i = 0; i < n; ++i){
				if(!(strcmp(v_T_r->at(i).getName(),name))){
					v_T_r->at(i).toString();
				}
			}	
		}
		else{
			cout << setw(17) << "Id" << setw(17) << "Name" << setw(17) << "Sex" 
			<< setw(17) << "Birthday" << setw(17) << "Age" << setw(17) << "JobTime" 
			<< setw(17) << "Department" << setw(17) << "DutyInfo" << setw(17) << endl;
			for(int i = 0; i < n; ++i){
				if(!(strcmp(v_T_r->at(i).getName(),name))){
					v_T_r->at(i).toString();
				}
			}
		} 
	}
	v_T_r->clear();
}
void getTeacAgeAve(vector<AdminStaff> *v_adm_r,vector<FullTimeStaff> *v_ft_r){
	Read(v_adm_r,file2);
	Read(v_ft_r,file3);
	int n1 = v_adm_r->size();
	int n2 = v_ft_r->size();
	int sum = n1 + n2;
	int age1 = 0;
	int age2 = 0;
	for(int i = 0; i < n1; ++i){
		age1 += v_adm_r->at(i).getAge();
	}
	for(int i = 0; i < n2; ++i){
		age2 += v_ft_r->at(i).getAge();
	}
	int avg = (age1 + age2) / sum;
	cout << setw(40) << "教师的平均年龄为(向下取整): " <<  avg;
	v_adm_r->clear();
	v_ft_r->clear();
}
void FindByDep(vector<AdminStaff> *v_adm_r,vector<FullTimeStaff> *v_ft_r){
	Read(v_adm_r,file2);
	Read(v_ft_r,file3);
	char dep[10];
	cout << "请输入要查询的部系:";
	cin >> dep; 
	int n1 = v_adm_r->size();
	int n2 = v_ft_r->size();
	int cnt1 = 0;
	int cnt2 = 0;
	for(int i = 0; i < n1; ++i){
		if(!(strcmp(v_adm_r->at(i).getDep(),dep))){
			++cnt1;
		}
	} 
	for(int i = 0; i < n2; ++i){
		if(!(strcmp(v_ft_r->at(i).getDep(),dep))){
			++cnt2;
		}
	}
	if(!cnt1 && !cnt2){
		cout << "没有该部门" << endl;
	}
	else {
		if(cnt1){
			cout << endl << setw(17) << "行政人员信息如下:" << endl;
			cout << setw(17) << "Id" << setw(17) << "Name" << setw(17) << "Sex" 
			<< setw(17) << "Birthday" << setw(17) << "Age" << setw(17) << "JobTime" 
			<< setw(17) << "Department" << setw(17) << "DutyInfo" << setw(17) << endl;
			for(int i = 0; i < n1; ++i){
				if(!(strcmp(v_adm_r->at(i).getDep(),dep))){
					v_adm_r->at(i).toString();
				}
			} 
		} 
	   	if(cnt2){
			cout << endl << setw(17) << "专任教师信息如下:" << endl; 
			cout << setw(17) << "Id" << setw(17) << "Name" << setw(17) << "Sex" 
			<< setw(17) << "Birthday" << setw(17) << "Age" << setw(17) << "JobTime" 
			<< setw(17) << "Department" << setw(17) << "DutyInfo" << setw(17) << endl;
			for(int i = 0; i < n2; ++i){
				if(!(strcmp(v_ft_r->at(i).getDep(),dep))){
					v_ft_r->at(i).toString();
				}
			} 
		} 
	}
	v_adm_r->clear();
	v_ft_r->clear();
}
void ShowAll(vector<Student> *v_stu_r,vector<AdminStaff> *v_adm_r,vector<FullTimeStaff> *v_ft_r){
	Read(v_stu_r,file1);
	Read(v_adm_r,file2);
	Read(v_ft_r,file3);
	if(v_stu_r->empty() && v_adm_r->empty() && v_ft_r->empty()){
		cout << "并无数据,请先增加数据" << endl; 
	}
	else{
		if(!v_stu_r->empty()){
			cout << endl << setw(17) << "学生信息如下:" << endl; 
			cout << setw(17) << "Id" << setw(17) << "Name" << setw(17) << "Sex" 
			<< setw(17) << "Birthday" << setw(17) << "Age" << setw(17) << "Major" 
			<< setw(17) << "Class" << setw(17) << endl;
			for(vector<Student>::iterator itr = v_stu_r->begin(); itr != v_stu_r->end() ; ++itr)
		    {
		    	itr->toString();
		    }
		}
		if(!v_adm_r->empty()){
			cout << endl << setw(17) << "行政人员信息如下:" << endl; 
			cout << setw(17) << "Id" << setw(17) << "Name" << setw(17) << "Sex" 
			<< setw(17) << "Birthday" << setw(17) << "Age" << setw(17) << "JobTime" 
			<< setw(17) << "Department" << setw(17) << "DutyInfo" << setw(17) << endl;
			for(vector<AdminStaff>::iterator itr = v_adm_r->begin(); itr != v_adm_r->end() ; ++itr)
		    {
		    	itr->toString();
		    }
		}
		if(!v_ft_r->empty()){
			cout << endl << setw(17) << "专任教师信息如下:" << endl; 
			cout << setw(17) << "Id" << setw(17) << "Name" << setw(17) << "Sex" 
			<< setw(17) << "Birthday" << setw(17) << "Age" << setw(17) << "JobTime" 
			<< setw(17) << "Department" << setw(17) << "TitleInfo" << setw(17) << endl;
			for(vector<FullTimeStaff>::iterator itr = v_ft_r->begin(); itr != v_ft_r->end() ; ++itr)
		    {
		    	itr->toString();
		    }
		}
	}
	v_stu_r->clear();
	v_adm_r->clear(); 
	v_ft_r->clear(); 
}
int main(void)
{
	int in,com;
	bool quit = false;
	vector<Student> v_stu_w; 
	vector<Student> v_stu_r; 
	vector<AdminStaff> v_adm_w; 
	vector<AdminStaff> v_adm_r; 
	vector<FullTimeStaff> v_ft_w; 
	vector<FullTimeStaff> v_ft_r; 
	Welcome();
	Student stu;
	AdminStaff as; 
	FullTimeStaff fts;
	do{
		Select();
		cin >> in;
		switch(in){
			case 0: {
				quit=true;
				cout << "感谢使用,bey!";
				break;
			}
			case 1:{
				system("cls");
				do{
					cout << "您选择增加一位人员记录" << endl;
					cout << endl;
					cout << "请选择增加人员类型:" << endl;
					cout << "1.学生" << endl;
					cout << "2.行政人员" << endl;
					cout << "3.专任教师" << endl;
					cout << "0.返回上一步" << endl;
					cin >> com;
					switch(com){
						case 1:{
							cout << "增加学生 " << endl;
							stu.InputStuInfo();
							v_stu_w.push_back(stu);
							break;
						}
						case 2:{
							cout << "增加行政人员" << endl;
							as.InputAdminInfo();
							v_adm_w.push_back(as);
							break;
						} 
						case 3:{
							cout << "增加专任教师 " << endl;
							fts.InputFullTInfo();
							v_ft_w.push_back(fts);
							break;
						} 
						case 0:{
							quit = true;
							system("cls");
							cout << "退出增加人员" << endl;
							break;
						} 
					} 
				} while(!quit);
				quit = false;
				cout << endl; 
				break;
			}
			case 2: {
				system("cls");
				cout << "您选择显示全部人员记录" << endl;
				ShowAll(&v_stu_r,&v_adm_r,&v_ft_r);
				cout << endl; 
				break;
			}
			case 3:{
				system("cls");
				cout << "您选择计算教师平均年龄" << endl << endl;
				getTeacAgeAve(&v_adm_r,&v_ft_r); 
				cout << endl;
				break;
			}
			case 4: {
				system("cls");
				do{ 
					cout << "您选择删除一个人员记录" << endl;
					cout << endl;
					cout << "请选择删除人员类型:" << endl;
					cout << "1.学生" << endl;
					cout << "2.行政人员" << endl;
					cout << "3.专任教师" << endl;
					cout << "0.返回上一步" << endl;
					cin >> com;
					switch(com){
						case 1:{
							cout << "删除学生 " << endl;
							DeleteById(&v_stu_r,file1);
							break;
						}
						case 2:{ 
							cout << "删除行政人员" << endl;
							DeleteById(&v_adm_r,file2);
							break;
						} 
						case 3:{
							cout << "删除专任教师 " << endl;
							DeleteById(&v_ft_r,file3);
							break;
						} 
						case 0:{
							quit = true;
							system("cls");
							cout << "退出删除人员" << endl;
							break;
						} 
					} 
				} while(!quit);
				quit = false;
				cout << endl; 
				break;
			}
			case 5:{
				system("cls");
				cout << "您选择按系部输出人员信息" << endl;
				FindByDep(&v_adm_r,&v_ft_r);
				cout << endl; 
				break;
			}
			case 6:{
				system("cls");
				do{ 
					cout << "您选择按姓名检索所有信息" << endl;
					cout << endl;
					cout << "请选择删检索人员类型:" << endl;
					cout << "1.学生" << endl;
					cout << "2.行政人员" << endl;
					cout << "3.专任教师" << endl;
					cout << "0.返回上一步" << endl;
					cin >> com;
					switch(com){
						case 1:{
							cout << "检索学生 " << endl;
							FindByName(&v_stu_r,file1,1);
							break;
						}
						case 2:{
							cout << "检索行政人员" << endl;
							FindByName(&v_adm_r,file2,2);
							break;
						} 
						case 3:{
							cout << "检索专任教师 " << endl;
							FindByName(&v_ft_r,file3,3);
							break;
						} 
						case 0:{
							quit = true;
							system("cls");
							cout << "退出删除人员" << endl;
							break;
						} 
					} 
				} while(!quit);
				quit = false;
				cout << endl; 
				break;
			}
			case 7:{
				system("cls");
				cout << "保存ing..." << endl;
				if(v_stu_w.empty() && v_adm_w.empty() && v_ft_w.empty()){
					cout << "没有数据可保存哦!" << endl; 
				}
				else{
					if(!v_stu_w.empty()){
						Write(&v_stu_w,file1);
						v_stu_w.clear();
					}
					if(!v_adm_w.empty()){
						Write(&v_adm_w,file2);
						v_adm_w.clear();
					}
					if(!v_ft_w.empty()){
						Write(&v_ft_w,file3);
						v_ft_w.clear();
					}
					cout << "保存成功!" << endl;
				}
				cout << endl; 
				break;
			}
		}
	}while(!quit);
	
	return 0;
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值