1. 編寫一個關於「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 conct(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);
conct(pMainAcc, chose, pAssistAcc);
}
return 0;
}
bool conct(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.退出
0
Press any key to continue
*/
2. c語言ATM取款機怎麼做 ,得輸入密碼的那種
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<conio.h>
void
sys(const
char
*ex)
{
printf(ex);
fflush(stdin);
getch();
}
struct
atm
{
float
money;
char
card[20];
char
pass[20];
};
struct
atm
*creat()
{
struct
atm
*p;
p=(struct
atm
*)malloc(sizeof(struct
atm));
printf("請輸入密碼:");
gets(p->pass);getchar();
printf("請輸入卡號:");
gets(p->card);getchar();
printf("卡號為=%s,密碼為=%s\n",p->card,p->pass);
printf("請輸入預存款金額:");
scanf("%f",&p->money);
return
p;
}
struct
atm
*qukuan(struct
atm
*p)
{
float
money;
printf("請輸入取款金額:");
scanf("%f",&money);
if(money>p->money){printf("余額不足!\n");return
p;}
p->money-=money;
return
p;
}
void
print(struct
atm
*p)
{
printf("當前余額為%.2f,可取款金額為%d\n",p->money,floor(p->money)/100);
}
int
yanzheng(struct
atm
*p)
{
char
pass[20];
printf("你好,請輸入密碼:");
gets(pass);
if(strcmp(pass,p->pass)==0)
return
1;
return
0;
}
void
main()
{
struct
atm
*p;
int
t=0;
p=creat();
do
t++;
while(!yanzheng(p)&&t<3);
if(t==3){printf("密碼連續三次輸入錯誤,退出程序!\n");return
1;}
while(1)
{
system("cls");
printf("****歡迎您使用ATM取款機!****\n");
printf("1:\t取款\n");
printf("2:\t查看余額\n");
printf("0:\t退出\n");
printf("請選擇:");
scanf("%d",&t);
fflush(stdin);
switch(t)
{
case
1:qukuan(p);break;
case
2:print(p);break;
}
if(!t)
{
sys("請按任意鍵退出...");
break;
}
sys("請按任意鍵返回...");
}
}
3. 編寫一個C語言程序模擬銀行ATM機的賬戶管理功能,系統主要實現以下功能
按照你的願意把空都填好了,VC++ 6.0下編譯能通過,有警告信息,運行基本上能用,不過個人認為這個系統有很大的不足,比如輸入賬號的時候沒有輸出反饋信息,以及沒有對誤操作的處理等等。需要的話可以幫你改改!
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define AN 9 //表示賬號8位
#define PN 7 //表示密碼6位
#define ASN 3 //表示系統中共有3個賬戶信息
struct Account
{
char accountnumber[AN]; //表示賬號信息
char password[PN]; //表示賬戶的密碼信息
double balance; //表示賬戶的余額
};
struct Account ats[ASN]={{"00000001","123456",100},{"00000002","123456",200},{"00000003","123456",300}};
//ats數組用於存儲系統中三個賬戶的信息
int isCorrect(char *an,char *psd)
{
int i;
for(i=0;i<ASN;i++)
if(strcmp(ats[i].accountnumber,an)==0 && strcmp(psd,ats[i].password)==0)
return 1;
return 0;
}
double getBalance(char *an)
{
int i;
for(i=0;i<ASN;i++)
if(strcmp(an,ats[i].accountnumber)==0)
return ats[i].balance;
}
void deposit(char *an,int amount)
{
int i;
for(i=0;i<ASN;i++)
if(strcmp(an,ats[i].accountnumber)==0)
ats[i].balance+=amount;
}
int withdraw(char *an,int amount)
{
int i;
for(i=0;i<ASN;i++)
if(strcmp(an,ats[i].accountnumber)==0)
return ats[i].balance-=amount;
}
void main()
{
char AccountNumber[AN]={'\0'};
char psd[PN]={'\0'};
int i,errorcount=0;
while(1)
{
printf("\n請輸入8位賬號:");
for(i=0;i<8;i++)
AccountNumber[i]=getch();
printf("\n請輸入6為密碼:");
for(i=0;i<6;i++)
{
psd[i]=getch();
putchar('*');
}
if(isCorrect(AccountNumber,psd)==1)
{
int tag,amount;
while(1)
{
printf("\n歡迎登錄銀行賬戶管理系統,請選擇您要的服務:1、查詢余額;2、存款操作;3、取款操作;4、退出系統\n");
scanf("%d",&tag);
switch(tag)
{
case 1:
printf("您現在的余額為%f元\n",getBalance(AccountNumber));
break;
case 2:
printf("請輸入您的存款金額:");
scanf("%d",&amount);
deposit(AccountNumber,amount);
printf("存款成功!您的當前余額為:%f元\n",getBalance(AccountNumber));
break;
case 3:
printf("請輸入您的取款金額:");
scanf("%d",&amount);
if(amount<=getBalance(AccountNumber))
printf("取款成功!您的當前余額為:%f元\n",withdraw(AccountNumber,amount));
else
printf("取款失敗!\n");
break;
case 4:
break;
}
if(tag==4)
break;
}
}
else
{
errorcount++;
if(errorcount==3)
{
printf("您已經連續三次輸入錯誤,系統將自動關閉\n");
break;
}
}
}
}
4. 求大神用代碼敲出來參考啊 有注釋
以下用c語言隱激程序來編寫你要的功能(目前金額輸入沒作限制,必須要輸入數字,否則程序會進入死循環):
#include<stdio.h>
#include<string.h>
voidgetMoney(intamount)//取款
{
if(amount>1000||amount<100||amount%100!=0)
{
printf("請重新輸入正確的取款金額: ");
int_amount;
scanf("%d",&_amount);
getMoney(_amount);
}
else
{
printf("成功取出%d元 ",amount);
}
}
voidlogin()//登陸驗證
{
intcount=0;//檢驗輸入密碼的次數
charPassWord[]="111111";//固定密碼
charpassWord[6];//接收輸入密碼
printf("請輸入六位密碼按空格鍵結束: ");
scanf("%s",passWord);
while(count<3)
{
count++;
if(strcmp(PassWord,passWord)==0)
{
printf("成功登陸,請輸入小於1000元,100元倍數的取款金額: ");
intamount;//取款金額
scanf("%d",&amount);
getMoney(amount);
灶並襪 printf("交易完成,請取卡 ");
return;
}
else
{
if(count==3)
{
printf("密碼錯誤,請取卡 ");
return;
}
printf("密碼輸入錯誤,請重蔽譽新輸入(還能輸入%d次錯誤): ",3-count);
scanf("%s",passWord);
}
}
}
voidmain()
{
login();
}
密碼輸入3次錯誤,就退出
5. 【C語言】編寫ATM機程序
幫我用C語言編寫一個ATM取款程序要求代碼在300行以上
作為一個二十一世紀的大學生,要養成自己動手的習慣!不懂就去圖書館翻閱資料!雖然網上現在很
6. 用C語言編ATM
大體是這樣的:
機器正常服務畫面,
如果有個客戶插卡進來後,讀卡器感測器檢測到了,就會通知sp(系統),有卡進來了。接著SP向讀卡器發送一個關閉閘門命令,將閘門關掉,防止其他的卡再插進來。接著SP發送一個讀卡的指令,讀卡器硬體開始讀卡,接著將讀出的結果放在一串位元組流中,返回給SP,SP會分析該返回位元組流,因為其格式都是硬體手冊裡面定義好的,哪一位表示什麼都是固定的。SP根據各個位的意思進行分析,從而知道是否成功,並且該位元組流裡面還包括1、2、3磁軌的數據,SP根據位元組流的位置可以將磁軌依次取出,放到一個變數中存起來,以便ATMC中使用。(如果該卡的格式不符合硬體手冊裡面定義好的,則出現退卡「對不起,不支持貴卡」),讀完卡後,讀卡器就先停下來,出現「安全確認」或者「輸入密碼」的畫面,卡保留在裡面。接著,用戶進入功能選擇畫面,「查詢」、「轉帳」和「改密」、「取款」.(進入此畫面不進行密碼校驗)。當客戶選擇了「取款」後,客戶輸入取款金額,ATM會先向主機發送一個報文,確認密碼是否正確,正確則將客戶的錢扣掉,ATM等待主機返回報文,如果返回的信息是一切OK,則ATM開始出鈔了。