程序設計基礎課程設計報告c語言實現附源碼員工工資管理系統(tǒng)
《程序設計基礎課程設計報告c語言實現附源碼員工工資管理系統(tǒng)》由會員分享,可在線閱讀,更多相關《程序設計基礎課程設計報告c語言實現附源碼員工工資管理系統(tǒng)(34頁珍藏版)》請在裝配圖網上搜索。
1、 《程序設計基礎》 課程設計報告 題 目: 員工工資管理系統(tǒng) 院 (系): 信息科學與工程學院 專業(yè)班級: 學生姓名: 學 號: 指導教師: 20 16 年 12 月 12 日至20 16 年 12 月 23 日
2、 武昌首義學院制 程序設計基礎 課程設計任務書 一、設計(調查報告/論文)題目 員工工資管理系統(tǒng) 二、設計(調查報告/論文)主要內容 1.員工工資管理系統(tǒng) 主要內容: 設計一個利用文件處理方式實現對員工工資(包括員工編號、員工姓名、應發(fā)、扣款和實發(fā))進行管理,具有增加數據、更新數據、查詢數據、刪除數據、列表顯示數據以及重組文件的功能。員工工資管理系統(tǒng)由六大功能模塊組成: ①增加數據 該模塊完成將輸入的數據存入數據文件中,用戶一次可輸入多個員工的信息。 ②更新數據 該模塊用于實現對記錄的修改,首先用戶輸入員工的編號,然后查詢該員工的信息,最后更新該員工的信
3、息。 ③查詢數據 該模塊可選擇按員工編號查詢,或者按員工姓名進行查詢,然后列出滿足條件的且未作刪除標記的員工信息。 ④刪除數據 該模塊用于刪除指定編號的員工工資信息,為提高效率,只作刪除標記,不在物理上刪除信息,可稱為邏輯刪除。 ⑤顯示數據 該模塊用于以列表方式顯示所有未作刪除標記的員工信息。 ⑥重組文件 當邏輯刪除的信息太多時,將會降低查詢效率。重組文件模塊專門用于在物理上刪除作有刪除標記的信息,這樣不但提高查詢效率,同時也節(jié)約存儲空間。 ⑦統(tǒng)計輸出 輸出實發(fā)工資最高的員工工資信息。 統(tǒng)計輸出員工實發(fā)工資的平均工資。 統(tǒng)計輸出超過實發(fā)平均工資的員工人數。 ⑧ 排序
4、 該模塊按員工實發(fā)工資由高到低的順序排序輸出所有員工信息。 ⑨要求本系統(tǒng)采用結構體等數據結構。系統(tǒng)以菜單方式工作。 2.學生學籍管理系統(tǒng) 主要內容: 設計一個利用文件處理方式,實現對學生學籍信息(包括:學號,姓名,性別,年齡,籍貫,系別,專業(yè),班級)進行添加、修改、刪除、查找、統(tǒng)計輸出等操作。學生學籍管理系統(tǒng)的功能要求如下: ①增加數據 該模塊完成將輸入的數據存入數據文件中,用戶一次可輸入多個學生的學籍信息。 ②更新數據 該模塊用于實現對記錄的修改,首先用戶輸入學生的學號,然后查詢該學生的學籍信息,最后更新該學生的學籍的信息。 ③查詢數據 該模塊可選擇按學生的學號查詢,
5、或者按學生的姓名查詢,再或者按學生的班級查詢,然后列出滿足條件的且未作刪除標記的學生學籍信息。 ④刪除數據 該模塊用于刪除指定編號的學生學籍信息,為提高效率,只作刪除標記,不在物理上刪除信息,可稱為邏輯刪除。 ⑤顯示數據 該模塊用于以列表方式顯示所有未作刪除標記的學生學籍信息。 ⑥重組文件 當邏輯刪除的信息太多時,將會降低查詢效率。重組文件模塊專門用于在物理上刪除作有刪除標記的信息,這樣不但提高查詢效率,同時也節(jié)約存儲空間。 ⑦統(tǒng)計輸出 1)按專業(yè)輸出所有學生的學籍信息。 2)統(tǒng)計輸出學生的平均年齡。 3)統(tǒng)計輸出超過平均年齡的學生人數。 ⑧ 排序 該模塊按學生學號由低
6、到高的順序排序輸出所有學生學籍信息。 ⑨要求本系統(tǒng)采用結構體等數據結構。系統(tǒng)以菜單方式工作。 3.班級成績管理系統(tǒng) 主要內容: 對一個有N個學生的班級,每個學生有M門課程。每個學生應當包括如下信息:學號、姓名、M門課程名稱。該系統(tǒng)實現對班級成績的添加、修改、刪除、查找、統(tǒng)計輸出等操作的管理。功能要求如下: ①增加數據 該模塊完成將輸入的數據存入數據文件中,用戶一次可輸入多個學生的基本信息。 ②更新數據 該模塊用于實現對記錄的修改,首先用戶輸入學生的學號,然后查詢該學生的基本信息,最后更新該學生的基本信息。 ③查詢數據 該模塊可選擇按學生的學號查詢,或者按學生的姓名查詢,
7、然后列出滿足條件的且未作刪除標記的學生基本信息。 ④刪除數據 該模塊用于刪除指定編號的學生基本信息,為提高效率,只作刪除標記,不在物理上刪除信息,可稱為邏輯刪除。 ⑤顯示數據 該模塊用于以列表方式顯示所有未作刪除標記的學生基本信息。 ⑥重組文件 當邏輯刪除的信息太多時,將會降低查詢效率。重組文件模塊專門用于在物理上刪除作有刪除標記的信息,這樣不但提高查詢效率,同時也節(jié)約存儲空間。 ⑦統(tǒng)計輸出 1)顯示每門課程成績最高的學生的基本信息。 2)顯示每門課程的平均成績。 3)顯示超過某門課程平均成績的學生人數。 ⑧ 排序 該模塊按學生學號由低到高的順序排序輸出所有學生的基本信
8、息。 ⑨要求本系統(tǒng)采用結構體等數據結構。系統(tǒng)以菜單方式工作。 課程設計要求: 課程設計從第一、二和三道題中選一道題完成。其中,學號尾數為0、2、4、8的做第一道題;學號尾數為1、3、7的做第二道題;學號尾數為5、6、9的做第三道題。 系統(tǒng)要求在Microsoft Visual C++ 6.0編譯平臺上采用C語言編程實現。 課程設計報告(要求正規(guī)打印,A4幅面),內容包括: l 題目 l 需求與總體設計(描述系統(tǒng)要實現什么功能;系統(tǒng)怎么實現,繪制系統(tǒng)功能模塊結構圖;數據結構的設計及用法說明) l 詳細設計(描述系統(tǒng)包含的主函數和子函數;解釋各個功能模塊的軟件功能;畫
9、系統(tǒng)的總體流程圖,某種查詢、插入、刪除程序實現的子函數流程圖,要求采用標準流程圖圖符至少畫兩個流程圖) l 編碼與實現(只能使用C語言,源程序編寫格式要按照縮進方式,源程序要有詳細的注釋,使程序容易閱讀。源程序編寫格式的規(guī)范和注釋體現程序員的素質,必須從本課程設計開始培養(yǎng)。) l 運行結果(包括輸入數據的結果,查詢、修改、刪除的結果,可以將輸出的結果以截屏方式呈現到課程設計報告中) l 總結(必須真實的說出自己在課程設計中的切身體會。例如:課程設計如何構思、如何設計、如何編程、如何調試、遇到的主要問題和解決方法,哪些地方使你“痛苦不堪”;創(chuàng)新之處;課程設計中存在的不足,需進一步改進的設想
10、等等。) 注:每人以班級+學號+姓名創(chuàng)建目錄,目錄需包括課程設計報告電子文檔和源程序以備檢查。然后由各班學習委員匯總到U盤上統(tǒng)一提交。 三、原始資料 1.游洪躍,彭駿,譚斌.C語言程序設計實驗與課程設計教程.北京:清華大學出版社,2011. 2.孫承愛,趙衛(wèi)東.程序設計基礎—基于C語言(第2版).科學出版社,2010. 四、要求的設計(調查/論文)成果 1.課程設計報告 2.課程設計軟件 五、進程安排 布置任務,查找資料、需求分析1天 總體設計1天 詳細設計1天 編制源程序實現3天 測試與修改1天 撰寫課程設計報告2天 六、主要參考資料
11、 [1] 譚浩強.C程序設計.第四版.清華大學出版社,2010. [2] 蘇小紅.C語言大學實用教程.第2版.電子工業(yè)出版社,2008. 指導教師(簽名): 年 月 日 目 錄 1需求與總體設計………………………………………………………………………1 2詳細設計………………………………………………………………………1 3編碼實現………………………………………………………………………4 4運行結果………………………………………………………………………21 總結…………………………………………………………………………………24
12、 1需求與總體設計 1.1需求描述 設計一個利用文件處理方式實現對員工工資(包括員工編號、員工姓名、年月、崗位工資、獎金、扣款和實發(fā))進行管理,具有增加數據、更新數據、查詢數據、刪除數據、列表顯示數據以及重組文件的功能。 1.2總體設計 先以登陸函數登陸,再進入主菜單,菜單中顯示各個要實現的操作,以菜單將各個函數聯系起來,對菜單操作以實現系統(tǒng)的目的。 1.3數據結構 struct user //登陸者信息 { char un[10]; char up[10]; }us[3
13、] = { "aaa","111","bbb","222","ccc","333" }; struct yg //員工結構體 { short zt; //數據狀態(tài) long bh; //編號 char name[20]; //名字 char time[11]; //時間 long money; //基本工資 long jj; //獎金 long kk; //扣款 long sf; //實發(fā)工資 }; 整個程序只
14、運用了結構體的數據結構,結構體運用于登陸者信息和員工信息,將員工信息封裝在一個結構體里,再創(chuàng)建結構體數組,將多個員工信息儲存在結構體數組中。 2詳細設計 2.1 系統(tǒng)功能設計 主函數和子函數: 系統(tǒng)包含一個主函數,和子函數,分別有登陸子函數,菜單子函數,增加數據子函數,更新數據子函數,查詢數據子函數,刪除數據子函數,統(tǒng)計數據子函數,重組文件子函數,排序數據子函數,最后兩個分別是讀取文件和寫入文件子函數。 各個函數的功能: 主函數是一個入口程序從這里進入,再進入登陸函數,實現登陸操作。 登陸函數,只有擁有正確賬號密碼,正確的操作才可以進入菜單界面進行下一步的操作,并且輸入錯誤三
15、次后將會提示并強制退出。 菜單界面利用switch()函數將各個函數聯系起來實現真正的菜單,輸入正確的序號可以進行后續(xù)的各個操作。 讀取函數,將特定文件中的信息,以特定的方式讀取到正在運行的程序中,實現讀寫操作。 寫入函數,在添加、更新、刪除、重組操作過后進行寫入操作,將變換后的數據重新寫入文件中。注:每次寫入都是將程序中的所有數據重新寫入文件。 增加函數,可以新添員工,并將員工的數據輸入,并利用寫入函數,寫入文件中。在增加后會提示是否繼續(xù)增加,提供了方便。并且如果原數據中有相同編號的員工,會在輸入編號后提示有相同的編號的員工,并重新輸入編號。增加了程序的健全性。 更新數據函數,以編
16、號來確定更新的員工,更新將重新輸入該編號員工的信息,并在更新后執(zhí)行寫入。 刪除函數,執(zhí)行該函數后,將有兩種選擇,按編號刪除,或按名字刪除,正確輸入后將會將該編號或姓名的數據中的一項zt的值更改為1,使其在其他操作時不被識別,以達到不刪除數據,但達到相同的效果的邏輯刪除。 顯示函數,有兩種顯示方式,按學號顯示或按名字顯示,學號顯示為從小到大顯示。 重組函數,將文件中邏輯刪除的數據物理刪除,用來節(jié)省儲存空間,并可以加快運算速度。 統(tǒng)計數據,將文件中的數據統(tǒng)計、計算,并輸出,給人以直觀的方式顯示數據。 排序函數,將數據以實發(fā)工資從大到小排序。
17、 2.2 系統(tǒng)流程設計 主函數 main(); 登陸函數 dl(); 菜單函數 cd(); 增加函數 zj_data(); 刪除函數 sc_data() 更新函數 gx_data(); 讀取函數 read(); 查詢函數 cz_data(); 顯示函數 xs_data(); 重組數據 cz_data(); 統(tǒng)計數據 tj_data; 排序數據 px_data(); 系統(tǒng)的總體流程圖 保存函數 save(); 查詢 輸入查詢方式 按編號查詢 按名字查詢 查詢學生 輸出當前學生數據
18、
查無此人
查詢函數的流程圖
3編碼實現
#define MAX 100
#include
19、員工結構體 { short zt; //數據狀態(tài) long bh; //編號 char name[20]; //名字 char time[11]; //時間 long money; //基本工資 long jj; //獎金 long kk; //扣款 long sf; //實發(fā)工資 }; yg y[MAX]; //定義數據體數組 int r = 0;
20、 //全局變量,人數,包括邏輯刪除人數 int p = 0; //登陸的次數,用全局變量能在登陸三次失敗時退出程序 void read() //讀取文件函數 { FILE *fp; char b; int i; b = 0; printf("即將讀取文件 員工信息.dat\n"); if ((fp = fopen("員工信息.dat", "rb")) == NULL) //讀
21、取文件 { printf("員工信息.dat 文件不存在\n"); printf("是否重新創(chuàng)建該文件?\n"); printf("創(chuàng)建(y) 員工信息.dat 或 退出(n)\n"); getchar(); b = getchar(); while (getchar() != \n) if (b == Y || b == N) b += 32; while (b != y&&b != n) { printf("輸入錯誤!請重新輸入!\n"); b = getchar(); while (getcha
22、r() != \n) if (b == Y || b == N) b += 32; } if (b == y) if ((fp = fopen("員工信息.dat", "wb")) == NULL) //文件不存在則創(chuàng)建文件 { printf("創(chuàng)建文件失敗!\n"); printf("按下任意鍵以退出程序!\n"); getchar(); exit(1); } } if (b == 0) { fread(&r, 4, 1, fp); printf("讀取成功!\n"
23、); } else printf("創(chuàng)建文件成功!\n"); if (r != 0) for (i = 0; i < r; i++) fread(&y[i], sizeof(yg), 1, fp); fclose(fp); } void save() //保存文件函數 { FILE *fp; int i; if ((fp = fopen("員工信息.dat", "wb")) == NULL) { printf("保存文件失敗!\n"); prin
24、tf("按下任意鍵以退出程序!\n"); getchar(); exit(1); } else { fwrite(&r, 4, 1, fp); if (r != 0) for (i = 0; i < r; i++) fwrite(&y[i], sizeof(yg), 1, fp); } fclose(fp); } void zj_data() //增加數據函數 { yg yuangong; char b; int i; int k = 0;
25、 yuangong.zt = 0; //新建員工信息時,狀態(tài)為0 do //用循環(huán)來尋找、避免相同編號的員工 { printf("編號:(例如:123456)\n"); scanf("%d", &yuangong.bh); for (i = 0; i < r; i++) if (y[i].bh == yuangong.bh&&y[i].zt==0) { printf("已有同編號員工無法添加!\n");
26、printf("請重新輸入!\n"); k = 1; break; } else if (i == r - 1) k = 0; } while (k == 1); printf("姓名:(例如:張三(or tom))\n"); scanf("%s", yuangong.name); printf("年月:(例如:2015.11.11)\n"); scanf("%s", yuangong.time); printf("崗位工資:(例如:50000)\n"); scanf("%d", &yuangong.money);
27、printf("獎金:(例如:2000)\n"); scanf("%d", &yuangong.jj); printf("扣款:(例如:100)\n"); scanf("%d", &yuangong.kk); printf("實發(fā)工資為:(崗位工資+獎金-扣款)\n"); yuangong.sf = yuangong.money + yuangong.jj - yuangong.kk; printf("%d\n", yuangong.sf); y[r] = yuangong; r++;
28、 //新建員工信息時人數r++ save(); printf("添加成功!\n"); getchar(); //防止下面一個%c讀取到上一個的回車 printf("是否繼續(xù)添加員工?(y/n)\n"); b = getchar(); while (getchar() != \n); if (b == Y || b == N) b += 32; while (b != y&&b != n) { printf("輸入錯誤!請重新輸入!\n"); b = getchar(); while
29、(getchar() != \n) if (b == Y || b == N) b += 32; } if (b == y) zj_data(); } void gx_data() //更新數據 { yg yuangong; long num; int i; printf("\n請輸入要更新的員工的編號!\n"); scanf("%d", &num); for (i = 0; i < r; i++) if (y[i].bh == num&&y[i].zt == 0)
30、 { yuangong = y[i]; printf("當前該員工信息為:\n"); printf("編號:%d\n", yuangong.bh); printf("姓名:%s\n", yuangong.name); printf("年月:%s\n", yuangong.time); printf("崗位工資:%d\n", yuangong.money); printf("獎金:%d\n", yuangong.jj); printf("扣款:%d\n", yuangong.kk); printf("實發(fā)工資:%d\n
31、", yuangong.sf); printf("按下任意鍵輸入更新后的信息!\n"); getchar(); getchar(); printf("編號:(例如:123456)\n"); scanf("%d", &yuangong.bh); printf("姓名:(例如:張三(or tom))\n"); scanf("%s", yuangong.name); printf("年月:(例如:2015.11.11)\n"); scanf("%s", yuangong.time); printf("崗位工資:(例如:5
32、0000)\n"); scanf("%d", &yuangong.money); printf("獎金:(例如:2000)\n"); scanf("%d", &yuangong.jj); printf("扣款:(例如:100)\n"); scanf("%d", &yuangong.kk); printf("實發(fā)工資為:(崗位工資+獎金-扣款)\n"); yuangong.sf = yuangong.money + yuangong.jj - yuangong.kk; printf("%d\n", yuangong.sf);
33、 y[i] = yuangong; save(); printf("更新成功!\n"); break; } else if (i == r - 1) printf("查無此人!\n"); } void cz_data() //查詢數據 { yg yuangong; int a, i; long num; char na[10]; printf("\n請選擇查詢方式!\n"); //分為按編號查詢和姓名查詢 printf(" *******************\
34、n"); printf(" * 1、編號查詢 *\n"); printf(" * 2、姓名查詢 *\n"); printf(" * 3、返回菜單 *\n"); printf(" *******************\n"); scanf("%d", &a); if (a == 1) { printf("請輸入查詢員工的編號:"); scanf("%d", &num); for (i = 0; i < r; i++) //編號查詢則循環(huán)r次,查找狀態(tài)為0且編號與所輸入的數字相同的數據
35、if (y[i].zt == 0 && y[i].bh == num) { yuangong = y[i]; printf("當前該員工信息為:\n"); printf("編號:%d\n", yuangong.bh); printf("姓名:%s\n", yuangong.name); printf("年月:%s\n", yuangong.time); printf("崗位工資:%d\n", yuangong.money); printf("獎金:%d\n", yuangong.jj); printf("扣
36、款:%d\n", yuangong.kk); printf("實發(fā)工資:%d\n", yuangong.sf); break; } else if (i == r - 1) printf("查無此人!\n"); } else if (a == 2) { printf("請輸入查詢員工的姓名:"); scanf("%s", na); for (i = 0; i < r; i++) //姓名查詢則循環(huán)r次,查找狀態(tài)為0且編號與所輸入的字符串相同的數據 if ((strcmp(y[i]
37、.name, na) == 0) && y[i].zt == 0) { yuangong = y[i]; printf("當前該員工信息為:\n"); printf("編號:%d\n", yuangong.bh); printf("姓名:%s\n", yuangong.name); printf("年月:%s\n", yuangong.time); printf("崗位工資:%d\n", yuangong.money); printf("獎金:%d\n", yuangong.jj); printf("扣款:
38、%d\n", yuangong.kk); printf("實發(fā)工資:%d\n", yuangong.sf); break; } else if (i == r - 1) printf("查無此人!\n"); } else if (a == 3) { } else { printf("輸入錯誤!\n"); cz_data(); } } void sc_data() //刪除數據 { yg yuangong
39、; long num; int a, i, b; char na[10]; printf("\n請選擇!\n"); //刪除也按編號刪除和姓名刪除 printf(" *********************\n"); printf(" * 1、按編號刪除 *\n"); printf(" * 2、按姓名刪除 *\n"); printf(" * 3、返回主菜單 *\n"); printf(" *********************\n"); scanf("
40、%d", &a); if (a == 1) { printf("請輸入要刪除員工的編號:"); scanf("%d", &num); for (i = 0; i < r; i++) if (y[i].zt == 0 && y[i].bh == num) { yuangong = y[i]; printf("當前該員工信息為:\n"); printf("編號:%d\n", yuangong.bh); printf("姓名:%s\n", yuangong.name); printf("年月:%s\n", y
41、uangong.time); printf("崗位工資:%d\n", yuangong.money); printf("獎金:%d\n", yuangong.jj); printf("扣款:%d\n", yuangong.kk); printf("實發(fā)工資:%d\n", yuangong.sf); y[i].zt = 1; save(); printf("刪除成功!\n"); getchar(); //防止下面一個%c讀取到上一個的回車 p
42、rintf("是否繼續(xù)刪除員工?(y/n)\n"); b = getchar(); while (getchar() != \n); if (b == Y || b == N) b += 32; while (b != y&&b != n) { printf("輸入錯誤!請重新輸入!\n"); b = getchar(); while (getchar() != \n) if (b == Y || b == N) b += 32; } if (b
43、== y) sc_data(); break; } else if (i == r - 1) printf("查無此人,無法刪除!\n"); } else if (a == 2) { printf("請輸入刪除員工的姓名:"); scanf("%s", na); for (i = 0; i < r; i++) if ((strcmp(y[i].name, na) == 0) && y[i].zt == 0) { yuangong = y[i]; printf("當前該員工信息為:\
44、n"); printf("編號:%d\n", yuangong.bh); printf("姓名:%s\n", yuangong.name); printf("年月:%s\n", yuangong.time); printf("崗位工資:%d\n", yuangong.money); printf("獎金:%d\n", yuangong.jj); printf("扣款:%d\n", yuangong.kk); printf("實發(fā)工資:%d\n", yuangong.sf); y[i].zt = 1; sa
45、ve(); printf("刪除成功!\n"); getchar(); //防止下面一個%c讀取到上一個的回車 printf("是否繼續(xù)刪除員工?(y/n)\n"); b = getchar(); while (getchar() != \n); if (b == Y || b == N) b += 32; while (b != y&&b != n) { printf("輸入錯誤!請重新輸入!\n"); b =
46、getchar(); while (getchar() != \n) if (b == Y || b == N) b += 32; } if (b == y) sc_data(); break; } else if (i == r - 1) printf("查無此人,無法刪除!\n"); } else if (a == 3) //輸入為3時不執(zhí)行操作返回主菜單 { } else {
47、 printf("輸入錯誤!\n"); sc_data(); } } void xs_data() //顯示數據 { yg yuangong[MAX], t; int a; int i, j; int k = 0; printf("\n請選擇顯示方式!\n"); printf(" *********************\n"); printf(" * 1、按編號顯示 *\n"); printf(" * 2、按姓名顯示 *\n"); print
48、f(" * 3、返回主菜單 *\n"); printf(" *********************\n"); scanf("%d", &a); for (i = 0; i < r; i++) { yuangong[i] = y[i]; if (y[i].zt == 1) k++; } if (k == r) { printf("無員工信息!\n"); a = 3; } if (a == 1) //按編號顯示時用冒泡排序從大到小排
49、序
{
for (i = 1; i <= r; i++)
for (j = 0; j
50、年月", "崗位工資", "獎金", "扣款", "實發(fā)工資");
for (i = 0; i 51、== 2) //按名字顯示時用冒泡排序從大到小排序,用strcmp來比較字符串的大小
{
for (i = 1; i <= r; i++)
for (j = 0; j 52、 }
printf("按姓名排列如下:\n");
printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n", "編號", "姓名", "年月", "崗位工資", "獎金", "扣款", "實發(fā)工資");
for (i = 0; i 53、money, yuangong[i].jj, yuangong[i].kk, yuangong[i].sf);
printf("顯示完畢!\n");
}
else if (a == 3)
{
}
else
{
printf("輸入錯誤!\n");
cz_data();
}
}
void chongz_data() //重組文件
{
int i, j;
int k = 0;
for (i = 0; i < r; i++) //循 54、環(huán)r次,將狀態(tài)為1的數據剔除,并將剔除數據的個數記錄
if (y[i].zt == 1)
{
for (j = i; j < r; j++)
y[j] = y[j + 1];
k++;
}
r -= k; //將人數r重新計算
save();
printf("重組成功!\n");
}
void tj_data() //統(tǒng)計數據
{
yg yuangong[MAX];
int max 55、, m, k = 0;
double ave = 0;
int n = 0;
int i;
for (i = 0; i < r; i++) //計算文件中邏輯刪除的數據個數k
{
yuangong[i] = y[i];
if (yuangong[i].zt == 1)
k++;
}
for (i = 0; i < r; i++) //將數組中第一個狀態(tài)為0的數據的實發(fā)工資賦給max,并記錄是第幾位,跳出循環(huán)
if (yuangong[i].zt == 56、0)
{
max = yuangong[i].sf;
m = i;
break;
}
if (yuangong[0].zt == 0) //第一個數據是否邏輯刪除?否,將實發(fā)工資賦給ave未計算的平均值
ave = yuangong[0].sf;
for (i = 1; i < r; i++) //循環(huán)找出最大值,并將所有正常數據加入未計算的ave中
{
if ((max < yuangong[i].sf) && (yuangong[i].zt 57、== 0))
m = i;
if (yuangong[i].zt == 0)
ave += yuangong[i].sf;
}
ave = ave / (r - k); //計算ave
for (i = 0; i < r; i++) //將數據中所有大于ave的數據,統(tǒng)計
if ((yuangong[i].sf > ave) && (yuangong[i].zt == 0))
n++;
printf("\n最高實發(fā)工資員工信息為:\n"); //輸 58、出結果
printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n", "編號", "姓名", "年月", "崗位工資", "獎金", "扣款", "實發(fā)工資");
printf("%-10d%-10s%-10s%-10d%-10d%-10d%-10d\n", yuangong[m].bh, yuangong[m].name, yuangong[m].time, yuangong[m].money, yuangong[m].jj, yuangong[m].kk, yuangong[m].sf);
printf("平均工資為:%.2f\n", ave) 59、;
printf("超過平均工資人數為:%d\n\n", n);
}
void px_data() //排序數據
{
yg yuangong[MAX], t;
int num = 0;
int i, j;
for (i = 0; i < r; i++)
yuangong[i] = y[i];
for (i = 1; i <= r; i++) //冒泡排序排序所有數據
for (j = 0; j < r - i; j++)
60、 if (yuangong[j].sf 61、i].zt == 0)
printf("%-10d%-10s%-10s%-10d%-10d%-10d%-10d\n", yuangong[i].bh, yuangong[i].name, yuangong[i].time, yuangong[i].money, yuangong[i].jj, yuangong[i].kk, yuangong[i].sf);
}
void cd() //菜單函數
{
int l;
do
{
printf("歡迎進入員工工資管理系統(tǒng)菜單!\n");
62、 printf(" ________________\n");
printf(" *| 1.增加數據 |*\n");
printf(" *| 2.更新數據 |*\n");
printf(" *| 3.查詢數據 |*\n");
printf(" *| 4.刪除數據 |*\n");
printf(" *| 5.顯示數據 |*\n");
printf(" *| 6.重組數據 |*\n");
printf(" *| 7.統(tǒng)計輸出 |*\n");
printf(" *| 8.排序數據 |* 63、\n");
printf(" *| 9.退出 |*\n");
printf(" *|[其它輸入為退出]|*\n");
printf(" *|________________|*\n\n");
printf("請輸入你的選擇:\n");
scanf("%d", &l);
switch (l)
{
case 1:zj_data(); printf("即將返回主菜單\n"); system("PAUSE"); break; //system用于返回主菜單時等待一下
case 2:gx_data(); printf( 64、"即將返回主菜單\n"); system("PAUSE"); break;
case 3:cz_data(); printf("即將返回主菜單\n"); system("PAUSE"); break;
case 4:sc_data(); printf("即將返回主菜單\n"); system("PAUSE"); break;
case 5:xs_data(); printf("即將返回主菜單\n"); system("PAUSE"); break;
case 6:chongz_data(); printf("即將返回主菜單\n"); system("PAUSE"); b 65、reak;
case 7:tj_data(); printf("即將返回主菜單\n"); system("PAUSE"); break;
case 8:px_data(); printf("即將返回主菜單\n"); system("PAUSE"); break;
case 9:break;
}
} while (l != 9 && (l == 1 || l == 2 || l == 3 || l == 4 || l == 5 || l == 6 || l == 7 || l == 8));
}
void dl() 66、 //登陸函數
{
int i;
char a[10], b[10];
printf("請輸入用戶名:\n");
scanf("%s", a);
printf("請輸入密碼:\n");
scanf("%s", b);
for (i = 0; i<3; i++)
if (strcmp(us[i].un, a) == 0 && strcmp(us[i].up, b) == 0)
{
printf("登錄成功!\n");
read();
cd();
break;
}
if (i == 3)
{
printf("登錄失敗!\n");
p++;
if (p >= 3)
{
printf("登錄失敗超過3次,系統(tǒng)將強制退出!\n");
printf("按下任意鍵以退出程序!\n");
g
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 市教育局冬季運動會安全工作預案
- 2024年秋季《思想道德與法治》大作業(yè)及答案3套試卷
- 2024年教師年度考核表個人工作總結(可編輯)
- 2024年xx村兩委涉案資金退還保證書
- 2024年憲法宣傳周活動總結+在機關“弘揚憲法精神推動發(fā)改工作高質量發(fā)展”專題宣講報告會上的講話
- 2024年XX村合作社年報總結
- 2024-2025年秋季第一學期初中歷史上冊教研組工作總結
- 2024年小學高級教師年終工作總結匯報
- 2024-2025年秋季第一學期初中物理上冊教研組工作總結
- 2024年xx鎮(zhèn)交通年度總結
- 2024-2025年秋季第一學期小學語文教師工作總結
- 2024年XX村陳規(guī)陋習整治報告
- 2025年學校元旦迎新盛典活動策劃方案
- 2024年學校周邊安全隱患自查報告
- 2024年XX鎮(zhèn)農村規(guī)劃管控述職報告