




版權(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) 題 目: ATM存取款系統(tǒng)的改進(jìn)與完善 系部: 計(jì)算機(jī)科學(xué)與技術(shù)系 專 業(yè) /年 級: 軟件工程專業(yè)2011級 學(xué) 生 姓 名: 李安平 班 級: 1班 學(xué)號 2011022122 指導(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業(yè)
2、務(wù)環(huán)境,本系統(tǒng)必須實(shí)現(xiàn)存款、取款、查詢、轉(zhuǎn)賬、修改密碼以及開戶的功能。用戶通過開戶業(yè)務(wù)在本系統(tǒng)開立銀行賬戶,之后可以通過該銀行賬戶登陸ATM系統(tǒng),在系統(tǒng)中實(shí)現(xiàn)存款、取款、查詢賬戶信息、修改密碼的操作。本系統(tǒng)各個(gè)業(yè)務(wù)有如下注意點(diǎn):(1) 登陸系統(tǒng)用戶登陸之前,必須在登陸界面輸入其銀行賬戶,通過其正確輸入的銀行賬戶登陸系統(tǒng)。(2) 開戶業(yè)務(wù) 要使用本系統(tǒng)必須首先執(zhí)行開戶業(yè)務(wù)開立新的銀行賬戶,并且將此新開的銀行存儲于文件當(dāng)中。同時(shí),系統(tǒng)以身份證號碼作為開戶的充分條件,即一個(gè)身份證號碼只能開立一次銀行賬戶。(3) 存款業(yè)務(wù) 客戶登陸系統(tǒng)后,選擇存款業(yè)務(wù),即可以將輸入的存款金額存入相應(yīng)的賬戶。(4) 取
3、款業(yè)務(wù)客戶登陸系統(tǒng)后,選擇取款業(yè)務(wù),即可以將輸入的取款金額從相應(yīng)的銀行賬戶取出,但是取款金額必須大于目前的賬戶余額。(5) 查詢業(yè)務(wù) 客戶登陸系統(tǒng)后,可以選擇查詢業(yè)務(wù),查詢賬戶余額。(6) 轉(zhuǎn)賬業(yè)務(wù) 客戶登陸系統(tǒng)后,可以選擇轉(zhuǎn)賬業(yè)務(wù),進(jìn)行轉(zhuǎn)賬。注意的是轉(zhuǎn)賬的目的賬戶必須是本系統(tǒng)已經(jīng)存在的銀行賬戶。(7) 修改密碼客戶登陸系統(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)的算法(必須包括排序和檢索功能,且基于鏈表
4、進(jìn)行排序和檢索)2、詳細(xì)設(shè)計(jì)階段(1)對于每個(gè)功能模塊,應(yīng)劃分成操作層和數(shù)據(jù)層(2)對于每個(gè)操作層,應(yīng)盡量考慮用戶操作的簡單,便捷(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、)要求完成必要的測試工作5、交付實(shí)施階段(1)提交可正常執(zhí)行的系統(tǒng),程序代碼(2)撰寫項(xiàng)目實(shí)訓(xùn)報(bào)告書(3)要求按照文檔書寫規(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)
6、行實(shí)訓(xùn)(每周2課時(shí)),軟件開發(fā)步驟如下,在第16周必須完成所有任務(wù),實(shí)訓(xùn)與報(bào)告撰寫同步進(jìn)行;序號實(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種主要查找如順序查找
7、2、將這些算法結(jié)合到學(xué)生的工程應(yīng)用題中4驗(yàn)證必開15實(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)、良、中、及格和不及格五檔。l 以下情況可以判斷成績?yōu)椴患案瘢篴、 抄襲b、 代碼
8、量少于300行c、 未使用鏈表d、 報(bào)告不符合規(guī)范l 以下情況不可以判斷成績?yōu)閮?yōu):a、 未使用鏈表排序b、 使用全局變量c、 大量代碼集中在主函數(shù)main()中,而不是使用函數(shù)進(jìn)行合理封裝d、 功能不完善,有殘缺e、 代碼缺乏必要的注釋f、 缺課l 其他情況由指導(dǎo)老師綜合考慮給予成績評定l 主要考察知識點(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)造出
9、取款機(jī)的基本框架及正確的操作流程。將取款機(jī)的任務(wù)需求分成若干個(gè)模塊進(jìn)行編寫。編寫主要運(yùn)用鏈表建立完整的客戶信息,完成客戶所需的存款以及取款,修改密碼等多項(xiàng)功能。查詢信息需要對鏈表進(jìn)行遍歷,逐一對信息進(jìn)行核對比較,直到找到所需信息或找到鏈表尾部停止。鏈表能夠按所需分配內(nèi)存空間,讓空間得到充分的利用,同時(shí)能夠短暫的保存信息,若需長期保存,需要文件的配合。文件能夠長久的保存信息。在銀行取款機(jī)系統(tǒng)中,先把鏈表中的信息存進(jìn)文件中,然后在文件中將信息讀到鏈表中。能夠?qū)崿F(xiàn)信息的多次利用。關(guān)鍵詞:ATM,鏈表,文件目 錄摘 要I第1章 需求分析11.1 功能需求11.2 性能需求11.3 運(yùn)行需求1第2章 系
10、統(tǒng)設(shè)計(jì)22.1銀行開戶功能22.2銀行登錄功能22.3銀行取款功能22.4余額查詢功能22.5轉(zhuǎn)賬功能32.6修改密碼功能32.7存款功能32.8卡號查詢功能32.9姓名查詢功能32.10余額查詢功能42.11刪除客戶功能42.12增加客戶功能4第3章 系統(tǒng)實(shí)現(xiàn)53.1卡號與密碼的驗(yàn)證53.2 從文件中讀取信息63.3 刪除功能的實(shí)現(xiàn)73.4數(shù)據(jù)域邏輯的分離73.5程序架構(gòu)的描述73.6 鏈表的應(yīng)用83.7 鏈表排序8第4章 測 試94.1開戶功能測試94.2登陸功能測試94.3取款功能測試94.4修改密碼功能測試104.5多個(gè)客戶信息測試10結(jié) 論11附 錄13致 謝33第1章 需求分析1.
11、1 功能需求先進(jìn)行系統(tǒng)分析,將該系統(tǒng)劃分為登陸注冊模塊、鍵盤輸入輸出模塊、信息認(rèn)證模塊、顯示模塊、數(shù)據(jù)存儲模塊。登陸注冊模塊主要包括新用戶的開戶以及老用戶的登陸功能。鍵盤輸入輸出模塊輸入客戶信息,銀行卡號,密碼,存款取款的金額等相關(guān)信息,待系統(tǒng)處理后,輸出客戶的某項(xiàng)信息或提示客戶的操作信息。信息認(rèn)證模塊主要是對客戶的卡號、密碼、以及客戶的輸入信息的規(guī)范進(jìn)行判斷與認(rèn)證。顯示模塊主要包括取款模塊、存款模塊、查詢余額模塊、轉(zhuǎn)賬模塊、修改密碼模塊。數(shù)據(jù)存儲模塊主要是將客戶信息存儲到文件中,需要時(shí)從文件中讀取數(shù)據(jù)到鏈表中,找到相關(guān)信息。1.2 性能需求 性能的需求就是要求在數(shù)據(jù)上要有精確值,以免因?yàn)閿?shù)據(jù)
12、上的馬虎而使得程序存在不確定的風(fēng)險(xiǎn),在查詢過程中,要求顯示該客戶賬號上的所有金額,在客戶存取款的過程中,系統(tǒng)只支持交易金額為一百的倍數(shù),并且交易的金額一次不能超過六百,當(dāng)客戶的輸入的取款金額比現(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)。1.3 運(yùn)行需求銀行取款機(jī)系統(tǒng)的界面要求簡潔、友好,且菜單操作簡單易懂。當(dāng)客戶輸入的信息不符合要求時(shí)
13、,要溫馨的提示客戶重新輸入,或者退出。如客戶輸入的密碼與開戶時(shí)所設(shè)密碼不相同,則提示客戶重新輸入密碼,若密碼連續(xù)輸入三次,則提示客戶三次密碼輸入錯(cuò)誤,退出程序。這樣能讓客戶很清楚自己當(dāng)前的操作,以及操作后系統(tǒng)運(yùn)行產(chǎn)生的結(jié)果,簡單方便,使用性強(qiáng)。第2章 系統(tǒng)設(shè)計(jì)2.1銀行開戶功能 新客戶使用銀行取款機(jī)系統(tǒng)時(shí),必須先進(jìn)行開戶。客戶在進(jìn)行開戶業(yè)務(wù)時(shí),提示客戶輸入姓名,身份證號碼即新客戶的銀行卡號,并設(shè)定好銀行卡密碼。將客戶的信息寫入鏈表當(dāng)中,并保存在文件中。新客戶的默認(rèn)余額為0.0元。當(dāng)客戶注冊成功后,系統(tǒng)將自動保存客戶信息,然后顯示客戶的姓名,卡號,以及客戶的默認(rèn)余額。以便客戶識記。2.2銀行登錄
14、功能 客戶進(jìn)入銀行取款機(jī)登錄界面時(shí),按照指定的要求進(jìn)行操作,當(dāng)提示客戶輸入身份證號(卡號),當(dāng)系統(tǒng)接收到客戶的輸入信息時(shí),將文件中的信息輸?shù)芥湵碇校M(jìn)行遍歷核對,當(dāng)系統(tǒng)接收到客戶的輸入信息時(shí),將文件中的信息輸?shù)芥湵碇校M(jìn)行遍歷核對,若客戶輸入的銀行卡號與注冊的卡號不相同,則提示客戶輸入有誤,讓客戶重新輸入。三次輸入銀行卡號有誤,系統(tǒng)將自動退出。若輸入卡號正確,則進(jìn)入下一個(gè)流程。當(dāng)提示客戶輸入銀行卡密碼,當(dāng)系統(tǒng)接收到客戶的輸入信息時(shí),將文件中的信息輸?shù)芥湵碇校M(jìn)行遍歷核對,若客戶輸入的銀行卡密碼與注冊的銀行卡密碼不相同,則提示客戶輸入有誤,讓客戶重新輸入。2.3銀行取款功能客戶進(jìn)入銀行取款界面時(shí)
15、,在銀行取款界面中顯示客戶可取金額數(shù)目項(xiàng)目,客戶按照指定金額對應(yīng)的阿拉伯?dāng)?shù)字輸入即可。當(dāng)客戶按照指定的要求輸入時(shí),將對客戶輸入的金額與用戶里面的余額進(jìn)行比較,若客戶輸入的金額大于現(xiàn)有余額,則提示客余額不足,返回功能選擇界面。若客戶輸入的金額小于客戶原有余額,則按p->money-=i的公式從客戶原有余額中減去當(dāng)下所取金額,然后提示取款成功,并顯示客戶現(xiàn)有余額。2.4余額查詢功能客戶在進(jìn)入銀行查詢界面時(shí),系統(tǒng)自動從鏈表中讀取與該客戶相匹配的余額。2.5轉(zhuǎn)賬功能客戶進(jìn)入銀行轉(zhuǎn)賬界面時(shí),當(dāng)系統(tǒng)提示客戶兩次輸入需要轉(zhuǎn)賬的卡號,若兩次輸入不相同,則返回選擇功能界面。若客戶兩次輸入相同,則從客戶原有
16、余額中減去當(dāng)下所取金額,然后提示轉(zhuǎn)賬成功,并顯示客戶現(xiàn)有余額。2.6修改密碼功能客戶進(jìn)入登錄界面時(shí),系統(tǒng)自動提示客戶輸入銀行卡原密碼,當(dāng)系統(tǒng)接收到客戶的輸入的信息時(shí),遍歷鏈表中的信息與客戶輸入的密碼進(jìn)行核對,若客戶輸入的銀行卡原密碼與注冊的銀行卡密碼不相同,則提示客戶輸入有誤,系統(tǒng)將自動返回功能選擇界面。若輸入密碼正確,提示客戶輸入新密碼,并保存好客戶修改的新密碼。下次登錄只能用新密碼才能成功登錄。2.7存款功能客戶進(jìn)入銀行存款界面時(shí),系統(tǒng)會從鏈表中找出該客戶的余額顯示出來,在銀行存款界面中顯示客戶可取金額數(shù)目項(xiàng)目,客戶按照指定金額對應(yīng)的阿拉伯?dāng)?shù)字輸入即可。系統(tǒng)將在客戶原有余額中加上當(dāng)下所存金
17、額,然后提示存款成功,并顯示客戶現(xiàn)有余額。2.8卡號查詢功能 在客戶信息查詢界面中,能夠?qū)⒌乃锌蛻舻男畔凑湛ㄌ栠M(jìn)行查詢,當(dāng)操作人員輸入需要查找的客戶的卡號,當(dāng)找到鏈表中的卡號與輸入的客戶的卡號相同時(shí),則顯示出客戶的信息,包括客戶的姓名,卡號,以及余額。若沒有找到與之相同的客戶卡號,則提示沒有該用戶,返回功能界面,重新選擇。操作者完成客戶信息查詢后,顯示該客戶的姓名、卡號、以及余額。2.9姓名查詢功能 在客戶信息查詢界面中,能夠?qū)⒌乃锌蛻舻男畔凑招彰M(jìn)行查詢,當(dāng)操作人員輸入需要查找的客戶的姓名,當(dāng)找到鏈表中的客戶姓名與輸入的客戶的姓名相同時(shí),則顯示出客戶的信息,包括客戶的姓名,卡
18、號,以及余額。若沒有找到與之相同的客戶姓名,則提示沒有該用戶,返回功能界面,重新選擇。操作者完成客戶信息查詢后,顯示該客戶的姓名、卡號、以及余額。2.10余額查詢功能 在客戶信息查詢界面中,能夠?qū)⒌乃锌蛻舻男畔凑沼囝~進(jìn)行查詢,當(dāng)操作人員輸入需要查找的客戶的余額,若找到鏈表中的客戶余額與輸入的客戶的余額相同,則顯示出客戶的信息,包括客戶的姓名,卡號,以及余額。若沒有找到與之相同的客戶余額,則提示沒有該用戶,返回功能界面,重新選擇。操作者完成客戶信息查詢后,顯示該客戶的姓名、卡號、以及余額。2.11刪除客戶功能 在已經(jīng)建立起了鏈表的前提下,后臺操作者可以對客戶的信息進(jìn)行刪減,當(dāng)操作人員輸入
19、需要?jiǎng)h除的客戶的卡號,當(dāng)找到鏈表中的客戶卡號與輸入的客戶的卡號相同時(shí),將該客戶信息賦給一工作指針,用另一操作指針指向該用戶后一客戶,則刪除該用戶的信息。若沒有找到與之相同的客戶卡號,則提示沒有該用戶,返回功能界面,重新選擇。2.12增加客戶功能 后臺操作者可以增加客戶的信息,操作者按要求輸入客戶的姓名、卡號、余額即可。系統(tǒng)將操作人員輸入的信息寫入鏈表中。傳入頭指針,并以頭插法的形式寫入即可。第3章 系統(tǒng)實(shí)現(xiàn)3.1卡號與密碼的驗(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)證,就需要對其原理
20、及其運(yùn)行方式做詳細(xì)的解說,客戶進(jìn)入登陸界面后,將鏈表的頭指針head傳給該函數(shù),char mima6 為客戶輸入卡號的變量, Char d20為客戶輸入卡號的變量。當(dāng)接收到客戶輸入的卡號與密碼時(shí),要對客戶的卡號與密碼進(jìn)行驗(yàn)證,則得對鏈表進(jìn)行一次遍歷,將工作指針指向頭指針,從頭結(jié)點(diǎn)開始尋找,逐一與客戶輸入的卡號進(jìn)行核對,如果第一個(gè)節(jié)點(diǎn)沒有所需信息,則讓工作指針指向下一個(gè)節(jié)點(diǎn),當(dāng)工作指針p指向NULL時(shí)還未找到該用戶時(shí),則說明沒有該用戶,若找到該客戶的卡號,提示該客戶輸入密碼,并對客戶的密碼進(jìn)行核對,若與鏈表中的密碼不同,則提示客戶密碼輸入錯(cuò)誤,請重新輸入,若完全相同,則提示客戶登陸成功,進(jìn)入菜單
21、選擇界面。下面是驗(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->next) if(strcmp(q->ID,d)!=0) printf("nn請輸入您的密碼n"); scanf("%s",mima); if(strcmp(q->mima,mima)!=0) printf("密碼不正確,請重新輸入密碼
22、n"); else caidan(head); 3.2 從文件中讀取信息運(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í)用。如何將文件中的信息讀入鏈表中,又是我們需要探討的問題。需要我們仔細(xì)的分析。首先定義兩個(gè)工作指針,然后以讀的方式打開一個(gè)二進(jìn)制的文件,如果文件指針指向NULL,則提示“不能打開文件”,如果能夠
23、打開,那么進(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ū),然后讓工作指針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("sav
24、e.txt","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); 3.3 刪除功能的實(shí)現(xiàn)在鏈表中刪除某個(gè)節(jié)點(diǎn)時(shí),若是第一個(gè)客戶時(shí),運(yùn)用頭指針指向該節(jié)點(diǎn)下一個(gè)節(jié)點(diǎn)的地址,這樣就把第一個(gè)節(jié)
25、點(diǎn)刪除了。如果不是頭節(jié)點(diǎn),用一個(gè)工作指針指向該節(jié)點(diǎn),用另一工作指針指向該接點(diǎn)的下一節(jié)點(diǎn)的地址,這樣就把指定要?jiǎng)h節(jié)點(diǎn)刪除了。printf(" 請輸入要?jiǎng)h除的客戶卡號:n"); scanf("%s",k); if(p->kehu.ID=k) *Phead=(*Phead)->next,free(p); else while(NULL=p->next&&p->next->kehu.ID!=k) p=p->next; if(p->next=NULL) printf("對不起,沒有該客戶 !n&q
26、uot;); else t=p->next; p->next=p->next->next; 3.4數(shù)據(jù)域邏輯的分離在制作銀行取款機(jī)系統(tǒng)時(shí),首先不處理程序的有關(guān)數(shù)據(jù),比如說不核對客戶銀行卡卡號與密碼即可進(jìn)入功能選擇界面,不處理取款時(shí)余額是否不足,客戶的輸入有誤等這些問題,而是將銀行取款機(jī)系統(tǒng)中的各個(gè)功能的函數(shù)基本框架構(gòu)建好,這樣銀行取款機(jī)系統(tǒng)中邏輯這一塊就不受數(shù)據(jù)方面的約束而顯得非常清晰了。3.5程序架構(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)
27、行時(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)成型了。3.6 鏈表的應(yīng)用運(yùn)用鏈表建立銀行ATM后臺管理系統(tǒng)。在銀行ATM后臺管理系統(tǒng)中,可以建立若干個(gè)客戶信息,直到連續(xù)輸入三個(gè)零則停止客戶信息的建立。在后臺中,可以運(yùn)用卡號、姓名、以及余額進(jìn)行客戶信息查詢。并且可以對客戶的信息進(jìn)行插入、刪除等功能。在后臺鏈表操作中。能夠建立若干個(gè)客戶的信息,同時(shí)也可以對所有的客戶信息遍歷,進(jìn)行輸出,同時(shí)可以對所有的客戶信息按余額的降序排序進(jìn)行輸出。在已經(jīng)建立好了客戶信息的前提下,能夠?qū)蛻舻男畔⑦M(jìn)行
28、刪減,同時(shí)也能夠增加客戶的信息。同時(shí)能夠按客戶的卡號、姓名、以及余額,對客戶的信息進(jìn)行查詢。3.7 鏈表排序鏈表排序,包括冒泡排序,選擇排序,以及插入排序。運(yùn)用鏈表排序與運(yùn)用數(shù)組進(jìn)行排序的思想很類似。比如說冒泡排序,冒泡排序同樣是對所有數(shù)據(jù)進(jìn)行逐一的比較。然后將大的數(shù)據(jù)保存到下面去,直到一輪比較結(jié)束,然后再進(jìn)行第二輪比較。直到所有的比較完成。將鏈表排序運(yùn)用于銀行ATM后臺客戶信息輸出系統(tǒng)中,已經(jīng)建立好若干個(gè)客戶信息,當(dāng)需要讓客戶的信息按照余額的降序進(jìn)行排列輸出時(shí),則鏈表的排序則體現(xiàn)出了它的功能。讓客戶的信息以余額的降序一一排列輸出。但在實(shí)際運(yùn)用時(shí)又遇到了麻煩,交換的是某項(xiàng)的值,而不是地址,這個(gè)
29、讓我很頭疼,但我會繼續(xù)努力,將其弄懂弄透。做到得心應(yīng)手。第4章 測 試4.1開戶功能測試當(dāng)客戶注冊成功時(shí),出現(xiàn)如圖4.1所示的界面。圖4.1 開戶界面示意圖4.2登陸功能測試當(dāng)客戶卡號與密碼核對無誤,登陸成功時(shí),出現(xiàn)如圖4.2所示的界面。圖4.2 登錄界面示意圖4.3取款功能測試當(dāng)客戶取款成功時(shí),出現(xiàn)如圖4.3所示的界面。圖4.3 取款界面示意圖4.4修改密碼功能測試當(dāng)客戶密碼修改成功時(shí),出現(xiàn)如圖4.2所示的界面。圖4.4 修改密碼界面示意圖4.5多個(gè)客戶信息測試當(dāng)管理員按要求輸入多個(gè)客戶信息時(shí),出現(xiàn)如圖4.5所示的界面。圖4.5 建立客戶信息示意圖結(jié) 論在ATM存取款系統(tǒng)的改進(jìn)與完善的過程中
30、,讓我學(xué)到了許多的知識,有了更多新的感受。在改進(jìn)取款機(jī)系統(tǒng)時(shí),讓我增強(qiáng)了挑戰(zhàn)困難的勇氣。上學(xué)期對鏈表與文件有著強(qiáng)烈的恐懼心理,感覺那是一道不可逾越的高山。但通過老師的一步步的引導(dǎo),讓我們慢慢向高山靠近,然后試著去攀登。經(jīng)過若干次的嘗試,慢慢體會到了其中的樂趣,同時(shí)也就增加了自己繼續(xù)攀登的信心。ATM的制作過程中,常常會遇到一系列的問題,比如說如何傳遞指針,這個(gè)問題一直是我難以理解的知識,總感覺很抽象的,為什么它就能很準(zhǔn)確的將頭指針傳過來。剛開始就是運(yùn)用全局指針進(jìn)行操作,這樣理解起來就比較容易了,但是全局變量有著很大的缺陷,那就是一旦全局變量發(fā)生變化,其他的函數(shù)都將發(fā)生一系列的變化,那種變化是很
31、難預(yù)知的,輕則運(yùn)行出錯(cuò),重則系統(tǒng)癱瘓,無法運(yùn)行。后來懷著對該問題的深思,向同學(xué)詢問,并去圖書館查閱資料,慢慢對鏈表傳參有了一定的了解。通過多次的嘗試,對其的理解程度又有了新的提高。在制作的過程中,我不僅學(xué)到的是一些直觀實(shí)用的應(yīng)用知識,更學(xué)到了許多設(shè)計(jì)思想。以前寫程序,拿到就一股腦的寫,沒有去對其需求進(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è)小模塊。這樣
32、在功能的設(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è)計(jì)(第三版)北京:清華大學(xué)出版社,2005,330-348.2 高濤,陸麗娜C語言程序設(shè)計(jì)西安:西安交通大學(xué)出版社,2007.2:249-280附 錄#include<stdio.h> #include<string.h>#include<stdlib.h>struct per /*定義結(jié)構(gòu)體*
33、/ char name20; char ID20; int money; char mima6; struct per *next;typedef struct person /*定義另一結(jié)構(gòu)體*/ struct per kehu ; struct person *next; L; void chaxun(struct per *head); /*各個(gè)函數(shù)的聲明*/void kaihu(struct per *head);void denglu(struct per *head);void caidan(struct per *head);void qukuan(struct per *hea
34、d);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);void zengjia(struct person *Phead); void chaxun1(struct person *Phead);void chaxun2(struct perso
35、n *Phead);void chaxun3(struct person *Phead);void tuichu();void menu();/*主函數(shù)*/void main() char x; char choose; /*choose為定義輸入選擇的變量*/ int flag=1; struct person *Phead=NULL; /* Phead為定義二層頭指針*/ struct per *head=NULL; /*head為定義一層頭指針*/ printf(" *n"); printf(" * 歡迎使用ATM自動取款機(jī)系統(tǒng) *n"); pri
36、ntf(" *nnnn"); printf("-n"); printf("| 1 開戶 |n"); printf("-n"); printf("| 2 登錄 |n"); printf("-n"); printf("| 3 前臺客戶信息查詢中心|n"); printf("-n"); printf("| 請選擇您的需求 |n"); printf("-n"); scanf("%s",
37、&x); system("cls"); switch(x) case '1':system("cls"); kaihu(head); /*調(diào)用開戶函數(shù)*/ break; case '2':system("cls"); denglu(head); /*調(diào)用登陸函數(shù)*/ break; case '3':system("cls"); menu(); /*調(diào)用后臺菜單函數(shù)*/ break; while(flag) system("cls"); me
38、nu(); /*調(diào)用后臺菜單函數(shù)*/ choose=getchar(); switch(choose) case '1':chuangjian(&Phead); shuchu(Phead); /*調(diào)用后臺輸出函數(shù)*/ system("pause"); system("cls"); break; case '2':chaxun1(Phead); /*調(diào)用后臺卡號查詢函數(shù)*/ system("pause"); system("cls"); break; case '3
39、39;:chaxun2(Phead); /*調(diào)用后臺姓名查詢函數(shù)*/ system("pause"); system("cls"); break; case '4':chaxun3(Phead); /*調(diào)用后臺余額查詢函數(shù)*/ system("pause"); system("cls"); break; case '5':shanchu(&Phead); /*調(diào)用后臺刪除用戶函數(shù)函數(shù)*/system("pause"); system("cls&q
40、uot;); break; case '6':zengjia(&Phead); /*調(diào)用后臺增加用戶函數(shù)*/ system("pause"); system("cls"); break; case '7': shuchu(Phead); /*調(diào)用后臺輸出函數(shù)函數(shù)*/system("pause"); system("cls"); break; case '8':shuchu(Phead);system("pause"); system(&qu
41、ot;cls"); break; case '0':flag=0; printf("The end.n"); break; /*開戶函數(shù)*/void kaihu(struct per *head) head=NULL; FILE *fp; /*定義文件指針*/ struct per *p1=NULL,*p2=NULL; /*p1,p1為定義鏈表指針*/ p1=(struct per*)malloc(sizeof(struct per); /*開辟內(nèi)存單元*/printf("請輸入您的姓名:n"); /*將數(shù)據(jù)輸入鏈表中*/ sc
42、anf("%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->
43、;money ); if(NULL=head) /*為新增客戶開辟內(nèi)存單元*/ head=(struct per *)malloc(sizeof(struct per); head->next =p1; /*進(jìn)行頭插法,將其作為第一個(gè)節(jié)點(diǎn)*/ else /*為新增客戶開辟內(nèi)存單元*/ for(p2=head;p2->next!=NULL;p2=p2->next); /*進(jìn)行尾插*/ p2->next=p1; if(fp=fopen("save.txt","ab+")=NULL) /*打開文件*/ printf("cann
44、ot open filen"); return; if(fwrite(p1,sizeof(struct 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)
45、 char d20; char mima20; int i,j; FILE *fp; /*定義文件指針*/ struct per *p,*q=NULL; if(fp=fopen("save.txt","rb+")=NULL) /*打開一個(gè)二進(jìn)制文件,為讀方式*/ printf("不能打開文件n"); /*如不能打開,則結(jié)束程序*/ p=(struct per*)malloc(sizeof(struct per); /*申請空間*/ head=p; while(!feof(fp) /*循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束*/ if(1!=fread
46、(p,sizeof(struct per),1,fp) break; /*如果沒讀到數(shù)據(jù),跳出循環(huán)*/ p->next=(struct per *)malloc(sizeof(struct per);/*為下一個(gè)結(jié)點(diǎn)申請空間*/ 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(" *n"); printf(" * 歡迎來到建設(shè)銀行 *n"); printf(" *n"); for(j=1;j<4;j+) /*限制卡號輸入的次數(shù)的循環(huán)*/ printf("請您輸入卡號n"); scanf("%s",d);for(q=head;q!=NULL;q=q->next) /*遍歷鏈表
溫馨提示
- 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年飛機(jī)液壓檢查凈化設(shè)備項(xiàng)目建議書
- 工程清包合同工程清包合同
- 2025年黑河道路危險(xiǎn)品押運(yùn)從業(yè)資格證模擬考試0題
- 2025年毒素類診斷抗原合作協(xié)議書
- 合作造林投資協(xié)議書
- 園區(qū)綠化養(yǎng)護(hù)管理合作協(xié)議
- 無線通信網(wǎng)絡(luò)協(xié)議解析
- 農(nóng)業(yè)供應(yīng)鏈管理與服務(wù)提供合同
- 2025年管理學(xué)考試內(nèi)容詳解試題及答案
- 社區(qū)農(nóng)田社會化服務(wù)協(xié)議
- 2023春期國開電大行政管理本科選修課《政治學(xué)原理》形考、終考試題及答案
- 三年級小機(jī)靈杯試題(常用版)
- 2022年中國熱帶農(nóng)業(yè)科學(xué)院分析測試中心高層次人才及博士招聘筆試備考題庫及答案解析
- 閃存存儲技術(shù)應(yīng)對大數(shù)據(jù)挑戰(zhàn)
- 科普項(xiàng)目申報(bào)書-中國科協(xié)
- 食蚜蠅課件完整版
- 主題班會《中國夢我的夢》課件
- 義務(wù)教育數(shù)學(xué)新課程標(biāo)準(zhǔn)選擇題題庫測試卷精選450題(2022版)含答案
- 古詩詞誦讀《客至》-統(tǒng)編版高中語文選擇性必修下冊
- 建筑材料分類整理
- YY/T 0801.2-2010醫(yī)用氣體管道系統(tǒng)終端第2部分:用于麻醉氣體凈化系統(tǒng)的終端
評論
0/150
提交評論