C++實現(xiàn)職工工資管理系統(tǒng)課程設計
本文實例為大家分享了C++實現(xiàn)職工工資管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
現(xiàn)在的大學里經(jīng)常有一些課程設計 ,這不,我就遇到了 。
我們的c++老師 ,給了我們許 多的題目要我們來選擇 ,我就選擇了這個 ,說難又不難 ,說簡單,又不簡單的。
題目 ——職工工資管理系統(tǒng)
我們老師給的題目是這樣的!!
職工工資管理設計與實現(xiàn)
功能設計要求
1. 輸入記錄:將每一個職工的姓名、ID號以及基本工資、職務工資、崗位津貼、醫(yī)療保險、公積金的數(shù)據(jù)作為一個記錄。該軟件能建立一個新的數(shù)據(jù)文件或給已建立好的數(shù)據(jù)文件增加記錄。
2. 顯示記錄:根據(jù)用戶提供的記錄或者根據(jù)職工姓名顯示一個或幾個職工的各項工資和平均工資。
3. 修改記錄:可以對數(shù)據(jù)文件的任意記錄的數(shù)據(jù)進行修改并在修改前后對記錄內(nèi)容進行顯示。
4.查找記錄:可以對數(shù)據(jù)文件的任意記錄的數(shù)據(jù)進行查找并在查找前后對記錄內(nèi)容進行顯示。
5. 刪除記錄:可刪除數(shù)據(jù)文件中的任一記錄。
6. 統(tǒng)計: (A)計算各項工資平均工資及總工資,(B)統(tǒng)計符合指定條件(如職工工資前三項之和在3000元以上、3000~2000元、2000~1000元) 以內(nèi)的工資職工人數(shù)及占總職工人數(shù)的百分比。(C)按字符表格形式打印全部職工工資信息表及平均工資(包括各項總的平均工資)。
7.保存數(shù)據(jù)文件功能。
下面是我設計的程序功能
功能模塊
1.主函數(shù) main(void):調(diào)用設計者的相關信息函數(shù)、調(diào)用 Menu()函數(shù),實現(xiàn)系統(tǒng)的主要功能處理;
2.主菜單Menu()函數(shù):確定如何選擇所需功能,調(diào)用數(shù)據(jù)輸入、顯示、查找、增加、刪除、修改、保存等函數(shù),完成職工工資管理系統(tǒng)的數(shù)據(jù)處理;
3.數(shù)據(jù)輸入Input():完成職工信息添加;
4.數(shù)據(jù)修改函數(shù) update():修改職工工資等信息數(shù)據(jù);
5.數(shù)據(jù)刪除函數(shù)Delete():刪除職工信息數(shù)據(jù);
6.數(shù)據(jù)查找函數(shù) select():查找某一職工工資等信息情況;
7.數(shù)據(jù)統(tǒng)計函數(shù)tongji():統(tǒng)計職工人數(shù);
8.數(shù)據(jù)顯示函數(shù)print():將職工信息數(shù)據(jù)顯示出來;
9.文件保存函數(shù)Save():將錄入的職工信息保存到文件;
10 文件讀取函數(shù)Read(): 從文件中讀取職工信息;
代碼的流程圖
代碼的實現(xiàn)
頭文件:
#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"http://存入的文件名? //定義一個職工類 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;? ?? ? };? //定一個系統(tǒng)類? class System? { public: ?? ?//顯示系統(tǒng)內(nèi)的職工信息 ?? ?void print() ?? ?{ ?? ??? ?size_t i =0; ?? ??? ?if(System::len ==0) ?? ??? ?{ ?? ??? ?cout<<"系統(tǒng)中沒有職工信息"<<endl; ?? ??? ?} ? ?? ??? ?for(i = 0;i< System::len;i++) ?? ??? ?{ ?? ??? ??? ?(System::staff+i)->print(); ?? ??? ?} ?? ?} ? ? ?? ?Staff *staff;//職工類的指針 ?? ?size_t len ;//職工人數(shù) ?? ?size_t width;//為職工創(chuàng)建的空間大小 ? }; ? //初始化系統(tǒng) 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); //統(tǒng)計職工信息 void tongji(System * my_sys); //求每一項的平均值 void ?money(System * my_sys); //從文件讀取職工信息?? ? void ?Read(System *my_sys); //將職工信息寫入文件 void ?Save(System *my_sys); //釋放動態(tài)開辟的空間 void Free(System *my_sys); ? ? #endif ?//__MONEY__
源文件:
#define _CRT_SECURE_NO_WARNINGS 1 ? #include "xiaodong.h" ? //初始化系統(tǒng) 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<<"職工人數(shù)已達系統(tǒng)限定,"<<endl; ?? ??? ?} ?? ??? ?else? ?? ??? ?{?? ? ?? ??? ??? ?my_sys->staff = temp; ?? ??? ??? ?my_sys->width += ADD; ?? ??? ?} ?? ?} } //添加職工信息 void Input(System * my_sys) { ?? ?IF_space(my_sys); ?? ?cout<<"請輸入職工信息:"<<endl; ?? ?cout<<"姓名 基本工資 職務工資 津貼 醫(yī)療保險 公積金"<<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<<"系統(tǒng)中沒有保存職工信息"<<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號 ? ?姓名 ? ?基本工資 ? 職務工資 ? ?津貼 ? ?醫(yī)療保險 ? 公積金 ? 總工資 ? ?平均工資"<<endl; ?? ??? ??? ?my_sys->staff->print(); ?? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?if(i >= my_sys->len) ?? ??? ??? ?cout<<"系統(tǒng)中沒有此職工信息"<<endl; ?? ?} ?? ? } void menu1() { ?? ?cout<<"請選擇要修改的信息:"<<endl; ?? ?cout<<"***********************************************"<<endl;? ?? ?cout<<"****** ? ? ? 1.修改職工姓名 ? ? ? ? ? ? ?******"<<endl; ?? ?cout<<"****** ? ? ? 2.修改基本工資 ? ? ? ? ? ? ?******"<<endl; ?? ?cout<<"****** ? ? ? 3.修改職務工資 ? ? ? ? ? ? ?******"<<endl; ?? ?cout<<"****** ? ? ? 4.修改緊貼 ? ? ? ? ? ? ? ? ?******"<<endl; ?? ?cout<<"****** ? ? ? 5.修改醫(yī)療保險 ? ? ? ? ? ? ?******"<<endl; ?? ?cout<<"****** ? ? ? 6.修改公積金 ? ? ? ? ? ? ? ?******"<<endl; ?? ?cout<<"***********************************************"<<endl; ? ? } //修改職工信息 void Update(System * my_sys) ? { ?? ?if(my_sys->len == 0) ?? ?{ ?? ??? ?cout<<"系統(tǒng)中沒有保存職工信息"<<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<<"請選擇對應數(shù)字序號進行操作:"; ?? ??? ??? ? ? ?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<<"系統(tǒng)中沒有此職工信息"<<endl; ?? ?} } //刪除職工信息 void Delete(System * my_sys) { ?? ?if(my_sys->len == 0) ?? ?{ ?? ??? ?cout<<"系統(tǒng)中沒有保存職工信息"<<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<<"系統(tǒng)中沒有此職工信息"<<endl;?? ? ?? ?} ?? ? } ? //統(tǒng)計:統(tǒng)計符合指定條件(如職工工資前三項之和在3000元以上、3000~2000元、2000~1000元) //以內(nèi)的工資職工人數(shù)及占總職工人數(shù)的百分比。 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<<"系統(tǒng)中沒有保存職工信息"<<endl; ?? ?} ?? ?else ?? ?{ ?? ??? ?cout<<"請輸入你要統(tǒng)計的職工信息指定的條件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 <<"職工人數(shù)及占總職工人數(shù)的百分比為:"<<(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))//從文件中讀取數(shù)據(jù),,直到讀取的為空 ?? ?{ ?? ??? ?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<<"--------------------------職工工資管理系統(tǒng)()---------------------------"<<endl; ?? ?cout<<"***********************************************************************"<<endl; ?? ?cout<<"** ? ? ? ? ? ? ? ? ? ? ? ?1. 修改職工信息 ? ? ? ? ? ? ? ? ? ? ? ? ? ?**"<<endl; ?? ?cout<<"** ? ? ? ? ? ? ? ? ? ? ? ?2. 添加職工信息 ? ? ? ? ? ? ? ? ? ? ? ? ? ?**"<<endl; ? ? cout<<"** ? ? ? ? ? ? ? ? ? ? ? ?3. 刪除職工信息 ? ? ? ? ? ? ? ? ? ? ? ? ? ?**"<<endl; ? ? cout<<"** ? ? ? ? ? ? ? ? ? ? ? ?4. 查找職工信息 ? ? ? ? ? ? ? ? ? ? ? ? ? ?**"<<endl; ?? ?cout<<"** ? ? ? ? ? ? ? ? ? ? ? ?5. 統(tǒng)計職工信息 ? ? ? ? ? ? ? ? ? ? ? ? ? ?**"<<endl; ?? ?cout<<"** ? ? ? ? ? ? ? ? ? ? ? ?6. 顯示職工信息 ? ? ? ? ? ? ? ? ? ? ? ? ? ?**"<<endl; ?? ?cout<<"** ? ? ? ? ? ? ? ? ? ? ? ?0. 退出系統(tǒng) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**"<<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號?? ?姓名 ?基本工資 ?職務工資 ?津貼 ?醫(yī)療保險 ?公積金 ?總工資 ?平均工資"<<endl; ?? ??? ??? ?my_system.print(); ?? ??? ??? ?money(&my_system); ?? ??? ??? ?break; ?? ??? ?case 0: ?? ??? ??? ?break; ?? ??? ?default: ?? ??? ??? ?break; ?? ??? ?} ?? ?} ?? ?Save(&my_system); ?? ?free(my_system.staff);//一定要記得回收 ?? ?system("pause"); ?? ?return 0; }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
數(shù)據(jù)結構課程設計-用棧實現(xiàn)表達式求值的方法詳解
本篇文章是對在c語言中用棧實現(xiàn)表達式求值的方法進行了詳細的分析介紹,需要的朋友參考下2013-05-05Ubuntu中使用VS Code與安裝C/C++插件的教程詳解
這篇文章主要介紹了Ubuntu中使用VS Code與安裝C/C++插件的教程詳解,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09