C語言版ATM銀行取款機系統(tǒng)源碼以及程序設計基礎實訓_第1頁
C語言版ATM銀行取款機系統(tǒng)源碼以及程序設計基礎實訓_第2頁
C語言版ATM銀行取款機系統(tǒng)源碼以及程序設計基礎實訓_第3頁
C語言版ATM銀行取款機系統(tǒng)源碼以及程序設計基礎實訓_第4頁
C語言版ATM銀行取款機系統(tǒng)源碼以及程序設計基礎實訓_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、長沙學院程序設計基礎實訓II實訓報告實 訓 題ATMfr取款系統(tǒng)的改進與完目:善系計算機科學與技術系部:專業(yè) /年軟件工程專業(yè)2011級 級:學生姓李安平名:班_學號22級:班指導教師姓 職稱名:最終評定成 2012年6月項目實訓任務書課程名稱:程序設計基礎實訓 II課程編碼: JX020158課程類別:專業(yè)基礎必修課學分數:2學時數:32開課學期: 2實訓題目:ATM#取款系統(tǒng)的改進與完善一、已知技術參數和設計要求:銀行ATM#取款系統(tǒng)業(yè)務描述如下:銀行ATM存取款系統(tǒng)能為用戶提供存款、取款、查詢、轉賬和修改密碼的功能。為 了模擬真實的ATM務環(huán)境,本系統(tǒng)必須實現存款、取款、查詢、轉賬、修改

2、密碼以及 開戶的功能。用戶通過開戶業(yè)務在本系統(tǒng)開立銀行賬戶,之后可以通過該銀行賬戶登陸ATM系統(tǒng),在系統(tǒng)中實現存款、取款、查詢賬戶信息、修改密碼的操作。本系統(tǒng)各個業(yè) 務有如下注意點:登陸系統(tǒng)用戶登陸之前,必須在登陸界面輸入其銀行賬戶,通過其正確輸入的銀行賬戶登陸系統(tǒng)。開戶業(yè)務要使用本系統(tǒng)必須首先執(zhí)行開戶業(yè)務開立新的銀行賬戶,并且將此新開的銀行存儲于文件當中。同時,系統(tǒng)以身份證號碼作為開戶的充分條件,即一個身份證號碼只能開立一次銀行賬戶。存款業(yè)務客戶登陸系統(tǒng)后,選擇存款業(yè)務,即可以將輸入的存款金額存入相應的賬戶。取款業(yè)務客戶登陸系統(tǒng)后, 選擇取款業(yè)務, 即可以將輸入的取款金額從相應的銀行賬戶取出

3、,但是取款金額必須大于目前的賬戶余額。查詢業(yè)務客戶登陸系統(tǒng)后,可以選擇查詢業(yè)務,查詢賬戶余額。轉賬業(yè)務客戶登陸系統(tǒng)后,可以選擇轉賬業(yè)務,進行轉賬。注意的是轉賬的目的賬戶必須是本系統(tǒng)已經存在的銀行賬戶。修改密碼客戶登陸系統(tǒng)后,可以選擇修改密碼業(yè)務,進行密碼修改。二、各階段具體要求:1、系統(tǒng)總體設計階段1)根據需求分析劃分功能模塊2)分析并設計各個功能模塊之間的關系3)對于各個功能模塊,設計相應的數據結構(必須使用鏈表完成全部功能)4) 設計相應的算法 (必須包括排序和檢索功能, 且基于鏈表進行排序和檢索)2、詳細設計階段1)對于每個功能模塊,應劃分成操作層和數據層2)對于每個操作層,應盡量考慮用

4、戶操作的簡單,便捷3)對于每個數據層,必須使用鏈表進行管理4)在用鏈表進行管理時,必須用到鏈表檢索和排序5)對于數據層的操作完的數據必須保存到文件中(包括文件讀、寫操作)3、編碼實現階段1)完成代碼編寫2) 要求代碼編寫規(guī)范 (不得使用全局變量、 所有功能模塊必須使用函數封裝主函數 main() 的行數不得超過代碼總長度的25%)3)代碼必須有相應的注釋(注釋行數不得少于代碼的10%,函數功能、變量名、算法、重要的循環(huán)、分支都必須用注釋說明)4、系統(tǒng)測試階段1)完成功能調試( 2)要求完成必要的測試工作5、交付實施階段( 1)提交可正常執(zhí)行的系統(tǒng),程序代碼(2)撰寫項目實訓報告書(3)要求按照

5、文檔書寫規(guī)范,嚴格地書寫文檔(4)注意:不允許使用代碼、圖片和表格填充報告空間。代碼、圖片和表格在 報告中的空間比重不得超過 1/3。要求使用文字清晰描述代碼思想和邏輯,文字描 述不得少于3000字(不包含注釋文字)。三、設計工作量:(1)軟件設計:嚴格按照具體設計要求,完成問題陳述中所提到的所有需求功 能。(未使用鏈表實現的、代碼少于 300行的不及格,未使用鏈表排序的成績不可 以為優(yōu))(2)設計報告:要求撰寫不少于 3000個文字的文檔,詳細說明各階段具體要求。四、工作計劃:安排16周時間進行實訓(每周2課時),軟件開發(fā)步驟如下,在第16周必須完成 所有任務,實訓與報告撰寫同步進行;序 號

6、實踐項目名 稱內容提要實踐時數實踐類型實踐要求每組人數1實訓項目1: 程序架構的描述1、數據與邏輯分離2、程序架構的描述4驗證必開12實訓項目2: 鏈表在工程中的 應用1、使用鏈表來構造 ATM機的后臺數據管理2、實現常見的鏈表 操作一一插入、刪除、修 改、遍歷以及創(chuàng)建鏈表8驗證必開13實訓項目3: 排序在項目中的 應用1、在使用鏈表的基 礎上引導學生完成23種 主要排序一一冒泡、選擇 和插入2、將這些算法結合 到學生的工程應用題中8驗證必開14實訓項目4: 查找在項目中的 應用1、在使用鏈表的基 礎上引導學生完成12種 主要查找一一如順序查 找4驗證必開12、將這些算法結合 到學生的工程應用

7、題中5實訓項目5: 結構在文件中的 應用1、討論不同結構的 設計技巧,考慮在同一項 目中使用自定義結構的 必要性2、考慮將復雜結構雙向鏈表、循環(huán)鏈表 作為解決問題的一種途 徑與手段4驗證必開16實訓項目6: 文件操作技巧1、加強學生對文件 操作的認識2、考慮將復雜結構 中的相關數據通過寫入 文件的方法作為長期記 錄保存的工具3、并將此作為改進 項目的手段4驗證必開1五、注意事項1)提交文檔課程實訓任務書(每學生1份)課程實訓報告(每學生1份)2)成績評定學生成績由指導老師負責考察評定,分為:優(yōu)、良、中、及格和不及格五檔。以下情況可以判斷成績?yōu)椴患案瘢篴、抄襲b、代碼量少于300行c、未使用鏈表

8、d、報告不符合規(guī)范以下情況不可以判斷成績?yōu)閮?yōu):a、未使用鏈表排序b、使用全局變量c、大量代碼集中在主函數main()中,而不是使用函數進行合理封裝d、功能不完善,有殘缺e、代碼缺乏必要的注釋f、缺課其他情況由指導老師綜合考慮給予成績評定主要考察知識點與要求:a、鏈表組織數據b、排序(基于鏈表)c、鏈表檢索d、文件保存和讀取數據e、函數封裝及調用f、代碼縮進和注釋等軟件工程原則基本要求g、文檔摘要銀行ATM取款機系統(tǒng)能為用戶提供存款、取款、查詢、轉賬與修改密碼的功能。在設計編寫銀行取款機系統(tǒng)時,明確需求以及操作流程,構造出取款機的基本框架及正確的操作流程。將取款機的任務需求分成若干個模塊進行編寫

9、。編寫主要運用鏈表建立完整的客戶信息,完成客戶所需的存款以及取款,修改密碼等多項功能。查詢信息需要對鏈表進行遍歷,逐一對信息進行核對比較,直到找到所需信息或找到鏈表尾部停止。鏈表能夠按所需分配內存空間,讓空間得到充分的利用,同時能夠短暫的保存信息,若需長期保存,需要文件的配合。文件能夠長久的保存信息。在銀行取款機系統(tǒng)中,先把鏈表中的信息存進文件中,然后在文件中將信息讀到鏈表中。能夠實現信息的多次利用。關鍵詞:ATM鏈表,文件摘 要第 1 章 需求分析 功能需求 性能需求 運行需求 第 2 章 系統(tǒng)設計 銀行開戶功能 銀行登錄功能 銀行取款功能 余額查詢功能 轉賬功能 修改密碼功能存款功能 卡號

10、查詢功能 姓名查詢功能余額查詢功能 刪除客戶功能 增加客戶功能 第 3 章 系統(tǒng)實現 卡號與密碼的驗證 從文件中讀取信息刪除功能的實現數據域邏輯的分離程序架構的描述鏈表的應用 鏈表排序 第 4章 測 試開戶功能測試登陸功能測試取款功能測試修改密碼功能測試多個客戶信息測試結 論錯誤 ! 未定義書簽。錯誤 ! 未定義書簽。錯誤 !未定義書簽。錯誤 !未定義書簽。錯誤 !未定義書簽。錯誤 ! 未定義書簽。錯誤 !未定義書簽。錯誤 !未定義書簽。錯誤 !未定義書簽。錯誤 !未定義書簽。錯誤 !未定義書簽。錯誤 !未定義書簽。錯誤 !未定義書簽。錯誤 !未定義書簽。錯誤 !未定義書簽。錯誤 !未定義書簽

11、。錯誤 !未定義書簽。錯誤 !未定義書簽。錯誤 ! 未定義書簽。錯誤 !未定義書簽。錯誤 !未定義書簽。錯誤 !未定義書簽。錯誤 !未定義書簽。錯誤 !未定義書簽。錯誤 !未定義書簽。錯誤 !未定義書簽。錯誤 ! 未定義書簽。錯誤 !未定義書簽。錯誤 !未定義書簽。錯誤 !未定義書簽。錯誤 !未定義書簽。錯誤 !未定義書簽。錯誤 ! 未定義書簽。附 錄 錯誤!未定義書簽。致 謝 錯誤!未定義書簽。第 1 章 需求分析功能需求先進行系統(tǒng)分析,將該系統(tǒng)劃分為登陸注冊模塊、鍵盤輸入輸出模塊、信息認證模塊、顯示模塊、數據存儲模塊。登陸注冊模塊主要包括新用戶的開戶以及老用戶的登陸功能。 鍵盤輸入輸出模塊

12、輸入客戶信息, 銀行卡號, 密碼, 存款取款的金額等相關信息,待系統(tǒng)處理后,輸出客戶的某項信息或提示客戶的操作信息。信息認證模塊主要是對客戶的卡號、密碼、以及客戶的輸入信息的規(guī)范進行判斷與認證。顯示模塊主要包括取款模塊、存款模塊、查詢余額模塊、轉賬模塊、修改密碼模塊。數據存儲模塊主要是將客戶信息存儲到文件中,需要時從文件中讀取數據到鏈表中,找到相關信息。性能需求性能的需求就是要求在數據上要有精確值, 以免因為數據上的馬虎而使得程序存在不確定的風險,在查詢過程中,要求顯示該客戶賬號上的所有金額,在客戶存取款的過程中,系統(tǒng)只支持交易金額為一百的倍數,并且交易的金額一次不能超過六百,當客戶的輸入的取

13、款金額比現有余額還大時,要提示客戶,余額不足,自動跳出系統(tǒng)。密碼的設置只能是六位數。在轉賬過程中支持任何輸入的數據,但轉賬只能在文件中已經存在的用之間進行轉賬。交易結束后賬戶余額要與保存的客戶信息越保持一致性,并且在運行時不能太過于繁瑣,盡量減少不必要的運行程序,盡量做到簡單而功能強大,運行速度快,執(zhí)行力強等特點。運行需求銀行取款機系統(tǒng)的界面要求簡潔、友好,且菜單操作簡單易懂。當客戶輸入的信息不符合要求時,要溫馨的提示客戶重新輸入,或者退出。如客戶輸入的密碼與開戶時所設密碼不相同,則提示客戶重新輸入密碼,若密碼連續(xù)輸入三次,則提示客戶三次密碼輸入錯誤,退出程序。這樣能讓客戶很清楚自己當前的操作

14、,以及操作后系統(tǒng)運行產生的結果,簡單方便,使用性強。第 2 章 系統(tǒng)設計銀行開戶功能新客戶使用銀行取款機系統(tǒng)時,必須先進行開戶??蛻粼谶M行開戶業(yè)務時,提示客戶輸入姓名,身份證號碼即新客戶的銀行卡號,并設定好銀行卡密碼。將客戶的信息寫入鏈表當中,并保存在文件中。新客戶的默認余額為元。當客戶注冊成功后,系統(tǒng)將自動保存客戶信息,然后顯示客戶的姓名,卡號,以及客戶的默認余額。以便客戶識記。銀行登錄功能客戶進入銀行取款機登錄界面時,按照指定的要求進行操作,當提示客戶輸入身份證號(卡號) ,當系統(tǒng)接收到客戶的輸入信息時,將文件中的信息輸到鏈表中,進行遍歷核對,當系統(tǒng)接收到客戶的輸入信息時,將文件中的信息輸

15、到鏈表中,進行遍歷核對,若客戶輸入的銀行卡號與注冊的卡號不相同,則提示客戶輸入有誤,讓客戶重新輸入。 三次輸入銀行卡號有誤, 系統(tǒng)將自動退出。 若輸入卡號正確, 則進入下一個流程。當提示客戶輸入銀行卡密碼,當系統(tǒng)接收到客戶的輸入信息時,將文件中的信息輸到鏈表中,進行遍歷核對,若客戶輸入的銀行卡密碼與注冊的銀行卡密碼不相同,則提示客戶輸入有誤,讓客戶重新輸入。銀行取款功能客戶進入銀行取款界面時,在銀行取款界面中顯示客戶可取金額數目項目,客戶按照指定金額對應的阿拉伯數字輸入即可。當客戶按照指定的要求輸入時,將對客戶輸入的金額與用戶里面的余額進行比較,若客戶輸入的金額大于現有余額,則提示客余額不足,

16、返回功能選擇界面。若客戶輸入的金額小于客戶原有余額,則按p-money-=i 的公式從客戶原有余額中減去當下所取金額,然后提示取款成功,并顯示客戶現有余額。余額查詢功能客戶在進入銀行查詢界面時,系統(tǒng)自動從鏈表中讀取與該客戶相匹配的余額。轉賬功能客戶進入銀行轉賬界面時,當系統(tǒng)提示客戶兩次輸入需要轉賬的卡號,若兩次輸入不相同,則返回選擇功能界面。若客戶兩次輸入相同,則從客戶原有余額中減去當下所取金額,然后提示轉賬成功,并顯示客戶現有余額。修改密碼功能客戶進入登錄界面時,系統(tǒng)自動提示客戶輸入銀行卡原密碼,當系統(tǒng)接收到客戶的輸入的信息時,遍歷鏈表中的信息與客戶輸入的密碼進行核對,若客戶輸入的銀行卡原密

17、碼與注冊的銀行卡密碼不相同, 則提示客戶輸入有誤, 系統(tǒng)將自動返回功能選擇界面。若輸入密碼正確,提示客戶輸入新密碼,并保存好客戶修改的新密碼。下次登錄只能用新密碼才能成功登錄。存款功能客戶進入銀行存款界面時,系統(tǒng)會從鏈表中找出該客戶的余額顯示出來,在銀行存款界面中顯示客戶可取金額數目項目,客戶按照指定金額對應的阿拉伯數字輸入即可。系統(tǒng)將在客戶原有余額中加上當下所存金額,然后提示存款成功,并顯示客戶現有余額??ㄌ柌樵児δ茉诳蛻粜畔⒉樵兘缑嬷校軌驅⒌乃锌蛻舻男畔凑湛ㄌ栠M行查詢,當操作人員輸入需要查找的客戶的卡號,當找到鏈表中的卡號與輸入的客戶的卡號相同時,則顯示出客戶的信息,包括客戶的姓

18、名,卡號,以及余額。若沒有找到與之相同的客戶卡號,則提示沒有該用戶,返回功能界面,重新選擇。操作者完成客戶信息查詢后,顯示該客戶的姓名、卡號、以及余額。姓名查詢功能在客戶信息查詢界面中,能夠對建立的所有客戶的信息按照姓名進行查詢,當操作人員輸入需要查找的客戶的姓名,當找到鏈表中的客戶姓名與輸入的客戶的姓名相同時,則顯示出客戶的信息,包括客戶的姓名,卡號,以及余額。若沒有找到與之相同的客戶姓名, 則提示沒有該用戶, 返回功能界面, 重新選擇。 操作者完成客戶信息查詢后,顯示該客戶的姓名、卡號、以及余額。余額查詢功能在客戶信息查詢界面中,能夠對建立的所有客戶的信息按照余額進行查詢,當操作人員輸入需

19、要查找的客戶的余額,若找到鏈表中的客戶余額與輸入的客戶的余額相同,則顯示出客戶的信息,包括客戶的姓名,卡號,以及余額。若沒有找到與之相同的客戶余額,則提示沒有該用戶,返回功能界面,重新選擇。操作者完成客戶信息查詢后,顯示該客戶的姓名、卡號、以及余額。刪除客戶功能在已經建立起了鏈表的前提下,后臺操作者可以對客戶的信息進行刪減,當操作人員輸入需要刪除的客戶的卡號,當找到鏈表中的客戶卡號與輸入的客戶的卡號相同時,將該客戶信息賦給一工作指針,用另一操作指針指向該用戶后一客戶,則刪除該用戶的信息。 若沒有找到與之相同的客戶卡號, 則提示沒有該用戶, 返回功能界面, 重新選擇。增加客戶功能后臺操作者可以增

20、加客戶的信息, 操作者按要求輸入客戶的姓名、 卡號、 余額即可。系統(tǒng)將操作人員輸入的信息寫入鏈表中。傳入頭指針,并以頭插法的形式寫入即可。第 3 章 系統(tǒng)實現卡號與密碼的驗證密碼是當客戶登陸銀行取款機系統(tǒng)時,系統(tǒng)對顧客的身份進行驗證的一種方式。當用戶的密碼完全與注冊時的密碼相同時,則可以進入該系統(tǒng),但如何對客戶的密碼進行驗證,就需要對其原理及其運行方式做詳細的解說,客戶進入登陸界面后,將鏈表的頭指針 head 傳給該函數, char mima6 為客戶輸入卡號的變量, Char d20 為客戶輸入卡號的變量。當接收到客戶輸入的卡號與密碼時,要對客戶的卡號與密碼進行驗證,則得對鏈表進行一次遍歷,

21、將工作指針指向頭指針,從頭結點開始尋找,逐一與客戶輸入的卡號進行核對,如果第一個節(jié)點沒有所需信息,則讓工作指針指向下一個節(jié)點,當工作指針p指向NULL!寸還未找到該用戶時,則說明沒有該用戶,若找到該客戶的卡號, 提示該客戶輸入密碼,并對客戶的密碼進行核對,若與鏈表中的密碼不同,則提示客戶密碼輸入錯誤,請重新輸入,若完全相同,則提示客戶登陸成功,進入菜單選擇界面。下面是驗證密碼的相關程序: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);從文件中讀取信息運用文件,將運用鏈表建立的銀行取款機系統(tǒng)進行優(yōu)化。當運用文件對鏈表建立的數據, 以寫的方式將所有信息寫入文件夾中進行持久保存, 當需要查找某客戶的信息時,又以讀的形式將信息從文件中讀出來。這樣,當第一次操作全部結束后,再登錄銀行取款機系統(tǒng)時,將文件中存有的數據以讀的方式讀出來,又可以進行連續(xù)的操作,這樣數據能夠多次利用,方便實用。如何

23、將文件中的信息讀入鏈表中,又是我們需要探討的問題。需要我們仔細的分析。首先定義兩個工作指針,然后以讀的方式打開一個二進制的文件,如果文件指針指向NULL則提示“不能打開文件”,如果能夠打開,那么進行下一讀取數據,讀取數據到鏈表時,必須申請空間來接受信息,當成功申請到空間后,將工作指針 p 指向頭指針 head, 以便從第一個節(jié)點開始讀取數據, 運用一個循環(huán)來讀取文件中的數據,直到獨到文件尾結束。在循環(huán)過程中,如果沒有讀到數據,則跳出循環(huán),如果讀到了數據,那么運用 p-next 開辟另外一個空間用來接收下一個節(jié)點的信息,然后運用工作指針 q 保存當前節(jié)點的指針,作為下一個節(jié)點的前驅,然后讓工作指

24、針p 指向下一個節(jié)點新都如數據鏈到當前表尾, 直到最后一個節(jié)點的后繼指針為空。 讀取完畢。下面是驗證密碼的相關程序: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);刪除功能的實現在鏈表中刪除某個節(jié)點時,若是第一個客戶時,

25、運用頭指針指向該節(jié)點下一個節(jié)點的地址,這樣就把第一個節(jié)點刪除了。如果不是頭節(jié)點,用一個工作指針指向該節(jié)點,用另一工作指針指向該接點的下一節(jié)點的地址,這樣就把指定要刪節(jié)點刪除了。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;數據域邏輯的分離在制作銀行取款機系統(tǒng)時,首先不處理程序的有

26、關數據,比如說不核對客戶銀行卡卡號與密碼即可進入功能選擇界面,不處理取款時余額是否不足,客戶的輸入有誤等這些問題,而是將銀行取款機系統(tǒng)中的各個功能的函數基本框架構建好,這樣銀行取款機系統(tǒng)中邏輯這一塊就不受數據方面的約束而顯得非常清晰了。程序架構的描述在構建的取款機系統(tǒng)的函數中包括注冊函數、登錄函數、取款函數、查詢函數、轉賬函數、 存款函數、 修改密碼函數、 退出函數。 每構件一個函數時, 先在主函數中調用,能夠成功編譯運行時再寫別的函數,然后逐一進行調用,編譯運行無誤即可。然后根據到那個模塊就調用相應的功能函數,在運行時都有相應的功能界面即可,這樣銀行取款機系統(tǒng)的基本框架就已經成型了。鏈表的應

27、用運用鏈表建立銀行ATMt臺管理系統(tǒng)。在銀行ATMt臺管理系統(tǒng)中,可以建立若干 個客戶信息,直到連續(xù)輸入三個零則停止客戶信息的建立。在后臺中,可以運用卡號、姓名、以及余額進行客戶信息查詢。并且可以對客戶的信息進行插入、刪除等功能。在后臺鏈表操作中。能夠建立若干個客戶的信息,同時也可以對所有的客戶信息遍歷,進行輸出,同時可以對所有的客戶信息按余額的降序排序進行輸出。在已經建立好了客戶信息的前提下,能夠對客戶的信息進行刪減,同時也能夠增加客戶的信息。同時能夠按客戶的卡號、姓名、以及余額,對客戶的信息進行查詢。鏈表排序鏈表排序,包括冒泡排序,選擇排序,以及插入排序。運用鏈表排序與運用數組進行排序的思

28、想很類似。比如說冒泡排序,冒泡排序同樣是對所有數據進行逐一的比較。然后將大的數據保存到下面去,直到一輪比較結束,然后再進行第二輪比較。直到所有的比較完成。將鏈表排序運用于銀行ATMt臺客戶信息輸出系統(tǒng)中,已經建立好若干個客戶信息,當需要讓客戶的信息按照余額的降序進行排列輸出時,則鏈表的排序則體現出了它的功能。讓客戶的信息以余額的降序一一排列輸出。但在實際運用時又遇到了麻煩,交換的是某項的值,而不是地址,這個讓我很頭疼,但我會繼續(xù)努力,將其弄懂弄透。做到得心應手。第4章 測 試開戶功能測試當客戶注冊成功時,出現如圖所示的界面。圖 開戶界面示意圖登陸功能測試當客戶卡號與密碼核對無誤,登陸成功時,出

29、現如圖所示的界面。圖 登錄界面示意圖取款功能測試當客戶取款成功時,出現如圖所示的界面圖 取款界面示意圖修改密碼功能測試當客戶密碼修改成功時,出現如圖所示的界面。圖 修改密碼界面示意圖多個客戶信息測試當管理員按要求輸入多個客戶信息時,出現如圖所示的界面。圖 建立客戶信息示意圖結論在ATM#取款系統(tǒng)的改進與完善的過程中,讓我學到了許多的知識,有了更多新的感受。在改進取款機系統(tǒng)時,讓我增強了挑戰(zhàn)困難的勇氣。上學期對鏈表與文件有著強烈的恐懼心理,感覺那是一道不可逾越的高山。但通過老師的一步步的引導,讓我們慢慢向高山靠近,然后試著去攀登。經過若干次的嘗試,慢慢體會到了其中的樂趣,同時也就增加了自己繼續(xù)攀

30、登的信心。ATM的制作過程中,常常會遇到一系列的問題,比如說如何傳遞指針,這個問題一直是我難以理解的知識,總感覺很抽象的,為什么它就能很準確的將頭指針傳過來。剛開始就是運用全局指針進行操作,這樣理解起來就比較容易了,但是全局變量有著很大的缺陷,那就是一旦全局變量發(fā)生變化,其他的函數都將發(fā)生一系列的變化, 那種變化是很難預知的, 輕則運行出錯, 重則系統(tǒng)癱瘓, 無法運行。后來懷著對該問題的深思,向同學詢問,并去圖書館查閱資料,慢慢對鏈表傳參有了一定的了解。通過多次的嘗試,對其的理解程度又有了新的提高。在制作的過程中,我不僅學到的是一些直觀實用的應用知識,更學到了許多設計思想。以前寫程序,拿到就一

31、股腦的寫,沒有去對其需求進行分析。同時程序很零亂,可讀性不高,并且程序復雜但功能繁瑣。若哪一環(huán)節(jié)出現錯誤時,很難調試。但通過這一學期的學習,讓我在程序的設計思想這一塊又有了更深層次的了解。比如說ATM勺制作過程, 首先不急于編寫程序, 而是詳細了解需求關系, 弄清楚操作流程, 構建整體框架,將取款機系統(tǒng)的功能分成若干個小模塊。這樣在功能的設計方面就不至于盲目去嘗試,這樣費時又費力。但一一分割后,就只需對各個功能進行針對性的設計與分析,這樣就目的性很強,容易測試與修改。然后在構建好的框架中以鏈表為工具進行編寫,最后加上文件,保存客戶信息,以備多次利用。完善ATM勺功能。參考文獻1譚浩強.C程序設

32、計(第三版).北京:清華大學出版社,2005, 330-348.2高濤,陸麗娜.C語言程序設計.西安:西安交通大學出版社,: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;定義結構體 */定義另一結構體 */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();各個函數的聲明 */* 主函數 */ n);break;/* 開戶函數 */void kaihu(struct per *head) head=NULL; TOC o 1-5 h z FILE *fp; /* 定義文件指針*/為定義鏈表指針*/開辟內存單元*/將數

35、據輸入鏈表中 */struct per *p1=NULL,*p2=NULL;/*p1,p1p1=(struct per*)malloc(sizeof(struct per);/*printf( 請輸入您的姓名 :n);/*scanf(%s,p1-name );printf( 請設置您的卡號:n);scanf(%s,p1-ID);printf( 請設置您銀行卡密碼:n);scanf(%s,p1-mima);p1-money=0;p1-next =NULL;printf( 您的個人信息為 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/*為新增客戶開辟內存單元*/進行頭插法,將其作為第一個節(jié)點 */為新增客戶開辟內存單元 */進行尾插 */打開文件 */ 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);/* 登陸函數 */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);/*定義文件指針 */打開一個二進制文件,為讀方式

38、*/如不能打開,則結束程序*/p=(struct per*)malloc(sizeof(struct per); head=p;/*申請空間*/while(!feof(fp)/*循環(huán)讀數據直到文件尾結束*/if(1!=fread(p,sizeof(struct per),1,fp)*/驅*/break;/*p-next=(struct per *)malloc(sizeof(struct per);/*q=p;/*如果沒讀到數據,跳出循環(huán)*/為下一個結點申請空間保存當前結點的指針, 作為下一結點的前p=p-next; q-next=NULL; fclose(fp);/*/*指針后移, 新讀入數

39、據鏈到當前表尾*/最后一個結點的后繼指針為空*/printf( printf(printf( for(j=1;jnext)/*遍歷鏈表 */if(strcmp(q-mima,mima)!=0)/*printf( 密碼不正確,請重新輸入密碼n);您輸入密碼三次錯誤,謝謝光臨 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) */限制密碼輸入的次數的循環(huán)核對密碼 */若密碼不對,跳出循環(huán)*/調用菜單函數*/system(cls);exit(0); printf(nnn 您輸入的卡號有誤,請重試 n);system(pause);system(cls);printf( 您的卡號三次輸入錯誤,謝謝使用 );exit(0);/* 銀行菜單函數*/ void caidan(struct per *head) head=NULL;int i;while(1)printf( 請選擇您需要的業(yè)務n);printf(”*為客戶選擇輸入的變量*/銀行業(yè)務菜單*/*i

41、/*查詢*n);修改密碼 *n);退出*n);/*/*/*/*/*/*n);printf(* 1取款 *2printf(”*n);printf(* 3轉賬 *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;調用銀行取款函數 */調用銀行查詢函數*/調用銀行轉賬函數 */調用銀行修改密碼函數 */調用銀行存款函數*/調用銀行退出函數*/else printf( 您的輸入有誤 n);system(pause);system(cls);/* 銀行取款函數函數*/void qukuan(struct per *head)head=NULL;*/int i;FILE *fp;struct per *p,*q=NU

43、LL;if(fp=fopen(,rb+)=NULL)/*head/*/*為鏈表頭指針定義文件指針 */打開一個二進制文件,為讀方式*/如不能打開,則結束程序 */申請空間 */循環(huán)讀數據直到文件尾結束*/如果沒讀到數據,跳出循環(huá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);/*限制輸入范圍 */對應選項乘以一百為取款金額*/調用取款機菜單函數

46、 */對金額進行處理*/打開文件 */將修改的信息重新寫入文關閉文件 */* 銀行轉賬函數*/void zhuangzhang(struct per *head)head=NULL;FILE *fp;/*定義文件指針 */打開一個二進制文件,為讀方式*/*如不能打開,則結束程序 */申請空間 */循環(huán)讀數據直到文件尾結束*/如果沒讀到數據,跳出循環(huá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;/*驅*/p=p-next;/*q-next=NULL;/*fclose(fp); int i,j,k; printf( 請輸入轉賬號碼n);scanf(%d,&

48、i);printf( 請再次輸入轉賬號碼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( 請輸入轉賬金額n);scanf(%d,&k);if(k6|kq-money )/*printf( 對不起,您的余額不足 n);system(paus

49、e);system(cls);caidan(head);elseprintf(您已成功轉賬譏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);對余額進行判斷*/將新數據重新寫入文件中/* 銀行查詢函數*/void chaxun(struct per *head) head=NULL;

50、/*FILE *fp;/*struct per *p,*q=NULL;鏈表頭指針*/定義文件指針 */打開一個二進制文件,為讀方式*/如不能打開,則結束程序*/申請空間 */循環(huán)讀數據直到文件尾結束*/如果沒讀到數據,跳出循環(huá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;/*保存當前結點的指針,作為下一結點的前驅*/p=p-next;/*指針后移, 新讀入數據鏈到當前表尾*/q-next=NULL;/*最后一個結點的后繼指針為空*/fclose(fp); printf( 您卡上原有余額為d元nn,q-money);system(pause);system(cls); TOC o 1-5 h z /* 銀行修改密碼函數*/ 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;/*鏈表頭指針*/定義文件指針 */打開一個二進制文件,為讀方式*/*如不能打開,則結束程序 */* 申請空間 */循環(huán)讀數據直到文件尾結束*/如果沒讀到數據,跳出循環(huán)*/為下一個結點申請空間保存當前結點的指針,作為下一結點的指針后移, 新讀入數據鏈到

53、當前表尾最后一個結點的后繼指針為空*/核對密碼 */文件頭指針*/將修改的密碼重新寫入文*/p-next=(struct per *)malloc(sizeof(struct per);/*/ TOC o 1-5 h z q=p;/*前驅 */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;/* 銀行存款函數*/ 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)/*鏈表頭指針 */定義文件指針 */打開一個二進制文件,為讀方式*/*如不能打開,則結束程序 */* 申請空間 */循環(huán)讀數據直到文件尾結束*/如果沒讀到數據,跳出循環(huán)*/為下一個結點申請空間保存當前結點的指針, 作為下一結點的前指針后移, 新讀入數據鏈到當前表尾*/最后一個結點的后繼指針為空*/if(1!=fread(p,sizeof(struct per),1,

56、fp) break;/* p-next=(struct per *)malloc(sizeof(struct per);/*/q=p;/*驅*/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);/* 退出銀行函數*/void tuichu()printf( 謝謝使用 n);exit(0);/* 后臺運行菜單函數*/ v

58、oid menu()/ 菜單顯示函數printf(*歡迎來到建設銀行取款機系統(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è)務nn);/* 后臺運行創(chuàng)建鏈表函數*/void chuan

59、gjian(struct person *Phead) /*(*Phead) 為指向結構體指針的地 址 */struct person *p,*t;/*定義操作指針 */char n20;char a20;int s;if(*Phead) *Phead=NULL;printf(請輸入卡號姓名金額 (若要結束請輸入三個為零) n); TOC o 1-5 h z printf(請輸入卡號n);scanf(%s,n);printf( 請輸入姓名 n);/ 輸入信息scanf(%s,a);printf( 請輸入預存金額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( 請輸入預存金額n);scanf(%d,&s);while(s)將 P 的值賦給 t,p 又可以存儲下為新節(jié)點開辟新的內存*/t=p;/*一個節(jié)點 */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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論