链表模板定义:就是用这种数据类型来进行存储

#include<iostream>
#ifndef NODELIST_S
#define NODELIST_Stemplate<typename T>
class Node
{
public:T s_Data;Node<T>* s_Next;Node(const T&data) :s_Data(data), s_Next(nullptr){}
};template<typename T>
class NodeList
{
private:Node<T>* s_Head;int s_Number;public:NodeList() : s_Head(nullptr), s_Number(0){}~NodeList() { Clear(); }Node<T>*GetHead() { return s_Head; }int GetNum() { return s_Number; }bool Clear(){Node<T>*p = s_Head;for (int i = 0; i < s_Number; i++){if (!p)return false;Node<T>*q = p;p = p->s_Next;delete q;}s_Head = nullptr;s_Number = 0;return true;}bool IsEmpty(){return (s_Number == 0);}bool AddAt(const T&, int i);//添加元素到第i个位置,计数从0开始bool RemoveAt(int i);//删除第i个元素
};template<typename T>
bool NodeList<T>::AddAt(const T& data, int i)
{Node<T>* OneNode = new Node<T>(data);Node<T>* p;if (OneNode){if (s_Head)    p = s_Head;else{s_Head = OneNode;s_Number++;return true;}if (!i){OneNode->s_Next = s_Head;s_Head = OneNode;s_Number++;return true;}for (int j = 1; j < i; j++){p = p->s_Next;}//此时p指向要插入的位置的前一个节点OneNode->s_Next = p->s_Next;p->s_Next = OneNode;s_Number++;return true;}return false;
}template<typename T>
bool NodeList<T>::RemoveAt(int i)
{Node<T>*p;if (s_Head)    p = s_Head;else return false;if (!i){s_Head = p->s_Next;delete p;s_Number--;return true;}for (int j = 1; j < i; j++){p = p->s_Next;}//此时p指向要删除的位置的前一个节点Node<T>*q = p->s_Next;p->s_Next = p->s_Next->s_Next;delete q;s_Number--;return true;
}#endif // !NODELIST_S

教师类的声明:对教师的一些信息的抽象,包含的数据及行为

#include<iostream>
#include<string>
#ifndef TEACHER_S
#define TEACHER_S
using namespace std;class Teacher
{
private:const int s_ID;const string s_Name;const string s_Sex;int s_Age;string s_Major;string s_Number;float s_Money;int s_Pingfen;public:Teacher(int Id, string Name, string Sex, int Age, string Major,string Number,float Money,int Pingfen) :s_ID(Id), s_Name(Name), s_Sex(Sex), s_Age(Age), s_Major(Major),s_Number(Number),s_Money(Money),s_Pingfen(Pingfen){}int GetID() { return s_ID; }int GetAge(){ return s_Age; }string GetMajor(){ return s_Major; }int GetPingfen(){ return s_Pingfen; }void AddAge() { s_Age++; }void ChangeMajor(string m) { s_Major = m; }void ChangeNumber(string n) { s_Number = n; }void ChangeMoney(float m) { s_Money = m; }void ChangePingfen(int p){ s_Pingfen = p; }friend ostream& operator<<(ostream& out, const Teacher& one){out << one.s_ID << " " << one.s_Name << " " << one.s_Sex << " " << one.s_Age << " "<< one.s_Major << " " << one.s_Number << " " << one.s_Money << " " << one.s_Pingfen << endl;return out;}
};
#endif // !TEACHER_S

管理类:对教师这个管理系统进行管理

#pragma once
#include<iostream>
#include"List.h"
#include"Teacher.h"
#include<fstream>#ifndef MANAGE_S
#define MANAGE_Sclass Management {
private:NodeList<Teacher> s_TeacherList;
public:Management();~Management();void ShowAll();void AddTeacher();void DeletTeacher();void SearchById();void ChangeTeacherXinxi();void ShowByPaixu();void ReadFile();void WriteFile();void AddAllAge();void ClearAllDate();
};
#endif // !MANAGE_S

管理类的具体实现:

#include "Management.h"Management::Management()
{
}Management::~Management()
{
}void Management::ShowAll()
{cout << "从左到右依次为教职工号、姓名、性别、年龄、教学科目、电话号码、月薪、评分" << endl;Node<Teacher>*p = s_TeacherList.GetHead();while (p){cout << p->s_Data << endl;p = p->s_Next;}
}
void Management::AddTeacher()
{cout << "请输入教师的教职工号、姓名、性别、年龄:" << endl;int id, age;string name, sex;cin >> id >> name >> sex >> age;Node<Teacher>*p = s_TeacherList.GetHead();while (p){if (p->s_Data.GetID() == id){cout << "已有该老师的信息!添加失败" << endl;return;}p = p->s_Next;}cout << "请依次输入老师的教学科目、电话号码、月薪和评分:" << endl;string km, hm;float yx;int pf;cin >> km >> hm >> yx>>pf;Teacher one(id, name, sex, age, km, hm, yx,pf);if (s_TeacherList.AddAt(one, s_TeacherList.GetNum()))cout << "教师信息添加成功!" << endl;else cout << "信息添加失败!" << endl;
}void Management::DeletTeacher()
{cout << "输入您想删除的教师的教职工号:";int id, i(0);cin >> id;Node<Teacher>*p = s_TeacherList.GetHead();while (p){if (p->s_Data.GetID() == id){if (s_TeacherList.RemoveAt(i))cout << "删除成功!" << endl;else cout << "删除失败!" << endl;return;}else{i++;p = p->s_Next;}}cout << "系统中没有该老师信息!" << endl;return;
}void Management::SearchById()
{cout << "输入您想查询的教师的教职工号:";int id;cin >> id;Node<Teacher>*p = s_TeacherList.GetHead();while (p){if (p->s_Data.GetID() == id){cout << p->s_Data << endl;return;}else p = p->s_Next;}cout << "系统中没有该老师信息!" << endl;return;}void Management::ChangeTeacherXinxi()
{cout << "输入您想更改的老师的教职工号:";int id;cin >> id;Node<Teacher>*p = s_TeacherList.GetHead();while (p){if (p->s_Data.GetID() == id){cout << p->s_Data << endl;break;}else p = p->s_Next;}if (!p){cout << "系统中没有该老师的信息!" << endl;return;}cout << "您要修改哪一样信息?(1.教学科目 2.电话号码 3.月薪 4.评分 0.返回)" << endl;int mark,pf;string k, n;float m;cin >> mark;if (!mark)return;cout << "输入修改信息:";if (mark == 1)cin >> k;else if (mark == 2)cin >> n;else if (mark == 3)cin >> m;else if (mark == 4)cin >> pf;switch (mark){case 1: p->s_Data.ChangeMajor(k); break;case 2:p->s_Data.ChangeNumber(n); break;case 3:p->s_Data.ChangeMoney(m); break;case 4:p->s_Data.ChangePingfen(pf); break;default:break;}cout << "修改成功!" << endl;cout << p->s_Data << endl;return;}
//这里采用最简单的桶排序
void Management::ShowByPaixu()
{cout << "请问您想根据哪一项对教师信息进行排序?" << endl<< "(1.年龄 2.评分  0.返回)" << endl;int c;cin >> c;NodeList<Teacher> pucket[100];//100个桶Node<Teacher>*p = s_TeacherList.GetHead();switch (c){case 1:{while (p){pucket[p->s_Data.GetAge() - 1].AddAt(p->s_Data, pucket[p->s_Data.GetAge() - 1].GetNum());p = p->s_Next;}break;}case 2:{while (p){pucket[p->s_Data.GetPingfen() - 1].AddAt(p->s_Data, pucket[p->s_Data.GetPingfen() - 1].GetNum());p = p->s_Next;}break;}case 0:break;default:break;}for (int i = 99; i >= 0; i--){p = pucket[i].GetHead();while (p){cout << p->s_Data << endl;p = p->s_Next;}}
}void Management::ReadFile()
{ifstream in("data.txt");if (in.fail()){cout << "Data error!" << endl;return;}do{int id, age, pingfen;string name, sex, major, number;float money;in >> id >> name >> sex >> age >> major>> number >> money>>pingfen;Teacher one(id, name, sex, age, major, number, money,pingfen);s_TeacherList.AddAt(one, s_TeacherList.GetNum());} while (!in.eof());cout << "Read file successful!" << endl;in.close();
}void Management::WriteFile()
{ofstream out("outdata.txt");if (!out){cerr << " file error!" << endl;return;}Node<Teacher>*p = s_TeacherList.GetHead();while (p){out << p->s_Data;cout << p->s_Data;p = p->s_Next;}cout << "Write file successful!" << endl;out.close();
}void Management::AddAllAge()
{Node<Teacher>*p = s_TeacherList.GetHead();while (p){p->s_Data.AddAge();p = p->s_Next;}cout << "教师年龄增加完成!" << endl;return;
}void Management::ClearAllDate()
{if (s_TeacherList.IsEmpty()){cout << "数据已经为空!" << endl;return;}else if (s_TeacherList.Clear())cout << "删除数据成功!" << endl;else { cout << "删除数据失败,程序退出" << endl;exit(0);}return;
}

主函数:菜单选项

#include<iostream>
#include<fstream>
#include <string>
#include"Management.h"
using namespace std;int main()
{Management manager;while (1){cout << "**********************************" << endl;cout << "****欢迎您使用教师信息系统********" << endl;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 << "*        8.按年龄或评分排序      *" << endl;cout << "*        9.增加所有老师年龄      *" << endl;cout << "*        10.清空所有数据         *" << endl;cout << "*        0.退出                  *" << endl;cout << "**********************************" << endl;int input;cin >> input;switch (input){case 1: {manager.ReadFile(); manager.ShowAll(); break; }case 2: {manager.WriteFile(); break; }case 3: {manager.ShowAll(); break; }case 4: {manager.AddTeacher(); break; }case 5: {manager.DeletTeacher(); break; }case 6: {manager.ChangeTeacherXinxi(); break; }case 7: {manager.SearchById(); break; }case 8: {manager.ShowByPaixu(); break; }case 9: {manager.AddAllAge(); break; }case 10: {manager.ClearAllDate(); break; }case 0: exit(0);default:return 0;}}return 0;
}

C++大作业——教师管理系统相关推荐

  1. Java大作业-考试管理系统(GUI)无数据库-Java课程设计

    Java课程设计-Java大作业-考试管理系统(GUI)无数据库 题目要求 开发环境 : 程序总功能模块 程序详细设计 使用情况 第一次写这东西有不少错误的地方,题目要求的功能也没有完全实现,以上内容 ...

  2. C6软件测试大乐,软件测试大作业——社团管理系统

    <软件测试大作业--社团管理系统>由会员分享,可在线阅读,更多相关<软件测试大作业--社团管理系统(19页珍藏版)>请在人人文库网上搜索. 1.山东科技大学软件测试技术与工具课 ...

  3. C语言大作业:车辆管理系统

    C语言大作业:车辆管理系统 声明 此代码使用VS2019编译器进行编译 使用 vc 和 dev-c 的有可能会出现编译警告,需要自己去网上查找相关的编译环境的问题 其次使用vs编译器也可能会报 C49 ...

  4. MySQL数据库大作业——学生管理系统GUI

    MySQL数据库大作业--学生管理系统GUI 原程序链接: https://www.bbsmax.com/A/kmzL3WQBdG/ 为了完成数据库大作业, 我在其基础上进行了一定的修改和扩充. 如果 ...

  5. HTML5期末大作业:管理系统网站设计——学生信息管理系统模板 (13页) HTML+CSS+JavaScript html网页设计期末大作业_网页设计平时作业

    HTML5期末大作业:管理系统网站设计--学生信息管理系统模板 (13页) HTML+CSS+JavaScript html网页设计期末大作业_网页设计平时作业 常见网页设计作业题材有 个人. 美食. ...

  6. HTML5期末大作业:管理系统网站设计——蓝色OA企业员工管理系统(10页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源

    HTML5期末大作业:管理系统网站设计--蓝色OA企业员工管理系统(10页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码 常 ...

  7. C语言总结项目和入门大作业——信息管理系统(多文件版)

    文章目录 八. C语言入门大作业--信息管理系统(多文件版) 一. 功能模块的划分: 二. 多文件的编写 三. 基本函数的实现(重点) 四.文件操作函数 五.函数的辅助函数 六.多文件编程和联系 七. ...

  8. HTML5期末大作业:管理系统后台网站设计——代理商销售管理系统后台(8页) HTML+CSS+JavaScript web前端设计与开发期末作品/期末大作业

    HTML5期末大作业:管理系统后台网站设计--代理商销售管理系统后台(8页) HTML+CSS+JavaScript web前端设计与开发期末作品/期末大作业 常见网页设计作业题材有 个人. 美食. ...

  9. C#大作业——人事管理系统

    此文仅为记录在校期间windows应用开发课程学习成果,本项目仍存在很多不足,仅供参考学习使用. 本门课程大作业要求完成一个具有主界面.用户登录.注册.注销.重新登陆.员工信息增删改查等功能的系统.其 ...

最新文章

  1. Hadoop的启动顺序和停止顺序
  2. 幸运大抽奖 | 神策 2020 数据驱动用户大会等你来
  3. Django从理论到实战(part41)--WSGIRequest对象
  4. 本科、硕士、博士,究竟有何区别?
  5. 基于Apache POI 从xlsx读出数据
  6. websocket传输数据大小限制_WebSocket基础知识笔记
  7. 转发和重定向又是什么“垃圾”——教你再分类
  8. 系统管理_ubuntu出现只读文件系统时
  9. 第7.3节 Python特色的面向对象设计:协议、多态及鸭子类型
  10. 应届毕业生如何打破面试焦虑
  11. 如何搭建属于自己的网站博客?(手把手教你)
  12. 《信号与系统》(吴京)部分课后习题答案与解析——第四章(PART5)(系统分析、传输与滤波)
  13. 第一范式、第二范式、第三范式、BCNF范式的区别
  14. qt 文件分批上传_旧手机改造计划——搭建aira2,以及极其便捷的网页管理文件方法...
  15. 考研数学:常见的的泰勒公式
  16. 今天谁在开网店?兼职卖家占整体网店近70%
  17. 网页版即时通讯聊天工具,支持主流浏览器,无需安装即可使用
  18. android手机获取qq闪照的方法,QQ闪照怎么保存 闪照保存到手机的方法教程
  19. linux宝塔下如何强制ssl,宝塔面板一键安装SSL证书强制HTTPS访问设置
  20. win10的系统mysql服务器地址,win10的系统mysql服务器地址

热门文章

  1. 学习笔记(三) 线性回归算法(Linear Regression)
  2. 为什么拉屎是臭的 拉的屎很臭是什么原因
  3. Java字符集编码解码详细介绍
  4. Linux命令(十七) 关机命令,linux定时关机命令是什么
  5. AirPods无法正常工作?如何对AirPods进行故障排除和修复
  6. 相机镜头_如何保持相机镜头清洁
  7. jscontent V8 eventLoop
  8. 新发现DNS安全漏洞影响巨大,政企如何做好DNS安全防护?
  9. 华为荣耀9的android版本号,携安卓P版本首发 华为EMUI9.0系统解析
  10. 美国2003-2015年道路交通事故数据及毕业论文