#include<iostream>
#include<string>
#include<fstream>
using namespace std
class account //atm账户类
{
private:
string CardNum,Psw//卡号、密码
float Balance
public:
friend class ATM//atm为友元
/*void get_cardnum()
void get_psw()
void get_balance()*/
account(){}//<---------------------here
account(string num,string passwd,float balance)//构造函数
void Write()
}
class ATM //atm机类
{
private:
int times
account *ac
public:
ATM()void load( account *act )//装入账户信息
void welcome()//初始欢迎信息
bool check_passwd( string pwd )//验证当前账户信息的密码
void change_psw()//修改密码
void get_money()//取钱
float check_balance()//查账
void tran()//转账
void exit()//退卡
void function_show()//显示功能菜单
void lock()//锁定账户
}
/*
* account::account( string num, string passwd, float balance )
* account类构造函数
* 用途: 使用给定的账号密码等信息初始化一个account对象
* 参数: string num 账号
* string passwd 密码
* float balance
*/
account::account( string num, string passwd, float balance )
{
CardNum = num
Psw = passwd
Balance = balance
}
//atm类构造函数
/*account::get_cardnum()
{
return CardNum
}
account::get_psw()
{
return Psw
}
account::get_balance()
{
return Balance
}*/
void account::Write()
{
ofstream outfile("atm.txt",ios::binary)//<-----------------here
outfile.write((char *)(this),sizeof(account))//<-------------here
outfile.close()
}
ATM::ATM()
{
}
/*
* void ATM::load( account *act )
* ATM类装入账户信息函数
* 用途: 载入指定的account对象,模拟atm插卡过程
* 参数: account *act 要载入的account对象指针
*/
void ATM::load( account *act )
{
ac = act
}
/*
* void ATM::welcome()
* ATM类显示初始欢迎信息函数
* 用途: 显示欢迎信息,提示密码输入并验证
* 参数: 无
*
*/
void ATM::welcome()
{
times = 0//记录密码输入错误次数
cout <<"Welcome to use the China Bank ATM!" <<endl
string pwd//这一个语句应该上移的,一般来说数据的定义和初始化一块写在开头,下面才是各种操作的语句
while( times <3 )
{
cout <<"Please enter the password: " <<endl
cin >>pwd
if( !check_passwd( pwd ) )
{
cout <<"The password you entered is wrong, please enter again" <<endl
times++
}
else
{
function_show()
break
}
}
if( times >= 3 )
lock()//输入密码错误次数超过(等于)3次,锁定账户
}
bool ATM::check_passwd( string pwd )
{
if( pwd == ac->Psw )
return true
else
return false
}
void ATM::function_show()
{
int n
cout <<"(1) Change Password" <<endl
cout <<"(2) Get Money" <<endl
cout <<"(3) Check Balance" <<endl
cout <<"(4) Transfer accounts" <<endl
cout <<"(5) Exit" <<endl
cin >>n
while(n != 1 &&n != 2 &&n != 3 &&n != 4 &&n != 5) //这样就可以完全限制用户的输入
{
cout <<"Please enter the right number" <<endl
cin >>n
}
switch( n )
{
case 1:
change_psw()
break
case 2:
get_money()
break
case 3:
cout <<check_balance() <<endl
break
case 4:
tran()
break
case 5:
exit()
break
}
}
void ATM::lock()
{
cout <<"Sorry! Your card has been confiscated!" <<endl
exit()
}
void ATM::change_psw()
{
string old_psw, new_psw1, new_psw2
int t = 0
while( t <3 )
{
cout <<"Please enter the old password: "
cin >>old_psw
if( !check_passwd( old_psw ) )
{
cout <<"The password you enter is wrong, please enter again" <<endl
t++
}
else
{
cout <<"Please enter the new password: "
cin >>new_psw1
cout <<"Please enter the new password again: "
cin >>new_psw2
if( new_psw1 == new_psw2 )
{
ac ->Psw = new_psw2
cout <<"You have change your password successfully!" <<endl
break
}
else
cout <<"Sorry, entered passwords do not match! " <<endl
}
}
//}//<----------------------here
if( t >= 3 )
{
cout <<"Sorry, you have inputed the wrong password for three times and more! " <<endl
}
}
void ATM::get_money()
{
float money
cout <<"Please enter the amount of money you want to get: " <<endl
cin >>money
while( money >ac ->Balance)
{
cout <<"Your balance is not enough, please enter again" <<endl
cin >>money
}
ac ->Balance = ac ->Balance - money
}
float ATM::check_balance()
{
return ac ->Balance
}
void ATM::tran()
{
account a[5]
string cn
float m
cout<<"please enter the cardnum of the account you want to transfer money to"<<endl
cin>>cn
ifstream infile("atm.txt",ios::binary)
infile.seekg(0,ios::beg)
for(int i=0i<5i++)
{
infile.read((char *)(&a[i]),sizeof(a[i]))
}
for(int j=0j<5j++)
{
if(cn==a[i].CardNum)
{
cout<<"please enter the amount of money"<<endl
cin>>m
while(m>ac->Balance)
{
cout<<"there is no enough money in your account,please enter again"<<endl
cin>>m
}
ac->Balance=ac->Balance-m
a[i].Balance=a[i].Balance+m
ofstream outfile("atm.txt",ios::binary)
outfile.seekp(i*sizeof(a[0]),ios::beg)
outfile.write((char *) &a[i],sizeof(a[i]))
}
}
if(j>=5)
{
cout<<"the account doesn't exit"<<endl
}
}
void ATM::exit()
{
cout <<"Please take your card!" <<endl
}
int main()
{
account a[5]={account("10001","1111",5000.0f),account("10002","2222",10000.0f),account("10003","3333",15000.0f),
account("10004","4444",20000.0f),account("10005","5555",25000.0f)}
account temp( "10001", "1111", 5000.0f )
ATM atm
atm.load( &temp )
atm.welcome()
return 0
}
按照你的愿意把空都填好了,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=0i<ASNi++)
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=0i<ASNi++)
if(strcmp(an,ats[i].accountnumber)==0)
return ats[i].balance
}
void deposit(char *an,int amount)
{
int i
for(i=0i<ASNi++)
if(strcmp(an,ats[i].accountnumber)==0)
ats[i].balance+=amount
}
int withdraw(char *an,int amount)
{
int i
for(i=0i<ASNi++)
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=0i<8i++)
AccountNumber[i]=getch()
printf("\n请输入6为密码:")
for(i=0i<6i++)
{
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
}
}
}
}
#include <stdio.h>#include <conio.h>
#include <string.h>
#include <stdlib.h>
int chcode() {
char pw[50],ch
char *syspw = "abc" // 原始密码
int i,m = 0
printf("请输入密码:")
while(m < 3) {
i = 0
while((ch = _getch()) != '\r') {
if(ch == '\b' && i > 0) {
printf("\b \b")
--i
}
else if(ch != '\b') {
pw[i++] = ch
printf("*")
}
}
pw[i] = '\0'
printf("\n")
if(strcmp(pw,syspw) != 0) {
printf("密码错误,请重新输入!\n")
m++
}
else {
printf("密码正确!\n")
system("pause")
return 1
}
}
printf("连续3次输入错误,退出!\n")
system("pause")
return 0
}
int main() {
int login = chcode()
if(login) printf("登录成功!\n")
else printf("登录失败!\n")
return 0
}