程序設(shè)計(jì)基礎(chǔ)課程設(shè)計(jì)報(bào)告c語言實(shí)現(xiàn)附源碼員工工資管理系統(tǒng)

上傳人:仙*** 文檔編號(hào):34972317 上傳時(shí)間:2021-10-24 格式:DOC 頁數(shù):34 大?。?56KB
收藏 版權(quán)申訴 舉報(bào) 下載
程序設(shè)計(jì)基礎(chǔ)課程設(shè)計(jì)報(bào)告c語言實(shí)現(xiàn)附源碼員工工資管理系統(tǒng)_第1頁
第1頁 / 共34頁
程序設(shè)計(jì)基礎(chǔ)課程設(shè)計(jì)報(bào)告c語言實(shí)現(xiàn)附源碼員工工資管理系統(tǒng)_第2頁
第2頁 / 共34頁
程序設(shè)計(jì)基礎(chǔ)課程設(shè)計(jì)報(bào)告c語言實(shí)現(xiàn)附源碼員工工資管理系統(tǒng)_第3頁
第3頁 / 共34頁

下載文檔到電腦,查找使用更方便

0 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《程序設(shè)計(jì)基礎(chǔ)課程設(shè)計(jì)報(bào)告c語言實(shí)現(xiàn)附源碼員工工資管理系統(tǒng)》由會(huì)員分享,可在線閱讀,更多相關(guān)《程序設(shè)計(jì)基礎(chǔ)課程設(shè)計(jì)報(bào)告c語言實(shí)現(xiàn)附源碼員工工資管理系統(tǒng)(34頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、 《程序設(shè)計(jì)基礎(chǔ)》 課程設(shè)計(jì)報(bào)告 題 目: 員工工資管理系統(tǒng) 院 (系): 信息科學(xué)與工程學(xué)院 專業(yè)班級(jí): 學(xué)生姓名: 學(xué) 號(hào): 指導(dǎo)教師: 20 16 年 12 月 12 日至20 16 年 12 月 23 日

2、 武昌首義學(xué)院制 程序設(shè)計(jì)基礎(chǔ) 課程設(shè)計(jì)任務(wù)書 一、設(shè)計(jì)(調(diào)查報(bào)告/論文)題目 員工工資管理系統(tǒng) 二、設(shè)計(jì)(調(diào)查報(bào)告/論文)主要內(nèi)容 1.員工工資管理系統(tǒng) 主要內(nèi)容: 設(shè)計(jì)一個(gè)利用文件處理方式實(shí)現(xiàn)對(duì)員工工資(包括員工編號(hào)、員工姓名、應(yīng)發(fā)、扣款和實(shí)發(fā))進(jìn)行管理,具有增加數(shù)據(jù)、更新數(shù)據(jù)、查詢數(shù)據(jù)、刪除數(shù)據(jù)、列表顯示數(shù)據(jù)以及重組文件的功能。員工工資管理系統(tǒng)由六大功能模塊組成: ①增加數(shù)據(jù) 該模塊完成將輸入的數(shù)據(jù)存入數(shù)據(jù)文件中,用戶一次可輸入多個(gè)員工的信息。 ②更新數(shù)據(jù) 該模塊用于實(shí)現(xiàn)對(duì)記錄的修改,首先用戶輸入員工的編號(hào),然后查詢?cè)搯T工的信息,最后更新該員工的信

3、息。 ③查詢數(shù)據(jù) 該模塊可選擇按員工編號(hào)查詢,或者按員工姓名進(jìn)行查詢,然后列出滿足條件的且未作刪除標(biāo)記的員工信息。 ④刪除數(shù)據(jù) 該模塊用于刪除指定編號(hào)的員工工資信息,為提高效率,只作刪除標(biāo)記,不在物理上刪除信息,可稱為邏輯刪除。 ⑤顯示數(shù)據(jù) 該模塊用于以列表方式顯示所有未作刪除標(biāo)記的員工信息。 ⑥重組文件 當(dāng)邏輯刪除的信息太多時(shí),將會(huì)降低查詢效率。重組文件模塊專門用于在物理上刪除作有刪除標(biāo)記的信息,這樣不但提高查詢效率,同時(shí)也節(jié)約存儲(chǔ)空間。 ⑦統(tǒng)計(jì)輸出 輸出實(shí)發(fā)工資最高的員工工資信息。 統(tǒng)計(jì)輸出員工實(shí)發(fā)工資的平均工資。 統(tǒng)計(jì)輸出超過實(shí)發(fā)平均工資的員工人數(shù)。 ⑧ 排序

4、 該模塊按員工實(shí)發(fā)工資由高到低的順序排序輸出所有員工信息。 ⑨要求本系統(tǒng)采用結(jié)構(gòu)體等數(shù)據(jù)結(jié)構(gòu)。系統(tǒng)以菜單方式工作。 2.學(xué)生學(xué)籍管理系統(tǒng) 主要內(nèi)容: 設(shè)計(jì)一個(gè)利用文件處理方式,實(shí)現(xiàn)對(duì)學(xué)生學(xué)籍信息(包括:學(xué)號(hào),姓名,性別,年齡,籍貫,系別,專業(yè),班級(jí))進(jìn)行添加、修改、刪除、查找、統(tǒng)計(jì)輸出等操作。學(xué)生學(xué)籍管理系統(tǒng)的功能要求如下: ①增加數(shù)據(jù) 該模塊完成將輸入的數(shù)據(jù)存入數(shù)據(jù)文件中,用戶一次可輸入多個(gè)學(xué)生的學(xué)籍信息。 ②更新數(shù)據(jù) 該模塊用于實(shí)現(xiàn)對(duì)記錄的修改,首先用戶輸入學(xué)生的學(xué)號(hào),然后查詢?cè)搶W(xué)生的學(xué)籍信息,最后更新該學(xué)生的學(xué)籍的信息。 ③查詢數(shù)據(jù) 該模塊可選擇按學(xué)生的學(xué)號(hào)查詢,

5、或者按學(xué)生的姓名查詢,再或者按學(xué)生的班級(jí)查詢,然后列出滿足條件的且未作刪除標(biāo)記的學(xué)生學(xué)籍信息。 ④刪除數(shù)據(jù) 該模塊用于刪除指定編號(hào)的學(xué)生學(xué)籍信息,為提高效率,只作刪除標(biāo)記,不在物理上刪除信息,可稱為邏輯刪除。 ⑤顯示數(shù)據(jù) 該模塊用于以列表方式顯示所有未作刪除標(biāo)記的學(xué)生學(xué)籍信息。 ⑥重組文件 當(dāng)邏輯刪除的信息太多時(shí),將會(huì)降低查詢效率。重組文件模塊專門用于在物理上刪除作有刪除標(biāo)記的信息,這樣不但提高查詢效率,同時(shí)也節(jié)約存儲(chǔ)空間。 ⑦統(tǒng)計(jì)輸出 1)按專業(yè)輸出所有學(xué)生的學(xué)籍信息。 2)統(tǒng)計(jì)輸出學(xué)生的平均年齡。 3)統(tǒng)計(jì)輸出超過平均年齡的學(xué)生人數(shù)。 ⑧ 排序 該模塊按學(xué)生學(xué)號(hào)由低

6、到高的順序排序輸出所有學(xué)生學(xué)籍信息。 ⑨要求本系統(tǒng)采用結(jié)構(gòu)體等數(shù)據(jù)結(jié)構(gòu)。系統(tǒng)以菜單方式工作。 3.班級(jí)成績(jī)管理系統(tǒng) 主要內(nèi)容: 對(duì)一個(gè)有N個(gè)學(xué)生的班級(jí),每個(gè)學(xué)生有M門課程。每個(gè)學(xué)生應(yīng)當(dāng)包括如下信息:學(xué)號(hào)、姓名、M門課程名稱。該系統(tǒng)實(shí)現(xiàn)對(duì)班級(jí)成績(jī)的添加、修改、刪除、查找、統(tǒng)計(jì)輸出等操作的管理。功能要求如下: ①增加數(shù)據(jù) 該模塊完成將輸入的數(shù)據(jù)存入數(shù)據(jù)文件中,用戶一次可輸入多個(gè)學(xué)生的基本信息。 ②更新數(shù)據(jù) 該模塊用于實(shí)現(xiàn)對(duì)記錄的修改,首先用戶輸入學(xué)生的學(xué)號(hào),然后查詢?cè)搶W(xué)生的基本信息,最后更新該學(xué)生的基本信息。 ③查詢數(shù)據(jù) 該模塊可選擇按學(xué)生的學(xué)號(hào)查詢,或者按學(xué)生的姓名查詢,

7、然后列出滿足條件的且未作刪除標(biāo)記的學(xué)生基本信息。 ④刪除數(shù)據(jù) 該模塊用于刪除指定編號(hào)的學(xué)生基本信息,為提高效率,只作刪除標(biāo)記,不在物理上刪除信息,可稱為邏輯刪除。 ⑤顯示數(shù)據(jù) 該模塊用于以列表方式顯示所有未作刪除標(biāo)記的學(xué)生基本信息。 ⑥重組文件 當(dāng)邏輯刪除的信息太多時(shí),將會(huì)降低查詢效率。重組文件模塊專門用于在物理上刪除作有刪除標(biāo)記的信息,這樣不但提高查詢效率,同時(shí)也節(jié)約存儲(chǔ)空間。 ⑦統(tǒng)計(jì)輸出 1)顯示每門課程成績(jī)最高的學(xué)生的基本信息。 2)顯示每門課程的平均成績(jī)。 3)顯示超過某門課程平均成績(jī)的學(xué)生人數(shù)。 ⑧ 排序 該模塊按學(xué)生學(xué)號(hào)由低到高的順序排序輸出所有學(xué)生的基本信

8、息。 ⑨要求本系統(tǒng)采用結(jié)構(gòu)體等數(shù)據(jù)結(jié)構(gòu)。系統(tǒng)以菜單方式工作。 課程設(shè)計(jì)要求: 課程設(shè)計(jì)從第一、二和三道題中選一道題完成。其中,學(xué)號(hào)尾數(shù)為0、2、4、8的做第一道題;學(xué)號(hào)尾數(shù)為1、3、7的做第二道題;學(xué)號(hào)尾數(shù)為5、6、9的做第三道題。 系統(tǒng)要求在Microsoft Visual C++ 6.0編譯平臺(tái)上采用C語言編程實(shí)現(xiàn)。 課程設(shè)計(jì)報(bào)告(要求正規(guī)打印,A4幅面),內(nèi)容包括: l 題目 l 需求與總體設(shè)計(jì)(描述系統(tǒng)要實(shí)現(xiàn)什么功能;系統(tǒng)怎么實(shí)現(xiàn),繪制系統(tǒng)功能模塊結(jié)構(gòu)圖;數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)及用法說明) l 詳細(xì)設(shè)計(jì)(描述系統(tǒng)包含的主函數(shù)和子函數(shù);解釋各個(gè)功能模塊的軟件功能;畫

9、系統(tǒng)的總體流程圖,某種查詢、插入、刪除程序?qū)崿F(xiàn)的子函數(shù)流程圖,要求采用標(biāo)準(zhǔn)流程圖圖符至少畫兩個(gè)流程圖) l 編碼與實(shí)現(xiàn)(只能使用C語言,源程序編寫格式要按照縮進(jìn)方式,源程序要有詳細(xì)的注釋,使程序容易閱讀。源程序編寫格式的規(guī)范和注釋體現(xiàn)程序員的素質(zhì),必須從本課程設(shè)計(jì)開始培養(yǎng)。) l 運(yùn)行結(jié)果(包括輸入數(shù)據(jù)的結(jié)果,查詢、修改、刪除的結(jié)果,可以將輸出的結(jié)果以截屏方式呈現(xiàn)到課程設(shè)計(jì)報(bào)告中) l 總結(jié)(必須真實(shí)的說出自己在課程設(shè)計(jì)中的切身體會(huì)。例如:課程設(shè)計(jì)如何構(gòu)思、如何設(shè)計(jì)、如何編程、如何調(diào)試、遇到的主要問題和解決方法,哪些地方使你“痛苦不堪”;創(chuàng)新之處;課程設(shè)計(jì)中存在的不足,需進(jìn)一步改進(jìn)的設(shè)想

10、等等。) 注:每人以班級(jí)+學(xué)號(hào)+姓名創(chuàng)建目錄,目錄需包括課程設(shè)計(jì)報(bào)告電子文檔和源程序以備檢查。然后由各班學(xué)習(xí)委員匯總到U盤上統(tǒng)一提交。 三、原始資料 1.游洪躍,彭駿,譚斌.C語言程序設(shè)計(jì)實(shí)驗(yàn)與課程設(shè)計(jì)教程.北京:清華大學(xué)出版社,2011. 2.孫承愛,趙衛(wèi)東.程序設(shè)計(jì)基礎(chǔ)—基于C語言(第2版).科學(xué)出版社,2010. 四、要求的設(shè)計(jì)(調(diào)查/論文)成果 1.課程設(shè)計(jì)報(bào)告 2.課程設(shè)計(jì)軟件 五、進(jìn)程安排 布置任務(wù),查找資料、需求分析1天 總體設(shè)計(jì)1天 詳細(xì)設(shè)計(jì)1天 編制源程序?qū)崿F(xiàn)3天 測(cè)試與修改1天 撰寫課程設(shè)計(jì)報(bào)告2天 六、主要參考資料

11、 [1] 譚浩強(qiáng).C程序設(shè)計(jì).第四版.清華大學(xué)出版社,2010. [2] 蘇小紅.C語言大學(xué)實(shí)用教程.第2版.電子工業(yè)出版社,2008. 指導(dǎo)教師(簽名): 年 月 日 目 錄 1需求與總體設(shè)計(jì)………………………………………………………………………1 2詳細(xì)設(shè)計(jì)………………………………………………………………………1 3編碼實(shí)現(xiàn)………………………………………………………………………4 4運(yùn)行結(jié)果………………………………………………………………………21 總結(jié)…………………………………………………………………………………24

12、 1需求與總體設(shè)計(jì) 1.1需求描述 設(shè)計(jì)一個(gè)利用文件處理方式實(shí)現(xiàn)對(duì)員工工資(包括員工編號(hào)、員工姓名、年月、崗位工資、獎(jiǎng)金、扣款和實(shí)發(fā))進(jìn)行管理,具有增加數(shù)據(jù)、更新數(shù)據(jù)、查詢數(shù)據(jù)、刪除數(shù)據(jù)、列表顯示數(shù)據(jù)以及重組文件的功能。 1.2總體設(shè)計(jì) 先以登陸函數(shù)登陸,再進(jìn)入主菜單,菜單中顯示各個(gè)要實(shí)現(xiàn)的操作,以菜單將各個(gè)函數(shù)聯(lián)系起來,對(duì)菜單操作以實(shí)現(xiàn)系統(tǒng)的目的。 1.3數(shù)據(jù)結(jié)構(gòu) struct user //登陸者信息 { char un[10]; char up[10]; }us[3

13、] = { "aaa","111","bbb","222","ccc","333" }; struct yg //員工結(jié)構(gòu)體 { short zt; //數(shù)據(jù)狀態(tài) long bh; //編號(hào) char name[20]; //名字 char time[11]; //時(shí)間 long money; //基本工資 long jj; //獎(jiǎng)金 long kk; //扣款 long sf; //實(shí)發(fā)工資 }; 整個(gè)程序只

14、運(yùn)用了結(jié)構(gòu)體的數(shù)據(jù)結(jié)構(gòu),結(jié)構(gòu)體運(yùn)用于登陸者信息和員工信息,將員工信息封裝在一個(gè)結(jié)構(gòu)體里,再創(chuàng)建結(jié)構(gòu)體數(shù)組,將多個(gè)員工信息儲(chǔ)存在結(jié)構(gòu)體數(shù)組中。 2詳細(xì)設(shè)計(jì) 2.1 系統(tǒng)功能設(shè)計(jì) 主函數(shù)和子函數(shù): 系統(tǒng)包含一個(gè)主函數(shù),和子函數(shù),分別有登陸子函數(shù),菜單子函數(shù),增加數(shù)據(jù)子函數(shù),更新數(shù)據(jù)子函數(shù),查詢數(shù)據(jù)子函數(shù),刪除數(shù)據(jù)子函數(shù),統(tǒng)計(jì)數(shù)據(jù)子函數(shù),重組文件子函數(shù),排序數(shù)據(jù)子函數(shù),最后兩個(gè)分別是讀取文件和寫入文件子函數(shù)。 各個(gè)函數(shù)的功能: 主函數(shù)是一個(gè)入口程序從這里進(jìn)入,再進(jìn)入登陸函數(shù),實(shí)現(xiàn)登陸操作。 登陸函數(shù),只有擁有正確賬號(hào)密碼,正確的操作才可以進(jìn)入菜單界面進(jìn)行下一步的操作,并且輸入錯(cuò)誤三

15、次后將會(huì)提示并強(qiáng)制退出。 菜單界面利用switch()函數(shù)將各個(gè)函數(shù)聯(lián)系起來實(shí)現(xiàn)真正的菜單,輸入正確的序號(hào)可以進(jìn)行后續(xù)的各個(gè)操作。 讀取函數(shù),將特定文件中的信息,以特定的方式讀取到正在運(yùn)行的程序中,實(shí)現(xiàn)讀寫操作。 寫入函數(shù),在添加、更新、刪除、重組操作過后進(jìn)行寫入操作,將變換后的數(shù)據(jù)重新寫入文件中。注:每次寫入都是將程序中的所有數(shù)據(jù)重新寫入文件。 增加函數(shù),可以新添員工,并將員工的數(shù)據(jù)輸入,并利用寫入函數(shù),寫入文件中。在增加后會(huì)提示是否繼續(xù)增加,提供了方便。并且如果原數(shù)據(jù)中有相同編號(hào)的員工,會(huì)在輸入編號(hào)后提示有相同的編號(hào)的員工,并重新輸入編號(hào)。增加了程序的健全性。 更新數(shù)據(jù)函數(shù),以編

16、號(hào)來確定更新的員工,更新將重新輸入該編號(hào)員工的信息,并在更新后執(zhí)行寫入。 刪除函數(shù),執(zhí)行該函數(shù)后,將有兩種選擇,按編號(hào)刪除,或按名字刪除,正確輸入后將會(huì)將該編號(hào)或姓名的數(shù)據(jù)中的一項(xiàng)zt的值更改為1,使其在其他操作時(shí)不被識(shí)別,以達(dá)到不刪除數(shù)據(jù),但達(dá)到相同的效果的邏輯刪除。 顯示函數(shù),有兩種顯示方式,按學(xué)號(hào)顯示或按名字顯示,學(xué)號(hào)顯示為從小到大顯示。 重組函數(shù),將文件中邏輯刪除的數(shù)據(jù)物理刪除,用來節(jié)省儲(chǔ)存空間,并可以加快運(yùn)算速度。 統(tǒng)計(jì)數(shù)據(jù),將文件中的數(shù)據(jù)統(tǒng)計(jì)、計(jì)算,并輸出,給人以直觀的方式顯示數(shù)據(jù)。 排序函數(shù),將數(shù)據(jù)以實(shí)發(fā)工資從大到小排序。

17、 2.2 系統(tǒng)流程設(shè)計(jì) 主函數(shù) main(); 登陸函數(shù) dl(); 菜單函數(shù) cd(); 增加函數(shù) zj_data(); 刪除函數(shù) sc_data() 更新函數(shù) gx_data(); 讀取函數(shù) read(); 查詢函數(shù) cz_data(); 顯示函數(shù) xs_data(); 重組數(shù)據(jù) cz_data(); 統(tǒng)計(jì)數(shù)據(jù) tj_data; 排序數(shù)據(jù) px_data(); 系統(tǒng)的總體流程圖 保存函數(shù) save(); 查詢 輸入查詢方式 按編號(hào)查詢 按名字查詢 查詢學(xué)生 輸出當(dāng)前學(xué)生數(shù)據(jù)

18、 查無此人 查詢函數(shù)的流程圖 3編碼實(shí)現(xiàn) #define MAX 100 #include #include #include struct user //登陸者信息 { char un[10]; char up[10]; }us[3] = { "aaa","111","bbb","222","ccc","333" }; struct yg //

19、員工結(jié)構(gòu)體 { short zt; //數(shù)據(jù)狀態(tài) long bh; //編號(hào) char name[20]; //名字 char time[11]; //時(shí)間 long money; //基本工資 long jj; //獎(jiǎng)金 long kk; //扣款 long sf; //實(shí)發(fā)工資 }; yg y[MAX]; //定義數(shù)據(jù)體數(shù)組 int r = 0;

20、 //全局變量,人數(shù),包括邏輯刪除人數(shù) int p = 0; //登陸的次數(shù),用全局變量能在登陸三次失敗時(shí)退出程序 void read() //讀取文件函數(shù) { 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("輸入錯(cuò)誤!請(qǐng)重新輸入!\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() //保存文件函數(shù) { 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() //增加數(shù)據(jù)函數(shù) { yg yuangong; char b; int i; int k = 0;

25、 yuangong.zt = 0; //新建員工信息時(shí),狀態(tài)為0 do //用循環(huán)來尋找、避免相同編號(hào)的員工 { printf("編號(hào):(例如:123456)\n"); scanf("%d", &yuangong.bh); for (i = 0; i < r; i++) if (y[i].bh == yuangong.bh&&y[i].zt==0) { printf("已有同編號(hào)員工無法添加!\n");

26、printf("請(qǐng)重新輸入!\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("獎(jiǎng)金:(例如:2000)\n"); scanf("%d", &yuangong.jj); printf("扣款:(例如:100)\n"); scanf("%d", &yuangong.kk); printf("實(shí)發(fā)工資為:(崗位工資+獎(jiǎng)金-扣款)\n"); yuangong.sf = yuangong.money + yuangong.jj - yuangong.kk; printf("%d\n", yuangong.sf); y[r] = yuangong; r++;

28、 //新建員工信息時(shí)人數(shù)r++ save(); printf("添加成功!\n"); getchar(); //防止下面一個(gè)%c讀取到上一個(gè)的回車 printf("是否繼續(xù)添加員工?(y/n)\n"); b = getchar(); while (getchar() != \n); if (b == Y || b == N) b += 32; while (b != y&&b != n) { printf("輸入錯(cuò)誤!請(qǐng)重新輸入!\n"); b = getchar(); while

29、(getchar() != \n) if (b == Y || b == N) b += 32; } if (b == y) zj_data(); } void gx_data() //更新數(shù)據(jù) { yg yuangong; long num; int i; printf("\n請(qǐng)輸入要更新的員工的編號(hào)!\n"); scanf("%d", &num); for (i = 0; i < r; i++) if (y[i].bh == num&&y[i].zt == 0)

30、 { yuangong = y[i]; printf("當(dāng)前該員工信息為:\n"); printf("編號(hào):%d\n", yuangong.bh); printf("姓名:%s\n", yuangong.name); printf("年月:%s\n", yuangong.time); printf("崗位工資:%d\n", yuangong.money); printf("獎(jiǎng)金:%d\n", yuangong.jj); printf("扣款:%d\n", yuangong.kk); printf("實(shí)發(fā)工資:%d\n

31、", yuangong.sf); printf("按下任意鍵輸入更新后的信息!\n"); getchar(); getchar(); printf("編號(hào):(例如: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("獎(jiǎng)金:(例如:2000)\n"); scanf("%d", &yuangong.jj); printf("扣款:(例如:100)\n"); scanf("%d", &yuangong.kk); printf("實(shí)發(fā)工資為:(崗位工資+獎(jiǎng)金-扣款)\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() //查詢數(shù)據(jù) { yg yuangong; int a, i; long num; char na[10]; printf("\n請(qǐng)選擇查詢方式!\n"); //分為按編號(hào)查詢和姓名查詢 printf(" *******************\

34、n"); printf(" * 1、編號(hào)查詢 *\n"); printf(" * 2、姓名查詢 *\n"); printf(" * 3、返回菜單 *\n"); printf(" *******************\n"); scanf("%d", &a); if (a == 1) { printf("請(qǐng)輸入查詢員工的編號(hào):"); scanf("%d", &num); for (i = 0; i < r; i++) //編號(hào)查詢則循環(huán)r次,查找狀態(tài)為0且編號(hào)與所輸入的數(shù)字相同的數(shù)據(jù)

35、if (y[i].zt == 0 && y[i].bh == num) { yuangong = y[i]; printf("當(dāng)前該員工信息為:\n"); printf("編號(hào):%d\n", yuangong.bh); printf("姓名:%s\n", yuangong.name); printf("年月:%s\n", yuangong.time); printf("崗位工資:%d\n", yuangong.money); printf("獎(jiǎng)金:%d\n", yuangong.jj); printf("扣

36、款:%d\n", yuangong.kk); printf("實(shí)發(fā)工資:%d\n", yuangong.sf); break; } else if (i == r - 1) printf("查無此人!\n"); } else if (a == 2) { printf("請(qǐng)輸入查詢員工的姓名:"); scanf("%s", na); for (i = 0; i < r; i++) //姓名查詢則循環(huán)r次,查找狀態(tài)為0且編號(hào)與所輸入的字符串相同的數(shù)據(jù) if ((strcmp(y[i]

37、.name, na) == 0) && y[i].zt == 0) { yuangong = y[i]; printf("當(dāng)前該員工信息為:\n"); printf("編號(hào):%d\n", yuangong.bh); printf("姓名:%s\n", yuangong.name); printf("年月:%s\n", yuangong.time); printf("崗位工資:%d\n", yuangong.money); printf("獎(jiǎng)金:%d\n", yuangong.jj); printf("扣款:

38、%d\n", yuangong.kk); printf("實(shí)發(fā)工資:%d\n", yuangong.sf); break; } else if (i == r - 1) printf("查無此人!\n"); } else if (a == 3) { } else { printf("輸入錯(cuò)誤!\n"); cz_data(); } } void sc_data() //刪除數(shù)據(jù) { yg yuangong

39、; long num; int a, i, b; char na[10]; printf("\n請(qǐng)選擇!\n"); //刪除也按編號(hào)刪除和姓名刪除 printf(" *********************\n"); printf(" * 1、按編號(hào)刪除 *\n"); printf(" * 2、按姓名刪除 *\n"); printf(" * 3、返回主菜單 *\n"); printf(" *********************\n"); scanf("

40、%d", &a); if (a == 1) { printf("請(qǐng)輸入要?jiǎng)h除員工的編號(hào):"); scanf("%d", &num); for (i = 0; i < r; i++) if (y[i].zt == 0 && y[i].bh == num) { yuangong = y[i]; printf("當(dāng)前該員工信息為:\n"); printf("編號(hào):%d\n", yuangong.bh); printf("姓名:%s\n", yuangong.name); printf("年月:%s\n", y

41、uangong.time); printf("崗位工資:%d\n", yuangong.money); printf("獎(jiǎng)金:%d\n", yuangong.jj); printf("扣款:%d\n", yuangong.kk); printf("實(shí)發(fā)工資:%d\n", yuangong.sf); y[i].zt = 1; save(); printf("刪除成功!\n"); getchar(); //防止下面一個(gè)%c讀取到上一個(gè)的回車 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("輸入錯(cuò)誤!請(qǐng)重新輸入!\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("請(qǐng)輸入刪除員工的姓名:"); scanf("%s", na); for (i = 0; i < r; i++) if ((strcmp(y[i].name, na) == 0) && y[i].zt == 0) { yuangong = y[i]; printf("當(dāng)前該員工信息為:\

44、n"); printf("編號(hào):%d\n", yuangong.bh); printf("姓名:%s\n", yuangong.name); printf("年月:%s\n", yuangong.time); printf("崗位工資:%d\n", yuangong.money); printf("獎(jiǎng)金:%d\n", yuangong.jj); printf("扣款:%d\n", yuangong.kk); printf("實(shí)發(fā)工資:%d\n", yuangong.sf); y[i].zt = 1; sa

45、ve(); printf("刪除成功!\n"); getchar(); //防止下面一個(gè)%c讀取到上一個(gè)的回車 printf("是否繼續(xù)刪除員工?(y/n)\n"); b = getchar(); while (getchar() != \n); if (b == Y || b == N) b += 32; while (b != y&&b != n) { printf("輸入錯(cuò)誤!請(qǐng)重新輸入!\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時(shí)不執(zhí)行操作返回主菜單 { } else {

47、 printf("輸入錯(cuò)誤!\n"); sc_data(); } } void xs_data() //顯示數(shù)據(jù) { yg yuangong[MAX], t; int a; int i, j; int k = 0; printf("\n請(qǐng)選擇顯示方式!\n"); printf(" *********************\n"); printf(" * 1、按編號(hào)顯示 *\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) //按編號(hào)顯示時(shí)用冒泡排序從大到小排

49、序 { for (i = 1; i <= r; i++) for (j = 0; j yuangong[j + 1].bh) { t = yuangong[j]; yuangong[j] = yuangong[j + 1]; yuangong[j + 1] = t; } printf("按編號(hào)排列如下:\n"); printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n", "編號(hào)", "姓名", "

50、年月", "崗位工資", "獎(jiǎng)金", "扣款", "實(shí)發(fā)工資"); for (i = 0; i

51、== 2) //按名字顯示時(shí)用冒泡排序從大到小排序,用strcmp來比較字符串的大小 { for (i = 1; i <= r; i++) for (j = 0; j 0) { t = yuangong[j]; yuangong[j] = yuangong[j + 1]; yuangong[j + 1] = t;

52、 } printf("按姓名排列如下:\n"); printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n", "編號(hào)", "姓名", "年月", "崗位工資", "獎(jiǎng)金", "扣款", "實(shí)發(fā)工資"); for (i = 0; i

53、money, yuangong[i].jj, yuangong[i].kk, yuangong[i].sf); printf("顯示完畢!\n"); } else if (a == 3) { } else { printf("輸入錯(cuò)誤!\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的數(shù)據(jù)剔除,并將剔除數(shù)據(jù)的個(gè)數(shù)記錄 if (y[i].zt == 1) { for (j = i; j < r; j++) y[j] = y[j + 1]; k++; } r -= k; //將人數(shù)r重新計(jì)算 save(); printf("重組成功!\n"); } void tj_data() //統(tǒng)計(jì)數(shù)據(jù) { yg yuangong[MAX]; int max

55、, m, k = 0; double ave = 0; int n = 0; int i; for (i = 0; i < r; i++) //計(jì)算文件中邏輯刪除的數(shù)據(jù)個(gè)數(shù)k { yuangong[i] = y[i]; if (yuangong[i].zt == 1) k++; } for (i = 0; i < r; i++) //將數(shù)組中第一個(gè)狀態(tài)為0的數(shù)據(jù)的實(shí)發(fā)工資賦給max,并記錄是第幾位,跳出循環(huán) if (yuangong[i].zt ==

56、0) { max = yuangong[i].sf; m = i; break; } if (yuangong[0].zt == 0) //第一個(gè)數(shù)據(jù)是否邏輯刪除?否,將實(shí)發(fā)工資賦給ave未計(jì)算的平均值 ave = yuangong[0].sf; for (i = 1; i < r; i++) //循環(huán)找出最大值,并將所有正常數(shù)據(jù)加入未計(jì)算的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); //計(jì)算ave for (i = 0; i < r; i++) //將數(shù)據(jù)中所有大于ave的數(shù)據(jù),統(tǒng)計(jì) if ((yuangong[i].sf > ave) && (yuangong[i].zt == 0)) n++; printf("\n最高實(shí)發(fā)工資員工信息為:\n"); //輸

58、出結(jié)果 printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n", "編號(hào)", "姓名", "年月", "崗位工資", "獎(jiǎng)金", "扣款", "實(shí)發(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("超過平均工資人數(shù)為:%d\n\n", n); } void px_data() //排序數(shù)據(jù) { 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++) //冒泡排序排序所有數(shù)據(jù) 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() //菜單函數(shù) { int l; do { printf("歡迎進(jìn)入員工工資管理系統(tǒng)菜單!\n");

62、 printf(" ________________\n"); printf(" *| 1.增加數(shù)據(jù) |*\n"); printf(" *| 2.更新數(shù)據(jù) |*\n"); printf(" *| 3.查詢數(shù)據(jù) |*\n"); printf(" *| 4.刪除數(shù)據(jù) |*\n"); printf(" *| 5.顯示數(shù)據(jù) |*\n"); printf(" *| 6.重組數(shù)據(jù) |*\n"); printf(" *| 7.統(tǒng)計(jì)輸出 |*\n"); printf(" *| 8.排序數(shù)據(jù) |*

63、\n"); printf(" *| 9.退出 |*\n"); printf(" *|[其它輸入為退出]|*\n"); printf(" *|________________|*\n\n"); printf("請(qǐng)輸入你的選擇:\n"); scanf("%d", &l); switch (l) { case 1:zj_data(); printf("即將返回主菜單\n"); system("PAUSE"); break; //system用于返回主菜單時(shí)等待一下 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、 //登陸函數(shù) { int i; char a[10], b[10]; printf("請(qǐng)輸入用戶名:\n"); scanf("%s", a); printf("請(qǐng)輸入密碼:\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)將強(qiáng)制退出!\n"); printf("按下任意鍵以退出程序!\n"); g

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!