




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、#include "stdio.h" /*#include "stdlib.h" /*#include "string.h" /*#include "conio.h" /*#define HEADER1 " -標準輸入輸出函數(shù)庫*/標準函數(shù)庫*/字符串函數(shù)庫*/屏幕操作函數(shù)庫*/RSDA-n"#define HEADER2 "| number| name | jbgz | jj | kk |yfgz | sk | sfgz | n"#define HEADER3 "
2、|-| n"#define FORMAT "|%-8s|%-10s |%8.2f|%8.2f|%8.2f|%8.2f|%8.2f|%8.2f| n"#define DATA p->num,p->name,p->jbgz,p->jj,p->kk,p->yfgz,p->sk,p->sfgz#define END "n"#define N 60int saveflag=0; /* 是否需要存盤的標志變量*/* 定義與職工有關(guān)的數(shù)據(jù)結(jié)構(gòu)*/typedef struct employee /* 標記為 em
3、ployee*/char num10; /*職工編號*/char name15; /*職工姓名*/float jbgz;/*基本工資*/float jj;/*獎金*/float kk; /*扣款*/float yfgz;/*應發(fā)工資*/float sk; /*稅款*/float sfgz;/*實發(fā)工資*/RSDA;void menu() /* 主菜單 */system("cls"); /* 調(diào)用DO階令,清屏.與clrscr()功能相同*/printf("The Employee Management System n");printf("*M
4、enu*n");2 delete recordprintf(" * 1 input record*n");printf(" * 3 search record *n");printf(" * 5 insert record*n");printf(" * 7 sort record*n");printf(" * 9 display record*n");4 modify record6 count record8 save record0 quit systemprintf("
5、*n/*printf() 送格式化輸出至屏幕中*/void printheader() /* 格式化輸出表頭*/printf(HEADER1);printf(HEADER2);printf(HEADER3);void printdata(RSDA pp) /* 格式化輸出表中數(shù)據(jù)*/RSDA* p;p=&pp;printf(FORMAT,DATA);void Disp(RSDA tp,int n) /* 顯示數(shù)組tp 中存儲的記錄,內(nèi)容為employee結(jié)構(gòu)中定義的內(nèi)容*/ int i;if(n=0) /* 表示沒有職工工資記錄*/printf("n=>Not empl
6、oyee record!n"); while(getchar()!='n')continue;getchar();return;printf("nn");printheader(); /*i=0;while(i<n) /*printdata(tpi);i ;printf(HEADER3);輸出表格頭部*/逐條輸出數(shù)組中存儲的職工信息*/while(getchar()!='n') continue;getchar();void Wrong() /* printf("nnnnn輸出按鍵錯誤信息*/*Error:input
7、 has wrong! press any key tocontinue*n"); while(getchar()!='n') continue;getchar();void Nofind() /*printf("n= 輸出未查找到此職工的信息*/>Not find this employee record!n");/*作用:用于定位數(shù)組中符合要求的記錄,并返回保存該記錄的數(shù)組元素下標值參數(shù): findmess 保存要查找的具體內(nèi)容; nameornum 保存按什么在數(shù)組中查找*/int Locate(RSDA tp,int n,char f
8、indmess,char nameornum) int i=0;if(strcmp(nameornum,"num")=0) /* 按職工編號查詢*/while(i<n)若找到 findmess 值的職工編號if(strcmp(tpi.num,findmess)=0) /*/return i;i ;按職工姓名查詢*/若找到 findmess 值的姓名*/else if(strcmp(nameornum,"name")=0) /*while(i<n)if(strcmp(,findmess)=0) /* return i;i ;re
9、turn -1; /* 若未找到,返回一個整數(shù)-1*/* 輸入字符串,并進行長度驗證( 長度 <lens)*/void stringinput(char *t,int lens,char *notice)char n255;doprintf(notice); /*顯示提示信息*/scanf("%s",n); /* 輸入字符串*/if(strlen(n)>lens) printf("n exceed the required length! n"); /*進行長度校驗,超過lens 值重新輸入*/while(strlen(n)>lens)
10、;strcpy(t,n); /* 將輸入的字符串復制到字符串t 中 */*輸入數(shù)值,0< =數(shù)值)*/float numberinput(char *notice)float t=0.00;doprintf(notice); /*顯示提示信息*/scanf("%f",&t); /* 輸入如工資等數(shù)值型的值*/進行數(shù)值校驗*/if(t<0) printf("n score must >=0! n"); /* while(t<0);return t;/* 增加職工工資記錄*/int Add(RSDA tp,int n)char
11、 ch,num10;int i,flag=0;system("cls");Disp(tp,n); /* 先打印出已有的職工工資信息*/while(1) /* 一次可輸入多條記錄,直至輸入職工編號為0 的記錄結(jié)束添加操作*/while(1) /* 輸入職工編號,保證該編號沒有被使用,若輸入編號為0,則退出添加記錄操作*/stringinput(num,10,"input number(press '0'return menu):"); /*格式化輸入編號并檢驗*/flag=0;if(strcmp(num,"0")=0)
12、/* 輸入為0,則退出添加操作,返回主界面*/return n;i=0;while(i<n) /* 查詢該編號是否已經(jīng)存在,若存在則要求重新輸入一個未被占用的編號 */if(strcmp(tpi.num,num)=0)flag=1;break;i ;if(flag=1) /* 提示用戶是否重新輸入*/ getchar();printf("=>The number %s is existing,try again?(y/n):",num);scanf("%c",&ch);if(ch='y'|ch='Y')
13、continue;elsereturn n;elsebreak;strcpy(tpn.num,num);/* 將字符串 num復制到 tpn.num 中*/ stringinput(,15,"Name:");tpn.jbgz=numberinput("jbgz:"); /*輸入并檢驗基本工資*/tpn.jj=numberinput("jiangjin:"); /*輸入并檢驗獎金*/tpn.kk=numberinput("koukuan:"); /*輸入并檢驗扣款*/tpn.yfgz=tpn.jbgz
14、 tpn.jj-tpn.kk; /*計算應發(fā)工資*/tpn.sk=tpn.yfgz*0.12; /*計算稅金,這里取應發(fā)工資的12%*/tpn.sfgz=tpn.yfgz-tpn.sk; /*計算實發(fā)工資*/saveflag=1;n ;return n;/* 按職工編號或姓名,查詢記錄*/void Qur(RSDA tp,int n)*/int select; /*1:按編號查,2:按姓名查,其他:返回主界面(菜單)char searchinput20; /* 保存用戶輸入的查詢內(nèi)容*/int p=0;if(n<=0) /* 若數(shù)組為空*/system("cls");
15、printf("n=>No employee record!n");getchar();return;system("cls");printf("n =>1 Search by number =>2 Search by namen");printf(" please choice1,2:");scanf("%d",&select);if(select=1) /* 按編號查詢*/stringinput(searchinput,10,"input the exis
16、ting employee number:");p=Locate(tp,n,searchinput,"num");/* 在數(shù)組 tp 中查找編號為searchinput值的元素,并返回該數(shù)組元素的下標值*/if(p!=-1) /* 若找到該記錄*/printheader();printdata(tpp);printf(END);printf("press any key to return");getchar();elseNofind();getchar();else if(select=2) /* 按姓名查詢*/stringinput(sea
17、rchinput,15,"input the existing employee name:");p=Locate(tp,n,searchinput,"name");if(p!=-1)printheader();printdata(tpp);printf(END);printf("press any key to return");getchar();elseNofind();getchar();elseWrong();getchar();/* 刪除記錄:先找到保存該記錄的數(shù)組元素的下標值,然后在數(shù)組中刪除該數(shù)組元素 */int De
18、l(RSDA tp,int n)int sel;char findmess20;int p=0,i=0;if(n<=0) system("cls");printf("n=>No employee record!n");getchar();return n;system("cls");Disp(tp,n);printf("n =>1 Delete by number =>2 Delete by namen");printf(" please choice1,2:");sca
19、nf("%d",&sel);if(sel=1)stringinput(findmess,10,"input the existing employee number:");p=Locate(tp,n,findmess,"num");getchar();if(p!=-1)for(i=p 1;i<n;i ) /*刪除此記錄,后面記錄向前移*/strcpy(tpi-1.num,tpi.num);strcpy(,);tpi-1.jbgz=tpi.jbgz;tpi-1.jj=tpi.jj;tpi
20、-1.kk=tpi.kk;tpi-1.yfgz=tpi.yfgz;tpi-1.jbgz=tpi.sk;tpi-1.sfgz=tpi.sfgz;printf("n=>delete success!n");n-;getchar();saveflag=1;elseNofind();getchar();else if(sel=2) /* 先按姓名查詢到該記錄所在的數(shù)組元素的下標值*/stringinput(findmess,15,"input the existing employee name:");p=Locate(tp,n,findmess,&quo
21、t;name");getchar();if(p!=-1)for(i=p 1;i<n;i ) /*刪除此記錄,后面記錄向前移*/strcpy(tpi-1.num,tpi.num);strcpy(,);tpi-1.jbgz=tpi.jbgz;tpi-1.jj=tpi.jj;tpi-1.kk=tpi.kk;tpi-1.yfgz=tpi.yfgz;tpi-1.jbgz=tpi.sk;tpi-1.sfgz=tpi.sfgz;printf("n=>delete success!n");n-;getchar();saveflag=
22、1;elseNofind();getchar();return n;/* 修改記錄:先按輸入的職工編號查詢到該記錄,然后提示用戶修改編號之外的值,編號不能修改*/void Modify(RSDA tp,int n)char findmess20;int p=0;if(n<=0) system("cls");printf("n=>No employee record!n");getchar();return ;system("cls");printf("modify employee recorder")
23、;Disp(tp,n);stringinput(findmess,10,"input the existing employee number:"); /*輸入并檢驗該編號*/p=Locate(tp,n,findmess,"num"); /* 查詢到該數(shù)組元素, 并返回下標值*/if(p!=-1) /* 若 p!= 1, 表明已經(jīng)找到該數(shù)組元素*/printf("Number:%s,n",tpp.num);printf("Name:%s,",);stringinput(,15,&qu
24、ot;input new name:");printf("jbgz:%8.2f,",tpp.jbgz);tpp.jbgz=numberinput("jbgz:");printf("jiangjin:%8.2f,",tpp.jj);tpp.jj=numberinput("jiangjin:");printf("koukuan:%8.2f,",tpp.kk);tpp.kk=numberinput("koukuan:");tpn.yfgz=tpn.jbgz tpn.jj-
25、tpn.kk;tpn.sk=tpn.yfgz*0.12;tpn.sfgz=tpn.yfgz-tpn.sk;printf("n=>modify success!n");getchar();Disp(tp,n);getchar();saveflag=1;elseNofind();getchar(); return ;/* 插入記錄: 按職工編號查詢到要插入的數(shù)組元素的位置,然后在該編號之后插入一個新數(shù)組元素。*/int Insert(RSDA tp,int n)char ch,num10,s10; /*s 保存插入點位置之前的編號,num 保存輸入的新記錄的編號*/RSD
26、A newinfo;int flag=0,i=0,kkk=0;system("cls");Disp(tp,n);while(1) stringinput(s,10,"please input insert location after the Number:");flag=0;i=0;while(i<n) /* 查詢該編號是否存在,flag=1 表示該編號存在*/if(strcmp(tpi.num,s)=0) kkk=i;flag=1;break;i ;if(flag=1)break; /* 若編號存在,則進行插入之前的新記錄輸入操作*/else
27、getchar();printf("n=>The number %s is not existing,tryagain?(y/n):",s);scanf("%c",&ch);if(ch='y'|ch='Y')continue;elsereturn n;/* 以下新記錄的輸入操作與Add() 相同 */while(1) stringinput(num,10,"input new employee Number:");i=0;flag=0;while(i<n) /* 查詢該編號是否存在,
28、flag=1 表示該編號存在*/if(strcmp(tpi.num,num)=0) flag=1;break;i ;if(flag=1)getchar();printf("n>Sorry,The number %s is existing,try again?(y/n):",num);scanf("%c",&ch); if(ch='y'|ch='Y') continue; elsereturn n;elsebreak;strcpy(newinfo.num,num);/* 將字符串 num復制至U newinf
29、o.num 中*/stringinput(,15,"Name:"); newinfo.jbgz=numberinput("jbgz:"); /* newinfo.jj=numberinput("jiangjin:"); newinfo.kk=numberinput("koukuan:");/*/*輸入并檢驗jbgz*/newinfo.yfgz=newinfo.jbgz newinfo.jj-newinfo.kk;輸入并檢驗jiangjin*/輸入并檢驗koukuan*/*計算 yfgz*/n
30、ewinfo.sk=newinfo.yfgz*0.12; /* 計算 sk*/newinfo.sfgz=newinfo.yfgz-newinfo.sk;saveflag=1; /* 在 main() 有對該全局變量的判斷,若為1, 則進行存盤操作*/for(i=n-1;i>kkk;i-) /*從最后一個組織元素開始往向移動一個元素的位置*/ strcpy(tpi 1.num,tpi.num);strcpy(tpi 1.name,);tpi 1.jbgz=tpi.jbgz;tpi 1.jj=tpi.jj;tpi 1.kk=tpi.kk;tpi 1.yfgz=tpi.yfgz
31、;tpi 1.sk=tpi.sk;tpi 1.sfgz=tpi.sfgz;在 kkk 的元素位置后插入新記錄*/strcpy(tpkkk 1.num,newinfo.num); /* strcpy(tpkkk 1.name,); tpkkk 1.jbgz=newinfo.jbgz;tpkkk 1.jj=newinfo.jj;tpkkk 1.kk=newinfo.kk;tpkkk 1.yfgz=newinfo.yfgz;tpkkk 1.sk=newinfo.sk;tpkkk 1.sfgz=newinfo.sfgz;n ;Disp(tp,n);printf("nn
32、");getchar();return n;/* 統(tǒng)計公司的員工的工資在各等級的人數(shù)*/void Tongji(RSDA tp,int n)int count10000=0,count5000=0,count2000=0,count0=0;int i=0;if(n<=0) system("cls");printf("n=>Not employee record!n");getchar();return ;system("cls");Disp(tp,n);i=0;while(i<n)if(tpi.sfgz&g
33、t;=10000) count10000 ;i=i 1;continue; /*實發(fā)工資 >10000*/if(tpi.sfgz>=5000) count5000 ;i=i 1;continue; /*50000 實發(fā)工資 <10000*/if(tpi.sfgz>=2000) count2000 產(chǎn)icontinue; /*20000 實發(fā)工資 <5000*/if(tpi.sfgz<2000) count0 ;i=i 1;continue; /*實發(fā)工資<2000*/printf("nthe TongJi resultn");pri
34、ntf("sfgz>= 10000:%d (ren)n",count10000);printf("5000<=sfgz<10000:%d (ren)n",count5000);printf("2000<=sfgz< 5000:%d (ren)n",count2000);printf("sfgz< 2000:%d (ren)n",count0);printf("n");printf("nnpress any key to return");g
35、etchar();/* 利用冒泡排序法實現(xiàn)數(shù)組的按實發(fā)工資字段的降序排序,從高到低*/void Sort(RSDA tp,int n)int i=0,j=0,flag=0;RSDA newinfo;if(n<=0) system("cls");printf("n=>Not employee record!n");getchar();return ;system("cls");Disp(tp,n); /* 顯示排序前的所有記錄*/for(i=0;i<n;i )flag=0;for(j=0;j<n-1;j )if(
36、tpj.sfgz<tpj 1.sfgz) flag=1;利用結(jié)構(gòu)變量newinfo 實現(xiàn)數(shù)組元素strcpy(newinfo.num,tpj.num); /*/strcpy(,);newinfo.jbgz=tpj.jbgz;newinfo.jj=tpj.jj;newinfo.kk=tpj.kk;newinfo.yfgz=tpj.yfgz;newinfo.sk=tpj.sk;newinfo.sfgz=tpj.sfgz;strcpy(tpj.num,tpj 1.num);strcpy(,tpj 1.name);tpj.jbgz=tpj
37、1.jbgz;tpj.jj=tpj 1.jj;tpj.kk=tpj 1.kk;tpj.yfgz=tpj 1.yfgz;tpj.sk=tpj 1.sk;tpj.sfgz=tpj 1.sfgz;strcpy(tpj 1.num,newinfo.num);strcpy(tpj 1.name,);tpj 1.jbgz=newinfo.jbgz;tpj 1.jj=newinfo.jj;tpj 1.kk=newinfo.kk;tpj 1.yfgz=newinfo.yfgz;tpj 1.sk=newinfo.sk;tpj 1.sfgz=newinfo.sfgz;if(flag=0)
38、break;/* 若標記 flag=0 ,意味著沒有交換了,排序已經(jīng)完成*/Disp(tp,n); /* 顯示排序后的所有記錄*/saveflag=1;printf("n =>sort complete!n");/* 數(shù)據(jù)存盤 , 若用戶沒有專門進行此操作且對數(shù)據(jù)有修改,在退出系統(tǒng)時,會提示用戶存盤 */void Save(RSDA tp,int n)FILE* fp;int i=0;fp=fopen("c:rsda","wb");/*以只寫方式打開二進制文件*/if(fp=NULL) /* 打開文件失敗*/printf(&qu
39、ot;n=>open file error!n");getchar();return ;for(i=0;i<n;i )if(fwrite(&tpi,sizeof(RSDA),1,fp)=1)/*每次寫一條記錄或一個結(jié)構(gòu)數(shù)組元素至文件*/continue;elsebreak;if(i>0)getchar();printf("nn=>save file complete,total saved's record number is:%dn",i);getchar();saveflag=0;elsesystem("cls");printf("the current link is empty,no employee record is saved!n");getchar();fclose(fp); /* 關(guān)閉此文件*/void main()RSDA gzN; /*FILE *fp;/*int select;/*char ch;/*int count=0; /*定義
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 共享室友協(xié)議
- 2025至2030年中國鋼絲棉墊數(shù)據(jù)監(jiān)測研究報告
- 2025年個體工商戶小額信貸合同范文
- 2025至2030年中國薄膜植絨轉(zhuǎn)印紙數(shù)據(jù)監(jiān)測研究報告
- 2025年北京北大方正軟件職業(yè)技術(shù)學院單招職業(yè)適應性測試題庫及參考答案一套
- 2025年阿拉善職業(yè)技術(shù)學院單招綜合素質(zhì)考試題庫及答案一套
- 2025年北京北大方正軟件職業(yè)技術(shù)學院單招職業(yè)傾向性測試題庫及參考答案
- 2025年安徽省滁州市單招職業(yè)適應性測試題庫a4版
- 2025年安徽冶金科技職業(yè)學院單招職業(yè)適應性考試題庫完整版
- 2025年員工股權(quán)激勵協(xié)議書范例
- H3C-CAS虛擬化平臺詳細介紹
- 藥房品種類別及數(shù)量清單
- 玻璃工藝學第4章 玻璃的性質(zhì)
- 四川省藥械集中采購及醫(yī)藥價格監(jiān)測平臺操作指引
- 機關(guān)檔案管理工作培訓PPT課件
- 大學生安全教育課件(ppt共41張)
- 初中物理人教版八年級下冊 第1節(jié)牛頓第一定律 課件
- 網(wǎng)站培訓內(nèi)容trswcm65表單選件用戶手冊
- 監(jiān)理大綱(范本)
- 空調(diào)系統(tǒng)維保記錄表格模板
- 打印版-圓與二次函數(shù)綜合題精練(帶答案)
評論
0/150
提交評論