中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++如何實現職工工資管理系統

發布時間:2022-03-17 17:13:37 來源:億速云 閱讀:857 作者:iii 欄目:開發技術

本篇內容主要講解“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(): 從文件中讀取職工信息;

代碼的流程圖

C++如何實現職工工資管理系統

代碼的實現

頭文件:

#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++如何實現職工工資管理系統”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

江口县| 黑河市| 盐源县| 绵阳市| 夹江县| 来宾市| 凤阳县| 正蓝旗| 新宾| 保山市| 宣城市| 三河市| 紫金县| 鄂托克前旗| 景泰县| 綦江县| 普兰县| 阜南县| 壤塘县| 叙永县| 惠水县| 稻城县| 云林县| 甘肃省| 乐山市| 丹巴县| 罗甸县| 禄丰县| 衡阳市| 建宁县| 苍山县| 双牌县| 神池县| 富裕县| 昌吉市| 鹿邑县| 开化县| 汉源县| 奈曼旗| 蓝山县| 中宁县|