问题及代码:
/*
* Copyright (c++) 2015, 烟台大学计算机学院
* All rights reserved.
* 文件名称:Bank.cpp
* 作 者:李楠
* 完成日期:2015年2月27日
* 版 本 号:v1.0
*
* 问题描述: 银行储蓄系统
* 输入描述: 略
* 程序输出: 略
*/
#include <iostream>
#include <string.h>
#include <conio.h> //putch的头文件
#include <stdlib.h> //system的头文件
#define MNUM 2000 //银行中最大开户数
using namespace std;
//定义卡的类型
struct Account
{
long accNumber;//银行卡的卡号
char name[20];//开户人
char password[7];//密码
char IDcard[19];//身份证号
double balance;//金额
int state;//状态 0-正常 -1-挂失 -2-销户
};
Account array[MNUM];//银行中现已开户的数量
int size=0;
long Number=10001;//第一个卡的卡号
//查询ID号码
int findCardbyID(long cardID);
//银行工作人员界面
void clerkwork();
//开户操作
void openAccount();
//存款操作
void depositmoney();
//销户操作
void cancelAccount();
//取款操作
void drawmoney();
//查询操作
void checkAccount();
//转账操作
void zhuanzhang();
//挂失操作
void lossAccount();
//改密
void changepassword();
//解挂操作
void jiegua();
//公共函数
int pass()
{
int ipass=0;
string name;
char pass[10];
int count=0;
do
{
cout<<"请输入业务员用户名:";
cin>>name;
cout<<"请输入密码:";
int i=0;//输出星号操作
while((pass[i]=getch())!=13)
{
if(pass[i]==8)
{
cout<<"\b";
i--;
}
else
{
putch('*');// int putch(char ch) 在当前光标处向屏幕输出字符ch,然后光标自动右移一个字符位置
//putch()向屏幕输出字符的函数 使用方式:
//① putch('转义字符');
//② putch('单个字符');
//③ putch(字符变量);
//注:③需先定义 char 字符变量='单个字符';
//头文件:conio.h
i++;
}
}
pass[i]='\0';
cout<<endl;
count++;
if((name=="hejia")&&strcmp(pass,"123456")==0)
ipass=1;
if(ipass!=1)
cout<<"用户名或密码输入错误。"<<endl;
}
while(ipass!=1&&count<3);
return ipass;
}
int main()
{
cout<<"+----------------------+"<<endl;
cout<<"+ 欢迎光临he银行 +"<<endl;
cout<<"+----------------------+"<<endl;
if(pass()==1)
clerkwork();
else
cout<<"请到柜台办理密码查询后再来。"<<endl;
return 0;
}
void clerkwork()//银行工作人员的界面
{
int order;
cout<<"+----------------------------+"<<endl;
cout<<"+ 1 开户 2 销户 3 存款 +"<<endl;
cout<<"+ 4 取款 5 查询 6 转账 +"<<endl;
cout<<"+ 7 挂失 8 解挂 9 改密 +"<<endl;
cout<<"+ 0 退出 +"<<endl;
cout<<"+----------------------------+"<<endl;
cout<<"请输入操作指令:";
cin>>order;
switch(order)
{
case 1:
openAccount();
break;
case 2:
cancelAccount();
break;
case 3:
depositmoney();
break;
case 4:
drawmoney();
break;
case 5:
checkAccount();
break;
case 6:
zhuanzhang();
break;
case 7:
lossAccount();
break;
case 8:
jiegua();
break;
case 9:
changepassword();
break;
case 0:
cout<<"谢谢,欢迎再来!"<<endl;
break;
default :
cout<<endl;
}
}
int findCardbyID(long cardID)//查找卡号操作
{
int position=-1;
for(int i=0; i<size; i++)
{
if(array[i].accNumber==cardID)
{
position=i;
break;
}
}
return position;
}
void openAccount()//开户操作
{
char idcard[14];
char name[9],pass1[7],pass2[7];
double balance;
cout<<"正在开户"<<endl;
cout<<"账号:"<<Number<<endl;
cout<<"户主姓名:";
cin>>name;
cout<<"密码:";
int i=0;//输出星号操作
while((pass1[i]=getch())!=13)
{
if(pass1[i]==8)
{
cout<<"\b";
i--;
}
else
{
putch('*');
i++;
}
}
pass1[i]='\0';
cout<<endl;
cout<<"确认密码:";
int j=0;//输出星号操作
while((pass2[j]=getch())!=13)
{
if(pass2[j]==8)
{
cout<<"\b";
j--;
}
else
{
putch('*');
j++;
}
}
pass2[j]='\0';
cout<<endl;
if(strcmp(pass1,pass2)==0)//两次输入的密码是一样
{
cout<<"存入金额:";
cin>>balance;
cout<<"身份证号:";
cin>>idcard;
int a;
array[size].accNumber=Number;
strcpy(array[size].name,name);//字符型记住名字
strcpy(array[size].password,pass1);//字符型记住密码
strcpy(array[size].IDcard,idcard);
array[size].balance=balance;
array[size].state=0;
Number++;//账户数量+1
size++;
cout<<"开户成功!"<<endl;
cout<<"返回主页面请按“0”";
if(cin>>a&&a==0)
{
clerkwork();
}
}
else
{
//两次输入的密码不一样
cout<<"两次输入的密码不一致,请重新操作"<<endl;
openAccount();
}
}
void cancelAccount()//销户操作
{
long accID;//输入的卡号
int position;
cout<<"待销户账号:";
cin>>accID;
position=findCardbyID(accID);//根据卡的位置寻找该卡
if(position==-1)//提示卡号信息有误
{
cout<<"请检查输入的卡号是否有误,重新输入"<<endl;
cancelAccount();
}
else if(array[position].state!=0)//卡号状态不正常
{
cout<<"该卡状态非正常,请检查该卡状态是否有误"<<endl;
clerkwork();
}
else//卡号正确
{
char str[10];
cout<<"姓名:"<<array[position].name<<endl;
cout<<"密码:";
int j=0;//输出星号操作
while((str[j]=getch())!=13)
{
if(str[j]==8)
{
cout<<"\b";
j--;
}
else
{
putch('*');
j++;
}
}
str[j]='\0';
cout<<endl;
if(strcmp(str,array[position].password)!=0)//密码不正确
{
cout<<"密码输入错误;请重新输入操作:"<<endl;
cancelAccount();
}
else//密码正确
{
char a;
int c;
cout<<"确认销户(y/n)?";
cin>>a;
if(a=='y'||a=='Y') //确认销户操作
{
cout<<"取款"<<array[position].balance<<"元"<<",销户成功!"<<endl;
array[position].balance=0;
array[position].state=-2;
cout<<"返回主页面请按“0”"<<endl;
if(cin>>c&&c==0)
{
clerkwork();
}
}
if(a=='n'||a=='N')//取消销户操作
{
cout<<"您已取消销户操作"<<endl;
cout<<"返回主页面请按“0”";
if(cin>>c&&c==0)
{
clerkwork();
}
}
}
}
}
void depositmoney()//存款操作,不需要密码
{
long accID;//卡号
int position;
double number;
cout<<"账号:";
cin>>accID;
position=findCardbyID(accID);//根据卡号查找该卡
if(position==-1)//提示卡号信息有误 不存在卡号
{
cout<<"该卡不存在,请重新操作"<<endl;
depositmoney();
}
else if(array[position].state!=0)//卡号状态不正常
{
cout<<"该卡状态非正常"<<endl;
}
else
{
cout<<"姓名:"<<array[position].name<<endl;
cout<<"存款额:";
cin>>number;
if(number<0)//存款金额的格式不正确
{
cout<<"金额输入有误,请重新操作:"<<endl;
depositmoney();
}
else//存款金额格式正确
{
int c;
array[position].balance=array[position].balance+number;
cout<<"现余额共计"<<array[position].balance<<"元"<<",存款成功!"<<endl;
cout<<"返回主页面请按“0”";
if(cin>>c&&c==0)
{
clerkwork();
}
}
}
}
void drawmoney()//取款操作
{
char str[10];
int c;
long accID;//输入的卡号
int position;
double number;
cout<<"账号:";
cin>>accID;
position=findCardbyID(accID);//根据卡的位置寻找该卡
if(position==-1)//提示卡号信息有误
{
cout<<"该卡号不存在,请重新输入"<<endl;
drawmoney();
}
else if(array[position].state!=0)//卡号状态不正常
{
cout<<"该卡状态非正常,无法取款"<<endl;
}
else//卡号正确
{
cout<<"姓名:"<<array[position].name<<endl;
cout<<"密码:";
int j=0;//输出星号操作
while((str[j]=getch())!=13)
{
if(str[j]==8)
{
cout<<"\b";
j--;
}
else
{
putch('*');
j++;
}
}
str[j]='\0';
cout<<endl;
if(strcmp(str,array[position].password)==0)//密码正确
{
cout<<"取款额:";
cin>>number;
if (number<0)//金额格式不正确
{
cout<<"输入金额格式不正确,请重新操作"<<endl;
drawmoney();
}
else//金额格式正确
if(number>array[position].balance)//取款数目大于卡内余额
{
cout<<"余额不足,取款失败!请重新操作:"<<endl;
drawmoney();
}
else//取款数目小于等于卡内余额
{
array[position].balance=array[position].balance-number;
cout<<"现余额共计"<<array[position].balance<<"元"<<",取款成功!"<<endl;
cout<<"返回主页面请按“0”";
if(cin>>c&&c==0)
{
clerkwork();
}
}
}
else//密码不正确
{
for(int i=1; i<=3; i++)
{
cout<<"密码输入错误(一共两次机会),请重新输入:"<<endl;
int j=0;//输出星号操作
while((str[j]=getch())!=13)
{
if(str[j]==8)
{
cout<<"\b";
j--;
}
else
{
putch('*');
j++;
}
}
str[j]='\0';
cout<<endl;
if(strcmp(str,array[position].password)==0)//密码再次输入正确
{
cout<<"请输入取款金额:"<<endl;
cin>>number;
if (number<0)//金额格式不正确
{
cout<<"输入金额格式不正确,请重新操作"<<endl;
drawmoney();
}
else//金额格式正确
{
if(number>array[position].balance)//取款数目大于卡内余额
{
cout<<"取款金额高于银行卡卡内余额,取款失败!请重新操作:"<<endl;
drawmoney();
}
if(number<=array[position].balance)//取款数目小于等于卡内余额
{
cout<<"取款成功!"<<endl;
array[position].balance=array[position].balance-number;
cout<<"返回主页面请按“0”"<<endl;
if(cin>>c&&c==0)
{
clerkwork();
}
}
}
}
}
}
}
}
void checkAccount()//查询操作
{
int c;
char str[10];
long accID;//卡号
int position;
cout<<"账号:";
cin>>accID;
position=findCardbyID(accID);//根据卡号查找该卡
if(position==-1)//提示卡号信息有误
{
cout<<"卡号有误,请重新输入"<<endl;
checkAccount();
}
cout<<"姓名:"<<array[position].name<<endl;
cout<<"密码:";
int j=0;//输出星号操作
while((str[j]=getch())!=13)
{
if(str[j]==8)
{
cout<<"\b";
j--;
}
else
{
putch('*');
j++;
}
}
str[j]='\0';
cout<<endl;
if(strcmp(str,array[position].password)!=0)//密码不正确
{
cout<<"密码不正确,请重新操作"<<endl;
checkAccount();
}
else//密码正确
{
cout<<"余额:"<<array[position].balance<<"元"<<endl;
cout<<"当前状态:";
if(array[position].state==0)
cout<<"正常"<<endl;
else if(array[position].state==-1)
cout<<"挂失"<<endl;
else
cout<<"销户"<<endl;
cout<<"身份证号:"<<array[position].IDcard<<endl;
cout<<"查询完毕!"<<endl;
}
cout<<"返回主页面请按“0”";
if(cin>>c&&c==0)
{
clerkwork();
}
}
void zhuanzhang()//转账操作
{
long accID1;//输入的卡号
long accID2;//输入的卡号1
char str[10];
long position;
cout<<"转出账号:";
cin>>accID1;
position=findCardbyID(accID1);//根据卡的位置寻找该卡
if(position==-1)//提示卡号信息有误
{
cout<<"请检查输入的卡号是否有误,重新输入"<<endl;
zhuanzhang();
}
else if(array[position].state!=0)//存在该卡但卡号状态不正常
{
cout<<"该卡状态非正常,请检查该卡状态"<<endl;
clerkwork();
}
else//卡号正确
{
cout<<"姓名:"<<array[position].name<<endl;
cout<<"密码:";
int j=0;//输出星号操作
while((str[j]=getch())!=13)
{
if(str[j]==8)
{
cout<<"\b";
j--;
}
else
{
putch('*');
j++;
}
}
str[j]='\0';
cout<<endl;
if(strcmp(str,array[position].password)!=0)//密码不正确
{
cout<<"密码不正确,请重新操作"<<endl;
zhuanzhang();
}
else//密码正确
{
long position1;
cout<<"转入账号:";
cin>>accID2;
position1=findCardbyID(accID2);//根据卡的位置寻找该卡
if(position1==-1)//提示卡号信息有误
{
cout<<"该卡号不存在,请检查输入的卡号是否有误"<<endl;
zhuanzhang();
}
else if(array[position1].state!=0)//卡号状态不正常
{
cout<<"该卡状态非正常,请检查该卡状态"<<endl;
clerkwork();
}
else//卡号正确
{
long number;
cout<<"转账金额:";
cin>>number;
if(number<0)//存款金额的格式不正确
{
cout<<"金额输入有误,请重新操作:"<<endl;
zhuanzhang();
}
else//存款金额格式正确
{
int c;
array[position1].balance=array[position1].balance+number;
array[position].balance=array[position].balance-number;
cout<<"转账成功!"<<"余额"<<array[position].balance<<"元."<<endl;
cout<<"返回主页面请按“0”";
if(cin>>c&&c==0)
{
clerkwork();
}
}
}
}
}
}
void lossAccount()//挂失操作
{
char str[10];
int c;
long accID;//输入的卡号
int position;
cout<<"账号:";
cin>>accID;
position=findCardbyID(accID);//根据卡的位置寻找该卡
if(position==-1)//提示卡号信息有误
{
cout<<"请检查输入的卡号是否有误"<<endl;
lossAccount();
}
else if(array[position].state!=0)//卡号状态不正常
{
cout<<"该卡状态非正常,请检查该卡状态是否有误"<<endl;
clerkwork();
}
else//卡号正确
{
cout<<"姓名:"<<array[position].name<<endl;
cout<<"密码:";
int j=0;//输出星号操作
while((str[j]=getch())!=13)
{
if(str[j]==8)
{
cout<<"\b";
j--;
}
else
{
putch('*');
j++;
}
}
str[j]='\0';
cout<<endl;
if(strcmp(str,array[position].password)!=0)//密码不正确
{
cout<<"密码不正确,重新进行挂失操作"<<endl;
lossAccount();
}
else//密码正确
{
cout<<"挂失成功!"<<endl;
array[position].state=-1;
cout<<"返回主页面请按“0”";
if(cin>>c&&c==0)
{
clerkwork();
}
}
}
}
void jiegua()//解挂操作
{
char str[10];
int c;
long accID;//输入的卡号
int position;
cout<<"账号:";
cin>>accID;
position=findCardbyID(accID);//根据卡的位置寻找该卡
if(position==-1)//提示卡号信息有误
{
cout<<"请检查输入的卡号是否有误并重新操作"<<endl;
jiegua();
}
else if(array[position].state==-1)//卡号状态为挂失
{
cout<<"姓名:"<<array[position].name<<endl;
cout<<"密码:";
int j=0;//输出星号操作
while((str[j]=getch())!=13)
{
if(str[j]==8)
{
cout<<"\b";
j--;
}
else
{
putch('*');
j++;
}
}
str[j]='\0';
cout<<endl;
if(strcmp(str,array[position].password)!=0)//密码不正确
{
cout<<"密码不正确,重新进行解挂操作"<<endl;
jiegua();
}
else//密码正确
{
cout<<"解挂成功!"<<endl;
array[position].state=0;
cout<<"返回主页面请按“0”"<<endl;
if(cin>>c&&c==0)
{
clerkwork();
}
}
}
else//卡号正确
{
cout<<"该卡状态非解挂,请检查该卡状态是否有误"<<endl;
clerkwork();
}
}
void changepassword()//改密操作
{
char b[10],c[10];
char str[10];
int p;
long accID;//输入的卡号
int position;
cout<<"账号:";
cin>>accID;
position=findCardbyID(accID);//根据卡的位置寻找该卡
if(position==-1)//提示卡号信息有误
{
cout<<"请检查输入的卡号是否有误"<<endl;
lossAccount();
}
else if(array[position].state!=0)//卡号状态不正常
{
cout<<"该卡状态非正常,请检查该卡状态是否有误"<<endl;
clerkwork();
}
else//卡号正确
{
cout<<"姓名:"<<array[position].name<<endl;
cout<<"密码:";
int j=0;//输出星号操作
while((str[j]=getch())!=13)
{
if(str[j]==8)
{
cout<<"\b";
j--;
}
else
{
putch('*');
j++;
}
}
str[j]='\0';
cout<<endl;
if(strcmp(str,array[position].password)!=0)//密码不正确
{
cout<<"密码不正确,重新进行改密操作"<<endl;
changepassword();
}
else//密码正确
{
cout<<"新密码:";
int i=0;//输出星号操作
while((b[i]=getch())!=13)
{
if(b[i]==8)
{
cout<<"\b";
i--;
}
else
{
putch('*');
i++;
}
}
b[i]='\0';
cout<<endl<<"确认密码:";
int k=0;//输出星号操作
while((c[k]=getch())!=13)
{
if(c[k]==8)
{
cout<<"\b";
k--;
}
else
{
putch('*');
k++;
}
}
c[k]='\0';
if(strcmp(b,c)==0)
{
strcpy(array[position].password,b);//字符型换密码
cout<<endl<<"修改成功!"<<endl;
cout<<"返回主页面请按“0”";
if(cin>>p&&p==0)
{
clerkwork();
}
}
else
{
cout<<"两次密码不同,请重新操作!"<<endl;
changepassword();
}
}
}
}
运行结果:
知识点总结:
查找了好多知识,也学习了很多~
学习心得:
原本以为800行很夸张,原来是我想多了,duang~duang~duang~,真真的费脑筋啊