学术休假之银行储蓄系统
来源:互联网 发布:淘宝梦幻挤线器 编辑:程序博客网 时间:2024/04/24 16:43
银行储蓄系统指导
该银行储蓄系统的目标,将是设计一个可以支持多名储户开户、存款、取款、转帐、改密、挂失、解挂、销户等功能的系统,以此初步体会完整系统开发,综合运用已经学过的知识。
以下提示中,给出了多个层次的需要,可以先保证最基本、最简单功能的实现,迭代式地完善,实现“改进意见”中的要求。
按照模块化程序设计要求,充分利用函数实现功能。不赞成写很长的函数,提倡用多文件组织。
功能
图 示
说明和提示
登录
输入业务员用户名和密码。3次输入不正确,强制退出程序。
基本要求
可以只设一名业务员,用全局变量表示其用户名和密码,写在程序中。
改进意见
可以用一个文本文件保存多名业务员的信息。定义结构体表示业务员,定义该种类型的结构体数据,在程序开始执行时,读入业务员信息,以支持多名业务员登录。
用文件保存密码时,一般不用“明文”,而要加密处理。
系统菜单
当业务员信息验证后,进入到系统主控菜单,由业务员为储户办理各种业务,直到按0后退出。
基本要求
每次启动系统,都是从0用户开始办理业务
改进意见
储户的信息都保存在文件中,在处理业务前需要将信息读入。
开户
账号由系统自动分配
确认密码和密码不同时要拒绝。
开户后,账号状态为0-正常
增加一个银行账户(银行卡)
银行账户如下定义:
struct Account
{
long accNumber;//卡号
string accName;//户主
string password;//密码
double balance;//余额
string identity;//身份证号
int state;//状态 0:正常 -1:挂失 2:销户
};
设全局变量Number,表示第一张卡号
long Number=10001;
在开户时,新增账户的卡号,即为Number,并更改该值,以使下一个账户获得连续值。
基本要求
设银行只支持2000个账户,用下面的数组存储用户的信息
Account array[2000];
改进意见
1、要求密码是6位数字字符,身份证号由18位数字字符构成,身份证号最后一位可以是x
2、用静态数组太浪费空间,改用动态数组
3、将用户信息改为链表,是更合适的做法
4、关闭程序前,将数据写入文件,银行的业务信息得以保存。开始运行程序时,再将文件中的数据读入。保存密码时,可以考虑加密。
5、新增账户的卡号,也可以保存在专门文件中。
6、账户状态state可以定义为枚举型。
销户
输入账号,确认后,将余额全部取完,并将状态state置为2-销户。
办理销户的账号,其状态必须为“0-正常”(下同)。
存款
输入账号、金额,记录存款后的余额。
取款
输入账号、金额,记录取款后的余额。
取款额不能超过余额。
查询
输入账号,显示账户信息。
转账
输入转出账号、金额、转入账户,记录转账后的余额。
账户必须存在,扣除转出账户的金额,要与转入账户增加的金额相同。
挂失
输入账号,将状态改变为 1-挂失
解挂
输入账号,将状态为 1-挂失 的账户状态改为 0-正常
改密
用新密码替代旧密码。
新密码必须与确认密码相同。
计算利息
(这属于银行后台管理的功能,不体现在界面上,以上的设计尚不能支持真实系统中的计息功能,故将此作为选做功能。)
现行银行计息的规则是,每半年计算一次利息,并将利息加到账号余额中。
如果要计算利息,需要将每一笔存、取、转的信息记录下来,以获得各个时间段内的金额,完成利息计算。
请自行设计有关的数据结构完成设计
代码如下:
#include <fstream>#include <iostream>#include <string>#include <cstdio>#include <cstdlib>using namespace std;struct SalesData{ string Name; //业务员用户名 string word; //业务员密码};SalesData Salesman[10]; //业务员信息,最大允许十名业务员操作。struct Account{ long accNumber; //卡号 string accName; //户主 string password; //密码 double balance; //余额 string identity; //身份证号 int state; //状态 0:正常 -1:挂失 2:销户};Account array[2000]; //银行用户信息,最大支持2000名用户。bool Home( ); //主页void Menu( );int salesman( ); //打开业务员数据文件int OpenData( ); //打开银行用户数据文件int Checksalesman(string ); //检查业务员是否存在并读取业务员信息bool CheckPassword(string ,int ); //判断密码是否正确void SaveData(int ); //保存信息至银行数据文件void Menu( ); //菜单void OpenAccount(int ); //开户void DeleteAccount( ); //销户void SaveMoney( ); //存款void DepositMoney( ); //取款void SearchMessage( ); //查询void TransferAccount( ); //转账void LossReport( ); //挂失void HangingSolutions( ); //解挂void ChangePassword( ); //改密int main( ){ int num,count; if (Home( )) { count=OpenData( ); do { Menu( ); cout<<"请输入操作指令:"; cin>>num; if (num==0) break; else if (num==1) OpenAccount(count); else if(num==2) DeleteAccount( ); else if(num==3) SaveMoney(); else if(num==4) DepositMoney( ); else if(num==5) SearchMessage( ); else if(num==6) TransferAccount( ); else if(num==7) LossReport( ); else if(num==8) HangingSolutions( ); else if(num==9) ChangePassword( ); SaveData(count); } while(1); } cout<<"谢谢您的光临,欢迎下次再来。"<<endl; return 0;}bool Home(){ int Num=1; string salesname; string password; int number; cout<<"+ - - - - - - - - - - +"<<endl; cout<<"欢 迎 光 临 刘 氏 银 行"<<endl; cout<<"+ - - - - - - - - - - +"<<endl; do { cout<<"请输入业务员用户名:"; cin>>salesname; number=Checksalesman(salesname); cout<<"请输密码:"; cin>>password; if (CheckPassword(password,number)) { cout<<"密码输入正确,正在进入..."<<endl; return true; } else { if (Num>3) { cout<<"密码输入错误超过3次,正在退出系统;"<<endl; return false; } cout<<"用户名或密码输入错误,请重新输入."<<endl; Num++; continue; } } while (1);}void Menu( ){ cout<<"+--------------------------+"<<endl; cout<<"+ 1 开户 2 销户 3 存款 +"<<endl; cout<<"+ 4 取款 5 查询 6 转账 +"<<endl; cout<<"+ 7 挂失 8 解挂 9 改密 +"<<endl; cout<<"+ 0 退出 +"<<endl; cout<<"+--------------------------+"<<endl;}int salesman( ){ int num=0; ifstream infile("BankSalesman.txt",ios::in); if (!infile) { cout<<"open error!"; exit(1); } while (infile>>Salesman[num].Name>>Salesman[num].word) num++; infile.close();//; return num;}int OpenData( ){ int num=0; ifstream infile("BankData.txt",ios::in); if (!infile) { cout<<"open error!"; exit(1); } while (infile>>array[num].accNumber) { infile>>array[num].accName; infile>>array[num].password; infile>>array[num].balance; infile>>array[num].identity; infile>>array[num].state; num++; } infile.close();//读入完毕要关闭文件 return num;}void SaveData(int num){ ofstream outfile("BankData.txt",ios::out); if (!outfile) { cout<<"open error!"; exit(1); } int i; for (i=0; i<num; i++) { outfile<<array[i].accNumber<<" "<<array[i].accName<<" "<<array[i].password<<" "<<array[i].balance<<" "<<array[i].identity<<" "<<array[i].state<<endl; } outfile.close();//用完了必须关闭}int Checksalesman(string name){ int i,num; num=salesman(); for(i=0; i<num; i++) { if (Salesman[i].Name==name) return i; } return -1;}bool CheckPassword(string words,int num){ if (words==Salesman[num].word) return true; else return false;}void OpenAccount(int num){ string pass1,pass2,name; double money; int i; long account; i=num; account=10001+num; do { cout<<"正在开户"<<endl; cout<<"帐号:"<<account<<endl; cout<<"户主姓名:"; cin>>name; cout<<"密码:"; cin>>pass1; cout<<"确认密码:"; cin>>pass2; if (pass1==pass2) { cout<<"存入金额:"; cin>>money; cout<<"身份证号:"; cin>>array[i].identity; array[i].accName=name; array[i].accNumber=account; array[i].password=pass1; array[i].balance=money; array[i].state=0; ofstream outfile("BankData.txt",ios::out); if (!outfile) { cout<<"open error!"; exit(1); } outfile<<array[i].accNumber<<" "<<array[i].accName<<" "<<array[i].password<<" "<<array[i].balance<<" "<<array[i].identity<<" "<<array[i].state<<endl; outfile.close(); cout<<"开户成功!"<<endl; break; } else { cout<<"两次密码输入不一致,请重新输入。"<<endl; continue; } } while(1);}void DeleteAccount( ){ string pass; int i,account,Num=1; char opt; cout<<"待销户帐号:"; cin>>account; i=account-10001; cout<<"姓名:"; cout<<array[i].accName<<endl; do { cout<<"密码:"; cin>>pass; if (pass==array[i].password) { cout<<"余额:"<<array[i].balance<<endl; cout<<"确认销户 (y/n) ?"; cin>>opt; if (array[i].state==0) { if (opt=='Y' || opt=='y') { array[i].state=2; cout<<"取款"<<array[i].balance<<"元,销户成功!"<<endl; break; } else if (opt=='N'||opt=='n' ) { cout<<"取消操作成功!"<<endl; break; } } else { cout<<"该账户已经销户或挂失!如有疑问,请到柜台咨询!"<<endl; break; } } else { if (Num>3) { cout<<"密码输入错误超过3次,即将退出系统。"<<endl; break; } cout<<"密码输入有误,请重新输入!"<<endl; Num++; continue; } } while (1);}void SaveMoney( ){ int account,i; double money; cout<<"账号:"; cin>>account; i=account-10001; if (array[i].state==0) { cout<<"姓名:"; cout<<array[i].accName<<endl; cout<<"存款额:"; cin>>money; array[i].balance+=money; cout<<"现余额共计"<<array[i].balance<<"元,存款成功!"; } else { cout<<"该账户不存在或已挂失!如有疑问,请到柜台咨询!"; }}void DepositMoney( ){ int account,i,Num=1; double money; string pass; cout<<"账号:"; cin>>account; i=account-10001; if (array[i].state==0) { cout<<"姓名:"; cout<<array[i].accName<<endl; do { cout<<"密码:"; cin>>pass; if (pass==array[i].password) { cout<<"取款额:"; cin>>money; if (money<=array[i].balance) { array[i].balance-=money; cout<<"现余额共计"<<array[i].balance<<"元,取款成功!"; break; } else { cout<<"余额不足,取款失败!"<<endl; continue; } } else { if (Num>3) { cout<<"密码输入错误超过3次,即将退出系统。"<<endl; break; } cout<<"密码输入有误,请重新输入!"<<endl; Num++; continue; } } while(1); } else { cout<<"该账户已销户或已挂失!如有疑问,请到柜台咨询!"; }}void SearchMessage( ){ int account,i,Num=1; string pass; cout<<"账号:"; cin>>account; i=account-10001; cout<<"姓名: "; cout<<array[i].accName<<endl; do { cout<<"密码:"; cin>>pass; if (pass==array[i].password) { cout<<"余额:"<<array[i].balance<<endl; cout<<"当前状态:"; if (array[i].state==0) cout<<"正常"<<endl; else if(array[i].state==1) cout<<"挂失"<<endl; else if(array[i].state==2) cout<<"销户"<<endl; cout<<"身份证号:"<<array[i].identity<<endl; cout<<"查询完毕!"<<endl; break; } else { if (Num>3) { cout<<"密码输入错误超过3次,即将退出系统。"<<endl; break; } cout<<"密码输入有误,请重新输入!"<<endl; Num++; continue; } } while(1);}void TransferAccount( ){ int account1,account2,i,j,Num=1; double money; string pass; cout<<"转出账号:"; cin>>account1; i=account1-10001; if (array[i].state==0) { do { cout<<"密码:"; cin>>pass; if (pass==array[i].password) { cout<<"转账金额:"; cin>>money; if (money>=array[i].balance) { cout<<"转入账号:"; cin>>account2; j=account2-10001; if (array[j].state==0) { array[j].balance+=money; array[i].balance-=money; cout<<"转账成功!余额"<<array[i].balance<<"元。"<<endl; break; } else { cout<<"您所转入的账号已销户或挂失!"<<endl; break; } } else { cout<<"余额不足!转账失败。"<<endl; continue; } } else { if (Num>3) { cout<<"密码输入错误超过3次,即将退出系统。"<<endl; break; } cout<<"密码输入有误,请重新输入!"<<endl; Num++; continue; } } while(1); } else { cout<<"您的账户已注销或挂失!如有疑问,请到柜台查询!"<<endl; }}void LossReport( ){ int account,i,Num=1; string pass; cout<<"账号:"; cin>>account; i=account-10001; cout<<"姓名:"<<array[i].accName<<endl; do { cout<<"密码:"; cin>>pass; if (pass==array[i].password) { if (array[i].state==0) { array[i].state=1; cout<<"挂失成功。"<<endl; break; } else { cout<<"该用户已经挂失或已经销户,无法挂失。"<<endl; break; } } else { if (Num>3) { cout<<"密码输入错误超过3次,即将退出系统。"<<endl; break; } cout<<"密码输入有误,请重新输入!"<<endl; Num++; continue; } } while(1);}void HangingSolutions( ){ int account,i,Num=1; string pass; cout<<"账号:"; cin>>account; i=account-10001; cout<<"姓名:"<<array[i].accName<<endl; do { cout<<"密码:"; cin>>pass; if (pass==array[i].password) { if (array[i].state==1) { array[i].state=0; cout<<"解挂成功。"<<endl; break; } else { cout<<"该用户为正常状态或已经销户,无需解挂。"<<endl; break; } } else { if (Num>3) { cout<<"密码输入错误超过3次,即将退出系统。"<<endl; break; } cout<<"密码输入有误,请重新输入!"<<endl; Num++; continue; } } while(1);}void ChangePassword( ){ int account,i,Num=1; string pass,pass1,pass2; cout<<"账号:"; cin>>account; i=account-10001; cout<<"姓名:"<<array[i].accName<<endl; do { cout<<"密码:"; cin>>pass; if (pass==array[i].password) { cout<<"新密码: "; cin>>pass1; cout<<"确认密码:"; cin>>pass2; if (pass1==pass2) { array[i].password=pass1; cout<<"修改成功!"<<endl; break; } else { cout<<"前后密码输入不一致,请重新输入。"<<endl; break; } } else { if (Num>3) { cout<<"密码输入错误超过3次,即将退出系统。"<<endl; break; } cout<<"密码输入有误,请重新输入!"<<endl; Num++; continue; } } while(1);}
图就不发了,网络不是很好,上传不了。
程序能成功运行,但不是要求的每种功能一个界面,所以可能在运行界面中也有我没发现的问题,为了编这个程序,当初用了我快一下午的时间,不过编完后有些问题然后因为一些事就没有去修改,刚刚饭后开始修改,中间除了去HDU上做了一道题外,一直修改到现在,总算是解决了。
- 学术休假之银行储蓄系统
- 学术休假-银行储蓄系统
- 学术休假期间作业——银行储蓄系统(基础版)
- 学术休假之通讯录管理
- 银行储蓄系统
- 银行储蓄系统
- 银行储蓄系统指导
- 银行储蓄系统...
- 银行储蓄系统
- 银行储蓄系统
- Odi银行储蓄系统
- 课程设计-银行储蓄系统
- 第一版 银行储蓄系统
- 银行储蓄系统
- 课程设计-银行储蓄系统
- 银行储蓄系统
- 银行储蓄系统
- 课程设计-银行储蓄系统。
- 数组排序的六种方法
- 文章标题
- The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files
- 【个人记录】读书笔记
- 资源列表索引
- 学术休假之银行储蓄系统
- 节日余温与抉择
- swift学习记录(for)
- ``与$() 差别
- jsp编码过程
- 1017. Queueing at Bank
- Httpservlet cannot be resolved to a type的原因与解决方法
- 辛星云计算笔记第零篇说明
- CocoaPods