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頁,還剩40頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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ī)113班學(xué) 號 2指導(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é)216 源程序清單236.1頭文件236.2主程序236.3 解除被凍結(jié)用戶406.4 用戶注冊41.1 需求分析所設(shè)計(jì)的取款機(jī)應(yīng)具備以下功能:l 插入銀行卡(用賬號輸入的方式代替);l 密碼的輸入;l 用戶信

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

3、詢; 取款功能模塊:完成取款功能模塊: 轉(zhuǎn)賬功能模塊:完成轉(zhuǎn)職功能; 修改密碼功能模塊:完成用戶修改密碼功能; 退卡功能模塊:完成退卡功能(即:退出程序功能)。3 系統(tǒng)設(shè)計(jì)3.1 主要結(jié)構(gòu)體用戶賬號、姓名、密碼、余額struct User/用戶數(shù)據(jù)char num20;/用戶賬號char name10;/姓名char password7;/密碼float balance;/余額;3.2主要功能函數(shù)void read_info();/用戶信息讀取void input_num(char * num);/輸入賬號void now_exist(char * num);/判斷是否被凍結(jié)或不存在void

4、existed(char * num);void input_password(char * p_word,char * W);/輸入密碼void face();/界面顯示void balance_refer();/余額查詢void choose(int c);/菜單選擇void draw_money();/取款void set_password();/修改密碼void input_new_password(char * old_password);/設(shè)置新密碼void tran_account();/轉(zhuǎn)賬void stamp();/打印單條void info_refer();/信息查詢voi

5、d out();/退出程序void lock();/凍結(jié)賬號void save_info();/存儲信息3.3 關(guān)鍵函數(shù)的流程圖Ni+elsel=0;l=1;break;l=1i12i=0讀取文件信息printf(It cannot open !);1!feof(fp)打開文件intl=0,i=0;now_exited 函數(shù)流程圖else調(diào)用input_pssword 函數(shù)s=1判斷賬號是否存在elses=0;i+ints=0,i;1i=0i12s=1;break;用戶不存在,重新輸入凍結(jié)賬號判斷密碼是否正確exited 函數(shù)流程圖input_password 流程圖choose 函數(shù)流程圖d

6、raw_money 函數(shù)流程圖iint i=0;打開文件關(guān)閉文件printf(It cannot open !);讀取文件!feof(fp)input_new_password 函數(shù)流程圖 讀取文件數(shù)據(jù)函數(shù)流程圖save_info 函數(shù)流程圖lock 函數(shù)流程圖i=0iUi+fclose(fp);randomi=0;int i;i=0i12i+產(chǎn)生隨機(jī)數(shù)打開文件進(jìn)行寫入printf(It cannot open !);4 系統(tǒng)調(diào)試首先運(yùn)行程序,系統(tǒng)提示輸入賬號。(1)當(dāng)輸入錯誤賬號,系統(tǒng)提示:用戶不存在,請從新輸入。,(2)當(dāng)輸入錯誤的密碼時,系統(tǒng)提示:密碼有誤,請重新輸入。(3)當(dāng)輸入正確賬

7、號與密碼時,進(jìn)入主頁面。(4)主界面(5)在主界面選擇數(shù)字1,進(jìn)入查詢余額界面,界面顯示余額。按任意鍵返回。(6)在主頁面選擇數(shù)字2,進(jìn)入取款界面,系統(tǒng)提示輸入取款的金額,當(dāng)輸入不是整百數(shù)是,系統(tǒng)提示請輸入正確的金額,請重新輸入。(8)當(dāng)輸入負(fù)數(shù)時,系統(tǒng)提示:請輸入正確的金額,請重新輸入。(9)當(dāng)輸入超過卡里余額的數(shù),系統(tǒng)會提示余額不足,請重新輸入。2(10)當(dāng)輸入超過3000的數(shù)時,系統(tǒng)會提示:對不起,一次最多能取3000元,請重新輸入。(11)當(dāng)輸入正確的金額時,系統(tǒng)提示:交易成功,按0返回主菜單,按9繼續(xù)取款。(12)在主菜單界面選擇數(shù)字3,進(jìn)入修改密碼界面,首先系統(tǒng)會提示:請輸入舊密碼

8、。(13)當(dāng)輸入就密碼正確時,系統(tǒng)提示:請輸入新密碼(6位數(shù))。(14)當(dāng)輸入的新密碼含有非數(shù)字時,系統(tǒng)提示:請輸入正確的數(shù)字。(15)當(dāng)輸入的新密碼不足六位時,系統(tǒng)提示:請輸入六位的密碼。(16)當(dāng)兩次輸入的新密碼不相同時,系統(tǒng)會提示:兩次輸入的密碼不同,請重新輸入。(17)當(dāng)輸入兩次密碼都正確時,系統(tǒng)提示:密碼修改成功,請牢記新密碼。(18)在主菜單界面選擇數(shù)字4時,進(jìn)入轉(zhuǎn)賬界面。系統(tǒng)提示:請輸入對方的賬號:(19)當(dāng)輸入的賬號錯誤時,系統(tǒng)會提示:用戶不存在,請重新輸入。(20)當(dāng)輸入自己的賬號時,系統(tǒng)會提示:不能給自己轉(zhuǎn)賬,請重新輸入賬號。(21)當(dāng)輸入正確的賬號時,界面會顯示對方的信息

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

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

11、件中。所有的準(zhǔn)備工作完成后,真正的可以進(jìn)行代碼編寫了,首先把所有的函數(shù)都編寫出來(內(nèi)容為空),然后根據(jù)從易到難的順序逐個功能的編寫。其順序依次是:input_num函數(shù)(用戶賬號輸入),input_password函數(shù)(密碼輸入),lock函數(shù)(凍結(jié)用戶賬號),read_info函數(shù)(讀取文件數(shù)據(jù)),now_exit函數(shù)(檢查是賬號是否存在且未被凍結(jié)),existed函數(shù)(檢查賬號是否被凍結(jié)),face函數(shù)(主菜單),choose函數(shù)(功能選擇),balance_refer函數(shù)(余額查詢),draw_money函數(shù)(取款),set_password函數(shù)(修改密碼),input_new_pass

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

13、編寫完畢,想到了既然凍結(jié)了賬號,肯定需要一個程序來解除凍結(jié)了的賬號,所以,自己又摸索了如何解決這一問題,最后想到了一個方法:再新建一個文件(文件名為all uer information)作為后臺來存儲用戶的信息,但這個文件存儲的是所有未被凍結(jié)前和未被凍結(jié)的賬號信息(即所有原始賬號信息)。而解除的方法是:先讀取all user information這個文件里的信息,然后把里面的信息覆蓋到在前臺操作的文件即可。當(dāng)用戶被凍結(jié)后想解除的話只需運(yùn)行這個程序即可解除凍結(jié)。寫了解除凍結(jié)賬號的函數(shù)后,又想到需要寫一個注冊賬號的程序,于是也順利的完成了,最后,通過多次的調(diào)試,把整個程序代碼給完成了。6 源程

14、序清單6.1頭文件/*頭文件:user.h*/#include #include #include #include #include struct User/用戶數(shù)據(jù)char num20;char name10;char password7;float balance;void read_info();/用戶信息讀取void input_num(char * num);/輸入賬號void now_exist(char * num);/判斷是否被凍結(jié)或不存在void existed(char * num);void input_password(char * p_word,char * W);

15、/輸入密碼void face();/界面顯示void balance_refer();/余額查詢void choose(int c);/菜單選擇void draw_money();/取款void set_password();/設(shè)置密碼void input_new_password(char * old_password);void tran_account();/轉(zhuǎn)賬void stamp();/打印單條void info_refer();/信息查詢void out();/退出程序void lock();/凍結(jié)賬號void save_info();/存儲信息6.2主程序/*主程序:main*/

16、*模擬ATM取款機(jī)*/#include user.h/自定義頭文件#define U 8struct User userU;int f;/全局變量 f 是用來記錄用戶下標(biāo)(即哪個用戶)int main()char number20;/定義賬號數(shù)組變量input_num(number);/調(diào)用input_num函數(shù),輸入用戶賬號return 0;/*函數(shù)功能:輸入用戶賬號*/void input_num(char num12)read_info();/輸入賬號前先調(diào)用函數(shù)read_info讀取所以用戶信息,以便后面判/斷賬戶是否存在以及密碼是否正確system(cls);printf(nnnnn

17、nnntt請輸入您的賬號:);gets(num);now_exist(num);/調(diào)用exist函數(shù)檢查該賬號是否存在/*函數(shù)功能:讀取用戶信息*/void read_info()int i=0;FILE * fp; if (fp=fopen(user information.dat,r)=NULL)/通過文件指針來讀取用戶數(shù)據(jù)信息(不包括被凍結(jié)用戶信息)printf(It cannot open !);exit(0);while(!feof(fp)fread(&useri,sizeof(struct User),1,fp);i+;fclose(fp);/*函數(shù)功能:判斷用戶是否存在且未被凍結(jié)

18、*/void now_exist(char * num)int s=0,i;/ s是用來判斷用戶是否存在的條件,如果存在s=1,不存在s=0;char *w=input;while(1)for(i=0;i12;i+)if ( 0 = strcmp( 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)用戶輸入密碼功能。els

19、eexisted(num);/如果用戶不存在,則調(diào)用existed函數(shù),判斷是否賬號被凍結(jié)/*函數(shù)功能:判斷賬號是否被凍結(jié)*/void existed(char * num)int l = 0, i = 0;/ s是用來判斷用戶賬號是否被凍結(jié)的條件,l=1 被凍結(jié),l=0 說明用戶不存在;FILE * fp;if ( ( fp=fopen(all user information.dat,r) ) = NULL )printf(It cannot open !);/用文件指針讀取所有用戶數(shù)據(jù)(包括被凍結(jié)用戶)exit(0);while(!feof(fp)fread(&useri,sizeof(

20、struct User),1,fp);i+;while(1)for(i=0;i12;i+)if ( strcmp(num,useri.num)=0 )/判斷輸入的賬號是否存在l=1;break;elsel=0;if ( l = 1 )printf(anntt對不起,您的賬號已被凍結(jié),請與客服聯(lián)系!nnnn);exit(0);elseprintf(anntt用戶賬號不存在,請重新輸入!n);printf(nnn按任意鍵返回!);getch();system(CLS);input_num(num);/*函數(shù)功能:輸入密碼*/void input_password(char * p_word,cha

21、r * W )char password20;char ch;int i, ts = 1;/ts用來統(tǒng)計(jì)輸入密碼錯誤的次數(shù)doif (ts=100 & take%100=0 )/判斷是否為整百數(shù)并且大于100的數(shù)if (take = userf.balance)/判斷取款數(shù)是否不超過余額if ( take 9) | (new_password0d0) )/判斷密碼是否是數(shù)字system(CLS);printf(nnnnnnttt請輸入數(shù)字,謝謝!n);printf(nnnnn按任意鍵返回!n);getch();input_new_password(old_password);if (d!=6)

22、/判斷密碼是否為6位數(shù)system(CLS);printf(nnnnnnttt請輸入6位的密碼,謝謝!n);printf(nnnnn按任意鍵返回!n);getch();continue;if ( (strcmp (new_password0,0) ) = 0 )/輸入0則返回主菜單system(CLS);face();elseprintf(nnnnnntt請?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 )

23、i-; else printf(*); new_password1i = ch;i+; ch = getch(); /繼續(xù)輸入字符chnew_password1i=0;if ( (strcmp (new_password1,0) )=0 )/輸入0則返回主菜單system(CLS);face();elseif ( (strcmp (new_password0,new_password1) )=0 )/判斷輸入兩次密碼是否一致strcpy(userf.password,new_password1);save_info();/調(diào)用save_info函數(shù),存儲信息printf(nnntt密碼修改成功

24、,請牢記!);printf(nn按任意鍵返回菜單!);getch();system(CLS);face();else system(CLS);printf(您輸入的兩次密碼不同,請重新輸入!);printf(nnnnn按任意鍵返回!n);getch();while(1);/*函數(shù)功能:轉(zhuǎn)賬*/void tran_account()char other_num20;int i,c,q,tran;/c用來判斷轉(zhuǎn)賬是否繼續(xù),q用來判斷用戶行為,tran用來存儲轉(zhuǎn)賬金額system(CLS);printf(ntttttttt0.返回菜單);printf(nnnnnnttt請輸要對方的賬號: );get

25、s(other_num);/輸入對方賬號if ( strcmp(other_num,0)=0 )/輸入0返回菜單face();elseif ( strcmp(other_num,userf.num)=0 )/判斷是否為自身賬號system(CLS);printf(nnnnnnnn tt對不起,不能給自己轉(zhuǎn)賬,請重新輸入賬號!n);printf(nnn按任意鍵返回!);getch();system(CLS);tran_account();/遞歸調(diào)用elsewhile(1)for(i=0;i=100 & tran%100=0 )/判斷是否為整百/數(shù)并且大于100的數(shù)if (tran = userf

26、.balance)/取款數(shù)是否不超過余額if ( tran = 3000 )/判斷是否超過3000system(CLS);userf.balance -=tran;useri.balance +=tran;save_info();/調(diào)用save_info,存儲信息printf(nnnnnnttt 交易成功!n);printf(nnnnntt0.返回菜單ttt9.繼續(xù)轉(zhuǎn)賬);c=getch();if (c=9)/輸入9就行轉(zhuǎn)賬system(CLS);elseif (c =0)/c為0返回菜單system(CLS);face();elseprintf(輸入錯誤,請重新輸入!n);system(CL

27、S);elsesystem(CLS);printf(nnnnnntt對不起,一次最多能轉(zhuǎn)賬3000元,請重新輸入!);printf(nnnnn按任意鍵返回!n);getch();system(CLS);elsesystem(CLS);printf(nnnnnnttt您的余額不足,請重新輸入!);printf(nnnnn按任意鍵返回!n);getch();system(CLS);elsesystem(CLS);printf(nnnnnnttt請輸入正確的金額!請重新輸入!);printf(nnnnn按任意鍵返回!n);getch();system(CLS);elsesystem(CLS);fac

28、e();while(1);elseif (c=0)face();system(CLS);printf(nnnnnnttt用戶不存在!請重新輸入!);printf(nnnnn按任意鍵返回!n);getch();system(CLS);tran_account();/遞歸調(diào)用/*函數(shù)功能:查詢用戶信息*/void info_refer()system(CLS);/顯示用戶信息printf(nnnnnnnnttt姓名:%snttt賬號:%s,,userf.num);printf(nn按任意鍵返回!n);getch();system(CLS);face();void out()system(CLS);printf(nnnnnnnntttt感謝您的使用!n);printf(tttt 請取回卡!n);getch();exit(0);/*函數(shù)功能:凍結(jié)用戶賬號*/void lock()int i;FILE * fp;char random20;srand( (unsigned) time(NULL) );/隨機(jī)器for(i=0;

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論