電子醫(yī)囑錄入系統(tǒng)設(shè)計(jì)_第1頁(yè)
電子醫(yī)囑錄入系統(tǒng)設(shè)計(jì)_第2頁(yè)
電子醫(yī)囑錄入系統(tǒng)設(shè)計(jì)_第3頁(yè)
電子醫(yī)囑錄入系統(tǒng)設(shè)計(jì)_第4頁(yè)
電子醫(yī)囑錄入系統(tǒng)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩41頁(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)介

./課程設(shè)計(jì)報(bào)告題目電子醫(yī)囑錄入系統(tǒng)系別年級(jí)專業(yè)班級(jí)學(xué)號(hào)學(xué)生姓名指導(dǎo)教師職稱講師設(shè)計(jì)時(shí)間目錄1緒論11.1課題背景和意義11.2主要研究?jī)?nèi)容12系統(tǒng)功能設(shè)計(jì)22.1初始化模塊22.2預(yù)約模塊22.3查看預(yù)約信息模塊22.4刪除預(yù)約信息模塊32.5創(chuàng)建病人信息模塊32.6修改病人信息模塊32.7查看病人信息模塊32.8保存信息并退出模塊33系統(tǒng)詳細(xì)設(shè)計(jì)43.1數(shù)據(jù)表的存儲(chǔ)組織4病人信息數(shù)據(jù)結(jié)構(gòu)4科室信息數(shù)據(jù)結(jié)構(gòu)5病人預(yù)約信息數(shù)據(jù)結(jié)構(gòu)5三種結(jié)構(gòu)的關(guān)聯(lián)63.2主要算法設(shè)計(jì)7初始化模塊8預(yù)約模塊9查看預(yù)約模塊10刪除預(yù)約模塊11創(chuàng)建病人信息模塊12修改病人信息模塊13查看病人信息模塊14保存信息并退出模塊154系統(tǒng)測(cè)試164.1病人信息管理測(cè)試174.2病人預(yù)約信息管理測(cè)試214.3文件信息存取測(cè)試245總結(jié)與展望245.1全文總結(jié)24心得體會(huì)25參考文獻(xiàn)26.1緒論1.1課題背景和意義隨著社會(huì)的信息化,各個(gè)行業(yè)的管理與運(yùn)營(yíng)都逐漸開始使用電子系統(tǒng)來(lái)取代傳統(tǒng)的管理模式。使用電子醫(yī)囑管理可以幫助醫(yī)院更為便捷的管理醫(yī)囑,通過(guò)計(jì)算機(jī)技術(shù)給醫(yī)院的管理人員和就診病人在病歷創(chuàng)建、預(yù)約查詢以及記錄統(tǒng)計(jì)等方面帶來(lái)便利,為醫(yī)院在管理醫(yī)囑方面提供一種更好的方式。1.2主要研究?jī)?nèi)容本系統(tǒng)使用C語(yǔ)言編寫了電子醫(yī)囑管理系統(tǒng),主要實(shí)現(xiàn)醫(yī)院中醫(yī)生醫(yī)囑的電子管理。通過(guò)此系統(tǒng)可對(duì)醫(yī)囑進(jìn)行管理和維護(hù)操作,實(shí)現(xiàn)電子醫(yī)囑管理的一般功能。主要內(nèi)容包括:電子醫(yī)囑查詢。提供按照科室信息、病人信息查詢;電子醫(yī)囑創(chuàng)建。提供病人信息、預(yù)約記錄的錄入功能;電子醫(yī)囑編輯。提供對(duì)系統(tǒng)數(shù)據(jù)的修改、刪除等功能;電子醫(yī)囑維護(hù)。提供對(duì)系統(tǒng)數(shù)據(jù)的保存、讀取等功能。系統(tǒng)采用菜單方式作為人機(jī)交互界面,為用戶提供便捷的使用方式。用戶根據(jù)菜單提示,選擇所需要的服務(wù),系統(tǒng)自動(dòng)做出相應(yīng)的響應(yīng)。醫(yī)囑信息包含病人姓名、身份證號(hào)、科室名稱、就診科室等??剖倚畔ⅰ⒉∪诵畔⒌淖x取和保存要求有一定的格式規(guī)范,錄入的信息以文件的形式保存并可以對(duì)其進(jìn)行瀏覽、查詢、修改、刪除等基本操作。整個(gè)程序基于鏈表實(shí)現(xiàn),一個(gè)就診信息的更改不影響其他的就診記錄。2系統(tǒng)功能設(shè)計(jì)電子醫(yī)囑管理系統(tǒng)是由五大功能模塊組成:預(yù)約模塊、查看預(yù)約信息模塊、刪除預(yù)約信息模塊、創(chuàng)建病人信息模塊、修改病人信息模塊、查看病人信息模塊、保存信息并退出模塊以及初始化模塊如圖2.1所示。圖2.1電子醫(yī)囑管理系統(tǒng)的功能模塊2.1初始化模塊創(chuàng)建鏈表并將文件中的格式化信息讀取到內(nèi)存鏈表中。2.2預(yù)約模塊預(yù)約模塊的操作流程包括選擇預(yù)約科室,輸入預(yù)約人員身份證號(hào),若存在病人則預(yù)約,若不存在則返回主界面。2.3查看預(yù)約信息模塊查看預(yù)約信息模塊的操作流程包括輸入預(yù)約人員身份證號(hào)碼得到相關(guān)預(yù)約科室信息,若存在病人則預(yù)約,若不存在則返回主界面。2.4刪除預(yù)約信息模塊刪除預(yù)約信息模塊的操作流程包括輸入預(yù)約人員身份證號(hào)碼得到相關(guān)預(yù)約科室信息,選擇刪除預(yù)約科室刪除成功返回主界面。2.5創(chuàng)建病人信息模塊創(chuàng)建病人信息模塊的操作流程依次輸入身份證號(hào)碼、姓名、年齡、性別、聯(lián)系電話、住址、密碼并回車添加病人信息。2.6修改病人信息模塊修改病人信息模塊的操作流程輸入病人身份證號(hào)顯示病人信息輸入修改項(xiàng)并輸入修改的內(nèi)容,若退出則按0返回主界面。2.7查看病人信息模塊查看病人信息模塊的操作流程輸入病人身份證號(hào)碼顯示病人信息按回車返回主界面。2.8保存信息并退出模塊保存信息并退出模塊的操作流程直接退出程序?qū)㈡湵碇械男畔⒈4娴轿募?系統(tǒng)詳細(xì)設(shè)計(jì)3.1數(shù)據(jù)表的存儲(chǔ)組織根據(jù)2.3節(jié)中設(shè)計(jì),系統(tǒng)建立病人基本信息和病人預(yù)約信息表。在系統(tǒng)實(shí)現(xiàn)中,采用內(nèi)存鏈表和磁盤文件二級(jí)的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)來(lái)存放這些數(shù)據(jù)信息。系統(tǒng)將文件信息轉(zhuǎn)換為內(nèi)存鏈表,再將鏈表轉(zhuǎn)換成磁盤文件形式。系統(tǒng)首先將磁盤文件數(shù)據(jù)轉(zhuǎn)入內(nèi)存鏈表,在通過(guò)對(duì)鏈表數(shù)據(jù)的處理,對(duì)用戶請(qǐng)求作出響應(yīng)。本系統(tǒng)以病人信息文件以及預(yù)約信息二份文本文件作為表單對(duì)應(yīng)的磁盤存儲(chǔ),在內(nèi)存中以結(jié)構(gòu)變量的方式分別存放基本信息,并以鏈表的形式將所有的數(shù)據(jù)組織起來(lái)。3.1.1病人信息數(shù)據(jù)結(jié)構(gòu)病人信息在內(nèi)存中采用結(jié)構(gòu)類型進(jìn)行描述。病人結(jié)構(gòu)成員包括:病人姓名、身份證號(hào)、性別、年齡、聯(lián)系方式、家庭住址、密碼。病人姓名、身份證號(hào)、性別、年齡、聯(lián)系方式、家庭住址、密碼均以字符數(shù)組的形式存儲(chǔ)。在病人結(jié)構(gòu)中有一個(gè)個(gè)結(jié)構(gòu)指針,指向下一個(gè)病人結(jié)構(gòu),通過(guò)這個(gè)指針可以組成病人鏈表。該結(jié)構(gòu)變量實(shí)現(xiàn)病人信息表在計(jì)算機(jī)上的存儲(chǔ),其結(jié)構(gòu)聲明如圖3.1所示。typedefstructtypedefstructpatientinf{charname[10]; charnumber[19]; charsex[10]; charage[10]; chartel[20]; charaddr[20];charPassWord[5]; structpatientinf*next;}patinf;圖3.1病人結(jié)構(gòu)3.1.2科室信息數(shù)據(jù)結(jié)構(gòu)科室信息在內(nèi)存中采用結(jié)構(gòu)類型進(jìn)行描述。科室結(jié)構(gòu)成員包括:科室名稱。科室名稱以指針數(shù)組的形式存儲(chǔ)。在科室結(jié)構(gòu)中有二個(gè)結(jié)構(gòu)指針,一個(gè)指向下一個(gè)科室結(jié)構(gòu),通過(guò)這個(gè)指針可以組成科室信息鏈表,一個(gè)指向下一個(gè)病人結(jié)構(gòu),通過(guò)這個(gè)指針可以組成病人鏈表。該結(jié)構(gòu)變量實(shí)現(xiàn)病人信息表在計(jì)算機(jī)上的存儲(chǔ),其結(jié)構(gòu)聲明如圖3.2所示。typedefstructtypedefstructhead{ char*name; structhead*next; structpat*next_;}class_;圖3.2科室結(jié)構(gòu)病人預(yù)約信息數(shù)據(jù)結(jié)構(gòu)病人預(yù)約信息在內(nèi)存中采用結(jié)構(gòu)類型進(jìn)行描述。預(yù)約結(jié)構(gòu)成員包括:病人身份證號(hào)。病人身份證號(hào)以字符數(shù)組的形式存儲(chǔ)。在預(yù)約結(jié)構(gòu)中有一個(gè)結(jié)構(gòu)指針,指向下一個(gè)預(yù)約結(jié)構(gòu)通過(guò)該指針可以將某一科室的所有預(yù)約病人鏈接起來(lái),組成就診鏈表。該結(jié)構(gòu)變量實(shí)現(xiàn)病人預(yù)約信息表在計(jì)算機(jī)上的存儲(chǔ),其結(jié)構(gòu)聲明如圖3.3所示。typedefstructtypedefstructpat{ charnumber[19]; structpat*next;}patient;圖3.3預(yù)約結(jié)構(gòu)三種結(jié)構(gòu)的關(guān)聯(lián)本系統(tǒng)數(shù)據(jù)之間以指針相結(jié)合的方式來(lái)鏈接系統(tǒng)中各類對(duì)象。系統(tǒng)中,科室結(jié)構(gòu)中的病人身份證號(hào)以及科室編號(hào)的值將科室和預(yù)約病人關(guān)聯(lián)起來(lái)。在系統(tǒng)實(shí)現(xiàn)中為了提高查詢效率,查詢模塊實(shí)現(xiàn)中采用了值的相等對(duì)記錄進(jìn)行定位??剖?、預(yù)約病人之間存在著層次關(guān)系,為了在內(nèi)存中較好的體現(xiàn)這種層次關(guān)系,本系統(tǒng)采用二重鏈表的方式組織信息之間的關(guān)聯(lián)關(guān)系。具體結(jié)構(gòu)如圖3.4所示??剖倚畔⒋娣旁诙劓湵淼闹麈溄Y(jié)點(diǎn)上,每個(gè)主鏈結(jié)點(diǎn)除了保存下一個(gè)結(jié)點(diǎn)的地址,還保存該科室的預(yù)約病人的基本信息鏈表頭結(jié)點(diǎn)地址;預(yù)約病人信息存放在二重鏈表中相應(yīng)科室的預(yù)約病人鏈結(jié)點(diǎn)上,每個(gè)結(jié)點(diǎn)保存下一個(gè)預(yù)約病人基本信息結(jié)點(diǎn)的地址。圖3.4二重鏈表存儲(chǔ)結(jié)構(gòu)示意圖病人信息存放在單鏈表中,具體結(jié)構(gòu)如圖3.5所示。病人信息結(jié)點(diǎn)除了保存病人信息還保存下一個(gè)結(jié)點(diǎn)的地址。NULL病人信息PatInfHEADNULL病人信息PatInfHEAD圖3.5單鏈表存儲(chǔ)結(jié)構(gòu)示意圖3.2主要算法設(shè)計(jì)本系統(tǒng)在算法設(shè)計(jì)上采用"自頂向下,逐步求精"的設(shè)計(jì)方法。由全局到局部、由整體到細(xì)節(jié)、由抽象到具體,逐步將系統(tǒng)的問(wèn)題分解為相對(duì)簡(jiǎn)單的小規(guī)模問(wèn)題。本系統(tǒng)依照使用功能分成幾個(gè)子模塊:預(yù)約模塊、查看預(yù)約信息模塊、刪除預(yù)約信息模塊、創(chuàng)建病人信息模塊、修改病人信息模塊、查看病人信息模塊、保存信息并退出模塊以及初始化模塊。系統(tǒng)的總控模塊的算法流程如圖3.1所示。系統(tǒng)運(yùn)行系統(tǒng)運(yùn)行文本菜單初始化界面加載文件中存儲(chǔ)的鏈表數(shù)據(jù)系統(tǒng)功能模塊的選擇和運(yùn)行保存數(shù)據(jù)鏈表關(guān)閉系統(tǒng)結(jié)束圖3.1主程序運(yùn)行流程圖初始化模塊初始化模塊負(fù)責(zé)將文本文件轉(zhuǎn)換成內(nèi)存鏈表。在第2章的概要設(shè)計(jì)中,系統(tǒng)數(shù)據(jù)分為二種基礎(chǔ)數(shù)據(jù),這二種系統(tǒng)數(shù)據(jù)要求儲(chǔ)存到數(shù)據(jù)文件中。為便于處理每個(gè)文件,本系統(tǒng)將三種數(shù)據(jù)分別存放在二個(gè)文本文件中。為了實(shí)現(xiàn)上述功能編輯了三個(gè)子函數(shù)與一個(gè)創(chuàng)建單鏈表語(yǔ)句:structhead*TreeListCreat<intn>;voidPatInfToListRead<>;voidAppointedInfToListRead<>;PatInfHEAD->next=NULL;初始化的過(guò)程包括將預(yù)約信息文件、病人信息文件從數(shù)據(jù)文件中讀取并存放到所創(chuàng)建的鏈表中。算法流程如圖3.2所示。圖3.2初始化模塊運(yùn)行流程圖3.2.2預(yù)約模塊預(yù)約模塊中包括找到對(duì)應(yīng)預(yù)約科室尾部結(jié)點(diǎn)并添加結(jié)點(diǎn)其中使用到四個(gè)函數(shù):structpat*mainListLocatedSearch<char*str>;structpat*leafListTailSearch<structpat*head>;patinf*PatInfNodeSearch<char*number>;structpat*leafListnodeAdd<patient*previous>;過(guò)程包括找到所預(yù)約科室頭結(jié)點(diǎn)然后根據(jù)頭結(jié)點(diǎn)找到添加鏈表的尾結(jié)點(diǎn)輸入信息在添加結(jié)點(diǎn)。算法流程如圖3.3所示。圖3.3預(yù)約模塊運(yùn)行流程圖3.2.3查看預(yù)約模塊查看預(yù)約模塊中包括找到病人預(yù)約二重鏈表中所有的預(yù)約信息使用到兩個(gè)子函數(shù):voidAppointNumDisplay<>;voidPatAppointedSearch<char*str>;過(guò)程包括遍歷分科室遍歷二級(jí)鏈表然后顯示預(yù)約信息。算法流程如圖3.4所示。圖3.4查看預(yù)約模塊運(yùn)行流程圖3.2.4刪除預(yù)約模塊刪除預(yù)約模塊中包括找到結(jié)點(diǎn)位置,和找到結(jié)點(diǎn)前一個(gè)位置用到四個(gè)子函數(shù):structstructpat*leafListLocatedSearch<structpat*secondlist,char*num>;structpat*mainListLocatedSearch<char*str>;structpat*leafListLocatedSearchPrevious<structpat*secondlist,char*num>;structpat*leafListLocatedSearch<structpat*secondlist,char*num>;過(guò)程包括先找到要?jiǎng)h除結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn)位置和刪除結(jié)點(diǎn)位置然后刪除結(jié)點(diǎn)然后將前一個(gè)結(jié)點(diǎn)的位置指向下一個(gè)結(jié)點(diǎn)。算法流程如圖3.5所示。圖3.5刪除預(yù)約模塊運(yùn)行流程圖3.2.5創(chuàng)建病人信息模塊創(chuàng)建病人信息模塊中包括找到病人信息鏈表的尾結(jié)點(diǎn)然后添加結(jié)點(diǎn)使用到兩個(gè)子函數(shù):patinf*PatInfListTailSearch<>voidPatInfListnodeAdd<patinf*tail>過(guò)程包括找到病人結(jié)點(diǎn)尾部然后在病人結(jié)點(diǎn)尾部添加一個(gè)結(jié)點(diǎn)。算法流程如圖3.6所示。圖3.6創(chuàng)建病人信息模塊運(yùn)行流程圖3.2.6修改病人信息模塊修改病人信息模塊中使用到一個(gè)子函數(shù):patinf*PatInfNodeSearch<char*number>;過(guò)程包括找到結(jié)點(diǎn)然后修改內(nèi)容。算法流程如圖3.7所示。圖3.7修改病人信息模塊運(yùn)行流程圖3.2.7查看病人信息模塊查看病人信息模塊中使用到一個(gè)子函數(shù):patinf*PatInfNodeSearch<char*number>;過(guò)程包括找到結(jié)點(diǎn)然后顯示內(nèi)容。算法流程如圖3.8所示。圖3.8查看病人信息模塊運(yùn)行流程圖3.2.8保存信息并退出模塊保存信息并退出模塊中使用到兩個(gè)子函數(shù):voidPatListInfSave<>;voidAppointListInfSave<>;過(guò)程包括保存格式化的病人信息到文件和保存格式化的預(yù)約信息到文件然后退出程序。算法流程如圖3.9所示。圖3.9保存信息并退出模塊運(yùn)行流程圖4系統(tǒng)測(cè)試軟件測(cè)試即使用人工或者自動(dòng)手段來(lái)運(yùn)行或測(cè)試某個(gè)系統(tǒng)的過(guò)程,其目的在于檢驗(yàn)它是否滿足規(guī)定的需求或弄清預(yù)期結(jié)果與實(shí)際結(jié)果之間的差別。隨著軟件測(cè)試技術(shù)的不斷發(fā)展,測(cè)試方法也越來(lái)越多樣化,針對(duì)性更強(qiáng);選擇合適的軟件測(cè)試方法可以讓測(cè)試事半功倍。常用的軟件測(cè)試方法有:黑盒測(cè)試、白盒測(cè)試、靜態(tài)測(cè)試、動(dòng)態(tài)測(cè)試、自動(dòng)化測(cè)試、功能測(cè)試、集成測(cè)試、場(chǎng)景測(cè)試、系統(tǒng)測(cè)試等。本系統(tǒng)的測(cè)試針對(duì)系統(tǒng)的功能進(jìn)行檢查,以功能進(jìn)行分類,對(duì)幾個(gè)模塊進(jìn)行測(cè)試。4.1病人信息管理測(cè)試運(yùn)行程序首先創(chuàng)建病人信息如圖4.1.1所示圖4.1.1創(chuàng)建病人信息然后可選擇修改病人信息如圖4.1.2所示圖4.1.2修改病人信息可修改多項(xiàng)病人信息如圖所示圖4.1.3修改多項(xiàng)病人信息也可查看病人信息如圖4.1.4所示圖4.1.4查看病人信息4.2病人預(yù)約信息管理測(cè)試創(chuàng)建病人信息后便可開始預(yù)約如圖4.2.1所示圖4.2.1預(yù)約科室也可查輸入病人身份證查看預(yù)約信息如圖4.2.2所示圖4.2.2查看預(yù)約信息還可刪除預(yù)約如圖4.2.3所示圖4.2.4刪除預(yù)約信息4.3文件信息存取測(cè)試初始化會(huì)打開"病人信息.txt"與"科室信息.txt"讀取信息如果文件不存在則會(huì)創(chuàng)建,程序退出選擇"7.保存信息并退出",鏈表中的信息會(huì)保存到文件中5總結(jié)與展望5.1全文總結(jié)本文使用C語(yǔ)言實(shí)現(xiàn)了《電子醫(yī)囑管理系統(tǒng)》,實(shí)現(xiàn)了課程設(shè)計(jì)的功能要求,能夠正確運(yùn)行。從實(shí)用和性能方面可以進(jìn)一步加以改善?!?完整性。可通過(guò)增加科室名單表等方法,對(duì)輸入信息進(jìn)行完整性檢查。如果輸入科室名稱與名單表不符,則該信息視為無(wú)效。對(duì)年齡設(shè)置上下限,以保證數(shù)據(jù)的合理性。〔2安全性。在系統(tǒng)中可以增加多種角色的登陸方式,提高系統(tǒng)的安全性。對(duì)于不同角色的用戶,給與不同的操作權(quán)限,從而保證系統(tǒng)內(nèi)部數(shù)據(jù)的安全性。在登陸時(shí)可加入口令認(rèn)證,確保用戶身份的正確性?!?性能優(yōu)化。對(duì)內(nèi)部數(shù)據(jù)建立索引表,對(duì)索引表進(jìn)行二分查找,提高查詢速度。對(duì)鏈表可以采用雙向十字鏈表結(jié)構(gòu)存儲(chǔ),提高信息處理的速度。心得體會(huì)剛開始看到題目時(shí)一頭霧水,不知該從何處下手,,因?yàn)槠綍r(shí)只做過(guò)一些輸入輸出的普通小程序,根本沒有界面的概念。于是我就想如果先運(yùn)行一下書上提供的樣例程序,腦中大概也就有了一些概念和想法??墒前褧咸峁┑膸讉€(gè)代碼拿來(lái)一運(yùn)行編譯error就有幾十行,面對(duì)那上千行的代碼,我就不知該怎么下手了。后來(lái)實(shí)在沒辦法,首先拿起那本《C語(yǔ)言實(shí)驗(yàn)與課程設(shè)計(jì)》看了三天,大概懂了一些函數(shù)的用法,就開始將書上的代碼一段一段的輸入進(jìn)去跑一跑,慢慢的就大概懂了怎么來(lái)實(shí)現(xiàn)那些界面。首先把那個(gè)任務(wù)說(shuō)明看了幾遍,就將程序主要分成五大塊內(nèi)容:〔1文件處理功能:首先得有將數(shù)據(jù)信息保存的功能,這就得用到老師講的"文件"那章的知識(shí),我又拿起課本看了幾遍。其次還得有數(shù)據(jù)備份的功能,以備在重大失誤后能找回一些數(shù)據(jù),將損失降低。有了備份,還得有恢復(fù)備份數(shù)據(jù)地功能。最后必須有安全退出系統(tǒng)的功能?!?數(shù)據(jù)處理功能:首先得讓系統(tǒng)能讀入操作者輸入的數(shù)據(jù)并將數(shù)據(jù)存儲(chǔ)在文件中。然后如果操作者輸入數(shù)據(jù)有誤那還得有對(duì)數(shù)據(jù)修改,部分?jǐn)?shù)據(jù)刪除,以及數(shù)據(jù)添加的功能?!?查詢功能:第一可以按照科室編號(hào)來(lái)查詢,第二還可以按照病人身份證號(hào)查詢,第三還可以按照科室編號(hào),病人身份證及就診日期進(jìn)行多條件統(tǒng)計(jì)查詢?!?統(tǒng)計(jì)信息功能:最重要的要有日就診人數(shù)統(tǒng)計(jì)功能,其次還可以有病人就診歷史,就診病人年齡分類的統(tǒng)計(jì)?!?系統(tǒng)幫助功能:第一得告訴操作者本系統(tǒng)的用途,然后告訴怎樣操作使用系統(tǒng)以及一些基本的操作快捷功能。最后,當(dāng)屏幕上顯示的信息過(guò)多時(shí)還得有清理屏幕的功能,以方便用戶觀看數(shù)據(jù)。接下來(lái)就是一一實(shí)現(xiàn)那些功能。通過(guò)運(yùn)用課堂上講過(guò)的數(shù)組,指針,文件等知識(shí),編寫了鏈表的創(chuàng)建,之后是將鏈表的內(nèi)容寫入到文件中保存,并將文件中寫入的內(nèi)容再次逐條讀取出來(lái),顯示在屏幕上。這個(gè)主體寫完了,接下來(lái)就開始寫科室、病人等信息的查詢函數(shù),這個(gè)就比較容易點(diǎn)。還有就是我想寫一個(gè)能將同一病人在不同科室下的所有就診記錄全部顯示的功能,方便病人查詢自己就診歷史。最后就是調(diào)試程序了。這個(gè)應(yīng)該是整個(gè)課程設(shè)計(jì)中最為復(fù)雜和難搞的部分。首先是整個(gè)系統(tǒng),光是函數(shù)就有幾十個(gè),而且經(jīng)常是一個(gè)函數(shù)中又調(diào)用著若干其它函數(shù),這樣調(diào)試起來(lái)就比較困難,因?yàn)榫退阋粋€(gè)函數(shù)里,一點(diǎn)小小的錯(cuò)誤就會(huì)引起連鎖反應(yīng)導(dǎo)致其它函數(shù)都出錯(cuò),而且有些錯(cuò)誤時(shí)隱性的,就是可能在這個(gè)函數(shù)中運(yùn)行沒問(wèn)題,可在哪個(gè)函數(shù)中運(yùn)行起來(lái)又有大問(wèn)題。所以調(diào)試也是最耗時(shí)間和精力的一個(gè)環(huán)節(jié),有時(shí)候我為了測(cè)試一個(gè)函數(shù)的功能是否穩(wěn)定,我得將程序跑很多次,一遍又一遍的運(yùn)行,看看有沒有一些不足的地方,有沒有一些隱藏的問(wèn)題,然后又得靜下心來(lái)仔細(xì)分析問(wèn)題原因所在并慢慢地糾正并再次調(diào)試運(yùn)行,直到滿意為止。差不多有連續(xù)十來(lái)天我有空就將程序跑一跑,看看有沒有大問(wèn)題潛藏在其中,一經(jīng)發(fā)現(xiàn)立刻將它修正。這十來(lái)天我也體會(huì)調(diào)試員真還得過(guò)硬的基礎(chǔ)知識(shí),能敏銳覺察出代碼中的錯(cuò)誤,而且還得有足夠的精力和耐力。盡管程序系統(tǒng)算是完成了,但是開始寫報(bào)告時(shí)才發(fā)現(xiàn)原來(lái)課程設(shè)計(jì)才剛完成了一半而已。還得將當(dāng)初的構(gòu)思、想法、到實(shí)現(xiàn)、再到最后的調(diào)試,這其中每個(gè)環(huán)節(jié)的步驟用文字的形式記錄下來(lái),好讓其他人也能了解你當(dāng)初的想法。其實(shí)有些想法有你自己特異的思維方式,也許口頭說(shuō)說(shuō)還行,真得寫下來(lái),并讓別人也看懂,并不那么容易。在本次C課程設(shè)計(jì)構(gòu)思創(chuàng)作過(guò)程中,得到了老師的大力幫助和支持,在此表示衷心的感謝,感謝提供無(wú)私的幫助和支持的老師們!感謝他們默默無(wú)聞的奉獻(xiàn)!另外也要感謝熱心的同學(xué)們,他們?cè)谖业脑O(shè)計(jì)過(guò)程中給與了很多的建議與幫助。參考文獻(xiàn)[1]曹計(jì)昌,盧萍,李開.C語(yǔ)言程序設(shè)計(jì),北京:科學(xué)出版社,2008[2]張引.C程序設(shè)計(jì)基礎(chǔ)課程設(shè)計(jì),XX:XX大學(xué)出版社,2007[3]黃明,梁旭,萬(wàn)洪莉.C語(yǔ)言課程設(shè)計(jì),北京:電子工業(yè)出版社,2006[4]BrainWKernighan,DennisMRitchie.THECPROGRAMMINGLANGUAGE.北京:清華大學(xué)出版社。PRENTICEHALL,2011.[5]ISO/IEC的C語(yǔ)言標(biāo)準(zhǔn)。ISO/IEC9899:2011[6]秦友淑,曹化工。C語(yǔ)言程序設(shè)計(jì)教程〔第二版。[7]田淑清.二級(jí)教程-C語(yǔ)言程序設(shè)計(jì)<2008年版>[8]劉振安.C語(yǔ)言程序設(shè)計(jì)[M].機(jī)械工業(yè)出版社,2007#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<string.h>#include<time.h>#include<Windows.h>#defineN5/*科室數(shù)量*/time_t_Curtime=<time_t>0;structtm*_RetTime=NULL;/**@功能:定義patient結(jié)構(gòu)體*@輸入:*@返回:*@*/typedefstructpatientinf{charnumber[19];charPassWord[5];charname[10];charage[10];charsex[10];chartel[20];charaddr[20];structpatientinf*next;}patinf;/**@功能:定義patient結(jié)構(gòu)體*@輸入:*@返回:*@*/typedefstructpat{charnumber[19];chartime[20];structhead*_next;structpat*next;}patient;/**@功能:定義class_結(jié)構(gòu)體*@輸入:*@返回:*@*/typedefstructhead{char*name;structhead*next;structpat*next_;}class_;/*定義一個(gè)大頭*/class_*ALL=<structhead*>malloc<sizeof<structhead>>;/*定義病人信息鏈表頭*/patinf*PatInfHEAD=<patinf*>malloc<sizeof<patinf>>;charstrhead2[5]={"頭"};charSTR[N][12]={"內(nèi)科","外科","兒科","骨科","皮膚科"};charStrfilepat[17]="病人信息.txt";charStrfileappointed[17]="預(yù)約信息.txt";/**@功能:從文件中讀入預(yù)約信息*@輸入:*@返回:*@*/voidAppointListInfSave<>;/**@功能:從文件中讀入預(yù)約信息*@輸入:*@返回:*@*/voidAppointedInfToListRead<>;/**@功能:顯示各個(gè)科室預(yù)約人數(shù)信息*@輸入:*@返回:*@*/voidAppointNumDisplay<>;/**@功能:從文件中讀入科室信息*@輸入:*@返回:*@*/voidClassMessageDisplay<intnumber>;/**@功能:遍歷鏈表所有元素*@輸入:鏈表頭結(jié)點(diǎn),匹配元素*@*@返回:結(jié)點(diǎn)位置<結(jié)點(diǎn)地址>*@*/structpat*leafListLocatedSearch<structpat*secondlist,char*num>;/**@功能:遍歷鏈表所有元素*@輸入:鏈表頭結(jié)點(diǎn),匹配元素*@*@返回:結(jié)點(diǎn)位置的上一個(gè)位置*@*/structpat*leafListLocatedSearchPrevious<structpat*secondlist,char*num>;/**@功能:向結(jié)點(diǎn)尾部添加結(jié)點(diǎn)*@輸入:葉子結(jié)點(diǎn)*@返回:尾結(jié)點(diǎn)*@*/structpat*leafListnodeAdd<patient*previous>;/**@功能:向結(jié)點(diǎn)尾部添加結(jié)點(diǎn)*@輸入:葉子結(jié)點(diǎn)*@返回:尾結(jié)點(diǎn)*@*/structpat*leafListnodeandNumAdd<char*Num,patient*previous>;/**@功能:遍歷鏈表所有元素*@輸入:鏈表頭結(jié)點(diǎn)*@*@返回:結(jié)點(diǎn)個(gè)數(shù)*@*/charleafListnumSearch<structpat*secondlist>;/**@功能:找到樹枝尾部*@輸入:樹枝頭部結(jié)點(diǎn)*@返回:尾部位置<尾部地址>*@*/structpat*leafListTailSearch<structpat*head>;/**@功能:遍歷鏈表所有元素*@輸入:鏈表頭結(jié)點(diǎn)<structhead*mainlist,char*str>*@*@返回:副鏈表頭*@*/structpat*mainListLocatedSearch<char*str>;/**@功能:遍歷鏈表所有元素*@輸入:鏈表頭結(jié)點(diǎn)<structhead*mainlist>*@*@返回:結(jié)點(diǎn)位置<結(jié)點(diǎn)地址>*@*/charmainListnumSearch<structhead*mainlist>;/**@功能:從病人鏈表中遍歷病人信息*@輸入:*@返回:*@*/voidPatAppointedSearch<char*str>;/**@功能:改變病人信息*@輸入:病人身份證號(hào)*@返回:*@*/voidPatInfChange<char*number>;/**@功能:向病人信息鏈表末端添加元素*@輸入:patinf*tail*@返回:*@*/voidPatInfListnodeAdd<patinf*tail>;/**@功能:找到病人信息鏈表末端*@輸入:*@返回:末端結(jié)點(diǎn)地址*@*/patinf*PatInfListTailSearch<>;/**@功能:遍歷病人信息鏈表找到病人結(jié)點(diǎn)的前一結(jié)點(diǎn)*@輸入:病人身份證號(hào)*@返回:病人節(jié)點(diǎn)的前一結(jié)點(diǎn)位置*@*/patinf*PatInfNodePreviousSearch<char*number>;/**@功能:遍歷病人信息鏈表找到病人結(jié)點(diǎn)*@輸入:病人身份證號(hào)*@返回:病人節(jié)點(diǎn)位置*@*/patinf*PatInfNodeSearch<char*number>;/**@功能:從文件中讀入病人信息*@輸入:*@返回:*@*/voidPatInfToListRead<>;/**@功能:保存病人信息到鏈表*@輸入:*@返回:*@*/voidPatListInfSave<>;/**@功能:創(chuàng)建主干鏈表與葉子連接結(jié)點(diǎn)*@輸入:主干結(jié)點(diǎn)個(gè)數(shù)*@返回:主干頭結(jié)點(diǎn)*@*/structhead*TreeListCreat<intn>;/**@功能:創(chuàng)建主干鏈表與葉子連接結(jié)點(diǎn)*@輸入:主干結(jié)點(diǎn)個(gè)數(shù)*@返回:主干頭結(jié)點(diǎn)*@*/structhead*TreeListCreat<intn>{inti;structhead*h,*p1,*p2;structpat*pat[N];h=NULL;for<i=0;i<n;i++>{p1=<structhead*>malloc<sizeof<structhead>>;/*動(dòng)態(tài)分配內(nèi)存空間,并數(shù)據(jù)轉(zhuǎn)換為<structhead>類型*/pat[i]=<structpat*>malloc<sizeof<structpat>>;/*為結(jié)點(diǎn)分配空間*/p1->name=*<STR+i>;strcpy_s<pat[i]->number,5,strhead2>;pat[i]->next=NULL;/*尾結(jié)點(diǎn)的后繼指針為NULL<空>*/pat[i]->_next=h;/*尾結(jié)點(diǎn)的后繼指針為h*/p1->next_=pat[i];/*返回鏈表的頭指針*/if<h==NULL>/*指定鏈表的頭指針*/{h=p1;p2=p1;}else{p2->next=p1;p2=p1;}p2->next=NULL;/*尾結(jié)點(diǎn)的后繼指針為NULL<空>*/}returnh;/*返回鏈表的頭指針*/}/**@功能:向結(jié)點(diǎn)尾部添加結(jié)點(diǎn)*@輸入:葉子結(jié)點(diǎn)*@返回:尾結(jié)點(diǎn)*@*/structpat*leafListnodeAdd<patient*previous>{structpat*tail;tail=<structpat*>malloc<sizeof<structpat>>;/*動(dòng)態(tài)分配內(nèi)存空間,并數(shù)據(jù)轉(zhuǎn)換為<structpat>類型*/printf<"請(qǐng)輸入身份證號(hào):">;scanf_s<"%s",tail->number,19>;if<PatInfNodeSearch<tail->number>==0>return0;tail->next=NULL;/*尾結(jié)點(diǎn)的后繼指針為NULL<空>*/tail->_next=ALL;/*尾部結(jié)點(diǎn)_next指向ALL大頭*/if<previous->next==NULL>previous->next=tail;returntail;/*返回尾結(jié)點(diǎn)*/}/**@功能:向結(jié)點(diǎn)尾部添加結(jié)點(diǎn)*@輸入:葉子結(jié)點(diǎn)*@返回:尾結(jié)點(diǎn)*@*/structpat*leafListnodeandNumAdd<char*Num,patient*previous>{structpat*tail;tail=<structpat*>malloc<sizeof<structpat>>;/*動(dòng)態(tài)分配內(nèi)存空間,并數(shù)據(jù)轉(zhuǎn)換為<structpat>類型*/strncpy_s<tail->number,Num,19>;//tail->next=NULL;/*尾結(jié)點(diǎn)的后繼指針為NULL<空>*/tail->_next=ALL;/*尾部結(jié)點(diǎn)_next指向ALL大頭*/if<previous->next==NULL>previous->next=tail;/*head指向創(chuàng)建的結(jié)點(diǎn)*/returntail;/*返回尾結(jié)點(diǎn)*/}/**@功能:遍歷鏈表所有元素*@輸入:鏈表頭結(jié)點(diǎn)<structhead*mainlist>*@*@返回:結(jié)點(diǎn)位置<結(jié)點(diǎn)地址>*@*/charmainListnumSearch<structhead*mainlist>{chara=0;/*創(chuàng)建臨時(shí)變量*/structhead*mainTemp=<structhead*>malloc<sizeof<structhead>>;{mainTemp=mainlist;printf<"\n">;while<1>{a++;printf<"%d.%s:\n",a,mainTemp->name>;if<mainTemp->next==NULL>{printf<"\n">;}returna;mainTemp=mainTemp->next;}}}/**@功能:遍歷鏈表所有元素*@輸入:鏈表頭結(jié)點(diǎn)<structhead*mainlist,char*str>*@*@返回:副鏈表頭*@*/structpat*mainListLocatedSearch<char*str>{inta=0;/*創(chuàng)建臨時(shí)變量*/structhead*p=<structhead*>malloc<sizeof<structhead>>;{p=ALL->next;while<1>{if<strcmp<p->name,str>==0>{returnp->next_;}a++;if<p->next==NULL>break;p=p->next;}}return0;}/**@功能:遍歷鏈表所有元素*@輸入:鏈表頭結(jié)點(diǎn),匹配元素*@*@返回:結(jié)點(diǎn)位置<結(jié)點(diǎn)地址>*@*/structpat*leafListLocatedSearch<structpat*secondlist,char*num>{/*創(chuàng)建臨時(shí)變量*/structpat*secTemp=<structpat*>malloc<sizeof<structpat>>;secTemp=secondlist;while<1>{if<strcmp<secTemp->number,num>==0>{printf<"找到:%s\n",num>;returnsecTemp;//???}if<secTemp->next==NULL>break;secTemp=secTemp->next;}printf<"未找到:%s\n",num>;return0;}/**@功能:遍歷鏈表所有元素*@輸入:鏈表頭結(jié)點(diǎn),匹配元素*@*@返回:結(jié)點(diǎn)位置的上一個(gè)位置*@*/structpat*leafListLocatedSearchPrevious<structpat*secondlist,char*num>{/*創(chuàng)建臨時(shí)變量*/structpat*Previous,*secTemp=<structpat*>malloc<sizeof<structpat>>;secTemp=secondlist;while<1>{if<strcmp<secTemp->number,num>==0>{printf<"找到:%s\n",num>;returnPrevious;}if<secTemp->next==NULL>break;Previous=secTemp;secTemp=secTemp->next;}printf<"未找到:%s\n",num>;return0;}/**@功能:遍歷鏈表所有元素*@輸入:鏈表頭結(jié)點(diǎn)*@*@返回:結(jié)點(diǎn)個(gè)數(shù)*@*/charleafListnumSearch<structpat*secondlist>{chara=0;/*創(chuàng)建臨時(shí)變量*/structpat*secTemp=<structpat*>malloc<sizeof<structpat>>;{secTemp=secondlist;while<1>{if<strcmp<secTemp->number,strhead2>==0>;elsea++;if<secTemp->next==NULL>break;secTemp=secTemp->next;}}returna;}/**@功能:找到樹枝尾部*@輸入:樹枝頭部結(jié)點(diǎn)*@返回:尾部位置<尾部地址>*@*/structpat*leafListTailSearch<structpat*head>{structpat*Temp;/*創(chuàng)建臨時(shí)變量*/Temp=head;while<Temp->next!=NULL>{Temp=Temp->next;}returnTemp;}/**@功能:顯示各個(gè)科室預(yù)約人數(shù)信息*@輸入:*@返回:*@*/voidAppointNumDisplay<>{patient*p;class_*cp;cp=ALL->next;printf<"\n">;for<inti=0;;i++>{printf<"%d.%s:",i,cp->name>;p=cp->next_;printf<"%d人\n",leafListnumSearch<p>>;if<cp->next==NULL>break;cp=cp->next;}printf<"\n">;}/**@功能:從病人鏈表中遍歷病人信息*@輸入:*@返回:*@*/voidPatAppointedSearch<char*str>{patient*p;class_*cp;cp=ALL->next;while<1>{printf<"%s\n",cp->name>;p=leafListLocatedSearch<cp->next_,str>;if<cp->next==NULL>break;cp=cp->next;}}/**@功能:找到病人信息鏈表末端*@輸入:*@返回:末端結(jié)點(diǎn)地址*@*/patinf*PatInfListTailSearch<>{patinf*p=<patinf*>malloc<sizeof<patinf>>;p=PatInfHEAD;while<1>{if<p->next==NULL>break;elsep=p->next;}returnp;}/**@功能:向病人信息鏈表末端添加元素*@輸入:patinf*tail*@返回:*@*/voidPatInfListnodeAdd<patinf*tail>{patinf*p=<patinf*>malloc<sizeof<patinf>>;tail->next=p;printf<"\n">;printf<"輸入病人信息:\n">;printf<"身份證號(hào):">;scanf_s<"%s",p->number,19>;printf<"姓名:">;scanf_s<"%s",p->name,10>;printf<"年齡:">;scanf_s<"%s",p->age,10>;printf<"性別:">;scanf_s<"%s",p->sex,10>;printf<"聯(lián)系電話:">;scanf_s<"%s",p->tel,20>;printf<"住址:">;scanf_s<"%s",p->addr,20>;printf<"密碼:">;scanf_s<"%s",p->PassWord,5>;printf<"\n">;p->next=NULL;}/**@功能:遍歷病人信息鏈表找到病人結(jié)點(diǎn)*@輸入:病人身份證號(hào)*@返回:病人節(jié)點(diǎn)位置*@*/patinf*PatInfNodeSearch<char*number>{patinf*p;p=PatInfHEAD;while<1>{if<strcmp<p->number,number>==0>returnp;if<p->next==NULL>break;elsep=p->next;}return0;}/**@功能:遍歷病人信息鏈表找到病人結(jié)點(diǎn)的前一結(jié)點(diǎn)*@輸入:病人身份證號(hào)*@返回:病人節(jié)點(diǎn)的前一結(jié)點(diǎn)位置*@*/patinf*PatInfNodePreviousSearch<char*number>{patinf*p,*temp;p=PatInfHEAD;while<1>{if<strcmp<p->number,number>==0>returntemp;if<p->next==NULL>break;else{temp=p;p=p->next;}}return0;}/**@功能:改變病人信息*@輸入:病人身份證號(hào)*@返回:*@*/voidPatInfChange<char*number>{patinf*p;charn;chartemp[50];p=PatInfNodeSearch<number>;while<1>{printf<"\n">;printf<"病人信息:\n">;printf<"1.身份證號(hào):%s\n",p->number>;printf<"2.姓名:%s\n",p->name>;printf<"3.年齡:%s\n",p->age>;printf<"4.性別:%s\n",p->sex>;printf<"5.聯(lián)系電話:%s\n",p->tel>;printf<"6.住址:%s\n",p->addr>;printf<"7.密碼:%s\n",p->PassWord>;printf<"\n">;printf<"輸入:">;scanf_s<"%d",&n,1>;switch<n>{case1:{printf<"1.身份證號(hào):%s\n",p->number>;printf<"請(qǐng)輸入要改成的內(nèi)容:\n">;scanf_s<"%s",temp,19>;strncpy_s<p->number,temp,19>;}break;case2:{printf<"2.姓名:%s\n",p->name>;printf<"請(qǐng)輸入要改成的內(nèi)容:\n">;scanf_s<"%s",temp,10>;strncpy_s<p->name,temp,10>;}break;case3:{printf<"3.年齡:%s\n",p->age>;printf<"請(qǐng)輸入要改成的內(nèi)容:\n">;scanf_s<"%s",temp,10>;strncpy_s<p->age,temp,10>;}break;case4:{printf<"4.性別:%s\n",p->sex>;printf<"請(qǐng)輸入要改成的內(nèi)容:\n">;scanf_s<"%s",temp,10>;strncpy_s<p->sex,temp,10>;}break;case5:{printf<"5.聯(lián)系電話:%s\n",p->tel>;printf<"請(qǐng)輸入要改成的內(nèi)容:\n">;scanf_s<"%s",temp,20>;strncpy_s<p->tel,temp,20>;}break;case6:{printf<"6.住址:%s\n",p->addr>;printf<"請(qǐng)輸入要改成的內(nèi)容:\n">;scanf_s<"%s",temp,20>;strncpy_s<p->addr,temp,20>;}break;case7:{printf<"7.密碼:%s\n",p->PassWord>;printf<"請(qǐng)輸入要改成的內(nèi)容:\n">;scanf_s<"%s",temp,5>;strncpy_s<p->PassWord,temp,5>;}break;}printf<"\n">;printf<"病人信息:\n">;printf<"1.身份證號(hào):%s\n",p->number>;printf<"2.姓名:%s\n",p->name>;printf<"3.年齡:%s\n",p->age>;printf<"4.性別:%s\n",p->sex>;printf<"5.聯(lián)系電話:%s\n",p->tel>;printf<"6.住址:%s\n",p->addr>;printf<"7.密碼:%s\n",p->PassWord>;printf<"\n">;printf<"是否修改完成<是請(qǐng)按0>">;printf<"輸入:">;scanf_s<"%d",&n,1>;if<n==0>return;}}/**@功能:保存病人信息到鏈表*@輸入:*@返回:*@*/voidPatListInfSave<>{patinf*p;FILE*fp=NULL;p=PatInfHEAD->next;if<<fp=fopen<"病人信息.txt","w+">>==NULL>{printf<"無(wú)法打開文件\n">;}fprintf<fp,"$病人信息:\n">;for<inti=0;;i++>{fprintf<fp,"\n">;fprintf<fp,"$1$%s$\n",p->number>;fprintf<fp,"$2$%s$\n",p->name>;fprintf<fp,"$3$%s$\n",p->age>;fprintf<fp,"$4$%s$\n",p->sex>;fprintf<fp,"$5$%s$\n",p->tel>;fprintf<fp,"$6$%s$\n",p->addr>;fprintf<fp,"$7$%s$\n\n",p->PassWord>;fprintf<fp,"\n">;if<p->next==NULL>break;elsep=p->next;}time<&_Curtime>;_RetTime=localtime<&_Curtime>;fprintf<fp,"\n更新時(shí)間:%04d-%02d-%02d%02d:%02d%02d\n",_RetTime->tm_year+1900,_RetTime->tm_mon+1,_RetTime->tm_mday,_RetTime->tm_hour,_RetTime->tm_min,_RetTime->tm_sec>;fclose<fp>;}/**@功能:從文件中讀入預(yù)約信息*@輸入:*@返回:*@*/voidAppointListInfSave<>{class_*cp;FILE*fp=NULL;patient*secTemp;cp=ALL->next;fp=fopen<"預(yù)約信息.txt","w+">;while<1>{secTemp=cp->next_;for<inti=0;;i++>{if<i!=0>fprintf<fp,"*%s*%s*%d*\n",cp->name,secTemp->number,i>;if<secTemp->next==NULL>break;secTemp=secTemp->next;}fprintf<fp,"***\n">;if<cp->next==NULL>break;cp=cp->next;}time<&_Curtime>;_RetTime=localtime<&_Curtime>;fprintf<fp,"\n更新時(shí)間:%04d-%02d-%02d%02d:%02d%02d\n",_RetTime->tm_year+1900,_RetTime->tm_mon+1,_RetTime->tm_mday,_RetTime->tm_hour,_RetTime->tm_min,_RetTime->tm_sec>;fclose<fp>;}/**@功能:從文件中讀入病人信息*@輸入:*@返回:*@*/voidPatInfToListRead<>{FILE*fp;charstrLine[1024];patinf*h,*p1,*p2;h=NULL;//讀取緩沖區(qū)if<<fp=fopen<"病人信息.txt","w+">>==NULL>//判斷文件是否存在及可讀{printf<"無(wú)病人信息\n">;return;}while<!feof<fp>>//循環(huán)讀取每一行,直到文件尾{fgets<strLine,1024,fp>;//將fp所指向的文件一行內(nèi)容讀到strLine緩沖區(qū)//printf<"%s",strLine>;//輸出所讀到的內(nèi)容//DOSOMETHINGELSEif<strLine[0]=='$'&&strLine[2]=='$'>{switch<strLine[1]>{case'1':{p1=<patinf*>malloc<sizeof<patinf>>;for<inti=3;i<1024;i++>{if<strLine[i]=='$'>{*<p1->number+i-3>='\0';break;}*<p1->number+i-3>=strLine[i];}break;}case'2':for<inti=3;i<1024;i++>{if<strLine[i]=='$'>{*<p1->name+i-3>='\0';break;}*<p1->name+i-3>=strLine[i];}break;case'3':for<inti=3;i<1024;i++>{if<strLine[i]=='$'>{*<p1->age+i-3>='\0';break;}*<p1->age+i-3>=strLine[i];}break;case'4':for<inti=3;i<1024;i++>{if<strLine[i]=='$'>{*<p1->sex+i-3>='\0';break;}*<p1->sex+i-3>=strLine[i];}break;case'5':for<inti=3;i<1024;i++>{if<strLine[i]=='$'>{*<p1->tel+i-3>='\0';break;}*<p1->tel+i-3>=strLine[i];}break;case'6':for<inti=3;i<1024;i++>{if<strLine[i]=='$'>{*<p1->addr+i-3>='\0';break;}*<p1->addr+i-3>=strLine[i];}break;case'7':{for<inti=3;i<1024;i++>{if<strLine[i]=='$'>{*<p1->PassWord+i-3>='\0';break;}*<p1->PassWord+i-3>=strLine[i];}if<h==NULL>/*指定鏈表的頭指針*/h=p1;elsep1->next=p2;p2=p1;p2->next=NULL;}break;}}}PatInfHEAD->next=h;/*將字符串寫入節(jié)點(diǎn)鏈表頭過(guò)繼到PatInfHEAD*/}/**@功能:從文件中讀入預(yù)約信息*@輸入:*@返回:*@*/voidAppointedInfToListRead<>{FILE*fp;charstrLine[1024];charTemp[1024];charTemp2[1024];inti,j;patient*h;structpat*pp;h=NULL;//讀取緩沖區(qū)if<<fp=fopen<"預(yù)約信息.txt","w+">>==NULL>//判斷文件是否存在及可讀{printf<"OpenFalied!">;}while<!feof<fp>>//循環(huán)讀取每一行,直到文件尾{fgets<strLine,1024,fp>;//將fp所指向的文件一行內(nèi)容讀到strLine緩沖區(qū)//DOSOMETHINGELSEif<strLine[0]=='*'&&strLine[1]!='*'&&strLine[2]!='*'>//if<strLine[0]=='*'>{for<j=1;;j++>{if<strLine[j]=='*'||strLine[j]==''>{Temp[j-1]='\0';break;}Temp[j-1]=strLine[j];}for<i=j+1;;i++>{if<strLine[i]=='*'||strLine[i]==''>{Temp2[i-j-1]='\0';break;}Temp2[i-j-1]=strLine[i];}/*printf<"%s",Temp>; printf<"%s",Temp2>; */pp=mainListLocatedSearch<Temp>;if<pp!=0>leafListnodeandNumAdd<Temp2,leafListTailSearch<pp>>;}}}/**@功能:從文件中讀入科室信息*@輸入:*@返回:*@*/voidClassMessageDisplay<intnumber>{charch;FILE*fp=NULL;switch<number>{//不到文件結(jié)束就循環(huán)//輸出一個(gè)字符case0:{fp=fopen<"內(nèi)科.txt","r">;while<<ch=fgetc<fp>>!=EOF>putchar<ch>;fclose<fp>;}break;case1:{fp=fopen<"外科.txt","r">;while<<ch=fgetc<fp>>!=EOF>putchar<ch>;fclose<fp>;}break;case2:{fp=fopen<"兒科.txt","r">;while<<ch=fgetc<fp>>!=EOF>putchar<ch>;fclose<fp>;}break;case3:{fp=fopen<"骨科.txt","r">;while<<ch=fgetc<fp>>!=EOF>putchar<ch>;fclose<fp>;}break;case4:{fp=fopen<"皮膚科.txt","r">;while<<ch=fgetc<fp>>!=EOF>putchar<ch>;fclose<fp>;}break;}}/**@功能:主函數(shù)*@輸入:*@返回:*@*/voidmain<>{charnumber[19];chara;charstr[5];patient*p;patient*Previous;class_*cp;patient*Temp;patinf*pp;PatInfHEAD->next=NULL;ALL->next=TreeListCreat<N>;PatInfToListRead<>;AppointedInfToListRead<>;while<1>{printf<"電子醫(yī)囑錄入系統(tǒng)V2\n">;printf<"1.預(yù)約\n2.查看預(yù)約信息\n3.刪除預(yù)約信息\n4.創(chuàng)建病人信息\n5.修改病人信息\n6.查看病人信息\n7.保存信息退出\n">;printf<"\n">;printf<"輸入:">;scanf_s<"%d",&a,1>;if<a==1>{chara;printf<"預(yù)約:\n">;AppointNumDisplay<>;printf<"輸入預(yù)約科室序號(hào):">;scanf_s<"%d",&a,1>;// ClassMessageDisplay<a>;Temp=leafListnodeAdd<leafListTailSearch<mainListLocatedSearch<*<STR+a>>>>;if<Temp==0>{printf<"未找到病人\n請(qǐng)返回創(chuàng)建病人信息\n">;}elseprintf<"預(yù)約成功\n">;system<"pause">;system<"cls">;}if<a==2>{printf<"查看預(yù)約信息:\n">;AppointNumDisplay<>;printf<"輸入病人身份證號(hào):">;scanf_s<"%s",str,5>;printf<"\n">;PatAppointedSearch<str>;printf<"\n">;printf<"查找成功\n">;system<"pause">;system<"cls">;}if<a==3>{printf<"輸入病人身份證號(hào):">;scanf_s<"%s",str,5>;cp=ALL->next;printf<"\n">;a=0;for<inti=0;;i++>{printf<"%d.%s\n",i,cp->name>;p=leafListLocatedSearch<cp->next_,str>;if<p==0>a++;if<cp->next==NULL>break;cp=cp->next;}if<a==N>{gotoEND;}printf<"\n">;printf<"選擇刪除預(yù)約科室\n">;printf<"輸入:">;scanf_s<"%d",&a,1>;/*刪除點(diǎn)的位置*/Previous=mainListLocatedSearch<*<STR+a>>;Previous=leafListLocatedSearchPrevious<Previous,str>;p=mainListLocatedSearch<*<STR+a>>;p=leafLi

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論