停車場(chǎng)管理系統(tǒng)-數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)及圖書(shū)館服務(wù)系統(tǒng)_第1頁(yè)
停車場(chǎng)管理系統(tǒng)-數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)及圖書(shū)館服務(wù)系統(tǒng)_第2頁(yè)
停車場(chǎng)管理系統(tǒng)-數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)及圖書(shū)館服務(wù)系統(tǒng)_第3頁(yè)
停車場(chǎng)管理系統(tǒng)-數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)及圖書(shū)館服務(wù)系統(tǒng)_第4頁(yè)
停車場(chǎng)管理系統(tǒng)-數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)及圖書(shū)館服務(wù)系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩81頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

學(xué)號(hào):課程設(shè)計(jì)題目圖書(shū)館服務(wù)系統(tǒng)學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班級(jí)計(jì)算機(jī)班姓名指導(dǎo)教師20XX年12月10日目錄圖書(shū)館服務(wù)系統(tǒng) 2一、需求分析 21.需求概括 22、數(shù)據(jù)流圖 3二.概念模型設(shè)計(jì) 41.圖書(shū)管理系統(tǒng) 42.設(shè)計(jì)分ER圖 53.設(shè)計(jì)全局ER圖 6三、關(guān)系模型設(shè)計(jì) 7四、數(shù)據(jù)庫(kù)實(shí)現(xiàn) 81.創(chuàng)建圖書(shū)館管理系統(tǒng)數(shù)據(jù)庫(kù) 82.建立和管理基本表 8五、數(shù)據(jù)庫(kù)應(yīng)用程序分析 141.首先設(shè)計(jì)界面 142.功能的實(shí)現(xiàn) 15六、設(shè)計(jì)總結(jié) 19七、參考文獻(xiàn) 20圖書(shū)館服務(wù)系統(tǒng)一、需求分析1.需求概括隨著科學(xué)技術(shù)的不斷提高,計(jì)算機(jī)科學(xué)日漸成熟,作為計(jì)算機(jī)應(yīng)用的一部分,使用計(jì)算機(jī)對(duì)圖書(shū)信息進(jìn)行管理,具有手工管理所無(wú)法比擬的優(yōu)點(diǎn)。分析圖書(shū)管理流程,系統(tǒng)應(yīng)該實(shí)現(xiàn)以下功能:圖書(shū)管理員可以維護(hù)圖書(shū)信息,包括增加新書(shū)、修改圖書(shū)信息、辦理圖書(shū)借閱登記、圖書(shū)歸還登記、丟失圖書(shū)處理等。讀者可以實(shí)現(xiàn)借書(shū)、還書(shū)、查閱圖書(shū)信息等。具體要求如下:(1)圖書(shū)信息管理:錄入各種圖書(shū)信息、維護(hù)圖書(shū)信息等。圖書(shū)信息包括圖書(shū)編號(hào)、名稱、類型、作者、出版社等。(2)讀者信息管理:維護(hù)讀者信息,根據(jù)實(shí)際情況修改、更新、刪除讀者信息。讀者信息包括校園卡號(hào)、姓名等。(3)借閱管理:包括借書(shū)、還書(shū)、過(guò)期圖書(shū)歸還處理等。圖書(shū)管理系統(tǒng)主要有3種用戶:(1)系統(tǒng)管理員:擁有系統(tǒng)最高權(quán)限、設(shè)置管理員等。(2)圖書(shū)管理員:維護(hù)圖書(shū)基本數(shù)據(jù),進(jìn)行讀者的圖書(shū)借閱和歸還處理。(3)讀者用戶:查閱圖書(shū)信息、借閱圖書(shū)。圖書(shū)館圖書(shū)情況和管理規(guī)定,每種類型圖書(shū)有很多不同的圖書(shū)每位讀者可同時(shí)借閱6本,每本圖書(shū)借閱期限是一個(gè)月。2、數(shù)據(jù)流圖圖書(shū)管理系統(tǒng)具體數(shù)據(jù)流圖DFD如下:

二.概念模型設(shè)計(jì)1.圖書(shū)管理系統(tǒng)圖書(shū)管理系統(tǒng)主要包含圖書(shū)類型、圖書(shū)信息和讀者3個(gè)實(shí)體畫(huà)出3個(gè)實(shí)體的ER圖,并標(biāo)出實(shí)體的主鍵,如圖2.1、圖2.2、圖2.3。2.設(shè)計(jì)分ER圖在圖書(shū)借閱管理系統(tǒng)中涉及3個(gè)實(shí)體:圖書(shū)、圖書(shū)類型、讀者,這三個(gè)實(shí)體之間互相存在著聯(lián)系。根據(jù)需求分析可知一名讀者最多可借閱10本書(shū),一本書(shū)可以被不同的讀者借閱,因此讀者與圖書(shū)之間存在著多對(duì)多的關(guān)系,一本圖書(shū)對(duì)應(yīng)一種圖書(shū)類型,一種圖書(shū)類型可以對(duì)應(yīng)多種圖書(shū),因此圖書(shū)與圖書(shū)類型存在著一對(duì)多的關(guān)系。通過(guò)以上分析,可以得到圖書(shū)管理系統(tǒng)的局部ER圖,如圖2.4.圖2.43.設(shè)計(jì)全局ER圖將實(shí)體的屬性加入到初步ER圖,可以得到圖書(shū)館借閱管理系統(tǒng)的全局ER圖,如圖2.5所示。三、關(guān)系模型設(shè)計(jì)數(shù)據(jù)庫(kù)的關(guān)系模型設(shè)計(jì)是根據(jù)概念結(jié)構(gòu)設(shè)計(jì)的全局ER圖,按照轉(zhuǎn)換規(guī)則,將ER圖轉(zhuǎn)換成數(shù)據(jù)模型的過(guò)程,即將所有的實(shí)體和聯(lián)系轉(zhuǎn)化為一系列的關(guān)系模式。ER圖中實(shí)體應(yīng)該單獨(dú)提取出來(lái)作為一個(gè)關(guān)系模式,主鍵用橫線標(biāo)出,圖書(shū)館管理系統(tǒng)關(guān)系模式如下:圖書(shū)類型(圖書(shū)分類號(hào),圖書(shū)分類名稱,描述信息)為圖書(shū)類型實(shí)體對(duì)應(yīng)的關(guān)系模式,其中“圖書(shū)分類號(hào)”是圖書(shū)類型的主鍵。圖書(shū)(圖書(shū)編號(hào),圖書(shū)名稱,作者,出版社,圖書(shū)狀態(tài),圖書(shū)描述)為圖書(shū)實(shí)體對(duì)應(yīng)的關(guān)系模式,其中“圖書(shū)編號(hào)”是圖書(shū)的主鍵。讀者(卡號(hào),姓名,聯(lián)系方式,罰款金,級(jí)別)為讀者實(shí)體對(duì)應(yīng)的關(guān)系模式,其中“卡號(hào)”是讀者實(shí)體的主鍵。聯(lián)系借閱是一個(gè)多對(duì)多的聯(lián)系,按照轉(zhuǎn)換規(guī)則,必須轉(zhuǎn)換為一個(gè)獨(dú)立的關(guān)系模式,其本身的屬性包括借閱日期、歸還日期,還應(yīng)包括圖書(shū)與讀者的主鍵屬性,所以借閱關(guān)系模式為:借閱(卡號(hào),圖書(shū)編號(hào),借閱日期,歸還日期)其中卡號(hào)和圖書(shū)編號(hào)共同組成借閱這一實(shí)體的主鍵。借書(shū)的期限是一個(gè)月。當(dāng)超過(guò)一個(gè)月,每多一天,該讀者罰款金加0.1。預(yù)約(卡號(hào),圖書(shū)編號(hào),預(yù)約日期)其中卡號(hào)和圖書(shū)編號(hào)共同組成預(yù)約這一實(shí)體的主鍵。規(guī)定只有讀者級(jí)別為高級(jí)才能進(jìn)行預(yù)約功能。四、數(shù)據(jù)庫(kù)實(shí)現(xiàn)本次課設(shè)是建立一個(gè)圖書(shū)館借閱管理系統(tǒng),假定數(shù)據(jù)量不大,圖書(shū)的更新增加操作也不頻繁。1.創(chuàng)建圖書(shū)館管理系統(tǒng)數(shù)據(jù)庫(kù)在mysql6.0中輸入創(chuàng)建數(shù)據(jù)庫(kù)成功。2.建立和管理基本表(1)、建立基本表經(jīng)過(guò)上面的分析,要為“圖書(shū)館管理系統(tǒng)”數(shù)據(jù)庫(kù)建立圖書(shū)類型、圖書(shū)、讀者、借閱和預(yù)約5個(gè)基本表,下面對(duì)圖書(shū)表的建立進(jìn)行說(shuō)明。圖書(shū)類型表的創(chuàng)建:圖書(shū)表的創(chuàng)建:讀者表的創(chuàng)建:借閱表的創(chuàng)建:預(yù)約表的創(chuàng)建:(2)、管理基本表基本表建立之后,隨著應(yīng)用環(huán)境和需求的變化,有時(shí)候需要修改已經(jīng)建立好的基本表。當(dāng)需要增加某個(gè)字段時(shí),例如,為讀者表增加一列“sex”,數(shù)據(jù)類型是char(4)。具體的sql語(yǔ)句為:altertablereaderaddsexchar(4);當(dāng)我們需要?jiǎng)h除圖書(shū)類型表時(shí),具體地sql語(yǔ)句為:droptablebookclass;(3)、建立和管理視圖視圖一book_basic的建立:視圖二reader_basic的建立:刪除視圖可以用dropview語(yǔ)句進(jìn)行刪除,刪除視圖二的sql語(yǔ)句如下:dropviewreader_basic;(4)、訪問(wèn)數(shù)據(jù)庫(kù)為了數(shù)據(jù)庫(kù)訪問(wèn)操作的要求,事先向每個(gè)表中都填入一些數(shù)據(jù)。每個(gè)基本表的實(shí)驗(yàn)數(shù)據(jù)如下:圖書(shū)類別表:圖書(shū)表:讀者表:借閱表:預(yù)約表:在數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)中,數(shù)據(jù)查詢是最常用的功能。數(shù)據(jù)查詢是根據(jù)用戶提出的各種要求在關(guān)系中查詢,得到查詢結(jié)果。常用的查詢有簡(jiǎn)單查詢、連接查詢、嵌套查詢、組合查詢。對(duì)圖書(shū)館管理系統(tǒng)進(jìn)行查詢。(1)查詢讀者信息表:使用的sql語(yǔ)言為:select*fromreader;(2)查詢鬼吹燈的出版社:使用sql語(yǔ)言為:selectbName,bPressfrombook wherebName=’鬼吹燈’;(3)查詢羅彬的借閱信息和級(jí)別:使用sql語(yǔ)言為:selectbook.bName,rName,Lend,Returns,rPay,rlevel frombook,reader,record wherebook.bId=record.bIdand reader.rId=record.rIdand rName=’羅彬’;五、數(shù)據(jù)庫(kù)應(yīng)用程序分析1.首先設(shè)計(jì)界面用戶認(rèn)證界面:書(shū)籍查詢界面:借閱記錄界面:2.功能的實(shí)現(xiàn)通過(guò)jsp技術(shù)在EclipseJAVAEE平臺(tái)往HTML中鑲嵌jsp代碼,用java.sql與數(shù)據(jù)庫(kù)進(jìn)行連接,設(shè)計(jì)出帶有查詢功能的網(wǎng)頁(yè)認(rèn)證功能:(1)認(rèn)證失?。海?)認(rèn)證成功:查詢功能:點(diǎn)擊查詢(1)查詢成功:(2)查詢失?。阂部梢圆樵兯袌D書(shū),點(diǎn)擊圖書(shū)一覽表:最后是借閱記錄(管理員端):(1)輸入證件號(hào)、圖書(shū)號(hào)、圖書(shū)名任一個(gè),點(diǎn)擊查詢(2)查詢錯(cuò)誤:(3)查詢成功后的借閱記錄界面:最后附上Eclipse的項(xiàng)目圖:六、設(shè)計(jì)總結(jié)通過(guò)本次的課程設(shè)計(jì),了解了設(shè)計(jì)一個(gè)數(shù)據(jù)庫(kù)的基本流程,通過(guò)畫(huà)ER關(guān)系圖,DFD圖了解了使用MicrosoftVisio的基本步驟,以前還只知道畫(huà)圖,PS等一些工具,現(xiàn)在有了MicrosoftVisio可以方便快捷的畫(huà)出流程圖、ER圖等等。在創(chuàng)建數(shù)據(jù)庫(kù)的過(guò)程中,發(fā)生了很多的錯(cuò)誤,比如表中列的約束條件的使用格式,關(guān)鍵字的拼寫(xiě),特別是在設(shè)置主鍵外鍵的時(shí)候,教科書(shū)上講的FOREIGNKEY后面的外鍵名沒(méi)有加(),自己設(shè)置的時(shí)候總是報(bào)錯(cuò),后來(lái)查閱了一些書(shū)籍之后知道了要加()。創(chuàng)建好數(shù)據(jù)庫(kù)后,導(dǎo)入數(shù)據(jù)的時(shí)候也有一些需要注意的事,比如輸入的數(shù)據(jù)的格式要與表中列的格式一致,同時(shí)也要滿足列的約束條件。最后就是數(shù)據(jù)庫(kù)中數(shù)據(jù)的查詢,從一個(gè)表中查詢數(shù)據(jù)沒(méi)什么太大的難度,從多個(gè)表查詢數(shù)據(jù)的時(shí)候尤其要注意,如果兩個(gè)表里面有相同的列名,就要在前面加上<表名.>,不然就會(huì)報(bào)錯(cuò)。最后就是數(shù)據(jù)庫(kù)應(yīng)用的實(shí)現(xiàn),在Eclipse中開(kāi)始有各種錯(cuò)誤,各種調(diào)試,跟數(shù)據(jù)庫(kù)的接口也是測(cè)試了好久才完成,然后就是界面的設(shè)計(jì)與界面跳轉(zhuǎn)時(shí)數(shù)據(jù)的傳輸,面對(duì)中文的時(shí)候會(huì)出現(xiàn)亂碼的情況,這時(shí)候需要在代碼中設(shè)置charset=gbk和request.setCharacterEncording(gbk)等等??偠灾?,這次的課程設(shè)計(jì)不僅鞏固了之前上課所學(xué)習(xí)的知識(shí),也將知識(shí)運(yùn)用到了實(shí)踐之中,對(duì)數(shù)據(jù)庫(kù)的了解也相比之前上了一個(gè)臺(tái)階。七、參考文獻(xiàn)(1)、周愛(ài)武,汪海威,肖云.數(shù)據(jù)庫(kù)課程設(shè)計(jì)[C].北京:機(jī)械工業(yè)出版社,2012:93-119.(2)、張海藩.軟件工程導(dǎo)論[C].北京:清華大學(xué)出版社,2008:40-45.(3)、王珊.數(shù)據(jù)庫(kù)系統(tǒng)簡(jiǎn)明教程[C].北京:高等教育出版社2007:190-21(4)鄒竹彪.JSP網(wǎng)絡(luò)編程從入門到精通[C].北京:清華大學(xué)出版社 2007年6月淮海工學(xué)院計(jì)算機(jī)工程學(xué)院課程設(shè)計(jì)報(bào)告設(shè)計(jì)名稱:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)選題名稱:姓名:學(xué)號(hào):專業(yè)班級(jí):計(jì)算機(jī)科學(xué)與技術(shù)系院):計(jì)算機(jī)工程學(xué)院設(shè)計(jì)時(shí)間:設(shè)計(jì)地點(diǎn):計(jì)算機(jī)實(shí)驗(yàn)室、教室成績(jī):指導(dǎo)教師評(píng)語(yǔ):成績(jī):簽名:年月日1.課程設(shè)計(jì)目的1、訓(xùn)練學(xué)生靈活應(yīng)用所學(xué)數(shù)據(jù)結(jié)構(gòu)知識(shí),獨(dú)立完成問(wèn)題分析,結(jié)合數(shù)據(jù)結(jié)構(gòu)理論知識(shí),編寫(xiě)程序求解指定問(wèn)題。2、初步掌握軟件開(kāi)發(fā)過(guò)程的問(wèn)題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測(cè)試等基本方法和技能;3、提高綜合運(yùn)用所學(xué)的理論知識(shí)和方法獨(dú)立分析和解決問(wèn)題的能力;4、訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開(kāi)發(fā)一般規(guī)范進(jìn)行軟件開(kāi)發(fā),鞏固、深化學(xué)生的理論知識(shí),提高編程水平,并在此過(guò)程中培養(yǎng)他們嚴(yán)謹(jǐn)?shù)目茖W(xué)態(tài)度和良好的工作作風(fēng)。2.課程設(shè)計(jì)任務(wù)與要求:任務(wù)根據(jù)教材《數(shù)據(jù)結(jié)構(gòu)-C語(yǔ)言描述》(耿國(guó)華主編)和參考書(shū)《數(shù)據(jù)結(jié)構(gòu)題集(C語(yǔ)言版)》(嚴(yán)蔚敏、吳偉民主編)選擇課程設(shè)計(jì)題目,要求通過(guò)設(shè)計(jì),在數(shù)據(jù)結(jié)構(gòu)的邏輯特性和物理表示、數(shù)據(jù)結(jié)構(gòu)的選擇應(yīng)用、算法的設(shè)計(jì)及其實(shí)現(xiàn)等方面加深對(duì)課程基本內(nèi)容的理解和綜合運(yùn)用。設(shè)計(jì)題目從任務(wù)書(shū)所列選題表中選取,每班每題不得超過(guò)2人。學(xué)生自選課題。學(xué)生原則上可以結(jié)合個(gè)人愛(ài)好自選課題,要求課題有一定的深度與難度,有一定的算法復(fù)雜性,能夠鞏固數(shù)據(jù)結(jié)構(gòu)課程所學(xué)的知識(shí)。學(xué)生自選課題需在18周前報(bào)課程設(shè)計(jì)指導(dǎo)教師批準(zhǔn)方可生效。要求:1、在處理每個(gè)題目時(shí),要求從分析題目的需求入手,按設(shè)計(jì)抽象數(shù)據(jù)類型、構(gòu)思算法、通過(guò)設(shè)計(jì)實(shí)現(xiàn)抽象數(shù)據(jù)類型、編制上機(jī)程序和上機(jī)調(diào)試等若干步驟完成題目,最終寫(xiě)出完整的分析報(bào)告。前期準(zhǔn)備工作完備與否直接影響到后序上機(jī)調(diào)試工作的效率。在程序設(shè)計(jì)階段應(yīng)盡量利用已有的標(biāo)準(zhǔn)函數(shù),加大代碼的重用率。2、設(shè)計(jì)的題目要求達(dá)到一定工作量(300行以上代碼),并具有一定的深度和難度。3、程序設(shè)計(jì)語(yǔ)言推薦使用C/C++,程序書(shū)寫(xiě)規(guī)范,源程序需加必要的注釋;4、每位同學(xué)需提交可獨(dú)立運(yùn)行的程序;5、每位同學(xué)需獨(dú)立提交設(shè)計(jì)報(bào)告書(shū)(每人一份),要求編排格式統(tǒng)一、規(guī)范、內(nèi)容充實(shí),不少于10頁(yè)(代碼不算);6、課程設(shè)計(jì)實(shí)踐作為培養(yǎng)學(xué)生動(dòng)手能力的一種手段,單獨(dú)考核。3.課程設(shè)計(jì)說(shuō)明書(shū)一需求分析停車場(chǎng)管理系統(tǒng)(1)根據(jù)車輛到達(dá)停車場(chǎng)到車輛離開(kāi)停車場(chǎng)時(shí)所停留的時(shí)間進(jìn)行計(jì)時(shí)計(jì)費(fèi)。(2)當(dāng)有車輛從停車場(chǎng)離開(kāi)時(shí),等待的車輛按順序進(jìn)入停車場(chǎng)停放,實(shí)現(xiàn)停車場(chǎng)的調(diào)度功能。(3)用要求以順序棧模擬停車場(chǎng),以鏈隊(duì)列模擬便道。(4)從終端讀入汽車到達(dá)或離去的數(shù)據(jù),每組數(shù)據(jù)包括三項(xiàng):①是“到達(dá)”還是“離去”;②汽車牌照號(hào)碼;③“到達(dá)”或“離去”的時(shí)刻。(5)每組輸入信息相應(yīng)的輸出信息為:如果是到達(dá)的車輛,則輸出其在停車場(chǎng)中或便道上的位置;如果是離去的車輛,則輸出其在停車場(chǎng)中停留的時(shí)間和應(yīng)交的費(fèi)用。二概要設(shè)計(jì)停車場(chǎng)管理系統(tǒng)1、系統(tǒng)用到的抽象數(shù)據(jù)類型定義:typedefstructnode{ charnum[10];//車牌號(hào)碼Timereach;//到站時(shí)間Timeleave;//離開(kāi)時(shí)間}CarNode;typedefstructtime{ inthour; intmin;}Time;typedefstructNODE{ CarNode*stack[MAX+1];//棧用順序表示inttop;}SeqStackCar;typedefstructcar{ CarNode*data;//便道上的車用鏈表表示structcar*next;}QueueNode;typedefstructNode{ QueueNode*head;//設(shè)置頭指針、尾指針。QueueNode*rear;}LinkQueueCar;系統(tǒng)中的子程序和功能說(shuō)明:(1)voidInitStack(SeqStackCar*);//車輛節(jié)點(diǎn)進(jìn)棧當(dāng)棧未滿時(shí),就把到達(dá)的車輛進(jìn)棧。(2)intInitQueue(LinkQueueCar*);//車輛節(jié)點(diǎn)進(jìn)隊(duì)列當(dāng)棧滿了時(shí),車輛就進(jìn)入便道上的隊(duì)列中(3)intArrival(SeqStackCar*,LinkQueueCar*);//車輛到達(dá)登記車輛到達(dá)時(shí),先登記車輛車牌號(hào)碼。然后再判斷停車場(chǎng)有沒(méi)有停滿,沒(méi)停滿就進(jìn)棧,停滿了就停在便道上,即進(jìn)隊(duì)列。。(4)voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*);//車輛離開(kāi)處理通過(guò)輸入離開(kāi)車輛的位置處理,然后調(diào)用PRINT(CarNode*p,introom);函數(shù)進(jìn)行收費(fèi)。。然后再判斷便道上有沒(méi)有車,如果有,就把便道上的車進(jìn)停車場(chǎng)內(nèi)。(5)voidList(SeqStackCar,LinkQueueCar);//顯示車場(chǎng)內(nèi)和便道上的車輛情況用個(gè)switch();函數(shù)選擇顯示車場(chǎng)內(nèi)或是便道上的車輛情況。包括對(duì)下面兩個(gè)子函數(shù)的調(diào)用:voidList1(SeqStackCar*S);voidList2(LinkQueueCar*W);//分別為顯示車場(chǎng)和便道上的車輛情況(6)voidPRINT(CarNode*p,introom);//車輛離開(kāi)是的收費(fèi)這個(gè)函數(shù)由車輛離開(kāi)的函數(shù)調(diào)用,以分鐘計(jì)時(shí)算費(fèi),但只能計(jì)算當(dāng)天之內(nèi)的費(fèi)用,如果第二天的話會(huì)導(dǎo)致計(jì)費(fèi)為負(fù)或減少。即只能當(dāng)天停,當(dāng)天開(kāi)走。系統(tǒng)程序功能結(jié)構(gòu)圖停車場(chǎng)管理系統(tǒng)停車場(chǎng)管理系統(tǒng)車輛到達(dá)車輛離開(kāi)列表顯示到達(dá)時(shí)間車牌號(hào)碼離開(kāi)時(shí)間收費(fèi)情況車場(chǎng)信息便道信息 三詳細(xì)設(shè)計(jì)停車場(chǎng)管理系統(tǒng)算法的設(shè)計(jì)思想及流程圖主要模塊算法描述:本程序最主要的算法就是車輛到達(dá)登記的和車輛離開(kāi)的。EQ\o\ac(○,1)車輛到達(dá):intArrival(SeqStackCar*Enter,LinkQueueCar*W)首先定義一個(gè)棧和隊(duì)列的結(jié)構(gòu)體指針為:*p,*t,然后申請(qǐng)一個(gè)車輛信息的內(nèi)存空間,并把它賦給棧指針.車輛到達(dá)時(shí)就輸入車牌號(hào),并通過(guò)if(Enter->top<MAX)來(lái)判斷該車是進(jìn)車場(chǎng)內(nèi)還是進(jìn)便道上,如果是進(jìn)車場(chǎng)內(nèi)就把top加1,顯示在車場(chǎng)內(nèi)的位置,還要輸入進(jìn)車場(chǎng)的時(shí)間,然后把該節(jié)點(diǎn)進(jìn)棧。如果是else就顯示該車要停在便道上,并進(jìn)行進(jìn)隊(duì)列的操作。EQ\o\ac(○,2)車輛離開(kāi):voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)定義一個(gè)整型變量room記錄要離開(kāi)車輛的位置,定義兩個(gè)棧指針和一個(gè)隊(duì)列指針,用個(gè)if(Enter->top>0)確保棧不空,然后用個(gè)while(1)確保輸入的車輛離開(kāi)位置的合法性。如果不和法,顯示輸入有誤,要重新輸入。通過(guò)while(Enter->top>room)判斷離開(kāi)車輛的位置,如果是中間位置,就要再用一個(gè)棧前面臨時(shí)開(kāi)出來(lái)的車,等要開(kāi)出的車開(kāi)出后,再把臨時(shí)棧的車看進(jìn)車場(chǎng)內(nèi),并要調(diào)用PRINT(p,room);這個(gè)函數(shù)計(jì)算顯示費(fèi)用.然后還要用if((W->head!=W->rear)&&Enter->top<MAX)語(yǔ)句判斷便道上有沒(méi)有車,如果有車就要顯示進(jìn)車場(chǎng)的車的車牌號(hào),并登記進(jìn)入時(shí)間,并要進(jìn)行相應(yīng)的出隊(duì)列和進(jìn)棧操作。NYNY開(kāi)始車輛到達(dá)判斷棧是否滿元素進(jìn)入隊(duì)列wait元素進(jìn)入棧Enter棧Enter元素出棧隊(duì)列中元素進(jìn)棧隊(duì)列wait元素出隊(duì)結(jié)束圖1.2:車輛離開(kāi)車場(chǎng)NYNY開(kāi)始車場(chǎng)是否為空Room前車輛進(jìn)臨時(shí)棧對(duì)room計(jì)費(fèi)判便道是否有車便道車進(jìn)車場(chǎng)結(jié)束圖1.1:車輛到達(dá)車場(chǎng)圖1.1源代碼:intArrival(SeqStackCar*Enter,LinkQueueCar*W)//車輛的到達(dá)登記{ CarNode*p;QueueNode*t;p=(CarNode*)malloc(sizeof(CarNode));flushall();printf("\n請(qǐng)輸入車牌號(hào)(例:B1234):");gets(p->num); if(Enter->top<MAX) { Enter->top++;printf("\n車輛在車場(chǎng)第%d位置.",Enter->top);printf("\n車輛到達(dá)時(shí)間:"); scanf("%d:%d",&(p->reach.hour),&(p->reach.min));Enter->stack[Enter->top]=p;return(1); } else { printf("\n該車須在便道等待!有車位時(shí)進(jìn)入車場(chǎng)");t=(QueueNode*)malloc(sizeof(QueueNode));t->data=p;t->next=NULL;W->rear->next=t;W->rear=t;return(1); }}圖1.2源代碼:voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)//車輛的離開(kāi){ introom;CarNode*p,*t;QueueNode*q; if(Enter->top>0)//判斷車場(chǎng)是否為空 { while(1) { printf("\n請(qǐng)輸入車在車場(chǎng)的位置/1--%d/:",Enter->top);scanf("%d",&room);if(room>=1&&room<=Enter->top)break; elseprintf("\n輸入有誤,請(qǐng)重輸:"); } while(Enter->top>room)//把要?jiǎng)h除的車輛的前面的車開(kāi)出來(lái),進(jìn)臨時(shí)棧。 { Temp->top++;Temp->stack[Temp->top]=Enter->stack[Enter->top];Enter->stack[Enter->top]=NULL;Enter->top--; }p=Enter->stack[Enter->top];//把要?jiǎng)h除的車輛節(jié)點(diǎn)賦給p。Enter->stack[Enter->top]=NULL;Enter->top--; while(Temp->top>=1)//再把臨時(shí)棧里德車輛進(jìn)停車場(chǎng) { Enter->top++;Enter->stack[Enter->top]=Temp->stack[Temp->top];Temp->stack[Temp->top]=NULL;Temp->top--; } PRINT(p,room);//調(diào)用計(jì)費(fèi)函數(shù)計(jì)費(fèi)。。if((W->head!=W->rear)&&Enter->top<MAX)//如果便道上有車,則再開(kāi)進(jìn)停車場(chǎng)。 { q=W->head->next;t=q->data;Enter->top++;printf("\n便道的%s號(hào)車進(jìn)入車場(chǎng)第%d位置.",t->num,Enter->top);printf("\n請(qǐng)輸入%s號(hào)車進(jìn)入車場(chǎng)的時(shí)間:",t->num);scanf("%d:%d",&(t->reach.hour),&(t->reach.min));W->head->next=q->next; if(q==W->rear)W->rear=W->head; Enter->stack[Enter->top]=t;free(q); } elseprintf("\n便道里沒(méi)有車.\n"); } elseprintf("\n車場(chǎng)里沒(méi)有車.");}顯示車場(chǎng)里的車輛情況源程序:voidList1(SeqStackCar*S)//顯示車場(chǎng)里的車輛情況{ inti;if(S->top>0) { printf("\n車場(chǎng):");printf("\n位置到達(dá)時(shí)間車牌號(hào)\n");for(i=1;i<=S->top;i++) { printf("%d",i);printf("%d:%d",S->stack[i]->reach.hour,S->stack[i]->reach.min);puts(S->stack[i]->num); } } elseprintf("\n車場(chǎng)里沒(méi)有車");}顯示便道上的車輛情況源代碼:voidList2(LinkQueueCar*W)//顯示便道上的車輛情況{ QueueNode*p;inti;p=W->head->next;if(W->head!=W->rear) { printf("\n等待車輛的號(hào)碼為:");for(i=1;(p!=NULL);i++) { printf("\n第%d車輛.",i); puts(p->data->num); p=p->next; } } elseprintf("\n便道里沒(méi)有車."); printf("\n");}開(kāi)始開(kāi)始初始化兩個(gè)棧Enter和Temp及一個(gè)隊(duì)列Wait。進(jìn)入主菜單車到達(dá)車離開(kāi)退出Room前車輛進(jìn)臨時(shí)棧對(duì)room計(jì)費(fèi)便道車信息車場(chǎng)內(nèi)信息判便道是否有車車場(chǎng)是否為空列表顯示棧Enter元素出棧隊(duì)列中元素進(jìn)棧隊(duì)列Wait中元素出隊(duì)元素進(jìn)棧Enter便道車進(jìn)車場(chǎng)元素進(jìn)隊(duì)列Wait判斷棧是否為滿結(jié)束退出列表顯示是否否是否是圖1.3:停車場(chǎng)管理系統(tǒng)主流程圖.四程序設(shè)計(jì)與調(diào)試分析停車場(chǎng)管理系統(tǒng)測(cè)試數(shù)據(jù):每個(gè)測(cè)試的數(shù)據(jù)都是以字符串的形式存儲(chǔ)的,輸入數(shù)據(jù)是嚴(yán)格按照提示的信息執(zhí)行。調(diào)試遇到的問(wèn)題與解決方法:在調(diào)試的過(guò)程中,輸出員工信息的時(shí)候格式老是錯(cuò)位,調(diào)試了很多次才得以調(diào)整;在從文件中讀出數(shù)據(jù)時(shí)老是顯示不出數(shù)據(jù),最后才發(fā)現(xiàn)原來(lái)是忘了寫(xiě)輸出語(yǔ)句,但是在添加上去之后,能輸出信息卻有很多的亂碼,仔細(xì)檢查了一遍又一遍后終于發(fā)現(xiàn)了,原來(lái)是自己定義的指針在循環(huán)的過(guò)程中次序混亂了。在調(diào)試的過(guò)程中我還發(fā)現(xiàn)我的提示語(yǔ)句不多,導(dǎo)致讓別人不知道下一步要做些什么,所以就適當(dāng)?shù)奶砑恿艘恍┨崾镜男畔?。五用戶手?cè)停車場(chǎng)管理系統(tǒng)【使用說(shuō)明】(1)進(jìn)入程序的界面,出現(xiàn)命令的幫助信息(停車場(chǎng)的最大容量為三輛車,多了則進(jìn)入便道中等待其他車離開(kāi)車場(chǎng))。(2)輸入1:車輛到達(dá)登記;輸入2:車輛離開(kāi)登記;輸入3:車輛列表顯示;輸入4:退出系統(tǒng)(首先得進(jìn)行車輛登記,否則停車場(chǎng)里沒(méi)有車)(3)車輛登記時(shí),到達(dá)的時(shí)間與離開(kāi)的時(shí)間一定要嚴(yán)格按照時(shí)間的模式,如:8:00(4)顯示車輛列表時(shí),有相應(yīng)的信息提示,看自己的意愿執(zhí)行程序。(5)在覺(jué)得操作完畢時(shí)輸入4:退出系統(tǒng)?!境绦蛑械念^文件】#include<stdio.h>#include<stdlib.h>#include<string.h>#defineMAX3//停車場(chǎng)最大容量為3輛,便于觀察#defineprice0.05六測(cè)試成果停車場(chǎng)管理系統(tǒng)七附錄(源程序清單)停車場(chǎng)管理系統(tǒng)#include<stdio.h>#include<stdlib.h>#include<string.h>#defineMAX3//停車場(chǎng)最大容量為3輛,便于觀察#defineprice0.05typedefstructtime//定義時(shí)間結(jié)構(gòu)體{ inthour; intmin;}Time;typedefstructnode//定義車輛信息結(jié)構(gòu)體{ charnum[10];//車牌號(hào)碼Timereach;//到站時(shí)間Timeleave;//離開(kāi)時(shí)間}CarNode;typedefstructNODE{ CarNode*stack[MAX+1];inttop;}SeqStackCar;typedefstructcar{ CarNode*data;structcar*next;}QueueNode;typedefstructNode{ QueueNode*head;QueueNode*rear;}LinkQueueCar;voidInitStack(SeqStackCar*);intInitQueue(LinkQueueCar*);intArrival(SeqStackCar*,LinkQueueCar*);voidLeave(SeqStackCar*,SeqStackCar*,LinkQueueCar*);voidList(SeqStackCar,LinkQueueCar);voidmain(){ SeqStackCarEnter,Temp;LinkQueueCarWait;intch;InitStack(&Enter);InitStack(&Temp);InitQueue(&Wait);while(1) { printf("\n§※§※§※§※§※§歡迎使用停車場(chǎng)系統(tǒng)(停車場(chǎng)最大容量為3輛)§※§※§※§※§\t");printf("\n\t※◎※◎※◎※◎1.車輛到達(dá)登記.※◎※◎※◎※◎\t\n");printf("\n\t※◎※◎※◎※◎2.車輛離開(kāi)登記.※◎※◎※◎※◎\t\n");printf("\n\t※◎※◎※◎※◎3.車輛列表顯示.※◎※◎※◎※◎\t\n");printf("\n\t※◎※◎※◎※◎4.退出系統(tǒng).※◎※◎※◎※◎\t\n"); while(1) { printf("請(qǐng)選擇:");scanf("%d",&ch);if(ch>=1&&ch<=4) break;elseprintf("\n輸入有誤,請(qǐng)重新選擇:1~4:"); } switch(ch) { case1:Arrival(&Enter,&Wait); break;case2:Leave(&Enter,&Temp,&Wait);break;case3:List(Enter,Wait);break;case4:exit(0);default:break; } }}//自定義函數(shù)voidInitStack(SeqStackCar*s)//棧的初始化{inti;s->top=0;for(i=0;i<=MAX;i++) s->stack[s->top]=NULL;}intInitQueue(LinkQueueCar*Q)//隊(duì)列的初始化{ Q->head=(QueueNode*)malloc(sizeof(QueueNode)); if(Q->head!=NULL) { Q->head->next=NULL;Q->rear=Q->head;return(1); }elsereturn(-1);}voidPRINT(CarNode*p,introom)//車輛收費(fèi){ intA1,A2,B1,B2; printf("\n車輛離開(kāi)的時(shí)間:");scanf("%d:%d",&(p->leave.hour),&(p->leave.min));printf("\n離開(kāi)車輛的車牌號(hào)為:");puts(p->num);printf("\n其到達(dá)時(shí)間為:%d:%d",p->reach.hour,p->reach.min);printf("\n離開(kāi)時(shí)間為:%d:%d",p->leave.hour,p->leave.min);A1=p->reach.hour;A2=p->reach.min;B1=p->leave.hour;B2=p->leave.min;printf("\n應(yīng)交費(fèi)用為:%2.1f元",((B1-A1)*60+(B2-A2))*price);free(p);}intArrival(SeqStackCar*Enter,LinkQueueCar*W)//車輛的到達(dá)登記{ CarNode*p;QueueNode*t;p=(CarNode*)malloc(sizeof(CarNode));flushall();printf("\n請(qǐng)輸入車牌號(hào)(例:B1234):");gets(p->num); if(Enter->top<MAX) { Enter->top++;printf("\n車輛在車場(chǎng)第%d位置.",Enter->top);printf("\n車輛到達(dá)時(shí)間:"); scanf("%d:%d",&(p->reach.hour),&(p->reach.min));Enter->stack[Enter->top]=p;return(1); } else { printf("\n該車須在便道等待!有車位時(shí)進(jìn)入車場(chǎng)");t=(QueueNode*)malloc(sizeof(QueueNode));t->data=p;t->next=NULL;W->rear->next=t;W->rear=t;return(1); }}voidLeave(SeqStackCar*Enter,SeqStackCar*Temp,LinkQueueCar*W)//車輛的離開(kāi){ introom;CarNode*p,*t;QueueNode*q; if(Enter->top>0)//判斷車場(chǎng)是否為空 { while(1) { printf("\n請(qǐng)輸入車在車場(chǎng)的位置/1--%d/:",Enter->top);scanf("%d",&room);if(room>=1&&room<=Enter->top)break; elseprintf("\n輸入有誤,請(qǐng)重輸:"); } while(Enter->top>room)//把要?jiǎng)h除的車輛的前面的車開(kāi)出來(lái),進(jìn)臨時(shí)棧。 { Temp->top++;Temp->stack[Temp->top]=Enter->stack[Enter->top];Enter->stack[Enter->top]=NULL;Enter->top--; }p=Enter->stack[Enter->top];//把要?jiǎng)h除的車輛節(jié)點(diǎn)賦給p。Enter->stack[Enter->top]=NULL;Enter->top--; while(Temp->top>=1)//再把臨時(shí)棧里德車輛進(jìn)停車場(chǎng) { Enter->top++;Enter->stack[Enter->top]=Temp->stack[Temp->top];Temp->stack[Temp->top]=NULL;Temp->top--; } PRINT(p,room);//調(diào)用計(jì)費(fèi)函數(shù)計(jì)費(fèi)。。if((W->head!=W->rear)&&Enter->top<MAX)//如果便道上有車,則再開(kāi)進(jìn)停車場(chǎng)。 { q=W->head->next;t=q->data;Enter->top++;printf("\n便道的%s號(hào)車進(jìn)入車場(chǎng)第%d位置.",t->num,Enter->top);printf("\n請(qǐng)輸入%s號(hào)車進(jìn)入車場(chǎng)的時(shí)間:",t->num);scanf("%d:%d",&(t->reach.hour),&(t->reach.min));W->head->next=q->next; if(q==W->rear)W->rear=W->head; Enter->stack[Enter->top]=t;free(q); } elseprintf("\n便道里沒(méi)有車.\n"); } elseprintf("\n車場(chǎng)里沒(méi)有車.");}voidList1(SeqStackCar*S)//顯示車場(chǎng)里的車輛情況{ inti;if(S->top>0) { printf("\n車場(chǎng):");printf("\n位置到達(dá)時(shí)間車牌號(hào)\n");for(i=1;i<=S->top;i++) { printf("%d",i);printf("%d:%d",S->stack[i]->reach.hour,S->stack[i]->reach.min);puts(S->stack[i]->num); } } elseprintf("\n車場(chǎng)里沒(méi)有車");}voidList2(LinkQueueCar*W)//顯示便道上的車輛情況{ QueueNode*p;inti;p=W->head->next;if(W->head!=W->rear) { printf("\n等待車輛的號(hào)碼為:");for(i=1;(p!=NULL);i++) { printf("\n第%d車輛.",i); puts(p->data->num); p=p->next; } } elseprintf("\n便道里沒(méi)有車."); printf("\n");}voidList(SeqStackCarS,LinkQueueCarW)//顯示,遍歷{ intflag,tag;flag=1; while(flag) { printf("查看車輛列表顯示:");printf("\n1.車場(chǎng)列表\n2.便道列表\n3.返回主菜單\n");printf("\n請(qǐng)選擇1~3:"); while(1) { scanf("%d",&tag);if(tag>=1&&tag<=3)break;elseprintf("\n輸入有誤,請(qǐng)重新選擇1~3:"); } switch(tag) { case1:List1(&S);break;case2:List2(&W);break;case3:flag=0;break;default:break; } }}一需求分析簡(jiǎn)單的員工管理系統(tǒng)(1)該程序可用于對(duì)企業(yè)員工情況基本信息的存儲(chǔ)、更新、查詢、輸出等操作,以實(shí)現(xiàn)對(duì)企業(yè)員工的管理。(2)其中更新功能包括:添加信息、刪除信息、修改信息、可根據(jù)需要添加一個(gè)或多個(gè)員工信息,也可對(duì)個(gè)別員工信息進(jìn)行適當(dāng)?shù)膭h除或修改。以便隨時(shí)更新員工信息。(3)程序中設(shè)計(jì)的查詢功能可根據(jù)需要從若干數(shù)據(jù)中查詢某個(gè)員工信息,并且可根據(jù)兩種不同的方法查詢:按工作證號(hào)查詢和按姓名查詢。以滿足不同的需要。二概要設(shè)計(jì)簡(jiǎn)單的員工管理系統(tǒng)系統(tǒng)用到的抽象數(shù)據(jù)類型定義:structwokers//定義結(jié)構(gòu)體{ charnum[10];//員工工號(hào) charname[15];//員工姓名 charsex[15];//員工性別 charbirthday[15];//員工出生年月 chardegree[10];//員工學(xué)歷 charposition[10];//員工職位 charsalary[10];//員工工資 charaddress[20];//員工地址 chartelephone[20];//員工電話};typedefstructnode{ structwokersdata; structnode*next;//建立一個(gè)鏈表}Node;系統(tǒng)中的子程序和功能說(shuō)明:(1)菜單模塊:顯示員工管理系統(tǒng)的主菜單,供用戶選擇所需的功能,通過(guò)主函數(shù)來(lái)實(shí)現(xiàn)。(2)添加模塊:添加員工的工號(hào)、姓名以及其它的一些職工的相關(guān)信息,通過(guò)自己定義的voidAdd(Node*woker)函數(shù)來(lái)實(shí)現(xiàn)。(3)修改模塊:可以修改需要修改的員工的相關(guān)信息,通過(guò)自己定義的voidchange(Node*woker)函數(shù)來(lái)實(shí)現(xiàn)。(4)瀏覽模塊:瀏覽所有員工的相關(guān)信息,通過(guò)自己定義的voidDisp(Node*woker)函數(shù)來(lái)實(shí)現(xiàn)。(5)刪除模塊:刪除需要?jiǎng)h除的員工的所有信息,通過(guò)自己定義的voiddelet(Node*woker)函數(shù)來(lái)實(shí)現(xiàn)。(6)查詢模塊:可以按員工號(hào)和員工姓名來(lái)查詢職工的相關(guān)信息,通過(guò)自己定義的voidsearch(Node*woker)函數(shù)來(lái)實(shí)現(xiàn)。(7)保存模塊:將內(nèi)存中員工的信息輸出到磁盤文件中,可以通過(guò)自己定義的voidsave(Node*woker)函數(shù)來(lái)實(shí)現(xiàn)。(8)讀取模塊:將磁盤文件中員工的信息輸出到屏幕中,可以通過(guò)自己定義的voidload(Node*woker)函數(shù)來(lái)實(shí)現(xiàn)。系統(tǒng)程序功能結(jié)構(gòu)圖簡(jiǎn)單員工管理系統(tǒng)簡(jiǎn)單員工管理系統(tǒng)添加員工信息修改員工信息瀏覽員工信息保存員工信息刪除員工信息查找員工信息按員工工號(hào)查找按員工姓名查找讀取員工信息三詳細(xì)設(shè)計(jì)算法的設(shè)計(jì)思想及流程圖簡(jiǎn)單的員工管理系統(tǒng)主要模塊算法描述本程序的主要算法就是對(duì)于員工信息的添加、瀏覽、查找、刪除模塊為了方便起見(jiàn)本程序定義的結(jié)構(gòu)體中,員工的信息都是以字符串來(lái)存儲(chǔ)的。①在對(duì)員工信息的添加中,本程序利用的是鏈表將每個(gè)員工的信息都順序的錄入鏈表中。②同樣的利用此方法瀏覽員工的信息,利用while()循環(huán),直到指針p到鏈表的末尾。③在查找模塊利用函數(shù)voidsearch()實(shí)現(xiàn),里面包括兩個(gè)子模塊,第一個(gè)是以員工的工號(hào)來(lái)查找員工的相應(yīng)的信息,第二個(gè)則是以員工的姓名來(lái)查找員工的相應(yīng)的信息。④刪除模塊則是利用voiddelet()函數(shù)來(lái)實(shí)現(xiàn)。輸入想刪除的員工的工號(hào),然后把相應(yīng)的員工的信息都刪除。圖2.2:刪除模塊流程圖YY圖2.2:刪除模塊流程圖YYYN開(kāi)始鏈表為空輸入要?jiǎng)h除的員工的工號(hào)找到要?jiǎng)h除的員工與否刪除相應(yīng)的員工信息結(jié)束Y圖2.1:查找模塊流程圖圖2.1源代碼:voidsearch(Node*woker)//按條件查找員工信息{ Node*p; intsel,flag2;charfind[20]; p=woker->next; if(!woker->next)//若鏈表為空 { printf("沒(méi)有資料可以查找!\n"); return; } printf("\t\t\t*************************************\n"); printf("\t\t\t*\t1:按員工工號(hào)查找\t*\n"); printf("\t\t\t*\t2:按員工姓名查找\t*\n"); printf("\t\t\t*************************************\n"); scanf("%d",&sel); if(sel==1) { flag2=0; printf("請(qǐng)輸入你要查找的員工工號(hào):"); scanf("%s",find); while(p) { if(strcmp(p->data.num,find)==0) { flag2=1; printf("工號(hào)姓名性別生日學(xué)歷職位工資住址電話\n"); } if(flag2==1) printf("%-9s%-11s%-8s%-8s%-10s%-9s%-9s%-7s%-7s\n",p->data.num,p->,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary,p->data.address,p->data.telephone); p=p->next; } if(flag2==0) printf("所要查找的員工不存在!\n"); } else if(sel==2) { flag2=0; printf("請(qǐng)輸入你要查找的員工姓名:"); scanf("%s",find); while(p) { if(strcmp(p->,find)==0) { flag2=1; printf("工號(hào)姓名性別生日學(xué)歷職位工資住址電話\n"); if(flag2==1) printf("%-9s%-11s%-8s%-8s%-10s%-9s%-9s%-7s%-7s\n",p->data.num,p->,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary,p->data.address,p->data.telephone); p=p->next; } } if(flag2==0) printf("所要查找的員工不存在!\n"); }}圖2.2源代碼:voiddelet(Node*woker)//刪除員工信息{ Node*p,*r,*s; charfind[10]; if(!woker->next) { printf("沒(méi)有資料可以顯示!\n"); return; } printf("請(qǐng)輸入您要?jiǎng)h除的員工工號(hào)!\n"); scanf("%s",find); p=woker->next; while(p!=NULL) { if(strcmp(p->data.num,find)==0)//如果找到的話返回的是符合要求 break; p=p->next; } if(!p) printf("找不到您要?jiǎng)h除的員工工號(hào)!\n"); else { r=woker; while(r->next!=p) r=r->next; s=r->next; r->next=r->next->next; }}員工信息保存源代碼:voidsave(Node*woker)//將員工信息保存到文件{ intn; Node*p; FILE*fp;//指向文件的指針 printf("需要保存嗎?(1-保存0-不保存)"); scanf("%d",&n); if(n) { if(woker->next==NULL) printf("無(wú)記錄"); else p=woker->next; if((fp=fopen("員工管理系統(tǒng).txt","wb"))==NULL)//打開(kāi)文件,并判斷打開(kāi)是否正常 printf("cannotopenfile\n");//打開(kāi)文件失敗 while(p!=NULL) { fprintf(fp,"%-9s%-11s%-8s%-8s%-10s%-9s%-9s%-7s%-7s\n",p->data.num,p->,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary,p->data.address,p->data.telephone); p=p->next; } fclose(fp);//關(guān)閉文件 }}圖2.3:簡(jiǎn)單的員工管理系統(tǒng)主流程圖四程序設(shè)計(jì)與調(diào)試分析簡(jiǎn)單的員工管理系統(tǒng)測(cè)試數(shù)據(jù):每個(gè)測(cè)試的數(shù)據(jù)嚴(yán)格按照提示的信息執(zhí)行。調(diào)試遇到的問(wèn)題與解決方法:在輸入登記車輛到達(dá)時(shí)間的時(shí)候,沒(méi)有相關(guān)的小時(shí)、分鐘數(shù)字的限制范圍——(小時(shí)0~23,分鐘0~60);這就使程序不那么健壯了,還有,在計(jì)算收費(fèi)時(shí)如果離開(kāi)時(shí)間是到了第二天了,這樣就可能會(huì)導(dǎo)致收費(fèi)時(shí)負(fù)的或減少很多。就是說(shuō),還應(yīng)該算天數(shù),要不就要規(guī)定只能當(dāng)天停,當(dāng)天開(kāi)走。我改了幾次改不好,又鑒于程序要求中也沒(méi)有提及,所以我也就沒(méi)去改了。只要能實(shí)現(xiàn)主要的功能就好了。在以后不斷的學(xué)習(xí)中,希望可以得以改善。五用戶手冊(cè)簡(jiǎn)單的員工管理系統(tǒng)【使用說(shuō)明】(1)進(jìn)入程序的界面,出現(xiàn)命令的幫助信息,并嚴(yán)格按照提示的信息完成相應(yīng)的操作。(2)輸入1:添加員工信息;輸入2:修改員工信息;輸入3:瀏覽員工信息;輸入4:查找員工信息;輸入5:刪除員工信息;輸入6:讀取員工信息;輸入7:退出系統(tǒng)(3)首先得先添加員工的信息,否則鏈表中沒(méi)有信息無(wú)法進(jìn)行下一步操作。(4)查找時(shí),輸入1:按員工工號(hào)查找;輸入2:按員工姓名查找。(5)在覺(jué)得操作完畢時(shí)輸入7:退出系統(tǒng)?!境绦蛑械念^文件】#include"stdio.h"#include"stdlib.h"#include"string.h"六測(cè)試成果簡(jiǎn)單的員工管理系統(tǒng)七附錄(源程序清單)簡(jiǎn)單的員工管理系統(tǒng)#include"stdio.h"#include"stdlib.h"#include"string.h"structwokers//定義結(jié)構(gòu)體{ charnum[10];//員工工號(hào) charname[15];//員工姓名 charsex[15];//員工性別 charbirthday[15];//員工出生年月 chardegree[10];//員工學(xué)歷 charposition[10];//員工職位 charsalary[10];//員工工資 charaddress[20];//員工地址 chartelephone[20];//員工電話};typedefstructnode{ structwokersdata; structnode*next;//建立一個(gè)鏈表}Node;voidAdd(Node*woker)//輸入員工信息{ Node*p,*r,*s; charn[10];//先用于輸入職工號(hào),之后用于判斷是否結(jié)束循環(huán) r=woker; s=woker->next;//使s為第一個(gè)有用的結(jié)點(diǎn) while(r->next!=NULL) r=r->next;//將指針置于表尾 while(1) { printf("輸入0則返回主菜單!\n"); printf("請(qǐng)輸入職工號(hào):\n"); scanf("%s",n); if(strcmp(n,"0")==0) break; p=(Node*)malloc(sizeof(Node));//申請(qǐng)空間 strcpy(p->data.num,n); printf("請(qǐng)輸入員工姓名:\n"); scanf("%s",p->); printf("請(qǐng)輸入員工性別:\n"); scanf("%s",p->data.sex); printf("請(qǐng)輸入員工出生年月:\n"); scanf("%s",p->data.birthday); printf("請(qǐng)輸入員工學(xué)歷:\n"); scanf("%s",p->data.degree); printf("請(qǐng)輸入員工職位:\n"); scanf("%s",p->data.position); printf("請(qǐng)輸入員工工資:\n"); scanf("%s",p->data.salary); printf("請(qǐng)輸入員工住址:\n"); scanf("%s",p->data.address); printf("請(qǐng)輸入員工電話:\n"); scanf("%s",p->data.telephone); printf("已完成一條記錄的添加!\n"); p->next=NULL; r->next=p;//將p與先前的鏈表連起來(lái)構(gòu)成一條新的鏈表 r=p;//將r重新設(shè)為新鏈的最后一個(gè)有用的結(jié)點(diǎn) }}voidchange(Node*woker)//修改員工信息{ Node*p; charfind[20]; if(!woker->next) { printf("沒(méi)有資料可以以修改!\n"); return; } printf("請(qǐng)輸入要修改的職工號(hào):"); scanf("%s",find); p=woker->next; while(p!=NULL) { if(strcmp(p->data.num,find)==0)//如果找到就跳出循環(huán)進(jìn)下一步修改 break; p=p->next; } if(p)//如果指針不為空則找到了,并進(jìn)行修改 { intx; while(1) { printf("完成修改請(qǐng)輸入0,否則輸入任意數(shù)再進(jìn)行修改!"); scanf("%d",&x); if(x==0) break; printf("請(qǐng)輸入新員工工號(hào)(字符型):",p->data.num); scanf("%s",p->data.num); printf("請(qǐng)輸入新員工姓名(字符型):",p->); scanf("%s",p->); printf("請(qǐng)輸入新員工性別(字符型):",p->data.sex); scanf("%s",p->data.sex); printf("請(qǐng)輸入新員工出生年月(字符型):",p->data.birthday); scanf("%s",p->data.birthday); printf("請(qǐng)輸入新員工學(xué)歷(字符型):",p->data.degree); scanf("%s",p->data.degree); printf("請(qǐng)輸入新員工職位(字符型):",p->data.position); scanf("%s",p->data.position); printf("請(qǐng)輸入新員工工資(字符型):",p->data.salary); scanf("%s",p->data.salary); printf("請(qǐng)輸入新員工住址(字符型):",p->data.address); scanf("%s",p->data.address); printf("請(qǐng)輸入新員工電話(字符型):",p->data.telephone); scanf("%s",p->data.telephone); } }else printf("要修改的信息不存在!\n");}voidDisp(Node*woker)//輸出員工信息{ Node*p; p=woker->next; if(!p) { printf("\n沒(méi)有記錄可以顯示!\n"); return; } printf("\t\t顯示結(jié)果\n\n"); printf("工號(hào)姓名性別生日學(xué)歷職位工資住址電話\n"); while(p) { printf("%-9s%-10s%-8s%-5s%-9s%-9s%-8s%-6s%-7s\n",p->data.num,p->,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary,p->data.address,p->data.telephone); printf("\n"); p=p->next; }}voidsearch(Node*woker)//按條件查找員工信息{ Node*p; intsel,flag2;charfind[20]; p=woker->next; if(!woker->next)//若鏈表為空 { printf("沒(méi)有資料可以查找!\n"); return; } printf("\t\t\t*************************************\n"); printf("\t\t\t*\t1:按員工工號(hào)查找\t*\n"); printf("\t\t\t*\t2:按員工姓名查找\t*\n"); printf("\t\t\t*************************************\n"); scanf("%d",&sel); if(sel==1) { flag2=0; printf("請(qǐng)輸入你要查找的員工工號(hào):"); scanf("%s",find); while(p) { if(strcmp(p->data.num,find)==0) { flag2=1; printf("工號(hào)姓名性別生日學(xué)歷職位工資住址電話\n"); } if(flag2==1) printf("%-9s%-11s%-8s%-8s%-10s%-9s%-9s%-7s%-7s\n",p->data.num,p->,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary,p->data.address,p->data.telephone); p=p->next; } if(flag2==0) printf("所要查找的員工不存在!\n"); } else if(sel==2) { flag2=0; printf("請(qǐng)輸入你要查找的員工姓名:"); scanf("%s",find); while(p) { if(strcmp(p->,find)==0) { flag2=1; printf("工號(hào)姓名性別生日學(xué)歷職位工資住址電話\n"); if(flag2==1) printf("%-9s%-11s%-8s%-8s%-10s%-9s%-9s%-7s%-7s\n",p->data.num,p->,p->data.sex,p->data.birthday,p->data.degree,p->data.position,p->data.salary,p->data.address,p->data.telephone); p=p->next; } } if(flag2==0) printf("所要查找的員工不存在!\n"); }}voidload(Node*woker)//從文件中讀取數(shù)據(jù){ Node*p; FILE*fp;//指向文件的指針 intrecordNum;//統(tǒng)計(jì)記錄數(shù) if((fp=fopen("員工管理系統(tǒng).txt","rb"))==NULL)//打開(kāi)文件 printf("cannotopenfile\n");//打開(kāi)文件失敗 p=woker; recordNum=0;printf("工號(hào)姓名性別生日學(xué)歷職位工資住址電話\n"); while(!feof(fp)) { fscanf(fp,"%s%s%s%s%s%s%s%s%s",p->data.num,p->,p->data.sex,p->data.birthday,p->data.degree,p->data.positio

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論