




已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
目錄一、系統(tǒng)開發(fā)的背景1二、系統(tǒng)分析與設計1(一)系統(tǒng)功能要求1(二)系統(tǒng)模塊結構設計2三、系統(tǒng)的設計與實現(xiàn)3 (一) 輸入職工基本信息3(二)顯示職工信息4(三)添加新的職工信息4 (四) 修改職工信息5(五)刪除職工信息9(六)查詢職工信息11四、系統(tǒng)測試13(一)測試main()函數13(二)測試輸入輸出函數13(三)測試添加、刪除、修改函數14(四)測試查詢函數15五、總結17六、附件(代碼、部分圖表)17職工工資管理系統(tǒng)一、系統(tǒng)開發(fā)的背景工資管理是一個單位不可缺少的部分,因為工資是一個單位與職員之間最重要的關系紐帶,它是職員辛勤勞動的主要成果,不同的職員工資不同,所產生的價值也不同。一直以來人們都是使用傳統(tǒng)的方式管理,但是這種方法效率低,管理不方便,隨著計算機科學的不斷發(fā)展,更加不能滿足人們的需求,為了能合理的管理工資問題,使用計算機對單位工資信息進行管理成為人們的迫切需要。對企業(yè)源是企而言,全面開發(fā)和應用計算機管理信息系統(tǒng)就是近期不能回避的問題。在企業(yè)管理中,人力資業(yè)最寶貴的資源,也是企業(yè)的“生命線”,因此人事管理是企業(yè)的計算機管理信息系統(tǒng)重要組成部分。而工資管理又是人力資源管理的重中之重。二、系統(tǒng)分析與設計(一)系統(tǒng)功能要求 輸入記錄:將每一個職工的姓名、ID 號以及基本工資、職務工資、崗位津貼、醫(yī)療保險、公積金的數據作為一個記錄。該軟件能建立一個新的數據文件或給已建立好的數據文件增加記錄。 顯示記錄:根據用戶提供的記錄或者根據職工姓名顯示一個或幾個職工的各項工資和平均工資。 修改記錄:可以對數據文件的任意記錄的數據進行修改并在修改前后對記錄內容進行顯示。 查找記錄:對數據文件的任意記錄進行查找。 刪除記錄:可刪除數據文件中的任一記錄。 統(tǒng)計:計算各項工資平均工資及總工資、統(tǒng)計符合指定條件(二)系統(tǒng)模塊結構設計首先是定義了一個輸入輸出頭文件,接著是一個宏定義,下面是函數聲明部分,用結構體存儲和錄入該程序的所有數據,主函數部分包括設計的全部信息,之后是輸出主菜單和調用函數,退出程序。此程序中包括:輸入模塊、查詢模塊、修改模塊、刪除模塊、輸出模塊、追加模塊。 職 工 工 資 管 理 追加模塊輸出模塊刪除模塊查詢模塊修改模塊輸入模塊 圖1 職工工資管理系統(tǒng)功能圖通過上圖的功能分析,把整個系統(tǒng)分為六個模塊輸入模塊:該模塊先是對職工的姓名、ID 號以及基本工資、職務工資、崗位津貼、醫(yī)療保險、公積金的數據的錄入并保存。查詢模塊:實現(xiàn)按姓名、ID 號查詢每個職工的信息,查詢顯示 基本工資、職務工資、崗位津貼、醫(yī)療保險、公積金。修改模塊:該模塊實現(xiàn)按職工號對職工所有信息的修改。刪除模塊:該模塊實現(xiàn)按職工號對職工所有信息的刪除。輸出模塊: 該模塊實現(xiàn)按職工號輸出職工的所有信息。追加模塊:該模塊實現(xiàn)添加新的職工的信息。三、系統(tǒng)的設計與實現(xiàn)(一)輸入職工基本信息分析:通過結構體的數組來進行操作,先頭定義數組str,先輸入需要輸入的職工人數m,然后進入循環(huán),每次循環(huán)將各項輸入結構體數組對應項的對應成員中,當循環(huán)次數等于人數時,完成全部員工的資料輸入,退出循環(huán)。該模塊的具體代碼如下所示。void save() printf(n輸入數據:n);system(cls);printf(職工人數(1-10):n);scanf(%d,&m);for(i=0;im;i+)/注:輸入輸出最好選用空格相隔scanf(%d %s %d %d %d %d %d,&stri.id,stri.xm,&stri.jbgz,&stri.zwgz,&stri.jt,&stri.yb,&stri.gjj);if(fp=fopen(stu.data,wb)=NULL)printf(cannot open filen);exit(0);for(i=0;im;i+)fprintf(fp,%d %s %d %d %d %d %dn,stri.id,stri.xm,stri.jbgz,stri.zwgz,stri.jt,stri.yb,stri.gjj); fclose(fp);(二)顯示職工信息先通過讀取函數的返回值確定職工人數m,再通過循環(huán)將員工工資資料逐個打印,當循環(huán)次數達到m時退出循環(huán)。其中總工資由程序計算,總工資=基本工資+職務工資+津貼-醫(yī)療保險-公積金該模塊的具體代碼如下所示。void display() /*瀏覽函數*/int i,sum=0;system(cls);printf(職工號 姓名 基本工資 職務工資 津貼 醫(yī)療保險 公積金 總工資 n);for(i=0;im;i+) /*m為輸入部分的職工人數*/printf(n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ,stri.id,stri.xm,stri.jbgz,stri.zwgz,stri.jt,stri.yb,stri.gjj,stri.total);sum+=stri.total;/計算員工總工資之和 printf(nn職工平均工資為:%d n,sum/m);(三)添加新的職工信息打印原有職工資料,詢問要添加的職工人數并詢問是否確定添加。逐個逐項輸入員工信息,之后程序計算其總工資。完成后顯示“添加成功”,打印新的員工資料并自動保存。添加的方法為:定義一個相同類型的結構體數組,將原有項復制后增添新的項,并保存新的數組。該模塊的具體代碼如下所示。void crzgxx() int n;int count=0; int j;printf(n 原來的職工信息:n);sczgxx();display(); printf(n);printf(請輸入想增加的職工數:n);/確定要加入的職工數nscanf(%d,&n);for (j=m;j(m+n);j+)/添加n名員工的信息printf(n 請輸入新增加職工的信息:n);printf(職工號 姓名 基本工資 職務工資 津貼 醫(yī)療保險 公積金n);scanf(%d %s %d %d %d %d %d,&strj.id,strj.xm,&strj.jbgz,&strj.zwgz,&strj.jt,&strj.yb,&strj.gjj);strj.total=( strj.jbgz+ strj.zwgz + strj.jt- strj.yb-strj.gjj);/計算該員工總工資printf(n);count=count+1;printf(已增加的人數:n);printf(%dn,count); printf(n添加成功n); m=m+count;/將新添加員工的人數加到總員工人數中printf(n增加后的所有職工信息:n);printf(n);display();/顯示添加后的信息fclose(fp);(四) 修改職工信息打印員工信息并提示輸入要修改資料的職工姓名。按提示確定要修改,確定要修改的項目,輸入要修改成的結果并將該結果賦給對應項的對應成員,完成對特定職工特定項目的修改。該模塊的具體代碼如下所示。void xgzgxx() int id;char xm20;int jbgz; int zwgz;int jt;int yb;int gjj;int b,c,i,n,t,button; system(cls);printf(n 原來的職工信息:n);display(); printf(n);printf(請輸入要修改的職工的姓名:n);scanf(%s,xm);for(button=1,i=0;button&i8|c1) printf(n選擇錯誤,請重新選擇!n); button=0; if(button=1)printf(n查無此人n); do switch(c) /*因為當找到第i個職工時,for語句后i自加了1,所以下面的應該把改后的信息賦值給第i-1個人*/ case 1:printf(職工號改為: );scanf(%d,&id);stri-1.id=id;break; case 2:printf(姓名改為: );scanf(%s,xm);strcpy(stri-1.xm,xm); break; case 3:printf(基本工資改為: );getchar();scanf(%d,&jbgz);stri-1.jbgz=jbgz;stri-1.total=( stri-1.jbgz+ stri-1.zwgz + stri-1.jt- stri-1.yb- stri-1.gjj); break; case 4:printf(職務工資改為: ); scanf(%d,&zwgz);stri-1.zwgz=zwgz;stri-1.total=( stri-1.jbgz+ stri-1.zwgz + stri-1.jt- stri-1.yb- stri-1.gjj); break; case 5:printf(津貼改為: ); scanf(%d,&jt); stri-1.jt=jt; stri-1.total=( stri-1.jbgz+ stri-1.zwgz + stri-1.jt- stri-1.yb- stri-1.gjj);break; case 6:printf(醫(yī)療保險改為: );scanf(%d,&yb);stri-1.yb=yb;stri-1.total=( stri-1.jbgz+ stri-1.zwgz + stri-1.jt- stri-1.yb- stri-1.gjj);break; case 7:printf(公積金改為: );scanf(%d,&gjj);stri-1.gjj=gjj;stri-1.total=( stri-1.jbgz+ stri-1.zwgz + stri-1.jt- stri-1.yb- stri-1.gjj); break; case 8:xgzgxx(); break; printf(n);printf(nn 確定修改 請按1 ; 重新修改 請按2: n); scanf(%d,&b); while(b=2);printf(n修改后的所有職工信息:n);printf(n);display();printf(n按1 繼續(xù)修改 ,不再修改請按0n);scanf(%d,&t);switch(t) case 1:xgzgxx();break;case 0:break;default :break; (五)刪除職工信息打印員工資料并提示輸入要刪除職工的姓名,輸入后若該職工不存在則打印“查無此人”;若存在,則顯示該職工資料并詢問是否確定刪除。若確定,則刪除。刪除時,通過對比輸入的姓名與資料中的姓名做對比從而確定要刪除的項i,從第i項開始,將后一項的各成員的值賦給前一項各對應的成員,完成對第i項的刪除。該模塊的具體代碼如下所示。void delet()/*刪除函數 */ int i,j,n,t,button; char xm20; printf(n 原來的職工信息:n); display(); /顯示刪除前的員工信息 printf(n);printf(按姓名刪除:n); scanf(%s,xm); for(button=1,i=0;button&im;i+)/主函數中確定button=1時各函數才可以被調用 if(strcmp(stri.xm,xm)=0)/按員工姓名查找到某員工 并調出其資料 printf(n此人原始記錄為:n);/顯示選定員工的信息 printf(職工號 姓名 基本工資 職務工資 津貼 醫(yī)療保險 公積金 總工資 n);printf(n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ,stri.id,stri.xm,stri.jbgz,stri.zwgz,stri.jt,stri.yb,stri.gjj,stri.total); printf(n確定刪除 請按1,不刪除請按0n); scanf(%d,&n);if(n=1)for(j=i;jm-1;j+)/從第i項開始 將后一項的各成員的值賦給前一項各對應的成員 完成對第i項的刪除strcpy(strj.xm,strj+1.xm);strj.id=strj+1.id;strj.jbgz=strj+1.jbgz;strj.zwgz=strj+1.zwgz;strj.jt=strj+1.jt;strj.yb=strj+1.yb; strj.gjj=strj+1.gjj;strj.total=strj+1.total; button=0; if(!button)/button=0表明刪除已完成m=m-1;/總員工數減少一人elseprintf(n查無此人!n);printf(n 刪除后的所有職工信息:n);display(); /調用瀏覽函數printf(n繼續(xù)刪除請按1,不再刪除請按0n);scanf(%d,&t);switch(t)case 1:delet();break;case 0:break;default :break; (六)查詢職工信息根據提示輸入要查詢的ID號,程序通過循環(huán)語句將輸入的數字與以保存的結構體數組中的數據對比,若相同,則打印“已找到”及該員工的資料;當循環(huán)次數等于人數時結束循環(huán),若至結束循環(huán)時也沒有找到相同的,則打印“查無此人”。該模塊的具體代碼如下所示。void cxzgxx()/查詢函數 int a; int i,t; printf(請輸入要查找的職工號:n); scanf(%d,&a); for(i=0;im;i+) if(a=stri.id) printf(職工號 姓名 基本工資 職務工資 津貼 醫(yī)療保險 公積金 總工資 n); printf(n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ,stri.id,stri.xm,stri.jbgz,stri.zwgz,stri.jt,stri.yb,stri.gjj,stri.total); break; if(i=m) printf(n對不起,查無此人n); printf(n); printf(繼續(xù)查詢請按1,返回菜單請按2n); scanf(%d,&t); switch(t) case 1:cxzgxx();break; case 2: break; default:break; 四、系統(tǒng)測試(一)測試main()函數進入vc6.0環(huán)境,運行此程序得到如下圖 (圖2)主函數的輸出 (二)測試輸入輸出函數 (圖3)測試輸出函數(三)測試添加、刪除、修改函數 (圖4)測試添加函數 (圖5)測試刪除函數(圖6)測試刪除函數 (圖7)測試刪除函數的結果(四)測試查詢函數(圖8)測試查找函數 (圖9)測試查找的結果五、總結該系統(tǒng)基本完成了實現(xiàn)工資信息管理。系統(tǒng)包括錄入,瀏覽,查詢,修改統(tǒng)計等功能。經過一學期的C語言學習,通過這倆周的努力,我上網查閱有關資料,以及有關c語言程序設計書籍,我們掌握了C語言的基礎知識,我對課程設計有了一定的了解,并且通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,對C語言的深層知識還沒有掌握,所以我發(fā)現(xiàn)只有把所學的理論知識與實踐結合起來,從理論中得出結論,才能真正為今后的學習、工作服務,從而提高自己的實際動手能力和獨立思考的能力。通過這次課程程序設計,使我加深了對C語言的認識,進一步熟悉了對C語言功能的靈活運用,而且加深了我對程序的理解和編寫能力,通過文獻資料和網絡資料的幫助,使我對C語言程序設計這一基礎學科又一次加深了認識,也意識到了其具有的強大功能和發(fā)展前景。六、附件(代碼、部分圖表)#include#include#include #define N 10struct gjgl /工資管理系統(tǒng)int id; /ID號 char xm20; /姓名int jbgz; /基本工資 int zwgz; /職務工資 int jt; / 津貼 int yb; /醫(yī)療保險 int gjj; /公積金/int total; /總工資strN;FILE *fp;int i,m;void save() printf(n輸入數據:n); system(cls); printf(職工人數(1-10):n); scanf(%d,&m); for(i=0;im;i+)/注:輸入輸出最好選用空格相隔 scanf(%d %s %d %d %d %d %d,&stri.id,stri.xm,&stri.jbgz,&stri.zwgz,&stri.jt,&stri.yb,&stri.gjj); if(fp=fopen(stu.data,wb)=NULL)printf(cannot open filen);exit(0); for(i=0;im;i+) fprintf(fp,%d %s %d %d %d %d %dn,stri.id,stri.xm,stri.jbgz,stri.zwgz,stri.jt,stri.yb,stri.gjj); fclose(fp);void sczgxx()/輸出函數 int sum=0;if(fp=fopen(stu.data,rb)=NULL)printf(cannort open filenN);exit(0);for(i=0;im;i+)fscanf(fp,%d %s %d %d %d %d %d,&stri.id,stri.xm,&stri.jbgz,&stri.zwgz,&stri.jt,&stri.yb,&stri.gjj);fclose(fp);printf(輸出讀出的數據:n);for(i=0;im;i+)printf(%d %s %d %d %d %d %d,stri.id,stri.xm,stri.jbgz,stri.zwgz,stri.jt,stri.yb,stri.gjj);printf( %dn,stri.total=stri.jbgz+stri.zwgz+stri.jt-stri.yb-stri.gjj);sum+=stri.total;/計算員工總工資之和printf(nn職工平均工資為:%d n,sum/m);getchar();void display() /*瀏覽函數*/ int i,sum=0; system(cls); printf(職工號 姓名 基本工資 職務工資 津貼 醫(yī)療保險 公積金 總工資 n); for(i=0;im;i+) /*m為輸入部分的職工人數*/ printf(n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ,stri.id,stri.xm,stri.jbgz,stri.zwgz,stri.jt,stri.yb,stri.gjj,stri.total); sum+=stri.total;/計算員工總工資之和 printf(nn職工平均工資為:%d n,sum/m);void crzgxx() int n; int count=0; int j; printf(n 原來的職工信息:n); sczgxx(); display(); printf(n); printf(請輸入想增加的職工數:n);/確定要加入的職工數n scanf(%d,&n); for (j=m;j(m+n);j+)/添加n名員工的信息 printf(n 請輸入新增加職工的信息:n);printf(職工號 姓名 基本工資 職務工資 津貼 醫(yī)療保險 公積金n);scanf(%d %s %d %d %d %d %d,&strj.id,strj.xm,&strj.jbgz,&strj.zwgz,&strj.jt,&strj.yb,&strj.gjj); strj.total=( strj.jbgz+ strj.zwgz + strj.jt- strj.yb-strj.gjj);/計算該員工總工資 printf(n); count=count+1;printf(已增加的人數:n);printf(%dn,count); printf(n添加成功n); m=m+count;/將新添加員工的人數加到總員工人數中 printf(n增加后的所有職工信息:n); printf(n); display();/顯示添加后的信息 fclose(fp);void xgzgxx() int id; char xm20; int jbgz; int zwgz; int jt; int yb; int gjj; int b,c,i,n,t,button; system(cls); printf(n 原來的職工信息:n); display(); printf(n);printf(請輸入要修改的職工的姓名:n); scanf(%s,xm); for(button=1,i=0;button&i8|c1) printf(n選擇錯誤,請重新選擇!n); button=0; if(button=1) printf(n查無此人n); do switch(c) /*因為當找到第i個職工時,for語句后i自加了1,所以下面的應該把改后的信息賦值給第i-1個人*/ case 1:printf(職工號改為: ); scanf(%d,&id); stri-1.id=id; break; case 2:printf(姓名改為: ); scanf(%s,xm); strcpy(stri-1.xm,xm); break; case 3:printf(基本工資改為: ); getchar(); scanf(%d,&jbgz); stri-1.jbgz=jbgz; stri-1.total=( stri-1.jbgz+ stri-1.zwgz + stri-1.jt- stri-1.yb- stri-1.gjj); break; case 4:printf(職務工資改為: ); scanf(%d,&zwgz); stri-1.zwgz=zwgz; stri-1.total=( stri-1.jbgz+ stri-1.zwgz + stri-1.jt- stri-1.yb- stri-1.gjj); break; case 5:printf(津貼改為: ); scanf(%d,&jt); stri-1.jt=jt; stri-1.total=( stri-1.jbgz+ stri-1.zwgz + stri-1.jt- stri-1.yb- stri-1.gjj); break; case 6:printf(醫(yī)療保險改為: ); scanf(%d,&yb); stri-1.yb=yb; stri-1.total=( stri-1.jbgz+ stri-1.zwgz + stri-1.jt- stri-1.yb- stri-1.gjj); break; case 7:printf(公積金改為: ); scanf(%d,&gjj); stri-1.gjj=gjj; stri-1.total=( stri-1.jbgz+ stri-1.zwgz + stri-1.jt- stri-1.yb- stri-1.gjj); break; case 8:xgzgxx(); break; printf(n); printf(nn 確定修改 請按1 ; 重新修改 請按2; 返回請按0: n); scanf(%d,&b); while(b=2); printf(n修改后的所有職工信息:n); printf(n); display(); printf(n按1 繼續(xù)修改 ,不再修改請按0n); scanf(%d,&t);switch(t) case 1:xgzgxx();break; case 0:break; default :break; void delet()/*刪除函數 */ int i,j,n,t,button; char xm20;printf(n 原來的職工信息:n); display(); /顯示刪除前的員工信息 printf(n);printf(按姓名刪除:n); scanf(%s,xm); for(button=1,i=0;button&im;i+)/主函數中確定button=1時各函數才可以被調用 if(strcmp(stri.xm,xm)=0)/按員工姓名查找到某員工 并調出其資料 printf(n此人原始記錄為:n);/顯示選定員工的信息 printf(職工號 姓名 基本工資 職務工資 津貼 醫(yī)療保險 公積金 總工資 n); printf(n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ,stri.id,stri.xm,stri.jbgz,stri.zwgz,stri.jt,stri.yb,stri.gjj,stri.total); printf(n確定刪除 請按1,不刪除請按0n); scanf(%d,&n); if(n=1) for(j=i;jm-1;j+)/從第i項開始 將后一項的各成員的值賦給前一項各對應的成員 完成對第i項的刪除 strcpy(strj.xm,strj+1.xm); strj.id=strj+1.id; strj.jbgz=strj+1.jbgz; strj.zwgz=strj+1.zwgz; strj.jt=strj+1.jt; strj.yb=strj+1.yb; strj.gjj=st
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 園區(qū)管理辦法教案小班
- 機場應急預案管理辦法
- 智能投顧技術演進-洞察及研究
- 建筑文明施工方案
- 發(fā)票管理辦法發(fā)票使用
- 變電站電氣安裝施工指導書
- 土壤腐殖質電化學特性表征技術及其環(huán)境效應研究
- 公益科技項目管理辦法
- 公園設施維修管理辦法
- 基于《營造學社匯刊》圖紙的3D建模技術分析
- 科創(chuàng)板開戶測試題及答案
- 內科護理學消化性潰瘍
- 北京市第一零一中學2023-2024學年高一下學期期末考試地理試題(解析版)
- 中小學暑期安全教育班會課件
- DB43-T 2988-2024 再生稻高產栽培技術規(guī)程
- 2024年荊州市荊發(fā)控股集團招聘考試真題
- 慢病智能監(jiān)測-洞察及研究
- 部門預算支出經濟分類科目
- 2025年內蒙古呼倫貝爾農墾集團有限公司招聘筆試沖刺題(帶答案解析)
- 《健康管理師》職業(yè)技能競賽考試題(附答案)
- 在非到發(fā)線上接發(fā)列車站內無空閑線路時的接發(fā)列車39課件
評論
0/150
提交評論