91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

C語言怎么實現職工工資管理系統

發布時間:2022-08-30 17:02:04 來源:億速云 閱讀:182 作者:iii 欄目:開發技術

這篇文章主要介紹了C語言怎么實現職工工資管理系統的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇C語言怎么實現職工工資管理系統文章都會有所收獲,下面我們一起來看看吧。

    一、需求分析

    1.隨著計算機的飛速發展,它的應用已經十分廣泛,它在人們的生產、生活、工作和學習中發揮著重要的作用。例如一個現代化的公司,擁有數千名的員工,那么如何管理這么龐大的職工信息檔案呢?這時,開發一個功能完善的職工信息管理系統就必不可少了。

    2.從職工的信息的查詢到管理實現了自動化的模式,從而提高了工作效率和減少工作中的出錯率,對公司內部的員工管理更加方便。

    3.系統是為公司財會部門設計的,主要管理的數據包括:職工號 姓名 崗位工資 獎金 扣除 實發。

    4.該系統具有的功能是:根據職工號對職工的信息進行錄入、查詢、刪除 、修改、追加、統計、顯示等。對各功能模塊的界面采用菜單顯示方式。

    5.本系統具有通用性,即可廣泛適用于多單位,多人數,多功能的使用,并且系統采用模塊化設計,主體為一個主函數,分別可以調用其他模塊,利用不同子模塊具有的不同功能,綜合完成系統功能,不但主體與子模塊間有相互聯系,各個子模塊間也有相互作用,從而實現了預期的功能。

    二、項目環境

    集成開發環境:Visual Studio 2019 加C語言設計職工工資管理系統項目

    2.1、項目創建過程

    打開VS2019,選擇語言為C++,所屬平臺為Windows,項目類型為控制臺項目,并選擇空項目,如下圖所示

    C語言怎么實現職工工資管理系統

    然后輸入項目的名稱和選擇項目的路徑如下圖所示

    C語言怎么實現職工工資管理系統

    2.2、向項目添加頭文件與源文件

    創建好項目后,向項目中添加頭文件和源文件如下所示

    C語言怎么實現職工工資管理系統

    然后編寫相關的代碼如下

    Main.h頭文件代碼

    #pragma once
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    Main.c源文件代碼

    #define _CRT_SECURE_NO_WARNINGS
    
    #include "Main.h"
    #include "StaffManage.h"
    
    main()
    {
        system("color 3E");
    
        
        system("pause");
        return 0;
    }

    StaffManage.h頭文件代碼

    #pragma once
    #include "Main.h"

    AddressBook.c源文件代碼

    #define _CRT_SECURE_NO_WARNINGS
    
    #include "StaffManage.h"

    現在項目就創建好了。

    三、職工工資管理系統模塊功能

    3.1、系統總體設計框圖

    C語言怎么實現職工工資管理系統

    3.2、系統模塊總體設計

    在職工工資管理系統的設計程序中:

    struct emploee   /*職工數據結構*/
    {
        char no[5];
        char name[8];
        char sex[3];
        int age;
        int salar;
    }emp[NUM], newemp;

    用結構體存儲和錄入該程序的所有數據,并把信息寫到文件emp.txt中,保存在磁盤中方便以后使用。

    此程序中包含的功能有:輸入模塊、查詢模塊、修改模塊、刪除模塊、統計模塊、輸出模塊、追加模塊,各個功能設計如下:

    3.3、設計系統菜單功能

    在Main.h頭文件中聲明一個void menu();函數,用于通訊錄菜單功能的顯示,然后再Main.c源文件中定義這個函數的功能,如下所示

    /*************************菜單模塊*************************/
    void menu()
    {
        printf("    1.  輸入職工記錄\n");
        printf("    2.  查詢職工記錄\n");
        printf("    3.  修改職工記錄\n");
        printf("    4.  刪除職工記錄\n");
        printf("    5.  輸出職工記錄\n");
        printf("    6.  調查工資情況\n");
        printf("    7.  添加職工記錄\n");
        printf("    0.  退出系統\n");
        printf("\n");
        printf("*** 歡迎使用職工工資管理系統 ***\n");
    }

    然后再主函數中調用menu()函數,調試結果如下

    C語言怎么實現職工工資管理系統

    到這里職工工資管理系統菜單功能實現了。

    3.4、設計系統輸入模塊

    輸入模塊:該模塊是實現對職工號 姓名 崗位工資 獎金 扣除 實發的錄入并保存到文件“emp.txt ”中。模塊中運用void inputData()調用函數展開對文件的使用。

    模塊首先定義一個指針文件,又以寫的方式打開此文件,在打開的文件中輸入要管理的職工人數,用一個for循環按照職職工號 姓名 崗位工資 獎金 扣除 實發的格式循環獲取職工的記錄,接著又用了一個for循環將職工記錄寫入文件“emp.txt ”中,關閉文件。

    在StaffManage.h頭文件中聲明一個添加聯系人信息的函數void inputData();并在StaffManage.c源文件中定義相關的功能。其代碼如下所示

    /*************************輸入模塊*************************/
    void inputData()
    {
        FILE* fp;
        int n, i;
        if ((fp = fopen("emp.txt", "w+")) == NULL)
        {
    
            printf("不能建立emp.txt文件\n");
            return;
        }
    
        printf("輸入職工人數:");
        scanf("%d", &n);
    
        printf("輸入格式:職工號  姓名  性別  年齡  工資<Enter>\n");
        for (i = 0; i < n; i++)   /*  循環獲取n個職工記錄 */
        {
            printf("第%d個職工:", i + 1);
    
            scanf("%s%s%s%d%d", emp[i].no, emp[i].name, emp[i].sex, &emp[i].age, &emp[i].salar);
        }
    
        for (i = 0; i < n; i++)      /*將n個職工記錄寫入文件*/
        {
            fwrite(&emp[i], sizeof(struct emploee), 1, fp);
        }
    
        fclose(fp);
    }

    然后調試結果如下所示

    C語言怎么實現職工工資管理系統

    到這里職工工資管理系統輸入功能實現了。

    3.5、設計系統查詢模塊

    查詢模塊:實現按職工號查詢每個職工的信息,查詢顯示:職工號 姓名 崗位工資 獎金 扣除 實發。模塊開始是一個二級子菜單,一個是實現按職工號查詢,另一個是選擇退出返回主菜單,此處是利用switch選擇語句。選擇按職工號查詢,首先是以只讀的方式打開文件“emp.txt”,然后輸入要查詢的職工號,用一個for循環來控制查詢的人數,之后在顯示器上顯示職工信息,程序如下:

     	printf("記錄號 職工號 姓名 性別 年齡 工資\n");
        for (i = 0; fread(&emp[i], sizeof(struct emploee), 1, fp) != 0; i++)
        {
            printf("%6d%6s%9s%4s%5d%6d\n", i + 1, emp[i].no, emp[i].name, emp[i].sex, emp[i].age, emp[i].salar);
        }

    然后關閉文件。查詢職工信息已完成。

    在StaffManage.h頭文件中聲明一個添加聯系人信息的函數void search();和void searchNum(); 并在StaffManage.c源文件中定義相關的功能。其代碼如下所示

    /*************************查詢模塊*************************/
    void search()
    {
        int x;
        while (1)
        {
            system("cls");
    
            printf("\n\n\t\t查子菜單\n");
            printf("\t\t********************\n");
            printf("\t\t 1.按職工號查詢\n");
            printf("\t\t 0.返回主菜單\n");
            printf("\t\t********************\n");
    
            printf("\t請選擇(0-1):");
            scanf("%d", &x);
    
            if (x == 1)
            {
                searchNum();
            }
            else if (x == 0)
            {
                break;
            }
            else
            {
                printf("輸入有誤,請重新輸入!!!\n");
                system("pause");
            }
        }
    }
    void searchNum()
    {
        FILE* fp;
        int i;
    
        char num[5];
        if ((fp = fopen("emp.txt", "r")) == NULL)
        {
            printf("不能打開emp.txt文件\n");
            return;
        }
    
        printf("要查詢的職工號:");
        scanf("%s", num);
    
        for (i = 0; fread(&emp[i], sizeof(struct emploee), 1, fp); i++)
        {
            if (!strcmp(emp[i].no, num))
            {
                break;
            }
        }
    
        if (feof(fp))
        {
            printf("查無此人\n");
    
            system("pause");
            return;
        }
        else
        {
            printf("記錄號 職工號 姓名 性別 年齡 工資\n");
            printf("%6d%6s%9s%4s%5d%6d\n", i + 1, emp[i].no, emp[i].name, emp[i].sex, emp[i].age, emp[i].salar);
    
            system("pause");
        }
    
        fclose(fp);
    }

    然后調試結果如下所示

    C語言怎么實現職工工資管理系統

    到這里職工工資管理系統查詢功能實現了。

    3.6、設計系統修改模塊

    修改模塊:該模塊實現按職工號對職工所有信息的修改。模塊開始是一個二級子菜單,一個是按職工號修改,另一個是選擇退出返回主菜單,此處是利用switch選擇語句。選擇按職工號修改,首先是以讀寫的方式打開文件“emp.txt”。輸入要修改的職工號,用一個for循環來控制輸入的數量,循環如下:

     	for (i = 0; fread(&emp[i], sizeof(struct emploee), 1, fp); i++)
        {
            if (!strcmp(emp[i].no, num))
            {
                break;
            }
        }

    則會出現該職工的信息如下:

    printf("記錄號 職工號   姓名 性別 年齡 工資\n");
        printf("%6d%6s%9s%4s%5d%6d\n", i + 1, emp[i].no, emp[i].name, emp[i].sex, emp[i].age, emp[i].salar);

    然后對職工的信息進行修改,就可獲得新的職工記錄。之后文件指針指向該修改的記錄開頭,此時用newemp覆蓋當前記錄,修改完成時系統會顯示修改后的文件數據:記錄號、 職工號、 姓名 、性別 、年齡 、工資,然后關閉文件。修改職工信息已完成。

    在StaffManage.h頭文件中聲明一個添加聯系人信息的函數void modi();和void modiNum(); 并在StaffManage.c源文件中定義相關的功能。其代碼如下所示

    /*************************修改模塊*************************/
    void modi()
    {
        int x;
    
        while (1)
        {
        	systme("cls");
        	
            printf("\n\n\t\t修改子菜單\n");
            printf("\t\t*********************\n");
            printf("\t\t1.  按職工號修改\n");
            printf("\t\t0.  返回主菜單\n");
            printf("\t\t*********************\n");
    
            printf("\t請選擇(0-1):");
            scanf("%d", &x);
    
            if (x == 1)
            {
                modiNum();
            }
            else if (x == 0)
            {
                break;
            }
        }
    }
    void modiNum()
    {
        FILE* fp;
        int i;
        char num[5];
    
        if ((fp = fopen("emp.txt", "r+")) == NULL)
        {
            printf("不能 打開emp.txt文件\n");
            return;
        }
    
        printf("要修改的職工號:");
        scanf("%s", num);
    
        for (i = 0; fread(&emp[i], sizeof(struct emploee), 1, fp); i++)
        {
            if (!strcmp(emp[i].no, num))
            {
                break;
            }
        }
    
        if (feof(fp))
        {
            printf("\t沒有%s職工號的職工\n", num);
            return;
        }
    
        printf("記錄號 職工號   姓名 性別 年齡 工資\n");
        printf("%6d%6s%9s%4s%5d%6d\n", i + 1, emp[i].no, emp[i].name, emp[i].sex, emp[i].age, emp[i].salar);
    
        printf("輸入格式:職工號 姓名 性別 年齡 工資<Enter>\n");
        printf("第%d個記錄:", i + 1);
        scanf("%s%s%s%d%d", newemp.no, newemp.name, newemp.sex, &newemp.age, &newemp.salar);/*獲取新的職工記錄*/
    
        fseek(fp, -(long)sizeof(struct emploee), SEEK_CUR);
        /*文件指針指向該修改的記錄開頭*/
        fwrite(&newemp, sizeof(struct emploee), 1, fp);/*用newemp覆蓋當前記錄*/
    
        printf(" 修改后:\n");
        fseek(fp, 0, SEEK_SET);/*顯示修改后的文件數據*/
        printf("記錄號 職工號  姓名 性別 年齡 工資\n");
        for (i = 0; fread(&emp[i], sizeof(struct emploee), 1, fp) != 0; i++)
        {
            printf("%6d%6s%9s%4s%5d%6d\n", i + 1, emp[i].no, emp[i].name, emp[i].sex, emp[i].age, emp[i].salar);
        }
    	
    	system("pause");
    	
        fclose(fp);
    }

    然后調試結果如下所示

    C語言怎么實現職工工資管理系統

    到這里職工工資管理系統查詢功能實現了。

    3.7、設計系統刪除模塊

    刪除模塊:該模塊實現按職工號對職工所有信息的刪除。模塊開始是一個二級子菜單,一個是按職工號刪除記錄,另一個是選擇退出返回主菜單,此處是利用switch選擇語句。選擇按職工號刪除記錄,首先是只讀的方式打開一個文件“emp.txt”。就會顯示刪除前的職工信息程序如下:

    	printf("刪除前:\n");
    
        printf("記錄號 職工號    姓名 性別 年齡 工資\n");
        for (n = 0; fread(&emp[n], sizeof(struct emploee), 1, fp) != 0; n++)
        {
            printf("%6d%6s%9s%4s%5d%6d\n", n + 1, emp[n].no, emp[n].name, emp[n].sex, emp[n].age, emp[n].salar);
        }
    
        printf("要刪除的職工號:");
        scanf("%s", num);
    
        for (i = 0; (strcmp(emp[i].no, num) != 0 && i < n); i++)
        {
            if (i >= n)
            {
                printf("\t沒有%s職工號的職工\n", num);
    
                system("pause");
                return;
            }
        }

    執行刪除命令:

    	for (j = 0; j < i; j++)
        {
            fwrite(&emp[j], sizeof(struct emploee), 1, fp);
        }
    
        for (j = i + 1; j < n; j++)
        {
            fwrite(&emp[j], sizeof(struct emploee), 1, fp);
        }

    循環依次改后職工信息寫入文件,顯示刪除后文件中的職工信息。最后可以關閉文件,刪除職工信息已完成。

    在StaffManage.h頭文件中聲明一個添加聯系人信息的函數void dele();和void deleName(); 并在StaffManage.c源文件中定義相關的功能。其代碼如下所示

    /*************************刪除模塊*************************/
    void dele()
    {
        int x;
    
        while (1)
        {
            system("cls");
    
            printf("\n\n\t\t刪除子菜單\n");
            printf("\t\t*********\n");
            printf("\t\t 1.按職工號刪除記錄\n");
            printf("\t\t 0.返回主菜單\n");
            printf("\t\t*********\n");
    
            printf("\t 請選擇(0-1):");
            scanf("%d", &x);
    
            if (x == 1)
            {
                deleName();
            }
            else if (x == 0)
            {
                break;
            }
            else
            {
                printf("輸入有誤!!!\n");
            }
        }
    
        system("pause");
    }
    void deleName()
    {
        FILE* fp;
        int i, j, n;
        char num[5];
    
        if ((fp = fopen("emp.txt", "r")) == NULL)
        {
            printf("不能打開emp文件\n");
            return;
        }
    
        printf("刪除前:\n");
    
        printf("記錄號 職工號    姓名 性別 年齡 工資\n");
        for (n = 0; fread(&emp[n], sizeof(struct emploee), 1, fp) != 0; n++)
        {
            printf("%6d%6s%9s%4s%5d%6d\n", n + 1, emp[n].no, emp[n].name, emp[n].sex, emp[n].age, emp[n].salar);
        }
    
        printf("要刪除的職工號:");
        scanf("%s", num);
    
        for (i = 0; (strcmp(emp[i].no, num) != 0 && i < n); i++)
        {
            if (i >= n)
            {
                printf("\t沒有%s職工號的職工\n", num);
    
                system("pause");
                return;
            }
        }
    
        fclose(fp);
    
        fp = fopen("emp.txt", "w+");
        if (n == 1)  /*一個記錄已經刪除了*/
        {
            fclose(fp);
            return;
        }
    
        for (j = 0; j < i; j++)
        {
            fwrite(&emp[j], sizeof(struct emploee), 1, fp);
        }
    
        for (j = i + 1; j < n; j++)
        {
            fwrite(&emp[j], sizeof(struct emploee), 1, fp);
        }
    
        printf("刪除后:\n");
        fseek(fp, 0, SEEK_SET);
    
        printf("記錄號 職工號      姓名 性別 年齡  工資\n");
        for (i = 0; fread(&emp[i], sizeof(struct emploee), 1, fp) != 0; n++)
        {
            printf("%6d%6s%9s%4s%5d%6d\n", i + 1, emp[i].no, emp[i].name, emp[i].sex, emp[i].age, emp[i].salar);
        }
    
        system("pause");
        fclose(fp);
    }

    然后調試結果如下所示

    刪除前,職工信息如下:

    C語言怎么實現職工工資管理系統

    現在刪除職工號是004的職工,

    C語言怎么實現職工工資管理系統

    到這里職工工資管理系統刪除功能實現了。

    3.8、設計系統統計模塊

    統計模塊:根據輸入的工資,顯示大于該工資的職工的所有信息。模塊中運用void stat ()調用函數展開對文件的使用。首先是以只讀的方式打開文件“emp.txt”。輸入職工的工資數,運用for循環根據輸入的工資,顯示大于該工資的職工的所有信息。關閉文件,統計完成。

    在StaffManage.h頭文件中聲明一個添加聯系人信息的函數void stat();并在StaffManage.c源文件中定義相關的功能。其代碼如下所示

    /*************************統計模塊*************************/
    void stat()
    {
        FILE* fp;
        int n, num;
    
        if ((fp = fopen("emp.txt", "r")) == NULL)
        {
            printf("不能打開emp.txt文件\n");
            return;
        }
    
        printf("工資數:");
        scanf("%d", &num);
    
        printf("記錄號 職工號 姓名 性別 年齡 工資\n");
        for (n = 0; fread(&emp, sizeof(struct emploee), 1, fp); n++)
        {
            if (emp[n].salar >= num)
            {
                printf("%6d%6s%9s%4s%5d%6d\n", n + 1, emp[n].no, emp[n].name, emp[n].sex, emp[n].age, emp[n].salar);
            }
        }
    
        fclose(fp);
    }

    然后調試結果如下所示

    C語言怎么實現職工工資管理系統

    到這里職工工資管理系統統計功能實現了。

    3.9、設計系統輸出模塊

    輸出模塊:該模塊實現按職工號輸出職工的所有信息。在該模塊中運用void outputData()調用函數展開對文件的使用。首先以只讀的方式打開一個文本文件”emp.txt”。操作無誤則用for循環輸出正在查詢職工的:記錄號 職工號 姓名 性別 年齡 工資。這些完成后用fclose(fp)函數關閉文件。模塊運行結束。在StaffManage.h頭文件中聲明一個添加聯系人信息的函數void outputData();并在StaffManage.c源文件中定義相關的功能。其代碼如下所示

    /*************************輸出模塊*************************/
    void outputData()
    {
        int i;
        FILE* fp;
        if ((fp = fopen("emp.txt", "r")) == NULL)
        {
            printf("不能打開emp.txt文件\n");
            return;
        }
    
        printf("記錄號 職工號 姓名 性別 年齡 工資\n");
        for (i = 0; fread(&emp[i], sizeof(struct emploee), 1, fp) != 0; i++)
        {
            printf("%6d%6s%9s%4s%5d%6d\n", i + 1, emp[i].no, emp[i].name, emp[i].sex, emp[i].age, emp[i].salar);
        }
    
        fclose(fp);
    }

    然后調試結果如下所示

    C語言怎么實現職工工資管理系統

    到這里職工工資管理系統輸出功能實現了。

    3.10、設計系統追加模塊

    追加模塊:該模塊實現添加職工的信息。在該模塊中運用void run()調用函數展開對文件的使用。首先以讀寫的方式為讀寫打開一個文件“emp.txt”。輸出“要追加的職工人數”待輸入要追加的個數后,用for循環控制待輸入的職工信息。用fwrite(&newemp,sizeof(struct emploee),1,fp)將該職工記錄寫入文件。用fclose(fp)函數關閉文件,模塊運行結束。

    在StaffManage.h頭文件中聲明一個添加聯系人信息的函數void dele();和void deleName(); 并在StaffManage.c源文件中定義相關的功能。其代碼如下所示

     /*************************追加模塊*************************/
    void staffAdd()
    {
        FILE* fp;
        int n, i;
        if ((fp = fopen("emp.txt", "a+")) == NULL)
        {
            printf("不能打開emp文件\n");
            return;
        }
    
        printf("要追加的職工人數:");
        scanf("%d", &n);
    
        for (i = 0; i < n; i++)
        {
            printf("輸入格式:職工號 姓名 性別 年齡 工資<enter>\n");
            printf("職工記錄:");
            scanf("%s%s%s%d%d", newemp.no, newemp.name, newemp.sex, &newemp.age, &newemp.salar);
            /*獲取一個職工記錄*/
    
            fwrite(&newemp, sizeof(struct emploee), 1, fp);
            /*將該職工記錄寫入文件*/
        }
        fclose(fp);
    }

    然后調試結果如下所示

    追加職工信息前,職工信息如下:

    C語言怎么實現職工工資管理系統

    追加職工信息后,職工信息如下:

    C語言怎么實現職工工資管理系統

    C語言怎么實現職工工資管理系統

    到這里職工工資管理系統追加功能實現了。

    3.11、設計系統退出模塊

    在StaffManage.h頭文件中聲明一個添加聯系人信息的函數void exitStaff();并在StaffManage.c源文件中定義相關的功能。其代碼如下所示

    /*************************退出模塊*************************/
    void exitStaff()
    {
        printf("\t\t******************************************\n");
        printf("\t\t*                                             *\n");
        printf("\t\t*                                             *\n");
        printf("\t\t*               謝 謝 使 用 !                 *\n");
        printf("\t\t*                                             *\n");
        printf("\t\t*                                             *\n");
        printf("\t\t******************************************\n");
    }

    然后調試結果如下所示

    C語言怎么實現職工工資管理系統

    到這里職工工資管理系統退出功能實現了。

    關于“C語言怎么實現職工工資管理系統”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“C語言怎么實現職工工資管理系統”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

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

    AI

    临猗县| 崇州市| 噶尔县| 秀山| 焦作市| 民权县| 古田县| 北宁市| 陇西县| 赣州市| 昔阳县| 攀枝花市| 新蔡县| 泸水县| 运城市| 鱼台县| 长汀县| 孝感市| 米易县| 陆丰市| 探索| 云林县| 石景山区| 奈曼旗| 突泉县| 辽阳市| 栾城县| 达日县| 武鸣县| 明水县| 安图县| 沽源县| 岐山县| 西峡县| 平泉县| 万山特区| 黔西县| 云龙县| 东阳市| 沙田区| 南平市|