網(wǎng)站首頁 編程語言 正文
本文實例為大家分享了C語言實現(xiàn)職工工資管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
設(shè)計要求:
模擬并設(shè)計一個企業(yè)的職工工資管理系統(tǒng),職工信息包括工號、姓名、基本工資、津貼,設(shè)職工人數(shù)不超過500人,以菜單選項的方式完成相應(yīng)的功能,主要功能需求如下:
1、建立工資表;
2、職工扣稅和實發(fā)工資;
3、按實發(fā)工資從高到低的順序顯示工資明細表;
4、修改職工的工資信息;
5、按工號查詢職工工資信息;
6、職工工資統(tǒng)計分析;
7、退出系統(tǒng)。
基本思路:
將職工工資管理系統(tǒng)的職工信息錄入功能、數(shù)據(jù)處理并存入文件功能、按照職工工號查找職工工資信息功能、修改職工信息功能分成多個模塊,為了使程序的可讀性更強,程序的編寫將以函數(shù)形式編寫封裝各個功能,然后在主函數(shù)中以循環(huán)形式讀取用戶輸入的指令,根據(jù)用戶的指令選擇不同的函數(shù)入口地址,從而執(zhí)行不同的操作,實現(xiàn)設(shè)計要求的職工工資管理系統(tǒng)的各項功能。
全部代碼:
#include? #include #include #include #define Q 15 ? ? ? ? ? ? ? //最大字符串長度? #define N 500 ? ? ? ? ? ? ?//最大員工數(shù)量? typedef struct workers{ ?? ?int workersID; ? ? ? ? ? ?//職工工號 ?? ?char name[Q]; ? ? ? ? ? ? //職工姓名 ?? ?double basicsalary; ? ? ? //基本工資 ?? ?double allowance; ? ? ? ? //津貼 ?? ?double taxsalary; ? ? ? ? //扣稅 ?? ?double truesalary; ? ? ? ?//實發(fā)工資 }WORKERS; ? ? ? ? ? ? ? ? ? ? //職工信息 void Menu(int *n); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //主菜單? void Payroll(WORKERS work[],int *p); ? ? ? ? ? ? //建立工資表? void Taxsalary(WORKERS work[],int num); ? ? ? ? ?//計算職工扣稅和實發(fā)工資 void Sort(WORKERS work[],int num ) ; ? ? ? ? ? ? //將工資從高到低排序 void Change(WORKERS work[],int num); ? ? ? ? ? ? //修改職工的工資信息 int Find(WORKERS work[],int num); ? ? ? ? ? ? ? ?//按工號查詢職工工資信息 void Analyse(WORKERS work[],int num); ? ? ? ? ? ?//職工工資統(tǒng)計分析? void Printworkroll(WORKERS work[],int num); ? ? ?//顯示工資明細表 void Writefile(WORKERS work[],int num); ? ? ? ? ?//輸出數(shù)據(jù)并寫入 data.txt 文件? ?? ? int main() { ?? ?? ?WORKERS work[N]; ? ? ? ? ? ? ? ? ? ? ? ? ? ? //定義一個結(jié)構(gòu)體數(shù)組來存儲員工信息? ?? ?char ch; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //ch為檢測是否返回主菜單? ?? ?int n,num=0,ret; ? ? ? ? ? ? ? ? ? ? ? ? ? ? //n為操作數(shù),num為總?cè)藬?shù),ret判斷數(shù)? ?? ?while(1){ ?? ??? ?system("cls"); ?? ??? ?Menu(&n); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//主菜單? ?? ??? ? ?? ??? ?switch(n){ ?? ??? ??? ?case 0: ?? ??? ??? ??? ?system("cls"); ? ? ? ? ? ? ? ? ? //退出程序? ?? ??? ??? ??? ?printf("退出成功!\n"); ?? ??? ??? ??? ?exit(0); ?? ??? ??? ?case 1: ?? ??? ??? ??? ?Payroll(work,&num); ?? ??? ??? ? //建立工資表 ?? ??? ??? ??? ?break; ?? ??? ??? ?case 2: ?? ??? ??? ??? ?Taxsalary(work,num); ? ? ? ? ? ? //職工扣稅和實發(fā)工資 ?? ??? ??? ??? ?Writefile(work,num); ? ? ? ? ? ? //輸出數(shù)據(jù)并寫入 data.txt 文件? ?? ??? ??? ??? ?printf("計算完成,并輸出數(shù)據(jù)至txt文件!\n"); ?? ??? ??? ??? ?Sleep(2000); ?? ??? ??? ??? ?system("cls"); ?? ??? ??? ??? ?break; ?? ??? ??? ?case 3: ?? ??? ??? ??? ?Sort(work,num); ? ? ? ? ? ? ? ? ?//將工資從高到低排序 ?? ??? ??? ??? ?Printworkroll(work,num); ? ? ? ? //顯示工資明細表 ?? ??? ??? ??? ?printf("\n是否返回主菜單?Y or N\n"); ?? ??? ??? ??? ?fflush(stdin); ?? ??? ??? ??? ?ch=getchar(); ?? ??? ??? ??? ?if(ch=='N'){ ?? ??? ??? ??? ??? ?exit(0); ?? ??? ??? ??? ?} ?? ??? ??? ??? ?break; ?? ??? ??? ?case 4: ?? ??? ??? ??? ?Change(work,num); ? ? ? ? ? ? ? ?//修改職工的工資信息 ?? ??? ??? ??? ?printf("\n是否返回主菜單?Y or N\n"); ?? ??? ??? ??? ?fflush(stdin); ?? ??? ??? ??? ?ch=getchar(); ?? ??? ??? ??? ?if(ch=='N'){ ?? ??? ??? ??? ??? ?exit(0); ?? ??? ??? ??? ?} ?? ??? ??? ??? ?break; ?? ??? ??? ?case 5: ?? ??? ??? ??? ?ret=Find(work,num); ? ? ? ? ? ? ?//按工號查詢職工工資信息 ?? ??? ??? ??? ?if(ret==0){ ?? ??? ??? ??? ??? ?printf("查無此人!"); ? ? ? ?//反饋查詢不到信息? ?? ??? ??? ??? ?} ?? ??? ??? ??? ?printf("\n是否返回主菜單?Y or N\n"); ?? ??? ??? ??? ?fflush(stdin); ?? ??? ??? ??? ?ch=getchar(); ?? ??? ??? ??? ?if(ch=='N'){ ?? ??? ??? ??? ??? ?exit(0); ?? ??? ??? ??? ?} ?? ??? ??? ??? ?break; ?? ??? ??? ?case 6: ?? ??? ??? ??? ?Analyse(work,num); ? ? ? ? ? ? ? //職工工資統(tǒng)計分析 ?? ??? ??? ??? ?printf("\n是否返回主菜單?Y or N\n"); ?? ??? ??? ??? ?fflush(stdin); ?? ??? ??? ??? ?ch=getchar(); ?? ??? ??? ??? ?if(ch=='N'){ ?? ??? ??? ??? ??? ?exit(0); ?? ??? ??? ??? ?} ?? ??? ??? ??? ?break; ?? ??? ?} ?? ?} ?? ?return 0; } void Menu(int *n) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //主菜單 ? *n為返回操作數(shù)? { ?? ?int a; ?? ?printf(" ——————職工工資管理系統(tǒng)——————\n"); ?? ?printf("| ? ? ? 1.建立職工工資表 ? ? ? ? ? ? ? ? |\n"); ?? ?printf("| ? ? ? 2.職工扣稅和實發(fā)工資 ? ? ? ? ? ? |\n"); ?? ?printf("| ? ? ? 3.實發(fā)工資從高到低排序 ? ? ? ? ? |\n"); ?? ?printf("| ? ? ? 4.修改職工工資信息 ? ? ? ? ? ? ? |\n"); ?? ?printf("| ? ? ? 5.查詢職工工資信息 ? ? ? ? ? ? ? |\n"); ?? ?printf("| ? ? ? 6.職工工資統(tǒng)計分析 ? ? ? ? ? ? ? |\n"); ?? ?printf("| ? ? ? 0.退出系統(tǒng) ? ? ? ? ? ? ? ? ? ? ? |\n"); ?? ?printf(" ————————————————————\n"); ?? ?printf("提示:請輸入數(shù)字序號選擇對應(yīng)的操作!\n"); ?? ?scanf("%d",&a); ?? ?*n=a; ?? ?system("cls"); } void Payroll(WORKERS work[],int *p) ? ? ? ? ? ? ? //建立工資表? { ?? ?int num=*p; ?? ?char ch; ?? ?do{ ?? ??? ?system("cls"); ?? ??? ?printf("員工(%d)的信息\n",num+1); ?? ??? ?printf("工號:"); ?? ??? ?scanf("%d",&work[num].workersID); ?? ??? ?printf("姓名:"); ?? ??? ?scanf("%s",&work[num].name); ?? ??? ?printf("基本工資:"); ?? ??? ?scanf("%lf",&work[num].basicsalary); ?? ??? ?printf("津貼:"); ?? ??? ?scanf("%lf",&work[num].allowance); ?? ??? ?printf("是否繼續(xù)錄入?Y or N\n");? ?? ??? ?fflush(stdin); ?? ??? ?scanf("%c",&ch); ?? ??? ?num++; ?? ?}while(ch=='Y'); ?? ? ?? ?*p=num; ? ? ?//返回總?cè)藬?shù)? ?? ?system("cls"); } void Taxsalary(WORKERS work[],int num) ? ? ? ? ? ?//職工扣稅和實發(fā)工資 { ?? ? ?? ?int i; ?? ?double money; ?? ?for(i=0;i =3000)) ?? ??? ?{ ?? ??? ??? ?work[i].taxsalary=(money-3000)*0.05; ?? ??? ??? ?work[i].truesalary= money-work[i].taxsalary;? ?? ??? ?} ?? ??? ?else ?? ??? ?{? ?? ??? ??? ?work[i].taxsalary=(money-3000)*0.05+(money-4000)*0.1; ?? ??? ??? ?work[i].truesalary= money-work[i].taxsalary;? ?? ??? ?}? ?? ?} } void Sort(WORKERS work[],int num) ? ? ? ? ? ? ? ? //將工資從高到低排序 { ?? ?int i,j; ? ? WORKERS temp; ?? ?for (i=0;i 3000)){ ?? ??? ??? ??? ??? ?work[i].taxsalary=(sum-3000)*0.05; ?? ? ? ??? ??? ??? ?work[i].truesalary=3000+((sum-3000)*0.95); ?? ??? ??? ??? ?} ?? ? ? ?? ??? ??? ?else{ ?? ? ? ??? ??? ??? ?work[i].taxsalary=50+(sum-4000)*0.10; ?? ? ? ??? ??? ??? ?work[i].truesalary=3950+((sum-4000)*0.9); ?? ??? ??? ??? ?} ?? ??? ??? ??? ?system("cls"); ?? ??? ??? ??? ? ?? ??? ??? ??? ?printf("員工信息修改成功!\n\n"); ?? ??? ??? ??? ?printf("扣稅:%6.2lf\n",work[i].taxsalary);? ?? ??? ??? ??? ?printf("實發(fā)工資:%6.2lf\n",work[i].truesalary);? ?? ??? ??? ??? ? ?? ??? ??? ??? ?break;?? ? ?? ??? ??? ?} ?? ??? ??? ?else{ ?? ??? ??? ??? ?break; ?? ??? ??? ?}?? ? ?? ??? ?} ?? ?} }? int Find(WORKERS work[],int num) ? ? ? ? ? ? ? ? ?//按工號查詢職工工資信息 { ?? ?int s,i,flag=0; ?? ?printf("查詢職工工資信息\n\n"); ?? ?printf("請輸入您的工號:"); ?? ?scanf("%d",&s); ?? ?putchar('\n'); ?? ?for(i=0;i =3000)) ?? ??? ?{ ?? ??? ??? ?m++; ?? ??? ?}?? ??? ? ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?l++; ?? ??? ?} ?? ?} ? ? x=(double)s/num*100; ?? ?y=(double)m/num*100; ?? ?z=(double)l/num*100; ?? ?printf("實發(fā)工資\n"); ?? ?printf("(3000元以下) ? ? ? ?人數(shù):%d\t比例:%.2lf%%\n",s,x); ? ? ??? ??? ? ?? ?printf("(3000以上4000以下) ?人數(shù):%d\t比例:%.2lf%%\n",m,y); ?? ? ?? ?printf("(4000以上) ? ? ? ? ?人數(shù):%d\t比例:%.2lf%%\n",l,z); ?? ? ?? ? } void Printworkroll(WORKERS work[],int num) ? ? ? ?//顯示工資明細表 { ?? ?printf("工號\t姓名\t基本工資\t津貼\t扣稅\t實發(fā)工資\n"); ?? ?for(int i=0;i work[j].workersID) ?? ??? ??? ?{ ?? ??? ??? ? ? ?temp=work[i]; ?? ??? ??? ? ? ?work[i]=work[j]; ?? ??? ??? ? ? ?work[j]=temp; ?? ??? ??? ?} ?? ??? ?} ?? ?} ?? ? ?? ?FILE *fp; ?? ?if((fp=fopen("data.txt","w"))==0){ ?? ??? ?printf("錯誤!\n"); ?? ??? ?exit(0); ?? ?} ?? ?fprintf(fp,"職工工資管理系統(tǒng)\n成功錄入%d人\n詳表如下:\n\n",num); ?? ?fprintf(fp,"工號\t姓名\t基本工資\t津貼\t扣稅\t實發(fā)工資\n"); ?? ?for(int i=0;i
原文鏈接:https://blog.csdn.net/weixin_45859506/article/details/104250974
相關(guān)推薦
- 2022-09-24 C#實現(xiàn)對象的序列化和反序列化_C#教程
- 2022-06-01 聊聊.Net,Core配置Nlog.md的問題_實用技巧
- 2022-07-04 如何生成對角矩陣?numpy.diag_python
- 2023-04-14 jupyter-lab設(shè)置自啟動及遠程連接開發(fā)環(huán)境_python
- 2022-10-11 Data truncation: Data too long for column ‘context
- 2022-08-19 mv命令linux
- 2023-11-23 python的相對路徑表示方式
- 2023-04-11 Python單個項目列表轉(zhuǎn)換為整數(shù)的實現(xiàn)_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支