一、内容

编写一个人员信息管理系统。
这个系统的功能是:交互式的实现校园人员信息的录入与显示。

二、类分析

学校里,主要有四类人员:大学本科学生、教师、研究生和助教。
大学本科生每周有固定的学时数。教师除了固定的学时数外,还有每周的教学时数。研究生除了固定的学时数外,每周还可以自由做一定的研究。助教生除了上课外,还要做研究和一定的教学工作。
人员的基本信息包括姓名、编号、性别、身份证号、总学时数以及每周固定学时数。各个人员之间的关系: people类派生出student 类和teacher类,student 类派生出graduate类, graduate类和teacher类派生出TA类。

三、代码剖析

3.1 各种类的实现

根据以上分析,不难写出其对应的类。
people类:

class people
{
public:people() {}virtual ~people(){}virtual void print();
protected:string name;string number;int isGril;string id;double totalHours;double fixedPerWeekHours;
};void people::print()
{cout << name << "信息表:\n";cout << "姓名:"<< name <<endl<< "编号:"<< number << endl<< "性别:" << ( isGril ==0 ? "♀" : "♂") << endl<< "身份证号:" << id << endl<< "总学时数:" << totalHours << endl<< "每周固定学时数:" << fixedPerWeekHours << endl;
}

student类:

class student : virtual public people
{
public:student(){}friend istream & operator>>(istream &in, student &p);void print(){people::print();}
};istream & operator>>(istream &in, student &p)
{cout << "请分别输入姓名、编号、性别(女:1,男:0)、身份证号、总学时数以及每周固定学时数(Tips:每项空格隔开)\n";in >> p.name >> p.number >> p.isGril >> p.id >> p.totalHours >> p.fixedPerWeekHours;return in;
}

teacher类:

class teacher :virtual public people
{
public:teacher(){}friend istream & operator>>(istream &in, teacher &p);void print(){people::print();cout << "每周教学时数:" << teachHours;cout << endl;}
protected:double teachHours;
};istream & operator>>(istream &in, teacher &p)
{cout << "请分别输入姓名、编号、性别(女:1,男:0)、身份证号、总学时数、每周固定学时数以及每周教学时数(Tips:每项空格隔开)\n";in >> p.name >> p.number >> p.isGril >> p.id >> p.totalHours >> p.fixedPerWeekHours >> p.teachHours;return in;
}

graduate类:

class graduate : virtual public student
{
public:graduate(){}friend istream & operator>>(istream &in, graduate &p);void print(){student::print();cout << "每周研究时数:" << studyHours;cout << endl;}
protected:double studyHours;
};istream & operator>>(istream &in, graduate &p)
{cout << "请分别输入姓名、编号、性别(女:1,男:0)、身份证号、总学时数、每周固定学时数以及每周研究时数(Tips:每项空格隔开)\n";in >> p.name >> p.number >> p.isGril >> p.id >> p.totalHours >> p.fixedPerWeekHours >> p.studyHours;return in;
}

TA类:

class TA : public graduate, public teacher
{
public:friend istream & operator>>(istream &in, TA &p);void print(){teacher::print();cout << "每周教学时数:" << teachHours << endl<< "每周研究时数:" << studyHours << endl;}
};istream & operator>>(istream &in, TA &p)
{cout << "请分别输入姓名、编号、性别(女:1,男:0)、身份证号、总学时数、每周固定学时数、每周教学时数以及每周研究时数(Tips:每项空格隔开)\n";in >> p.name >> p.number >> p.isGril >> p.id >> p.totalHours >> p.fixedPerWeekHours >> p.teachHours >> p.studyHours;return in;
}

3.2 交互式界面结构剖析

如你所见到的,这些类已经可以完成信息的输入与输出,所以接下来我们要做的就是做一个交互式的界面。鄙人代码中大量使用了switch()语句,以实现交互。如下main()方法里的代码展示了整个系统的结构。

int main()
{system("title 人员信息管理系统");while(1){ cout << "***********      请输入您的选择    **********\n";cout << "                   1  录入                   \n";cout << "                   2  显示                   \n";cout << "                   3  退出                   \n";cout << "*********************************************\n";cout << ">";int choose1;cin >> choose1;switch (choose1){case 1://录入{system("cls");input();system("pause");system("cls");break;}case 2://显示{system("cls");print();system("pause");system("cls");break;}case 3://退出return 0;default:{cin.clear();cin.ignore(1024, '\n');cout << "输入错误!可输入选项:[1,2,3]";system("pause");break;}}}
}

如你所见,代码中有大量文字以提示用户操作。
这里面有几点需要说明的:

  • system(“pause”) 用于暂停,目的是使用户能看见他的操作

  • system(“cls”)用于清屏,这样做可以实现界面的跳转操作(看起来是这样)。如果你对这个概念不清楚,没关系,你可以在文末下载打包好的exe程序体验一下,或者是自己动手试一下

  • cin.clear()和cin.ignore(1024, ‘\n’)的作用是防止用户输入的东西与你规定使用的不一致而导致的程序崩溃

  • input()和print()函数里面也大量使用了switch()语句(实现交互),且代码结构与如上代码大致相同,这里不做分析,读者可在源代码中查看

  • input()与print()函数里面使用虚函数与指针实现了多态,由于笔者水平有限,这里也不做讲解,如有错误,欢迎斧正

四、效果演示

用户主界面

选择2,进入显示界面

按任意键后停留在原界面

输入e返回上一级,并选择1进行录入

按任意键后仍然停留在原界面,再次输入

输入完成后,进入显示界面:

以上就是界面展示

五、源代码

源程序下载 提取码:hk46

#include <iostream>
#include <string>using namespace std;
int stuNum = 0;
int teachNum = 0;
int gradNum = 0;
int taNum = 0;class people
{
public:people() {}virtual ~people(){}virtual void print();
protected:string name;string number;int isGril;string id;double totalHours;double fixedPerWeekHours;
};void people::print()
{cout << name << "信息表:\n";cout << "姓名:"<< name <<endl<< "编号:"<< number << endl<< "性别:" << ( isGril ==0 ? "♀" : "♂") << endl<< "身份证号:" << id << endl<< "总学时数:" << totalHours << endl<< "每周固定学时数:" << fixedPerWeekHours << endl;
}class student : virtual public people
{
public:student(){}friend istream & operator>>(istream &in, student &p);void print(){people::print();}
};istream & operator>>(istream &in, student &p)
{cout << "请分别输入姓名、编号、性别(女:1,男:0)、身份证号、总学时数以及每周固定学时数(Tips:每项空格隔开)\n";in >> p.name >> p.number >> p.isGril >> p.id >> p.totalHours >> p.fixedPerWeekHours;return in;
}class teacher :virtual public people
{
public:teacher(){}friend istream & operator>>(istream &in, teacher &p);void print(){people::print();cout << "每周教学时数:" << teachHours;cout << endl;}
protected:double teachHours;
};istream & operator>>(istream &in, teacher &p)
{cout << "请分别输入姓名、编号、性别(女:1,男:0)、身份证号、总学时数、每周固定学时数以及每周教学时数(Tips:每项空格隔开)\n";in >> p.name >> p.number >> p.isGril >> p.id >> p.totalHours >> p.fixedPerWeekHours >> p.teachHours;return in;
}class graduate : virtual public student
{
public:graduate(){}friend istream & operator>>(istream &in, graduate &p);void print(){student::print();cout << "每周研究时数:" << studyHours;cout << endl;}
protected:double studyHours;
};istream & operator>>(istream &in, graduate &p)
{cout << "请分别输入姓名、编号、性别(女:1,男:0)、身份证号、总学时数、每周固定学时数以及每周研究时数(Tips:每项空格隔开)\n";in >> p.name >> p.number >> p.isGril >> p.id >> p.totalHours >> p.fixedPerWeekHours >> p.studyHours;return in;
}class TA : public graduate, public teacher
{
public:friend istream & operator>>(istream &in, TA &p);void print(){teacher::print();cout << "每周教学时数:" << teachHours << endl<< "每周研究时数:" << studyHours << endl;}
};istream & operator>>(istream &in, TA &p)
{cout << "请分别输入姓名、编号、性别(女:1,男:0)、身份证号、总学时数、每周固定学时数、每周教学时数以及每周研究时数(Tips:每项空格隔开)\n";in >> p.name >> p.number >> p.isGril >> p.id >> p.totalHours >> p.fixedPerWeekHours >> p.teachHours >> p.studyHours;return in;
}void input();
void print();
student stu[50];
teacher tech[20];
graduate grad[50];
TA ta[50];
int main()
{system("title 人员信息管理系统");while(1){ cout << "***********      请输入您的选择    **********\n";cout << "                   1  录入                   \n";cout << "                   2  显示                   \n";cout << "                   3  退出                   \n";cout << "*********************************************\n";cout << ">";int choose1;cin >> choose1;switch (choose1){case 1://录入{system("cls");input();system("pause");system("cls");break;}case 2://显示{system("cls");print();system("pause");system("cls");break;}case 3://退出return 0;default:{cin.clear();cin.ignore(1024, '\n');cout << "输入错误!可输入选项:[1,2,3]";system("pause");break;}}}
}void print()
{while(1){ system("cls");char choose;cout << "**********  当前位置:主菜单->输出  *********\n";cout << "***********      请输入您的选择    **********\n";cout << "                   A/a 学生                   \n";cout << "                   B/b 教师                   \n";cout << "                   C/c 研究生                 \n";cout << "                   D/d 助教生                 \n";cout << "                   E/e 返回上一级             \n";cout << "*********************************************\n";cout << ">>";cin >> choose;switch (choose){case 'a':case 'A':{people *p;cout << "******  学生列表" << "  共 " << stuNum << " 项  ******\n";for (int i = 0; i < stuNum; i++){p = &stu[i];p->print();cout << endl;}system("pause");break;}case 'b':case 'B':{people *p;cout << "******  教师列表" << "  共 " << teachNum << " 项  ******\n";for (int i = 0; i < teachNum; i++){p = &tech[i];p->print();cout << endl;}system("pause");break;}case 'c':case 'C':{people *p;cout << "****** 研究生列表" << "  共 " << gradNum << " 项  ******\n";for (int i = 0; i < gradNum; i++){p = &grad[i];p->print();cout << endl;}system("pause");break;}case 'd':case 'D':{people *p;cout << "****** 助教生列表" << "  共 " << taNum << " 项  ******\n";for (int i = 0; i < taNum; i++){p = &ta[i];p->print();cout << endl;}system("pause");break;}case 'e':case 'E':{return;}default:{cin.clear();cin.ignore(1024, '\n');cout << "输入错误!可输入选项:[A ~ E内任意字母的大小写]";system("pause");system("cls");break;}}}}void input()
{while (1){system("cls");char choose;cout << "**********  当前位置:主菜单->录入  *********\n";cout << "***********      请输入您的选择    **********\n";cout << "                   A/a 学生                   \n";cout << "                   B/b 教师                   \n";cout << "                   C/c 研究生                 \n";cout << "                   D/d 助教生                 \n";cout << "                   E/e 返回上一级             \n";cout << "*********************************************\n";cout << ">>";cin >> choose;switch (choose){case 'a':case 'A':{int n;cout << "请输入录入学生数目  >>>";cin >> n;cout << endl;for (int i = stuNum; i < n + stuNum; i++){cin >> stu[i];}stuNum += n;system("pause");break;}case 'b':case 'B':{int n;cout << "请输入录入教师数目  >>>";cin >> n;cout << endl;for (int i = teachNum; i < n + teachNum; i++){cin >> tech[i];}teachNum += n;system("pause");break;}case 'c':case 'C':{int n;cout << "请输入录入研究生数目  >>>";cin >> n;cout << endl;for (int i = gradNum; i < n + gradNum; i++){cin >> grad[i];}gradNum += n;system("pause");break;}case 'd':case 'D':{int n;cout << "请输入录入助教生数目  >>>";cin >> n;cout << endl;for (int i = taNum; i < n + taNum; i++){cin >> ta[i];}taNum += n;system("pause");break;}case 'e':case 'E':{return;}default:{cin.clear();cin.ignore(1024, '\n');cout << "输入错误!可输入选项:[A ~ E内任意字母的大小写]";system("pause");system("cls");break;}}}
}

c++ 简易人员信息管理系统相关推荐

  1. c++课设:高校人员信息管理系统 开发一个简易的高校人员信息管理系统,主要针对高校人员的基本信息进行管理。采用对象链表或对象数组存放各个对象,实现新增、修改、删除、查询以及统计等功能。

    通过本次课程设计,深入理解类和对象.继承和派生.重载和多态,熟练掌握面向对象的程序设计思想和方法,能够对现实世界中的实际问题进行分析.设计,并学会熟练运用面向对象的编程方法(OOP)-- C++语言进 ...

  2. python制作学生管理系统_Python——面向对象,简易学生信息管理系统

    一.概述 1.1涉及到的知识点 项目开发:创建项目,创建包,导入包: 面向对象:静态方法,继承,内置函数,自定义函数: 数据类型:列表,字典,字符串.列表.字典的转换和自动生成导向: 异常处理:捕获异 ...

  3. 人员信息管理系统练习

    /* 项目 人员信息管理系统练习 最多10个人 把信息保存到文件中去 */ #include <stdio.h> #include <string.h> int save()  ...

  4. python制作个人信息管理系统_python实现简易学生信息管理系统

    本文实例为大家分享了python实现学生信息管理系统的具体代码,供大家参考,具体内容如下 简易学生信息管理系统主要功能有 1 录入学生信息 2 查找学生信息 3 删除学生信息 4 修改学生信息 5 排 ...

  5. Spring+SpringMVC+MyBatis明日方舟版人员信息管理系统前端页面代码前后端交互+SSM框架 管理员登录 游客登录 普通用户登录 人员的增删改查 信息更新 图片上传 分页查询)

    Spring+SpringMVC+MyBatis明日方舟版人员信息管理系统前端页面代码(前后端交互+SSM框架 管理员登录 游客登录 普通用户登录 人员的增删改查 信息更新 图片上传 分页查询 修改密 ...

  6. java高校人员信息管理系统

    高校人员信息管理系统 1.数据模型 教师.实验员.行政人员.教师兼行政人员 共有属性:编号.姓名.性别.出生年月 教师:所在系部.专业.职称 实验员:所在实验室.职称 行政人员:政治面貌.职务 pac ...

  7. 基于Java的人员信息管理系统

    基于Java的人员信息管理系统 介绍 实现类(Person) 实现类(Menu) 实现类(Input) 实现类(Operator) 实现类(Test) 结果展示: 操作环境以及信息 介绍 利用Java ...

  8. 高校人员信息管理系统(Python版)

    目录 高校人员信息管理系统 一.问题描述 二.功能要求 三.问题的解决方案 四.运行环境说明 五.代码段 1.多文件 (1)员工类(文件1) (2)教师类(文件2) (3)实验员类(文件3) (4)行 ...

  9. 高校人员信息管理系统(C++版)

    目录 高校人员信息管理系统 一.问题描述 二.功能要求 三.问题的解决方案 四.代码段 1.多文件 2.单文件                                  高校人员信息管理系统  ...

最新文章

  1. oracle cdc 提交顺序,Oracle CDC部署流程
  2. 电容二极管升压电路分析
  3. 2015/Province_C_C++_C/9/打印大X
  4. 利用dbms_backup_restore函数来恢复数据文件
  5. java提高篇之理解java的三大特性——多态
  6. 标识为普通SQL语法
  7. Flink 1.10 细粒度资源管理解析
  8. SpringBoot 2.x 集成Redis
  9. 网易老司机花式刷屏,腾讯爸爸欲教其做人,最终结局...
  10. 基于stm32的智能家居语音控制系统
  11. linux之安装nali本地解析IP归属
  12. bugzilla mysql 配置_Win10 + Bugzilla + Mysql + + Strawberry Perl + perl 模块 + iis安装过程
  13. 使用POI 删除批注
  14. Unity 计算屏幕视口UV坐标的几种方法
  15. Android性能优化的5种方案
  16. JAVA学习 API_day03(字符串编码, 泛型, 数据结构, Collection)
  17. 嵌入式系统之-小米路由器3G v1
  18. php读取excel并导入数据,PHPExcel读取excel并导入数据库
  19. 【化解数据结构】详解字典结构,并实现一个字典
  20. pixhawk使用WiFi模块

热门文章

  1. 国外LEAD联盟,S联盟被关联
  2. 2017年下半年计算机二级报名,2017河北大学下半年计算机二级报名时间
  3. Captura – 带键盘按键录制的录屏工具,支持直播[Windows]
  4. Python 的turtle模块讲座
  5. 智行订票系统需求分析报告
  6. 关于顺序表概念及其用法总结
  7. js中读取json对象
  8. uni-APP 联系我们
  9. python编程培训杭州
  10. Apollo代码学习(二)—车辆运动学模型