課設(shè)C公司人員管理_第1頁(yè)
課設(shè)C公司人員管理_第2頁(yè)
課設(shè)C公司人員管理_第3頁(yè)
課設(shè)C公司人員管理_第4頁(yè)
課設(shè)C公司人員管理_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、課 程 設(shè) 計(jì) 報(bào) 告課程名稱(chēng) 算法與程序設(shè)計(jì) 課題名稱(chēng) 公司人員管理系統(tǒng) 專(zhuān) 業(yè) 班 級(jí) 學(xué) 號(hào) 姓 名 指導(dǎo)教師 2017年 12月 18 日課 程 設(shè) 計(jì) 任 務(wù) 書(shū)課程名稱(chēng) 算法與程序設(shè)計(jì)課 題 公司人員管理系統(tǒng) 專(zhuān)業(yè)班級(jí) 學(xué)生姓名 學(xué) 號(hào) 指導(dǎo)老師 審 批 任務(wù)書(shū)下達(dá)日期 2017 年 12 月 18日任務(wù)完成日期 2017 年 12 月 31日一、設(shè)計(jì)內(nèi)容與設(shè)計(jì)要求1設(shè)計(jì)內(nèi)容: 題目7:公司人員管理系統(tǒng) (一)、課程設(shè)計(jì)題目:公司職員管理系統(tǒng) (二)、目的與要求:1、目的: (1)要求學(xué)生達(dá)到熟練掌握C+語(yǔ)言的基本知識(shí)和技能; (2)基本掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本思路和方法; (3

2、)能夠利用所學(xué)的基本知識(shí)和技能,解決簡(jiǎn)單的面向?qū)ο蟪绦蛟O(shè)計(jì)問(wèn)題。 2、基本要求: (1)要求利用面向?qū)ο蟮姆椒ㄒ约癈+的編程思想來(lái)完成系統(tǒng)的設(shè)計(jì); (2)要求在設(shè)計(jì)的過(guò)程中,建立清晰的類(lèi)層次; (3)在系統(tǒng)中至少要定義四個(gè)類(lèi),每個(gè)類(lèi)中要有各自的屬性和方法; 3、創(chuàng)新要求: 在基本要求達(dá)到后,可進(jìn)行創(chuàng)新設(shè)計(jì),如根據(jù)查找結(jié)果進(jìn)行修改的功能及設(shè)計(jì)出比較友好的界面等。 (三)、設(shè)計(jì)方法和基本原理: 1、問(wèn)題描述(功能要求): 某小型公司,主要有四類(lèi)人員:經(jīng)理、兼職技術(shù)人員、銷(xiāo)售經(jīng)理和兼職推銷(xiāo)員?,F(xiàn)在,需要存儲(chǔ)這些人員的姓名、編號(hào)、級(jí)別、當(dāng)月薪水,計(jì)算月薪總額并顯示全部信息。 要求: 1)其中,人員編號(hào)

3、在生成人員信息時(shí)同時(shí)生成,每輸入一個(gè)人員信息編號(hào)順序加1。 2)程序?qū)λ腥藛T有提升級(jí)別的功能 3)月薪的計(jì)算方法是:經(jīng)理拿固定月薪,兼職技術(shù)人員按工作小時(shí)數(shù)領(lǐng)取月薪,兼職推銷(xiāo)員的報(bào)酬按該推銷(xiāo)員當(dāng)月銷(xiāo)售額提成 ,銷(xiāo)售經(jīng)理既拿固定月薪也領(lǐng)取銷(xiāo)售提成。 4)能按姓名或者編號(hào)顯示、查找、增加、刪除和保存各類(lèi)人員的信息 2、問(wèn)題的解決方案: 根據(jù)系統(tǒng)功能要求,可以將問(wèn)題解決分為以下步驟: (1)分析系統(tǒng)中的各個(gè)實(shí)體之間的關(guān)系及其屬性和行為;(2)根據(jù)問(wèn)題描述,設(shè)計(jì)系統(tǒng)的類(lèi)層次; (3)完成類(lèi)層次中各個(gè)類(lèi)的描述(包括屬性和方法); (4)完成類(lèi)中各個(gè)成員函數(shù)的定義; (5)完成系統(tǒng)的應(yīng)用模塊; (6)功

4、能調(diào)試; (7)完成系統(tǒng)總結(jié)報(bào)告以及系統(tǒng)使用說(shuō)明書(shū)2 設(shè)計(jì)要求:l 前言(包括課題的背景資料,別人已做了些什么,自己準(zhǔn)備做哪些改進(jìn))l 課程設(shè)計(jì)報(bào)告正文內(nèi)容(包括系統(tǒng)設(shè)計(jì)要求,設(shè)計(jì)思路,系統(tǒng)功能模塊圖,系統(tǒng)流程圖,類(lèi)的層次圖(包括類(lèi)成員列表),調(diào)試過(guò)程,關(guān)鍵程序代碼,總結(jié),參考書(shū)目等)。(一)需求分析系統(tǒng)設(shè)計(jì)目的與意義系統(tǒng)功能需求(系統(tǒng)流程圖);輸入輸出的要求;(二)總體設(shè)計(jì)系統(tǒng)功能分析;系統(tǒng)功能模塊劃分與設(shè)計(jì)(系統(tǒng)功能模塊圖)。(三)詳細(xì)設(shè)計(jì)數(shù)據(jù)庫(kù)需求分析數(shù)據(jù)庫(kù)概念結(jié)構(gòu)設(shè)計(jì)(ER圖);數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)設(shè)計(jì)。類(lèi)層次圖(四)界面設(shè)計(jì)與各功能模塊實(shí)現(xiàn)(五)系統(tǒng)調(diào)試調(diào)試問(wèn)題出現(xiàn)的主要問(wèn)題:編譯語(yǔ)法錯(cuò)誤

5、及修改,重點(diǎn)是運(yùn)行邏輯問(wèn)題修改和調(diào)整(六)使用說(shuō)明及編程體會(huì)說(shuō)明如何使用你編寫(xiě)的程序,詳細(xì)列出每一步的操作步驟。(七)關(guān)鍵源程序(帶注釋?zhuān)﹍ 書(shū)寫(xiě)格式a要求用A4紙打印成冊(cè)b正文格式:一級(jí)標(biāo)題用3號(hào)黑體,二級(jí)標(biāo)題用四號(hào)宋體加粗,正文用小四號(hào)宋體;行距為22。c正文的內(nèi)容:正文總字?jǐn)?shù)要求在3000字左右(不含程序原代碼)。d封面格式如下頁(yè)。l 考核方式指導(dǎo)老師負(fù)責(zé)驗(yàn)收程序的運(yùn)行結(jié)果,并結(jié)合學(xué)生的工作態(tài)度、實(shí)際動(dòng)手能力、創(chuàng)新精神和設(shè)計(jì)報(bào)告等進(jìn)行綜合考評(píng),并按優(yōu)秀、良好、中等、及格和不及格五個(gè)等級(jí)給出每位同學(xué)的課程設(shè)計(jì)成績(jī)。具體考核標(biāo)準(zhǔn)包含以下幾個(gè)部分:a平時(shí)出勤 (占10%)b系統(tǒng)需求分析、功能設(shè)

6、計(jì)、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)及程序總體結(jié)構(gòu)合理與否(占10%)c程序能否完整、準(zhǔn)確地運(yùn)行,個(gè)人能否獨(dú)立、熟練地調(diào)試程序(占40%)d設(shè)計(jì)報(bào)告(占30%)注意:不得抄襲他人的報(bào)告(或給他人抄襲),一旦發(fā)現(xiàn),成績(jī)?yōu)榱惴?。e獨(dú)立完成情況(占10%)。l 課程驗(yàn)收要求a判定算法設(shè)計(jì)的合理性,運(yùn)行相關(guān)程序,獲得正確的數(shù)值結(jié)果。b回答有關(guān)問(wèn)題。c提交課程設(shè)計(jì)報(bào)告。d提交軟盤(pán)(源程序、設(shè)計(jì)報(bào)告文檔)。e依內(nèi)容的創(chuàng)新程度,完善程序情況及對(duì)程序講解情況打分。二、  教材及參考書(shū) 朱戰(zhàn)立等著, C+面向?qū)ο蟪绦蛟O(shè)計(jì),人民郵電出版社;鄭莉著, C+ 語(yǔ)言程序設(shè)計(jì)(含實(shí)驗(yàn)指導(dǎo)書(shū))。 清華大學(xué)出版社 ( 結(jié)構(gòu)化程序設(shè)計(jì)部

7、分 ) 錢(qián)能主編 ,C+ 程序設(shè)計(jì)教程,清華大學(xué)出版社, 2000.11 戴鋒編著, Visual C+ 程序設(shè)計(jì)基礎(chǔ) , 清華大學(xué)出版社 ,2001.4 呂日著, C+ 程序設(shè)計(jì)教程,清華大學(xué)出版社, C+ 大學(xué)教程,美國(guó) Harvey M.Deitel 等 三、進(jìn)度安排1、 班級(jí): 2、 主講教師:3、 輔導(dǎo)教師:4、 時(shí)間安排:第 18周 星期一 8時(shí):30分11時(shí):30分;14時(shí):00分17時(shí):00分 星期二 8時(shí):30分11時(shí):30分;14時(shí):00分17時(shí):00分 星期三 8時(shí):30分11時(shí):30分;14時(shí):00分17時(shí):00分 星期四8時(shí):30分11時(shí):30分;14時(shí):00分17時(shí)

8、:00分 星期五 8時(shí):30分11時(shí):30分;14時(shí):00分17時(shí):00分附:選題方案:所選題目根據(jù)學(xué)生學(xué)號(hào)確定,學(xué)號(hào)模7加1,即(學(xué)號(hào)%9+1)。如你的學(xué)號(hào)為17,則所選題目號(hào)為:17%7+14(題目4)。同班的同學(xué)自由組合,可以最多三個(gè)選同一題的同學(xué)共同完成一項(xiàng)作業(yè)。學(xué)有余力的同學(xué)可以自由組合做題目8,可以自由設(shè)計(jì)吉祥物的圖案。前言這次18周我們進(jìn)行了C+的面向?qū)ο蟪绦蛟O(shè)計(jì)的課程設(shè)計(jì),這次我們的課題是課題7 公司人員管理系統(tǒng) 當(dāng)初拿到這個(gè)課題的時(shí)候一臉懵逼目錄(一)需分求析9(二)系統(tǒng)總體設(shè)計(jì)9(三)詳細(xì)設(shè)計(jì)11(四)功能模塊實(shí)現(xiàn)流程圖13(五)系統(tǒng)調(diào)試17(六)源程序19理學(xué)院課程設(shè)計(jì)評(píng)

9、分表32(一)需分求析面對(duì)小公司職員的薪資發(fā)放問(wèn)題及公司人員升職調(diào)整問(wèn)題需作出公司人員管理系統(tǒng)來(lái)解決這個(gè)問(wèn)題。目的是要求: (1) 其中,人員編號(hào)在生成人員信息時(shí)同時(shí)生成,每輸入一個(gè)人員信息編號(hào)順序加1。 (2) 程序?qū)λ腥藛T有提升級(jí)別的功能 (3) 月薪的計(jì)算方法是:經(jīng)理拿固定月薪,兼職技術(shù)人員按工作小時(shí)數(shù)領(lǐng)取月薪,兼職推銷(xiāo)員的報(bào)酬按該推銷(xiāo)員當(dāng)月銷(xiāo)售額提成 ,銷(xiāo)售經(jīng)理既拿固定月薪也領(lǐng)取銷(xiāo)售提成。 (4)能按姓名或者編號(hào)顯示、查找、增加、刪除和保存各類(lèi)人員的信息 (二)系統(tǒng)總體設(shè)計(jì)(1)系統(tǒng)分析:根據(jù)問(wèn)題描述和要求,系統(tǒng)要求能夠按姓名或者編號(hào)顯示、查找、增加、刪除和保存各類(lèi)人員的信息。確定程

10、序至少應(yīng)該具備如下功能:“查詢(xún)?nèi)藛T”、“增加人員”、“刪除人員”、“數(shù)據(jù)存盤(pán)”基本模塊。系統(tǒng)既然具有“數(shù)據(jù)存盤(pán)”功能人員數(shù)據(jù)可以保存到磁盤(pán)文件,那么也就意味著今后可以從磁盤(pán)文件讀出人員數(shù)據(jù),所以系統(tǒng)增加了“人員數(shù)據(jù)裝入”模塊,以方便用戶(hù)使用、避免數(shù)據(jù)重復(fù)錄入??紤]到系統(tǒng)實(shí)現(xiàn)簡(jiǎn)捷,人員數(shù)據(jù)文件采用文本文件,人員數(shù)據(jù)文件名:Person.txt。做為一個(gè)完整系統(tǒng),除了具有增加人員,刪除人員信息模塊,還應(yīng)該具有修改人員相關(guān)信息的功能,所以本系統(tǒng)設(shè)計(jì)時(shí)考慮增加“修改人員”模塊??紤]到根據(jù)編號(hào)查找人員信息功能在“刪除人員”、“修改人員”等模塊都使用,所以可以考慮設(shè)置為一個(gè)模塊??紤]到系統(tǒng)要求人員編號(hào)在生

11、成人員信息時(shí)同時(shí)生成,每輸入一個(gè)人員信息編號(hào)順序加1。這樣就要求人員編號(hào)在增加人員時(shí)自動(dòng)生成(增加1)且不重復(fù)。根據(jù)這個(gè)要求,可以考慮設(shè)置一個(gè)全局量:“當(dāng)前最大編號(hào)”,每增加一個(gè)人員,當(dāng)前最大編號(hào)自動(dòng)增1,然后新增加人員使用這個(gè)編號(hào)。為了保證系統(tǒng)能記憶這個(gè)編號(hào),可以使用一個(gè)數(shù)據(jù)文件保存當(dāng)前這個(gè)編號(hào)。系統(tǒng)每次開(kāi)始運(yùn)行前從文件讀入這個(gè)編號(hào),隨著人員增加,編號(hào)自動(dòng)增加,系統(tǒng)每次運(yùn)行結(jié)束時(shí)將這個(gè)編號(hào)寫(xiě)入文件。本系統(tǒng)將初值(沒(méi)有一個(gè)用戶(hù)時(shí))設(shè)置為0??紤]到人員的許多固定信息如:經(jīng)理、銷(xiāo)售經(jīng)理的固定月薪,銷(xiāo)售經(jīng)理、銷(xiāo)售人員提成,技術(shù)人員小時(shí)工資等都是一些不需要每個(gè)人員都要輸入的信息,所以可以將這些信息都保

12、存在一個(gè)數(shù)據(jù)文件中,本系統(tǒng)為了方便起見(jiàn),將這些信息與“最大編號(hào)”全部保存在一個(gè)文件中,并使用“基礎(chǔ)數(shù)據(jù)設(shè)置”模塊進(jìn)行設(shè)置和管理?;A(chǔ)數(shù)據(jù)文件也采用文本文件,基礎(chǔ)數(shù)據(jù)文件名:Base.txt。本系統(tǒng)還提供“查詢(xún)本月經(jīng)營(yíng)信息”幫助計(jì)算銷(xiāo)售總額,工資總額,并按照公式計(jì)算本月盈虧。綜合考慮系統(tǒng)具有下面8項(xiàng)功能模塊:增加人員,刪除人員,修改人員,查詢(xún)本月經(jīng)營(yíng)信息,基礎(chǔ)數(shù)據(jù)設(shè)置,數(shù)據(jù)存盤(pán),數(shù)據(jù)裝入系統(tǒng)使用的數(shù)據(jù)文件格式如下:Base.txt:(格式:項(xiàng)目 數(shù)據(jù))經(jīng)理固定月薪3000銷(xiāo)售經(jīng)理固定月薪1000銷(xiāo)售經(jīng)理提成1銷(xiāo)售人員提成2技術(shù)人員小時(shí)工資20ID6Person.txt:(格式:編號(hào),姓名,人員類(lèi)

13、別,其它數(shù)據(jù),銷(xiāo)售員銷(xiāo)售額,技術(shù)人員工作小時(shí))2wang31000003liu14wu41005huang26tao3150000注:人員類(lèi)型編號(hào)1經(jīng)理;2銷(xiāo)售經(jīng)理;3銷(xiāo)售員;4技術(shù)人員(2) 系統(tǒng)功能模塊劃分與設(shè)計(jì)使用面向?qū)ο蟮某绦蛟O(shè)計(jì)思想進(jìn)行分析,整個(gè)系統(tǒng)涉及兩大類(lèi)信息和操作,公司,人員。所以系統(tǒng)主要涉及兩個(gè)大類(lèi):公司類(lèi)Company、人員類(lèi)Person。系統(tǒng)的總體框架就是公司類(lèi),人員類(lèi)的定義;主函數(shù)中定義一個(gè)公司對(duì)象,循環(huán)顯示主菜單并根據(jù)用戶(hù)選擇調(diào)用公司類(lèi)的相應(yīng)方法(成員函數(shù))。(1)公司類(lèi)Company:考慮系統(tǒng)操作的人員信息的數(shù)量具有不確定性,所以考慮使用鏈表保存、處理人員信息。公司

14、類(lèi)包含:所有人員信息的一個(gè)不帶頭結(jié)點(diǎn)的鏈表(作為數(shù)據(jù)成員)及可以對(duì)人員信息進(jìn)行增,刪,改,查詢(xún)經(jīng)營(yíng)信息,基礎(chǔ)數(shù)據(jù)設(shè)置,數(shù)據(jù)存盤(pán),數(shù)據(jù)裝入等操作的相關(guān)模塊(Add,Delete,Modify,Query,Set,Save,Load)作為成員函數(shù)。(2)人員類(lèi)Person:所有人員都具有的公共信息及操作可以使用人員類(lèi)進(jìn)行描述。由于系統(tǒng)具有4類(lèi)人員且4類(lèi)人員數(shù)據(jù),操作有所不同,如銷(xiāo)售員包含銷(xiāo)售額,而技術(shù)人員包含工作小時(shí)數(shù)且計(jì)算工資的方法不同,所以應(yīng)當(dāng)為4類(lèi)人員創(chuàng)建相應(yīng)的Person類(lèi)的派生類(lèi)。(3)為了使公司類(lèi)可以方便處理人員信息,可以考慮將公司類(lèi)確定為人員類(lèi)的友元類(lèi)或者人員類(lèi)提供公共的方法以便公司

15、類(lèi)進(jìn)行操作。為了公司類(lèi)可以用共同方法操作人員類(lèi),可以將人員類(lèi)的方法確定為虛函數(shù)(三)詳細(xì)設(shè)計(jì)(1)數(shù)據(jù)庫(kù)需求分析使用面向?qū)ο蟮某绦蛟O(shè)計(jì)思想進(jìn)行分析,整個(gè)系統(tǒng)涉及兩大類(lèi)信息和操作,公司,人員。所以系統(tǒng)主要涉及兩個(gè)大類(lèi):公司類(lèi)Company、人員類(lèi)Person。系統(tǒng)的總體框架就是公司類(lèi),人員類(lèi)的定義;主函數(shù)中定義一個(gè)公司對(duì)象,循環(huán)顯示主菜單并根據(jù)用戶(hù)選擇調(diào)用公司類(lèi)的相應(yīng)方法(成員函數(shù))。(1)公司類(lèi)Company:考慮系統(tǒng)操作的人員信息的數(shù)量具有不確定性,所以考慮使用鏈表保存、處理人員信息。公司類(lèi)包含:所有人員信息的一個(gè)不帶頭結(jié)點(diǎn)的鏈表(作為數(shù)據(jù)成員)及可以對(duì)人員信息進(jìn)行增,刪,改,查詢(xún)經(jīng)營(yíng)信息,

16、基礎(chǔ)數(shù)據(jù)設(shè)置,數(shù)據(jù)存盤(pán),數(shù)據(jù)裝入等操作的相關(guān)模塊(Add,Delete,Modify,Query,Set,Save,Load)作為成員函數(shù)。(2)人員類(lèi)Person:所有人員都具有的公共信息及操作可以使用人員類(lèi)進(jìn)行描述。由于系統(tǒng)具有4類(lèi)人員且4類(lèi)人員數(shù)據(jù),操作有所不同,如銷(xiāo)售員包含銷(xiāo)售額,而技術(shù)人員包含工作小時(shí)數(shù)且計(jì)算工資的方法不同,所以應(yīng)當(dāng)為4類(lèi)人員創(chuàng)建相應(yīng)的Person類(lèi)的派生類(lèi)。(3)為了使公司類(lèi)可以方便處理人員信息,可以考慮將公司類(lèi)確定為人員類(lèi)的友元類(lèi)或者人員類(lèi)提供公共的方法以便公司類(lèi)進(jìn)行操作。為了公司類(lèi)可以用共同方法操作人員類(lèi),可以將人員類(lèi)的方法確定為虛函數(shù)。 (2)數(shù)據(jù)庫(kù)概念結(jié)構(gòu)設(shè)

17、計(jì)(ER圖);(3)類(lèi)的層次圖Person No,Name,Duty,Earning,next,Person(),CalcSalary(),Output()Manager Sales SalesManager Technician Manager(), Amount, Amount, t,CalcSalary(), Sales(),GetAmount(), SalesManager(), Technician(),Output() SetAmount(), SetAmount(), GetT(),SetT(),CalcSalary(), CalcSalary(), CalcSalary(),O

18、utput() Output() Output()其中:(1)Person 類(lèi)的No-人員編號(hào),Name-人員姓名,Duty-人員類(lèi)別,Earning-工資,next-指向下一個(gè)人員的指針;Person 類(lèi)的CalcSalary(),Output()定義為純虛函數(shù)分別表示要計(jì)算人員工資和輸出人員信息,由于定義純虛函數(shù),所以Person是抽象類(lèi),具體計(jì)算工資,輸出人員信息由派生類(lèi)完成。(2)各個(gè)派生的類(lèi),包含本類(lèi)對(duì)象特有的數(shù)據(jù),Sales:Amount-銷(xiāo)售員銷(xiāo)售額,SalesManager:Amount-銷(xiāo)售經(jīng)理的總銷(xiāo)售額(系統(tǒng)統(tǒng)計(jì)各個(gè)銷(xiāo)售員銷(xiāo)售額得到銷(xiāo)售經(jīng)理的總銷(xiāo)售額),Technician

19、:t-技術(shù)人員工作小時(shí)數(shù)。Company Person *Worker,Clear(),Company(),Company(),Add(),Delete(),Modify(),Query(),Set(),Save(),Load()其中:(1)Worker就是人員鏈表。(2)Clear()用于清除人員鏈表所有結(jié)點(diǎn)。(3)Add(),Delete(),Modify(),Query(),Set(),Save(),Load()分別表示系統(tǒng)各個(gè)功能模塊:增加人員,刪除人員,修改人員,查詢(xún)本月經(jīng)營(yíng)信息,基礎(chǔ)數(shù)據(jù)設(shè)置,數(shù)據(jù)存盤(pán),數(shù)據(jù)裝入(4) 功能模塊實(shí)現(xiàn)流程圖(1)主函數(shù)流程(2) Company:Add

20、()(3) Company:Delete()(4) Company:Modify5) Company:Query() (6)Company:Save()(7) Company:Load()(五)系統(tǒng)調(diào)試(六)心得體會(huì) 這次課程設(shè)計(jì)我們小組的課題是公司員工管理系統(tǒng),剛剛拿到這個(gè)課題是覺(jué)得很,畢竟我們只學(xué)習(xí)了一個(gè)學(xué)期的C+的面向?qū)ο蟪绦蛟O(shè)計(jì),設(shè)計(jì)一個(gè)比較系統(tǒng)的又相對(duì)靈活的系統(tǒng)是很難的,所以我們?nèi)齻€(gè)人決定去網(wǎng)上找一個(gè)已解決這個(gè)課題的c+程序,我們要做的就是對(duì)原有的做出修改 所以我們先看了源程序在理解的的基礎(chǔ)上做出修改完善,在理解源程序的時(shí)候?qū)︻?lèi)的理解還不夠深刻比如說(shuō)在類(lèi)的定義的時(shí)候容易出現(xiàn)理解上的偏

21、差,雖然是學(xué)過(guò)類(lèi)的相關(guān)知識(shí)但是還是不足以完全理解,這方面我們會(huì)努力的學(xué)習(xí)。課程設(shè)計(jì)旨在鍛煉人的系統(tǒng)性設(shè)計(jì)思維和對(duì)學(xué)到的知識(shí)的應(yīng)用。自主編程是一個(gè)需要長(zhǎng)期積累的過(guò)程。對(duì)源程序的修改就會(huì)應(yīng)用到這些。程序設(shè)計(jì)是一門(mén)實(shí)踐性很強(qiáng)的課程,既要掌握概念,又要?jiǎng)邮志幊?,還要上機(jī)調(diào)試運(yùn)行,這次設(shè)計(jì)更讓我們深刻體會(huì)到這一點(diǎn)。我們不僅編程能力得到提高,而且學(xué)會(huì)掌握通過(guò)分析問(wèn)題,并用專(zhuān)業(yè)知識(shí)去解決問(wèn)題。從分析問(wèn)題到算法編寫(xiě),中間的過(guò)程只有實(shí)踐才會(huì)真正明白。(七)源程序/*本程序有關(guān)的兩個(gè)數(shù)據(jù)文件:base.txt基礎(chǔ)數(shù)據(jù)文件(必須存在,且按規(guī)定格式保存)person.txt人員信息文件(可選)*/#include &

22、lt;iostream.h>#include <fstream.h>#include <ctype.h>#include <string.h>/全局?jǐn)?shù)據(jù),對(duì)象double ManagerSalary; /經(jīng)理固定月薪double SalesManagerSalary; /銷(xiāo)售經(jīng)理固定月薪double SalesManagerPercent; /銷(xiāo)售經(jīng)理提成double SalesPercent; /銷(xiāo)售人員提成double WagePerHour; /技術(shù)人員小時(shí)工資int ID; /員工標(biāo)識(shí)(要保證唯一)class Person /員工類(lèi)protec

23、ted: int No; /編號(hào) char Name20; /姓名 int Duty; /崗位 double Earning; /收入 Person *next;public: Person(char ID,char *Name,int Duty) this->Duty=Duty; strcpy(this->Name,Name); this->No=ID; virtual void CalcSalary()=0; virtual void Output()=0; friend class Company;class Manager:public Person /經(jīng)理類(lèi)publ

24、ic: Manager(char ID,char *Name,int Duty):Person(ID,Name,Duty) void CalcSalary()Earning=ManagerSalary; void Output() CalcSalary(); cout<<No<<"t"<<Name<<"t經(jīng)理t"<<Earning<<endl; ;class SalesManager:public Person /銷(xiāo)售經(jīng)理類(lèi)private: double Amount;public:

25、 SalesManager(char ID,char *Name,int Duty):Person(ID,Name,Duty) void SetAmount(double s) Amount=s; void CalcSalary() Earning=SalesManagerSalary+Amount*SalesManagerPercent/100; void Output() CalcSalary(); cout<<No<<"t"<<Name<<"t銷(xiāo)售經(jīng)理t"<<Earning<<

26、endl; ;class Technician:public Person /技術(shù)員類(lèi)private: double t;public: Technician(char ID,char *Name,int Duty,double T):Person(ID,Name,Duty) this->t=T; double GetT() return t; void SetT(double T) this->t=T; void CalcSalary() Earning=WagePerHour*t; void Output() CalcSalary(); cout<<No<&l

27、t;"t"<<Name<<"t技術(shù)員t"<<t<<"t"<<Earning<<endl; ;class Sales:public Person /銷(xiāo)售員類(lèi)private: double Amount;public: Sales(char ID,char *Name,int Duty,double Amount):Person(ID,Name,Duty) this->Amount=Amount; double GetAmount() return Amount

28、; void SetAmount(double Amount) this->Amount=Amount; void CalcSalary() Earning=SalesPercent/100*Amount; void Output() CalcSalary(); cout<<No<<"t"<<Name<<"t銷(xiāo)售員t"<<Amount<<"t"<<Earning<<endl; ;class Company /公司類(lèi)private: P

29、erson *Worker; /員工表 void Clear(); /清除內(nèi)存中數(shù)據(jù)public: Company() Worker=0; Load(); Company() Person *p; p=Worker; while(p) p=p->next; delete Worker; Worker=p; Worker=0; void Add(); /增加人員 void Delete(); /刪除人員 void Modify(); /修改人員 void Query(); /查詢(xún)?nèi)藛T void Set(); /基礎(chǔ)數(shù)據(jù)設(shè)置 void Save(); /數(shù)據(jù)存盤(pán)(包括基礎(chǔ)數(shù)據(jù),人員數(shù)據(jù)) v

30、oid Load(); /數(shù)據(jù)裝入(包括基礎(chǔ)數(shù)據(jù),人員數(shù)據(jù)); void Company:Clear() /清除內(nèi)存中人員數(shù)據(jù)(內(nèi)部使用) Person* p=Worker; while(p) Worker=p->next; delete p; p=Worker; void Company:Add() Person *p; /新結(jié)點(diǎn)指針 int Duty; char Name20; double Amount,T; cout<<"n* 新增員工 *n" /輸入員工信息 ID+; cout<<"輸入崗位(1-經(jīng)理2-銷(xiāo)售經(jīng)理3-銷(xiāo)售員4

31、-技術(shù)員):" cin>>Duty; cout<<"輸入姓名:" cin>>Name; if(Duty=3) cout<<"本月銷(xiāo)售額:" cin>>Amount; else if(Duty=4) cout<<"本月工作小時(shí)數(shù)(0-168):" cin>>T; /創(chuàng)建新員工結(jié)點(diǎn) switch(Duty) case 1:p=new Manager(ID,Name,Duty); break; case 2:p=new SalesManager(I

32、D,Name,Duty); break; case 3:p=new Sales(ID,Name,Duty,Amount); break; case 4:p=new Technician(ID,Name,Duty,T); break; p->next=0; /員工結(jié)點(diǎn)加入鏈表 if(Worker) /若已經(jīng)存在結(jié)點(diǎn) Person *p2; p2=Worker; while(p2->next) /查找尾結(jié)點(diǎn) p2=p2->next; p2->next=p; /連接 else /若不存在結(jié)點(diǎn)(表空) Worker=p; /連接 void Company:Delete() /刪

33、除人員 int No; cout<<"n* 刪除員工 *n" cout<<"ID請(qǐng)輸入數(shù)字!n" cout<<"ID:" cin>>No; /查找要?jiǎng)h除的結(jié)點(diǎn) Person *p1,*p2; p1=Worker; while(p1) if(p1->No=No) break; else p2=p1; p1=p1->next; /刪除結(jié)點(diǎn) if(p1!=NULL)/若找到結(jié)點(diǎn),則刪除 if(p1=Worker) /若要?jiǎng)h除的結(jié)點(diǎn)是第一個(gè)結(jié)點(diǎn) Worker=p1->next;

34、 delete p1; else /若要?jiǎng)h除的結(jié)點(diǎn)是后續(xù)結(jié)點(diǎn) p2->next=p1->next; delete p1; cout<<"找到并刪除n" else /未找到結(jié)點(diǎn) cout<<"未找到!n"void Company:Modify() int No,Duty; char Name20; double Amount,T; cout<<"n* 修改員工 *n" cout<<"ID請(qǐng)輸入數(shù)字!n" cout<<"ID:"

35、 cin>>No; /查找要修改的結(jié)點(diǎn) Person *p1,*p2; p1=Worker; while(p1) if(p1->No=No) break; else p2=p1; p1=p1->next; /修改結(jié)點(diǎn) if(p1!=NULL)/若找到結(jié)點(diǎn) p1->Output(); cout<<"調(diào)整崗位(1-經(jīng)理2-銷(xiāo)售經(jīng)理3-銷(xiāo)售員4-技術(shù)員):" cin>>Duty; if(p1->Duty!=Duty) /若崗位發(fā)生變動(dòng) /修改其它數(shù)據(jù) cout<<"輸入姓名:" cin&g

36、t;>Name; if(Duty=3) cout<<"本月銷(xiāo)售額:" cin>>Amount; else if(Duty=4) cout<<"本月工作小時(shí)數(shù)(0-168):" cin>>T; /創(chuàng)建新員工結(jié)點(diǎn) Person *p3; switch(Duty) case 1:p3=new Manager(p1->No,Name,Duty); break; case 2:p3=new SalesManager(p1->No,Name,Duty); break; case 3:p3=new Sa

37、les(p1->No,Name,Duty,Amount); break; case 4:p3=new Technician(p1->No,Name,Duty,T); break; /員工結(jié)點(diǎn)替換到鏈表 p3->next=p1->next; if(p1=Worker) /若要替換的結(jié)點(diǎn)是第一個(gè)結(jié)點(diǎn) Worker=p3; else /若要?jiǎng)h除的結(jié)點(diǎn)是后續(xù)結(jié)點(diǎn) p2->next=p3; /刪除原來(lái)的員工結(jié)點(diǎn) delete p1; else /若崗位沒(méi)有變動(dòng) cout<<"輸入姓名:" cin>>p1->Name; if(

38、Duty=3) cout<<"本月銷(xiāo)售額:"cin>>Amount; (Sales *)p1)->SetAmount(Amount); else if(Duty=4) cout<<"本月工作小時(shí)數(shù)(0-168):"cin>>T; (Technician *)p1)->SetT(T); cout<<"修改成功!n" else /未找到結(jié)點(diǎn) cout<<"未找到!n"void Company:Query() cout<<&q

39、uot;n* 查詢(xún)?nèi)藛T本月銷(xiāo)售信息 *n" double sum=0; /銷(xiāo)售額總和 Person *p=Worker; while(p) if(p->Duty=3)sum+=(Sales *)p)->GetAmount(); p=p->next; p=Worker; double sum2=0; /工資總和 while(p) if(p->Duty=2)(SalesManager *)p)->SetAmount(sum); p->Output(); sum2+=p->Earning; p=p->next; cout<<&qu

40、ot;本月盈利:"<<sum*0.20-sum2<<endl; cout<<"(按照20利潤(rùn)計(jì)算)n"void Company:Set() cout<<"n* 設(shè)置基礎(chǔ)數(shù)據(jù) *n" cout<<"經(jīng)理固定月薪"<<ManagerSalary<<"元:"cin>>ManagerSalary; cout<<"銷(xiāo)售經(jīng)理固定月薪"<<SalesManagerSalary<

41、;<"元:" cin>>SalesManagerSalary; cout<<"銷(xiāo)售經(jīng)理提成"<<SalesManagerPercent<<":"cin>>SalesManagerPercent; cout<<"銷(xiāo)售人員提成"<<SalesPercent<<":"cin>>SalesPercent; cout<<"技術(shù)人員小時(shí)工資"<<Wag

42、ePerHour<<"(元/小時(shí)):" cin>>WagePerHour; cout<<"員工標(biāo)識(shí)>="<<ID<<":"cin>>ID;void Company:Save() /數(shù)據(jù)存盤(pán)(包括基礎(chǔ)數(shù)據(jù),人員數(shù)據(jù)),均采用文本文件 ofstream fPerson,fBase; char c; cout<<"n保存人員和基礎(chǔ)數(shù)據(jù),是否繼續(xù)?Y/N:" cin>>c; if(toupper(c)!='Y

43、9;)return; /保存人員編號(hào)、姓名、崗位 fPerson.open("person.txt",ios:out); Person *p=Worker; while(p) fPerson<<p->No<<"t"<<p->Name<<"t"<<p->Duty<<"t"cout<<"人員編號(hào)"<<"t"<<"姓名"<<&

44、quot;t"<<"崗位"<<"t"<<endl;/既保存在文檔中也顯示在運(yùn)行界面中cout<<p->No<<"tt"<<p->Name<<"t"<<p->Duty<<"t"<<endl; if(p->Duty=3)fPerson<<(Sales*)p)->GetAmount()<<"t"cou

45、t<<(Sales*)p)->GetAmount()<<"t"<<endl; else if(p->Duty=4)fPerson<<(Technician *)p)->GetT()<<"t"cout<<(Technician *)p)->GetT()<<"t"<<endl; fPerson<<endl; p=p->next; fPerson.close(); /保存基礎(chǔ)數(shù)據(jù) fBase.open(&

46、quot;base.txt",ios:out); cout<<"基礎(chǔ)數(shù)據(jù)顯示:"<<endl;/基礎(chǔ)數(shù)據(jù)既保存在文檔中也顯示在屏幕上 fBase<<"經(jīng)理固定月薪t"<<ManagerSalary<<endl; cout<<"經(jīng)理固定月薪t"<<ManagerSalary<<endl; fBase<<"銷(xiāo)售經(jīng)理固定月薪t"<<SalesManagerSalary<<endl;

47、 cout<<"銷(xiāo)售經(jīng)理固定月薪t"<<SalesManagerSalary<<endl; fBase<<"銷(xiāo)售經(jīng)理提成t"<<SalesManagerPercent<<endl; cout<<"銷(xiāo)售經(jīng)理提成t"<<SalesManagerPercent<<endl; fBase<<"銷(xiāo)售人員提成t"<<SalesPercent<<endl; cout<<&qu

48、ot;銷(xiāo)售人員提成t"<<SalesPercent<<endl; fBase<<"技術(shù)人員小時(shí)工資t"<<WagePerHour<<endl; cout<<"技術(shù)人員小時(shí)工資t"<<WagePerHour<<endl; fBase<<"IDt"<<ID<<endl; cout<<"IDt"<<ID<<endl; fPerson.close(

49、); cout<<"n保存人員和基礎(chǔ)數(shù)據(jù)已經(jīng)完成.n"void Company:Load() /數(shù)據(jù)裝入(包括基礎(chǔ)數(shù)據(jù),人員數(shù)據(jù)) /基礎(chǔ)數(shù)據(jù)裝入 ifstream fBase; char buf80; /buf用于保存數(shù)據(jù)文件中的注釋字符串 fBase.open("base.txt",ios:in); fBase>>buf>>ManagerSalary; /經(jīng)理固定月薪 fBase>>buf>>SalesManagerSalary; /銷(xiāo)售經(jīng)理固定月薪 fBase>>buf>>SalesManagerPercent; /銷(xiāo)售經(jīng)理提成 fBase>>buf>>SalesPercent; /銷(xiāo)售人員提成 fBase>>buf>>WagePerHour; /技術(shù)人員小時(shí)工資 fBase>>buf>>ID; /

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論