亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

請大神幫我注釋全部,看不懂這代碼。

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#define NUM 1000

void enter();

void search_num();

void dele_num();

void modi_num();

void browse();

void count();

void load();

void add();

void menu();?

int n; ? //員工的總數

struct emploee ?//職工數據結構

{

?char no[5];

?char name[8];

?char sex[3];

?int age;

?float wage1; ? ? ?//員工的基本工資

?float wage2; ? ? ?//員工的職務工資

?float funds; ? ? ?//員工的住房公積金

?float WATERfee; ? //員工的水電費

?float TAXfee; ? ? //員工的個人所得稅

?float wage3; ? ? ?//員工的實發工資

}emp[NUM],newemp;

void main()

{

?menu();

}


void menu()//主界面

{ ?int n,w1;

? ?

? ?do

? ?{ system("cls"); ?

? ? ? printf("************* 職工工資管理系統 **************\n");

? ? ? printf("* ? ? ? ? ? ?1-----輸入職工信息 ? ? ? ? ? ? ? ? ? ? *\n");

? ? ? printf("* ? ? ? ? ? ?2-----查詢職工信息 ? ? ? ? ? ? ? ? ? ? *\n");

? ? ? printf("* ? ? ? ? ? ?3-----根據職工ID號修改 ? ? ? ? ? ? ?*\n");

? ? ? printf("* ? ? ? ? ? ?4-----根據職工ID號刪除 ? ? ? ? ? ? ?*\n");

? ? ? printf("* ? ? ? ? ? ?5-----據工資統計并瀏覽 ? ? ? ? ? ? ?*\n");

? ? ? printf("* ? ? ? ? ? ?6-----從文件載入信息 ? ? ? ? ? ? ? ? *\n");

? ? ? printf("* ? ? ? ? ? ?7-----瀏覽全部職工 ? ? ? ? ? ? ? ? ? ?*\n");

? ? ? printf("* ? ? ? ? ? ?8-----追加職工信息 ? ? ? ? ? ? ? ? ? ?*\n");

? ? ? printf("* ? ? ? ? ? ?9-----退出程序 ? ? ? ? ? ? ? ? ? ? ? ? ? *\n");

? ? ? printf("***************************************************\n");

? printf(" ? ? ? 輸入您的選擇(1-9):[ ]\b\b");

? scanf("%d",&n);

? if(n<1||n>9) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//對選擇的數字作判斷

? ? ? ? ?{

? ? ? ? ? ? w1=1;

? ? ? ? ? ? printf("your choice is not between 1 and 9,Please input again:");

? ? ? ? ? ? getchar();

? ? ? ? ? }

? ? ? ? ?else ? ?w1=0;

? ? ? }?

? ? while(w1==1);

? switch(n)

? { case 1:enter(); ? ?break; ??

? ? case 2:search_num(); ? break; ?

? ? case 3:modi_num(); ? break; ? ?

? ? case 4:dele_num(); ? break; ? ?

? ? case 5:count (); ? ?break; ? ?

? ? case 6:load(); ? ?break; ? ? ?//保存模塊

? ? case 7:browse(); ? ?break; ? ? ?//加載模塊

? ? case 8:add(); ? ?break;?

? ? case 9:printf("\n×××××××謝謝,歡迎下次光臨!×××××××\n\n");

? ? default:exit(0); ?//退出系統,exit(0)函數功能是退出程序。

? }

}

/*************************輸入模塊**********************/

void enter()

{

? ? ?FILE *fp;

? ? ?int n,i;

? ? ?if ((fp=fopen("emp.txt","wb"))==NULL)

? ? ?{

?

? ? ?printf("不能建立emp文件\n");

? ? ?exit(1);

? ? ?}

? ? ?printf("輸入職工人數:");

? ? scanf("%d",&n);

? ? ?printf("輸入格式:職工號 姓名 性別 年齡 基本工資 職務工資 ?公積金 水電費 ?稅<Enter>\n");

? ? ?for(i=0;i<n;i++) ? /* ?循環獲取n個職工記錄 */

? ? ?{

? ? ? ? ?printf("第%d個職工:",i+1);

? ? ? ? ?scanf("%s%s%s%d%f%f%f%f%f",emp[i].no,emp[i].name,emp[i].sex,&emp[i].age,

? ? ? ? ? ?&emp[i].wage1,&emp[i].wage2,&emp[i].funds,&emp[i].WATERfee,&emp[i].TAXfee);

? ? ? ? ?emp[i].wage3=emp[i].wage1+emp[i].wage2+emp[i].funds-emp[i].WATERfee-emp[i].TAXfee;

? ? ?}

? ? ?for(i=0;i<n;i++) ? ? ?/*將n個職工記錄寫入文件*/

? ? ? ? ? fwrite(&emp[i],sizeof(struct emploee),1,fp);

? ? ?fclose(fp);

}

/*************************統計模塊**********************/

void count()

{

? ? ?FILE *fp;

? ? ?int n,num;

? ? ?if((fp=fopen("emp.txt","rb"))==NULL)

? ? ?{

? ? ? ? ?printf("不能打開emp文件\n");

? ? ? ? ?exit(1);

? ? ?}

? ? ?printf("請輸入工資數:");

? ? ?scanf("%d",&num);

? ? ?printf("記錄號 職工號 姓名 性別 年齡 基本工資 職務工資 公積金 水電費 ?稅 ?實發工資\n");

? ? ?for(n=0;fread(&emp[n],sizeof(struct emploee),1,fp)!=0;n++)

? ? ?if(emp[n].wage3>=num)

? ? ?printf("%6d%6s%9s%4s%5d ? %.1f ? %.1f ?%.1f ? %.1f ? %.1f ? %.1f\n",n+1,emp[n].no,emp[n].name,emp[n].sex, emp[n].age,emp[n].wage1,

? ? ? ? ? ? ?emp[n].wage2,emp[n].funds,emp[n].WATERfee,emp[n].TAXfee,emp[n].wage3);

? ? ?fclose(fp);

}

/********************刪除模塊*******************/


void dele_num()

{

? ? ?FILE *fp;

? ? ?int i,j,n;

? ? ?char num[5];

? ? ?if((fp=fopen("emp.txt","rb"))==NULL)

? ? ?{

? ? ? ? ?printf("不能打開emp文件\n");

? ? ? ? ?exit(1);

? ? ? }

? ? ?printf("刪除前:\n");

? ? ?printf("記錄號 職工號 姓名 性別 年齡 ? 基本工資 職務工資 公積金 ?水電費 ? 稅 ?實發工資\n");

? ? for(n=0;fread(&emp[n],sizeof(struct emploee),1,fp);n++)

? ? ?printf("%6d%6s%9s%4s%5d ? %.1f ? %.1f ? %.1f ? %.1f ? %.1f ? %.1f\n",n+1,emp[n].no,emp[n].name,emp[n].sex, emp[n].age,emp[n].wage1,

? ? ? ? ? ? ?emp[n].wage2,emp[n].funds,emp[n].WATERfee,emp[n].TAXfee,emp[n].wage3);/*n為emp文件中記錄數*/

? ? ?printf("要刪除的職工號:");

? ? ?scanf("%s",num);

? ? ?for(i=0;(strcmp(emp[i].no,num)!=0&&i<n);i++)

? ? ?if(i>=n)

? ? ?{

? ? ? ? ? printf("\t沒有%s職工號的職工\n",num);

? ? ? ? ? exit(2);

? ? ?}

? ? ?fclose(fp);

? ? ?fp=fopen("emp.dat","w+");

? ? ?if(n==1) ?/*一個記錄已經刪除了*/

? ? ?{

? ? ? ? ? ?fclose(fp);

? ? ? ? ? ?exit(3);

? ? ?}

? ? ?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);i++)

? ? ? ? ?printf("%6d%6s%9s%4s%5d% ? %.1f ? ?%.1f ? %.1f ? %.1f ? %.1f ? %.1f\n",i+1,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].wage1,

? ? ? ? ? ? ? ? ?emp[i].wage2,emp[i].funds,emp[i].WATERfee,emp[i].TAXfee,emp[i].wage3);

? ? ? ?fclose(fp);

}

/********************修改模塊*******************/

void modi_num()

{

? ? ?FILE *fp;

? ? ?int i,j;

? ? ?char num[5];

? ? ?if((fp=fopen("emp.txt","rb+"))==NULL)

? ? ?{

? ? ? ? ?printf("不能 打開emp文件\n");

? ? ? ? ?exit(1);

? ? ?}

? ? ?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);

? ? ? ? ? exit(2);

? ? ?}

? ? ?printf("記錄號 職工號 ? 姓名 性別 年齡 基本工資 職務工資 ?公積金 ?水電費 ? 稅 ?實發工資\n");

? ? ?printf("%6d%6s%9s%4s%5d% ? %.1f ? %.1f ? %.1f ? %.1f ? %.1f ? %.1f\n",i+1,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].wage1,

? ? ? ? ? ? ? emp[i].wage2,emp[i].funds,emp[i].WATERfee,emp[i].TAXfee,emp[i].wage3);

? ? printf("輸入格式:職工號 ? 姓名 性別 年齡 基本工資 職務工資 公積金 ?水電費 稅 <Enter>\n");

? ? printf("第%d個記錄:",i+1);

? ? scanf("%s%s%s%d%f%f%f%f%f",newemp.no,newemp.name,newemp.sex,&newemp.age,

? ? ? ? ? ? ? ?&newemp.wage1,&newemp.wage2,&newemp.funds,&newemp.WATERfee,&newemp.TAXfee);//獲取新的職工記錄

? ? ? ? ? ? ?newemp.wage3=newemp.wage1+newemp.wage2+newemp.funds-newemp.WATERfee-newemp.TAXfee;

? ? 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 ? %.1f ? %.1f ?%.1f ? %.1f ?%.1f ? %.1f\n",i+1,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].wage1,

? ? ? ? ? ? ? ? ? ?emp[i].wage2,emp[i].funds,emp[i].WATERfee,emp[i].TAXfee,emp[i].wage3);

? ? fclose(fp);

}

?/*************************查詢模塊***********************/

void search_num()

{

? ? ?FILE *fp;

? ? ?int i;?

? ? ?char num[5];

? ? ?if((fp=fopen("emp.txt","rb"))==NULL)

? ? ?{

? ? ? ? ? printf("不能打開emp文件\n");

? ? ? ? ? exit(1);

? ? ?}

? ? ?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查無此人\n");

? ? ? ? exit(2);

? ? }

? ? ?printf("記錄號 職工號 ? 姓名 性別 年齡 ? 基本工資 職務工資 ? 公積金 ?水電費 ? ?稅 ? 實發工資\n");

? ? ?printf("%6d%6s%9s%4s%5d ?%.1f ?%.1f ?%.1f ?%.1f ? %.1f ? %.1f\n",i+1,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].wage1,

? ? ? ? ? ? ? ?emp[i].wage2,emp[i].funds,emp[i].WATERfee,emp[i].TAXfee,emp[i].wage3);

? ? ? ?fclose(fp);

}

/*******************瀏覽模塊********************/

void browse()

{ ? ?int i;

? ? ?FILE *fp;

? ? ?if((fp=fopen("emp.txt","r"))==NULL)

? ? ?{ ? ??

? ? ? ? ?printf("不能打開emp文件\n");

? ? ? ? ?exit(0);

? ? ?}

? ? ?printf("記錄號 職工號 ? 姓名 性別 年齡 ? 基本工資 職務工資 ? 公積金 ?水電費 ? 稅 ? 實發工資\n");

? ? ?for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp)!=0;i++)

? ? ?{

? ? ? ? ? printf("%6d%6s%9s%4s%5d ?%.1f ?%.1f ? ? %.1f ? ?%.1f ? ?%.1f ? %.1f\n",i+1,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].wage1,

? ? ? ? ? ? ? ? ? ?emp[i].wage2,emp[i].funds,emp[i].WATERfee,emp[i].TAXfee,emp[i].wage3);

? ? }

? ? fclose(fp);

}

/******************追加模塊*******************/

void add()

{

? ? ? FILE *fp;

? ? ? int n,i,j;

? ? ? if((fp=fopen("emp.txt","ab+"))==NULL)

? ? ? {

? ? ? ? ? printf("不能打開emp文件\n");

? ? ? ? ? ?exit(0);

? ? ? }

? ? printf("要追加的職工人數:");

? ? ? scanf("%d",&n);

? ? ? for(i=0;i<n;i++)?

? ? ? {?

? ? ? ? ? printf("輸入格式:職工號 ? 姓名 性別 年齡 ? 基本工資 職務工資 ?公積金 ?水電費 ?稅 ? <Enter>\n");

? ? ? ? ?printf("追加記錄:\n");

? ? ? ? ?scanf("%s%s%s%d%f%f%f%f%f",newemp.no,newemp.name,newemp.sex,&newemp.age,

? ? ? ? ? ? ? ? ? ?&newemp.wage1,&newemp.wage2,&newemp.funds,&newemp.WATERfee,&newemp.TAXfee);

? ? ? ? ? ? ?newemp.wage3=newemp.wage1+newemp.wage2+newemp.funds-newemp.WATERfee-newemp.TAXfee;//獲取一個新的職工記錄

? ? ? ? fwrite(&newemp,sizeof(struct emploee),1,fp); ? //將該職工記錄寫入文件

? ? ? }

? ? ? fclose(fp);

}

?

/*************************載入模塊**********************/

void load() ? ? ? ? ?//加載記錄或可以計算記錄個數的函數

{

? ? ?FILE *fp;

? ? ?int i,w;

? ? ?w=1;

? ? ?system( "cls" );?

? ? if((fp=fopen("emp.txt","rb"))==NULL) ? ? ?//以輸出打開方式,在此前的記錄被覆蓋

? ? {

? ? ? ? printf("\nCannot open file\n");

? ? ? ? w=0;

? ? ? ? return ;

? ? }

? ? n=0;

? ? for(i=0;!feof(fp);i++)

? ? { ??

? ? ? ? fread(&emp[i],sizeof(struct emploee),1,fp);

? ? ? ? n++;

? ? }

? ? n=n-1;

? ? ? ? ? fclose(fp);

? ? if(w==1)?

? ? {

? ? ? ? printf("Load file ok!");

? ? ? ? getchar();

? ? ? ? getchar();

? ? ? ? menu(); ? ? ? ? ? ? ? ?

? ? }

}


正在回答

2 回答

為什么要一次性調用這么多子函數,可以多興建一些項目

0 回復 有任何疑惑可以回復我~

你這積分太少了

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
C語言入門
  • 參與學習       926906    人
  • 解答問題       21533    個

C語言入門視頻教程,帶你進入編程世界的必修課-C語言

進入課程

請大神幫我注釋全部,看不懂這代碼。

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號