本文目錄一覽:
- 1、怎樣用c語言編寫ATM系統
- 2、編寫一個關於「ATM系統」c語言程序。 要求,1功能:存錢,取錢,轉賬,修改密碼,只要現實中有的都得有,
- 3、用C語言編寫一個自動存取款機模擬
- 4、用c語言編寫ATM的程序,實現開戶、存款、取款、查詢餘額、轉賬的業務邏輯。
怎樣用c語言編寫ATM系統
真正的ATM系統不可能只是用C語言編寫的,它應該是一套完整獨立的系統,核心代碼更機密,不會輕易的泄露。
C語言可以寫一個類似於ATM系統的框架,用以模擬ATM機上的各種操作。
框架代碼如下:
#includeiostream.h
#includestdio.h
int main()
{
int choice =- 1;
while(1) {
printf(“請選擇\n1.login\t2.regist\n”);
scanf(“%d”, choice);
switch(choice) {
case 1:
login();
break;
case 2:
regist();
break;
default:
printf(“輸入有誤,重新輸入\n”);
break;
}
}
return 0;
}
void login() {
printf(“IN LOGIN\n”);
int flag = -1;
int X = -1;
printf(“輸入賬戶和密碼\n”);
flag = search();
if(falg == 1) {
printf(“存在,進入主頁面\n”);
X = menu();
if(X == 1)
return;
}
else if(flag == 0) {
printf(“賬戶或密碼錯誤\n”);
return;
}
}
int regist() {
printf(“IN REGIST\n”);
return 1;
}
int menu() {
printf(“IN MENU\n”);
int key = -1;
int N = -1;
while(1) {
printf(“請選擇業務:1.refer\t2.deposit\t3.withdraw\t4.transfer\t5.resetPW\t6.退出\n”);
scanf(“%d”, key);
switch(key) {
case 1:
N = refer();
break;
case 2:
N = deposit();
break;
case 3:
N = withdraw();
break;
case 4:
N = transfer();
break;
case 5:
N = resetPW();
break;
case 6:
N = 6;
return 1;
break;
default:
printf(“輸入有誤,重新選擇:\n”);
break;
}
if(N%2 == 0) {
printf(“Error!\n”);
}
}
}
int refer() {
printf(“IN REFER\n”);
//輸出餘額
return 1;
}
int deposit() {
printf(“IN DEPOSIT\n”);
//存錢
return 3;
}
int withdraw() {
printf(“IN WITHDRAW\n”);
//取錢
return 5;
}
int transfer() {
ptintf(“IN TRANSFER\n”);
//轉賬
return 7;
}
int resetPW() {
prtintf(“IN RESETPW\n”);
//重設密碼
return 9;
}
編寫一個關於「ATM系統」c語言程序。 要求,1功能:存錢,取錢,轉賬,修改密碼,只要現實中有的都得有,
下面的是我自己寫的一個, 裡面很多細節都沒有進行細緻的處理, 只是粗略的實現了基本的功能
後面有我的測試數據, 希望能有幫助
#include stdio.h
#include stdlib.h
#include string.h
typedef struct _account
{
char * UID;
char * pwd;
int balance;
char * UName;
}ACCOUNT, * PACCOUNT;
void InitAccount(PACCOUNT pA); // 初始化賬戶
void showAccount(ACCOUNT A, bool flag); // 顯示賬戶信息, flag表示是否顯示全部信息. 如果是true則需要輸入用戶密碼
bool deposite(PACCOUNT pA); // 存錢, 內部需要密碼驗證並輸入金額
bool withDraw(PACCOUNT pA); // 取錢, 內部需要密碼驗證並輸入金額
bool transfer(PACCOUNT pA, PACCOUNT pB); // 轉賬, 需要密碼驗證, 並輸入金額
bool conduct(PACCOUNT pA, int chose, PACCOUNT pB); // 處理, 就是根據菜單項處理用戶的操作選擇
void modifyPwd(PACCOUNT pA); // 更改用戶密碼
bool Authentication(PACCOUNT pA); // 密碼認證, 3次機會輸入密碼
void memFree(PACCOUNT pA, PACCOUNT pB); // 在堆上分配的內存的釋放
int main(void)
{
// 建立兩個賬戶, 分別是操作賬戶和接受轉賬的賬戶
PACCOUNT pMainAcc = (PACCOUNT)malloc(sizeof(ACCOUNT));
PACCOUNT pAssistAcc = (PACCOUNT)malloc(sizeof(ACCOUNT));
// 初始化兩個賬戶的信息
InitAccount(pMainAcc);
InitAccount(pAssistAcc);
// 進行菜單控制, 提供用戶操作
int chose = -1;
while(chose != 0)
{
printf(“\n1. 存錢\t2. 取錢\t3. 轉賬\t4. 更改密碼\t5. 顯示賬戶信息\t0.退出\n”);
scanf(“%d”, chose);
conduct(pMainAcc, chose, pAssistAcc);
}
return 0;
}
bool conduct(PACCOUNT pA, int chose, PACCOUNT pB)
{
bool rtnflag = true;
switch(chose)
{
case 1:
if(!deposite(pA))
printf(“操作失敗!”);
else
printf(“操作成功!”);
break;
case 2:
if(!withDraw(pA))
printf(“操作失敗!”);
else
printf(“操作成功!”);
break;
case 3:
if(!transfer(pA, pB))
printf(“操作失敗!”);
else
printf(“操作成功!”);
break;
case 4:
modifyPwd(pA);
break;
case 5:
showAccount(*pA, true);
break;
case 0:
rtnflag = false;
memFree(pA, pB);
break;
}
return rtnflag;
}
void InitAccount(PACCOUNT pA)
{
printf(“請初始化賬戶名, 密碼, 姓名, 賬戶餘額.\n”);
pA-UID = (char *)malloc(sizeof(char)*20);
pA-pwd = (char *)malloc(sizeof(char)*20);
pA-UName = (char *)malloc(sizeof(char)*20);
gets(pA-UID);
gets(pA-pwd);
gets(pA-UName);
scanf(“%d”, pA-balance);
getchar();
return ;
}
void showAccount(ACCOUNT A, bool flag)
{
if(flag)
{
int i = 0;
getchar();
char * tmpPwd = (char *)malloc(sizeof(char)*20);
while(strcmp(tmpPwd, A.pwd))
{
printf(“請輸入賬戶%s的密碼:\n”, A.UID);
gets(tmpPwd);
if(++i 3)
{
printf(“對不起, 密碼輸入錯誤!只能顯示部分信息!\n”);
showAccount(A, false);
free(tmpPwd);
return ;
}
}
printf(“賬戶信息如下:\n賬戶名\t賬戶密碼\t賬戶餘額\t姓名\n”);
printf(“%6s\t%8s%8d\t%8\ts\n”, A.UID, A.pwd, A.balance, A.UName);
free(tmpPwd);
}
else
{
printf(“賬戶信息如下:\n賬戶名\t賬戶餘額\t姓名\n”);
printf(“%6s\t%8d\t%4s\n”, A.UID, A.balance, A.UName);
}
return ;
}
bool deposite(PACCOUNT pA)
{
if(!Authentication(pA))
return false;
int val = 0;
printf(“請輸入金額:\n”);
scanf(“%d”, val);
pA-balance += val;
return true;
}
bool withDraw(PACCOUNT pA)
{
if(!Authentication(pA))
return false;
printf(“請輸入金額”);
int val = 0;
scanf(“%d”, val);
if(pA-balance = val)
{
pA-balance -= val;
}
else
{
printf(“對不起, 餘額不足!”);
return false;
}
return true;
}
bool transfer(PACCOUNT pA, PACCOUNT pB)
{
if(!Authentication(pA))
return false;
printf(“請輸入金額”);
int val = 0;
scanf(“%d”, val);
if(pA-balance = val)
{
pA-balance -= val;
pB-balance += val;
}
else
{
printf(“對不起, 餘額不足!”);
return false;
}
return true;
}
void modifyPwd(PACCOUNT pA)
{
if(Authentication(pA))
{
printf(“請輸入新的密碼!”);
free(pA-pwd);
pA-pwd = (char *)malloc(sizeof(char)*20);
gets(pA-pwd);
}
else
{
printf(“對不起, 您沒有許可權進行密碼修改!”);
}
}
bool Authentication(PACCOUNT pA)
{
getchar();
int i = 0;
char * tmpPwd = (char *)malloc(sizeof(char)*20);
while(strcmp(tmpPwd, pA-pwd))
{
printf(“請輸入%s的密碼, 3次機會:\n”, pA-UID);
gets(tmpPwd);
if(++i == 3)
{
return false;
}
}
return true;
}
void memFree(PACCOUNT pA, PACCOUNT pB)
{
free(pA);
free(pB);
return ;
}
/*
運行環境: VC6.0
請初始化賬戶名, 密碼, 姓名, 賬戶餘額.
wed
qweasd
wednesday
800
請初始化賬戶名, 密碼, 姓名, 賬戶餘額.
hu
sad
huni
200
1. 存錢 2. 取錢 3. 轉賬 4. 更改密碼 5. 顯示賬戶信息 0.退出
1
請輸入wed的密碼, 3次機會:
qwe
請輸入wed的密碼, 3次機會:
qweasd
請輸入金額:
54
操作成功!
1. 存錢 2. 取錢 3. 轉賬 4. 更改密碼 5. 顯示賬戶信息 0.退出
5
請輸入賬戶wed的密碼:
qwe
請輸入賬戶wed的密碼:
qweasd
賬戶信息如下:
賬戶名 賬戶密碼 賬戶餘額 姓名
wed qweasd 854 s
1. 存錢 2. 取錢 3. 轉賬 4. 更改密碼 5. 顯示賬戶信息 0.退出
4
請輸入wed的密碼, 3次機會:
123
請輸入wed的密碼, 3次機會:
qweasd
請輸入新的密碼!123qwe
1. 存錢 2. 取錢 3. 轉賬 4. 更改密碼 5. 顯示賬戶信息 0.退出
1
請輸入wed的密碼, 3次機會:
qweasd
請輸入wed的密碼, 3次機會:
123qwe
請輸入金額:
43
操作成功!
1. 存錢 2. 取錢 3. 轉賬 4. 更改密碼 5. 顯示賬戶信息 0.退出
5
請輸入賬戶wed的密碼:
123qwe
賬戶信息如下:
賬戶名 賬戶密碼 賬戶餘額 姓名
wed 123qwe 897 s
1. 存錢 2. 取錢 3. 轉賬 4. 更改密碼 5. 顯示賬戶信息 0.退出
Press any key to continue
*/
用C語言編寫一個自動存取款機模擬
給你個加強版:includeiostream.h
#includestdlib.h
#includestring.h
struct Bank
{
char name[6],num[8],password[6];
double money,o;
}b,q;
void tuichu();
void fuction();
void cunqian();
void queren();
void cin1()
{
b.money=0;
cinb.name;
cout”請輸入您的卡號:”endl;
cinb.num;
cout”請輸入您的密碼:”endl;
cinb.password;
coutendl;
}
void error()
{
cout”您的輸入錯誤,請再輸入一遍!”endl;
}
void cout1()
{
cout”您的名字是:”b.nameendl”您的卡號是:”b.numendl”您的密碼是:”b.passwordendl;
}
void one()
{
cout”請按『1』存錢, 請按『2』取錢!”endl”請按『3』查錢, 請按『4』退出!” endl;
}
void tishi()
{
char c;
cout”如果您想退出,請按 ‘Y’ . 否則,請按’N’ !”;
cinc;
if(c==’y’||c==’Y’) tuichu();
if(c==’n’||c==’Y’) fuction();
else
{
error();
tishi();
};
}
void yue()
{
cout”您的餘額為:”b.moneyendl;
tishi();
}
void cunqian()
{
b.o=b.money;
cout”您想存多少錢?”endl;
cinb.money;
if((b.money’0′)(b.money’9′))
{
cout”請輸入數字!”endl;
cunqian();
}
if((b.money=999999999)(b.money=(-999999999)))
{
b.money+=b.o;
yue();
}
else
{
error();
cunqian();
b.money=0;
}
}
void quqian()
{
double d;
cout”您想取多少錢?”endl;
cind;
if((d999999999)(d=0)(d=b.money+2000))
{
b.money-=d;
yue();
}
else
{
cout”您的透支餘額超過2000元,操作失敗!”endl;
quqian();
}
}
void chaqian()
{
yue();
}
void tuichu()
{
coutendl”歡迎下次光臨歡迎進入C++工商銀行!!”endl;
cout”請取回您的卡,再次感謝!”endl;
exit(0);
}
void fuction()
{
char x;
{
one();
cinx;
switch(x)
{
case ‘1’: cunqian();break;
case ‘2’: quqian();break;
case ‘3’: chaqian();break;
case ‘4’: tuichu();break;
default: cout”您的輸入錯誤,請輸入1到4按鍵,謝謝!”endl;fuction();
}
}
}
void cin2()
{
cout”請輸入您的卡號:”endl;
cinq.num;
cout”請輸入您的密碼:”endl;
cinq.password;
coutendl;
}
void cout2()
{
cout”歡迎進入C++工商銀行!”endl”請您先開戶,謝謝!”endl”請輸入您的名字:”endl;
cin1();
cout1();
queren();
}
void queren()
{
cout”請再次確認您的信息:”endl;
int e,f;
cin2();
e=strcmp(q.num,b.num);
f=strcmp(q.password,b.password);
if (e==0f==0) fuction();
else {
cout”您的信息有誤,請重新輸入:”endl;
cin2();
e=strcmp(q.num,b.num);
f=strcmp(q.password,b.password);
if (e==0f==0) fuction();
else
{
cout”您的信息有誤,請重新輸入:”endl;
cin2();
e=strcmp(q.num,b.num);
f=strcmp(q.password,b.password);
if(e==0f==0) fuction();
else {
cout”您的信息有誤,請重新輸入:”endl;
tuichu();
}
}
}
}
void main()
{
cout2();
}
用c語言編寫ATM的程序,實現開戶、存款、取款、查詢餘額、轉賬的業務邏輯。
#include stdio.h
#include stdlib.h
#include conio.h
#include string.h
void regist();
void login();
void quite();
void inputpassword(char mima[]);
void service();
struct bank
{
char name[20];
char password[7];
int account;
double money;
}kehu;
int find;
int a[10];
struct bank one;
FILE *fp;
void main()
{
int i;
int t=1;
for(i=0;i100;i++)
{
printf(“\t\t\t\t\t\t歡迎使用青軟ATM系統\n”);
printf(“\t\t\t\t\t\t正在進入主界面,請稍等”);
int j;
for(j=1;jt;j++)
{
printf(“.”);
}
t++;
if(t==10)
{
t=1;
}
printf(“\n\t\t\t\t\t\t%d%%”,i);
system(“cls”);
}
while(1)
{
printf(“\t\t\t\t\t\t服務類型: \n”);
printf(“\t\t\t\t\t\t[a]: 用戶註冊\n”);
printf(“\t\t\t\t\t\t[b]: 用戶登錄\n”);
printf(“\t\t\t\t\t\t[c]: 退出系統\n”);
printf(“\t\t\t\t\t\t請選擇服務: “);
fflush(stdin);
char xz;
scanf(“%c”,xz);
if(xz==’a’||xz==’A’)
{
regist();
} else if (xz==’b’||xz==’B’)
{
login();
} else if(xz==’c’||xz==’C’)
{
quite();
} else
{
printf(“輸入有誤,請重新輸入”);
}
getch();
system(“cls”);
}
}
void inputpassword(char mima[])
{
int i=0;
char ch;
while(1)
{
ch=getch();
if(ch!=’\r’)
{
if(ch!=’\b’){
mima[i]=ch;
i++;
printf(“*”);
}else{
if(i0){
i–;
printf(“\b \b”);
}
}
}else{
break;
}
}
mima[i]=’\0′;
printf(“\n”);
}
void regist()
{
fp=fopen(“atm.txt”,”ab+”);
if(fp==NULL)
{
printf(“\n\t\t\t文件打開失敗!”);
return;
}
system(“cls”);
printf(“\t\t\t現在執行的是註冊函數的使用\n”);
printf(“\t\t請輸入用戶名: “);
fflush(stdin);
gets(kehu.name);
char password1[7];
while(1)
{
while(1)
{
printf(“\n\n\t\t請輸入密碼:”);
fflush(stdin);
inputpassword(kehu.password);
int n=strlen(kehu.password);
if(n==6)
{
break;
}else
{
printf(“\n\t\t密碼必須為6位!”);
}
}
printf(“\n\t\t請輸入正確密碼!: “);
fflush(stdin);
inputpassword(password1);
if(strcmp(kehu.password,password1)==0)
{
break;
}else{
printf(“\n\n\t\t兩次密碼必須相同!”);
}
}
rewind(fp);
struct bank k;
if(fread(k,sizeof(struct bank),1,fp)==1)
{
fseek(fp,-sizeof(k),2);
fread(k,sizeof(k),1,fp);
kehu.account=k.account+1;
}else{
kehu.account=20170001;
}
kehu.money=0;
fseek(fp,0,2);
fwrite(kehu,sizeof(struct bank),1,fp);
fclose(fp);
printf(“\n\n\t\t開戶成功! “);
printf(“\n\t\t您的賬號為%d!”,kehu.account);
printf(“\n\t\t現在請您重新登錄!”);
}
void searchmoney()
{
system(“cls”);
printf(“您現在使用的是查詢餘額功能: \n”);
printf(“\n\n\t\t您的餘額是%0.2lf”,one.money);
}
void savemoney()
{
system(“cls”);
double inmoney;
printf(“請您選擇您要存款的金額 \n”);
scanf(“%lf”,inmoney);
int q;
int r=1;
for(q=0;q100;q++)
{
int w;
for(w=1;wr;w++)
{
printf(“.”);
}
r++;
if(r==10)
{
r=1;
}
printf(“\n\t\t\t\t\t\t正在存款%d%%”,q);
system(“cls”);
}
one.money=one.money+inmoney;
fseek(fp,-sizeof(one),1);
fwrite(one,sizeof(one),1,fp);
printf(“\n\n\t\t\t\t\t\t您已存款成功!”);
}
void withdrawalmoney()
{
system(“cls”);
double outputsomemoney;
printf(“請您選擇您要取款的金額 \n”);
scanf(“%lf”,outputsomemoney);
if(one.moneyoutputsomemoney){
printf(“您的餘額已不足,請您注意!”);
}else {
int q;
int r=1;
for(q=0;q100;q++)
{
int w;
for(w=1;wr;w++)
{
printf(“.”);
}
r++;
if(r==10)
{
r=1;
}
printf(“\n\t\t\t\t\t\t正在取款%d%%”,q);
system(“cls”);
}
one.money=one.money-outputsomemoney;
fseek(fp,-sizeof(one),1);
fwrite(one,sizeof(one),1,fp);
printf(“\n\n\t\t\t\t\t\t您已取款成功!請點清鈔票!”);
printf(“\n\n\t\t\t\t\t\t您現在的餘額為%lf”,one.money);
}
}
void transfermoney()
{
system(“cls”);
int duifang;
int qian;
fflush(stdin);
printf(“\n\n\n\t\t您現在使用的是轉賬功能”);
printf(“\n\t\t\t請輸入您要轉賬的賬戶:”);
scanf(“%d”,duifang);
int n=ftell(fp);
rewind(fp);
int flag=0;
struct bank temp;
while(fread(temp,sizeof(temp),1,fp)==1)
{
if(temp.account==duifang)
{
flag=1;
break;
}
}
if(flag==1)
{
printf(“請輸入轉賬金額:”);
scanf(“%d”,qian);
if(one.money=qian)
{
int q;
int r=1;
for(q=0;q100;q++)
{
int w;
for(w=1;wr;w++)
{
printf(“.”);
}
r++;
if(r==10)
{
r=1;
}
printf(“\n\t\t\t\t\t\t正在轉賬,請稍後!%d%%”,q);
system(“cls”);
}
temp.money=temp.money+qian;
fseek(fp,-sizeof(temp),1);
fwrite(temp,sizeof(temp),1,fp);
one.money=one.money-qian;
fseek(fp,n-sizeof(one),0);
fwrite(one,sizeof(one),1,fp);
printf(“\n\t\t\t\t轉賬成功!”);
}else{
printf(“\n\t\t\t\t您的餘額已不足!”);
}
}
}
void xiugai(){
system(“cls”);
printf(“\n\n\t\t 現在進行的是修改密碼功能\n”);
char oldpassword[7];
char newpassword[7];
char newpassword1[7];
int i;
for(i=0;i3;i++){
printf(“\n\t\t\t 請輸入舊密碼:\n”);
inputpassword(oldpassword);
if(strcmp(oldpassword,one.password)==0){
printf(“\n\t\t\t 輸入成功!\n”);
break;
}else{
printf(“\n\t\t\t 密碼輸入有誤,請重新輸入!\n”);
}
}
if(i3){
while(1){
printf(“\n\t\t\t 請輸入您的新密碼:\n”);
inputpassword(newpassword);
printf(“\n\t\t\t 請輸入您的確認密碼:\n “);
inputpassword(newpassword1);
if(strcmp(newpassword,newpassword1)==0){
strcpy(one.password,newpassword);
fseek(fp,-sizeof(one),1);
fwrite(one,sizeof(one),1,fp);
printf(“\n\t\t\t 密碼修改成功!”);
break;
}else{
printf(“\n\t\t\t 兩次密碼輸入不一致!”);
}
}
}else{
printf(“\n\t\t\t 密碼輸入錯誤!”);
}
}
int zhuxiaozhanghao()
{
system(“cls”);
int zhuxiaoxitong;
char sf;
printf(“你要註銷的賬號是%d”,one.account);
printf(“你是否要對此賬號進行註銷?\n\n\t\t請您選擇:註銷(Y)or不註銷(N):”);
fflush(stdin);
scanf(“%c”,sf);
if(sf==’y’||sf==’Y’)
{
printf(“正在為您註銷!\n”,one.account);
zhuxiaoxitong=1;
}else{
printf(“不註銷系統!\n”,one.account);
}
return zhuxiaoxitong;
}
void service()
{
while(1){
system(“cls”);
printf(“\n\n\n\t\t\t\t\t\t現在是服務系統,本系統有以下服務”);
printf(“\n\t\t\t\t\t\t[a] 查詢餘額\n”);
printf(“\n\t\t\t\t\t\t[b] 存款服務\n”);
printf(“\n\t\t\t\t\t\t[c] 轉賬服務\n”);
printf(“\n\t\t\t\t\t\t[d] 取款服務\n”);
printf(“\n\t\t\t\t\t\t[e] 修改密碼\n”);
printf(“\n\t\t\t\t\t\t[f] 註銷 \n”);
printf(“\n\t\t\t\t\t\t[g] 退出系統\n”);
char e;
printf(“\n\t\t\t\t\t\t您要選擇的服務是:”);
fflush(stdin);
scanf(“%c”,e);
switch(e)
{ case’A’:
case’a’: searchmoney() ;break;
case’B’:
case’b’: savemoney() ;break;
case’C’:
case’c’: transfermoney() ;break;
case’D’:
case’d’: withdrawalmoney() ;break;
case’E’:
case’e’: xiugai() ;break;
case’F’:
case’f’: {int zhuxiaoxitong=zhuxiaozhanghao();{if(zhuxiaoxitong==1) return;}break;}
case’G’:
case’g’: quite();break;
}
printf(“\n\n\n\t\t\t\t按任意鍵繼續……\n”);
getch();
}
}
void login()
{
fp=fopen(“atm.txt”,”rb+”);
if(fp==NULL)
{
printf(“\n\n\n\t\t\t\t文件打開失敗!”);
return;
}
system(“cls”);
printf(“\n\t\t\t\t\t\t現在執行的是登錄函數的使用\n”);
int zhanghao;
printf(“\n\t\t\t\t\t\t請輸入賬號:”);
scanf(“%d”,zhanghao);
int flag=0;
while(fread(one,sizeof(one),1,fp)==1)
{
if(zhanghao==one.account){
flag=1;
break;
}
}
char password2[7];
if(flag==1){
int h;
for(h=0;h3;h++){
printf(“\n\t\t\t\t\t\t請輸入密碼:”);
fflush(stdin);
inputpassword(password2);
if(strcmp(password2,one.password)==0)
{
printf(“\n\t\t\t\t\t\t登陸成功!”);
service();
break;
}else{
printf(“密碼不正確!”);
}
}
if(h==3){
printf(“\n\t\t\t您的密碼三次輸入有誤,返回”);
}
}else{
printf(“無此賬號!”);
}
fclose(fp);
}
void quite()
{
system(“cls”);
printf(“\t\t\t現在執行的是退出函數的使用\n”);
exit(0);
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/195643.html