欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實(shí)現(xiàn)職工信息管理系統(tǒng)

 更新時(shí)間:2022年01月20日 12:20:32   作者:小生_無情  
這篇文章主要為大家詳細(xì)介紹了c++實(shí)現(xiàn)職工信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(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)系的前世今生

    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-04
  • C語言 動(dòng)態(tài)內(nèi)存開辟常見問題解決與分析流程

    C語言 動(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-03
  • C語言數(shù)據(jù)結(jié)構(gòu)的時(shí)間復(fù)雜度和空間復(fù)雜度

    C語言數(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語言基礎(chǔ) strlen 函數(shù)

    C語言基礎(chǔ) strlen 函數(shù)

    這篇文章主要介紹了C語言基礎(chǔ) strlen 函數(shù),在C 語言中,char 字符串也是一種非常重要的數(shù)據(jù)類型,我們可以使用 strlen 函數(shù)獲取字符串長(zhǎng)度,這就是C語言strlen 函數(shù)的作用,下面我們來簡(jiǎn)單介紹該內(nèi)容,需要的朋友可以參考以下
    2021-10-10
  • 使用C語言訪問51單片機(jī)中存儲(chǔ)器的核心代碼

    使用C語言訪問51單片機(jī)中存儲(chǔ)器的核心代碼

    這篇文章主要介紹了使用C語言訪問51單片機(jī)中存儲(chǔ)器的相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • C++利用遞歸實(shí)現(xiàn)走迷宮

    C++利用遞歸實(shí)現(xiàn)走迷宮

    這篇文章主要為大家詳細(xì)介紹了C++利用遞歸實(shí)現(xiàn)走迷宮,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++中的頭文件與Extern(外部函數(shù)調(diào)用)方式

    C++中的頭文件與Extern(外部函數(shù)調(diào)用)方式

    這篇文章主要介紹了C++中的頭文件與Extern(外部函數(shù)調(diào)用)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C 語言基礎(chǔ)----詳解C中的運(yùn)算符

    C 語言基礎(chǔ)----詳解C中的運(yùn)算符

    這篇文章主要介紹了C語言中的運(yùn)算符,文中講解非常詳細(xì),適合初學(xué)小白進(jìn)行學(xué)習(xí),想入門C語言的朋友不妨了解下
    2020-06-06
  • C/C++ assert()函數(shù)用法案例總結(jié)

    C/C++ assert()函數(shù)用法案例總結(jié)

    這篇文章主要介紹了C/C++ assert()函數(shù)用法案例總結(jié),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • stl容器set,map,vector之erase用法與返回值詳細(xì)解析

    stl容器set,map,vector之erase用法與返回值詳細(xì)解析

    在使用 list、set 或 map遍歷刪除某些元素時(shí)可以這樣使用,如下所示
    2013-09-09

最新評(píng)論