高校人员信息管理系统
前言
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;
}