C语言设计银行账户模拟程序

Python09

C语言设计银行账户模拟程序,第1张

能传附件吗?不知道怎么传。我就贴给你吧。

#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

}