C語言實現(xiàn)ATM自動取款機系統(tǒng)的示例代碼
基于C語言的ATM自動取款機系統(tǒng)項目設(shè)計與開發(fā)
一、ATM自動取款機系統(tǒng)功能分析與介紹
ATM自動取款機系統(tǒng)是銀行業(yè)務(wù)流程中十分重要且必備的環(huán)節(jié)之一,在銀行業(yè)務(wù)流程中起著承上啟下的作用,其重要性不言而喻。但是,目前許多銀行在具體的一此業(yè)務(wù)流程處理過程中仍然使用手工操作的方式來實施,不僅費時、費力,效率低下,而且無法達(dá)到理想的效果。
本應(yīng)用主要模擬ATM設(shè)備的常用功能,如登錄系統(tǒng)、身份驗證、余額查詢、取款、存款和修改密碼等功能。
在設(shè)計的過程中也以此為依據(jù),每一 種具體功能使用一 個或幾個函數(shù)來實現(xiàn)。
該系統(tǒng)的主要功能如下幾個要點所示:
1、顯示登入頁面功能:系統(tǒng)運行可以顯示ATM自動取款機系統(tǒng)的登入頁面,功能包括了登入和退出的兩個功能。
2、登入頁面的用戶登入功能:用戶可以用賬號,根據(jù)相關(guān)的提示登入ATM自動取款機系統(tǒng)。
3、修改密碼功能:用戶可以更改自己登入ATM自動取款機系統(tǒng)賬號的密碼功能。
4、查詢余額功能:用戶可以查詢自己賬號的余額。
5、取款功能:用戶可以將自己賬號里面存放的錢取出來。
6、存款功能 :用戶可以將自己的現(xiàn)金存入到自己的賬號中
7、返回登入頁面功能:用戶可以返回登入頁面,進(jìn)而可以選擇登入自己或其他的賬號,或者選擇退出ATM自動取款機系統(tǒng)。
二、開發(fā)ATM自動取款機系統(tǒng)的工具以及創(chuàng)建項目的過程
2.1、本項目使用Visual Studio 2019作為開發(fā)工具。
2.2、項目創(chuàng)建的過程
打開VS2019,選擇語言為C++,所屬平臺為Windows,項目類型為控制臺項目,并選擇空項目,如下圖所示
然后輸入項目的名稱和選擇項目的路徑如下圖所示
創(chuàng)建好項目后,向項目中添加ATM.h頭文件和ATM.c源文件如下所示
然后編寫相關(guān)的代碼如下
ATM.h頭文件代碼
#pragma once #include <stdio.h> // 包含相應(yīng)的頭文件 #include <stdlib.h>
ATM.c源文件代碼
#define _CRT_SECURE_NO_WARNINGS #include "ATM.h" int main() { system("color 3E"); system("pause"); return 0; }
現(xiàn)在ATM自動取款機系統(tǒng)項目就創(chuàng)建好了。
ATM自動取款機系統(tǒng)的設(shè)計與開發(fā)的步驟
一、設(shè)計登入頁面的顯示功能
在ATM.h頭文件中定義一個賬號的登入密碼和賬號登入之后的初始余額大小,如下所示
long int CODE = 123456; // 登入密碼 long int balance = 10000; // 存款的數(shù)目
然后在ATM.h頭文件中聲明一個EnterAccount函數(shù),用于用戶登入賬號的功能,并在ATM.c源文件中定義這個函數(shù)的功能。如下所示
//賬號輸入 void EnterAccount() { system("cls"); printf("*********************************\n"); printf("* 歡迎使用 ATM 自動服務(wù)系統(tǒng) *\n"); printf("* 1.登入 2.退出 *\n"); printf("*********************************\n"); printf("請選擇功能:"); }
然后在main函數(shù)中添加如下的代碼
while (1) { EnterAccount(); }
在主函數(shù)中,使用一個while死循環(huán),防止程序退出。
調(diào)試結(jié)果如下所示。
到這一步,本文已經(jīng)實現(xiàn)了登入頁面的顯示的功能
二、設(shè)計登入頁面退出功能
當(dāng)用戶在登入頁面選擇輸入2時,則會退出ATM自動取款機系統(tǒng)。在ATM.c源文件的EnterAccount函數(shù)中添加如下的代碼
long int user; int select; scanf("%d", &select); if (select == 1) { } else { system("cls"); printf("********************************\n"); printf("* 歡迎您的再次使用 *\n"); printf("* 按任意鍵將退出ATM系統(tǒng)?。。?\n"); printf("********************************\n"); system("pause"); exit(0); }
當(dāng)輸入不是1時,就會退出ATM自動取款機系統(tǒng),其調(diào)試結(jié)果如下
到這一步,本文已經(jīng)實現(xiàn)了登入頁面的退出功能
三、設(shè)計登入頁面登入和系統(tǒng)主頁面顯示的功能
當(dāng)用戶在登入頁面選擇輸入1時,則會登入ATM自動取款機系統(tǒng)。在ATM.c源文件的EnterAccount函數(shù)中添加如下的代碼
3.1登入用戶賬號功能
if (select == 1) { printf("請輸入卡號:"); scanf("%d", &user); if (user != 123456) { printf(" 賬戶不存在,請從新輸入!??!\n"); system("pause"); EnterAccount(); } else { EnterPassword(); } }
根據(jù)輸入給user 值是否等于123456來進(jìn)行是否進(jìn)入輸入密碼的操作,若輸入的用戶賬號不對,則要求重新輸入。若輸入的賬號符合要求,則進(jìn)入輸入密碼的頁面
3.2登入用戶密碼功能
在在ATM.h頭文件中聲明一個EnterPassword函數(shù),用于用戶輸入密碼的功能,并在ATM.c源文件中定義這個函數(shù)的功能。如下所示
//密碼輸入 void EnterPassword() { long int code; int temp = 3; printf("********************************\n"); printf("* 請輸入密碼 *\n"); printf("********************************\n"); printf("請輸入密碼:"); scanf("%d", &code); while (code != CODE) { temp--; if (temp == 0) { printf("********************************\n"); printf("* 您已經(jīng) 3 次輸入密碼 *\n"); printf("* 按任意鍵將返回登入系統(tǒng)!??!*\n"); printf("********************************\n"); system("pause"); EnterAccount(); } printf("********************************\n"); printf("* 密碼錯誤,請重新輸入 *\n"); printf("* 您還有 "); printf("%d", temp); printf(" 次機會 *\n"); printf("********************************\n"); printf("請輸入密碼:"); scanf("%d", &code); } Menu(); }
其中有三次機會給用戶輸入密碼,若三次輸入密碼都不對,則進(jìn)入ATM自動取款機系統(tǒng)的登入頁面,否則進(jìn)入系統(tǒng)機的主頁面。
3.3主頁面顯示功能
在在ATM.h頭文件中聲明一個Menu函數(shù),用于ATM自動取款機系統(tǒng)主頁面的功能,并在ATM.c源文件中定義這個函數(shù)的功能。如下所示
//基本操作界面 void Menu() { int select = 0; system("cls"); printf("********************************\n"); printf("* 歡迎來到ATM自動取款系統(tǒng) *\n"); printf("* 請選擇一下業(yè)務(wù) *\n"); printf("* 1.修改密碼 *\n"); printf("* 2.查詢余額 *\n"); printf("* 3.取款 *\n"); printf("* 4.存款 *\n"); printf("* 5.返回 *\n"); printf("********************************\n"); printf("請選擇功能:"); scanf("%d", &select); switch (select) { case 1: pwModify(); // 修改密碼 break; case 2: balanceQuery(); // 查詢余額 break; case 3: moneyTakeOut(); // 取款 break; case 4: moneySave(); // 存款 break; case 5: returnEnter(); // 返回 break; default: printf("error\n"); } }
根據(jù)用戶輸入的數(shù)字賦值給變量select,然后使用Switch語句進(jìn)行判據(jù)程序應(yīng)該進(jìn)入哪一個函數(shù),并執(zhí)行相應(yīng)的函數(shù)功能。
登入調(diào)試結(jié)果如下
用戶賬號不對時
用戶賬號符合,但是密碼輸入錯誤時
用戶賬號和密碼都符合時
到這一步,本文已經(jīng)實現(xiàn)了登入頁面的登入和系統(tǒng)主頁面顯示的功能
四、設(shè)計主頁面修改用戶密碼的功能
在ATM.h頭文件中聲明一個pwModify函數(shù),用于用戶修改用戶登入密碼的功能,并在ATM.c源文件中定義這個函數(shù)的功能。如下所示
//修改密碼 void pwModify() { long int mm1, mm2, mm3; char temp; system("cls"); printf(" 密碼修改 \n"); printf("輸入舊密碼:\n"); scanf("%d", &mm1); while (mm1 != CODE) // 判決舊密碼是否輸入有誤 { printf("舊密碼錯誤\n"); printf("請重新輸入?。。n"); system("pause"); printf("舊密碼:"); scanf("%d", &mm1); } printf("\n輸入新密碼: "); scanf("%d", &mm2); if (mm1 == mm2) // 判斷舊密碼與輸入的新密碼是否相同 { printf("\n輸入的新密碼與舊密碼一樣?。?!\n"); printf("重新輸入新密碼\n"); printf("\n輸入新密碼: "); scanf("%d", &mm2); } printf("\n確認(rèn)新密碼:"); scanf("%d", &mm3); if (mm2 != mm3) // 驗證輸入的新密碼 { printf("確認(rèn)密碼不一致\n"); printf("請重新輸入?。?!\n"); system("pause"); pwModify(); } if (mm2 < 100000) // 防止輸入的密碼過于短 { printf("密碼必須大于或等于6位數(shù)\n"); printf("請重新輸入!?。n"); system("pause"); pwModify(); } temp = (char)mm2 % 111111; if (temp == 0) // 防止輸入的密碼過于簡單 { printf("密碼過于簡單\n"); printf("請重新輸入?。?!\n"); system("pause"); pwModify(); } CODE = mm2; // 更新變量的值,即修改密碼成功 system("cls"); printf(" 修改密碼操作成功 \n"); printf(" 按任意鍵返回主頁面\n"); system("pause"); Menu(); // 返回系統(tǒng)的主頁面 }
其調(diào)試結(jié)果如下
輸入舊密碼不對時
確認(rèn)密碼不對時
修改密碼成功時
到這一步,本文已經(jīng)實現(xiàn)了主頁面修改用戶密碼的功能
五、設(shè)計主頁面查詢用戶余額的功能
在ATM.h頭文件中聲明一個balanceQuery函數(shù),用于用戶查詢自己賬戶的余額功能,并在ATM.c源文件中定義這個函數(shù)的功能。如下所示
//余額查詢 void balanceQuery() { system("cls"); printf(" 您的余額為 \n"); printf(" %d元 \n", balance); printf(" 按任意鍵返回主頁面\n"); system("pause"); Menu(); }
其調(diào)試結(jié)果如下所示
到這一步,本文已經(jīng)實現(xiàn)了主頁面查詢用戶余額的功能
六、設(shè)計主頁面用戶取款的功能
在ATM.h頭文件中聲明一個moneyTakeOut函數(shù)和takeOutJudge函數(shù),用于用戶取出自己賬戶中的錢的功能,并在ATM.c源文件中定義這兩個函數(shù)的功能。如下所示
// 取款 void moneyTakeOut() { long int temp; int select = 0; system("cls"); printf("********************************\n"); printf("* 請選擇您要取款的金額 *\n"); printf("* 1.100 2.200 *\n"); printf("* 3.500 4.800 *\n"); printf("* 5.1000 6.其它 *\n"); printf("* *\n"); printf("* 7.返回 8.返回 *\n"); printf("********************************\n"); printf(" 請輸入選擇序號:"); scanf("%d", &select); switch (select) { case 1: takeOutJudge(100); break; case 2: takeOutJudge(200); break; case 3: takeOutJudge(500); break; case 4: takeOutJudge(800); break; case 5: takeOutJudge(1000); break; case 6: printf(" 請輸入您要取款的金額:"); scanf("%d", &temp); takeOutJudge(temp); break; case 7: Menu(); break; } } void takeOutJudge(int takeOutMoney) { if (takeOutMoney > balance) { printf(" 余額不足! \n"); printf(" 請重新操作 \n"); printf(" 按任意鍵返回主頁面\n"); system("pause"); Menu(); } if (takeOutMoney > 500000) { printf(" 每次取款不能超過 50000 元 \n"); printf(" 請重新操作 \n"); printf(" 按任意鍵返回主頁面\n"); system("pause"); Menu(); } balance = balance - takeOutMoney; printf(" 取款操作成功 \n"); printf(" 按任意鍵返回主頁面\n"); system("pause"); Menu(); }
在moneyTakeOut函數(shù)中可以顯示取出錢的數(shù)目,并進(jìn)行選擇,然后調(diào)用takeOutJudge函數(shù)對賬戶余額進(jìn)行判斷是否充足等功能。
其調(diào)試結(jié)果如下所示
取了兩次款,其調(diào)試結(jié)果正確。
到這一步,本文已經(jīng)實現(xiàn)了主頁面查詢用戶余額的功能
七、設(shè)計主頁面用戶存款的功能
在ATM.h頭文件中聲明一個moneySave函數(shù),用于用戶將自己的現(xiàn)金存入系統(tǒng)的賬戶中的功能,并在ATM.c源文件中定義這兩個函數(shù)的功能。如下所示
// 存款 void moneySave() { long int tempMoney; system("cls"); printf("請輸入存放的人民幣:"); scanf("%d", &tempMoney); while (tempMoney < 0) { printf("輸入的存款數(shù)據(jù)不能為負(fù)數(shù)?。?!\n"); printf("請重新輸入存放的人民幣:"); scanf("%d", &tempMoney); } balance = balance + tempMoney; printf(" 存款操作成功 \n"); printf(" 按任意鍵返回主頁面\n"); system("pause"); Menu(); }
可以對輸入的數(shù)據(jù)是否合法進(jìn)行有效的判斷。
其調(diào)試結(jié)果如下所示
到這一步,本文已經(jīng)實現(xiàn)了主頁面用戶存款的功能。
八、返回登入頁面的功能
在ATM.h頭文件中聲明一個returnEnter函數(shù),用于用戶返回系統(tǒng)登入頁面的功能,并在ATM.c源文件中定義這兩個函數(shù)的功能。如下所示
//返回登入頁面 void returnEnter() { system("cls"); printf("********************************\n"); printf("* 歡迎您的再次使用 *\n"); printf("* 按任意鍵將返回登入頁面?。?!*\n"); printf("********************************\n"); system("pause"); EnterAccount(); }
調(diào)試結(jié)果如下
總結(jié)
到這里我們完成了ATM自動取款機系統(tǒng)的設(shè)計與開發(fā)。在設(shè)計的工程中,我們主要使用了C語言的函數(shù),while循環(huán)、system庫函數(shù)等知識。本文的項目可以讓剛剛?cè)腴T的小白C語言選手可以很快掌握C語言編程的基本編程能力。
以上就是C語言實現(xiàn)ATM自動取款機系統(tǒng)的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于C語言ATM自動取款機系統(tǒng)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C語言復(fù)數(shù)的加減及輸出結(jié)構(gòu)體
大家好,本篇文章主要講的是C語言復(fù)數(shù)的加減及輸出結(jié)構(gòu)體,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2022-02-02C語言中數(shù)據(jù)如何存儲進(jìn)內(nèi)存揭秘
使用編程語言進(jìn)行編程時,需要用到各種變量來存儲各種信息。變量保留的是它所存儲的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個變量時,就會在內(nèi)存中保留一些空間。您可能需要存儲各種數(shù)據(jù)類型的信息,操作系統(tǒng)會根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲什么2022-08-08C++線程優(yōu)先級SetThreadPriority的使用實例
這篇文章主要介紹了C++線程優(yōu)先級SetThreadPriority的使用實例,較為詳細(xì)的講述了C++線程及其優(yōu)先級的用法,需要的朋友可以參考下2014-10-10c++11之std::async 和std::thread的區(qū)別小結(jié)
std::async和std::thread都是C++11中提供的線程庫,它們都可以用于創(chuàng)建新線程,本文主要介紹了c++11之std::async 和std::thread的區(qū)別小結(jié),感興趣的可以了解一下2024-02-02