资源描述
c++银行账户管理课程设计
29
2020年4月19日
资料内容仅供参考,如有不当或者侵权,请联系本人改正或者删除。
JINGCHU UNIVERSITY OF TECHNOLOGY
C++银行账户管理
课程设计报告
学 院:计算机工程学院 班 级:09级计算机科学与技术1班
学生姓名: 学 号:
设计地点( 单位) : A5-101
设 计 题 目: 银行账户管理程序
完成日期: 12月 25日
指导教师评语: ____________ __ ______________________________________________________________________________________________________________________________________________
成绩(五级记分制):_____ _ __________
教 师 签 名:__________ ________
目 录
一、 设计思想……………………………………………………03
二、 模块设计与分析……………………………………………03
三、 程序设计介绍………………………………………………04
四、 框架结构图…………………………………………………04
五、 程序代码……………………………………………………05
六、 测试数据……………………………………………………14
七、 数据调试……………………………………………………14
八、 课程设计总结………………………………………………16
九、 课程设计教材及主要参考资料……………………………16
一、 设计思想
定义一个用户类customer和一个银行类YH, 程序运行时, 能够由用户选择进行开户、 登录、 取款、 存款、 修改密码、 转账、 销户操作, 用户销户后账号被回收, 而且该账号能够继续分配给其它账户, 不允许用户透支, 根据姓名或账号能够进行用户的信息查询, 所有的账户信息应存放到一个文件中, 能够随时的访问和更新。
二、 模块设计与分析
1. 登录页面: 输入帐号和密码, 根据用户输入的帐号和密码, 到后台文件查询, 若正确则登录成功, 并保存卡好信息已备后用。若帐号存在和密码不匹配或无该帐号已经注销, 提示该帐号已存在或已注销。
2. 主界面页面: 主要导航栏有存款、 取款、 账户信息、 注销、 注销、 返回上一步。
3. 开户页面: 提供开户界面, 由用户输入新账户的信息, 将该信息保存到文件中, 并将开户金额作为该卡的第一次存款记录存人文件。
4. 存钱页面: 从登录界面得到帐号, 并提供数据输入界面, 等待用户的输入存款金额, 同时将存钱的金额显示在页面上。
5. 取款页面: 从登录界面得到帐号, 并提供数据输入界面, 等待用户输入取款金额, 如果取款金额大于该用户卡上的余额则不能取款, 或者将新的余额写人文件, 并将本次取款事件写入文件同时将取钱的金额显示在页面上。
6. 账户信息页面: 从登录界面得到帐号, 把本人显示到界面中。
7. 转账页面: 从登录界面得到帐号, 输入要转入的帐号, 在输入金额, 显示在页面上, 如果金额超过余额将操作失败。
8. 注销页面: 从关闭文件, 状态为注销, 最后关闭整个系统。
三、 程序设计介绍
系统由2个类构成, YH( 银行类) 和Consumer( 客户类) , Consumer( 客户类) 是YH( 银行类) 的公有继承类。YH( 银行类) 中有实现登陆系统, 开户, 销户, 转账, 退出系统等功能函数, Consumer( 客户类) 中有实现存钱, 取钱, 修改个人账号密码, 显示个人账号信息等功能函数。因为Consumer( 客户类) 是YH( 银行类) 的公有继承类, 因此, 一个用户只需创立一个Consumer( 客户类) 对象, 当用户进行开户, 销户等操作时, 能够直接调用YH( 银行类) 的成员函数。
银行类中的函数:
void set_account(); //银行开户功能
void del_account(); //注销账户功能
void transfer(int); //转账功能
void enter_account(); //进入用户个人信息功能
void addmoney(int,float);//存款功能
void exitYH();// 退出系统
银行管理系统
存钱页面
取款页面
转账页面页面
修改密码
查看信息
登录界面
注册开户
主界页面
注销退出
四、 框架结构图
五、 程序代码
#include<iostream>
#include <string>
#include<fstream>
using namespace std;
class consumer;
class YH //银行类
{
public:
void set_account();//银行开户功能
void del_account(); //注销账户功能
void transfer(int); //转账功能
void enter_account(); //进入用户个人信息功能
void addmoney(int,float);//存款功能
void exitYH();// 退出系统
void functionshow();
void save();
void load();// 功能界面
protected:
consumer *account[20];
static int acnum;//账户数
};
class consumer:public YH//用户类,继承银行类的属性
{
public:
friend class YH;
consumer(int id,string Name,string PassWord,float m)
{
ID=id;name=Name;money=m;passwd=PassWord;
}
consumer(){ID=0;name='0';money=0;passwd='0';}
int get_id(){return ID;}
void savemoney();// 取钱
string get_passwd(){return passwd;}// 取得密码
void display();
void fetchmoney(); //取钱
void change_passwd();
void add_money(float);
void dec_money(float);
float get_money();//卡卡转帐
private:
int ID; //开户帐号
string passwd; // 用户密码
string name; // 用户姓名
float money; //开户金额
};
void YH::save()
{ofstream ofile("bankdat.dat",ios::out);
ofstream outfile("bankdat.dat",ios::out);
int n=0;
outfile<<acnum<<" ";
for(n=0;n<acnum;n++)
{outfile<<account[n]->ID<<" ";
outfile<<account[n]->money<<" ";
outfile<<account[n]->name<<" ";
outfile<<account[n]->passwd<<" ";
}
outfile.close();
}
/*读入用户信息功能实现*/
void YH::load()
{ifstream infile("bankdat.dat",ios::in);
if(!infile)
{cerr<<"读取错误,无资料中!"<<endl;
return;
}
int n=0;
int id,m;
string nam,passw;
infile>>acnum;
for(n=0;n<acnum;n++)
{infile>>id;
infile>>m;
infile>>nam;
infile>>passw;account[n]->passwd;
consumer * acc = new consumer(id,nam,passw,m);
account[n] = acc;
}
infile.close();
cout<<"读取资料正常!"<<endl;
}
/*转账功能实现*/
void YH::transfer(int x)
{int id;
cout<<"请输入帐号:";
cin>>id;
int flag = 1;
int i = 0;
while((i<acnum)&&(flag))
{
if(id==account[i]->get_id()) flag = 0; else i++;
}
if(flag)
{
cout<<"帐号不存在!"<<endl<<endl;
return ;
}
float b;
cout<<endl<<"请输入你要转帐的金额:";
cin>>b;
while(b<=0)
{
cout<<"请输入正确的数字!"<<endl;
cout<<"→";
cin>>b;
}
if(account[x]->get_money()<b) cout<<"对不起,金额不够!!"<<endl;
else {account[x]->dec_money(b);account[i]->add_money(b);}
return;
}
/*账户金额计算*/
void consumer::add_money(float x)
{money=x+money;}
void consumer::dec_money(float x)
{money=money-x;}
void YH::addmoney(int x,float y)
{account[x]->money=account[x]->money-y;
}
float consumer::get_money()
{return money;}
void main()
{YH yh;
yh.functionshow();
}
/*主界面显示*/
void YH::functionshow()
{
int n;
do
{system("cls"); load();
cout<<endl<<"请输入相应的操作序号进行操作:"<<endl;
cout<<"㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣"<<endl;
cout<<"㊣ ㊣"<<endl;
cout<<"㊣ 1. 开户 ㊣"<<endl;
cout<<"㊣ ㊣"<<endl;
cout<<"㊣ 2.账户登录 ㊣"<<endl;
cout<<"㊣ ㊣"<<endl;
cout<<"㊣ 3.账户注销 ㊣"<<endl;
cout<<"㊣ ㊣"<<endl;
cout<<"㊣ 4.退出系统 ㊣"<<endl;
cout<<"㊣ ㊣"<<endl;
cout<<"㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣㊣"<<endl;
cout<<"→";
cin>>n;
while(n<1||n>4)
{
cout<<"操作错误, 请输入正确的操作序号!"<<endl;
cout<<"→";
cin>>n;
}
switch(n)
{
case 1: set_account();//开户
break;
case 2:enter_account();//登录
break;
case 3: del_account();//注销
break;
case 4: exitYH();//退出
break;
}
cin.get();
}
while(true);
}
void YH::enter_account()
{int id;
cout<<"请输入帐号:";
cin>>id;
int flag = 1;
int i = 0; //__page_break__
while((i<acnum)&&(flag))
{
if(id==account[i]->get_id()) flag = 0; else i++;
}
if(flag)
{
cout<<"帐号不存在!"<<endl<<endl;
return;
}
cout<<"请输入密码:";
string passw;
cin>>passw;
if(passw!=account[i]->get_passwd()) return;
account[i]->display();cin.get();cin.get();
int n;
do{system("cls");
cout<<"请选择下列操作: "<<endl;
cout<<"◎☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆◎"<<endl;
cout<<"◎ ◎"<<endl;
cout<<"◎ 1.查看账户信息 ◎"<<endl;
cout<<"◎ ◎"<<endl;
cout<<"◎ 2.取款 ◎"<<endl;
cout<<"◎ ◎"<<endl;
cout<<"◎ 3.存款 ◎"<<endl;
cout<<"◎ ◎"<<endl;
cout<<"◎ 4.修改密码 ◎"<<endl;
cout<<"◎ ◎"<<endl;
cout<<"◎ 5.转账 ◎"<<endl;
cout<<"◎ ◎"<<endl;
cout<<"◎ 6.返回上一菜单 ◎"<<endl;
cout<<"◎ ◎"<<endl;
cout<<"◎☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆◎"<<endl;
cout<<"→";
cin>>n;
switch(n)
{case 1: account[i]->display();break;
case 2: account[i]->fetchmoney();save();break;
case 3:account[i]->savemoney();save();break;
case 4:account[i]->change_passwd();save();break;
case 5:transfer(i);save();break;
case 6:return;
}cin.get();cin.get();
}
while(1);
}
void YH::set_account()
{
int id;
string nam;
string passw;
float m;
cout<<endl<<"请输入开户号: ";
cin>>id;
cout<<endl<<"请输入开户人姓名: ";
cin>>nam;
cout<<endl<<"请输入开户密码: ";
cin>>passw;
cout<<endl<<"请输入存入金额:";
cin>>m;
while(m<=0)
{
cout<<"请输入正确的数字!"<<endl;
cin>>m;
}
consumer * acc = new consumer(id,nam,passw,m);
account[acnum] = acc;
cout<<"开户成功!!"<<endl<<endl;
acnum++;
save();
cin.get();
return;
}
void YH::del_account()
{
int id;
cout<<endl<<"请输入你要注销的帐户号:";
cin>>id;
int flag = 1;
int i = 0;
while((i<acnum)&&(flag))
{
if(id == account[i]->get_id())
{
flag = 0;
}
else
{
i++;
}
}
if(flag)
{
cout<<"该帐号不存在, 请重新输入!"<<endl;
return;
}
for(int j=i;j<acnum;j++)
{
account[j] = account[j+1];
}
account[acnum-1]=NULL;
acnum--;
cout<<"你的账号已注销!!"<<endl<<endl;
save();
cin.get();
return;
}
void consumer::change_passwd()
{
string pwd,repwd;
cout<<"请输入新密码: ";
cin>>pwd;
cout<<"请再输入一次新密码: ";
cin>>repwd;
if(pwd!=repwd)
cout<<"你输入的两次密码不一样,按输入键返回上一层菜单!"<<endl;
else
cout<<"密码修改成功, 请牢记!"<<endl;cin.get();
}
void consumer::fetchmoney()
{
float m;
char ch;
do
{
cout<<endl<<"输入取款金额:"<<"¥>"<<endl ;
cin>>m;
while(m<=0)
{
cout<<"请输入正确的数字!"<<endl;
cout<<"→";
cin>>m;
}
if(money<m)
{
cout<<"对不起, 你的余额不足!"<<endl;
}
else
{money=money-m;
cout<<endl<<"操作成功, 请收好钱!"
<<endl;
}
cout<<"是否要继续该项操作: (Y/N) "
<<endl;
cout<<"→";
cin>>ch;
while(ch!='n'&&ch!='N'&&ch!='Y'&&ch!='y')//选择错误时判定
{
cout<<"→";
cin>>ch;
}
}while(ch=='y'||ch=='Y');
}
void consumer::savemoney()//存钱函数功能实现
{
float c;
char ch;
do
{
cout<<endl<<"请输入要存入的金额:"<<"¥>"<<endl ;
cin>>c;
while(c<=0)
{
cout<<"输入错误,请重新输入!"<<endl;
cout<<"→";
cin>>c;
}
money=money+c;
cout<<"操作已成功!"<<endl;
cout<<"是否要继续该项操作: (Y/N) "<<endl;
cout<<"→";
cin>>ch;
while(ch!='n'&&ch!='N'&&ch!='Y'&&ch!='y')
{
cout<<"→";
cin>>ch;
}
}while(ch=='y'||ch=='Y');
}
int YH::acnum=0;
void consumer::display()//用户信息界面
{system("cls");
cout<<"#####################################"<<endl;
cout<<"#"<<endl;
cout<<"# 用户姓名: "<<name<<endl;
cout<<"#"<<endl;
cout<<"# 帐号: "<<ID<<endl;
cout<<"#"<<endl;
cout<<"# 余额: "<<money<<endl;
cout<<"#"<<endl;
cout<<"# 按输入键回到上一菜单"<<endl;
cout<<"#"<<endl;
cout<<"#####################################"<<endl;
cout<<"→";
}
void YH::exitYH()//退出系统
{
cout<<endl<<"感谢您对本银行的支持,欢迎下次光临!"<<endl;
exit(0);
}
六、 测试数据:
帐号
户名
密码
开户金额
余额
阮伟
123
10000
10100
阮伟
123
100
0
七、 数据调试:
1.登陆界面
2.开户界面
3.账户操作
八 、 课程设计总结
经过这次C++课程设计, 使我学到面向对象的程序设计思想用到具体的工作和学习中, 加深对类与对象的理解, 是将计算机课程与实际问题相联接的关键步骤。经过课程设计, 能够提高自己的分析问题、 解决问题的能力, 从而运用所学知识解决实际问题的能力, 并培养基本的、 良好的程序设计技能。
这次的课程设计, 让我用了一个相对比较集中的时间去练习我的编程, 特别是自己的动手能力, 因为这次的课程设计覆盖面比较广泛。经过了这次的设计, 让我找到自己学习上的漏洞, 一些课程设计上的以前没有弄懂的知识, 都在这次的课程设计上有所提高。
九、 课程设计教材及主要参考资料
教学参考书
[1]李素若.《C++面向对象程序设计》.北京: 化学工业出版社, .
参考资料:
[1]郑莉, 傅仕星编, 《C++面向对象程序设计》, 清华大学出版社, 9月出
[2]谭浩强编, 《C++面向对象程序设计》, 清华大学出版社, 7月出版
[3]李师贤等译, 《C++精髓》, 机械工业出版社, 8月出版
[4]Davis Chapman, 《学用Visual c++ 6.0》, 清华大学出版社, 7月出版
[5]郑莉, 傅仕星编, C++语言面向对象程序设计习题与实验指导, 清华大学出版社, 9月出版
展开阅读全文