請(qǐng)大神幫我注釋全部,看不懂這代碼。
#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; ? //員工的總數(shù)
struct emploee ?//職工數(shù)據(jù)結(jié)構(gòu)
{
?char no[5];
?char name[8];
?char sex[3];
?int age;
?float wage1; ? ? ?//員工的基本工資
?float wage2; ? ? ?//員工的職務(wù)工資
?float funds; ? ? ?//員工的住房公積金
?float WATERfee; ? //員工的水電費(fèi)
?float TAXfee; ? ? //員工的個(gè)人所得稅
?float wage3; ? ? ?//員工的實(shí)發(fā)工資
}emp[NUM],newemp;
void main()
{
?menu();
}
void menu()//主界面
{ ?int n,w1;
? ?
? ?do
? ?{ system("cls"); ?
? ? ? printf("************* 職工工資管理系統(tǒng) **************\n");
? ? ? printf("* ? ? ? ? ? ?1-----輸入職工信息 ? ? ? ? ? ? ? ? ? ? *\n");
? ? ? printf("* ? ? ? ? ? ?2-----查詢職工信息 ? ? ? ? ? ? ? ? ? ? *\n");
? ? ? printf("* ? ? ? ? ? ?3-----根據(jù)職工ID號(hào)修改 ? ? ? ? ? ? ?*\n");
? ? ? printf("* ? ? ? ? ? ?4-----根據(jù)職工ID號(hào)刪除 ? ? ? ? ? ? ?*\n");
? ? ? printf("* ? ? ? ? ? ?5-----據(jù)工資統(tǒng)計(jì)并瀏覽 ? ? ? ? ? ? ?*\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) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//對(duì)選擇的數(shù)字作判斷
? ? ? ? ?{
? ? ? ? ? ? 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); ?//退出系統(tǒng),exit(0)函數(shù)功能是退出程序。
? }
}
/*************************輸入模塊**********************/
void enter()
{
? ? ?FILE *fp;
? ? ?int n,i;
? ? ?if ((fp=fopen("emp.txt","wb"))==NULL)
? ? ?{
?
? ? ?printf("不能建立emp文件\n");
? ? ?exit(1);
? ? ?}
? ? ?printf("輸入職工人數(shù):");
? ? scanf("%d",&n);
? ? ?printf("輸入格式:職工號(hào) 姓名 性別 年齡 基本工資 職務(wù)工資 ?公積金 水電費(fèi) ?稅<Enter>\n");
? ? ?for(i=0;i<n;i++) ? /* ?循環(huán)獲取n個(gè)職工記錄 */
? ? ?{
? ? ? ? ?printf("第%d個(gè)職工:",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個(gè)職工記錄寫入文件*/
? ? ? ? ? fwrite(&emp[i],sizeof(struct emploee),1,fp);
? ? ?fclose(fp);
}
/*************************統(tǒng)計(jì)模塊**********************/
void count()
{
? ? ?FILE *fp;
? ? ?int n,num;
? ? ?if((fp=fopen("emp.txt","rb"))==NULL)
? ? ?{
? ? ? ? ?printf("不能打開emp文件\n");
? ? ? ? ?exit(1);
? ? ?}
? ? ?printf("請(qǐng)輸入工資數(shù):");
? ? ?scanf("%d",&num);
? ? ?printf("記錄號(hào) 職工號(hào) 姓名 性別 年齡 基本工資 職務(wù)工資 公積金 水電費(fèi) ?稅 ?實(shí)發(fā)工資\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("記錄號(hào) 職工號(hào) 姓名 性別 年齡 ? 基本工資 職務(wù)工資 公積金 ?水電費(fèi) ? 稅 ?實(shí)發(fā)工資\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文件中記錄數(shù)*/
? ? ?printf("要?jiǎng)h除的職工號(hào):");
? ? ?scanf("%s",num);
? ? ?for(i=0;(strcmp(emp[i].no,num)!=0&&i<n);i++)
? ? ?if(i>=n)
? ? ?{
? ? ? ? ? printf("\t沒有%s職工號(hào)的職工\n",num);
? ? ? ? ? exit(2);
? ? ?}
? ? ?fclose(fp);
? ? ?fp=fopen("emp.dat","w+");
? ? ?if(n==1) ?/*一個(gè)記錄已經(jīng)刪除了*/
? ? ?{
? ? ? ? ? ?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("記錄號(hào) 職工號(hào) 姓名 性別 年齡 ? 基本工資 職務(wù)工資 公積金 水電費(fèi) ? 稅 ?實(shí)發(fā)工資\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("要修改的職工號(hào):");
? ? ?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職工號(hào)的職工\n",num);
? ? ? ? ? exit(2);
? ? ?}
? ? ?printf("記錄號(hào) 職工號(hào) ? 姓名 性別 年齡 基本工資 職務(wù)工資 ?公積金 ?水電費(fèi) ? 稅 ?實(shí)發(fā)工資\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("輸入格式:職工號(hào) ? 姓名 性別 年齡 基本工資 職務(wù)工資 公積金 ?水電費(fèi) 稅 <Enter>\n");
? ? printf("第%d個(gè)記錄:",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覆蓋當(dāng)前記錄
? ? ?printf(" 修改后:\n");
? ? fseek(fp,0,SEEK_SET); ? ? ? ?//顯示修改后的文件數(shù)據(jù)
? ? ?printf("記錄號(hào) 職工號(hào) ? 姓名 性別 年齡 ? 基本工資 職務(wù)工資 ? 公積金 ?水電費(fèi) ? 稅 ? 實(shí)發(fā)工資\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("要查詢的職工號(hào):");
? ? ?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("記錄號(hào) 職工號(hào) ? 姓名 性別 年齡 ? 基本工資 職務(wù)工資 ? 公積金 ?水電費(fèi) ? ?稅 ? 實(shí)發(fā)工資\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("記錄號(hào) 職工號(hào) ? 姓名 性別 年齡 ? 基本工資 職務(wù)工資 ? 公積金 ?水電費(fèi) ? 稅 ? 實(shí)發(fā)工資\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("要追加的職工人數(shù):");
? ? ? scanf("%d",&n);
? ? ? for(i=0;i<n;i++)?
? ? ? {?
? ? ? ? ? printf("輸入格式:職工號(hào) ? 姓名 性別 年齡 ? 基本工資 職務(wù)工資 ?公積金 ?水電費(fèi) ?稅 ? <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;//獲取一個(gè)新的職工記錄
? ? ? ? fwrite(&newemp,sizeof(struct emploee),1,fp); ? //將該職工記錄寫入文件
? ? ? }
? ? ? fclose(fp);
}
?
/*************************載入模塊**********************/
void load() ? ? ? ? ?//加載記錄或可以計(jì)算記錄個(gè)數(shù)的函數(shù)
{
? ? ?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(); ? ? ? ? ? ? ? ?
? ? }
}
2017-11-19
為什么要一次性調(diào)用這么多子函數(shù),可以多興建一些項(xiàng)目
2017-11-16
你這積分太少了