C自動取款機ATM課程設(shè)計報告.doc
《C自動取款機ATM課程設(shè)計報告.doc》由會員分享,可在線閱讀,更多相關(guān)《C自動取款機ATM課程設(shè)計報告.doc(20頁珍藏版)》請在裝配圖網(wǎng)上搜索。
洛陽師范學院2013-2014學期 c+語言程序設(shè)計課程設(shè)計報告設(shè)計名稱:模擬自動取款機ATM 姓 名:黃雙雙 學 號:131124001 專業(yè)班級:網(wǎng)絡(luò)工程 學 院:信息技術(shù)學院設(shè)計時間:2014年6月設(shè)計地點:宿舍成績:指導(dǎo)教師評語: 指導(dǎo)教師簽字: 年 月 日目 錄1.課程設(shè)計目的32.課程設(shè)計任務(wù)與要求33.課程設(shè)計說明書44.課程設(shè)計成果65.程序調(diào)試過程186.設(shè)計問題的不足和改進方案187.課程設(shè)計心得198.參考文獻201課程設(shè)計目的c+語言程序設(shè)計課程設(shè)計是這門課程的實踐性教學環(huán)節(jié)之一,本次設(shè)計結(jié)合實際應(yīng)用的要求,使課程設(shè)計既覆蓋C+的知識點,又接近工程實際需要。目的是通過課程設(shè)計的綜合訓(xùn)練,培養(yǎng)學生實際分析問題、解決問題的能力,以及編程和動手能力,最終目標是通過課程設(shè)計這種形式,幫助學生系統(tǒng)掌握C+這門課程的主要內(nèi)容,養(yǎng)成良好的編程習慣,更好的完成教學任務(wù)。2課程設(shè)計任務(wù)與要求:要求:本次課程設(shè)計利用c+語言程序設(shè)計課程中所學到的編程知識和編程技巧,完成具有一定難度和工作量的程序設(shè)計題目,幫助學生掌握編程、調(diào)試的基本技能,獨立完成所布置的任務(wù)。要求:1、對系統(tǒng)進行功能需求分析2、設(shè)計合理的數(shù)據(jù)結(jié)構(gòu)和系統(tǒng)框架3、編程簡練,程序功能齊全,能正確運行4、說明書、流程圖要清楚5、課題完成后必須按要求提交課程設(shè)計報告(1)分析系統(tǒng)中的各個實體之間的關(guān)系及其屬性和行為; (2)根據(jù)問題描述,設(shè)計系統(tǒng)的類層次; (3)完成類層次中各個類的描述(包括屬性和方法); (4)完成類中各個成員函數(shù)的定義; (5)完成系統(tǒng)的模塊組裝、調(diào)試;任務(wù):(1)ATM機類:有“單筆取款最高限制”、“每日取款總金額限制”、“金額”等基本屬性。需要實現(xiàn):“核對密碼”、“修改密碼”、“取款”、“查詢信息”、“退出系統(tǒng)”、“鎖機吞卡”等功能??梢詫⑦@些操作定義為ATM機類的成員函數(shù)。(2)銀行卡類:具有“用戶姓名”、“用戶密碼”、“存款額”等特征。需要實現(xiàn)“身份驗證”、“查詢余額”、“修改密碼”、“交易成功更改余額”等操作。將這些操作定義為銀行卡類的成員函數(shù)。(1) 模擬自動取款機(ATM)的流程,實現(xiàn)查詢銀行卡余額、取款、修改密碼、退出系統(tǒng)等功能;(2) 卡號、密碼錯誤時最多輸入3次,否則直接退出系統(tǒng)。(3) 取款金額受信用卡余額、ATM機單筆最大取款金額及ATM機當前剩余金額的限制。3課程設(shè)計說明書概要設(shè)計本案例涉及一個銀行卡和ATM機之間的“對話”。需要處理兩個對象,即:ATM和銀行卡,因此可以考慮定義兩個類來解決這個問題。(1)ATM機類:有“單筆取款最高限制”、“每日取款總金額限制”、“金額”等基本屬性。需要實現(xiàn):“核對密碼”、“修改密碼”、“取款”、“查詢信息”、“退出系統(tǒng)”、“鎖機吞卡”等功能??梢詫⑦@些操作定義為ATM機類的成員函數(shù)。(2)銀行卡類:具有“用戶姓名”、“用戶密碼”、“存款額”等特征。需要實現(xiàn)“身份驗證”、“查詢余額”、“修改密碼”、“交易成功更改余額”等操作。將這些操作定義為銀行卡類的成員函數(shù)。模塊說明: 在我設(shè)計的程序中一共包括了五個模塊,分別是: 核對密碼、修改密碼、取款、查詢信息、退出系統(tǒng)模塊。這六個模塊中新增、查找和修改都是獨立分開作為子函數(shù)的,另外三個則是作為switch語句中的一部分,通過switch語句,把五個大模塊聯(lián)系了起來,同時,為了實現(xiàn)多次使用這五大模塊,就在switch語句外加了while循環(huán)。 模塊結(jié)構(gòu)圖: 詳細設(shè)計 總體流程圖:各功能模塊流程圖:4.課程設(shè)計成果程序源代碼,運行結(jié)果(可用屏幕抓圖的方法說明)(五號,宋體)(多頁)#include#include#include#include class consumer;class ATMpublic: ATM(consumer & cn):cnsm(cn) void welcome(); /登陸界面bool check_passwd(char n,char pwd); /核對密碼void change_passwd(); /修改密碼void fetchmoney(); /取款void information(); /查詢信息void exitATM(); /退出系統(tǒng)void functionshow(); /功能界面void lock(); /鎖機private:int times; /記錄密碼輸入次數(shù)consumer &cnsm; ;class consumer /用戶public:friend class ATM;consumer(char Name,char Num, float Money,char Password);protected:char* get_name(); /取得姓名char* get_kahao(); /取得卡號char* get_passwd(); /取得密碼float get_money(); /取得余額void set_passwd(char pwd); /設(shè)置密碼void set_money(float m); /取錢private:char passwd10; /用戶密碼char name20; /用戶姓名char kahao20; /用戶卡號float money; /用戶余額 ;consumer:consumer(char Name,char Kahao, float Money,char Password) /構(gòu)造函數(shù),建立賬戶 strcpy(name,Name); strcpy(kahao,Kahao); money=Money; strcpy(passwd,Password);float consumer:get_money() /取得余額 return money;char*consumer:get_name() /取得姓名return name;char*consumer:get_kahao() /取得卡號return kahao;char*consumer:get_passwd() /取得密碼return passwd;void consumer:set_passwd(char pwd)/設(shè)置密碼strcpy(passwd,pwd);void ATM:welcome() /登錄界面times=0;cout*歡迎使用銀行ATM自動取款機*endl;char pwd10,num20,ch;int i=0;doi=0;coutendl請輸入卡號:;docin.get(ch);numi+=ch;while(ch!=n);numi-1=0;i=0;cout請輸入密碼:;docin.get(ch);pwdi+=ch;while(ch!=n);pwdi-1=0;if(!check_passwd(num,pwd)cout你輸入的卡號或密碼有誤,請從新輸入endl;times+;elsefunctionshow();while(times3);lock();bool ATM:check_passwd(char num,char pwd)if(strcmp(num,cnsm.get_kahao()=0&strcmp(pwd,cnsm.get_passwd()=0)return true;elsereturn false;void ATM:functionshow()int n;docout endl請輸入相應(yīng)的操作序號進行操作: endl;cout1)修改密碼 endl2)取款 endl3)查詢余額 endl4)退出系統(tǒng) endl;cout;cinn;while(n4)cout請輸入正確的操作序號!endl;cout;cinn;switch(n)case 1: change_passwd();break;case 2: fetchmoney();break;case 3: information();break;case 4: exitATM();break;while(true);void ATM:change_passwd() char pwd10,repwd10; times=0;docoutendlpwd;if(!check_passwd(cnsm.get_kahao(),pwd)times+;elsebreak;while(times3);if(times=3)lock();int k=0;int t=0;dok=0;coutpwd;int g=0;int v=0;g=strlen(pwd);if(g6)k=1;cout密碼不能小于6位endl;for(int i=0;ig-1;i+)if(pwdi=pwdi+1)v=v+1;if(v=g)k=1;cout對不起,不允許出現(xiàn)完全相同的情況6&v!=g)coutrepwd;if(t=strcmp(pwd,repwd)!=0)cout你輸入的兩次密碼不一樣,請重新輸入!endl;while(t!=0|k=1);cnsm.set_passwd(pwd);cout密碼修改成功,請牢記!endl;void ATM:fetchmoney( )float m;char ch;docoutendl你要取多少錢:;cinm;while(m=0)cout請輸入正確的數(shù)字!endl;cout;cinm;if(m5000)cout對不起,每次最多取5000元endl;elseif(int)m%100!=0)cout對不起,取款金額為100的倍數(shù)endl;elseif(cnsm.get_money()-m0)cout對不起,你的余額不足!endl;elsecout endl操作成功,請收好錢! endl;cnsm.set_money( m );cout是否要繼續(xù)該項操作:(Y/N)endl;cout;cinch;while(ch!=n&ch!=Y&ch!=y)cout;cinch;while(ch=y|ch=Y);void ATM:information()cout*endl;cout*endl;cout* 用戶姓名:cnsm.get_name()endl;cout* 卡號: cnsm.get_kahao()endl;cout* 余額: cnsm.get_money()endl;cout*endl;void ATM:lock() coutendl感謝你對本銀行的支持,歡迎下次光臨!endl; cout請取卡.endl; void ATM:exitATM()cout成功退出系統(tǒng)!謝謝惠顧!endl;exit(0);void consumer:set_money (float m)money=money-m;int main()consumer c1(Me,123456,10000.00F,123456);/先構(gòu)造一個用戶ATM atm(c1);atm.welcome();return 0;運行結(jié)果1.輸入密碼2.修改密碼3.取款4.查詢余額5退出系統(tǒng)6.用戶名密碼輸入錯誤三次,自動退出,鎖機吞卡5.程序調(diào)試過程寫出程序調(diào)試步驟(4) 模擬自動取款機(ATM)的流程,實現(xiàn)查詢銀行卡余額、取款、修改密碼、退出系統(tǒng)等功能;(5) 卡號、密碼錯誤時最多輸入3次,否則直接退出系統(tǒng)。(6) 取款金額受信用卡余額、ATM機單筆最大取款金額及ATM機當前剩余金額的限制。1.根據(jù)程序設(shè)定好的用戶名密碼輸入,用戶名為123456,密碼為123456.2.根據(jù)題目要求修改密碼,原密碼為123456,新密碼為1234567,重復(fù)新密碼12345673.取出現(xiàn)金1004.查詢余額,剩余99005退出系統(tǒng)6.次密碼錯誤自動退出系統(tǒng),鎖機吞卡遇到的問題開始不會輸入用戶名用戶密碼,得提前設(shè)定,其次輸入密碼三次錯誤,沒有自動鎖機,需要再設(shè)定,while函數(shù)用不熟,各模塊聯(lián)系不上,最高取款限額,還有查詢余額都得用分支模塊處理。ATM機類:有“單筆取款最高限制”、“每日取款總金額限制”、“金額”等基本屬性。需要實現(xiàn):“核對密碼”、“修改密碼”、“取款”、“查詢信息”、“退出系統(tǒng)”、“鎖機吞卡”等功能。將這些操作定義為ATM機類的成員函數(shù)沒有緊密聯(lián)系。行卡類:具有“用戶姓名”、“用戶密碼”、“存款額”等特征。需要實現(xiàn)“身份驗證”、“查詢余額”、“修改密碼”、“交易成功更改余額”等操作。將這些操作定義為銀行卡類的成員函數(shù)不能很好運行。在本程序中使用了struct 數(shù)據(jù)類型,所用最多的是WHILE循環(huán)結(jié)構(gòu)和IF語句,然而這也正為了它的特色。循環(huán)體的嵌套思路清晰,目的明確,格式規(guī)范,易于閱讀和理解。If語句的逐層運用,正形象化的描述了計算機工作流程,而且與人的一般習慣相吻合,簡單明了,易于觀察理解它的來龍去脈,思路清晰直觀。該程序是在漢化系統(tǒng)下編寫完成的,所以它支持在漢化系統(tǒng)下運行,還支持在普通系統(tǒng)下運行,它允許完全用中文操作,包括對信息的添加瀏覽和查詢等功能,它使用的指針是動態(tài)分配內(nèi)存的,允許用戶大量的信息錄入,對它的長短不加限制,這樣就方便了很多。而且中文環(huán)境更加方便使用,一目了然。6.設(shè)計問題的不足和改進方案本課程設(shè)計是在漢化環(huán)境下操作的,對系統(tǒng)要求相對嚴格。在輸入信息時,每輸入一條信息后用ENTER鍵結(jié)束,然后繼續(xù)下一條信息的輸入。如果不能按照規(guī)定方法錄入,將導(dǎo)致信息混亂不清,只有重新啟動系統(tǒng)開始新的輸入。策略是:只有人為的去掌握輸入方法,正確操作;還有是對程序改進,使程序?qū)σ恍┓欠ㄝ斎虢o予忽略,提示重新輸入。在本程序中使用了struct 數(shù)據(jù)類型,所用最多的是WHILE循環(huán)結(jié)構(gòu)和IF語句,然而這也正為了它的特色。循環(huán)體的嵌套思路清晰,目的明確,格式規(guī)范,易于閱讀和理解。If語句的逐層運用,正形象化的描述了計算機工作流程,而且與人的一般習慣相吻合,簡單明了,易于觀察理解它的來龍去脈,思路清晰直觀。該程序是在漢化系統(tǒng)下編寫完成的,所以它支持在漢化系統(tǒng)下運行,還支持在普通系統(tǒng)下運行,它允許完全用中文操作,包括對信息的添加瀏覽和查詢等功能,它使用的指針是動態(tài)分配內(nèi)存的,允許用戶大量的信息錄入,對它的長短不加限制,這樣就方便了很多。而且中文環(huán)境更加方便使用,一目了然。因為系統(tǒng)只是要求模擬并不牽涉到真實的一些處理,所以很多真實的應(yīng)用并不沒有加在里面,一些與真實的自動化機器的接口連接并沒有做到。在程序運行時有時會因為輸入的數(shù)字過大而出現(xiàn)內(nèi)存溢出,程序崩潰現(xiàn)象,經(jīng)過調(diào)試改正已經(jīng)有了很大改觀,但仍然存在不可知的錯誤。首先遇到的問題就是系統(tǒng)分析不足的問題在大致考慮了一些功能后就開始動手做,想到哪里做到哪里,一度陷入了困境,其后從新開始理清了思緒,畫好了流程圖在做,隨即順暢了許多。其次就是與數(shù)據(jù)庫連接上的問題,由于對VB與SQL連接的不熟走了很多彎路,使程序設(shè)計需要用到數(shù)據(jù)庫時復(fù)雜化,過后通過老師同學指點,采用了ADO控件的動態(tài)連接,才解決一個頭疼的問題。其后的問題都是程序中邏輯性的一些小問題,大多數(shù)都是一些遺漏,導(dǎo)致程序死循環(huán),或者是數(shù)據(jù)庫寫入不去作用等等,都是通過仔細重新分析檢查一一解決。在所有代碼編寫完成后,再一一驗證其功能,修正了很多不足,也使得程序慢慢完善起來。7.課程設(shè)計心得通過用面向推想的編程概念作為主導(dǎo)思想,我們體會不少,不過由于時間非常的緊迫,我們也只能說說我們的一些主要體會:在程序中我們設(shè)計了一個抽象基類和由這個基類派生出去的這使我們體會到了真正思想,也感覺到對面向?qū)ο蟪绦蛟O(shè)計確實抽象,這需要我們在編程實踐去慢慢體會,慢慢總結(jié)。 面向?qū)ο蟮木幊谈拍畹淖钪饕奶匦允牵豪^承和多態(tài)。關(guān)于多態(tài),在面向?qū)ο蟮某绦蛟O(shè)計中它的含義是“相似”,兩個對象如果具有一定的相似性但又有些區(qū)別的話,那么它們具有多態(tài)性;在C+中,我們通過基類的和references,借助虛擬機制對派生類進行動態(tài)操作。用關(guān)鍵字可使函數(shù)有了晚捆綁的靈活性(即動態(tài)綁定)函數(shù)表示允許在相同家族中的類有不同的行為,這也正是多態(tài)形成的原因。virtual函數(shù)允許它與基類那個函數(shù)不同(即允許改寫基類定義的函數(shù))。會使我們的程序的修改和增刪極為方便。當然基類中函數(shù)無實質(zhì)實現(xiàn)內(nèi)容的話,也可將virtual函數(shù)賦值為0,則變?yōu)樘摂M函數(shù)了,那么基類也就成了抽象基類,不能用來產(chǎn)生任何對象,只提供接口給派生類用,僅作為派生類的子對象來用。 關(guān)于繼承,基類用以描述系統(tǒng)中一些對象的思想核心,派生出其他類型(派生類)用來表達了認識該核心的不同途徑。在編程的過程中由于對基類的繼承機制,使得一些共通的數(shù)據(jù)和操作只需寫一份代碼,而無須重復(fù)寫多份代碼,從而大大方便了編程,減少大量的工作量;還有,如果你以后想增加程序的功能,需要再加一個派生類,呵呵這下基類就派上用場了,直接增加一個對基類繼承的派生類,你就可以直接給老板打電話說我已經(jīng)把新功能加進去了,我們發(fā)現(xiàn):其實繼承就是一個積累和發(fā)展的過程,就像文化的積累和發(fā)展一樣,整個面向?qū)ο蟮木幊踢^程是在向后兼容。設(shè)計中我們采用循序漸近、逐步完善的策略,讓繼承與多態(tài)有充分的體現(xiàn)經(jīng)過一個學期的學習和上機實踐,使我對C+語言有了更認識和和了解,要想學好它要重在實踐,要通過不斷的上機操作才能更好的學習它,通過實踐,我也發(fā)現(xiàn)我的好多不足之處,對各種控制結(jié)構(gòu)及語句、數(shù)組的基本與高級應(yīng)用、指針數(shù)組、字符數(shù)組、動態(tài)數(shù)組、函數(shù)的定義、調(diào)用方式;函數(shù)在編程中的具體應(yīng)用;以及變量存儲特征與標識符的作用域,通過實踐,使我在這些方面有了認識和提高。課程設(shè)計它是一項任務(wù),更是一種挑戰(zhàn)和歷練。在課程設(shè)計中,為了使用時方便,著重對不足方面的知識進行了分析與理解,在這一過程中對文件的操作有了很大的提高。通過實際的演練,可以增強對知識的理解和運用能力。8. 參考文獻:1吳乃陵, 況迎輝.C+課程設(shè)計. 北京:高等教育出版社,20062謝昕,劉覺夫,王更生.C+程序設(shè)計.北京:北京郵電大學出版社,20083 王挺、周會平、賈麗麗、徐錫山. C+程序設(shè)計M. 北京:清華大學出版社,2005:138-221.4 劉瑞新. Visual C+面向?qū)ο蟪绦蛟O(shè)計教程M. 北京:機械工業(yè)出版社,2005.5Visual C+ 6編程寶典6C+Builder精彩編程實例集錦7C+ Primer (3RD)中文版8C+ STL(中文版)9C+多范型設(shè)計- 1.請仔細閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 自動 取款 ATM 課程設(shè)計 報告
鏈接地址:http://m.appdesigncorp.com/p-9121229.html