C++實(shí)現(xiàn)職工信息管理系統(tǒng)
本文實(shí)例為大家分享了c++實(shí)現(xiàn)職工信息管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
1、項(xiàng)目需求
2、功能實(shí)現(xiàn)的具體思路為:
(1) 經(jīng)行職工信息的讀入,用while循環(huán)進(jìn)行讀入,對(duì)于職工信息類型的設(shè)定方便起見除年齡和薪資用int類型其他信息都用string類型,職工信息用ostream 流寫入txt并將信息保存在txt文件中,打印職工信息由于c++讀文件方式不方便所以用c語言方式讀文件,文件讀取以后將文件中讀取的信息加載到vector容器中后打印在終端窗口,其他功能的實(shí)現(xiàn)也是將文件中的信息讀取到vector容器中,后用vector容器中的重載函數(shù)進(jìn)行功能的實(shí)現(xiàn);
3、頭文件的編寫的具體實(shí)現(xiàn)
#pragma once #include<string> #include<vector> ? using namespace std; ? class Worker { public: ? ? Worker(string workNumber, string name, string gender, ? ? ? ? string education, string addr, string phoneNumber, ? ? ? ? int age, int salary); ? ? Worker(); ? ? ~Worker(); ? ? //職工信息描述 ? ? string description(); ? ? ? //錄入職工信息 ? ? static void addWorkerInformation(vector<Worker>&worker); ? ? void addWorkerInformations(); ? ? ? //職工信息瀏覽 ? ? void putWorkerInformation(); ? ? ? //查詢 按籍貫或?qū)W歷查詢職工信息 ? ? void lookWorkerInformation(); ? ? ? //按工資高低排序 ? ? void sortWorkerInformation(); ? ? ? //刪除職工信息 按姓名刪除 ? ? void deleteWorkerInformation(); ? ? ? //修改職工信息 把研究生薪資增加 500 ? ? void addWorkerSalary(); ? ? ? friend ostream& operator<<(ostream& os, const Worker& worker); ? //友元函數(shù)直接輸出對(duì)象的信息 ? ? Worker& operator=(const Worker& worker); ? ?//賦值構(gòu)造函數(shù) private: ? ? string workNumber; ? ?//職工號(hào) ? ? string name; ? ?//名字 ? ? string gender; ? ?//性別 ? ? string education; //學(xué)歷 ? ? string addr; ? ?//籍貫 ? ? string phoneNumber; //電話號(hào)碼 ? ? int age; ? ? ? ?//年齡 ? ? int salary; ?//薪資 ? ? ? void loadWorkerInformation(); ? ? void printWorkerInformation(); ? ? ? vector<Worker>worker; };
ostream& operator<<(ostream& os, const Worker& worker); //使用重載函數(shù)直接輸出對(duì)象的信息進(jìn)行輸出
4、對(duì)頭文件中函數(shù)的具體實(shí)現(xiàn)
#include<string> #include<sstream> #include<iostream> #include<fstream> #include<vector> #include"worker.h" ? #define NAME "workerInformation.txt" #define ZERO "0" #define MONEY 500 #define STUDENT "研究生" ? Worker::Worker(string workNumber, string name, string gender, ? ? string education, string addr, string phoneNumber,? ? ? int age, int salary){ ? ? this->addr = addr; ? ? this->age = age; ? ? this->gender = gender; ? ? this->name = name; ? ? this->phoneNumber = phoneNumber; ? ? this->education = education; ? ? this->salary = salary; ? ? this->workNumber = workNumber; } ? Worker::Worker(){ ? } ? Worker::~Worker(){ ? } ? //職工信息描述 string Worker::description(){ ? ? stringstream ret; ? ? ret << "職工號(hào):" << workNumber << " ?性別:" << gender << " ?名字:" << name ? ? ? ? << " ?年齡:" << age << " ?學(xué)歷:" << education << " ?籍貫:" << addr ? ? ? ? << " ?薪資:" << salary << " ?電話號(hào)碼:" << phoneNumber; ? ? return ret.str(); } ? void Worker::addWorkerInformation(vector<Worker>& worker){ ? ? string workNumber; ? ?//職工號(hào) ? ? string name; ? ?//名字 ? ? string gender; ? ?//性別 ? ? string education; //學(xué)歷 ? ? string addr; ? ?//籍貫 ? ? string phoneNumber; //電話號(hào)碼 ? ? int age; ? ? ? ?//年齡 ? ? int salary; ?//年齡 ? ? ? while (1) { ? ? ? ? cout << "輸入職工號(hào)[輸入 0 結(jié)束輸入];"; ? ? ? ? cin >> workNumber; ? ? ? ? if (workNumber == ZERO) { ? ? ? ? ? ? break; ? ? ? ? } ? ? ? ? cout << "輸入名字:"; ? ? ? ? cin >> name; ? ? ? ? cout << "輸入性別:"; ? ? ? ? cin >> gender; ? ? ? ? cout << "輸入學(xué)歷:"; ? ? ? ? cin >> education; ? ? ? ? cout << "輸入籍貫:"; ? ? ? ? cin >> addr; ? ? ? ? cout << "輸入電話號(hào)碼:"; ? ? ? ? cin >> phoneNumber; ? ? ? ? cout << "輸入年齡:"; ? ? ? ? cin >> age; ? ? ? ? cout << "輸入薪資:"; ? ? ? ? cin >> salary; ? ? ? ? worker.push_back(Worker(workNumber, name, gender, ? ? ? ? ? ? education, addr, phoneNumber, ? ? ? ? ? ? age, salary)); ? ? } ? ? return; } ? void Worker::addWorkerInformations(){ ? ? ofstream outFile; ? ? outFile.open(NAME,ios::app); ? ? Worker::addWorkerInformation(this->worker); ? ? ? for (int i = 0;i < worker.size();i++) { ? ? ? ? outFile << worker[i].description()<<endl; ? ? } ? ? worker.clear(); ? ? outFile.close(); } ? //職工信息瀏覽 void Worker::putWorkerInformation(){ ? ? loadWorkerInformation(); ? ? printWorkerInformation(); } ? //查詢 按籍貫或?qū)W歷查詢職工信息 void Worker::lookWorkerInformation(){ ? ? string ?addr; ? ? string education; ? ? cout << "輸入要查詢的職工籍貫:"; ? ? cin >> addr; ? ? cout << "請(qǐng)輸入要查詢的職工學(xué)歷:"; ? ? cin >> education; ? ? ? loadWorkerInformation(); ? ? for (int i = 0;i < worker.size();i++) { ? ? ? ? if ((worker[i].addr == addr)&&(worker[i].education == education)){ ? ? ? ? ? ? cout << worker[i] << endl; ? ? ? ? } ? ? } } ? //按工資高低排序 void Worker::sortWorkerInformation(){ ? ? loadWorkerInformation(); ? ? Worker workers; ? ? for (int j = 0;j < worker.size() ;j++) { ? ? ? ? for (int i = j + 1;i < worker.size();i++) { ? ? ? ? ? ? if (worker[j].salary > worker[i].salary) { ? ? ? ? ? ? ? ? workers = worker[i]; ? ? ? ? ? ? ? ? worker[i] = worker[j]; ? ? ? ? ? ? ? ? worker[j] = workers; ? ? ? ? ? ? } ? ? ? ? } ? ? } ? ? printWorkerInformation(); } ? //刪除職工信息 按姓名刪除 void Worker::deleteWorkerInformation(){ ? ? ofstream outFile; ? ? string name; ? ? cout << "請(qǐng)輸入你要?jiǎng)h除人的姓名:"; ? ? cin >> name; ? ? ? loadWorkerInformation(); ? ? outFile.open(NAME); ? ? for (int i = 0;i < worker.size();) { ? ? ? ? if (worker[i].name == name) { ? ? ? ? ? ? worker.erase(worker.begin() + i); ? ? ? ? } ? ? ? ? else { ? ? ? ? ? ? outFile << worker[i] << endl; ? ? ? ? ? ? i++; ? ? ? ? } ? ? } ? } ? //修改職工信息 把研究生薪資增加 500 void Worker::addWorkerSalary(){ ? ? loadWorkerInformation(); ? ? int salary; ? ? ? ofstream outFile; ? ? outFile.open(NAME); ? ? ? for (int i = 0;i < worker.size();) { ? ? ? ? if (worker[i].education == STUDENT) { ? ? ? ? ? ? salary = worker[i].salary + MONEY; ? ? ? ? ? ? outFile<<Worker(worker[i].workNumber,worker[i].name,worker[i].gender, ? ? ? ? ? ? ? ? worker[i].education, worker[i].addr, worker[i].phoneNumber, ? ? ? ? ? ? ? ? worker[i].age, salary)<<endl; ? ? ? ? ? ? ? worker.erase(worker.begin()+i); ? ? ? ? } ? ? ? ? else { ? ? ? ? ? ? outFile << worker[i] << endl; ? ? ? ? ? ? i++; ? ? ? ? } ? ? } ? ? worker.clear(); } ? Worker& Worker::operator=(const Worker& worker) { ? ? addr = worker.addr; ? ? age = worker.age; ? ? gender = worker.gender; ? ? education = worker.education; ? ? name = worker.name; ? ? phoneNumber = worker.phoneNumber; ? ? salary = worker.salary; ? ? workNumber = worker.workNumber; ? ? ? return *this; } ? void Worker::loadWorkerInformation(){ ? ? char workNumber[32]; ? ?//職工號(hào) ? ? char name[32]; ? ?//名字 ? ? char gender[32]; ? ?//性別 ? ? char education[32]; //學(xué)歷 ? ? char addr[32]; ? ?//籍貫 ? ? char phoneNumber[32]; //電話號(hào)碼 ? ? int age; ? ? ? ?//年齡 ? ? int salary; ?//年齡 ? ? ? string line; ? ? ifstream inFile; ? ? inFile.open(NAME); ? ? ? if (!inFile.is_open()) { ? ? ? ? cout << "----職工數(shù)據(jù)庫打開失敗----"; ? ? ? ? inFile.close(); ? ? ? ? exit(1); ? ? } ? ? while (1) { ? ? ? ? getline(inFile, line); ? ? ? ? if (inFile.eof()) { ? ? ? ? ? ? break; ? ? ? ? } ? ? ? ? if (line == "")continue; ? ? ? ? ? sscanf_s(line.c_str(), "職工號(hào):%s 性別:%s 名字:%s 年齡:%d 學(xué)歷:%s 籍貫:%s 薪資:%d 電話號(hào)碼:%s", ? ? ? ? ? ? workNumber, sizeof(workNumber), gender, sizeof(gender), name, sizeof(name), ? ? ? ? ? ? &age, education, sizeof(education), addr, sizeof(addr), &salary,? ? ? ? ? ? ? phoneNumber, sizeof(phoneNumber)); ? ? ? ? ? worker.push_back(Worker(string(workNumber), string(name), string(gender), ? ? ? ? ? ? string(education), string(addr), string(phoneNumber), ? ? ? ? ? ? age, salary)); ? ? } } ? void Worker::printWorkerInformation(){ ? ? for (int i = 0;i < worker.size();i++) { ? ? ? ? cout << worker[i] << endl<<endl; ? ? } ? ? worker.clear(); } ? ostream& operator<<(ostream& os, const Worker& worker){ ? ? os<< ?"職工號(hào):" <<worker.workNumber << " ?性別:" << worker.gender << " ?名字:" << worker.name ? ? ? ? << " ?年齡:" << worker.age << " ?學(xué)歷:" << worker.education << " ?籍貫:" << worker.addr ? ? ? ? << " ?薪資:" << worker.salary << " ?電話號(hào)碼:" << worker.phoneNumber; ? ? return os; }
5、main函數(shù)的具體實(shí)現(xiàn)
#include<stdlib.h> #include<iostream> #include<conio.h> #include"worker.h" ? #define ONE '1' #define TWO '2' #define THREE '3' #define FOUR '4' #define FIVE '5' #define SIX '6' #define SEVEN '7' ? int main(void) { ? ? Worker work; ? ? cout << "輸入【1】根據(jù)籍貫和學(xué)歷對(duì)職工信息進(jìn)行查詢" << endl; ? ? cout << "輸入【2】按薪水對(duì)職工信息進(jìn)行排序" << endl; ? ? cout << "輸入【3】打印職工信息" << endl; ? ? cout << "輸入【4】增加職工信息" << endl; ? ? cout << "輸入【5】增加研究生薪水" << endl; ? ? cout << "輸入【6】刪除信息" << endl; ? ? cout << "輸入【7】退出功能" << endl << endl; ? ? ? bool quit = false; ? ? do { ? ? ? ?? ? ? ? ? if (_kbhit()) { ? ? ? ? ? ? char ch = _getch(); ? ? ? ? ? ? switch(ch){ ? ? ? ? ? ? case ?ONE: ? ? ? ? ? ? ? ? work.lookWorkerInformation();//根據(jù)籍貫和學(xué)歷對(duì)職工信息進(jìn)行查詢 ? ? ? ? ? ? ? ? cout << "---已完成該功能---" << endl << endl; ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case ?TWO: ? ? ? ? ? ? ? ? work.sortWorkerInformation();//按薪水對(duì)職工信息進(jìn)行排序 ? ? ? ? ? ? ? ? cout << "---已完成該功能---" << endl << endl; ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case THREE:? ? ? ? ? ? ? ? ? work.putWorkerInformation();//打印職工信息; ? ? ? ? ? ? ? ? cout << "---已完成該功能---" << endl << endl; ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case ?FOUR: ? ? ? ? ? ? ? ? work.addWorkerInformations();//增加職工信息 ? ? ? ? ? ? ? ? cout << "---已完成該功能---" << endl << endl; ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case ?FIVE: ? ? ? ? ? ? ? ? work.addWorkerSalary();//增加研究生薪水 ? ? ? ? ? ? ? ? cout << "---已完成該功能---" << endl << endl; ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case ?SIX: ? ? ? ? ? ? ? ? work.deleteWorkerInformation();//刪除信息 ? ? ? ? ? ? ? ? cout << "---已完成該功能---" << endl << endl; ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? case ?SEVEN: ? ? ? ? ? ? ? ? quit = true;//退出循環(huán) ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? default: ? ? ? ? ? ? ? ? cout << "----無其他功能選項(xiàng)----"; ? ? ? ? ? ? ? ? break; ? ? ? ? ? ? } ? ? ? ? } ? ? } while (quit == false); ? ?? ? ? system("pause"); ? ? return 0; }
6、功能3,4,5,6,的實(shí)現(xiàn)都是將文件中的信息加載到vector中,并且使用的都是保存了worker這個(gè)類對(duì)象的同一個(gè)容器(假如先實(shí)現(xiàn)工能3,將信息加載到vector中后功能3結(jié)束以后,功能3使用到的職工信息依然在vector這個(gè)容器中,所以使用完一個(gè)函數(shù)后要將vector中的信息清理完全,不然會(huì)影響下一個(gè)函數(shù)的使用)。
7、在實(shí)現(xiàn)功能5的時(shí)候會(huì)使用到vector容器的重載函數(shù)( worker.erase(worker.begin()+i);)使用完以后返回的是下一個(gè)迭代器指向下一個(gè)對(duì)象,所以在使用使用for循環(huán)遍歷容器的時(shí)候因注意for (int i = 0;i < worker.size();i++) 中i++具體放在哪個(gè)位置比較合適。
8、這是本人在編寫程序的時(shí)候發(fā)現(xiàn)的坑如果有什么錯(cuò)誤請(qǐng)批評(píng)指正。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
c++標(biāo)準(zhǔn)輸入輸出流關(guān)系的前世今生
這篇文章主要給大家介紹了關(guān)于c++標(biāo)準(zhǔn)輸入輸出流關(guān)系的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04C語言 動(dòng)態(tài)內(nèi)存開辟常見問題解決與分析流程
動(dòng)態(tài)內(nèi)存是相對(duì)靜態(tài)內(nèi)存而言的。所謂動(dòng)態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動(dòng)態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存2022-03-03C語言數(shù)據(jù)結(jié)構(gòu)的時(shí)間復(fù)雜度和空間復(fù)雜度
算法在編寫成可執(zhí)行程序后,運(yùn)行時(shí)需要耗費(fèi)時(shí)間資源和空間(內(nèi)存)資源 。因此衡量一個(gè)算法的好壞,一般是從時(shí)間和空間兩個(gè)維度來衡量的,即時(shí)間復(fù)雜度和空間復(fù)雜度,感興趣的同學(xué)可以參考閱讀2023-04-04使用C語言訪問51單片機(jī)中存儲(chǔ)器的核心代碼
這篇文章主要介紹了使用C語言訪問51單片機(jī)中存儲(chǔ)器的相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01C++中的頭文件與Extern(外部函數(shù)調(diào)用)方式
這篇文章主要介紹了C++中的頭文件與Extern(外部函數(shù)調(diào)用)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08C/C++ assert()函數(shù)用法案例總結(jié)
這篇文章主要介紹了C/C++ assert()函數(shù)用法案例總結(jié),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09stl容器set,map,vector之erase用法與返回值詳細(xì)解析
在使用 list、set 或 map遍歷刪除某些元素時(shí)可以這樣使用,如下所示2013-09-09