C++實(shí)現(xiàn)職工工資管理系統(tǒng)課程設(shè)計(jì)
本文實(shí)例為大家分享了C++實(shí)現(xiàn)職工工資管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
現(xiàn)在的大學(xué)里經(jīng)常有一些課程設(shè)計(jì) ,這不,我就遇到了 。
我們的c++老師 ,給了我們許 多的題目要我們來選擇 ,我就選擇了這個(gè) ,說難又不難 ,說簡單,又不簡單的。
題目 ——職工工資管理系統(tǒng)
我們老師給的題目是這樣的??!
職工工資管理設(shè)計(jì)與實(shí)現(xiàn)
功能設(shè)計(jì)要求
1. 輸入記錄:將每一個(gè)職工的姓名、ID號(hào)以及基本工資、職務(wù)工資、崗位津貼、醫(yī)療保險(xiǎn)、公積金的數(shù)據(jù)作為一個(gè)記錄。該軟件能建立一個(gè)新的數(shù)據(jù)文件或給已建立好的數(shù)據(jù)文件增加記錄。
2. 顯示記錄:根據(jù)用戶提供的記錄或者根據(jù)職工姓名顯示一個(gè)或幾個(gè)職工的各項(xiàng)工資和平均工資。
3. 修改記錄:可以對(duì)數(shù)據(jù)文件的任意記錄的數(shù)據(jù)進(jìn)行修改并在修改前后對(duì)記錄內(nèi)容進(jìn)行顯示。
4.查找記錄:可以對(duì)數(shù)據(jù)文件的任意記錄的數(shù)據(jù)進(jìn)行查找并在查找前后對(duì)記錄內(nèi)容進(jìn)行顯示。
5. 刪除記錄:可刪除數(shù)據(jù)文件中的任一記錄。
6. 統(tǒng)計(jì): (A)計(jì)算各項(xiàng)工資平均工資及總工資,(B)統(tǒng)計(jì)符合指定條件(如職工工資前三項(xiàng)之和在3000元以上、3000~2000元、2000~1000元) 以內(nèi)的工資職工人數(shù)及占總職工人數(shù)的百分比。(C)按字符表格形式打印全部職工工資信息表及平均工資(包括各項(xiàng)總的平均工資)。
7.保存數(shù)據(jù)文件功能。
下面是我設(shè)計(jì)的程序功能
功能模塊
1.主函數(shù) main(void):調(diào)用設(shè)計(jì)者的相關(guān)信息函數(shù)、調(diào)用 Menu()函數(shù),實(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)計(jì)函數(shù)tongji():統(tǒng)計(jì)職工人數(shù);
8.數(shù)據(jù)顯示函數(shù)print():將職工信息數(shù)據(jù)顯示出來;
9.文件保存函數(shù)Save():將錄入的職工信息保存到文件;
10 文件讀取函數(shù)Read(): 從文件中讀取職工信息;
代碼的流程圖

代碼的實(shí)現(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://存入的文件名?
//定義一個(gè)職工類
class Staff
{
public:
?? ?//顯示職工信息
?? ?void ?print() ?
?? ?{
?? ??? ?cout<<id<<" ? ? "<<name<<" ? ? "<<mon1<<" ? ? "<<mon2<<" ? ? "<<mon3<<" ? ? "
?? ??? ?<<mon4<<" ? ? "<<mon5<<" ? ? "<<Staff::summoney()<<" ? ? "<<Staff::avgmoney()<<endl;?? ?
?? ?}
?? ?//求每個(gè)人的總工資
?? ?double summoney() ?
?? ?{
?? ??? ?double sum;
?? ??? ?sum= mon1 + mon2 + mon3 + mon4 + mon5;
?? ??? ?return sum;
?? ?}
?? ?//求每個(gè)人的平均工資
?? ?double avgmoney()
?? ?{
?? ??? ?double avg;
?? ??? ?avg= (Staff::summoney())/5;
?? ??? ?return avg;
?? ?}
?? ?
?? ?char name[MAX_NAME];
?? ?int id ;
?? ?double mon1,mon2,mon3,mon4,mon5;?
?? ?
};?
//定一個(gè)系統(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)計(jì)職工信息
void tongji(System * my_sys);
//求每一項(xiàng)的平均值
void ?money(System * my_sys);
//從文件讀取職工信息?? ?
void ?Read(System *my_sys);
//將職工信息寫入文件
void ?Save(System *my_sys);
//釋放動(dòng)態(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ù)已達(dá)系統(tǒng)限定,"<<endl;
?? ??? ?}
?? ??? ?else?
?? ??? ?{?? ?
?? ??? ??? ?my_sys->staff = temp;
?? ??? ??? ?my_sys->width += ADD;
?? ??? ?}
?? ?}
}
//添加職工信息
void Input(System * my_sys)
{
?? ?IF_space(my_sys);
?? ?cout<<"請(qǐng)輸入職工信息:"<<endl;
?? ?cout<<"姓名 基本工資 職務(wù)工資 津貼 醫(yī)療保險(xiǎn) 公積金"<<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<<"請(qǐng)輸入所要查詢的職工姓名:";
?? ??? ?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號(hào) ? ?姓名 ? ?基本工資 ? 職務(wù)工資 ? ?津貼 ? ?醫(yī)療保險(xiǎn) ? 公積金 ? 總工資 ? ?平均工資"<<endl;
?? ??? ??? ?my_sys->staff->print();
?? ??? ??? ?break;
?? ??? ??? ?}
?? ??? ?}
?? ??? ?if(i >= my_sys->len)
?? ??? ??? ?cout<<"系統(tǒng)中沒有此職工信息"<<endl;
?? ?}
?? ?
}
void menu1()
{
?? ?cout<<"請(qǐng)選擇要修改的信息:"<<endl;
?? ?cout<<"***********************************************"<<endl;?
?? ?cout<<"****** ? ? ? 1.修改職工姓名 ? ? ? ? ? ? ?******"<<endl;
?? ?cout<<"****** ? ? ? 2.修改基本工資 ? ? ? ? ? ? ?******"<<endl;
?? ?cout<<"****** ? ? ? 3.修改職務(wù)工資 ? ? ? ? ? ? ?******"<<endl;
?? ?cout<<"****** ? ? ? 4.修改緊貼 ? ? ? ? ? ? ? ? ?******"<<endl;
?? ?cout<<"****** ? ? ? 5.修改醫(yī)療保險(xiǎn) ? ? ? ? ? ? ?******"<<endl;
?? ?cout<<"****** ? ? ? 6.修改公積金 ? ? ? ? ? ? ? ?******"<<endl;
?? ?cout<<"***********************************************"<<endl;
?
?
}
//修改職工信息
void Update(System * my_sys)
?
{
?? ?if(my_sys->len == 0)
?? ?{
?? ??? ?cout<<"系統(tǒng)中沒有保存職工信息"<<endl;
?? ?}
?? ?else
?? ?{
?? ??? ?cout<<"請(qǐng)輸入所要修改的職工姓名:";
?? ??? ?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<<"請(qǐng)選擇對(duì)應(yīng)數(shù)字序號(hào)進(jìn)行操作:";
?? ??? ??? ? ? ?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<<"請(qǐng)輸入新的職工姓名:";
?? ??? ??? ??? ??? ? ?cin>>name;
?? ??? ??? ??? ??? ? ?strcpy(my_sys->staff->name,name);
?? ??? ??? ??? ??? ? ?break;
?
?? ??? ??? ??? ?case 2 :
?? ??? ??? ??? ??? ? ?cout<<"請(qǐng)輸入新的基本工資:";
?? ??? ??? ??? ??? ? ?cin>>mon1;
?? ??? ??? ??? ??? ? ?my_sys->staff->mon1 = mon1;
?? ??? ??? ??? ??? ? ?break;
?? ??? ??? ??? ?case 3:
?? ??? ??? ??? ??? ? ?cout<<"請(qǐng)輸入新的崗位工資:";
?? ??? ??? ??? ??? ? ?cin>>mon2;
?? ??? ??? ??? ??? ? ?my_sys->staff->mon2 = mon2;
?? ??? ??? ??? ??? ? ?break;
?? ??? ??? ??? ?case 4:
?? ??? ??? ??? ??? ? ?cout<<"請(qǐng)輸入新的崗位工資:";
?? ??? ??? ??? ??? ? ?cin>>mon3;
?? ??? ??? ??? ??? ? ?my_sys->staff->mon3 = mon3;
?? ??? ??? ??? ??? ? ?break;
?? ??? ??? ??? ?case 5 :
?? ??? ??? ??? ??? ? ?cout<<"請(qǐng)輸入新的崗位工資:";
?? ??? ??? ??? ??? ? ?cin>>mon4;
?? ??? ??? ??? ??? ? ?my_sys->staff->mon4 = mon4;
?? ??? ??? ??? ??? ? ?break;
?? ??? ??? ??? ?case 6:
?? ??? ??? ??? ??? ? ?cout<<"請(qǐng)輸入新的崗位工資:";?
?? ??? ??? ??? ??? ? ?cin>>mon5;
?? ??? ??? ??? ??? ? ?my_sys->staff->mon5 = mon5;
?? ??? ??? ??? ??? ? ?break;
?? ??? ??? ??? ?default:
?? ??? ??? ??? ??? ?cout<<"輸入不合標(biāo)準(zhǔn)"<<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<<"請(qǐng)輸入所要?jiǎng)h除的職工姓名:";
?? ??? ?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)計(jì):統(tǒng)計(jì)符合指定條件(如職工工資前三項(xià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<<"請(qǐng)輸入你要統(tǒng)計(jì)的職工信息指定的條件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<<"職工工資前三項(xiàng)之和在 " <<m <<" --"<<n <<"職工人數(shù)及占總職工人數(shù)的百分比為:"<<(double)number/my_sys->len<<endl;
?? ?}
}
//求每一項(xiàng)的平均值
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<<"各項(xiàng)工資的平均工資為 "
?? ??? ??? ?<<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);//記著關(guān)閉文件
?
?
}
//將職工信息寫入文件
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)計(jì)職工信息 ? ? ? ? ? ? ? ? ? ? ? ? ? ?**"<<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<<"請(qǐng)輸入要選擇的功能:>";
?? ??? ?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號(hào)?? ?姓名 ?基本工資 ?職務(wù)工資 ?津貼 ?醫(yī)療保險(xiǎn) ?公積金 ?總工資 ?平均工資"<<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)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++圖論之Bellman-Ford算法和SPFA算法的實(shí)現(xiàn)
貝爾曼-福特算法(Bellman-Ford)是由理查德·貝爾曼和萊斯特·福特創(chuàng)立的,求解單源最短路徑問題的一種算法。SPFA 算法是 Bellman-Ford算法 的隊(duì)列優(yōu)化算法的別稱,通常用于求含負(fù)權(quán)邊的單源最短路徑。本文將詳解兩個(gè)算法的實(shí)現(xiàn),需要的可以參考一下2022-06-06
c++?創(chuàng)建型設(shè)計(jì)模式工廠方法Factory?Method示例詳解
這篇文章主要為大家介紹了c++?創(chuàng)建型設(shè)計(jì)模式工廠方法Factory?Method示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09

