ATM取款機模擬系統 程序設計 報告(完成版)_第1頁
ATM取款機模擬系統 程序設計 報告(完成版)_第2頁
ATM取款機模擬系統 程序設計 報告(完成版)_第3頁
ATM取款機模擬系統 程序設計 報告(完成版)_第4頁
ATM取款機模擬系統 程序設計 報告(完成版)_第5頁
已閱讀5頁,還剩34頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、信息工程與自動化學院 計算機科學與技術專業 C程序設計語言課程設計 目錄三、編程題部分(銀行ATM模擬存取系統)1、設計內容第2頁2、設計 第2頁(1)數據分析 第2頁(2)程序流程分析 第3頁3、編碼及調試 第13頁4、程序運行截圖 第32頁四、總結與體會 第37頁五、參考文獻 第39頁三、編程題部分1、設計內容完成一個管理類的綜合型設計:銀行ATM模擬存取系統。要求學生進行數據結構的設計、對函數進行模塊化結構化設計、并靈活運用數組、結構體、指針、文件等多種數據類型設計開發系統。通過寫程序,學生應掌握用計算機程序設計語言解決實際問題的方法、步驟。該系統應該具有以下功能:1)賬戶管理功能a)

2、開戶:完成賬戶注冊的功能。即輸入賬戶的相關信息。要求賬戶號長度12位,密碼長度不得低于6位,必須使用暗碼,賬戶信息保存到數組中,賬戶信息最后保存到相關文件中;b) 賬戶登錄:輸入賬戶、密碼,驗證是否能夠登錄該系統;c)密碼修改:輸入兩次相同的密碼方可修改。2)賬務管理功能a) 存款:每筆存款金額大于0元小于等于1000元,以50元為基本單位。需記錄交易日期和時間。b) 取款:每筆取款金額大于等于100元小于等于2000元,以50元為基本單位。需記錄交易日期和時間。c) 轉賬:每筆轉賬金額大于等于100元小于等于5000元。需記錄交易日期和時間。3)查詢功能a) 存款記錄查詢b) 取款記錄查詢c

3、) 轉賬記錄查詢d) 余額查詢4)文件功能及其它功能:數據都應保存在相關文件中。2、設計(1) 數據分析(描述定義的各主要變量的作用及意義);char zhanghao16;/*用戶賬號*/char xingming9;/*用戶姓名*/char mima7;/*賬戶密碼*/char shengfenzheng19;/*用戶身份證號*/float yue;/*賬戶余額*/char kaihushijian50;/*開戶時間*/ char zhanghao16;/*交易的賬號*/char jiaoyishijian50;/*交易時間*/char leixing5;/*交易類型*/float jia

4、oyijine;/*交易金額*/float jiaoyiyue;/*交易后的余額*/char duifangzhanghao12;/*交易時的對方賬號*/ int zhanghuxuhao=0,jiaoyixuhao=0,dangqianxiabiao=0,duifangzhanghuxiabiao=0;/*賬戶序號,交易序號,當前登錄的賬戶下標,轉賬時對方的賬戶下標*/注冊函數: int baiwei,shiwei,gewei,len;/*定義賬號的后三位*/char mima27;/*注冊時第二次輸入的密碼*/登錄函數:char zhanghao16,mima7;/*登錄時輸入的賬號和密碼

5、*/裝載和保存文件函數: FILE *fp;/*定義文件指針*/ char wenjianming13;/*定義輸入的文件名*/存、取款,轉賬函數: float jine;/*輸入的存、取款,轉賬金額*/char t30;/*把取得的存、取款,轉賬時間賦給該數組*/轉賬函數:char duifangzhanghao16,c;/*輸入的對方賬號賦給該數組。在判斷是否繼續時,把輸入的字符Y或N賦給c,以便讀入選擇*/修改密碼函數:char mima7,xinmima17,xinmima27;/*舊密碼,第一次輸入的新密碼,第二次輸入的新密碼*/(2)程序流程分析(描述主程序的基本構成、函數設計、函

6、數的調用關系、各部分的流程圖等。)主程序的基本構成:struct Zhanghu;/*賬戶的結構體*/typedef struct Jiaoyi;/*交易記錄的結構體*/int menu(); /*主菜單函數*/void zhuce(); /*主菜單功能函數注冊函數*/void denglu(); /*主菜單功能函數登錄函數*/void zhuangzai(); /*主菜單功能函數裝載數據函數*/void baocun(); /*主菜單功能函數保存數據函數*/int denglu_menu(); /*登錄菜單函數*/void cunkuan(); /*登錄菜單功能函數存款函數*/void qu

7、kuan(); /*登錄菜單功能函數取款函數*/void zhuanzhang(); /*登錄菜單功能函數轉賬函數*/void chaxun(); /*登錄菜單功能函數查詢函數*/void xiugaimima(); /*登錄菜單功能函數修改密碼函數*/int chaxun_menu(); /*查詢菜單函數*/void chaxun_yue(); /*查詢菜單功能函數查詢余額函數*/void chaxun_mingxi(); /*查詢菜單功能函數查詢明細函數*/void chaxun_cunkuan(); /*查詢菜單功能函數查詢存款函數*/void chaxun_qukuan(); /*查詢

8、菜單功能函數查詢取款函數*/void chaxun_zhuanzhang();/*查詢菜單功能函數查詢轉賬函數*/函數設計:本程序在函數設計上采用結構化程序設計方法,自頂向下,逐步根據功能設計函數,逐步細化設計,由淺入深,模塊化設計,保證了程序的可讀性和質量。先設計主菜單(一級菜單)的功能函數,再設計二級菜單的功能函數,自頂而下,逐步細化。如圖示意:主菜單功能注冊登錄裝載保存(頂層設計)怎樣注冊怎樣保存怎樣讀入查詢轉賬取款存款(第二層設計)二級菜單(第三層設計)函數調用關系:strcpyzhucestrlenstrcmpstrcmpcunkuanstrcmpqukuandenglustrcpy

9、zhuangzhangchaxun_menumaindenglu_menuchaxun_yuechaxunchaxun_mingxixiugaimimachaxun_cunkuanfopenchaxun_qukuanfscanfchaxun_zhuanzhangzhuangzaifgetsfopenfclosefprintbaocunfclosemenu注冊函數的流程圖:開始定義數據變量,調用時間函數,設置賬號的隨機分配輸入姓名輸入兩次密碼兩次密碼相同 N Y輸入身份證號號位數既不為15也不為18 Y N輸入存款金額輸出賬戶和第一次交易的數據清單結束登錄函數的流程圖:開始定義個變量,i=0輸入

10、賬號i<zhanghuxuhao N Y輸入的賬號和已注冊的某一賬號相同i+輸入密碼密碼錯誤 N密碼輸入次數為3 Y進入登陸界面執行switch功能語句 N Yreturn;輸入選項數字數字為0 N根據選項執行語句退出 Y修改密碼函數的流程圖:輸入賬號輸入舊密碼密碼正確return; N Y輸入兩次新密碼 N次數為3兩次密碼輸入相同 N Yreturn; Y 密碼修改成功結束開始 開始 system("cls");結束 返回 存款函數的流程圖: 輸入存款金額jinejine%50!=0|jine<=0jine%50!=0|jine<=0 Y N retur

11、n;調用時間函數調用strcpy函數復制賬號、類型、時間。計算余額 存款成功 輸出存款的交易記錄取款函數的流程圖: 結束 返回 開始 system("cls"); 輸入取款金額jine取款金額大于賬戶余額 Y N輸出提示, return;jine%50!=0| jine<=0 N Y調用時間函數return;調用strcpy函數復制賬號、類型、時間。計算余額 輸出存款的交易記錄轉賬函數的流程圖:開始輸入對方賬號是否與當前登錄賬號相同return; Y Ni<zhanghuxuhaoreturn; N Y輸入的賬號與已注冊的某一賬號相同i=zhanghuxuhao

12、 Y輸出對方賬號的姓名 Ni+;是否繼續 Nreturn; Y輸入轉賬金額jinejine大于賬戶余額 Yreturn; Njine<=0 Y N顯示警告信息是否繼續return; N執行轉賬語句 Y裝載函數的流程圖:輸出轉賬交易記錄開始結束輸入要讀入數據的文件名找不到該文件名 Y返回 Ni<zhanghuxuhao Ni<jiaoyixuhao N Y從文件中讀入賬戶的數據 Y從文件中讀入交易記錄的數據信息 i+i+關閉文件結束保存函數的流程圖:開始輸入要保存數據的文件名新建該文件,若打不開文件 Y返回 Ni<zhanghuxuhao Ni<jiaoyixuha

13、o N Y把賬戶的數據輸出到文件 Y把交易記錄的數據信息輸出到保存文件 i+i+關閉文件結束3、編碼及調試#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>#include<conio.h>#define ZHANGHUSHU 100/*賬戶的結構體*/struct Zhanghuchar zhanghao16;/*用戶賬號*/char xingming9;/*用戶姓名*/char mima7;/*賬戶密碼*/char shengfenzheng1

14、9;/*用戶身份證號*/float yue;/*賬戶余額*/char kaihushijian50;/*開戶時間*/;typedef struct /*交易記錄的結構體*/char zhanghao16;/*交易的賬號*/char jiaoyishijian50;/*交易時間*/char leixing5;/*交易類型*/float jiaoyijine;/*交易金額*/float jiaoyiyue;/*交易后的余額*/char duifangzhanghao12;/*交易時的對方賬號*/ Jiaoyi;struct Zhanghu zhanghu100;/*定義賬戶的結構體數組,可以注冊1

15、00個賬戶*/int zhanghuxuhao=0,jiaoyixuhao=0,dangqianxiabiao=0,duifangzhanghuxiabiao=0;/*賬戶序號,交易序號,當前登錄的賬戶下標,轉賬時對方的賬戶下標*/Jiaoyi jiaoyi1000;/*定義交易記錄的結構體數組,可以保存1000條交易記錄*/int menu(); /*聲明 主菜單 函數*/void zhuce(); /*聲明 注冊 函數*/void denglu(); /*聲明 登錄 函數*/void zhuangzai(); /*聲明 裝載數據 函數*/void baocun(); /*聲明 保存數據 函

16、數*/int denglu_menu(); /*聲明 登錄菜單 函數*/void cunkuan(); /*聲明 存款 函數*/void qukuan(); /*聲明 取款 函數*/void zhuanzhang(); /*聲明 轉賬 函數*/void chaxun(); /*聲明 查詢 函數*/void xiugaimima(); /*聲明 修改密碼 函數*/int chaxun_menu(); /*聲明 查詢菜單 函數*/void chaxun_yue(); /*聲明 查詢余額 函數*/void chaxun_mingxi(); /*聲明 查詢明細 函數*/void chaxun_cunk

17、uan(); /*聲明 查詢存款 函數*/void chaxun_qukuan(); /*聲明 查詢取款 函數*/void chaxun_zhuanzhang();/*聲明 查詢轉賬 函數*/void main()/*主函數*/ system("color 1F");/*設置運行界面的背景顏色為藍色*/printf("nnnnnnnnttt歡迎使用ATM終端機!nnnttt"); system("pause");/*暫停功能*/system("cls");/*清屏*/for(;)/*空循環語句*/ switch(m

18、enu() /*主菜單選擇判斷*/ case 1:zhuce();/*調用注冊函數*/ printf("ttt"); break; case 2:denglu();/*調用登錄函數*/ printf("ttt"); break; case 3:zhuangzai();/*調用裝載數據的函數*/ printf("ttt"); break; case 4:baocun();/*調用保存數據的函數*/ printf("ttt"); break; case 0: printf("ttt歡迎使用ATM終端機管理系統

19、。謝謝!n"); /*結束程序*/ printf("ttt"); system("pause"); exit(0); int menu() /*定義主菜單函數*/ char c; do system("cls"); /*每次選擇運行前清屏*/ printf("nnnntt-n"); printf("tt *ATM終端機管理系統主菜單*n"); /*主菜單選擇*/ printf("tt-n"); printf("tt *| 1. 注冊|n"); p

20、rintf("tt *| 2. 登錄|n"); printf("tt *| 3. 裝載數據|n"); printf("tt *| 4. 保存數據 |n"); printf("tt *| 0. 退出 |n"); printf("tt-n"); printf("tt*_*_*_*_*_*_*_*_*_*_*n"); printf("tt-n"); printf("ttt請作出選擇(0-4):"); c=getchar(); /*讀入選擇*/

21、 while(c<'0'|c>'4'); return(c-'0'); /*c變為空后返回重新選擇*/*定義主菜單里的各功能函數函數*/void zhuce() /*定義注冊函數*/int baiwei,shiwei,gewei,len;/*定義賬號的后三位*/char mima27;/*注冊時第二次輸入的密碼*/char t30;/*開戶時間*/int i,j=0;time_t rawtime;struct tm *timeinfo;time(&rawtime);/*調用時間函數,取得開戶時間*/timeinfo=local

22、time(&rawtime);strcpy(t,asctime(timeinfo);for(i=0;i<strlen(t);i+)if(ti='n')ti='0'break;strcpy(zhanghuzhanghuxuhao.zhanghao,"625301234567");/*復制賬號的前12位*/baiwei=zhanghuxuhao/100;shiwei=zhanghuxuhao/10%10;gewei=zhanghuxuhao%10;zhanghuzhanghuxuhao.zhanghao12=baiwei+'

23、0'zhanghuzhanghuxuhao.zhanghao13=shiwei+'0'zhanghuzhanghuxuhao.zhanghao14=gewei+'0'zhanghuzhanghuxuhao.zhanghao15='0' system("cls");/*運行前清屏*/ printf("nnnttt注冊功能ZHUCE GONGNENGnnn");printf("tt請輸入姓名:");fflush(stdin);/*消耗輸入字符后的回車操作*/scanf("%

24、s",zhanghuzhanghuxuhao.xingming);doprintf("tt請輸入6位數密碼:");fflush(stdin);scanf("%s",zhanghuzhanghuxuhao.mima);len=strlen(zhanghuzhanghuxuhao.mima);if(len!=6)/*判斷密碼是否為6位*/printf("tt您的密碼不是6位數!");system("pause"); return; /此處用字符串長度函數來判斷密碼的位數printf("tt請再次輸入

25、密碼:");fflush(stdin);scanf("%s",mima2);if(strcmp(zhanghuzhanghuxuhao.mima,mima2)!=0)/*判斷兩次密碼輸入是否相同*/ j+;printf("tt您的密碼輸入錯誤!您還有%d次機會輸入密碼!n",3-j); if(j=3)/*密碼輸入錯誤不得超過三次*/system("pause");return;while (strcmp(zhanghuzhanghuxuhao.mima,mima2)!=0); doprintf("tt請輸入身份證號

26、:");fflush(stdin);scanf("%s",zhanghuzhanghuxuhao.shengfenzheng);len=strlen(zhanghuzhanghuxuhao.shengfenzheng);if(len!=18&&len!=15)/*判斷身份證號位數是否為15位或18 位*/printf("身份證號錯誤!請輸入15位或18位身份證號!n");while(len!=18&&len!=15);printf("tt請輸入存入金額:");fflush(stdin);sca

27、nf("%f",&zhanghuzhanghuxuhao.yue); if(int)zhanghuzhanghuxuhao.yue%50!=0)/*存款金額必須為50的整數倍*/ printf("本終端機只接受50元或100元面值的存款!");system("pause");return; strcpy(zhanghuzhanghuxuhao.kaihushijian,t);/*復制開戶時間*/ strcpy(jiaoyijiaoyixuhao.zhanghao,zhanghuzhanghuxuhao.zhanghao);/*

28、/strcpy(jiaoyijiaoyixuhao.leixing,"存");/*復制交易類型*/strcpy(jiaoyijiaoyixuhao.jiaoyishijian,t);/*復制交易時間*/jiaoyijiaoyixuhao.jiaoyijine=zhanghuzhanghuxuhao.yue;/*第一次交易的賬戶余額值賦給交易經額的值*/ jiaoyijiaoyixuhao.jiaoyiyue=zhanghudangqianxiabiao.yue;/*第一次交易的賬戶余額值賦給交易余額的值*/ printf("ntt開戶成功!t");sys

29、tem("pause");/*暫停功能*/輸出賬戶第一次交易的數據清單printf("nn賬號tt交易類型t交易金額t余額tt交易時間n");printf("%st",zhanghuzhanghuxuhao.zhanghao);printf(" %s",jiaoyijiaoyixuhao.leixing); printf("tt%.2f",zhanghuzhanghuxuhao.yue); printf("t %.2f",zhanghuzhanghuxuhao.yue); p

30、rintf(" %stnn",zhanghuzhanghuxuhao.kaihushijian);zhanghuxuhao+;/*賬戶序號加一*/jiaoyixuhao+;/*交易序號加一*/printf("tttt"); system("pause");/*暫停*/void denglu() /*定義登錄函數*/char zhanghao16,mima7;/*登錄時輸入的賬號和密碼*/int i=0,j=0;system("cls");/*清屏*/ printf("nnnttt登錄功能DENGLU GO

31、NGNENGnnn");/*進入登錄得功能界面*/printf("tt輸入賬號:");scanf("%s",zhanghao);/*輸入賬號*/for( i=0;i<zhanghuxuhao;i+)/*在已注冊的賬號中依次尋找該賬號*/if(strcmp(zhanghao,zhanghui.zhanghao)=0)dangqianxiabiao=i;/*若找到,則跳出循環*/ break;if(i=zhanghuxuhao)/*注冊的賬號中沒輸入的賬號*/printf("tt當前賬號不存在!");system(&quo

32、t;pause");return;do printf("ntt輸入密碼:"); scanf("%s",mima); if(strcmp(mima,zhanghui.mima)!=0) j+;printf("tt您的密碼輸入錯誤!您還有%d次機會輸入密碼!nn",3-j); if(j=3)/*密碼輸入錯誤不得超過三次*/ system("pause");return; while(strcmp(mima,zhanghui.mima)!=0); for(;)/*空循環語句*/ switch(denglu_me

33、nu() /*登陸界面選擇判斷*/ case 1:cunkuan();/*調用存款函數*/ printf("ttt"); break; case 2:qukuan();/*調用取款函數*/ printf("ttt"); break; case 3:zhuanzhang();/*調用轉賬函數*/ printf("ttt"); break; case 4:chaxun();/*調用查詢函數*/ printf("ttt"); break;case 5:xiugaimima();/*調用修改密碼函數*/ printf(&q

34、uot;ttt"); break; case 0: return;/*返回上一級菜單界面*/ int denglu_menu()/*定義登錄菜單函數*/char c; do system("cls"); /*每次選擇運行前清屏*/ printf("nnntt *歡迎進入 登錄界面!*nn"); /*登錄界面菜單選擇*/ printf("tt *| 1. 存款|n"); printf("tt *| 2. 取款|n"); printf("tt *| 3. 轉賬|n"); printf(&q

35、uot;tt *| 4. 查詢 |n"); printf("tt *| 5. 修改密碼 |n"); printf("tt *| 0. 返回 |n"); printf("tt*n"); printf("ttt請作出選擇(0-5):"); c=getchar(); /*讀入選擇*/ while(c<'0'|c>'5'); return(c-'0'); /*c變為空后返回重新選擇*/void zhuangzai() /*定義裝載函數*/ FILE *f

36、p;/*定義文件指針*/int i;char wenjianming13;/*定義輸入的文件名*/printf("tt請輸入打開的文件名(文件名.txt):");fflush(stdin);scanf("%s",wenjianming);/*輸入要讀入數據的文件名*/if (fp=fopen(wenjianming,"r")=NULL)/*找不到輸入的文件名*/printf("tt無法打開該文件!");system("pause");return;fscanf(fp,"%dn"

37、;,&zhanghuxuhao);fscanf(fp,"賬號tt姓名t密碼t身份證號t余額t開戶時間n");for(i=0;i<zhanghuxuhao;i+)/*依次從文件讀入注冊賬戶的信息*/fscanf(fp,"%16s%9s%7s%19s%12f",zhanghui.zhanghao,zhanghui.xingming,zhanghui.mima,zhanghui.shengfenzheng,&zhanghui.yue);fgets(zhanghui.kaihushijian,30,fp);fscanf(fp,"n

38、");fscanf(fp,"%dn",&jiaoyixuhao);fscanf(fp,"賬號tt交易時間ttt交易類型 交易金額 交易余額t對方賬號n");for(i=0;i<jiaoyixuhao;i+)/*依次從文件讀入交易記錄的信息*/fscanf(fp,"%16s",jiaoyii.zhanghao);fgets(jiaoyii.jiaoyishijian,30,fp);fscanf(fp,"%5s%12f%12f",jiaoyii.leixing,&jiaoyii.jiao

39、yijine,&jiaoyii.jiaoyiyue);fgets(jiaoyii.duifangzhanghao,16,fp);fscanf(fp,"n");fclose(fp);/*關閉文件*/printf("ttt讀入成功!nn");printf("ttt"); system("pause");void baocun() /*定義保存函數*/FILE *fp;/*文件指針*/int i;char wenjianming13;printf("tt請輸入文件名(輸入格式為:文件名.txt):&qu

40、ot;);fflush(stdin);scanf("%s",wenjianming);/*輸入要保存的文件名*/if(fp=fopen(wenjianming,"w")=NULL)printf("nttt無法打開文件!nttt");system("pause");return;fprintf(fp,"%dn",zhanghuxuhao);fprintf(fp,"賬號tt姓名 t密碼t身份證號ttt余額ttt開戶時間n");for(i=0;i<zhanghuxuhao;i

41、+)/*把賬戶信息依次輸出到指定文件*/fprintf(fp,"%-16s%-9s%-7s%-19s%-12.2f%-30sn",zhanghui.zhanghao,zhanghui.xingming,zhanghui.mima,zhanghui.shengfenzheng,zhanghui.yue,zhanghui.kaihushijian);fprintf(fp,"%dn",jiaoyixuhao);fprintf(fp,"賬號tt交易時間ttt交易類型t交易金額t交易余額tt對方賬號n");for(i=0;i<jiaoyi

42、xuhao;i+)/*把交易記錄的信息依次輸出到指定文件*/fprintf(fp,"%-16s%-30s%-5s%-12.2f%-12.2f%-16sn",jiaoyii.zhanghao, jiaoyii.jiaoyishijian, jiaoyii.leixing, jiaoyii.jiaoyijine,jiaoyii.jiaoyiyue,jiaoyii.duifangzhanghao);fclose(fp);/*關閉文件*/printf("tttt保存成功!n");printf("ntttt");system("pau

43、se");void cunkuan() /*定義存款函數*/float jine;/*輸入的存款金額*/char t30;/*把取得的存款時間賦給該數組*/int i;time_t rawtime;struct tm *timeinfo;system("cls");/*清屏*/ printf("nnnttt存款功能CUNKUAN GONGNENGnnn");/*進入存款功能界面*/printf("tt本終端機只接收50元或100元幣值人民幣!nnttt請輸入存款金額:");/*提示信息*/scanf("%f",&jine);/*輸入存款金額*/if(int)jine%50!=0|jine<=0)/*存款金額必須為50的整數倍且為正數*/printf("ntt請輸入面值為50或100的存款金額!請勿輸入負數或0!nttt"); system(&qu

溫馨提示

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

評論

0/150

提交評論