1、公司人事管理系统(C++)

2023-05-31 0 947

如前所述C++的一般来说式“子公司庶务信息控制系统”

青春:让大部份猿台湾同胞都看不懂的标识符!

(后方高能量:注解贼多!)

第二次碰触C++,原因在于好友的专精大工作台,毕竟难以了找我帮写控制系统。历经六天整夜的自修考究,再找了许多网路上天神的标识符先进经验,总算竣工。那时再次将标识符优化,并做了详尽的注解如是说。专精术语太少说——

Chalancon结构设计图

1、公司人事管理系统(C++)
1、公司人事管理系统(C++)
1、公司人事管理系统(C++)
1、公司人事管理系统(C++)

…尾端略去采用者采用效用.

一、机能——

1、难题叙述

两个小子公司包涵五类相关人员:副经理、控制技术相关人员,产品销售相关人员和产品销售副经理,各种类型相关人员的薪水计算结果如下表所示:

副经理:一般来说月薪水(8000);

控制技术相关人员:月薪水按控制技术级别(1~8级)(1600+级别*300);

产品销售相关人员:按会员费(4%*产品营业额);

产品销售副经理:薪水+会员费(1500+0.2%*总销售额);

——结构设计两个管理程序,实现对各种类型相关人员的信息输入,修改和显示。

2、假定 副经理 和 产品销售副经理 都只能有两个;

用文本编辑器编辑两个文本文件(总数20人以上),包涵各种类型相关人员的信息;并且在程序中能修改保存。

3、菜单机能:添加子公司相关人员(输入),修改信息,浏览信息(输出),按姓名查找,月薪水排序。

二、思路分析——

1、定义两个主函数

在主函数中画出一般来说式的菜单界面,以便采用者选择。

2、有五类相关人员,每个相关人员都有不同的属性(包括姓名、级别、薪水),因为类型不同,信息多,同属两个,

于是考虑定义不同的职工类或者结构体,将其信息封装

以便其后的相关人员管理,直接调用。

3、开始编写不同的机能,包涵录入、增、删、改、查、排序等。

每两个机能用两个函数,然后在主函数的菜单中分别调用

(注意:要使每两个函数机能采用的相关人员信息同步,定义全局变量。)

因为副经理和产品销售副经理都只有两个,所以不用考虑排序。

三、所用头文件如是说

<iostream>:C++标准库,定义了用于读写流(cin、cout)的基本类型

<algoritlm>:C++标准模板中最重要的头文件之一(其中包涵了各种数学函数)

<iomanip>:I/O流控制头文件,主要是对cin、cout操纵数据,即对比C语言中的格式化输出

<string>:字符串头文件,包括声明C++字符串,以及对字符串的一系列操作函数

四、上标识符

(天神轻喷)

#includ`在这里插入标识符片`e<iostream> #include<algorithm> #include<iomanip> #include<string> using namespace std; //C++标准程序库中大部份标识符都被定义于两个名为std的namespace(命名空间)中 /* 定义类 */ class Employee1 //定义职工类1——存放副经理 { public://定义可以被类访问的权限。(public是公有变量,此定义下的变量,类中,类外都能访问) char name[20]; //职工姓名,字符类型 int salary; //职工薪水,整型 }; class Employee1 jl; //定义两个全局变量jl,可引用类1中的属性 存放副经理信息 class Employee2 //定义职工类2——产品销售副经理 { public: char name[20]; //职工姓名 int profit; //总经额 int salary; //职工薪水 }; class Employee2 xsjl; //定义两个全局变量xsjl,用来存放产品销售副经理信息 class Employee3 //定义职工类3——控制技术相关人员 { public: char name[20]; //职工姓名 int rank; //控制技术级别 int salary; //职工薪水 }; class Employee3 jsry[10]; //定义两个全局数组变量jsry,用来存放职工信息 class Employee3 ch1[10];//作为排序时交换的尾端变量 class Employee4 //定义职工类4——产品销售相关人员 { public: char name[20]; //职工姓名 int sale; //产品销售总量 int salary; //职工薪水 }; class Employee4 xsry[10]; //定义两个全局变量xsry,用来存放职工信息 class Employee4 ch2[10];//作为排序时交换的尾端变量 int a = 0, b = 0, c = 0; //存放实际输入的职工人数(计数变量) /*(全局)函数声明,方便之后的大部份调用正常执行*/ void use(); //采用如是说 void manage(); //信息控制系统 void query(); //查询控制系统 void input(); //录入相关人员函数声明 void show(); //显示职工信息函数声明 void change(); //修改信息 /*主函数,程序入口*/ int main() { int select;//定义两个输入变量,以供采用者进行菜单选择 while (1)//采用死循环,使程序不是一次性结束 { //初始界面(菜单) system(“cls”);//调用控制系统命令cls实现一次清屏操作 cout << “\t \t ************欢迎采用职工信息控制系统************\n”; cout << “\t \t *——————————————*\n”; cout << “\t \t * \t \t 0、停止程序   \t *\n”; cout << “\t \t * \t \t 1、采用如是说   \t *\n”; cout << “\t \t * \t \t 2、进入信息控制系统 \t *\n”;//包涵录入、修改和浏览 cout << “\t \t * \t \t 3、进入查询控制系统 \t *\n”;//包涵查找和排序 cout << “\t \t * \t \t 4、退出控制系统 \t *\n”; cout << “\t \t *——————————————*\n”; cout << “\t \t 请输入您需要访问的编号是(1–4):”; cin >> select; if (select == 0) break; //每两个case就是两个机能。根据自己定义的菜单填写所调用的机能 switch (select) { case 1: system(“cls”);//每个机能采用两个清屏,相当于刷新窗口界面,为机能重开窗口 use(); //调用函数,显示此程序采用说明 system(“pause”); break; case 2: system(“cls”);//同上 manage(); //调用函数进入信息控制系统——录入信息 system(“pause”); break; case 3: system(“cls”);//同上 query(); //调用函数进入查询控制系统——查看信息 system(“pause”); break; case 4: system(“cls”);//同上 cout << “谢谢采用,您已经退出控制系统:” << endl;//<<endl是C++中紧跟输出的两个换行 exit(0); //C++中的异常处理语句,exit是在调用处强行退出程序,运行一次程序就结束 //0表示程序正常退出 default: system(“cls”);//同上 cout << “输入错误,没有此选项,请再次选择!” << endl;//如果采用者输入其他数字,则提示其再次输入 } } return 0; } /*自定义函数块——根据菜单中的选择写函数机能*/ //1、采用如是说函数 void use() { cout << “\t该子公司有副经理1名、产品销售副经理1名、控制技术相关人员10名、产品销售相关人员10名,共22名职工。” << endl; cout << “\t录入职工信息时要逐一全部录入” << endl; cout << “\t录入相关业绩,即可显示其当月薪水。\n” << endl; } //2、信息控制系统函数 void manage() { int choice; while (1) { //信息控制系统菜单 system(“cls”); cout << “\t \t ****************进入信息控制系统****************\n”; cout << “\t \t *——————————————*\n”; cout << “\t \t * \t \t 01 录入职工相关人员信息 \t *\n”; cout << “\t \t * \t \t 02 显示职工相关人员信息 \t *\n”; cout << “\t \t * \t \t 03 修改职工相关人员信息 \t *\n”; cout << “\t \t * \t \t 04 回到上一级 \t *\n”; cout << “\t \t *——————————————*\n”; cout << “\t \t 请输入您需要访问的编号是(1–4):”; cin >> choice; switch (choice) { case 1: system(“cls”); input(); //调用函数录入职工的薪水信息 system(“pause”); break; case 2: system(“cls”); show(); //调用函数浏览职工的薪水信息 system(“pause”); break; case 3: system(“cls”); change();//修改职工的薪水信息 break; case 4: system(“cls”); cout << “谢谢采用” << endl;//返回 return;//用来跳出此程序,并返回上两个程序(窗口)。 default: system(“cls”); cout << “没有此选项,请再次选择!” << endl;//如果采用者输入其他数字,则提示其再次输入 break; } } } //01 录入职工相关人员信息的函数 void input() { char cho1 = y;//小型判断量,y即是yes char cho2 = y; cout << endl << “\t\t副经理姓名:”; //输入姓名 cin >> jl.name;//用点来引用类变量中的从属变量 cout << “\t\t当月薪水(元):8000” << endl;//一般来说金额 cout << endl << “\t\t产品销售副经理姓名:”; cin >> xsjl.name; cout << “\t\t总产品营业额(元):”; cin >> xsjl.profit; //薪水+会员费(1500+0.2%*总产品营业额); xsjl.salary = 1500 + (int)((xsjl.profit)*0.002); cout << “\t\t当月薪水(元):” << xsjl.salary << endl; while (cho1 == y) { cout << endl << “\t\t控制技术相关人员姓名:”; cin >> jsry[a].name; cout << “\t\t控制技术级别(1~8级):”; cin >> jsry[a].rank; //月薪水按控制技术级别(1~8级)(1600+级别*300); jsry[a].salary = 1600 + jsry[a].rank * 300; cout << “\t\t当月薪水(元):” << jsry[a].salary << endl; a++; cout << “是否继续录入(y/n):”; cin >> cho1; } while (cho2 == y)//用循环来进行判断 { cout << endl << “\t\t产品销售相关人员姓名:”; cin >> xsry[b].name; cout << “\t\t产品营业额(元):”; cin >> xsry[b].sale; //按会员费(4%*产品营业额); xsry[b].salary = (int)(0.04*(xsry[b].sale)); cout << “\t\t当月薪水(元):” << xsry[b].salary << endl; b++; cout << “是否继续录入(y/n):”; cin >> cho2; } } //02 显示浏览大部份职工信息的函数 void show() { cout << left;//设置输出左对齐 cout << “|_________________________|_________________________|_________________________|” << endl; cout << “|” << setw(25) << “副经理姓名” << “|” << setw(25) << “当月薪水” << “|” << endl; cout << “|_________________________|_________________________|_________________________|” << endl; //setw设置宽度,简单的说就是输出的时候占几个字节(空格),相当于制表 cout << “|” << setw(25) << jl.name << “|” << setw(25) << 8000 << “|” << endl; cout << “|_________________________|_________________________|_________________________|” << endl; cout << “|” << setw(25) << “产品销售副经理姓名” << “|” << setw(25) << “总产品营业额” << “|” << setw(25) << “当月薪水” << “|” << endl; cout << “|_________________________|_________________________|_________________________|” << endl; cout << “|” << setw(25) << xsjl.name << “|” << setw(25) << xsjl.profit << “|” << setw(25) << xsjl.salary << “|” << endl; cout << “|_________________________|_________________________|_________________________|” << endl; cout << “|” << setw(25) << “控制技术相关人员姓名” << “|” << setw(25) << “控制技术级别” << “|” << setw(25) << “当月薪水” << “|” << endl; cout << “|_________________________|_________________________|_________________________|” << endl; for (int a = 0; a < 10; a++) { cout << “|” << setw(25) << jsry[a].name << “|” << setw(25) << jsry[a].rank << “|” << setw(25) << jsry[a].salary << “|” << endl; cout << “|_________________________|_________________________|_________________________|” << endl; } cout << endl; cout << “|” << setw(25) << “产品销售相关人员姓名” << “|” << setw(25) << “产品营业额” << “|” << setw(25) << “当月薪水” << “|” << endl; cout << “|_________________________|_________________________|_________________________|” << endl; for (int b = 0; b < 10; b++) { cout << “|” << setw(25) << xsry[b].name << “|” << setw(25) << xsry[b].sale << “|” << setw(25) << xsry[b].salary << “|” << endl; cout << “|_________________________|_________________________|_________________________|” << endl; } cout << endl; } //03 修改职工信息的函数 void change() { void jingLi(); void xsJingLi(); void jsRenYuan(); void xsRenYuan(); int a; cout << “\t1)副经理” << endl; cout << “\t2)产品销售副经理” << endl; cout << “\t3)控制技术相关人员” << endl; cout << “\t4)产品销售相关人员” << endl; cout << “\t5)返回上一级” << endl; cout << “\t \t 请选择您需要修改的职工(1~5):”; cin >> a; switch (a) { case 1: system(“cls”); jingLi();//修改副经理姓名 break; case 2: system(“cls”); xsJingLi();//修改产品销售副经理信息 break; case 3: system(“cls”); jsRenYuan();//修改控制技术相关人员信息 break; case 4: system(“cls”); xsRenYuan();//修改产品销售相关人员信息 break; case 5: system(“cls”); cout << “谢谢采用” << endl;//返回 return; } } //1)副经理 void jingLi() { cout << “\t\t请输入新副经理名字:”; cin >> jl.name;//jl.name是变量,可直接对其重赋值,即表示修改 cout << “\t\t当月薪水(元):8000” << endl;//一般来说金额 } //2)销售副经理 void xsJingLi() { cout << “\t\t产品销售副经理姓名:”; cin >> xsjl.name;//同理 cout << “\t\t总产品营业额(元):”; cin >> xsjl.profit; //薪水+会员费(1500+0.2%*总产品营业额); xsjl.salary = 1500 + (int)((xsjl.profit)*0.002);//金额改变后,再次计算 cout << “\t\t当月薪水(元):” << xsjl.salary << endl; } //3)控制技术相关人员 void jsRenYuan() { char cho1 = y; int i = 0; while (cho1 == y) { cout << endl << “\t\t再次录入控制技术相关人员姓名:”; cin >> jsry[i].name; cout << “\t\t控制技术级别(1~8级):”; cin >> jsry[i].rank; //月薪水按控制技术级别(1~8级)(1600+级别*300); jsry[i].salary = 1600 + jsry[i].rank * 300; cout << “\t\t当月薪水(元):” << jsry[i].salary << endl; i++; cout << “是否继续录入(y/n):”; cin >> cho1; } } //4)产品销售相关人员 void xsRenYuan() { int i = 0; char cho2 = y; while (cho2 == y) { cout << endl << “\t\t再次录入产品销售相关人员姓名:”; cin >> xsry[i].name; cout << “\t\t产品营业额(元):”; cin >> xsry[i].sale; //按会员费(4%*产品营业额); xsry[b].salary = (int)(0.04*(xsry[i].sale)); cout << “\t\t当月薪水(元):” << xsry[i].salary << endl; i++; cout << “是否继续录入(y/n):”; cin >> cho2; } } //3、查询信息函数(包括查找和排序) void query() { void chaZhao();//查找 void paiXu(void);//排序 int choice; while (1) { //信息控制系统菜单 system(“cls”); cout << “\t \t ********************************************\n”; cout << “\t \t *——————————————*\n”; cout << “\t \t * \t 01 按名字查找职工信息 \t *\n”; cout << “\t \t * \t 02 按月薪水对职工排序 \t *\n”; cout << “\t \t * \t 03 回到上一级 \t *\n”; cout << “\t \t *——————————————*\n”; cout << “\t \t ********************************************\n”; cout << “\t \t 请输入您需要访问的编号是(1–3):”; cin >> choice; switch (choice) { case 1: system(“cls”); chaZhao(); //调用函数录入职工的薪水信息 system(“pause”); break; case 2: system(“cls”); paiXu(); //调用函数对职工的信息进行排序 system(“pause”); break; case 3: system(“cls”); cout << “谢谢采用” << endl;//返回 return; default: system(“cls”); cout << “没有此选项,请再次选择!” << endl;//如果采用者输入其他数字,则提示其再次输入 break; } } } //01 按名字查找 void chaZhao() { int i = 0; char qname[10];//名字字符数组,用来存放输入要查询的相关人员名字,以便和已知名字对比,进行查找 cout << “请输入需要查询的职工姓名:”; cin >> qname;//采用字符数组名,直接输入字符 if (strcmp(jl.name, qname) == 0)//判断其与已知是否相等(strcmp是字符比较函数) { cout << “_______________________________________________________________________________” << endl; cout << “|” << setw(20) << “副经理姓名” << “|” << setw(12) << “当月薪水” << endl; cout << “_______________________________________________________________________________” << endl; cout << “|” << setw(20) << jl.name << “|” << setw(12) << 8000 << endl; cout << “_______________________________________________________________________________” << endl; } else if (strcmp(xsjl.name, qname) == 0) { cout << “_______________________________________________________________________________” << endl; cout << “|” << setw(20) << “产品销售经理姓名” << “|” << setw(20) << “总产品营业额” << “|” << setw(12) << “当月薪水” << endl; cout << “_______________________________________________________________________________” << endl; cout << “|” << setw(20) << xsjl.name << “|” << setw(20) << xsjl.profit << “|” << setw(12) << xsjl.salary << endl; cout << “_______________________________________________________________________________” << endl; } else { for (i = 0; i < 10; i++)//由于控制技术相关人员和产品销售相关人员较多,即采用循环来进行依次比较查找 { if (strcmp(jsry[i].name, qname) == 0) { cout << “_______________________________________________________________________________” << endl; cout << “|” << setw(20) << “控制技术相关人员姓名” << “|” << setw(20) << “控制技术级别” << “|” << setw(12) << “当月薪水” << endl; cout << “_______________________________________________________________________________” << endl; cout << “|” << setw(20) << jsry[i].name << “|” << setw(20) << jsry[i].rank << “|” << setw(12) << jsry[i].salary << endl; cout << “_______________________________________________________________________________” << endl; cout << endl; } else if (strcmp(xsry[i].name, qname) == 0) { cout << “_______________________________________________________________________________” << endl; cout << “|” << setw(20) << “产品销售相关人员姓名” << “|” << setw(20) << “销售额” << “|” << setw(12) << “当月薪水” << endl; cout << “_______________________________________________________________________________” << endl; cout << “|” << setw(20) << xsry[i].name << “|” << setw(20) << xsry[i].sale << “|” << setw(12) << xsry[i].salary << endl; cout << “_______________________________________________________________________________” << endl; cout << endl; } } if (i == 10) { cout << “抱歉,本子公司不存在此人!” << endl; } //此处有个小bug,不影响运行和结果但不美观,望懂的天神指教下 } //02 按月薪水进行排序(从大到小) void paiXu(void) { int i, j, k; int temp1, temp2;//用来辅助交换的尾端变量 int n, m; cout << left;//设置输出左对齐 cout << “_______________________________________________________________________________” << endl; cout << “|” << setw(20) << “副经理姓名” << “|” << setw(12) << “当月薪水” << endl; cout << “_______________________________________________________________________________” << endl; cout << “|” << setw(20) << jl.name << “|” << setw(12) << 8000 << endl; cout << “_______________________________________________________________________________” << endl; cout << “|” << setw(20) << “产品销售副经理姓名” << “|” << setw(20) << “总产品营业额” << “|” << setw(12) << “当月薪水” << endl; cout << “_______________________________________________________________________________” << endl; cout << “|” << setw(20) << xsjl.name << “|” << setw(20) << xsjl.profit << “|” << setw(12) << xsjl.salary << endl; cout << “_______________________________________________________________________________” << endl; //控制技术相关人员排序 cout << “|” << setw(20) << “控制技术相关人员姓名” << “|” << setw(20) << “控制技术级别” << “|” << setw(12) << “当月薪水” << endl; cout << “_______________________________________________________________________________” << endl; for (i = 0; i < 9; i++) { k = i;//保留两个原值 for (j = i + 1; j < 9; j++)//每一次都找最大的那个,替换当前面相应位置 //例如,第一回循环找出的最大替换到第0行,第二回循环找出的替换到第1行,以此类推。 { if (jsry[j].salary > jsry[k].salary)//如果后两个人的金额大于前两个 k = j;//就将大金额的相关人员下标赋值给k } //循环寻找大金额的相关人员,然后替换到前面位置(类成员都要进行替换) strcpy(ch1[i].name, jsry[i].name); strcpy(jsry[i].name, jsry[k].name); strcpy(jsry[k].name, ch1[i].name); temp1 = jsry[i].rank; jsry[i].rank = jsry[k].rank; jsry[k].rank = temp1; temp2 = jsry[i].salary; jsry[i].salary = jsry[k].salary; jsry[k].salary = temp2; } for (n = 0; n < 10; n++)//替换排序后再次输出 { cout << “|” << setw(20) << jsry[n].name << “|” << setw(20) << jsry[n].rank << “|” << setw(12) << jsry[n].salary << endl; cout << “_______________________________________________________________________________” << endl; } cout << endl; //产品销售相关人员排序与上同理 cout << “|” << setw(20) << “产品销售相关人员姓名” << “|” << setw(20) << “产品营业额” << “|” << setw(12) << “当月薪水” << endl; cout << “_______________________________________________________________________________” << endl; for (i = 0; i < 9; i++) { k = i; for (j = i + 1; j < 9; j++) { if (xsry[j].salary > xsry[k].salary) k = j; } strcpy(ch2[i].name, xsry[i].name); strcpy(xsry[i].name, xsry[k].name); strcpy(xsry[k].name, ch2[i].name); temp1 = xsry[i].sale; xsry[i].sale = xsry[k].sale; xsry[k].sale = temp1; temp2 = xsry[i].salary; xsry[i].salary = xsry[k].salary; xsry[k].salary = temp2; } for (m = 0; m < 10; m++) { cout << “|” << setw(20) << xsry[m].name << “|” << setw(20) << xsry[m].sale << “|” << setw(12) << xsry[m].salary << endl; cout << “_______________________________________________________________________________” << endl; } cout << endl; }

“原项目共570行标识符;注解150行,纯注解62行,标识符注解90行;空行67行;去掉注解部分和换行,纯标识符共441行。”

——此处为个人习惯记录,有强迫症的小伙伴切忌不要去计算。

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务