基于C++实现的教职工信息管理系统

Foooooooood

发布日期: 2019-05-21 12:13:36 浏览量: 1582
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

一、实验内容

教职工信息管理系统用于管理教职工信息,能够根据工号、姓名、科室精确查询职工信息;能分系部进行职称统计,计算各职称的人数;根据职工的职称排序输出;根据工号修改或删除职工信息。

二、运行环境

  • 软件环境

    • 操作系统:windows 8.1
    • 开发环境:visual studio 2015
  • 硬件环境

    • 处理器:Intel(R) Core(TM) i5-4200U CPU @ 1.60GHz 2.30GHz
    • 内存:4.00GB
    • 系统类型:64位操作系统

三、课题分析

3.1 主要功能

  • 设计菜单实现功能选择

  • 输入功能

    • 输入职工信息,并保存到文件中
  • 查询功能

    • 能够根据工号精确查询职工信息
    • 能够根据姓名、科室查询职工信息
    • 分系部进行职称统计,计算各职称的人数
  • 根据职工的职称排序输出

  • 根据工号修改职工信息

  • 根据工号删除职工信息

3.2 程序菜单项

四、主要模块功能

4.1 类的编写

教职工管理系统 包括两个类 employee类与empNode类。Employee包含教职工的所有基本信息,以及更改和查看基本信息的所有方法;empNode类为链表,节点值是一个employee对象,以及指针指向下一个节点;data.txt 用于储存教职工所有基本信息。

4.1.1 employee类

  1. class employee
  2. {
  3. public:
  4. employee();
  5. //默认构造函数
  6. employee(string nabool sexlong long jobNulong long phoneNustring departstring title);
  7. ~employee();
  8. //显示教职工信息
  9. void display();
  10. //返回工号
  11. long long getJobNumber();
  12. //返回科室
  13. string getDepartment();
  14. //返回姓名
  15. string getName();
  16. //返回职称
  17. string getTitle();
  18. //返回性别
  19. bool getSex();
  20. //返回电话号码
  21. long long getPhoneNumber();
  22. //返回职称等级
  23. int getlevelOfTitle();
  24. //用于修改姓名
  25. void setName(const string a);
  26. //修改性别
  27. void setSex(const bool a);
  28. //修改工号
  29. void setJobNumber(const long long a);
  30. //修改电话号码
  31. void setPhoneNumber(const long long a);
  32. //修改所属部门
  33. void setDepartment(const string a);
  34. //修改职称
  35. void setTitle(const string a);
  36. //输入所有信息
  37. void setAllFromeCin();
  38. private:
  39. string name;//姓名
  40. bool sex;//性别 1---男 0----女
  41. long long jobNumber;//工号
  42. long long phoneNumber;//电话号码
  43. string department;//所在部门科室
  44. string title;//职称
  45. int levelOftitle;//职称等级
  46. };

4.1.2 empNode类

链表用于程序运行中储存每一个教职工的信息,考虑到信息量比较大所以使用链表,对于增删比较容易。

  1. class empNode
  2. {
  3. public:
  4. empNode();
  5. empNode(const employee &item empNode *nextNode = NULL) :emp(item), next(nextNode) {}
  6. //find***按照相应的变量查找
  7. void findName(string name);
  8. void findJobNumber(long long jobNumber);
  9. void findDepartment(string department);
  10. void findTitle(string title);
  11. //统计概览 各个职称人数与各个部门人数
  12. void overView();
  13. //将链表中的值写入文件
  14. void write();
  15. //修改某个工号的个人信息
  16. void change(long long);
  17. //删除某个工号
  18. void erease(long long);
  19. //按照职称排序输出
  20. void paixushuchu();
  21. ~empNode();
  22. employee emp;//节点值
  23. empNode *next;
  24. private:
  25. };

4.2 程序流程

读入文件(将data.txt文件中的数据读入链表)

开始小过场(简单的文字效果)

显示菜单(signal1作为一级菜单的选择信号)

可以从一级菜单选择相应个功能,若为非法输入程序会有提示,例如:

  • 添加:选择后即可按照系统提示输入教职工信息

  • 查找:跳转进入二级菜单选择具体查找方式

  • 修改:按提示输入工号若该工号存在则修改,若不存在则回到一级菜单

  • 按职称排序输出:系统对所有教职工按等级排序输出

  • 删除:输入工号,若工号存在则删除对应条目,不存在则调回一级菜单

二级查询菜单

接下来的流程取决于用户的选择,用户可以自由选择各项功能;程序从用户得到输入,查询或对链表进行增删改,再显示处理结果。

所有的输入都进行过滤防止非法字符导致的程序崩溃,在删除前会让用户再次确认,显示结果有些会在显示一到两秒内自动跳转到上级菜单,有些会让用户确认后返回;直到用户在一级菜单输入-1退出一级菜单,退出菜单后将链表中的内容更新到data.txt文件中。

结束的文字效果

五、实验调试

用于过滤非法输入:

  1. while (!(cin >> signal2))
  2. {
  3. cout << "请输入合法字符" << endl;
  4. cinclear();
  5. cinignore();
  6. }

菜单:提供与用户互交的接口,读取用户需求并调用链表的方法实现这些需求

链表:具体的数据结构,并提供具体的实现方法(是这个程序设计的难点与重点)

Employee:结构化的储存程序所处理的对象,提供写入及查看基本参数的方法

Data。txt:以文本形式储存数据

  1. string TITLE[4] = { "教授""副教授""讲师""助教" };//职称列表

在程序中我将职称这分为以上四项。因为教职工的职称是相对固定的。不会无缘无故多出副讲师之类的职称。而且这么做易于进行排序。在employee类的成员变量中有一项是levelOfTitle就是通过对比字符串表得到的,在进行排序的时候就可以简单的依据levelOfTitle排序。

六、实验总结

优点

改进了用户体验(有开场的类似动画的文字效果),与程序的稳定性(解决非法输入问题)。

缺点

对于大量的长短不一样的文本显示效果没有对齐,看上去比较凌乱。

收获

实践是检验真理的唯一途径,实际操作中会遇到很多课本上没有提到的问题,这时候要学会自己解决或者学会使用Baidu与Google。 通过这次C++的大型实验,我深刻的明白到:课本知识与实践能力相结合的重要性。会读程序的人并不一定会编程序。要想把一门专业课程学好,必须增强自己的动手实践能力,而不是一天到晚只知道看书,那种行为只不过是“纸上谈兵”。看再多的书都不如自己亲手试一试。俗话说的好:会打仗的士兵才是好士兵。再者,课本上的知识不一定是完全准确的,只有自己动手进行试验过才知道。实践是检验真理的唯一标准,这话不假。

上传的附件 cloud_download 基于C++实现的教职工信息管理系统.7z ( 715.19kb, 33次下载 )
error_outline 下载需要8点积分

发送私信

一盏灯,一条路,一个你

13
文章数
27
评论数
最近文章
eject