【正文】
學(xué)生姓名: 學(xué) 號: 指導(dǎo)教師: 20 16 年 12 月 12 日至20 16 年 12 月 23 日武昌首義學(xué)院制 程序設(shè)計基礎(chǔ) 課程設(shè)計任務(wù)書一、設(shè)計(調(diào)查報告/論文)題目員工工資管理系統(tǒng)二、設(shè)計(調(diào)查報告/論文)主要內(nèi)容主要內(nèi)容:設(shè)計一個利用文件處理方式實現(xiàn)對員工工資(包括員工編號、員工姓名、應(yīng)發(fā)、扣款和實發(fā))進(jìn)行管理,具有增加數(shù)據(jù)、更新數(shù)據(jù)、查詢數(shù)據(jù)、刪除數(shù)據(jù)、列表顯示數(shù)據(jù)以及重組文件的功能。學(xué)生學(xué)籍管理系統(tǒng)的功能要求如下:①增加數(shù)據(jù)該模塊完成將輸入的數(shù)據(jù)存入數(shù)據(jù)文件中,用戶一次可輸入多個學(xué)生的學(xué)籍信息。功能要求如下:系統(tǒng)要求在Microsoft Visual C++ 。 //時間 long money。增加了程序的健全性。統(tǒng)計數(shù)據(jù)tj_data。 //定義數(shù)據(jù)體數(shù)組int r = 0。Y39。 || b == 39。 i r。 } fclose(fp)。 break。 printf(實發(fā)工資為:(崗位工資+獎金扣款)\n)。N39。) b += 32。 printf(編號:%d\n, )。 scanf(%s, )。 break。num)。 } else if (a == 2) { printf(請輸入查詢員工的姓名:)。 } else if (i == r 1) printf(查無此人!\n)。 scanf(%d, amp。 save()。amp。 } else if (i == r 1) printf(查無此人,無法刪除!\n)。 y[i].zt = 1。amp。 break。 for (i = 0。 ir。 } else if (a == 3) { } else { printf(輸入錯誤!\n)。 int n = 0。 (yuangong[i].zt == 0)) m = i。 for (i = 0。 do { printf(歡迎進(jìn)入員工工資管理系統(tǒng)菜單!\n)。 switch (l) { case 1:zj_data()。 case 5:xs_data()。 case 9:break。 cd()。登陸需要用戶名和密碼,所以我們直接定義一個用戶結(jié)構(gòu)體,包含用戶名和密碼。并有按編號顯示和姓名顯示,編號顯示是從小到大按編號顯示。不奮斗就是每天都很容易,可一年一年越來越難。以姓名查詢則在循環(huán)時查找數(shù)據(jù)中名字與之相同的員工數(shù)據(jù),而后與編號查詢相同。}4運行結(jié)果輸入三次登陸失敗輸出:登陸成功讀取文件,無文件時:創(chuàng)建文件成功后進(jìn)入菜單界面:增加數(shù)據(jù)輸入界面:當(dāng)輸入數(shù)據(jù)中原本就有的員工編號時:所有數(shù)據(jù)輸入完成后,顯示所有數(shù)據(jù):有兩種顯示方式將其中一人的數(shù)據(jù)執(zhí)行更新操作:編號錯誤時:正確時:查詢:兩種方式 刪除數(shù)據(jù):兩種方式 重組完成:數(shù)據(jù)處理完成后,顯示所有數(shù)據(jù):統(tǒng)計數(shù)據(jù):以實發(fā)工資高到低排序數(shù)據(jù):總結(jié)拿到課設(shè)題目時,以為很簡單,只是將一些函數(shù)堆疊在一起就行了,寫的時候也沒覺得很難,但在調(diào)試程序時,各種各樣的bug眼花繚亂,如何找出、修改bug占了大部分時間。 i++) if (strcmp(us[i].un, a) == 0 amp。 case 8:px_data()。 case 4:sc_data()。 printf( *|________________|*\n\n)。 for (i = 0。 printf(超過平均工資人數(shù)為:%d\n\n, n)。 for (i = 1。 printf(重組成功!\n)。 for (i = 0。 yuangong[j + 1] = t。 printf( * 返回主菜單 *\n)。) b += 32。N39。 printf(崗位工資:%d\n, )。 } if (b == 39。) b += 32。 printf(獎金:%d\n, )。 printf( *********************\n)。 printf(獎金:%d\n, )。 printf(扣款:%d\n, )。 scanf(%d, amp。 printf(%d\n, )。)。 i++) if (y[i].bh == numamp。) if (b == 39。)。)。amp。 if (r != 0) for (i = 0。r, 4, 1, fp)。 while (getchar() != 39。 b = getchar()。 //獎金 long kk。讀取函數(shù)read()。注:每次寫入都是將程序中的所有數(shù)據(jù)重新寫入文件。struct yg //員工結(jié)構(gòu)體{ short zt。⑨要求本系統(tǒng)采用結(jié)構(gòu)體等數(shù)據(jù)結(jié)構(gòu)。系統(tǒng)以菜單方式工作。⑧ 排序該模塊按員工實發(fā)工資由高到低的順序排序輸出所有員工信息。④刪除數(shù)據(jù)該模塊用于刪除指定編號的員工工資信息,為提高效率,只作刪除標(biāo)記,不在物理上刪除信息,可稱為邏輯刪除。⑥重組文件當(dāng)邏輯刪除的信息太多時,將會降低查詢效率。⑤顯示數(shù)據(jù)該模塊用于以列表方式顯示所有未作刪除標(biāo)記的學(xué)生基本信息。)注:每人以班級+學(xué)號+姓名創(chuàng)建目錄,目錄需包括課程設(shè)計報告電子文檔和源程序以備檢查。整個程序只運用了結(jié)構(gòu)體的數(shù)據(jù)結(jié)構(gòu),結(jié)構(gòu)體運用于登陸者信息和員工信息,將員工信息封裝在一個結(jié)構(gòu)體里,再創(chuàng)建結(jié)構(gòu)體數(shù)組,將多個員工信息儲存在結(jié)構(gòu)體數(shù)組中。統(tǒng)計數(shù)據(jù),將文件中的數(shù)據(jù)統(tǒng)計、計算,并輸出,給人以直觀的方式顯示數(shù)據(jù)。}us[3] = { aaa,111,bbb,222,ccc,333 }。 b = 39。y39。) if ((fp = fopen(, wb)) == NULL) //文件不存在則創(chuàng)建文件 { printf(創(chuàng)建文件失敗!\n)。 int i。 = 0。 printf(年月:(例如:)\n)。 //新建員工信息時人數(shù)r++ save()。amp。 long num。 printf(扣款:%d\n, )。 scanf(%d, amp。 char na[10]。 y[i].bh == num) { yuangong = y[i]。amp。 int a, i, b。amp。 while (getchar() != 39。 while (getchar() != 39。 i++) if ((strcmp(y[i].name, na) == 0) amp。 b = getchar()。 b = getchar()。 int a。 a = 3。 i++) for (j = 0。 i r。 if (yuangong[i].zt == 1) k++。 i++) //將數(shù)據(jù)中所有大于ave的數(shù)據(jù),統(tǒng)計 if ((yuangong[i].sf ave) amp。 i++) //冒泡排序排序所有數(shù)據(jù) for (j = 0。 printf( *| |*\n)。 printf(即將返回主菜單\n)。 printf(即將返回主菜單\n)。 char a[10], b[10]。 printf(按下任意鍵以退出程序!\n)。讀取文件或創(chuàng)建文件成功后,將進(jìn)入菜單系統(tǒng),菜單系統(tǒng)負(fù)責(zé)將各個功能函數(shù)串起來,于是用一般的創(chuàng)建菜單的選擇語句switch創(chuàng)建一個菜單。比如有個統(tǒng)計平均工資時,若結(jié)構(gòu)體數(shù)組第一個數(shù)據(jù)被邏輯刪除過,且沒有重組過,那么有可能將第一組數(shù)據(jù)也加進(jìn)去,從而導(dǎo)致錯誤。寫完后感覺千辛萬苦,但在寫的過程時感覺,程序在自己手里一步步實現(xiàn)各種功能越來越豐滿,非常有成就感。添加函數(shù),即把新數(shù)據(jù)往里添加,文件中所有的數(shù)據(jù)都要用添加函數(shù)加進(jìn)去,在添加時數(shù)據(jù)結(jié)構(gòu)體中的狀態(tài)默認(rèn)為0,且每添加一個全局變量r(總員工數(shù))將自加一,在添加時用一個循環(huán)判斷添加的數(shù)據(jù)的編號是否與結(jié)構(gòu)體數(shù)組中的有重復(fù),有的話提示,并重新輸入,無則繼續(xù)輸入。 getchar()。 scanf(%s, a)。 break。 break。 printf( *| |*\n)。 j++) if (yuangong[j].sfyuangong[j + 1].sf) { t = yuangong[j]。 (yuangong[i].zt == 0)) n++。 i r。 j r。 j++) if (strcmp(yuangong[j].name, yuangong[j + 1].name) 0) { t = yuangong[j]。 i =