軟件工程 ATM柜員機系統(tǒng) 課程設計
《軟件工程 ATM柜員機系統(tǒng) 課程設計》由會員分享,可在線閱讀,更多相關《軟件工程 ATM柜員機系統(tǒng) 課程設計(42頁珍藏版)》請在裝配圖網上搜索。
1、編號: 時間:2021年x月x日 書山有路勤為徑,學海無涯苦作舟 頁碼:第42頁 共42頁 軟件工程課程設計 題 目: ATM柜員機系統(tǒng) 學 院: 信息科學與工程學院 專 業(yè): 計算機科學與技術 學 號: 班 級: 學生姓名: 一 可行性研究 1編寫目的 1.1 目的 這份可行性研究報告是對ATM柜員機的可行性研究分析及指出存在的必要性。 1.2 預期的讀者 軟件管理人員、開發(fā)人員、維護人員、顧客用戶。 2 問題定義 2.1 ATM柜員機介紹 A
2、TM柜員機使用與ATM機相似的圖形用戶界面,當用戶在登錄界面輸入給定的卡號和密碼時,系統(tǒng)能登錄ATM柜員機系統(tǒng),通過數據鏈接操作來達到獨立的客戶與機器交互從而進行取款、存款、轉賬、查詢余額、修改密碼等業(yè)務辦理的目的。 2.2 基本目標 ATM柜員機主要是由各個實體窗口組成,它是由登錄頁面、選擇服務、存款、取款、查詢余額、修改密碼以及查看交易記錄等功能。它的各種按鈕的事件和功能可以簡單的模擬ATM柜員機的要求,讓用戶在電腦上可以輕松體驗ATM取款機的使用流程,以達到易學易用的效果,避免用戶在真實的ATM機上出現失誤,帶來不必要的損失。 2.3 經濟目標 由于本軟件的主要背景(為課程設計
3、)在經濟上不注重直接的經濟收益,而是注重小組成員整體水平的提高。 3 可行性研究的方法及評價度 3.1 可行性研究所采用的方法 根據調查,本小組成員多數有JAVA編程經驗,也具備MY SQL的使用經驗,因而開發(fā)此系統(tǒng)采用JAVA結合MY SQL的數據庫系統(tǒng)開發(fā)。 3.2 評價尺度 此軟件暫時只是一個初級產品,實現的功能也只能完成初步的工作。 4 工作產品 4.1 設計目標 為了減少銀行的業(yè)務處理壓力,盡量節(jié)省人們取錢所花費的時間和價值;并且盡可能的防止一些非法的業(yè)務操作,同時它的使用可以有效解決用戶信息和資金信息的繁雜問題。 4.2 設計及約束條件 a. A
4、TM面向客戶十分廣泛,所以界面設計要力求簡單明了,只要認識漢字并具備實際行動能力的人,就可以順利進行操作,對于用戶輸入的數據,系統(tǒng)能進行嚴格的數據檢驗,盡可能的排除人為地錯誤。 b. 開發(fā)人員應具備相應的開發(fā)能力,懂C++ 與java編程,小組成員能夠根據計劃的要求,按時完成系統(tǒng)的每一部分,保證后面的開發(fā)進程可以順利進行。但根據現有條件和知識,我們還得在技術方面進行學習和提高。 4.3 工作原理 a. 先建立數據庫且追建數據庫的驅動程序。 b. 在使用時,分為后臺管理和前臺操作。 c. 用戶輸入賬戶基本信息進行登錄,然后方能進行下一步操作 。 4.4 系統(tǒng)流程圖 4.5
5、 數據流圖 4.6 數據詞典 數據字典是關于數據的信息的集合,也就是對數據中包含的所有元素的定義的集合,它為軟件開發(fā)人員提供數據庫設計的參考,并為用戶了解系統(tǒng)時作為一個必有工具。 (1)數據項定義 名字:用戶 別名: 描述:銀行賬戶的持有者 定義:用戶=賬戶+姓名+證件號碼+存款余額 位置:全部由賬戶持有者所擁有 名字:信息 別名: 描述:銀行系統(tǒng)用來鑒別是否有權來支配該賬戶存款余額的憑證 定義:信息=賬戶+密碼 位置:輸入到ATM (2)操作說明 輸入賬戶信息,就可以登陸并在ATM上進行一系列操作 選擇交易類型,就可以進行相應操作 輸入轉賬賬號,就可
6、以進行轉賬操作 選擇對應金額,就可以取得相應數量的現金 選擇余額查詢,直接顯示對應賬號余額 4.7 產品的功能 登錄ATM柜員機系統(tǒng),通過數據鏈接操作來達到獨立的客戶與機器交互從而進行取款、存款、轉賬、查詢余額、修改密碼、查看交易記錄等業(yè)務的目的。 4.8 技術可行性。 根據小組成員擁有良好的JAVA編程能力及擁有MY SQL的使用經驗,再根據上述分析情況,利用現有人力和物力是具備開發(fā)此系統(tǒng)能力的。對于用戶來說,此系統(tǒng)簡單、大方、美觀、易懂,顧客操作根據系統(tǒng)提示,容易完成。 5 可選方案 鑒于系統(tǒng)必須具有高安全性,在數據庫使用上都要求具有完善的管理功能且日后數據庫升級方便,
7、 因而本次使用主要根據數據庫的易用性及易升級性提供兩種方案。 a. 采用Oracle數據庫設計,這一數據庫系統(tǒng)現在已成為主流的數據庫管理系統(tǒng),且易操作,易升級,因此提出這一方案。 b. 采用MY SQL的數據庫管理系統(tǒng)實現。 根據小組成員的技術,目前尚只有具備使用MY SQL數據環(huán)境開發(fā)的能力,且當前校園大多使用MY SQL作為數據庫管理系統(tǒng),因而第二種方案作為本次系統(tǒng)開發(fā)的方案。 6 經濟的可行性 6.1 市場分析 按本軟件開發(fā)方案,對于本系統(tǒng)軟件投資方向,體現于軟件開發(fā)、軟件生產及軟件測試。 6.2 投資估計 本系統(tǒng)完全按開發(fā)計劃進行估算,估計上網,打印需一些費
8、用。本系統(tǒng)大約總體耗費主要為時間,精力。本系統(tǒng)本非收益性質開發(fā),重要是為解決用戶的需要。 7 社會因素方面的可行性 7.1 技術 由于用戶辦理銀行業(yè)務時,比較擁擠,而且需要花費大量的時間,為了減少銀行的業(yè)務處理壓力,盡量節(jié)省人們的時間,并且可以有效解決用戶信息和資金信息的繁雜問題。 7.2 使用方面的可行性 此系統(tǒng)給銀行和用戶都帶來了利益,同時出售此系統(tǒng)的技術員也獲得利潤,相當于定期收取租金。有利于社會經濟的發(fā)展。 8 產品可檢測性 8.1 檢測標準 軟件標準:軟件規(guī)模、復雜程度、安全性、可操作性、可觀察性、可控制性、冗余的大小。 8.2 檢測的方法 通過軟件
9、測試: 黑盒測試法:主要在軟件界面上進行的測試。 白盒測試法:在重要邏輯路徑進行測試,檢測重要數據結構的有效性。 9 產品的可生產性 正確性:程序是否按程序流程圖及數據字典完成程度。 可靠性:安全運行時間越長越好。 可用性:是否能夠解決實際的存在問題。 完整性:對未授權的人員訪問此系統(tǒng)軟件可控性強。 靈活性:修改一個程序的工作量。 10 可行性綜合分析 本工程產品開發(fā)周期為2月。 要求所有數據信息的儲存都由數據庫來完成。時間十分寬裕,對我們工程的進行非常有利。 11 可行性結論 綜上所述,本工程的技術成熟、完備,測試手段可靠,具有良好的市場拓展,因此
10、本工程可立即開始。 二 需求分析 1 項目背景 在市場經濟的蓬勃發(fā)展和人們日益繁忙的條件下,ATM應運而生,它可以減少銀行的業(yè)務處理壓力,盡量節(jié)省人們的時間,并且可以有效解決用戶信息和資金信息的繁雜問題。 2 任務概述 2.1 目標 本系統(tǒng)在設計上,盡可能使流程清晰,操作靈活。實現上應該具有如下功能: 1.采用人機對話的方式,界面美觀友好。 2.為用戶提供方便,快捷的業(yè)務辦理功能。 3.對用戶輸入的數據進行檢查,盡可能排除人為的錯誤。 4.用戶可以隨時查看自己的交易記錄。 8.系統(tǒng)運行穩(wěn)定,數據存儲安全可靠。 2.2 運行環(huán)境 CPU Pentium4 1.
11、8G以上 內存 512MB以上 硬盤空間 500MB以上 操作系統(tǒng) Windows XP或Windows 7 數據庫 MY SQL 開發(fā)環(huán)境 NetBeans+JDK2.1 瀏覽器 IE6.0以上 服務器 2.3 條件和限制 2.3.1性能描述 實時性好、靈活性強、易于不同年齡階段的人操作。 2.3.2界面要求 以Windows窗口形式顯示,標題欄為ATM柜員機名稱,右上角有最小化按鈕、關閉按鈕,不同的窗口中有不同的按鈕和選擇菜單。 2.3.3輸入: 輸入內容:賬號,儲戶密碼,取款額,轉賬卡號,轉賬金額 儲戶密碼:六位整數; 存款額:50
12、元的倍數; 取款額,轉賬額:100元的倍數; 轉賬卡號:18位整數; 輸入設備:數字鍵盤 輸出內容:余額,輸入密碼提示,業(yè)務選擇提示,取卡提示,交易記錄 設備:顯示器; 介質:計算機 3數據庫描述 數據庫是數據管理的最新技術,是計算機科學的重要分支。十年來,數據庫管理系統(tǒng)已從專用的應用程序包發(fā)展成為通用系統(tǒng)軟件。 由于數據庫具有數據結構化、最低冗余度、較高的程序與數據獨立性、易于擴充、易于編制應用程序等優(yōu)點,較大的信息系統(tǒng)都是建立在數據庫設計之上的。 由于用到的數據表格多,另外考慮到實際情況,商品信息的更新,還有會員資料的變化,我們選用MY SQL作為數據庫開發(fā),
13、而不用Access,主要是因為 Access 存放的記錄,在實際運用中不適合此系統(tǒng);而MY SQL是一種常用的關系數據庫,能存放和讀取大量的數據,管理眾多并發(fā)的用戶,故選用MY SQL數據庫。 4 所用技術描述 NetBeans 由Sun公司在2000年創(chuàng)立,它是開放源運動以及開發(fā)人員和客戶社區(qū)的家園,旨在構建世界級的Java IDE。NetBeans當前可以在Solaris、Windows、Linux和Macintosh OS X平臺上進行開發(fā),并在SPL(Sun公用許可)范圍內使用。 已經獲得業(yè)界廣泛認可,并支持NetBeans擴展IDE模塊目錄中大約100多個模塊。NetBeans
14、是一個全功能的開放源碼Java IDE,可以幫助開發(fā)人員編寫、編譯、調試和部署Java應用,并將版本控制和XML編輯融入其眾多功能之中。NetBeans 可支持Java 2平臺標準版(J2SE)應用的創(chuàng)建、采用JSP和Servlet的2層Web應用的創(chuàng)建,以及用于2層Web應用的API及軟件的核心組的創(chuàng)建。此外,NetBeans 最新牒還預裝了兩個Web服務器,即Tomcat和GlassFish,從而免除了繁瑣的配置和安裝過程。所有這些都為Java開發(fā)人員創(chuàng)造了一個可擴展的開放源多平臺的Java IDE,以支持他們在各自所選擇的環(huán)境中從事開發(fā)工作,如Solaris、Linux、Windows或
15、Macintosh。 5 功能需求 5.1 功能模塊圖 5.2 系統(tǒng)模塊結構圖 6 性能需求 本ATM柜員機的主要功能如下所述: 要求使用圖形用戶界面。當輸入給定的卡號和密碼時,系統(tǒng)能登錄ATM柜員機系統(tǒng),用戶可以按照以下規(guī)則進行: A、查詢余額:初始余額為10000元; B、ATM取款:取款不能出現負數,每次取款金額為100的倍數,總額不超過5000元,支取金額不允許透支(若能夠提供與ATM機一樣的取款模式就更好); C、ATM存款:不能出現負存款,每次存款金額為50的倍數;一次存款不能超過10000元; D、修改密碼:新密碼長度為6位,不允許出現6位完全
16、相同的情況,只有舊密碼正確,新密碼符合要求,且兩次輸入相同的情況下才可以成功修改密碼。 E、查看交易記錄:根據用戶輸入的查詢起止時間,查詢該時間段的存取款交易記錄。 7 數據描述 8 靜態(tài)數據描述 用戶: Username 用戶名 Tel 電話 賬戶 Usernumber 賬號 Password 密碼 9動態(tài)數據分析 鼠標對按鈕的點擊 受限操作所需的密碼; 輸出數據: 查詢余額的信息; 查詢記錄信息; 密碼修改成功; 信息錄入、刪改結果(成功或失敗); 10系統(tǒng)IPO圖 IPO圖是輸入輸出圖,IPO是指結構化設計中變換
17、型結構的輸入(Input)、加工(Processing)、輸出(Output)。IPO圖是對每個模塊進行詳細設計的工具,它是輸入加工輸出(INPUT PROCESS OUTPUT)圖的簡稱,在此可以簡略的描述系統(tǒng)的主要算法。 反饋處理結果 相應操作處理 用戶信息輸入 輸入 處理 輸出 三 概要設計 1 需求規(guī)定 真正的ATM針對的用戶是廣大消費者,但本系統(tǒng)設計相對簡單,數據庫資料也比較少,所以在應用上有一定的限制。但總體來說可以實現ATM的基本
18、功能。 2 運行環(huán)境 硬件平臺: CPU:Pentium 4 1.8GHz 內存:521MB以上 軟件平臺: 操作系統(tǒng):Windows XP或Windows 7 數據庫:MY SQL 開發(fā)工具:JDK 2.1、NetBeans 服務器: 瀏覽器:IE 6.0及以上版本,推薦使用IE 8.0 3 系統(tǒng)結構 系統(tǒng)結構根據需求規(guī)定大致分為了以下幾個模塊。 3.1總體層次結構圖: 3.2業(yè)務流程圖 登錄界面 (卡號、密碼、取消等選項) 待機界面 (按任意鍵進入登錄界面) 密碼錯誤, 請重新輸入! 選擇界面
19、 查看記錄 存款 修改密碼 轉帳 取款 查詢余額 交易完成界面 取卡界面 4 人工處理過程 該系統(tǒng)剛建立時,由于數據庫的資料比較少,所以數據庫管理員要輸入大量的資料信息,逐條輸入到數據庫表中,這是一個比較繁瑣的工程,需要花費大量的人力物力。同時還有對數據庫的維護,都需要專業(yè)人士處理。 5 尚未解決的問題 由于本系統(tǒng)屬于小組
20、業(yè)余制作的,所以無論在功能還是數據資料方面都遠遠不能同網絡上的那些大型軟件媲美,所以在以后的時間里我們會繼續(xù)不斷完善其功能。 6 接口設計 6.1 用戶接口 使用基于基本的用戶界面,無論是前臺的用戶還是后臺的相關操作都可以通過鼠標點擊完成操作,編輯框用于用戶輸入。 6.2 外部接口 按Windows應用軟件用戶界面的規(guī)范來設計,使用以普通頁面為主的用戶界面,簡單易懂,方便用戶操作。 1)登陸頁面模塊設計 與ATM柜員機打交道比較多的,也是大家對安全比較關心的問題:密碼。所以第一個界面就是要輸入密碼和卡號才能繼續(xù)服務。 2)主界面 主界面共有取款、存款、轉賬、查詢余額、修改
21、密碼和查看交易記錄的6項功能,用戶登陸后出現此界面,可以由用戶根據自己的需要選擇相應的功能。3)新品上市頁面:顧名思義,該模塊是一些新上架的商品。 3)修改密碼 在修改密碼模塊中,首先你必須要輸入你的舊密碼是否正確,否則就會報錯。再一個就是要兩次輸入你的新密碼,且兩次藥匹配,否則也會報錯,然后再重新回到修改密碼的界面 4)余額查詢 需要通過用戶所使用的賬戶及密碼來進行余額的查詢,因為先前進行過登陸,所以這里不用再登陸,直接點擊查詢余額即可顯示賬戶的實際余額。。 5)取款 該模塊是一個相對比較重要的模塊,因為ATM機就要的功能就是取款業(yè)務,因此在算法以及界面設計上花的功夫也是最多的,
22、要根據功能需要中的要求做到用戶順利地取款,用戶選擇取款金額,然后點擊確定進行取款操作,數字按鈕的個數設計比較大,方便用戶操作。 6)轉賬 該模塊中,只需要輸入對方的賬戶號碼以及轉賬金額就可以了,為了防止用戶出錯,我們還設計了密碼確認這一項。 7)記錄查詢 可以按輸入的日期進行交易記錄的相關查詢。 6.3 內部接口 本系統(tǒng)使用MY SQL數據庫驅動程序及接口。 7 運行設計 7.1 運行模塊組合 本系統(tǒng)無論是前臺模塊還是后臺模塊,在程序打開后,用戶單擊導航按鈕分別進入不同的子模塊,再在這些模塊中分別調用它們的子模塊完成一系列的操作。 7.2 運行控制 本軟件控制流程
23、:主頁面運行,等待用戶選擇導航條,根據用戶的選擇調用不同的模塊。 7.3 運行時間 各模塊的運行時間比較短,不至于影響軟件的質量,因此不予討論。 8數據庫設計 本系統(tǒng)共設計了2個數據表,分別為Trade表格和User表格 Trade表格 此表是用來保存交易記錄。CardNo是這個表格的唯一標識,Amount是交易數額,TradeDate用來記錄交易時間,TradeNo是用來標記交易號碼,Business是交易業(yè)務,Poundage是手續(xù)費。 User表格 此表是用來保存用戶信息。CardNo是這個表的唯一標識,username是用戶名,usertel是用戶手機號碼,ID
24、是用戶身份證,password是用戶賬戶的密碼,balance使用戶賬戶余額。 9 系統(tǒng)出錯處理設計 在運行本程序過程中難免會遇到這樣那樣的問題導致系統(tǒng)無法正常操作,例如加載數據庫驅動程序失敗、連接數據庫失敗、更新數據庫失敗等,那么怎么解決這些問題呢?在這里我們列舉一些常見的問題以及解決辦法。 9.1 加載數據庫驅動程序失敗 對于該問題,如果用戶使用的是JDBC連接數據庫,首先單看通過Class.forName()方法加載的驅動程序是否正確,然后查看WEB-INF/lib目錄下是否存在msutil.jar、mssqlserver.jar、mabase.jar文件。 9.2 更新數據庫
25、失敗 更新數據庫失敗一般情況下是因為進行添加、刪除、修改、查找的SQL語句存在錯誤,例如,將from寫成form,或者所寫的字表名與實際要操作的字表名不一致等。 10 維護設計 除了嚴格按照軟件工程的科學方法開發(fā)軟件、認真建立文檔、編碼階段寫詳細的注釋外,沒有特殊的維護設計。 四 詳細設計 1 編寫目的 在前面所述的基礎上該階段正式進入ATM系統(tǒng)軟件的實際開發(fā),本階段完成系統(tǒng)的詳細設計并明確系統(tǒng)的功能與編碼。 2 背景 眾所周知隨著信息時代科技的飛速發(fā)展和隨著全球金融行業(yè)的興起,使用ATM取款機、計算機信息技術以及計算機科學技術的發(fā)展,給人們的生活帶來了天翻地覆的變化,同時
26、這些技術在人們生活中的運用,不僅提高了銀行的業(yè)務處理能力,而且大大的節(jié)省了人們取錢所花費的時間和價值;并且在有效防止了一些非法的業(yè)務操作,對于一些復雜的信息,就能夠充分的發(fā)揮它們的優(yōu)越性。 說明: a. 開發(fā)的軟件系統(tǒng)名稱:ATM系統(tǒng) b. 本項目的提出者:課程設計小組 c. 開發(fā)者: d. 指導老師: 3 定義 什么是ATM柜員機?ATM柜員機使用與ATM機相似的圖形用戶界面,當用戶在登錄界面輸入給定的卡號和密碼時,系統(tǒng)能登錄ATM柜員機系統(tǒng),通過數據鏈接操作來達到獨立的客戶與機器交互從而進行取款、存款、轉賬、查詢余額、修改密碼等業(yè)務辦理的目的。 4 參考資料 [1]雍俊海
27、 JAVA程序設計[M]北京:清華大學出版社,2006 [2]張海潘 軟件工程導論[M]北京:清華大學出版社,2010 [3] 耿祥義JAVA面向對象程序設計[M]北京:清華大學出版社,2010 5 程序系統(tǒng)的結構 本系統(tǒng)的總功能可以劃分為6大塊,就是轉賬、存款、取款、查詢余額、修改密碼以及查看交易記錄幾項大功能(子系統(tǒng))。 6 輸入輸出 輸入內容:賬號,儲戶密碼,取款額,轉賬卡號,轉賬金額 輸出內容:余額,輸入密碼提示,業(yè)務選擇提示,取卡提示,交易記錄 7界面設計 一個系統(tǒng)界面的好壞直接影響到用戶的操作,界面設計要求樣式美觀、簡單明了、方便易操作。我設計的界面主要分為窗體
28、、菜單、按鈕和文本輸入框幾個部分,分別執(zhí)行相應的操作。 7.1窗體設計 窗體整個框架使用Frame類構造,Frame有自己的外邊框和自己的標題,創(chuàng)建Frame時可以指定其窗口標題,我創(chuàng)建的窗口標題是各個不同功能的模塊的名字,比如說查詢余額,還有取款等。 向Frame窗口中添加組件使用add()。 例如:button1 = new Button("存款"); p1.add(button1); 我所設計的窗口的主要結構的特點就是每個窗口都對應著一個特定的功能。比如說報各種各樣的錯,還有各種查詢余額、取款、選擇服務等,所以它們都是由各種按鈕和文本框,標簽組成的,而聯(lián)系各個窗體成為一
29、個整體的就是各個按鈕的監(jiān)聽事件。所以整個設計就趨向簡單化了。 為了定義各個按鈕所對應的命令和操作,首先需要將各個按鈕注冊給實現了動作事件的監(jiān)聽接口ActionListener的監(jiān)聽者,然后為監(jiān)聽者定義actionPerformed(ActionEvent e)方法,在這個方法中調用e.getSource() 來判斷用戶點擊的菜單子項,并完成這個菜單子項定義的操作。 7.2主要模塊設計 7.2.1登陸頁面模塊設計 與ATM柜員機打交道比較多的,也是大家對安全比較關心的問題:密碼。所以第一個界面就是要輸入密碼和卡號才能繼續(xù)服務。 文本區(qū)調用public String getText()
30、方法,獲取用戶想要的字符串。用來判斷輸入的密碼和卡號是否正確,如果不正確的話,則彈出密碼或卡號錯誤的警告框,并用dispose()關掉窗口。 7.2.2主界面 主界面共有取款、存款、轉賬、查詢余額、修改密碼和查看交易記錄的6項功能,用戶登陸后出現此界面,可以由用戶根據自己的需要選擇相應的功能。部分代碼如下: private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton1MouseClicked new ZhuanZhang(this).setVi
31、sible(true); this.dispose(); } 7.2.3修改密碼 在修改密碼模塊中,首先你必須要輸入你的舊密碼是否正確,否則就會報錯。再一個就是要兩次輸入你的新密碼,且兩次藥匹配,否則也會報錯,然后再重新回到修改密碼的界面。在修改密碼時用到的方法為: String patternStr="[0-9a-zA-Z]{6}"; String newPwd1=jPasswordField1.getText(); 8主要模塊界面設計 ① 登陸界面 登錄模塊依然采用的是用戶名和密碼驗證的方式,首先需要用戶輸入用戶名和密碼然后點擊確認進行驗
32、證,這里涉及到一組輸入位數的問題,系統(tǒng)規(guī)定用戶需要輸入18位的用戶名和6位的密碼。 ② 主界面 主界面的設計主要是設計了查詢余額、取款、存款、轉賬、密碼更改及退出按鈕等ATM的一些標準操作界面。 ③ 存款界面 此模塊是用戶登錄成功后需要存款時的操作界面,在這個界面中輸入存款金額,點擊確定按鈕后進行存款操作。 ④ 余額查詢界面 在此模塊中,需要通過用戶所使用的賬戶及密碼來進行余額的查詢,因為先前進行過登陸,所以這里不用再登陸,直接點擊查詢余額即可顯示賬戶的實際余額。 ⑤ 密碼修改界面 因為先前已經用密碼登陸,故此處不需要用戶輸入舊密碼,直接兩次輸入新密碼進行確認,
33、然后系統(tǒng)會給出成功的提示信息。 ⑥ 取款界面 取款模塊是一個相對比較重要的模塊,因為ATM機就要的功能就是取款業(yè)務,因此在算法以及界面設計上花的功夫也是最多的,要根據功能需要中的要求做到用戶順利地取款,用戶選擇取款金額,然后點擊確定進行取款操作,數字按鈕的個數設計比較大,方便用戶操作。 ⑦ 轉賬界面 在轉賬模塊中,只需要輸入對方的賬戶號碼以及轉賬金額就可以了,為了防止用戶出錯,我們還設計了密碼確認這一項。 ⑧ 記錄查詢界面 9 異常處理情況說明 (1)打開、保存文件時的異常處理 需要處理的異常:IOException (2)數據庫訪問時的異常處理 需要處理的
34、異常:SQLException (3)加載類時的異常處理 需要處理的異常:ClassNotFindException,當應用程序試圖使用Class類中的forName方法通過字符串名加載類時,但是沒有找到具有指定名稱的類的定義。 五 代碼(見附錄) 六 測試 1測試方案 考慮到各種因素和條件的限制,我們決定采用黑盒測試方案(又稱功能測試,其測試用例完全是根據程序的功能說明來設計的)。即我們不考濾所編寫程序的具體結構, 而是根據軟件所需要的輸入數據的格式以及應該完成的功能,設計一些合法的測試用例和不合法的測試用例,特別是根據邊界條件設計一些邊界測試用例。以檢查系統(tǒng)是否能正確的完成預
35、訂功能,得到希望的輸出?;蛘呤菍Σ缓戏ǖ妮斎牒筒僮髂軌蛘_的識別和防御。 黑盒法是最基本的測試法,主要測試軟件能否滿足功能要求。 2 測試項目 應該注意到,在本系統(tǒng)中從總體上分為了轉賬、選擇服務、存款、取款、查詢余額、修改密碼以及查看交易記錄模塊設計。我們在設計測試用例的時候應該選擇有代表的,可以用最小的工作量完成對整個系統(tǒng)的測試。 3測試方法 3.1單元測試 1)模塊接口 參數的數目、次序與變元的是否相一致;全局變量的定義和用法在各個模塊中是否也相一致。 2)邊界條件 做完第一次操作進行第二次循環(huán)操作時,有沒有出現使用上的錯誤;使用過大或過小的數據值和控制量
36、時,系統(tǒng)是否進行了錯誤提示,有沒有導致軟件卡死或電腦死機情況。 3.2集成測試 1)模塊測試 第一步,對主控制模塊進行測試,測試時用存根程序代替所有直接附屬于主控制模塊的模塊; 第二步,根據選定的結合策略,每次用一個實際模塊代替一個存根程序; 第三步,在結合進一個模塊的同時進行測試。 2)回歸測試 主要是檢測軟件全部功能的代表性測試用例。 3)確認測試 主要用來檢測軟件是否與需求一致,并要通過調試和測試觀察軟件能否滿足所有的功能要求,能否達到每個性能要求。 4測試環(huán)境與測試輔助工具 測試輔助工具:Eclipse、NetBeans、MYSQL、JDK 測試環(huán)境
37、:Windows 7、windows xp 5系統(tǒng)測試 5.1登陸模塊測試 只要輸入正確的用戶名和密碼即可完成登陸 a.沒輸入賬號或輸入數據庫不存在的賬號 b.密碼輸入錯誤或不輸入密碼 測試用例 期望結果 實際結果 不輸入 無法登錄 無法登錄 輸入錯誤賬號 無法登錄 無法登錄 輸入錯誤密碼 無法登錄 無法登錄 5.2取款模塊測試 因為該模塊僅限于界面上的幾個按鈕可選,故測試范圍小、簡單。 5.3修改密碼功能測試 用戶可修改用戶的個人密碼信息。 a. 修改密碼成功 b. 修改密碼失敗 測試用例 期望結果 實際結果 密碼輸入
38、5位 修改失敗 修改失敗 不輸入 修改失敗 修改失敗 輸入6位 修改成功 修改成功 5.4存款模塊測試 用戶可以進行一定數額與次數的存款。 a.存款金額一次不能多于10000 b.存款金額不能為負 測試用例 期望結果 實際結果 存入11000 存款失敗 存款失敗 存入-1000 存款失敗 存款失敗 5.5 轉賬模塊測試 只要輸入正確的用戶名并進行密碼確認即可完成此功能 a.沒輸入賬號或輸入數據庫不存在的賬號 b.密碼輸入錯誤 測試用例 期望結果 實際結果 不輸入 無法轉賬 與期望相符 輸入錯誤賬號 無法轉賬
39、與期望相符 輸入錯誤密碼 無法轉賬 與期望相符 5.6查詢模塊測試 只要輸入正確的日期查詢區(qū)間即可完成查詢 a.輸入相同的日期(即查詢區(qū)間為空) b. 輸入錯誤的日期(即查詢起始時間比結束時間晚) 測試用例 期望結果 實際結果 輸入相同的日期 提示錯誤 無記錄 輸入錯誤的日期 提示錯誤 無記錄 6測試結果及評價? 功能和性能與用戶要求基本一致,軟件可以接受。但仍有部分功能尚未實現或進行了更改,例如: 1、 原計劃每天取款金額不超過5000元,但迫于代碼復雜,沒有實現; 2、 交易記錄查詢模塊,如果用戶輸入的起始時間大于結束時間(例如起
40、始時間為2008年,而結束時間為2004年),按照錯誤處理的原則,系統(tǒng)會自動報錯,但是系統(tǒng)仍然會出現交易記錄界面,只不過記錄為空; 3、 原計劃沒有加入聲音提示,但后來加以改進; 附錄: 1、存款模塊 private void jButton1MouseClicked(MouseEvent evt) { String yue = null; String patternStr="[0-9]*"; try { GetBalance balance=new GetBalance(); yue=balance.getyue();
41、 String numOfMoney=jTextField1.getText().trim(); if(numOfMoney.equals("")) {//金額為空 JOptionPane.showMessageDialog(this,"請輸入您需要存入的金額","錯誤",JOptionPane.ERROR_MESSAGE); return; } if(!numOfMoney.matches(patternStr)) { JOptionPane.showMessageDialog(this,"請您輸入數字","錯誤
42、",JOptionPane.ERROR_MESSAGE); return; } double num=Double.parseDouble(numOfMoney)+Double.parseDouble(yue)-Double.parseDouble(numOfMoney)*0.005; if(num>10000.0){ JOptionPane.showMessageDialog(this,"尊敬的客戶您好,您的金額已超過我們公司可以受理的最大值,我們不能受理","錯誤",JOptionPane.ERROR_MESSAGE);
43、 jTextField1.setText(""); return; } String sql1="update user set Balance='"+num+"' where CardNo='"+Login.num+"'"; int i=con.stat.executeUpdate(sql1); if(i==0) {//更改失敗提示信息 JOptionPane.showMessageDialog(this,"系統(tǒng)更新失敗,請檢查您的輸入是否正確","錯誤",JOptionPane.ERR
44、OR_MESSAGE); jTextField1.setText(""); } Date now=new Date(); String date=new SimpleDateFormat("yyyy年M月d日").format(now); String sql2="insert into trade(CardNo,Amount,TradeDate,Business,Poundage) values('"+Login.num+"','"+Double.parseDouble(numOfMoney)+"','"+date.t
45、oString()+"','"+"存款"+"','"+Double.parseDouble(numOfMoney)*0.005+"')"; int f=con.stat.executeUpdate(sql2); if(f==0) {//更改失敗提示信息 JOptionPane.showMessageDialog(this,"系統(tǒng)更新失敗,請檢查您的輸入是否正確","錯誤",JOptionPane.ERROR_MESSAGE); jTextField1.setText(""); } } catch (S
46、QLException e) { e.printStackTrace(); } new SuccessfulTrade(log); this.dispose(); } private void jButton2MouseClicked(java.awt.event.MouseEvent evt) { log.initComponents(); this.dispose(); } 2、取款模塊 private void jButton1MouseClicked(MouseEv
47、ent evt) { num=100; String yue = null; double num2; try { GetBalance balance=new GetBalance(); yue=balance.getyue(); num2=Double.parseDouble(yue)-num-num*0.005; if(num2<0) {JOptionPane.showMessageDialog(this,"余額不足!","錯誤
48、",JOptionPane.ERROR_MESSAGE); return; } String sql1="update user set Balance='"+num2+"' where CardNo='"+Login.num+"'"; int i=con.stat.executeUpdate(sql1); if(i==0) { JOptionPane.showMessageDialog(this,"系統(tǒng)更新失敗,請您原諒","錯誤",
49、JOptionPane.ERROR_MESSAGE); } Date now=new Date(); String date=new SimpleDateFormat("yyyy年M月d日").format(now); String sql2="insert into trade(CardNo,Amount,TradeDate,Business,Poundage) values('"+Login.num+"','"+num+"','"+date.toSt
50、ring()+"','"+"取款"+"','"+num*0.005+"')"; int f=con.stat.executeUpdate(sql2); if(f==0) {//更改失敗提示信息 JOptionPane.showMessageDialog(this,"系統(tǒng)更新失敗,請檢查您的輸入是否正確","錯誤",JOptionPane.ERROR_MESSAGE); } } catch (SQLExce
51、ption e) { e.printStackTrace(); } new SuccessfulTrade(log); this.dispose(); } private void jButton2MouseClicked(MouseEvent evt) { num=200; String yue = null; double num2; try { GetBalance balance=new GetBalance();
52、 yue=balance.getyue(); num2=Double.parseDouble(yue)-num-num*0.005; if(num2<0) {JOptionPane.showMessageDialog(this,"余額不足!","錯誤",JOptionPane.ERROR_MESSAGE); return; } String sql1="update user set Balance='"+num2+"' where CardNo='"+Login.num+"'"; int i=c
53、on.stat.executeUpdate(sql1); if(i==0) { JOptionPane.showMessageDialog(this,"系統(tǒng)更新失敗,請您原諒","錯誤",JOptionPane.ERROR_MESSAGE); } Date now=new Date(); String date=new SimpleDateFormat("yyyy年M月d日").format(now); String sql2="insert into trade(CardN
54、o,Amount,TradeDate,Business,Poundage) values('"+Login.num+"','"+num+"','"+date.toString()+"','"+"取款"+"','"+num*0.005+"')"; int f=con.stat.executeUpdate(sql2); if(f==0) {//更改失敗提示信息 JOptionPane.showMessageDialog(this,"系統(tǒng)更新失敗,請檢查您的輸入是否正確","錯誤",JOptionPane.ERROR_MESSA
55、GE); } } catch (SQLException e) { e.printStackTrace(); } new SuccessfulTrade(log); this.dispose(); } private void jButton3MouseClicked(MouseEvent evt) { num=500; String yue = null; double num2; try { GetBalance b
56、alance=new GetBalance(); yue=balance.getyue(); num2=Double.parseDouble(yue)-num-num*0.005; if(num2<0) {JOptionPane.showMessageDialog(this,"余額不足!","錯誤",JOptionPane.ERROR_MESSAGE); return; } String sql1="update user set Balance='"+num2+"' wher
57、e CardNo='"+Login.num+"'"; int i=con.stat.executeUpdate(sql1); if(i==0) { JOptionPane.showMessageDialog(this,"系統(tǒng)更新失敗,請您原諒","錯誤",JOptionPane.ERROR_MESSAGE); } Date now=new Date(); String date=new SimpleDateFormat("yyyy年M月d日").format(
58、now); String sql2="insert into trade(CardNo,Amount,TradeDate,Business,Poundage) values('"+Login.num+"','"+num+"','"+date.toString()+"','"+"取款"+"','"+num*0.005+"')"; int f=con.stat.executeUpdate(sql2); if(f==0) {//更改失敗提示信息 JOptionPane.showMessageD
59、ialog(this,"系統(tǒng)更新失敗,請檢查您的輸入是否正確","錯誤",JOptionPane.ERROR_MESSAGE); } } catch (SQLException e) { e.printStackTrace(); } new SuccessfulTrade(log); this.dispose(); } private void jButton4MouseClicked(MouseEvent evt) { num=5
60、000; String yue = null; double num2; try { GetBalance balance=new GetBalance(); yue=balance.getyue(); num2=Double.parseDouble(yue)-num-num*0.005; if(num2<0) {JOptionPane.showMessageDialog(this,"余額不足!","錯誤",JOptionPane.ERROR_MESSAGE); return;
61、 } String sql1="update user set Balance='"+num2+"' where CardNo='"+Login.num+"'"; int i=con.stat.executeUpdate(sql1); if(i==0) { JOptionPane.showMessageDialog(this,"系統(tǒng)更新失敗,請您原諒","錯誤",JOptionPane.ERROR_MESSAGE); } Date now=new Date
62、(); String date=new SimpleDateFormat("yyyy年M月d日").format(now); String sql2="insert into trade(CardNo,Amount,TradeDate,Business,Poundage) values('"+Login.num+"','"+num+"','"+date.toString()+"','"+"取款"+"','"+num*0.005+"')"; int f=con.stat.executeUpdate(sql2
63、); if(f==0) {//更改失敗提示信息 JOptionPane.showMessageDialog(this,"系統(tǒng)更新失敗,請檢查您的輸入是否正確","錯誤",JOptionPane.ERROR_MESSAGE); } } catch (SQLException e) { e.printStackTrace(); } new SuccessfulTrade(log); this.di
64、spose(); } private void jButton5MouseClicked(MouseEvent evt) { num=1000; String yue = null; double num2; try { GetBalance balance=new GetBalance(); yue=balance.getyue(); num2=Double.parseDouble(yue)-num-num*0.005; if(num2<0) {JOptionPane.showMessageDia
65、log(this,"余額不足!","錯誤",JOptionPane.ERROR_MESSAGE); return; } String sql1="update user set Balance='"+num2+"' where CardNo='"+Login.num+"'"; int i=con.stat.executeUpdate(sql1); if(i==0) { JOptionPane.showMessageDialog(this,"系統(tǒng)更新失敗,請您原諒","錯誤",JOptionP
66、ane.ERROR_MESSAGE); } Date now=new Date(); String date=new SimpleDateFormat("yyyy年M月d日").format(now); String sql2="insert into trade(CardNo,Amount,TradeDate,Business,Poundage) values('"+Login.num+"','"+num+"','"+date.toString()+"','"+"取款"+"','"+num*0.005+"')"; int f=con.stat.executeUpdate(sql2); if(f==0) {//更改失敗提示信息 JOptionPane.showMessageDialog(this,"系統(tǒng)更新失敗,請檢查您的輸入是否正確","錯誤",JOptionPane.ERROR_MESSAGE);
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 川渝旅游日記成都重慶城市介紹推薦景點美食推薦
- XX國有企業(yè)黨委書記個人述責述廉報告及2025年重點工作計劃
- 世界濕地日濕地的含義及價值
- 20XX年春節(jié)節(jié)后復工安全生產培訓人到場心到崗
- 大唐女子圖鑒唐朝服飾之美器物之美繪畫之美生活之美
- 節(jié)后開工第一課輕松掌握各要點節(jié)后常見的八大危險
- 廈門城市旅游介紹廈門景點介紹廈門美食展示
- 節(jié)后開工第一課復工復產十注意節(jié)后復工十檢查
- 傳統(tǒng)文化百善孝為先孝道培訓
- 深圳城市旅游介紹景點推薦美食探索
- 節(jié)后復工安全生產培訓勿忘安全本心人人講安全個個會應急
- 預防性維修管理
- 常見閥門類型及特點
- 設備預防性維修
- 2.乳化液泵工理論考試試題含答案