C++实现职工信息管理系统
本文实例为大家分享了c++实现职工信息管理系统的具体代码,供大家参考,具体内容如下
1、项目需求
2、功能实现的具体思路为:
(1) 经行职工信息的读入,用while循环进行读入,对于职工信息类型的设定方便起见除年龄和薪资用int类型其他信息都用string类型,职工信息用ostream 流写入txt并将信息保存在txt文件中,打印职工信息由于c++读文件方式不方便所以用c语言方式读文件,文件读取以后将文件中读取的信息加载到vector容器中后打印在终端窗口,其他功能的实现也是将文件中的信息读取到vector容器中,后用vector容器中的重载函数进行功能的实现;
3、头文件的编写的具体实现
#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(); //查询 按籍贯或学历查询职工信息 void lookWorkerInformation(); //按工资高低排序 void sortWorkerInformation(); //删除职工信息 按姓名删除 void deleteWorkerInformation(); //修改职工信息 把研究生薪资增加 500 void addWorkerSalary(); friend ostream& operator<<(ostream& os, const Worker& worker); //友元函数直接输出对象的信息 Worker& operator=(const Worker& worker); //赋值构造函数 private: string workNumber; //职工号 string name; //名字 string gender; //性别 string education; //学历 string addr; //籍贯 string phoneNumber; //电话号码 int age; //年龄 int salary; //薪资 void loadWorkerInformation(); void printWorkerInformation(); vector<Worker>worker; };
ostream& operator<<(ostream& os, const Worker& worker); //使用重载函数直接输出对象的信息进行输出
4、对头文件中函数的具体实现
#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 << "职工号:" << workNumber << " 性别:" << gender << " 名字:" << name << " 年龄:" << age << " 学历:" << education << " 籍贯:" << addr << " 薪资:" << salary << " 电话号码:" << phoneNumber; return ret.str(); } void Worker::addWorkerInformation(vector<Worker>& worker){ string workNumber; //职工号 string name; //名字 string gender; //性别 string education; //学历 string addr; //籍贯 string phoneNumber; //电话号码 int age; //年龄 int salary; //年龄 while (1) { cout << "输入职工号[输入 0 结束输入];"; cin >> workNumber; if (workNumber == ZERO) { break; } cout << "输入名字:"; cin >> name; cout << "输入性别:"; cin >> gender; cout << "输入学历:"; cin >> education; cout << "输入籍贯:"; cin >> addr; cout << "输入电话号码:"; 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(); } //查询 按籍贯或学历查询职工信息 void Worker::lookWorkerInformation(){ string addr; string education; cout << "输入要查询的职工籍贯:"; cin >> addr; cout << "请输入要查询的职工学历:"; 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 << "请输入你要删除人的姓名:"; 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]; //职工号 char name[32]; //名字 char gender[32]; //性别 char education[32]; //学历 char addr[32]; //籍贯 char phoneNumber[32]; //电话号码 int age; //年龄 int salary; //年龄 string line; ifstream inFile; inFile.open(NAME); if (!inFile.is_open()) { cout << "----职工数据库打开失败----"; inFile.close(); exit(1); } while (1) { getline(inFile, line); if (inFile.eof()) { break; } if (line == "")continue; sscanf_s(line.c_str(), "职工号:%s 性别:%s 名字:%s 年龄:%d 学历:%s 籍贯:%s 薪资:%d 电话号码:%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<< "职工号:" <<worker.workNumber << " 性别:" << worker.gender << " 名字:" << worker.name << " 年龄:" << worker.age << " 学历:" << worker.education << " 籍贯:" << worker.addr << " 薪资:" << worker.salary << " 电话号码:" << worker.phoneNumber; return os; }
5、main函数的具体实现
#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】根据籍贯和学历对职工信息进行查询" << endl; cout << "输入【2】按薪水对职工信息进行排序" << 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();//根据籍贯和学历对职工信息进行查询 cout << "---已完成该功能---" << endl << endl; break; case TWO: work.sortWorkerInformation();//按薪水对职工信息进行排序 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;//退出循环 break; default: cout << "----无其他功能选项----"; break; } } } while (quit == false); system("pause"); return 0; }
6、功能3,4,5,6,的实现都是将文件中的信息加载到vector中,并且使用的都是保存了worker这个类对象的同一个容器(假如先实现工能3,将信息加载到vector中后功能3结束以后,功能3使用到的职工信息依然在vector这个容器中,所以使用完一个函数后要将vector中的信息清理完全,不然会影响下一个函数的使用)。
7、在实现功能5的时候会使用到vector容器的重载函数( worker.erase(worker.begin()+i);)使用完以后返回的是下一个迭代器指向下一个对象,所以在使用使用for循环遍历容器的时候因注意for (int i = 0;i < worker.size();i++) 中i++具体放在哪个位置比较合适。
8、这是本人在编写程序的时候发现的坑如果有什么错误请批评指正。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持猪先飞。
原文出处:https://blog.csdn.net/qq_55164622/article/details/118737614
相关文章
- vector是表示可以改变大小的数组的序列容器,本文主要介绍了C++STL标准库std::vector的使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2022-03-06
- 这篇文章主要介绍了C++中取余运算的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
- 这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- 本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
- 本篇文章主要介绍了C++中四种加密算法之AES源代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...2020-04-25
- 整数拆分,指把一个整数分解成若干个整数的和。本文重点给大家介绍C++ 整数拆分方法详解,非常不错,感兴趣的朋友一起学习吧...2020-04-25
- 这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
- 这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
- 这篇文章主要为大家详细介绍了python实现学生通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-25
- 这篇文章主要介绍了C++ bitset用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- 本篇文章小编并不是为大家讲解string类型的用法,而是讲解我个人比较好奇的问题,就是string 类型占几个字节...2020-04-25
- 这篇文章主要为大家详细介绍了C++ Eigen库计算矩阵特征值及特征向量,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
- 这篇文章主要介绍了C++ pair的用法实例详解的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了VSCode C++多文件编译的简单使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-29
- 虽然C++11引入了智能指针的,但是开发人员在与内存的斗争问题上并没有解放,如果我门实用不当仍然有内存泄漏问题,其中智能指针的循环引用缺陷是最大的问题。下面通过实例代码给大家介绍c++中的循环引用,一起看看吧...2020-04-25
- 这篇文章主要给大家介绍了关于C++随机点名生成器的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- map容器是C++ STL中的重要一员,删除map容器中value为指定元素的问题是我们经常与遇到的一个问题,下面这篇文章主要给大家介绍了关于利用C++如何删除map容器中指定值的元素的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。...2020-04-25
- 护卫神·主机管理系统该版本支持在Windows Server 200320082012,含32位和64位,直接开设配置WEB站、FTP站,以及SQL Server和MySQL,是您开设和管理虚拟主机的绝好帮手。但是对于新用户可能在使用上有一些困难,因此请仔细阅读如下说明文档...2016-01-27
- 这篇文章主要介绍了C++ 约瑟夫环问题案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...2021-08-15
- 这篇文章主要介绍了C++中cin的用法详细,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25