项目名称: 银行储蓄综合业务平台
编写语言: 面向对象的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 |销户 | +------------------------------------------------+ 销户成功!按任意键返回···