您好,登錄后才能下訂單哦!
本篇內容主要講解“C++如何實現職工工資管理系統”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C++如何實現職工工資管理系統”吧!
題目 職工工資管理系統
1. 輸入記錄:將每一個職工的姓名、ID號以及基本工資、職務工資、崗位津貼、醫療保險、公積金的數據作為一個記錄。該軟件能建立一個新的數據文件或給已建立好的數據文件增加記錄。
2. 顯示記錄:根據用戶提供的記錄或者根據職工姓名顯示一個或幾個職工的各項工資和平均工資。
3. 修改記錄:可以對數據文件的任意記錄的數據進行修改并在修改前后對記錄內容進行顯示。
4.查找記錄:可以對數據文件的任意記錄的數據進行查找并在查找前后對記錄內容進行顯示。
5. 刪除記錄:可刪除數據文件中的任一記錄。
6. 統計: (A)計算各項工資平均工資及總工資,(B)統計符合指定條件(如職工工資前三項之和在3000元以上、3000~2000元、2000~1000元) 以內的工資職工人數及占總職工人數的百分比。(C)按字符表格形式打印全部職工工資信息表及平均工資(包括各項總的平均工資)。
7.保存數據文件功能。
下面是我設計的程序功能
1.主函數 main(void):調用設計者的相關信息函數、調用 Menu()函數,實現系統的主要功能處理;
2.主菜單Menu()函數:確定如何選擇所需功能,調用數據輸入、顯示、查找、增加、刪除、修改、保存等函數,完成職工工資管理系統的數據處理;
3.數據輸入Input():完成職工信息添加;
4.數據修改函數 update():修改職工工資等信息數據;
5.數據刪除函數Delete():刪除職工信息數據;
6.數據查找函數 select():查找某一職工工資等信息情況;
7.數據統計函數tongji():統計職工人數;
8.數據顯示函數print():將職工信息數據顯示出來;
9.文件保存函數Save():將錄入的職工信息保存到文件;
10 文件讀取函數Read(): 從文件中讀取職工信息;
頭文件:
#ifndef __MONEY__ #define __MONEY__ #include <iostream> #include <stdlib.h> #include <string.h> using namespace std; #define MAX_NAME 10//定義姓名的最大長度 #define START 3//初始化為職工開辟的空間 #define ADD 5//每次為職工增加的空間 #define FILENAME "staff.dat"//存入的文件名 //定義一個職工類 class Staff { public: //顯示職工信息 void print() { cout<<id<<" "<<name<<" "<<mon1<<" "<<mon2<<" "<<mon3<<" " <<mon4<<" "<<mon5<<" "<<Staff::summoney()<<" "<<Staff::avgmoney()<<endl; } //求每個人的總工資 double summoney() { double sum; sum= mon1 + mon2 + mon3 + mon4 + mon5; return sum; } //求每個人的平均工資 double avgmoney() { double avg; avg= (Staff::summoney())/5; return avg; } char name[MAX_NAME]; int id ; double mon1,mon2,mon3,mon4,mon5; }; //定一個系統類 class System { public: //顯示系統內的職工信息 void print() { size_t i =0; if(System::len ==0) { cout<<"系統中沒有職工信息"<<endl; } for(i = 0;i< System::len;i++) { (System::staff+i)->print(); } } Staff *staff;//職工類的指針 size_t len ;//職工人數 size_t width;//為職工創建的空間大小 }; //初始化系統 void Initclass(System * my_sys); //添加職工信息 void Input(System * my_sys); //查找職工信息 void Select(System * my_sys); //修改職工信息 void Update(System * my_sys); //刪除職工信息 void Delete(System * my_sys); //統計職工信息 void tongji(System * my_sys); //求每一項的平均值 void money(System * my_sys); //從文件讀取職工信息 void Read(System *my_sys); //將職工信息寫入文件 void Save(System *my_sys); //釋放動態開辟的空間 void Free(System *my_sys); #endif //__MONEY__
源文件:
#define _CRT_SECURE_NO_WARNINGS 1 #include "xiaodong.h" //初始化系統 void Initclass(System * my_sys) { my_sys->staff= (Staff *)calloc(START ,sizeof(Staff)); if(my_sys->staff == NULL) { cout<<"開辟空間失敗"<<endl; exit(EXIT_FAILURE); } my_sys->len = 0 ; my_sys->width = START; } void IF_space(System * my_sys) { if(my_sys->len == my_sys->width) { Staff *temp = (Staff *)realloc(my_sys->staff,my_sys->width+ADD); if(temp == NULL) { cout<<"職工人數已達系統限定,"<<endl; } else { my_sys->staff = temp; my_sys->width += ADD; } } } //添加職工信息 void Input(System * my_sys) { IF_space(my_sys); cout<<"請輸入職工信息:"<<endl; cout<<"姓名 基本工資 職務工資 津貼 醫療保險 公積金"<<endl; cin>>(my_sys->staff+my_sys->len)->name >>(my_sys->staff+my_sys->len)->mon1 >>(my_sys->staff+my_sys->len)->mon2 >>(my_sys->staff+my_sys->len)->mon3 >>(my_sys->staff+my_sys->len)->mon4 >>(my_sys->staff+my_sys->len)->mon5; (my_sys->staff + my_sys->len)->id = my_sys->len+1; my_sys->len += 1; } //查找職工信息 void Select(System * my_sys) { if(my_sys->len == 0) { cout<<"系統中沒有保存職工信息"<<endl; } else { cout<<"請輸入所要查詢的職工姓名:"; char Name[10]={0}; cin>>Name; size_t i = 0; for( i = 0;i < my_sys->len; i++) { if(strcmp(Name,(my_sys->staff+i)->name)==0) { cout<<"該職工信息為:"<<endl; cout<<"ID號 姓名 基本工資 職務工資 津貼 醫療保險 公積金 總工資 平均工資"<<endl; my_sys->staff->print(); break; } } if(i >= my_sys->len) cout<<"系統中沒有此職工信息"<<endl; } } void menu1() { cout<<"請選擇要修改的信息:"<<endl; cout<<"***********************************************"<<endl; cout<<"****** 1.修改職工姓名 ******"<<endl; cout<<"****** 2.修改基本工資 ******"<<endl; cout<<"****** 3.修改職務工資 ******"<<endl; cout<<"****** 4.修改緊貼 ******"<<endl; cout<<"****** 5.修改醫療保險 ******"<<endl; cout<<"****** 6.修改公積金 ******"<<endl; cout<<"***********************************************"<<endl; } //修改職工信息 void Update(System * my_sys) { if(my_sys->len == 0) { cout<<"系統中沒有保存職工信息"<<endl; } else { cout<<"請輸入所要修改的職工姓名:"; char Name[MAX_NAME]={0}; cin>>Name; size_t i = 0; for( i = 0;i < my_sys->len; i++) { if(strcmp(Name,(my_sys->staff+i)->name)==0) { menu1(); cout<<"請選擇對應數字序號進行操作:"; int a =0 ; char name[MAX_NAME] ={0}; double mon1 =0.0,mon2 =0.0,mon3 =0.0,mon4 =0.0,mon5 =0.0; cin>>a; switch(a) {<strong> </strong> case 1: cout<<"請輸入新的職工姓名:"; cin>>name; strcpy(my_sys->staff->name,name); break; case 2 : cout<<"請輸入新的基本工資:"; cin>>mon1; my_sys->staff->mon1 = mon1; break; case 3: cout<<"請輸入新的崗位工資:"; cin>>mon2; my_sys->staff->mon2 = mon2; break; case 4: cout<<"請輸入新的崗位工資:"; cin>>mon3; my_sys->staff->mon3 = mon3; break; case 5 : cout<<"請輸入新的崗位工資:"; cin>>mon4; my_sys->staff->mon4 = mon4; break; case 6: cout<<"請輸入新的崗位工資:"; cin>>mon5; my_sys->staff->mon5 = mon5; break; default: cout<<"輸入不合標準"<<endl; break; } break; } } if(i >= my_sys->len) cout<<"系統中沒有此職工信息"<<endl; } } //刪除職工信息 void Delete(System * my_sys) { if(my_sys->len == 0) { cout<<"系統中沒有保存職工信息"<<endl; } else { cout<<"請輸入所要刪除的職工姓名:"; char Name[MAX_NAME]={0}; cin>>Name; size_t i = 0; size_t m = my_sys->len; for( i = 0;i < my_sys->len; i++) { if(strcmp(Name,(my_sys->staff+i)->name)==0) { for(size_t j = i;j<my_sys->len-1; j++) *(my_sys->staff+j) = *(my_sys->staff+j+1); my_sys->len--; break; } } if(i >= m) cout<<"系統中沒有此職工信息"<<endl; } } //統計:統計符合指定條件(如職工工資前三項之和在3000元以上、3000~2000元、2000~1000元) //以內的工資職工人數及占總職工人數的百分比。 void tongji(System * my_sys) /* m-n為 1000-2000,2000-3000,3000-max*/ { double number = 0.0; double money = 0.0; double m =0.0; double n = 0.0; if(my_sys->len == 0) { cout<<"系統中沒有保存職工信息"<<endl; } else { cout<<"請輸入你要統計的職工信息指定的條件m 和 n:"; cin>>m>>n; for(size_t i = 0; i<my_sys->len ;i++) { money = (my_sys->staff+i)->mon1 + (my_sys->staff+i)->mon2 + (my_sys->staff+i)->mon3; if((money >= m)&& (money <= n)) number++; } cout<<"職工工資前三項之和在 " <<m <<" --"<<n <<"職工人數及占總職工人數的百分比為:"<<(double)number/my_sys->len<<endl; } } //求每一項的平均值 void money(System * my_sys) { double count1 = 0; double count2 = 0; double count3 = 0; double count4 = 0; double count5 = 0; if(my_sys->len> 0) { for(size_t i = 0;i< my_sys->len; i++) { count1 = count1 + my_sys->staff->mon1; count2 = count2 + my_sys->staff->mon1; count3 = count3 + my_sys->staff->mon1; count4 = count4 + my_sys->staff->mon1; count5 = count5 + my_sys->staff->mon1; } cout<<"各項工資的平均工資為 " <<count1/my_sys->len<<" " <<count2/my_sys->len<<" " <<count3/my_sys->len<<" " <<count4/my_sys->len<<" " <<count5/my_sys->len<<endl; } } //從文件讀取職工信息 void Read(System *my_sys) { Staff s; FILE *pf =fopen(FILENAME,"r"); if(pf == NULL) { perror("error:"); Free(my_sys); exit(EXIT_FAILURE); } while(fread(&s,sizeof(Staff),1,pf))//從文件中讀取數據,,直到讀取的為空 { IF_space(my_sys); my_sys->staff[my_sys->len++] = s; } fclose(pf);//記著關閉文件 } //將職工信息寫入文件 void Save(System *my_sys) { FILE *pf = fopen(FILENAME,"w"); if(pf==NULL) { perror("error:"); Free(my_sys); exit(EXIT_FAILURE); } for(size_t i=0; i<my_sys->len ;i++ ) { fwrite(my_sys->staff+i,1,sizeof(Staff),pf); } fclose(pf); } void Free(System *my_sys) { if(my_sys->staff!= NULL) { free(my_sys->staff); my_sys->staff=NULL; } }
測試代碼:
#define _CRT_SECURE_NO_WARNINGS #include "xiaodong.h" void menu() { cout<<"#######################################################################"<<endl; cout<<"--------------------------職工工資管理系統()---------------------------"<<endl; cout<<"***********************************************************************"<<endl; cout<<"** 1. 修改職工信息 **"<<endl; cout<<"** 2. 添加職工信息 **"<<endl; cout<<"** 3. 刪除職工信息 **"<<endl; cout<<"** 4. 查找職工信息 **"<<endl; cout<<"** 5. 統計職工信息 **"<<endl; cout<<"** 6. 顯示職工信息 **"<<endl; cout<<"** 0. 退出系統 **"<<endl; cout<<"#######################################################################"<<endl; } int main() { System my_system; int input = 1; Initclass(&my_system); Read(&my_system); while(input) { menu(); cout<<"請輸入要選擇的功能:>"; cin>>input; switch(input) { case 1: Update(&my_system); break; case 2: Input(&my_system); break; case 3: Delete(&my_system); break; case 4: Select(&my_system); break; case 5: tongji(&my_system); break; case 6: cout<<"ID號 姓名 基本工資 職務工資 津貼 醫療保險 公積金 總工資 平均工資"<<endl; my_system.print(); money(&my_system); break; case 0: break; default: break; } } Save(&my_system); free(my_system.staff);//一定要記得回收 system("pause"); return 0; }
到此,相信大家對“C++如何實現職工工資管理系統”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。