C語言程序設(shè)計(jì)報(bào)告(模擬ATM取款機(jī))_第1頁
C語言程序設(shè)計(jì)報(bào)告(模擬ATM取款機(jī))_第2頁
C語言程序設(shè)計(jì)報(bào)告(模擬ATM取款機(jī))_第3頁
C語言程序設(shè)計(jì)報(bào)告(模擬ATM取款機(jī))_第4頁
C語言程序設(shè)計(jì)報(bào)告(模擬ATM取款機(jī))_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、仲愷農(nóng)業(yè)工程學(xué)院工程實(shí)訓(xùn)報(bào)告ATM取款機(jī)課程名稱C語言程序設(shè)計(jì)工程實(shí)訓(xùn)姓名林少烈院(系)計(jì)算機(jī)科學(xué)與工程學(xué)院專業(yè)班級(jí)計(jì)算機(jī)113班學(xué)號(hào)201110214317指導(dǎo)教師王成仲愷農(nóng)業(yè)工程學(xué)院教務(wù)處制1 需求分析12 系統(tǒng)總框圖和功能模塊說明12.1 系統(tǒng)總框圖12.2 功能模塊說明13 系統(tǒng)設(shè)計(jì)23.1 主要結(jié)構(gòu)體23.2 主要功能函數(shù)23.3 關(guān)鍵函數(shù)的流程圖34 系統(tǒng)調(diào)試115 總結(jié)236 源程序清單256.1 頭文件256.2 主程序266.3 解除被凍結(jié)用戶576.4 用戶注冊(cè)60整理版1需求分析所設(shè)計(jì)的ATM取款機(jī)應(yīng)具備以下功能:插入銀行卡(用賬號(hào)輸入的方式代替)密碼的輸入;用戶信息查詢

2、;用戶余額查詢;取款;轉(zhuǎn)賬;修改密碼;退卡。2系統(tǒng)總框圖和功能模塊說明2.1 系統(tǒng)總框圖ATM取款機(jī)廠輸入用戶賬號(hào)圖1系統(tǒng)總框圖2.2 功能模塊說明?輸入用戶賬號(hào)模塊:在運(yùn)行時(shí),完成用戶賬號(hào)的輸入(代替插卡)?輸入賬號(hào)密碼模塊:在輸入賬號(hào)之后,完成用戶密碼的輸入;在修改密碼的過程中,完成用戶輸入舊密碼的功能;?信息讀取功能模塊:完成用戶信息的讀??;?凍結(jié)賬號(hào)功能模塊:當(dāng)輸入密碼3次錯(cuò)誤時(shí),凍結(jié)用戶賬號(hào):?查詢用戶信息模塊:完成用戶的信息查詢(不包括余額查詢);?查詢余額功能模塊:完成用戶余額的查詢;?取款功能模塊:完成取款功能模塊:?轉(zhuǎn)賬功能模塊:完成轉(zhuǎn)職功能;?修改密碼功能模塊:完成用戶修改

3、密碼功能;?退卡功能模塊:完成退卡功能(即:退出程序功能)。3系統(tǒng)設(shè)計(jì)3.1 主要結(jié)構(gòu)體用戶賬號(hào)、姓名、密碼、余額structUser/用戶數(shù)據(jù)charnum20;/用戶賬號(hào)charname10;/姓名charpassword7;/密碼floatbalance;/余額;3.2 主要功能函數(shù)/ 用戶信息讀取/ 輸入賬號(hào)voidread_info();voidinput_num(char*num);voidnow_existChar*num);/判斷是否被凍結(jié)或不存在voidexistedChar*num);voidinput_passwordChar*p_word,char*W);/輸入密碼vo

4、idface();/界面顯示voidbalance_refer();/余額查詢voidchoose(ntc);/菜單選擇voiddraw_money();/取款voidset_password();/修改密碼voidinput_new_password(har*old_password);/設(shè)置新密碼voidtran_account();/轉(zhuǎn)賬voidstamp();/打印單條voidinfo_refer();/信息查詢voidout();/退出程序voidlock();/凍結(jié)賬號(hào)voidsave_info();/存儲(chǔ)信息3.3 關(guān)鍵函數(shù)的流程圖pnowexited函數(shù)流程圖整理版exited

5、函數(shù)流程圖input_password流程圖整理版choose函數(shù)流程圖Ysjsteniiake-q;draw_money函數(shù)流程圖11.priipflfT-m*rvhOtfrriTTip(ne*gvaE#mi&tMirillrmeSS4rHii|Mnc-mur311HLlCn.ayMemf(3riiillpjiriI:nrv|i45ei口pi事、1M|i-cixHi.dL,一,11d-nMT_giH99iW4BITtivru一Vbyscml/i一0;囚ini支邙依41內(nèi)瓦小出prici惘ci-1etcliiknr聞Mbbwor??趀mtCLSh);王d-0TVs”厄m(CLS|:讀取文件數(shù)據(jù)

6、函數(shù)流程d+Mnllifik1Mulliplrkinput_new_password函數(shù)流程圖1(Tpi-ropenuwrJ忙lu式ffi).fUrit同口aprinrtcanticiopen.rtniirituuirmruperii+IlOzirf|il.lock函數(shù)流程圖saveinfo函數(shù)流程圖4系統(tǒng)調(diào)試首先運(yùn)行程序,系統(tǒng)提示輸入賬號(hào)。(1)當(dāng)輸入錯(cuò)誤賬號(hào),系統(tǒng)提示:用戶不存在,請(qǐng)從新輸入(2)當(dāng)輸入錯(cuò)誤的密碼時(shí),系統(tǒng)提示:密碼有誤,請(qǐng)重新輸入(3)當(dāng)輸入正確賬號(hào)與密碼時(shí),進(jìn)入主頁面(4)主界面(5)在主界面選擇數(shù)字1,進(jìn)入查詢余額界面,界面顯示余額。按任意鍵返回(6)在主頁面選擇數(shù)字2

7、,進(jìn)入取款界面,系統(tǒng)提示輸入取款的金額,當(dāng)輸入不是整百數(shù)是,系統(tǒng)提示請(qǐng)輸入正確的金額,請(qǐng)重新輸入整理版(8)當(dāng)輸入負(fù)數(shù)時(shí),系統(tǒng)提示:請(qǐng)輸入正確的金額,請(qǐng)重新輸入1-1s片時(shí)獻(xiàn)卻t型百觸i.-3QQ,(9)當(dāng)輸入超過卡里余額的數(shù),系統(tǒng)會(huì)提示余額不足,請(qǐng)重新輸入(10)當(dāng)輸入超過3000的數(shù)時(shí),系統(tǒng)會(huì)提示:對(duì)不起,一次最多能取3000元,請(qǐng)重新輸入。整理版(11)當(dāng)輸入正確的金額時(shí),系統(tǒng)提示:交易成功,按0返回主菜單,按9繼續(xù)取款。(12)在主菜單界面選擇數(shù)字3,進(jìn)入修改密碼界面,首先系統(tǒng)會(huì)提示:請(qǐng)輸入舊密碼(13)當(dāng)輸入就密碼正確時(shí),系統(tǒng)提示:請(qǐng)輸入新密碼(6位數(shù))(14)當(dāng)輸入的新密碼含有非數(shù)

8、字時(shí),系統(tǒng)提示:請(qǐng)輸入正確的數(shù)字(15)當(dāng)輸入的新密碼不足六位時(shí),系統(tǒng)提示:請(qǐng)輸入六位的密碼(16)當(dāng)兩次輸入的新密碼不相同時(shí),系統(tǒng)會(huì)提示:兩次輸入的密碼不同,請(qǐng)重新輸入電電人物兩也生祜干同,誼直舟1-(17)當(dāng)輸入兩次密碼都正確時(shí),系統(tǒng)提示:密碼修改成功,請(qǐng)牢記新密碼(18)在主菜單界面選擇數(shù)字4時(shí),進(jìn)入轉(zhuǎn)賬界面。系統(tǒng)提示:請(qǐng)輸入對(duì)方的賬號(hào):(19)當(dāng)輸入的賬號(hào)錯(cuò)誤時(shí),系統(tǒng)會(huì)提示:用戶不存在,請(qǐng)重新輸入(20)當(dāng)輸入自己的賬號(hào)時(shí),系統(tǒng)會(huì)提示:不能給自己轉(zhuǎn)賬,請(qǐng)重新輸入賬號(hào)(21)當(dāng)輸入正確的賬號(hào)時(shí),界面會(huì)顯示對(duì)方的信息。按0返回菜單,按9確定轉(zhuǎn)賬(22)當(dāng)確定轉(zhuǎn)賬時(shí),系統(tǒng)會(huì)提示:請(qǐng)輸入轉(zhuǎn)賬金

9、額(23)當(dāng)輸入轉(zhuǎn)賬的金額超過3000元時(shí),系統(tǒng)會(huì)提示:對(duì)不起,一次轉(zhuǎn)賬不能超過3000元,請(qǐng)重新輸入。(24)當(dāng)輸入正確的金額時(shí),系統(tǒng)提示:交易成功。按0返回主菜單,按9繼續(xù)轉(zhuǎn)賬(25)在主菜單界面選擇數(shù)字5,進(jìn)入信息查詢界面,界面將顯示賬號(hào)的信息(26)在主界面選擇數(shù)字0,進(jìn)去取款界面,系統(tǒng)提示:感謝您的使用,請(qǐng)拿回卡5總結(jié)在確認(rèn)了程序設(shè)計(jì)主題之后,首先第一步是畫了大概的流程圖,因?yàn)锳TM取款機(jī)是我們經(jīng)常接觸的一個(gè)機(jī)器,所以相對(duì)來說話流程圖比較容易。在畫完流程圖之后,就是進(jìn)行代碼的編寫了,我采用自頂向下的方式來規(guī)劃我的整個(gè)代碼流程,首先是確定了大概需要哪些函數(shù)來實(shí)現(xiàn)所需的功能,在函數(shù)命名的

10、時(shí)候,我并不是隨便命名的,而是采用書上介紹的方法,用英文來命名。在命名過程中,由于英語功底不好的我遇到了小小的麻煩(有些單詞不會(huì)拼),于是就用電子詞典來解決這問題。剛開始我是把所有白自定義函數(shù)定義為void型函數(shù)。所有的函數(shù)中明寫好之后就可以開始細(xì)化了,首先確定所需結(jié)構(gòu)體,然后就是頭文件的定義,最后確定了所有函數(shù)的編寫順序。由于這次程序設(shè)計(jì)是ATM取款機(jī),所有要用到文件的知識(shí),但又沒學(xué)過,所以只能先停止代碼的編寫來學(xué)習(xí)文件的知識(shí)。通過了兩天的學(xué)習(xí),雖然只是略學(xué)了皮毛,但是勉強(qiáng)看著書可以來自己新建文件并不數(shù)據(jù)存入文件中。所有的準(zhǔn)備工作完成后,真正的可以進(jìn)行代碼編寫了,首先把所有的函數(shù)都編寫出in

11、put_num來(內(nèi)容為空),然后根據(jù)從易到難的順序逐個(gè)功能的編寫。其順序依次是:函數(shù)(用戶賬號(hào)輸入),input_password函數(shù)(密碼輸入),lock函數(shù)(凍結(jié)用戶賬號(hào)),read_info函數(shù)(讀取文件數(shù)據(jù)),now_exit函數(shù)(檢查是賬號(hào)是否存在且未被凍結(jié)),existed函數(shù)(檢查賬號(hào)是否被凍結(jié)),face函數(shù)(主菜單),choose函數(shù)(功能選擇),balance_refer函數(shù)(余額查詢),draw_money函數(shù)(取款),set_password函數(shù)(修改密碼),input_new_passwordi數(shù)(輸入新密碼),tran_account函數(shù)(轉(zhuǎn)賬),info_ref

12、er函數(shù)(查詢信息),out函數(shù)(退卡)。在寫input_password函數(shù)時(shí),沒辦法實(shí)現(xiàn)密文的輸出,所以研究了很久,最后通過找資料和詢問師兄才解決了這一難題,并從中學(xué)到了這一技巧。在寫lock函數(shù)時(shí),剛開始只是用空字符來覆蓋原有的賬號(hào),但是在測(cè)試時(shí)發(fā)現(xiàn)這樣凍結(jié)的方法行不通,因?yàn)檫@樣子凍結(jié)的話雖然原賬號(hào)沒了,但是在輸入賬號(hào)時(shí)只要直接按Enter鍵就可以進(jìn)入輸入密碼的程序,所以這又是一個(gè)難題。在晚上睡覺時(shí)突然想到了曾經(jīng)在課外書上看到的產(chǎn)生隨機(jī)數(shù)的函數(shù)(rand函數(shù)),于是,第二天這個(gè)所謂的難題也解決了。所有的函數(shù)編寫完畢,想到了既然凍結(jié)了賬號(hào),肯定需要一個(gè)程序來解除凍結(jié)了的賬號(hào),所以,自己又摸

13、索了如何解決這一問題,最后想到了一個(gè)方法:再新建一個(gè)文件(文件名為alluerinformation)作為后臺(tái)來存儲(chǔ)用戶的信息,但這個(gè)文件存儲(chǔ)的是所有未被凍結(jié)前和未被凍結(jié)的賬號(hào)信息(即所有原始賬號(hào)信息)。而解除的方法是:先讀取alluserinformation這個(gè)文件里的信息,然后把里面的信息覆蓋到在前臺(tái)操作的文件即可。當(dāng)用戶被凍結(jié)后想解除的話只需運(yùn)行這個(gè)程序即可解除凍結(jié)。寫了解除凍結(jié)賬號(hào)的函數(shù)后,又想到需要寫一個(gè)注冊(cè)賬號(hào)的程序,于是也順利的完成了,最后,通過多次的調(diào)試,把整個(gè)程序代碼給完成了。6源程序清單6.1頭文件/*頭文件:user.h*/#include#include#includ

14、e#include#includestructUser/用戶數(shù)據(jù)charnum20;charname10;charpassword7;floatbalance;voidread_info();/用戶信息讀取voidinput_num(char*num);/輸入賬號(hào)voidnow_exist(char*num);/判斷是否被凍結(jié)或不存在voidexisted(char*num);voidinput_passwordc(har*p_word,char*W);/輸入密碼voidface();/界面顯示voidbalance_refer();/余額查詢voidchoose(intc);voiddraw

15、_money();voidset_password();voidinput_new_passwordc(har*oldvoidtran_account();voidstamp();voidinfo_refer();voidout();voidlock();voidsave_info();/菜單選擇/取款/設(shè)置密碼password);/轉(zhuǎn)賬/打印單條/信息查詢/退出程序/凍結(jié)賬號(hào)/存儲(chǔ)信息6.2主程序/*主程序:main*/*模擬ATM取款機(jī)*/#includeuser.h/自定義頭文件#defineU8structUseruserU;intf;/全局變量f是用來記錄用戶下標(biāo)(即哪個(gè)用戶)int

16、main()charnumber20;/定義賬號(hào)數(shù)組變量input_num(number);/調(diào)用input_num函數(shù),輸入用戶賬號(hào)return0;/*函數(shù)功能:輸入用戶賬號(hào)*/voidinput_num(charnum12)read_info();/輸入賬號(hào)前先調(diào)用函數(shù)read_info讀取所以用戶信息,以便后面判/斷賬戶是否存在以及密碼是否正確system(cls);printf(nnnnnnnntt請(qǐng)輸入您的賬號(hào):);gets(num);now_exist(num);/調(diào)用exist函數(shù)檢查該賬號(hào)是否存在/*函數(shù)功能:讀取用戶信息*/voidread_info()inti=0;FILE

17、*fp;if(fp=fopen(userinformation.dat,r)=NULL)/通過文件指針來讀取用戶數(shù)據(jù)信息(不包括被凍結(jié)用戶信息)printf(Itcannotopen!);exit(0);while(!feof(fp)fread(&useri,sizeof(structUser),1,fp);i+;fclose(fp);/*函數(shù)功能:判斷用戶是否存在且未被凍結(jié)*/voidnow_exist(char*num)ints=0,i;/s是用來判斷用戶是否存在的條件,如果存在s=1,不存在s=0;char*w=input;while(1)for(i=0;i12;i+)if(0=strc

18、mp(num,useri.num)/匹配用戶s=1;f=i;/如果用戶存在則跳出循環(huán),并用變量f記錄用戶下標(biāo),以便后面使用。break;elses=0;if(s=1)input_password(useri.password,w);/如果用戶存在,則調(diào)用input_password函數(shù)/并把用戶密碼傳遞給它,/實(shí)現(xiàn)用戶輸入密碼功能。elseexisted(num);/如果用戶不存在,則調(diào)用existed函數(shù),判斷是否賬號(hào)被凍結(jié)/*函數(shù)功能:判斷賬號(hào)是否被凍結(jié)*/voidexisted(char*num)intl=0,i=0;/s是用來判斷用戶賬號(hào)是否被凍結(jié)的條件,l=1被凍結(jié),l=0說明用戶不

19、存在;FILE*fp;if(fp=fopen(alluserinformation.dat,r)=NULL)printf(Itcannotopen!);/用文件指針讀取所有用戶數(shù)據(jù)(包括被凍結(jié)用戶)exit(0);while(!feof(fp)fread(&useri,sizeof(structUser),1,fp);i+;while(1)for(i=0;i12;i+)if(strcmp(num,useri.num)=0)/判斷輸入的賬號(hào)是否存在l=1;break;elsel=0;if(l=1)printf(anntt對(duì)不起,您的賬號(hào)已被凍結(jié),請(qǐng)與客服聯(lián)系!nnnn);exit(0);else

20、printf(anntt用戶賬號(hào)不存在,請(qǐng)重新輸入!n);printf(nnn按任意鍵返回!);getch();system(CLS);input_num(num);/*函數(shù)功能:輸入密碼*/voidinput_passwordc(har*p_word,char*W)charpassword20;charch;用來統(tǒng)計(jì)輸入密碼錯(cuò)誤的inti,ts=1;/ts次數(shù)doif(ts=100&take%100=0)if(take=userf.balance)if(take9)|(new_password0d0)/判斷密碼是否是數(shù)字system(CLS);printf(nnnnnnttt請(qǐng)輸入數(shù)字,謝謝

21、!n);printf(nnnnn按任意鍵返回!n);getch();input_new_password(old_password);if(d!=6)/判斷密碼是否為6位數(shù)system(CLS);printf(nnnnnnttt請(qǐng)輸入6位的密碼,謝謝!n);printf(nnnnn按任意鍵返回!n);getch();continue;if(strcmp(new_password0,0)=0)/輸入0則返回主菜單system(CLS);face();elseprintf(nnnnnntt請(qǐng)?jiān)俅未_認(rèn)您的密碼:t);i=0;ch=getch();while(ch!=13)/輸入字符ch不為回車鍵if(ch=8)/輸入字符ch為退格鍵printf(%c%c,ch,ch);if(i!=0)i-;elseprintf(*);new_password1i=ch;i+;ch=getch();/繼續(xù)輸入字符chnew_password1i=0;if(strcmp(new_password

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論