版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、長沙學(xué)院程序設(shè)計(jì)基礎(chǔ)實(shí)訓(xùn)II實(shí)訓(xùn)報(bào)告實(shí) 訓(xùn) 題ATMfr取款系統(tǒng)的改進(jìn)與完目:善系計(jì)算機(jī)科學(xué)與技術(shù)系部:專業(yè) /年軟件工程專業(yè)2011級 級:學(xué)生姓李安平名:班_學(xué)號22級:班指導(dǎo)教師姓 職稱名:最終評定成 2012年6月項(xiàng)目實(shí)訓(xùn)任務(wù)書課程名稱:程序設(shè)計(jì)基礎(chǔ)實(shí)訓(xùn) II課程編碼: JX020158課程類別:專業(yè)基礎(chǔ)必修課學(xué)分?jǐn)?shù):2學(xué)時(shí)數(shù):32開課學(xué)期: 2實(shí)訓(xùn)題目:ATM#取款系統(tǒng)的改進(jìn)與完善一、已知技術(shù)參數(shù)和設(shè)計(jì)要求:銀行ATM#取款系統(tǒng)業(yè)務(wù)描述如下:銀行ATM存取款系統(tǒng)能為用戶提供存款、取款、查詢、轉(zhuǎn)賬和修改密碼的功能。為 了模擬真實(shí)的ATM務(wù)環(huán)境,本系統(tǒng)必須實(shí)現(xiàn)存款、取款、查詢、轉(zhuǎn)賬、修改
2、密碼以及 開戶的功能。用戶通過開戶業(yè)務(wù)在本系統(tǒng)開立銀行賬戶,之后可以通過該銀行賬戶登陸ATM系統(tǒng),在系統(tǒng)中實(shí)現(xiàn)存款、取款、查詢賬戶信息、修改密碼的操作。本系統(tǒng)各個(gè)業(yè) 務(wù)有如下注意點(diǎn):登陸系統(tǒng)用戶登陸之前,必須在登陸界面輸入其銀行賬戶,通過其正確輸入的銀行賬戶登陸系統(tǒng)。開戶業(yè)務(wù)要使用本系統(tǒng)必須首先執(zhí)行開戶業(yè)務(wù)開立新的銀行賬戶,并且將此新開的銀行存儲于文件當(dāng)中。同時(shí),系統(tǒng)以身份證號碼作為開戶的充分條件,即一個(gè)身份證號碼只能開立一次銀行賬戶。存款業(yè)務(wù)客戶登陸系統(tǒng)后,選擇存款業(yè)務(wù),即可以將輸入的存款金額存入相應(yīng)的賬戶。取款業(yè)務(wù)客戶登陸系統(tǒng)后, 選擇取款業(yè)務(wù), 即可以將輸入的取款金額從相應(yīng)的銀行賬戶取出
3、,但是取款金額必須大于目前的賬戶余額。查詢業(yè)務(wù)客戶登陸系統(tǒng)后,可以選擇查詢業(yè)務(wù),查詢賬戶余額。轉(zhuǎn)賬業(yè)務(wù)客戶登陸系統(tǒng)后,可以選擇轉(zhuǎn)賬業(yè)務(wù),進(jìn)行轉(zhuǎn)賬。注意的是轉(zhuǎn)賬的目的賬戶必須是本系統(tǒng)已經(jīng)存在的銀行賬戶。修改密碼客戶登陸系統(tǒng)后,可以選擇修改密碼業(yè)務(wù),進(jìn)行密碼修改。二、各階段具體要求:1、系統(tǒng)總體設(shè)計(jì)階段1)根據(jù)需求分析劃分功能模塊2)分析并設(shè)計(jì)各個(gè)功能模塊之間的關(guān)系3)對于各個(gè)功能模塊,設(shè)計(jì)相應(yīng)的數(shù)據(jù)結(jié)構(gòu)(必須使用鏈表完成全部功能)4) 設(shè)計(jì)相應(yīng)的算法 (必須包括排序和檢索功能, 且基于鏈表進(jìn)行排序和檢索)2、詳細(xì)設(shè)計(jì)階段1)對于每個(gè)功能模塊,應(yīng)劃分成操作層和數(shù)據(jù)層2)對于每個(gè)操作層,應(yīng)盡量考慮用
4、戶操作的簡單,便捷3)對于每個(gè)數(shù)據(jù)層,必須使用鏈表進(jìn)行管理4)在用鏈表進(jìn)行管理時(shí),必須用到鏈表檢索和排序5)對于數(shù)據(jù)層的操作完的數(shù)據(jù)必須保存到文件中(包括文件讀、寫操作)3、編碼實(shí)現(xiàn)階段1)完成代碼編寫2) 要求代碼編寫規(guī)范 (不得使用全局變量、 所有功能模塊必須使用函數(shù)封裝主函數(shù) main() 的行數(shù)不得超過代碼總長度的25%)3)代碼必須有相應(yīng)的注釋(注釋行數(shù)不得少于代碼的10%,函數(shù)功能、變量名、算法、重要的循環(huán)、分支都必須用注釋說明)4、系統(tǒng)測試階段1)完成功能調(diào)試( 2)要求完成必要的測試工作5、交付實(shí)施階段( 1)提交可正常執(zhí)行的系統(tǒng),程序代碼(2)撰寫項(xiàng)目實(shí)訓(xùn)報(bào)告書(3)要求按照
5、文檔書寫規(guī)范,嚴(yán)格地書寫文檔(4)注意:不允許使用代碼、圖片和表格填充報(bào)告空間。代碼、圖片和表格在 報(bào)告中的空間比重不得超過 1/3。要求使用文字清晰描述代碼思想和邏輯,文字描 述不得少于3000字(不包含注釋文字)。三、設(shè)計(jì)工作量:(1)軟件設(shè)計(jì):嚴(yán)格按照具體設(shè)計(jì)要求,完成問題陳述中所提到的所有需求功 能。(未使用鏈表實(shí)現(xiàn)的、代碼少于 300行的不及格,未使用鏈表排序的成績不可 以為優(yōu))(2)設(shè)計(jì)報(bào)告:要求撰寫不少于 3000個(gè)文字的文檔,詳細(xì)說明各階段具體要求。四、工作計(jì)劃:安排16周時(shí)間進(jìn)行實(shí)訓(xùn)(每周2課時(shí)),軟件開發(fā)步驟如下,在第16周必須完成 所有任務(wù),實(shí)訓(xùn)與報(bào)告撰寫同步進(jìn)行;序 號
6、實(shí)踐項(xiàng)目名 稱內(nèi)容提要實(shí)踐時(shí)數(shù)實(shí)踐類型實(shí)踐要求每組人數(shù)1實(shí)訓(xùn)項(xiàng)目1: 程序架構(gòu)的描述1、數(shù)據(jù)與邏輯分離2、程序架構(gòu)的描述4驗(yàn)證必開12實(shí)訓(xùn)項(xiàng)目2: 鏈表在工程中的 應(yīng)用1、使用鏈表來構(gòu)造 ATM機(jī)的后臺數(shù)據(jù)管理2、實(shí)現(xiàn)常見的鏈表 操作一一插入、刪除、修 改、遍歷以及創(chuàng)建鏈表8驗(yàn)證必開13實(shí)訓(xùn)項(xiàng)目3: 排序在項(xiàng)目中的 應(yīng)用1、在使用鏈表的基 礎(chǔ)上引導(dǎo)學(xué)生完成23種 主要排序一一冒泡、選擇 和插入2、將這些算法結(jié)合 到學(xué)生的工程應(yīng)用題中8驗(yàn)證必開14實(shí)訓(xùn)項(xiàng)目4: 查找在項(xiàng)目中的 應(yīng)用1、在使用鏈表的基 礎(chǔ)上引導(dǎo)學(xué)生完成12種 主要查找一一如順序查 找4驗(yàn)證必開12、將這些算法結(jié)合 到學(xué)生的工程應(yīng)用
7、題中5實(shí)訓(xùn)項(xiàng)目5: 結(jié)構(gòu)在文件中的 應(yīng)用1、討論不同結(jié)構(gòu)的 設(shè)計(jì)技巧,考慮在同一項(xiàng) 目中使用自定義結(jié)構(gòu)的 必要性2、考慮將復(fù)雜結(jié)構(gòu)雙向鏈表、循環(huán)鏈表 作為解決問題的一種途 徑與手段4驗(yàn)證必開16實(shí)訓(xùn)項(xiàng)目6: 文件操作技巧1、加強(qiáng)學(xué)生對文件 操作的認(rèn)識2、考慮將復(fù)雜結(jié)構(gòu) 中的相關(guān)數(shù)據(jù)通過寫入 文件的方法作為長期記 錄保存的工具3、并將此作為改進(jìn) 項(xiàng)目的手段4驗(yàn)證必開1五、注意事項(xiàng)1)提交文檔課程實(shí)訓(xùn)任務(wù)書(每學(xué)生1份)課程實(shí)訓(xùn)報(bào)告(每學(xué)生1份)2)成績評定學(xué)生成績由指導(dǎo)老師負(fù)責(zé)考察評定,分為:優(yōu)、良、中、及格和不及格五檔。以下情況可以判斷成績?yōu)椴患案瘢篴、抄襲b、代碼量少于300行c、未使用鏈表
8、d、報(bào)告不符合規(guī)范以下情況不可以判斷成績?yōu)閮?yōu):a、未使用鏈表排序b、使用全局變量c、大量代碼集中在主函數(shù)main()中,而不是使用函數(shù)進(jìn)行合理封裝d、功能不完善,有殘缺e、代碼缺乏必要的注釋f、缺課其他情況由指導(dǎo)老師綜合考慮給予成績評定主要考察知識點(diǎn)與要求:a、鏈表組織數(shù)據(jù)b、排序(基于鏈表)c、鏈表檢索d、文件保存和讀取數(shù)據(jù)e、函數(shù)封裝及調(diào)用f、代碼縮進(jìn)和注釋等軟件工程原則基本要求g、文檔摘要銀行ATM取款機(jī)系統(tǒng)能為用戶提供存款、取款、查詢、轉(zhuǎn)賬與修改密碼的功能。在設(shè)計(jì)編寫銀行取款機(jī)系統(tǒng)時(shí),明確需求以及操作流程,構(gòu)造出取款機(jī)的基本框架及正確的操作流程。將取款機(jī)的任務(wù)需求分成若干個(gè)模塊進(jìn)行編寫
9、。編寫主要運(yùn)用鏈表建立完整的客戶信息,完成客戶所需的存款以及取款,修改密碼等多項(xiàng)功能。查詢信息需要對鏈表進(jìn)行遍歷,逐一對信息進(jìn)行核對比較,直到找到所需信息或找到鏈表尾部停止。鏈表能夠按所需分配內(nèi)存空間,讓空間得到充分的利用,同時(shí)能夠短暫的保存信息,若需長期保存,需要文件的配合。文件能夠長久的保存信息。在銀行取款機(jī)系統(tǒng)中,先把鏈表中的信息存進(jìn)文件中,然后在文件中將信息讀到鏈表中。能夠?qū)崿F(xiàn)信息的多次利用。關(guān)鍵詞:ATM鏈表,文件摘 要第 1 章 需求分析 功能需求 性能需求 運(yùn)行需求 第 2 章 系統(tǒng)設(shè)計(jì) 銀行開戶功能 銀行登錄功能 銀行取款功能 余額查詢功能 轉(zhuǎn)賬功能 修改密碼功能存款功能 卡號
10、查詢功能 姓名查詢功能余額查詢功能 刪除客戶功能 增加客戶功能 第 3 章 系統(tǒng)實(shí)現(xiàn) 卡號與密碼的驗(yàn)證 從文件中讀取信息刪除功能的實(shí)現(xiàn)數(shù)據(jù)域邏輯的分離程序架構(gòu)的描述鏈表的應(yīng)用 鏈表排序 第 4章 測 試開戶功能測試登陸功能測試取款功能測試修改密碼功能測試多個(gè)客戶信息測試結(jié) 論錯(cuò)誤 ! 未定義書簽。錯(cuò)誤 ! 未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 ! 未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 !未定義書簽
11、。錯(cuò)誤 !未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 ! 未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 ! 未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 !未定義書簽。錯(cuò)誤 ! 未定義書簽。附 錄 錯(cuò)誤!未定義書簽。致 謝 錯(cuò)誤!未定義書簽。第 1 章 需求分析功能需求先進(jìn)行系統(tǒng)分析,將該系統(tǒng)劃分為登陸注冊模塊、鍵盤輸入輸出模塊、信息認(rèn)證模塊、顯示模塊、數(shù)據(jù)存儲模塊。登陸注冊模塊主要包括新用戶的開戶以及老用戶的登陸功能。 鍵盤輸入輸出模塊
12、輸入客戶信息, 銀行卡號, 密碼, 存款取款的金額等相關(guān)信息,待系統(tǒng)處理后,輸出客戶的某項(xiàng)信息或提示客戶的操作信息。信息認(rèn)證模塊主要是對客戶的卡號、密碼、以及客戶的輸入信息的規(guī)范進(jìn)行判斷與認(rèn)證。顯示模塊主要包括取款模塊、存款模塊、查詢余額模塊、轉(zhuǎn)賬模塊、修改密碼模塊。數(shù)據(jù)存儲模塊主要是將客戶信息存儲到文件中,需要時(shí)從文件中讀取數(shù)據(jù)到鏈表中,找到相關(guān)信息。性能需求性能的需求就是要求在數(shù)據(jù)上要有精確值, 以免因?yàn)閿?shù)據(jù)上的馬虎而使得程序存在不確定的風(fēng)險(xiǎn),在查詢過程中,要求顯示該客戶賬號上的所有金額,在客戶存取款的過程中,系統(tǒng)只支持交易金額為一百的倍數(shù),并且交易的金額一次不能超過六百,當(dāng)客戶的輸入的取
13、款金額比現(xiàn)有余額還大時(shí),要提示客戶,余額不足,自動跳出系統(tǒng)。密碼的設(shè)置只能是六位數(shù)。在轉(zhuǎn)賬過程中支持任何輸入的數(shù)據(jù),但轉(zhuǎn)賬只能在文件中已經(jīng)存在的用之間進(jìn)行轉(zhuǎn)賬。交易結(jié)束后賬戶余額要與保存的客戶信息越保持一致性,并且在運(yùn)行時(shí)不能太過于繁瑣,盡量減少不必要的運(yùn)行程序,盡量做到簡單而功能強(qiáng)大,運(yùn)行速度快,執(zhí)行力強(qiáng)等特點(diǎn)。運(yùn)行需求銀行取款機(jī)系統(tǒng)的界面要求簡潔、友好,且菜單操作簡單易懂。當(dāng)客戶輸入的信息不符合要求時(shí),要溫馨的提示客戶重新輸入,或者退出。如客戶輸入的密碼與開戶時(shí)所設(shè)密碼不相同,則提示客戶重新輸入密碼,若密碼連續(xù)輸入三次,則提示客戶三次密碼輸入錯(cuò)誤,退出程序。這樣能讓客戶很清楚自己當(dāng)前的操作
14、,以及操作后系統(tǒng)運(yùn)行產(chǎn)生的結(jié)果,簡單方便,使用性強(qiáng)。第 2 章 系統(tǒng)設(shè)計(jì)銀行開戶功能新客戶使用銀行取款機(jī)系統(tǒng)時(shí),必須先進(jìn)行開戶。客戶在進(jìn)行開戶業(yè)務(wù)時(shí),提示客戶輸入姓名,身份證號碼即新客戶的銀行卡號,并設(shè)定好銀行卡密碼。將客戶的信息寫入鏈表當(dāng)中,并保存在文件中。新客戶的默認(rèn)余額為元。當(dāng)客戶注冊成功后,系統(tǒng)將自動保存客戶信息,然后顯示客戶的姓名,卡號,以及客戶的默認(rèn)余額。以便客戶識記。銀行登錄功能客戶進(jìn)入銀行取款機(jī)登錄界面時(shí),按照指定的要求進(jìn)行操作,當(dāng)提示客戶輸入身份證號(卡號) ,當(dāng)系統(tǒng)接收到客戶的輸入信息時(shí),將文件中的信息輸?shù)芥湵碇?,進(jìn)行遍歷核對,當(dāng)系統(tǒng)接收到客戶的輸入信息時(shí),將文件中的信息輸
15、到鏈表中,進(jìn)行遍歷核對,若客戶輸入的銀行卡號與注冊的卡號不相同,則提示客戶輸入有誤,讓客戶重新輸入。 三次輸入銀行卡號有誤, 系統(tǒng)將自動退出。 若輸入卡號正確, 則進(jìn)入下一個(gè)流程。當(dāng)提示客戶輸入銀行卡密碼,當(dāng)系統(tǒng)接收到客戶的輸入信息時(shí),將文件中的信息輸?shù)芥湵碇?,進(jìn)行遍歷核對,若客戶輸入的銀行卡密碼與注冊的銀行卡密碼不相同,則提示客戶輸入有誤,讓客戶重新輸入。銀行取款功能客戶進(jìn)入銀行取款界面時(shí),在銀行取款界面中顯示客戶可取金額數(shù)目項(xiàng)目,客戶按照指定金額對應(yīng)的阿拉伯?dāng)?shù)字輸入即可。當(dāng)客戶按照指定的要求輸入時(shí),將對客戶輸入的金額與用戶里面的余額進(jìn)行比較,若客戶輸入的金額大于現(xiàn)有余額,則提示客余額不足,
16、返回功能選擇界面。若客戶輸入的金額小于客戶原有余額,則按p-money-=i 的公式從客戶原有余額中減去當(dāng)下所取金額,然后提示取款成功,并顯示客戶現(xiàn)有余額。余額查詢功能客戶在進(jìn)入銀行查詢界面時(shí),系統(tǒng)自動從鏈表中讀取與該客戶相匹配的余額。轉(zhuǎn)賬功能客戶進(jìn)入銀行轉(zhuǎn)賬界面時(shí),當(dāng)系統(tǒng)提示客戶兩次輸入需要轉(zhuǎn)賬的卡號,若兩次輸入不相同,則返回選擇功能界面。若客戶兩次輸入相同,則從客戶原有余額中減去當(dāng)下所取金額,然后提示轉(zhuǎn)賬成功,并顯示客戶現(xiàn)有余額。修改密碼功能客戶進(jìn)入登錄界面時(shí),系統(tǒng)自動提示客戶輸入銀行卡原密碼,當(dāng)系統(tǒng)接收到客戶的輸入的信息時(shí),遍歷鏈表中的信息與客戶輸入的密碼進(jìn)行核對,若客戶輸入的銀行卡原密
17、碼與注冊的銀行卡密碼不相同, 則提示客戶輸入有誤, 系統(tǒng)將自動返回功能選擇界面。若輸入密碼正確,提示客戶輸入新密碼,并保存好客戶修改的新密碼。下次登錄只能用新密碼才能成功登錄。存款功能客戶進(jìn)入銀行存款界面時(shí),系統(tǒng)會從鏈表中找出該客戶的余額顯示出來,在銀行存款界面中顯示客戶可取金額數(shù)目項(xiàng)目,客戶按照指定金額對應(yīng)的阿拉伯?dāng)?shù)字輸入即可。系統(tǒng)將在客戶原有余額中加上當(dāng)下所存金額,然后提示存款成功,并顯示客戶現(xiàn)有余額??ㄌ柌樵児δ茉诳蛻粜畔⒉樵兘缑嬷校軌?qū)⒌乃锌蛻舻男畔凑湛ㄌ栠M(jìn)行查詢,當(dāng)操作人員輸入需要查找的客戶的卡號,當(dāng)找到鏈表中的卡號與輸入的客戶的卡號相同時(shí),則顯示出客戶的信息,包括客戶的姓
18、名,卡號,以及余額。若沒有找到與之相同的客戶卡號,則提示沒有該用戶,返回功能界面,重新選擇。操作者完成客戶信息查詢后,顯示該客戶的姓名、卡號、以及余額。姓名查詢功能在客戶信息查詢界面中,能夠?qū)⒌乃锌蛻舻男畔凑招彰M(jìn)行查詢,當(dāng)操作人員輸入需要查找的客戶的姓名,當(dāng)找到鏈表中的客戶姓名與輸入的客戶的姓名相同時(shí),則顯示出客戶的信息,包括客戶的姓名,卡號,以及余額。若沒有找到與之相同的客戶姓名, 則提示沒有該用戶, 返回功能界面, 重新選擇。 操作者完成客戶信息查詢后,顯示該客戶的姓名、卡號、以及余額。余額查詢功能在客戶信息查詢界面中,能夠?qū)⒌乃锌蛻舻男畔凑沼囝~進(jìn)行查詢,當(dāng)操作人員輸入需
19、要查找的客戶的余額,若找到鏈表中的客戶余額與輸入的客戶的余額相同,則顯示出客戶的信息,包括客戶的姓名,卡號,以及余額。若沒有找到與之相同的客戶余額,則提示沒有該用戶,返回功能界面,重新選擇。操作者完成客戶信息查詢后,顯示該客戶的姓名、卡號、以及余額。刪除客戶功能在已經(jīng)建立起了鏈表的前提下,后臺操作者可以對客戶的信息進(jìn)行刪減,當(dāng)操作人員輸入需要刪除的客戶的卡號,當(dāng)找到鏈表中的客戶卡號與輸入的客戶的卡號相同時(shí),將該客戶信息賦給一工作指針,用另一操作指針指向該用戶后一客戶,則刪除該用戶的信息。 若沒有找到與之相同的客戶卡號, 則提示沒有該用戶, 返回功能界面, 重新選擇。增加客戶功能后臺操作者可以增
20、加客戶的信息, 操作者按要求輸入客戶的姓名、 卡號、 余額即可。系統(tǒng)將操作人員輸入的信息寫入鏈表中。傳入頭指針,并以頭插法的形式寫入即可。第 3 章 系統(tǒng)實(shí)現(xiàn)卡號與密碼的驗(yàn)證密碼是當(dāng)客戶登陸銀行取款機(jī)系統(tǒng)時(shí),系統(tǒng)對顧客的身份進(jìn)行驗(yàn)證的一種方式。當(dāng)用戶的密碼完全與注冊時(shí)的密碼相同時(shí),則可以進(jìn)入該系統(tǒng),但如何對客戶的密碼進(jìn)行驗(yàn)證,就需要對其原理及其運(yùn)行方式做詳細(xì)的解說,客戶進(jìn)入登陸界面后,將鏈表的頭指針 head 傳給該函數(shù), char mima6 為客戶輸入卡號的變量, Char d20 為客戶輸入卡號的變量。當(dāng)接收到客戶輸入的卡號與密碼時(shí),要對客戶的卡號與密碼進(jìn)行驗(yàn)證,則得對鏈表進(jìn)行一次遍歷,
21、將工作指針指向頭指針,從頭結(jié)點(diǎn)開始尋找,逐一與客戶輸入的卡號進(jìn)行核對,如果第一個(gè)節(jié)點(diǎn)沒有所需信息,則讓工作指針指向下一個(gè)節(jié)點(diǎn),當(dāng)工作指針p指向NULL!寸還未找到該用戶時(shí),則說明沒有該用戶,若找到該客戶的卡號, 提示該客戶輸入密碼,并對客戶的密碼進(jìn)行核對,若與鏈表中的密碼不同,則提示客戶密碼輸入錯(cuò)誤,請重新輸入,若完全相同,則提示客戶登陸成功,進(jìn)入菜單選擇界面。下面是驗(yàn)證密碼的相關(guān)程序:void denglu(struct per *head)char d20;char mima20;printf( 請您輸入卡號n);scanf(%s,d);for(q=head;q!=NULL;q=q-nex
22、t)if(strcmp(q-ID,d)!=0)printf(nn請輸入您的密碼n);scanf(%s,mima);if(strcmp(q-mima,mima)!=0)printf( 密碼不正確,請重新輸入密碼n);elsecaidan(head);從文件中讀取信息運(yùn)用文件,將運(yùn)用鏈表建立的銀行取款機(jī)系統(tǒng)進(jìn)行優(yōu)化。當(dāng)運(yùn)用文件對鏈表建立的數(shù)據(jù), 以寫的方式將所有信息寫入文件夾中進(jìn)行持久保存, 當(dāng)需要查找某客戶的信息時(shí),又以讀的形式將信息從文件中讀出來。這樣,當(dāng)?shù)谝淮尾僮魅拷Y(jié)束后,再登錄銀行取款機(jī)系統(tǒng)時(shí),將文件中存有的數(shù)據(jù)以讀的方式讀出來,又可以進(jìn)行連續(xù)的操作,這樣數(shù)據(jù)能夠多次利用,方便實(shí)用。如何
23、將文件中的信息讀入鏈表中,又是我們需要探討的問題。需要我們仔細(xì)的分析。首先定義兩個(gè)工作指針,然后以讀的方式打開一個(gè)二進(jìn)制的文件,如果文件指針指向NULL則提示“不能打開文件”,如果能夠打開,那么進(jìn)行下一讀取數(shù)據(jù),讀取數(shù)據(jù)到鏈表時(shí),必須申請空間來接受信息,當(dāng)成功申請到空間后,將工作指針 p 指向頭指針 head, 以便從第一個(gè)節(jié)點(diǎn)開始讀取數(shù)據(jù), 運(yùn)用一個(gè)循環(huán)來讀取文件中的數(shù)據(jù),直到獨(dú)到文件尾結(jié)束。在循環(huán)過程中,如果沒有讀到數(shù)據(jù),則跳出循環(huán),如果讀到了數(shù)據(jù),那么運(yùn)用 p-next 開辟另外一個(gè)空間用來接收下一個(gè)節(jié)點(diǎn)的信息,然后運(yùn)用工作指針 q 保存當(dāng)前節(jié)點(diǎn)的指針,作為下一個(gè)節(jié)點(diǎn)的前驅(qū),然后讓工作指
24、針p 指向下一個(gè)節(jié)點(diǎn)新都如數(shù)據(jù)鏈到當(dāng)前表尾, 直到最后一個(gè)節(jié)點(diǎn)的后繼指針為空。 讀取完畢。下面是驗(yàn)證密碼的相關(guān)程序:FILE *fp;per *p,*q;if(fp=fopen(,rb+)=NULL)printf( 不能打開文件n);p=(per*)malloc(sizeof(per);head=p;while(!feof(fp)if(1!=fread(p,sizeof(per),1,fp)break;p-next=(per *)malloc(sizeof(per);q=p;p=p-next;q-next=NULL;fclose(fp);刪除功能的實(shí)現(xiàn)在鏈表中刪除某個(gè)節(jié)點(diǎn)時(shí),若是第一個(gè)客戶時(shí),
25、運(yùn)用頭指針指向該節(jié)點(diǎn)下一個(gè)節(jié)點(diǎn)的地址,這樣就把第一個(gè)節(jié)點(diǎn)刪除了。如果不是頭節(jié)點(diǎn),用一個(gè)工作指針指向該節(jié)點(diǎn),用另一工作指針指向該接點(diǎn)的下一節(jié)點(diǎn)的地址,這樣就把指定要刪節(jié)點(diǎn)刪除了。printf( 請輸入要刪除的客戶卡號:n);scanf(%s,k);if(p-=k)*Phead=(*Phead)-next,free(p);elsewhile(NULL=p-next&p-next-!=k)p=p-next;if(p-next=NULL)printf( 對不起,沒有該客戶 !n);elset=p-next;p-next=p-next-next;數(shù)據(jù)域邏輯的分離在制作銀行取款機(jī)系統(tǒng)時(shí),首先不處理程序的有
26、關(guān)數(shù)據(jù),比如說不核對客戶銀行卡卡號與密碼即可進(jìn)入功能選擇界面,不處理取款時(shí)余額是否不足,客戶的輸入有誤等這些問題,而是將銀行取款機(jī)系統(tǒng)中的各個(gè)功能的函數(shù)基本框架構(gòu)建好,這樣銀行取款機(jī)系統(tǒng)中邏輯這一塊就不受數(shù)據(jù)方面的約束而顯得非常清晰了。程序架構(gòu)的描述在構(gòu)建的取款機(jī)系統(tǒng)的函數(shù)中包括注冊函數(shù)、登錄函數(shù)、取款函數(shù)、查詢函數(shù)、轉(zhuǎn)賬函數(shù)、 存款函數(shù)、 修改密碼函數(shù)、 退出函數(shù)。 每構(gòu)件一個(gè)函數(shù)時(shí), 先在主函數(shù)中調(diào)用,能夠成功編譯運(yùn)行時(shí)再寫別的函數(shù),然后逐一進(jìn)行調(diào)用,編譯運(yùn)行無誤即可。然后根據(jù)到那個(gè)模塊就調(diào)用相應(yīng)的功能函數(shù),在運(yùn)行時(shí)都有相應(yīng)的功能界面即可,這樣銀行取款機(jī)系統(tǒng)的基本框架就已經(jīng)成型了。鏈表的應(yīng)
27、用運(yùn)用鏈表建立銀行ATMt臺管理系統(tǒng)。在銀行ATMt臺管理系統(tǒng)中,可以建立若干 個(gè)客戶信息,直到連續(xù)輸入三個(gè)零則停止客戶信息的建立。在后臺中,可以運(yùn)用卡號、姓名、以及余額進(jìn)行客戶信息查詢。并且可以對客戶的信息進(jìn)行插入、刪除等功能。在后臺鏈表操作中。能夠建立若干個(gè)客戶的信息,同時(shí)也可以對所有的客戶信息遍歷,進(jìn)行輸出,同時(shí)可以對所有的客戶信息按余額的降序排序進(jìn)行輸出。在已經(jīng)建立好了客戶信息的前提下,能夠?qū)蛻舻男畔⑦M(jìn)行刪減,同時(shí)也能夠增加客戶的信息。同時(shí)能夠按客戶的卡號、姓名、以及余額,對客戶的信息進(jìn)行查詢。鏈表排序鏈表排序,包括冒泡排序,選擇排序,以及插入排序。運(yùn)用鏈表排序與運(yùn)用數(shù)組進(jìn)行排序的思
28、想很類似。比如說冒泡排序,冒泡排序同樣是對所有數(shù)據(jù)進(jìn)行逐一的比較。然后將大的數(shù)據(jù)保存到下面去,直到一輪比較結(jié)束,然后再進(jìn)行第二輪比較。直到所有的比較完成。將鏈表排序運(yùn)用于銀行ATMt臺客戶信息輸出系統(tǒng)中,已經(jīng)建立好若干個(gè)客戶信息,當(dāng)需要讓客戶的信息按照余額的降序進(jìn)行排列輸出時(shí),則鏈表的排序則體現(xiàn)出了它的功能。讓客戶的信息以余額的降序一一排列輸出。但在實(shí)際運(yùn)用時(shí)又遇到了麻煩,交換的是某項(xiàng)的值,而不是地址,這個(gè)讓我很頭疼,但我會繼續(xù)努力,將其弄懂弄透。做到得心應(yīng)手。第4章 測 試開戶功能測試當(dāng)客戶注冊成功時(shí),出現(xiàn)如圖所示的界面。圖 開戶界面示意圖登陸功能測試當(dāng)客戶卡號與密碼核對無誤,登陸成功時(shí),出
29、現(xiàn)如圖所示的界面。圖 登錄界面示意圖取款功能測試當(dāng)客戶取款成功時(shí),出現(xiàn)如圖所示的界面圖 取款界面示意圖修改密碼功能測試當(dāng)客戶密碼修改成功時(shí),出現(xiàn)如圖所示的界面。圖 修改密碼界面示意圖多個(gè)客戶信息測試當(dāng)管理員按要求輸入多個(gè)客戶信息時(shí),出現(xiàn)如圖所示的界面。圖 建立客戶信息示意圖結(jié)論在ATM#取款系統(tǒng)的改進(jìn)與完善的過程中,讓我學(xué)到了許多的知識,有了更多新的感受。在改進(jìn)取款機(jī)系統(tǒng)時(shí),讓我增強(qiáng)了挑戰(zhàn)困難的勇氣。上學(xué)期對鏈表與文件有著強(qiáng)烈的恐懼心理,感覺那是一道不可逾越的高山。但通過老師的一步步的引導(dǎo),讓我們慢慢向高山靠近,然后試著去攀登。經(jīng)過若干次的嘗試,慢慢體會到了其中的樂趣,同時(shí)也就增加了自己繼續(xù)攀
30、登的信心。ATM的制作過程中,常常會遇到一系列的問題,比如說如何傳遞指針,這個(gè)問題一直是我難以理解的知識,總感覺很抽象的,為什么它就能很準(zhǔn)確的將頭指針傳過來。剛開始就是運(yùn)用全局指針進(jìn)行操作,這樣理解起來就比較容易了,但是全局變量有著很大的缺陷,那就是一旦全局變量發(fā)生變化,其他的函數(shù)都將發(fā)生一系列的變化, 那種變化是很難預(yù)知的, 輕則運(yùn)行出錯(cuò), 重則系統(tǒng)癱瘓, 無法運(yùn)行。后來懷著對該問題的深思,向同學(xué)詢問,并去圖書館查閱資料,慢慢對鏈表傳參有了一定的了解。通過多次的嘗試,對其的理解程度又有了新的提高。在制作的過程中,我不僅學(xué)到的是一些直觀實(shí)用的應(yīng)用知識,更學(xué)到了許多設(shè)計(jì)思想。以前寫程序,拿到就一
31、股腦的寫,沒有去對其需求進(jìn)行分析。同時(shí)程序很零亂,可讀性不高,并且程序復(fù)雜但功能繁瑣。若哪一環(huán)節(jié)出現(xiàn)錯(cuò)誤時(shí),很難調(diào)試。但通過這一學(xué)期的學(xué)習(xí),讓我在程序的設(shè)計(jì)思想這一塊又有了更深層次的了解。比如說ATM勺制作過程, 首先不急于編寫程序, 而是詳細(xì)了解需求關(guān)系, 弄清楚操作流程, 構(gòu)建整體框架,將取款機(jī)系統(tǒng)的功能分成若干個(gè)小模塊。這樣在功能的設(shè)計(jì)方面就不至于盲目去嘗試,這樣費(fèi)時(shí)又費(fèi)力。但一一分割后,就只需對各個(gè)功能進(jìn)行針對性的設(shè)計(jì)與分析,這樣就目的性很強(qiáng),容易測試與修改。然后在構(gòu)建好的框架中以鏈表為工具進(jìn)行編寫,最后加上文件,保存客戶信息,以備多次利用。完善ATM勺功能。參考文獻(xiàn)1譚浩強(qiáng).C程序設(shè)
32、計(jì)(第三版).北京:清華大學(xué)出版社,2005, 330-348.2高濤,陸麗娜.C語言程序設(shè)計(jì).西安:西安交通大學(xué)出版社,:249-280.附錄#include#include#includestruct per/*char name20;char ID20;int money;char mima6;struct per *next;typedef struct person/*struct per kehu ;struct person *next;L;定義結(jié)構(gòu)體 */定義另一結(jié)構(gòu)體 */void chaxun(struct per *head); /* void kaihu(struct
33、per *head);void denglu(struct per *head);void caidan(struct per *head);void qukuan(struct per *head);void xgmm(struct per *head);void cunkuan(struct per *head);void zhuangzhang(struct per *head);void chuangjian(struct person *Phead);void shuchu(struct person *Phead);void shanchu(struct person *Phead
34、);void zengjia(struct person *Phead);void chaxun1(struct person *Phead);void chaxun2(struct person *Phead);void chaxun3(struct person *Phead);void tuichu();void menu();各個(gè)函數(shù)的聲明 */* 主函數(shù) */ n);break;/* 開戶函數(shù) */void kaihu(struct per *head) head=NULL; TOC o 1-5 h z FILE *fp; /* 定義文件指針*/為定義鏈表指針*/開辟內(nèi)存單元*/將數(shù)
35、據(jù)輸入鏈表中 */struct per *p1=NULL,*p2=NULL;/*p1,p1p1=(struct per*)malloc(sizeof(struct per);/*printf( 請輸入您的姓名 :n);/*scanf(%s,p1-name );printf( 請?jiān)O(shè)置您的卡號:n);scanf(%s,p1-ID);printf( 請?jiān)O(shè)置您銀行卡密碼:n);scanf(%s,p1-mima);p1-money=0;p1-next =NULL;printf( 您的個(gè)人信息為 n);printf(姓名: %s n 卡號:%s n 余額: %4dn,p1-name ,p1-ID,p1-m
36、oney );if(NULL=head)/* head=(struct per *)malloc(sizeof(struct per); head-next =p1;/*else/*為新增客戶開辟內(nèi)存單元*/進(jìn)行頭插法,將其作為第一個(gè)節(jié)點(diǎn) */為新增客戶開辟內(nèi)存單元 */進(jìn)行尾插 */打開文件 */ for(p2=head;p2-next!=NULL;p2=p2-next); /* p2-next=p1;if(fp=fopen(,ab+)=NULL) /* printf(cannot open filen); return;將鏈表信息寫入文件中 */if(fwrite(p1,sizeof(st
37、ruct per),1,fp)!=1)/*printf(file write errorn); fclose(fp);printf(n);printf( 恭喜您開戶成功,請登錄 n);system(pause);system(cls);denglu(head);/* 登陸函數(shù) */void denglu(struct per *head) char d20;char mima20;int i,j;FILE *fp;struct per *p,*q=NULL;if(fp=fopen(,rb+)=NULL) /*/*printf(不能打開文件n);/*定義文件指針 */打開一個(gè)二進(jìn)制文件,為讀方式
38、*/如不能打開,則結(jié)束程序*/p=(struct per*)malloc(sizeof(struct per); head=p;/*申請空間*/while(!feof(fp)/*循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束*/if(1!=fread(p,sizeof(struct per),1,fp)*/驅(qū)*/break;/*p-next=(struct per *)malloc(sizeof(struct per);/*q=p;/*如果沒讀到數(shù)據(jù),跳出循環(huán)*/為下一個(gè)結(jié)點(diǎn)申請空間保存當(dāng)前結(jié)點(diǎn)的指針, 作為下一結(jié)點(diǎn)的前p=p-next; q-next=NULL; fclose(fp);/*/*指針后移, 新讀入數(shù)
39、據(jù)鏈到當(dāng)前表尾*/最后一個(gè)結(jié)點(diǎn)的后繼指針為空*/printf( printf(printf( for(j=1;jnext)/*遍歷鏈表 */if(strcmp(q-mima,mima)!=0)/*printf( 密碼不正確,請重新輸入密碼n);您輸入密碼三次錯(cuò)誤,謝謝光臨 n);*/if(strcmp(q-ID,d)!=0)continue;elsefor(i=1;i4;i+)printf(nnscanf(%s,mima);system(pause);system(cls);continue;elsesystem(cls);caidan(head);printf(nnnsystem(pause
40、);/*/*/*請輸入您的密碼n);/*/*核對賬號 */跳出循環(huán) */限制密碼輸入的次數(shù)的循環(huán)核對密碼 */若密碼不對,跳出循環(huán)*/調(diào)用菜單函數(shù)*/system(cls);exit(0); printf(nnn 您輸入的卡號有誤,請重試 n);system(pause);system(cls);printf( 您的卡號三次輸入錯(cuò)誤,謝謝使用 );exit(0);/* 銀行菜單函數(shù)*/ void caidan(struct per *head) head=NULL;int i;while(1)printf( 請選擇您需要的業(yè)務(wù)n);printf(”*為客戶選擇輸入的變量*/銀行業(yè)務(wù)菜單*/*i
41、/*查詢*n);修改密碼 *n);退出*n);/*/*/*/*/*/*n);printf(* 1取款 *2printf(”*n);printf(* 3轉(zhuǎn)賬 *4printf(”*n);printf(* 5存款 *6printf(”*nnn);scanf(%d,&i);if(i0)switch(i)case 1:qukuan(head); system(pause); system(cls);break;case 2: system(cls);chaxun(head);break;case 3:system(cls); zhuangzhang(head); break;case 4:system
42、(cls);xgmm(head);break;case 5:system(cls); cunkuan(head);break;case 6:system(cls);tuichu(); break;調(diào)用銀行取款函數(shù) */調(diào)用銀行查詢函數(shù)*/調(diào)用銀行轉(zhuǎn)賬函數(shù) */調(diào)用銀行修改密碼函數(shù) */調(diào)用銀行存款函數(shù)*/調(diào)用銀行退出函數(shù)*/else printf( 您的輸入有誤 n);system(pause);system(cls);/* 銀行取款函數(shù)函數(shù)*/void qukuan(struct per *head)head=NULL;*/int i;FILE *fp;struct per *p,*q=NU
43、LL;if(fp=fopen(,rb+)=NULL)/*head/*/*為鏈表頭指針定義文件指針 */打開一個(gè)二進(jìn)制文件,為讀方式*/如不能打開,則結(jié)束程序 */申請空間 */循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束*/如果沒讀到數(shù)據(jù),跳出循環(huán)*/為下一個(gè)結(jié)點(diǎn)申請空間作為下一結(jié)點(diǎn)的前指針后移, 新讀入數(shù)據(jù)鏈到當(dāng)前表尾*/最后一個(gè)結(jié)點(diǎn)的后繼指針為空*/ TOC o 1-5 h z printf( 不能打開文件n);/* p=(struct per*)malloc(sizeof(struct per); /* head=p;while(!feof(fp)/*if(1!=fread(p,sizeof(struct
44、per),1,fp) break;/*p-next=(struct per *)malloc(sizeof(struct per);/* */q=p;/*/p=p-next;/*q-next=NULL;/*fclose(fp); system(cls);printf(*n);printf(* 1: 100 元 * 2: 200 元 *n); printf(*n);printf(* 3: 300元*4: 400元*n);printf(*n);printf(* 5: 500元*6: 600元*n);printf(*n);printf( 請按要求選擇您要取款的金額n);scanf(%d,&i);if
45、(i6|iq-money )printf( 對不起,您的余額不足n);system(pause);system(cls);caidan(head);/*elseq-money-=i;/*if(fp=fopen(,wb+)=NULL)/* printf(cannot open filen);return;if(fwrite(q,sizeof(struct per),1,fp)!=1)/*件*/printf(file write errorn);printf(您已成功走取譏n,i);q-next=NULL;fclose(fp);/*限制輸入范圍 */對應(yīng)選項(xiàng)乘以一百為取款金額*/調(diào)用取款機(jī)菜單函數(shù)
46、 */對金額進(jìn)行處理*/打開文件 */將修改的信息重新寫入文關(guān)閉文件 */* 銀行轉(zhuǎn)賬函數(shù)*/void zhuangzhang(struct per *head)head=NULL;FILE *fp;/*定義文件指針 */打開一個(gè)二進(jìn)制文件,為讀方式*/*如不能打開,則結(jié)束程序 */申請空間 */循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束*/如果沒讀到數(shù)據(jù),跳出循環(huán)*/為下一個(gè)結(jié)點(diǎn)申請空間保存當(dāng)前結(jié)點(diǎn)的指針, 作為下一結(jié)點(diǎn)的前指針后移, 新讀入數(shù)據(jù)鏈到當(dāng)前表尾*/最后一個(gè)結(jié)點(diǎn)的后繼指針為空*/核對輸入卡號*/n);元 *n);元 *n);元 *n);struct per *p,*q=NULL; if(fp=fo
47、pen(,rb+)=NULL) /* TOC o 1-5 h z printf( 不能打開文件n);p=(struct per*)malloc(sizeof(struct per); head=p;while(!feof(fp)/*if(1!=fread(p,sizeof(struct per),1,fp) break;/*p-next=(struct per *)malloc(sizeof(struct per);/* */q=p;/*驅(qū)*/p=p-next;/*q-next=NULL;/*fclose(fp); int i,j,k; printf( 請輸入轉(zhuǎn)賬號碼n);scanf(%d,&
48、i);printf( 請?jiān)俅屋斎朕D(zhuǎn)賬號碼n);/*scanf(%d,&j);if(i!=j) printf( 兩次賬號不相同,請重新輸入 zhuangzhang(head); else system(cls);printf(*n printf(* 1: 100 元 * 2: 200 printf(*n printf(* 3: 300元* 4: 400printf(*n printf(* 5: 500元*6: 600printf(*nprintf( 請輸入轉(zhuǎn)賬金額n);scanf(%d,&k);if(k6|kq-money )/*printf( 對不起,您的余額不足 n);system(paus
49、e);system(cls);caidan(head);elseprintf(您已成功轉(zhuǎn)賬譏n,k);q-money-=k;if(fp=fopen(,wb+)=NULL)printf(cannot open filen);return;if(fwrite(q,sizeof(per),1,fp)!=1)/*/printf(file write errorn);q-next=NULL;fclose(fp);system(pause);system(cls);對余額進(jìn)行判斷*/將新數(shù)據(jù)重新寫入文件中/* 銀行查詢函數(shù)*/void chaxun(struct per *head) head=NULL;
50、/*FILE *fp;/*struct per *p,*q=NULL;鏈表頭指針*/定義文件指針 */打開一個(gè)二進(jìn)制文件,為讀方式*/如不能打開,則結(jié)束程序*/申請空間 */循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束*/如果沒讀到數(shù)據(jù),跳出循環(huán)*/為下一個(gè)結(jié)點(diǎn)申請空間if(fp=fopen(,rb+)=NULL) /* TOC o 1-5 h z printf( 不能打開文件n);/*p=(struct per*)malloc(sizeof(struct per); /* head=p;while(!feof(fp)/*if(1!=fread(p,sizeof(struct per),1,fp)break;/*
51、p-next=(struct per *)malloc(sizeof(struct per);/*/q=p;/*保存當(dāng)前結(jié)點(diǎn)的指針,作為下一結(jié)點(diǎn)的前驅(qū)*/p=p-next;/*指針后移, 新讀入數(shù)據(jù)鏈到當(dāng)前表尾*/q-next=NULL;/*最后一個(gè)結(jié)點(diǎn)的后繼指針為空*/fclose(fp); printf( 您卡上原有余額為d元nn,q-money);system(pause);system(cls); TOC o 1-5 h z /* 銀行修改密碼函數(shù)*/ void xgmm(struct per *head) head=NULL;/*char mima20; FILE *fp;/*str
52、uct per *p,*q=NULL;if(fp=fopen(,rb+)=NULL) /*printf( 不能打開文件n);p=(struct per*)malloc(sizeof(struct per); head=p;while(!feof(fp)/* if(1!=fread(p,sizeof(struct per),1,fp) break;/*鏈表頭指針*/定義文件指針 */打開一個(gè)二進(jìn)制文件,為讀方式*/*如不能打開,則結(jié)束程序 */* 申請空間 */循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束*/如果沒讀到數(shù)據(jù),跳出循環(huán)*/為下一個(gè)結(jié)點(diǎn)申請空間保存當(dāng)前結(jié)點(diǎn)的指針,作為下一結(jié)點(diǎn)的指針后移, 新讀入數(shù)據(jù)鏈到
53、當(dāng)前表尾最后一個(gè)結(jié)點(diǎn)的后繼指針為空*/核對密碼 */文件頭指針*/將修改的密碼重新寫入文*/p-next=(struct per *)malloc(sizeof(struct per);/*/ TOC o 1-5 h z q=p;/*前驅(qū) */p=p-next;/* q-next=NULL;/*fclose(fp); printf( 請輸入您的原密碼n);scanf(%s,mima);if(strcmp(q-mima,mima)=0)/*printf(密碼正確 n);printf(請輸入您的新密碼:n);scanf(%s,q-mima);if(fp=fopen(,wb+)=NULL)/* pr
54、intf(cannot open filen);return;if(fwrite(q,sizeof(struct per),1,fp)!=1)/*件*/printf(file write errorn);fclose(fp);printf( 密碼修改成功nnnnn);else printf( 您輸入的密碼與原密碼不同 n); return;system(pause);q-next=NULL;/* 銀行存款函數(shù)*/ void cunkuan(struct per *head) TOC o 1-5 h z head=NULL;/*int i; FILE *fp;/*struct per *p,*q
55、=NULL; if(fp=fopen(,rb+)=NULL) /* printf( 不能打開文件n);p=(struct per*)malloc(sizeof(struct per); head=p;while(!feof(fp)/*鏈表頭指針 */定義文件指針 */打開一個(gè)二進(jìn)制文件,為讀方式*/*如不能打開,則結(jié)束程序 */* 申請空間 */循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束*/如果沒讀到數(shù)據(jù),跳出循環(huán)*/為下一個(gè)結(jié)點(diǎn)申請空間保存當(dāng)前結(jié)點(diǎn)的指針, 作為下一結(jié)點(diǎn)的前指針后移, 新讀入數(shù)據(jù)鏈到當(dāng)前表尾*/最后一個(gè)結(jié)點(diǎn)的后繼指針為空*/if(1!=fread(p,sizeof(struct per),1,
56、fp) break;/* p-next=(struct per *)malloc(sizeof(struct per);/*/q=p;/*驅(qū)*/p=p-next;/*q-next=NULL;/*fclose(fp); system(cls); printf(您卡上原有余額為 %d%n,q-money );printf(*n);printf(*1: 100元*2: 200元*n)printf(*n);printf(*3: 300元*4: 400元*n)printf(*n);printf(*5: 500元*6: 600元*n)printf(*n);printf( 請選擇您要存入的金額);scanf
57、(%d,&i);if(i6|imoney+=i;打開文件 */if(fp=fopen(,wb+)=NULL)/*printf(cannot open filen);return;將修改的密碼重新寫入文if(fwrite(q,sizeof(struct per),1,fp)!=1)/*件*/printf(file write errorn);printf(您已成功存取元坨力;q-next=NULL;fclose(fp);system(pause);system(cls);/* 退出銀行函數(shù)*/void tuichu()printf( 謝謝使用 n);exit(0);/* 后臺運(yùn)行菜單函數(shù)*/ v
58、oid menu()/ 菜單顯示函數(shù)printf(*歡迎來到建設(shè)銀行取款機(jī)系統(tǒng)*nnnn);printf(”*n);printf(* 1 建立信息并顯示* 2 卡號查詢信息printf(*printf(* 3 姓名查詢信息* 4 余額查詢信息printf(”*n);printf(* 5 刪除某卡號信息*6 增加新的可戶*n);*n);*n);printf(”*n);printf(* 7 按余額降序輸出 *8 輸出printf(”*printf(* 0 退出謝謝光臨*n);*n);printf(”*n);printf( 請選擇您需要的業(yè)務(wù)nn);/* 后臺運(yùn)行創(chuàng)建鏈表函數(shù)*/void chuan
59、gjian(struct person *Phead) /*(*Phead) 為指向結(jié)構(gòu)體指針的地 址 */struct person *p,*t;/*定義操作指針 */char n20;char a20;int s;if(*Phead) *Phead=NULL;printf(請輸入卡號姓名金額 (若要結(jié)束請輸入三個(gè)為零) n); TOC o 1-5 h z printf(請輸入卡號n);scanf(%s,n);printf( 請輸入姓名 n);/ 輸入信息scanf(%s,a);printf( 請輸入預(yù)存金額n);scanf(%d,&s);if(s=0) return;將信息輸入鏈表中將指針
60、重新指向頭指針*/p=(L *)malloc(sizeof(L);/strcpy(p-,n);strcpy(p-,a);p-=s;p-next=NULL; TOC o 1-5 h z *Phead=p;/*printf(請輸入卡號n);scanf(%s,n);printf(請輸入姓名n);scanf(%s,a);printf( 請輸入預(yù)存金額n);scanf(%d,&s);while(s)將 P 的值賦給 t,p 又可以存儲下為新節(jié)點(diǎn)開辟新的內(nèi)存*/t=p;/*一個(gè)節(jié)點(diǎn) */p=(L *)malloc(sizeof(L);/*strcpy(p-,n);strcpy(p-,a);p-=s;p-n
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版借款墊資風(fēng)險(xiǎn)控制合作協(xié)議范本3篇
- 2025年度智能電網(wǎng)項(xiàng)目可研咨詢服務(wù)協(xié)議正范文本3篇
- 學(xué)校化糞池維修工程協(xié)議
- 2025版文化旅游項(xiàng)目建議書編制及運(yùn)營管理合同3篇
- 徒步班組施工合同
- 保險(xiǎn)服務(wù)標(biāo)準(zhǔn)化管理辦法
- 通信設(shè)備招投標(biāo)法規(guī)解析
- 電子產(chǎn)品采購招投標(biāo)改進(jìn)策略
- 商業(yè)廣場施工合作協(xié)議
- 2025年度模具行業(yè)模具設(shè)計(jì)與制造質(zhì)量認(rèn)證合同3篇
- 豬場配懷工作安排方案設(shè)計(jì)
- GB/T 2-2016緊固件外螺紋零件末端
- GB/T 12467.5-2009金屬材料熔焊質(zhì)量要求第5部分:滿足質(zhì)量要求應(yīng)依據(jù)的標(biāo)準(zhǔn)文件
- GB 17740-1999地震震級的規(guī)定
- 安全生產(chǎn)事故舉報(bào)獎勵制度
- 冠心病健康教育完整版課件
- 永久避難硐室安裝施工組織措施
- 元旦節(jié)前安全教育培訓(xùn)-教學(xué)課件
- 國家開放大學(xué)《理工英語1》單元自測8試題答案
- 芯片工藝流程課件1
- 人教版八年級下冊生物期末測試卷帶答案
評論
0/150
提交評論