/*
* 程序的版权和版本声明部分
* Copyright (c)2013, 烟台大学计算机学院学生
* All rightsreserved.
* 文件名称:
* 作 者: 王颖
* 完成日期: 2013 年 12 月 14 日
* 版本号: v1.0
* 输入描述:无
* 问题描述:银行系统
*/
#include <iostream>
#include <cstdio>
#include <stdio.h>
#include <conio.h>//getch头文件
#include <string.h>
#include <stdlib.h>
//银行中最大的账户数量
#define MAXACCOUNTNUMBER 20000
//银行卡的开号初始值
#define INITNUMBER 10001
using namespace std;
struct Account //声明一个银行卡的类型
{
long accNumber; //卡号
char accName[20]; //户主
char accpassword[7]; //密码
double balance; //余额
char identity[19]; //身份证号
int state; //状态 0:正常 -1:挂失 -2:冻结 -3:销户
};
//银行中所有卡
Account array[MAXACCOUNTNUMBER];
//银行中银行卡数量
int size=0;
void welcome(); //欢迎界面
void login(); //登录实现
void mainFrame(); //业务选择
long openAccount(); //开户
long autoCreament(); //生成自增卡号
void deposit(); //存款
void chaxunmima(char password[]);//鉴定密码
void bid(); //查询当前的余额
void printAccount(Account acc); //输出指定卡的信息
void withdrawal(); //取款
void closed(); //销户
int searchAccount(long accNumber);
int main()
{
welcome(); //欢迎界面
login(); //登陆界面
mainFrame();
return 0;
}
void welcome()
{
printf("|-----------------------------|\n");
printf("| 欢迎使用储蓄综合业务平台 |\n");
printf("|-----------------------------|\n");
}
void login() //登录实现
{
//管理员用户和密码验证
char managerName[20];
char managerPWD[20];
int errorCount=0;//记录错误次数
int i;
for(i=1; i<3; i++)
{
printf("请输入管理员账号:");
fflush(stdin);
gets(managerName);
printf("请输入管理员密码:");
fflush(stdin);
gets(managerPWD);
//判断
if(strcmp(managerName,"wangying")==0&&strcmp(managerPWD,"123456")==0)
{
break;
}
else
{
errorCount++;
if(errorCount<3)
{
printf("账号或密码错误!请重新输入\n");
}
else
{
printf("密码错误超过3次,退出系统……\n");
exit(0);
}
}
}
}
void mainFrame() //业务选择
{
int order;
cout<<"+--------------------------+"<<endl;
cout<<"+ 开户请按1 存款请按2 +"<<endl;
cout<<"+ 取款请按3 销户请按4 +"<<endl;
cout<<"+ 查询请按5 退出请按6 +"<<endl;
cout<<"+--------------------------+"<<endl;
cout<<"请输入操作指令"<<endl;
cin>>order;
switch(order)
{
case 1:
openAccount();
break;
case 2:
deposit();
break;
case 3:
withdrawal();
break;
case 4:
closed();
break;
case 5:
bid();
break;
default:
cout<<"error!";
break;
}
}
long openAccount() //开户
{
cout<<"请输入户主姓名(不能超过9位):"<<endl;
cin>>array[size].accName;
fflush(stdin);
cout<<"请输入密码(密码不能超过6位):"<<endl;
cin>>array[size].accpassword;
fflush(stdin);
chaxunmima(array[size].accpassword);
cout<<"请输入开户金额(金额必须是正确的数值(小数点只能出现一次)):"<<endl;
cin>>array[size].balance;
fflush(stdin);
//写卡号
array[size].accNumber=autoCreament();
printAccount(array[size]);
size++;
cout<<"请输入身份证号码:"<<endl;
cin>>array[size].identity;
fflush(stdin);
cout<<"+----------------------------------+"<<endl;
cout<<"开户成功!"<<endl;
size++;
cout<<"请输入任意键返回主菜单..."<<endl;
fflush(stdin);
getchar();
mainFrame();
}
long autoCreament() //自增卡号
{
if(size==0)
{
return INITNUMBER;
}
else
{
return array[size-1].accNumber+1;
}
}
/*根据卡号查找卡的下标
* 若返回值>=0,卡号是正确
* 若返回值=-1,卡号有误
*/
int searchAccount(long accNumber)
{
int i,t=-1;
for(i=0; i<size; i++)
{
if(array[i].accNumber==accNumber)//找到了这张卡
{
t=i;
break;
}
}
return t;
}
void deposit() //存款
{
long accNumber;
double money;
int t;
cout<<"请输入卡号:"<<endl;
cin>>accNumber;
cout<<"请输入存款金额:"<<endl;
cin>>money;
t=searchAccount(accNumber);
if(t=-1)
{
cout<<"卡号不存在,请从新输入:"<<endl;
deposit();
}
else
{
cout<<"存款前卡的信息为:"<<endl;
printAccount(array[t]);
array[size].balance+=money;
cout<<"存款后卡的信息为:"<<endl;
printAccount(array[t]);
cout<<"存款成功。请按任意键返回。"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
}
void withdrawal() //取款
{
long accNumber;
int size,money;
char key[7];
cout<<"请输入您的卡号:"<<endl;
cin>>accNumber;
size=searchAccount(accNumber);
cout<<endl<<"请输入您的密码:"<<endl;
for( int i=0; i<6; i++)
{
cin>>key[i];
}
key[6]='\0';
if(strcmp(key,array[size].accpassword)==0)
{
cout<<endl<<"请输入您要取款的金额:";
cin>>money;
//展示下存款前卡的信息
cout<<endl<<"取款前卡的信息:"<<endl;
printAccount(array[size]);
//找到了该卡号所对应的卡
if(array[size].balance<money)
{
cout<<endl<<"您的账户余额不足!无法取款啊!"<<endl;
cout<<endl<<"取款失败,按任意键返回!"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
else
{
array[size].balance-=money;
//展示存款后卡的信息
cout<<endl<<"取款后卡的信息:"<<endl;
printAccount(array[size]);
cout<<endl<<"取款成功,按任意键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
void printAccount(Account acc) //输出卡号信息
{
cout<<endl;
cout<<"+----------------------------------+"<<endl;
cout<<setiosflags(ios::left)<<+<<setw(8)<<"卡号"<<setw(8)<<"户主"<<setw(8)<<"身份证号"
<<setw(8)<<"金额"<<sPwdetw(8)<<"状态"<<+<<endl;
cout<<"+----------------------------------+"<<endl;
cout<<setiosflags(ios::left)<<+<<setw(8)<<array[size].accNumber<<setw(8)
<<array[size].accName<<setw(8)<<array[size].identity<<setw(8)<<endl;
cout<<"+----------------------------------+"<<endl;
}
void chaxunmima(char password[]) //鉴定密码
{
int i;
char a[7];
if(strlen(password)!=6)
{
cout<<"不是六位数字密码!请重新输入!"<<endl;
openAccount();
}
else
{
cout<<endl<<"请您再次输入:";
for(i=0; i<6; i++)
{
cin>>a[i];
}
a[6]='\0';
if(strcmp(a,password)==0)
{
cout<<endl<<"创建密码完成!"<<endl;
}
else
{
cout<<"前后密码输入不一致,请重新输入!"<<endl;
openAccount();
}
}
}
void bid() //查询当前余额
{
int size,accNumber;
cout<<endl<<"请输入您要查询的卡号:";
cin>>accNumber;
size=searchAccount(accNumber);
printAccount(array[size]);
cout<<endl<<"查询成功,按任意键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
void closed() //销户
{
char key[7];
int i,size,accNumber;
cout<<endl<<"请输入您要销户的卡号:";
cin>>accNumber;
//寻找该卡号
size=searchAccount(accNumber);
cout<<endl<<"请输入您的密码:";
for(i=0; i<6; i++)
{
cin>>key[i];
}
key[6]='\0';
if(strcmp(key,array[size].accpassword)==0)
{
cout<<endl<<"销户前卡的信息:"<<endl;
printAccount(array[size]);
cout<<"您将进行销户!按任意键继续:"<<endl;
getchar();
array[size].balance=0;
strcpy(array[size].state,"不存在");
strcpy(array[size].accName,"不存在");
cout<<endl<<"销户后卡的信息:"<<endl;
printAccount(array[size]);
cout<<endl<<"销户成功,按任意键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
else
{
cout<<"密码错误!!!"<<endl;
cout<<endl<<"按任意键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
}
心得体会:唉,这辈子真跟花括号结缘了·····为什么void printAccount(Account acc)里边老是报花括号有错啊??