C++實(shí)現(xiàn)教師管理系統(tǒng)
本文實(shí)例為大家分享了C++實(shí)現(xiàn)教師管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
鏈表模板定義:就是用這種數(shù)據(jù)類型來進(jìn)行存儲
#include<iostream> #ifndef NODELIST_S #define NODELIST_S template<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個位置,計(jì)數(shù)從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指向要插入的位置的前一個節(jié)點(diǎn) ?? ??? ?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指向要刪除的位置的前一個節(jié)點(diǎn) ?? ?Node<T>*q = p->s_Next; ?? ?p->s_Next = p->s_Next->s_Next; ?? ?delete q; ?? ?s_Number--; ?? ?return true; } #endif // !NODELIST_S
教師類的聲明:對教師的一些信息的抽象,包含的數(shù)據(jù)及行為
#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
管理類:對教師這個管理系統(tǒng)進(jìn)行管理
#pragma once #include<iostream> #include"List.h" #include"Teacher.h" #include<fstream> #ifndef MANAGE_S #define MANAGE_S class 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
管理類的具體實(shí)現(xiàn):
#include "Management.h" Management::Management() { } Management::~Management() { } void Management::ShowAll() { ?? ?cout << "從左到右依次為教職工號、姓名、性別、年齡、教學(xué)科目、電話號碼、月薪、評分" << 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 << "請依次輸入老師的教學(xué)科目、電話號碼、月薪和評分:" << 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 << "系統(tǒng)中沒有該老師信息!" << 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 << "系統(tǒng)中沒有該老師信息!" << 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 << "系統(tǒng)中沒有該老師的信息!" << endl; ?? ??? ?return; ?? ?} ?? ?cout << "您要修改哪一樣信息?(1.教學(xué)科目 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 << "請問您想根據(jù)哪一項(xiàng)對教師信息進(jìn)行排序?" << 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 << "數(shù)據(jù)已經(jīng)為空!" << endl; ?? ??? ?return; ?? ?} ?? ?else if (s_TeacherList.Clear()) ?? ??? ?cout << "刪除數(shù)據(jù)成功!" << endl; ?? ?else {? ?? ??? ??? ?cout << "刪除數(shù)據(jù)失敗,程序退出" << endl; ?? ??? ??? ?exit(0); ?? ? ? ?} ?? ?return; }
主函數(shù):菜單選項(xiàng)
#include<iostream> #include<fstream> #include <string> #include"Management.h" using namespace std; int main() { ?? ?Management manager; ?? ?while (1) ?? ?{ ?? ??? ?cout << "**********************************" << endl; ?? ??? ?cout << "****歡迎您使用教師信息系統(tǒng)********" << endl; ?? ??? ?cout << "* ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?*" << endl; ?? ??? ?cout << "* ?|輸入數(shù)字執(zhí)行您想使用的功能| ?*" << 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.清空所有數(shù)據(jù) ? ? ? ? *" << 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; }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C++實(shí)現(xiàn)教工考勤信息管理系統(tǒng)
- C++實(shí)現(xiàn)教職工信息管理系統(tǒng)課程設(shè)計(jì)
- C++實(shí)現(xiàn)教職工信息管理系統(tǒng)
- C++實(shí)現(xiàn)教職工管理系統(tǒng)課程設(shè)計(jì)
- C++實(shí)現(xiàn)高校教室管理系統(tǒng)
- C++實(shí)現(xiàn)評教管理系統(tǒng)
- C++實(shí)現(xiàn)簡單的學(xué)生管理系統(tǒng)
- C++學(xué)生信息管理系統(tǒng)
- 學(xué)生成績管理系統(tǒng)C++實(shí)現(xiàn)代碼
- C++實(shí)現(xiàn)教務(wù)管理系統(tǒng)
相關(guān)文章
ShellExecute函數(shù)用法的實(shí)例代碼
ShellExecute函數(shù)用法的實(shí)例代碼,需要的朋友可以參考一下2013-03-03C語言實(shí)現(xiàn)猜數(shù)字小游戲的示例代碼
猜數(shù)字小游戲是我們小時候喜歡我們一個經(jīng)典小游戲。本文將用C語言實(shí)現(xiàn)這一經(jīng)典游戲,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-08-08C語言實(shí)現(xiàn)圖書管理系統(tǒng)課程設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)圖書管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-07-07C語言strlen和sizeof在數(shù)組中的使用詳解
對于 strlen 和 sizeof,相信不少程序員會混淆其功能。雖然從表面上看它們都可以求字符串的長度,但二者卻存在著許多不同之處及本質(zhì)區(qū)別2021-10-10