C++课设

简介: 高校人员信息管理系统问题描述根据高校人员的特点,先设计一个高校人员抽象类,应包含编号、姓名、年龄、性别、系部、联系方式等数据成员,以及显示、统计等成员函数。

高校人员信息管理系统

问题描述

根据高校人员的特点,先设计一个高校人员抽象类,应包含编号、姓名、年龄、性别、系部、联系方式等数据成员,以及显示、统计等成员函数。然后分别设计教师类、学生类和机关人员类,它们的基类均为高校人员抽象类。

功能要求

创建人员对象,通过链表或对象数组的形式组织全体高校人员(可以定义一个管理类,该类具有新增、修改、删除、查询、统计及保存文件功能)。利用多态理论统一处理高校人员的信息。


#include<iostream>
#include<string.h>
#include<fstream>
#include <stdlib.h> 
using namespace std;
void menu();  //函数声明
void tongji();
//全局变量
int zrs=0; //总人数
int lsrs=0; //老师人数   
int xsrs=0; //学生人数
int zgrs=0; //职工人数
class People  //高校人员抽象类
{ 
protected:
 int Daihao;  //代号
 char Id[20];  //编号
 char Name[40]; //姓名
 int Age;  //年龄
 char Sex[5];  //性别
 char Departments[10]; //系部
 int Phone;  //电话
 People *next;    // 基类的指针作为next指针
public:
 friend class manage;
 People(int daihao,char id[],char name[],int age,char sex[],char departments[],int phone); //构造
 ~People();  //析构
 virtual void change(const char*s)=0;   // vietual标志一个虚函数为纯虚函数
 virtual void show()=0; //显示            //  抽象类  不能够实例化 
 virtual void save()=0; //保存            //  只能被子类覆盖 
 void tongji(); //统计
};
class teacher:public People //派生教师类
{
protected:
 int Income;   //工资
 char Title[20];  //职称
 char Zhuanye[20]; //专业
public:

 teacher(int daihao,char id[],char name[],int age,char sex[],char departments[],int phone,int Income,char Title[20],char Zhuanye[20]);
 ~teacher();
 void change(const char*s);
 void show(); //覆盖基类的虚函数
 void save();
};
class student:public People //派生学生类
{
protected:
 char Banji[10];
 char Zhuanye[20];
 double Score;
public:
 student(int daihao,char id[],char name[],int age,char sex[],char departments[],int phone,char banji[10],char zhuanye[20],double score);
 ~student();
 void change(const char*s);
 void show(); //覆盖基类的虚函数
 void save();
};
class worker:public People //派生机关人员类
{
protected:
 char Zhiwu[20];
 char Jibie[20];
public:
 worker(int daihao,char id[],char name[],int age,char sex[],char departments[],int phone,char zhiwu[20],char jibie[20]);
 ~worker();
 void change(const char*s);
 void show();
 void save();
};
class manage
{
protected:
 static int count; //人员数量
 People *head;
public:
 manage();
 ~manage();
 void insert(People*); //添加人员信息 插入结点
 void add();
 void search(const char*); //按学号查询信息
 void del(const char*); //删除人员信息
 void change(const char *s); //修改人员信息
 void dispaly(); //显示结点信息
 void save(); //保存信息
};

People::People(int daihao,char id[],char name[],int age,char sex[],char departments[],int phone)
{
 Daihao=daihao;
 strcpy(Id,id);
 strcpy(Name,name);
 Age=age;
 strcpy(Sex,sex);
 strcpy(Departments,departments);
 Phone=phone;
}
People::~People()
{}
manage::~manage()
{}

student::student(int daihao,char id[],char name[],int age,char sex[],
     char departments[],int phone,char banji[],char zhuanye[],double score):People(daihao,id,name,age,sex,departments,phone)
{
 strcpy(Banji,banji);
 strcpy(Zhuanye,zhuanye);
 Score=score;
}
teacher::teacher(int daihao,char id[],char name[],int age,char sex[],
     char departments[],int phone,int income,char title[20],char zhuanye[20]):People(daihao,id,name,age,sex,departments,phone)
{
 strcpy(Title,title);
 strcpy(Zhuanye,zhuanye);
 Income=income;
}
worker::worker(int daihao,char id[],char name[],int age,char sex[],
     char departments[],int phone,char zhiwu[20],char jibie[20]):People(daihao,id,name,age,sex,departments,phone)
{
 strcpy(Zhiwu,zhiwu);
 strcpy(Jibie,jibie);
}
void student::change(const char*)
{
 cout<<"请输入修改后的信息"<<endl;
 cout<<"编号  姓名  性别  年龄  部门  电话  班级  专业  成绩"<<endl;
 cin>>Id>>Name>>Age>>Sex>>Departments>>Phone>>Banji>>Zhuanye>>Score;
}
void student::show()
{
 cout<<"编号:"<<Id<<endl;
 cout<<"姓名:"<<Name<<endl;
 cout<<"年龄:"<<Age<<endl;
 cout<<"性别:"<<Sex<<endl;
 cout<<"系部:"<<Departments<<endl;
 cout<<"电话:"<<Phone<<endl;
 cout<<"班级:"<<Banji<<endl;
 cout<<"专业:"<<Zhuanye<<endl;
 cout<<"成绩:"<<Score<<endl;
}
void student::save()
{
 fstream file;
 file.open("student.txt",ios::out);     //打开student.txt文件 
 if(!file) //非1
 {
  cout<<"打开文件失败"<<endl;
 }
 file<<"编号:"<<Id<<" 姓名:"<<Name<<" 年龄:"<<Age<<" 性别:"<<Sex<<" 系部:"<<Departments<<" 电话:"<<Phone<<" 班级:"<<Banji<<" 专业:"<<Zhuanye<<" 成绩:"<<Score;
 file.close();
 file.open("t1.txt",ios::out|ios::app);     //打开t1.txt文件 直接添加 而不清除后添加 
 if(!file) //非1
 {
  cout<<"打开文件失败"<<endl;
 }
 file<<"编号:"<<Id<<" 姓名:"<<Name<<" 年龄:"<<Age<<" 性别:"<<Sex<<" 系部:"<<Departments<<" 电话:"<<Phone<<" 班级:"<<Banji<<" 专业:"<<Zhuanye<<" 成绩:"<<Score;
 file.close();
}
void teacher::save()
{
 fstream file;
 file.open("teacher.txt",ios::out);
  if(!file) //非1
 {
  cout<<"打开文件失败"<<endl;
 }

 file<<"编号:"<<Id<<" 姓名:"<<Name<<" 年龄:"<<Age<<" 性别:"<<Sex<<" 系部:"<<Departments<<" 电话:"<<Phone<<"工资 "<<Income<<" 职称"<<Title<<" 专业:"<<Zhuanye;
 file.close();
 file.open("t1.txt",ios::out|ios::app);
  if(!file) //非1
 {
  cout<<"打开文件失败"<<endl;
 }

 file<<"编号:"<<Id<<" 姓名:"<<Name<<" 年龄:"<<Age<<" 性别:"<<Sex<<" 系部:"<<Departments<<" 电话:"<<Phone<<"工资 "<<Income<<" 职称"<<Title<<" 专业:"<<Zhuanye;
 file.close();
}
void worker::save()
{
 fstream file;
 file.open("worker.txt",ios::out);

 if(!file) //非1
 {
  cout<<"打开文件失败"<<endl;
 }

 file<<"编号:"<<Id<<" 姓名:"<<Name<<" 年龄:"<<Age<<" 性别:"<<Sex<<" 系部:"<<Departments<<" 电话:"<<Phone<<" 职务:"<<Zhiwu<<" 级别:"<<Jibie;
 file.close();
 file.open("t1.txt",ios::out|ios::app);

 if(!file) //非1
 {
  cout<<"打开文件失败"<<endl;
 }

 file<<"编号:"<<Id<<" 姓名:"<<Name<<" 年龄:"<<Age<<" 性别:"<<Sex<<" 系部:"<<Departments<<" 电话:"<<Phone<<" 职务:"<<Zhiwu<<" 级别:"<<Jibie;
 file.close();
}
void manage::save()
{
 People *node;
 node=head; //头结点
 while(node)
 {
  node->save();
  node=node->next; //指向下一个结点
 }
}
void teacher::change(const char*)
{
 cout<<"请输入修改后的信息"<<endl;
 cout<<"编号  姓名  性别  年龄  部门  电话  工资  职称  专业"<<endl;
 cin>>Id>>Name>>Age>>Sex>>Departments>>Phone>>Income>>Title>>Zhuanye;
}
void teacher::show()
{
 cout<<"编号:"<<Id<<endl;
 cout<<"姓名:"<<Name<<endl;
 cout<<"年龄:"<<Age<<endl;
 cout<<"性别:"<<Sex<<endl;
 cout<<"系部:"<<Departments<<endl;
 cout<<"电话:"<<Phone<<endl;
 cout<<"工资:"<<Income<<endl;
 cout<<"职称:"<<Title<<endl;
 cout<<"专业"<<Zhuanye<<endl;
}
void worker::change(const char*)
{
 cout<<"请输入修改后的信息"<<endl;
 cout<<"编号  姓名  性别  年龄  部门  电话  职务  级别"<<endl;
 cin>>Id>>Name>>Age>>Sex>>Departments>>Phone>>Zhiwu>>Jibie;
}
void worker::show()
{
 cout<<"编号:"<<Id<<endl;
 cout<<"姓名:"<<Name<<endl;
 cout<<"年龄:"<<Age<<endl;
 cout<<"性别:"<<Sex<<endl;
 cout<<"系部:"<<Departments<<endl;
 cout<<"电话:"<<Phone<<endl;
 cout<<"职务:"<<Zhiwu<<endl;
 cout<<"级别:"<<Jibie<<endl;
}
manage::manage()
{
 head=0;
}
void manage::insert( People *i)
{
 People *node;  //定义一个指向people类的指针 
 if(head==0)  //如果没有头结点 则创造一个
 {
  head=i;
  head->next=0;
 }
 else
 {
  node=head;    //等于头结点 
  while(node->next) //当尾结点不为0时 一直循环 
   node=node->next;
  node->next=i;     //创造一个新的尾结点 
  i->next=0;        //尾结点置0 
 }
}
void manage::search(const char *s) //按编号查询人员信息
{
 People *node=head;
 int flog=0;        //起到标记的作用 
 while(node)  //循环找符合编号的结点
 {
  if(strcmp(node->Id,s)==0) //如果找到
  {
   flog=1;
   node->show(); //显示查询结果
   break;
  }
  else  //没找到则找下个结点
   node=node->next;
 }
 if(flog) //如果找到 则flog为1
 {
  cout<<"查找成功"<<endl;
 }
 else
  cout<<"未找到该编号"<<endl;
}
void manage::del(const char *s) //按学号删除人员信息
{
 People *node1,*node2;
 int flog=0;
 node1=head;
 if(strcmp(head->Id,s)==0) //如果找到 则使该结点删除
 {
    if(head->Daihao==1)
    {
   xsrs--;
   zrs--;
   cout<<"减少一名学生"<<endl;
    }
  if(head->Daihao==2)
    {
   lsrs--;
   zrs--;
   cout<<"减少一名老师"<<endl;
    }
  if(head->Daihao==3)
    {
   zgrs--;
   zrs--;
   cout<<"减少一名职工"<<endl;
    }
  head=head->next;
  node1->~People(); //析 消亡
  flog=1;  //确认删除成功 标记为1
 }
 else
 {
  while(node1)
   if(strcmp(head->Id,s)==0)
   {

    node2->next=node1->next;
    node1->~People();
    flog=1;
    break;
   }
   else
   {
    node2=node1;
    node1=node1->next;
   }
 }
 if(!flog)
  cout<<"未找到要删除的结点"<<endl;
 else
  cout<<"结点被删除"<<endl;
}
void manage::dispaly()
{
 People *node;
 if(head==0)
  cout<<"空链表"<<endl;
 else
 {
  node=head;
  while(node)
  {
   node->show();
   node=node->next;
  }
 }
}
void manage::change(const char *s) //按编号修改人员信息
{
 People *node=head;
 int flog=0;
 while(node)
 {
  if(strcmp(node->Id,s)==0)
  {
   flog=1;
   node->change(s); //显示修改结果
   break;
  }
  else
   node=node->next;
 }
 if(flog)
  cout<<"修改成功"<<endl;
 if(!flog)
  cout<<"未找到该结点"<<endl; 
}

void manage::add() //添加人员信息
{ 
 int Daihao;
 char Id[20];
 char Name[40];
 int Age;
 char Sex[5];
 char Departments[10];
 int Phone;
 int Income;
 char Title[20];
 char Zhuanye[20];
 char Banji[10];
 double Score;
 char Zhiwu[20];
 char Jibie[20];
 int i; //选择
 People *a;
 cout<<"       ***********请选择您需要操作的对象:*********"<<endl;
 cout<<"       1.学生"<<endl;
 cout<<"       2.老师"<<endl;
 cout<<"       3.职工"<<endl;
 cin>>i;
 cout<<"请输入基础信息"<<endl;
 cout<<"请输入代号:"<<endl;
 cin>>Daihao;
 cout<<"请输入编号:"<<endl;
 cin>>Id;
 cout<<"请输入姓名:"<<endl;
 cin>>Name;
 cout<<"请输入性别:"<<endl;
 cin>>Sex;
 cout<<"请输入年龄:"<<endl;
 cin>>Age;
 cout<<"请输入系部:"<<endl;
 cin>>Departments;
 cout<<"请输入电话号码:"<<endl;
 cin>>Phone;
 if(i==1)
 {
  cout<<"请输入班级、专业、成绩"<<endl;
  cin>>Banji>>Zhuanye>>Score;
  a=new student(Daihao,Id,Name,Age,Sex,Departments,Phone,Banji,Zhuanye,Score);  //调用默认构造函数 
  xsrs++;   //学生人数+1 
  cout<<"添加成功!";
 }
 if(i==2)
 {
  cout<<"请输入工资、职称、专业"<<endl;
  cin>>Income>>Title>>Zhuanye;
  a=new teacher(Daihao,Id,Name,Age,Sex,Departments,Phone,Income,Title,Zhuanye);
  lsrs++;
  cout<<"添加成功!";
 }
 if(i==3)
 {
  cout<<"请输入职务、级别"<<endl;
  cin>>Zhiwu>>Jibie;
  a=new worker(Daihao,Id,Name,Age,Sex,Departments,Phone,Zhiwu,Jibie);
  zgrs++;
  cout<<"添加成功!";
 }
 insert(a);
 zrs++;
}
int main()
{
 system("title:软件151:何金洋");

 int z;
 char Id[20]={0};
 manage hjy; //定义一个对象
 while(1)
 { 
  system("cls");
  menu();  //菜单

  cin>>z;
  switch(z)
  {  
  case 1:  //添加

   {
    hjy.add();
    system("pause");
   }break;
  case 2:  //修改
   {
    cout<<"请输入您需要修改的学号:";
    cin>>Id;
    hjy.change(Id);
    system("pause");
   }break;
  case 3:  //删除
   {
    cout<<"请输入需要删除的号码:";
    cin>>Id;
    hjy.del(Id);
    system("pause");  
   }break;
  case 4:  //查询
   {
    cout<<"请输入需要查询的号码:"<<endl;
    cin>>Id;
    hjy.search(Id);
    system("pause");
   }break;
  case 5:  //统计
   {
    tongji();
   }break;
  case 6: //保存
   {
  hjy.save();
  cout<<"保存成功!"<<endl;
  system("pause");
   }break;
  case 7:
   {
    exit(0);
   }
  }

 }
}
void menu()       
{ system("cls");
 cout<<"       ********欢迎进入高校人员信息管理系统********"<<endl;
 cout<<"       ********     请选择以下功能:        ********"<<endl;
 cout<<"       ********        1、新增             ********"<<endl;
 cout<<"       ********        2、修改             ********"<<endl;
 cout<<"       ********        3、删除             ********"<<endl;
 cout<<"       ********        4、查询             ********"<<endl;
 cout<<"       ********        5、统计             ********"<<endl;
 cout<<"       ********        6、保存             ********"<<endl;
 cout<<"       ********        7、退出             ********"<<endl;
 cout<<"请输入您选择功能的序号:";
}
void tongji()
{
  cout<<"总人数为:"<<zrs<<"人"<<endl;
  cout<<"学生人数:"<<xsrs<<"人"<<endl;
  cout<<"老师人数:"<<lsrs<<"人"<<endl;
  cout<<"职工人数:"<<zgrs<<"人"<<endl;
  system("pause");
}

目录
相关文章
|
存储 C语言 C++
【C/C++】万字图文详解C语言文件操作 完美装饰课设大作业(下)
【C/C++】万字图文详解C语言文件操作 完美装饰课设大作业(下)
107 0
|
存储 编译器 数据库
【C/C++】万字图文详解C语言文件操作 完美装饰课设大作业(上)
【C/C++】万字图文详解C语言文件操作 完美装饰课设大作业
115 0
|
28天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
49 2
|
1月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
101 5
|
1月前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
85 4
|
1月前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
100 4
|
2月前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
32 4
|
2月前
|
编译器 C语言 C++
【C++打怪之路Lv4】-- 类和对象(中)
【C++打怪之路Lv4】-- 类和对象(中)
32 4
|
2月前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
29 1
|
2月前
|
存储 编译器 C++
【C++类和对象(下)】——我与C++的不解之缘(五)
【C++类和对象(下)】——我与C++的不解之缘(五)