網站首頁 編程語言 正文
本文實例為大家分享了C++實現教師管理系統的具體代碼,供大家參考,具體內容如下
鏈表模板定義:就是用這種數據類型來進行存儲
#include#ifndef NODELIST_S #define NODELIST_S template class Node { public: ?? ?T s_Data; ?? ?Node * s_Next; ?? ?Node(const T&data) :s_Data(data), s_Next(nullptr){} }; template class NodeList { private: ?? ?Node * s_Head; ?? ?int s_Number; public: ?? ?NodeList() : s_Head(nullptr), s_Number(0){} ?? ?~NodeList() { Clear(); } ?? ?Node *GetHead() { return s_Head; } ?? ?int GetNum() { return s_Number; } ?? ?bool Clear() ?? ?{ ?? ??? ?Node *p = s_Head; ?? ??? ?for (int i = 0; i < s_Number; i++) ?? ??? ?{ ?? ??? ??? ?if (!p)return false; ?? ??? ??? ?Node *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 bool NodeList ::AddAt(const T& data, int i) { ?? ?Node * OneNode = new Node (data); ?? ?Node * 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 bool NodeList ::RemoveAt(int i) { ?? ?Node *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 *q = p->s_Next; ?? ?p->s_Next = p->s_Next->s_Next; ?? ?delete q; ?? ?s_Number--; ?? ?return true; } #endif // !NODELIST_S
教師類的聲明:對教師的一些信息的抽象,包含的數據及行為
#include#include #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#include"List.h" #include"Teacher.h" #include #ifndef MANAGE_S #define MANAGE_S class Management { private: ?? ?NodeList 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*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 *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 *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 *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 *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 pucket[100];//100個桶 ?? ?Node *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 *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 *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#include #include #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; }
原文鏈接:https://blog.csdn.net/qq_38311134/article/details/91667352
相關推薦
- 2022-03-15 使用Sqlyog遠程連接數據庫報錯解決方案_數據庫其它
- 2022-12-07 C++游戲教程基本技巧之隨機化詳解_C 語言
- 2022-08-02 詳解Python?NumPy中矩陣和通用函數的使用_python
- 2023-11-13 linux平臺下ZeroMQ zmq(C++)編譯安裝以及調用
- 2022-08-06 Qt編寫顯示密碼強度的控件_C 語言
- 2022-03-30 Flutter有狀態組件使用詳解_Android
- 2022-06-30 C語言超詳細講解結構體與聯合體的使用_C 語言
- 2022-05-20 C語言實現教務管理系統_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支