项目名称: 银行储蓄综合业务平台
编写语言: 面向对象的C语言
代码:
--先建一个空项目
--添加一个头文件名称为“Bank.h”
头文件代码为:
//显示欢迎信息
void welcome ();
//系统主菜单
void mainmenu ();
//开户
void openAnAccount ();
//销户
void closeAnAccount ();
//存款
void deposit ();
//取款
void withdraw ();
//查询
void query ();
//查找一个账户在数组中的位置
int findAnAccount (int accNumber);
//显示一个账户的信息
void dispAnAccount (int i);
//生成账号
int createAccNumber ();
//把数据从文件中读到结构体数组中
int readDate ();
//把结构体中的数据写入文件
int writeDate ();
//检查录入的户名、密码、存入金额格式是否合法。返回值:0:合法、1:非法。
//flag: 0:户名、1:密码、2:存入现金。checkstr:需要检查的项目。
int checkInput(int flag,char *str);
//去除右空格
char qeryall ();
//得到键盘录入的户名
void getaccName (char accname[]);
//得到键盘录入的密码
void getaccPWD (char accPWD[]);
//得到键盘上录入的金额
double getcash(int flag);
//得到键盘录入的账号
int getaccNumber (int flag);#define N_MAXREC_NO 100 //文件最大行数
#define MAXLINE 256 //行最大长度
//数据文件记录结构
struct record
{
int accNumber;//账号
char accName[9];//用户名
char accPWD[7];//用户密码
double balance;//账户余额
char flag[2];//销户标志
};
//自定义数组类型
typedef struct record RECORD;
//结构体数组
RECORD rs[N_MAXREC_NO];
//最后一个账户在结构体中的位置
int maxAccount=-1;
--再添加一个源文件命名为“Bank.cpp”
代码为:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include "bank.h"
#include <fstream>
int main()
{
welcome();
char userName[9];
char userPWD[7];
int i;
for(i = 1;i <= 3;i ++)
{
printf("\n");
printf("\n请输入用户名:");
scanf("%s",userName);
fflush(stdin);
printf("\n请输入用户密码:");
scanf("%s",userPWD);
fflush(stdin);
if ((strcmp(userName,"admin") == 0) && (strcmp(userPWD,"admin") == 0))
{
mainmenu ();//用户密码正确显示主菜单
}
else
{
if (i < 3)
{
//用户名或密码错误,提示用户从新输入
printf("用户名或密码输入错误,请从新输入:");
}
else
{
//连续三次输入错误用户名或密码,
printf("用户密码错误三次,退出系统···");
exit(0);
}
}
}
return 0;
}
void welcome()
{
printf("+===============================================+\n");
printf(" | |\n");
printf(" |* *|\n");
printf(" |* 欢迎使用银行储蓄综合应用平台 *|\n");
printf(" |* *|\n");
printf(" | |\n");
printf("+===============================================+\n");
}
void mainmenu()
{ //-1代表不存在
int choice;
choice = -1;
do
{
printf("***************************************************\n");
printf(" ** **\n");
printf(" ** 请选择业务种类 **\n");
printf(" ** 1.存款 请按1 2.取款 请按2 **\n");
printf(" ** 3.查询 请按3 4.开户 请按4 **\n");
printf(" ** 5.销户 请按5 6.注销(退出)请按0 **\n");
printf("***************************************************\n");
printf("请输入你的选择:");
scanf("%d",&choice);//等于cin >> choice.
fflush (stdin);
switch(choice)
{
case 0:
exit (0);
case 1:
deposit ();
break;
case 2:
withdraw ();
break;
case 3:
query ();
break;
case 4:
openAnAccount();
break;
case 5:
closeAnAccount();
break;
default:
printf ("\n无效选项!\n");
break;
}
}
while(choice != 0);
}
void openAnAccount() //开户
{
//定义参数
int accNumber;//账号
char accName[9];//户名
char accPWD[7];//密码
double cash;//存入金额
//初始化变量
accNumber = 0;
memset(accName,0,sizeof(accName));
memset(accPWD,0,sizeof(accPWD));
cash = 0;
//生成账号
accNumber = createAccNumber();
//获取账户名
getaccName(accName);
//获取账户密码
getaccPWD(accPWD);
//获取存入金额
cash = getcash(0);
maxAccount ++; //获取一个新的账户位置
rs[maxAccount].accNumber = accNumber;//新位置储存生成账号
strcpy(rs[maxAccount].accName,accName);//新位置储存用户名
strcpy(rs[maxAccount].accPWD,accPWD);//新位置储存用户密码
rs[maxAccount].balance = cash;//新位置储存余额
strcpy(rs[maxAccount].flag,"0");//记录账号状态
//生成账号
/*if (writeData())
{
printf("写文件出错!");
return;
}*/
//显示账户信息
dispAnAccount(maxAccount);
printf("开户成功按任意键返回···\n");
getch();//缓冲
return;
}
void dispAnAccount(int i)
//显示用户信息函数
{
printf("+------------------------------------------------+\n");
printf("|%-5s |%-8s |%-6s |%-12s |%4s |\n","账号","户名","密码","余额","状态");
printf("+-------+----------+--------+-------------+------+\n");
printf("|%5d |%-8s |%-6s |%-12.2f |%4s |\n",rs[i].accNumber,rs[i].accName,rs[i].accPWD,rs[i].balance,atoi(rs[i].flag)?"销户":"正常");
printf("+------------------------------------------------+\n");
}
//生成账号信息
int createAccNumber()
{
if(maxAccount == -1)
{
//账号从开始
return 10001;
}
else
{
//顺序生成账号
return rs[maxAccount].accNumber + 1;
}
}
//获取账户名函数
void getaccName(char accName[])
{
char caccName[100];//户名
int i = 1;
while(i)
{
memset(caccName,0,sizeof(caccName));
printf("\n");
printf("请输入储户户名:");
scanf("%s",caccName);
fflush(stdin);
if (checkInput(0,caccName))
{
printf("超过位的最大户名长度!");
continue;
}
i = 0;
}
memcpy(accName,caccName,9);
}
//获取账户密码函数
void getaccPWD(char accPWD[])
{
char caccPWD[100];//密码
int i = 1;
while(i)
{
memset(caccPWD,0,sizeof(caccPWD));
printf("\n");
printf("请输入用户密码:");
scanf("%s",caccPWD);
fflush(stdin);
if(checkInput(1,caccPWD))
{
printf("超过位的最大密码长度!");
continue;
}
i = 0;
}
memcpy(accPWD,caccPWD,7);
}
//得到键盘输入的金额
double getcash(int flag)
{
char ccash[100];//把输入的金额,保存在数组中
double dcash;//输入的金额
int i = 1;
while (i)
{
memset(ccash,0,sizeof(ccash));
dcash = 0;
printf("\n");
switch(flag)
{
case 0:printf("请输入存入金额:");break;
case 1:printf("请输入取款金额:");break;
}
scanf("%lf",&dcash);
fflush(stdin);
sprintf(ccash,"%12.2f",dcash);
if (checkInput(2,ccash))
{
printf("录入金额超出位的最大存入(取出)金额长度!");
continue;
}
i = 0;
}
return dcash;
}
//检查操作员输入的是否规范
int checkInput(int flag,char *checkStr)
{
switch(flag)
{
//检查用户名是否超出最大长度
case 0:
{
if(strlen(checkStr) > 8)
{
return 1;
}
break;
}
case 1:
{
if (strlen(checkStr) > 6)
{
return 1;
}
break;
}
//检查存入金额是否超过最大长度
case 2:
{
if(strlen(checkStr) > 12)
{
return 1;
}
break;
}
default:
return 0;
}
return 0;
}
//存款
void deposit()
{
int accNumber;//账号
int accountPosition;//账号在数组中的位置、
double cash;//存入金额
//初始化
accNumber = 0;
accountPosition = -1;//-1表示未找到
cash = 0;
//获取存款账号
accNumber = getaccNumber(0);
//查找该账号
accountPosition = findAnAccount(accNumber);
if (accountPosition == -1)
{
printf("查无此账户,请按任意键返回···\n");
getch();
return;
}
//显示账户信息
dispAnAccount(accountPosition);
//已销户账户,不能进行存款操作
if (strcmp(rs[accountPosition].flag,"0") != 0)
{
printf("该账户已销户,不能进行存款!请按任意键返回···\n");
getch();
return;
}
//得到存入金额
cash = getcash (0);
rs[accountPosition].balance = rs[accountPosition].balance + cash;
//保存数据
/* if (writeData())
{
printf ("写文件出错!");
return;
}*/
dispAnAccount(accountPosition);
printf("存款成功,请按任意键返回···\n");
getch();
}
//获取用户账号函数的实现
int getaccNumber(int flag)
{
int iaccNumber;//账号
iaccNumber = 0;
printf("\n");
switch(flag)
{
case 0:printf("请输入要存款的账号:");break;
case 1:printf("请输入要取款的账户:");break;
case 2:printf("请输入要销户的账户:");break;
case 3:printf("请输入要查询的账户:");break;
}
scanf("%d",&iaccNumber);
fflush(stdin);
return iaccNumber;
}
//实现查找账户函数
int findAnAccount(int accNumber)
{
int accountPosition;//帐户在数组中的位置
int i;//循环控制变量
//初始位置是 -1,表示未找到
//查找账户的位置
accountPosition = -1;
if(accNumber<=10000)
{
printf("输入错误按任意键返回:\n"); //修改
getch();
mainmenu();
}
i = accNumber-10001; //修改后的
accountPosition = i;
return accountPosition;
}
//查找账户的位置
/*for(i = 0;i <= maxAccount;i ++)
{
if(rs[i].accNumber == accNumber)
{
accountPosition = i;
break;
}
}
return accountPosition;
} */
//取款
void withdraw()
{
int accNumber;//账号
char accPWD[7];//账户密码
int accountPosition;//账号在数组中的位置
double cash;//取出金额
//初始化
accNumber = 0;
accountPosition = -1;//-1表示未找到
cash = 0;
//获取取款账号
accNumber = getaccNumber(1);
//获得要查询的账户密码
getaccPWD(accPWD);
//查找该账号
accountPosition = findAnAccount(accNumber);
if (accountPosition == -1)
{
printf("查无此账户,请按任意键返回···\n");
getch();
return;
}
//密码不正确
if (strcmp(rs[accountPosition].accPWD,accPWD) != 0)
{
printf("\n密码不正确!请按任意键返回···\n");
getch();
return;
}
//显示账户信息
dispAnAccount(accountPosition);
//已销户账户,不能进行取款操作
if (strcmp(rs[accountPosition].flag,"0") != 0)
{
printf("该账户已销户,不能进行取款!请按任意键返回···\n");
getch();
return;
}
//得到取出金额
cash = getcash (1);
if (cash > rs[accountPosition].balance)
{
printf("\n取款金额大于账户余额,取款失败!请按任意键返回···\n");
getch();
}
else
{
rs[accountPosition].balance = rs[accountPosition].balance - cash;
}
//保存数据
/* if (writeData())
{
printf ("写文件出错!");
return;
}*/
dispAnAccount(accountPosition);
printf("取款成功,请按任意键返回···\n");
getch();
}
//查询
void query()
{
int accNumber;//账号
char accPWD[100];//密码
int accountPosition;//账户在数组中的位置
//初始位置是-1,表示未找到
accountPosition = -1;
accNumber = 0;
memset(accPWD,0,sizeof(accPWD));
//获得要查询账号
accNumber = getaccNumber(3);
//获得要查询的账户密码
getaccPWD(accPWD);
//查找该账户
accountPosition = findAnAccount(accNumber);
if (accountPosition == -1)
{
printf("查无此账户,请按任意键返回···\n");
getch();
}
//显示账户信息
dispAnAccount(accountPosition);
//密码不正确
if (strcmp(rs[accountPosition].accPWD,accPWD) != 0)
{
printf("\n密码不正确!请按任意键返回···\n");
getch();
return;
}
//已销户账户
if (strcmp(rs[accountPosition].flag,"0") != 0)
{
printf("\n账号已销户!请按任意键返回···\n");
getch();
return;
}
printf("查询成功,请按任意键返回···\n");
getch();
return ;
}
//销户
void closeAnAccount()
{
int accNumber;//用户账号
char accPWD[7];//用户密码
char userAnswer;//用户的回答
int accountPosition;//账号在数组中的位置
//初始化
accountPosition = -1;//-1表示未找到
accNumber = 0;
memset(accPWD,0,sizeof(accPWD));
//获取要销户账号
accNumber = getaccNumber(2);
//获取要销户密码
getaccPWD(accPWD);
//查找该账户
accountPosition = findAnAccount(accNumber);
if (accountPosition == -1)
{
printf("\n查无此账户!请按任意键返回···\n");
getch();
return;
}
//显示账户信息
dispAnAccount(accountPosition);
//密码不正确
if (strcmp(rs[accountPosition].flag,"0") != 0)
{
printf("\n密码输入错误,请按任意键返回···\n");
getch();
return;
}
//账户已销户
if (strcmp(rs[accountPosition].accPWD,accPWD) != 0)
{
//已销户账户,不能再次销户
printf("该账户已经销户,不能再次销户,请按任意键返回···\n");
getch();
return;
}
//确认销户
printf("确认账户%d销户吗?[1:销户|其他:不销户]",rs[accountPosition].accNumber);
printf("请输入你的选择:");
scanf("%c",&userAnswer);
fflush(stdin);
if(userAnswer == '1')
{
strcpy(rs[accountPosition].flag,"1");//‘1’为状态
rs[accountPosition].balance = 0;
//保存数据
/*if(writeData())
{
printf("写文件出错!");
return;
}*/
dispAnAccount(accountPosition);
printf("销户成功!按任意键返回···\n");
getch();
return;
}
else
{
printf("用户取消销户,按任意键返回···\n");
getch();
return;
}
}
运行结果为:
+===============================================+
| |
|* *|
|* 欢迎使用银行储蓄综合应用平台 *|
|* *|
| |
+===============================================+
请输入用户名:admin
请输入用户密码:admin
***************************************************
** **
** 请选择业务种类 **
** 1.存款 请按1 2.取款 请按2 **
** 3.查询 请按3 4.开户 请按4 **
** 5.销户 请按5 6.注销(退出)请按0 **
***************************************************
请输入你的选择:4
请输入储户户名:li
请输入用户密码:123
请输入存入金额:12000
+------------------------------------------------+
|账号 |户名 |密码 |余额 |状态 |
+-------+----------+--------+-------------+------+
|10001 |li |123 |12000.00 |正常 |
+------------------------------------------------+
开户成功按任意键返回···
***************************************************
** **
** 请选择业务种类 **
** 1.存款 请按1 2.取款 请按2 **
** 3.查询 请按3 4.开户 请按4 **
** 5.销户 请按5 6.注销(退出)请按0 **
***************************************************
请输入你的选择:4
请输入储户户名:taiping
请输入用户密码:456
请输入存入金额:10000
+------------------------------------------------+
|账号 |户名 |密码 |余额 |状态 |
+-------+----------+--------+-------------+------+
|10002 |taiping |456 |10000.00 |正常 |
+------------------------------------------------+
开户成功按任意键返回···
***************************************************
** **
** 请选择业务种类 **
** 1.存款 请按1 2.取款 请按2 **
** 3.查询 请按3 4.开户 请按4 **
** 5.销户 请按5 6.注销(退出)请按0 **
***************************************************
请输入你的选择:1
请输入要存款的账号:10001
+------------------------------------------------+
|账号 |户名 |密码 |余额 |状态 |
+-------+----------+--------+-------------+------+
|10001 |li |123 |12000.00 |正常 |
+------------------------------------------------+
请输入存入金额:200
+------------------------------------------------+
|账号 |户名 |密码 |余额 |状态 |
+-------+----------+--------+-------------+------+
|10001 |li |123 |12200.00 |正常 |
+------------------------------------------------+
存款成功,请按任意键返回···
***************************************************
** **
** 请选择业务种类 **
** 1.存款 请按1 2.取款 请按2 **
** 3.查询 请按3 4.开户 请按4 **
** 5.销户 请按5 6.注销(退出)请按0 **
***************************************************
请输入你的选择:2
请输入要取款的账户:10002
请输入用户密码:456
+------------------------------------------------+
|账号 |户名 |密码 |余额 |状态 |
+-------+----------+--------+-------------+------+
|10002 |taiping |456 |10000.00 |正常 |
+------------------------------------------------+
请输入取款金额:1000
+------------------------------------------------+
|账号 |户名 |密码 |余额 |状态 |
+-------+----------+--------+-------------+------+
|10002 |taiping |456 |9000.00 |正常 |
+------------------------------------------------+
取款成功,请按任意键返回···
***************************************************
** **
** 请选择业务种类 **
** 1.存款 请按1 2.取款 请按2 **
** 3.查询 请按3 4.开户 请按4 **
** 5.销户 请按5 6.注销(退出)请按0 **
***************************************************
请输入你的选择:5
请输入要销户的账户:10001
请输入用户密码:123
+------------------------------------------------+
|账号 |户名 |密码 |余额 |状态 |
+-------+----------+--------+-------------+------+
|10001 |li |123 |12200.00 |正常 |
+------------------------------------------------+
确认账户10001销户吗?[1:销户|其他:不销户]请输入你的选择:1
+------------------------------------------------+
|账号 |户名 |密码 |余额 |状态 |
+-------+----------+--------+-------------+------+
|10001 |li |123 |0.00 |销户 |
+------------------------------------------------+
销户成功!按任意键返回···