.小明是一个计算机专业top student,祝贺他毕业了。并准备到银行参加工作。上班第一天,经理叫他编制一个实现一个活期储蓄处理程序,算作考查。上班第一天, 一定要给领导一个好印象,小明二话没说,就答应了。现要你是小明了,请完成如下题目功能。储户开户、销户、存入、支出活动频繁,系统设计要求:(1)能比较迅速地找到储户的帐户,以实现存款、取款记账;
(2)能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。
目录
一.主要内容 …………………………………………………1
(一)问题描述……………………………………………………1
(二)设计思想……………………………………………………1
二.程序流程图…………………………………………………2
三.用户手册……………………………………………………2
四.操作流程……………………………………………………3
五.片段代码……………………………………………………4
六.总结…………………………………………………………5
七.源代码………………………………………………………6
一.主要内容
银行活期储蓄程序
(一)问题描述
设计一个银行账户管理程序,账户的信息有账号(唯一)、姓名、余额、身份证号码、单位、电话号码、地址等, 允许用户进行如下操作:开户、销户、存款、取款、转账、查询,一个用户可以有多个户头,账户的数值没有上限。 基本要求:程序运行时,可以由用户选择进行何种操作,开户操作 要求输入用户信息后自动获取账号,用户销户后账号被回 收,并且该账号可以继续分配给其它账户,不允许用户透支, 根据姓名或账号可以进行用户的信息查询,所有的账户信息 应存放到一个文件中,可以随时的访问和更新。
(二)设计思想:
定义一个用户类 customer,数据成员主要有姓名、身份证号码、住址、余额等内容,可供用户操作的功能有开户、销户、存款、取款、转账、余额查询等。用户可根据界面提示自行操作。由于要实现界面的回复,所以用了大量的函数调用。在控制用户的循环操作时采用了for循环与 break匹配的结构。
在整体的设计上将程序分为三个部分,第一个部分“customer.h”在这个文件中对所要用到的类 customer进行了声明,第二个文件“customer.cpp”是对在“customer.h”中所声明的类 customer 定义了一个实体,也可以说是完成了帐户的操作函数,第三个文件“Accounter.cpp“是主函数 main()所在文件,在其中不仅定义了主函数,而且完成了菜单操作函数。三个文件各有各的内容,实现了不同的功能,同时也在查错和对程序的维护方面带来很多便利。
二、程序流程图
开始
选择 dis_menu() | 注 | 销 |
dis_menu() | del_account() | |
|
|
|
开 户 open_account()
取 | 款 |
| 存 | 款 |
| 查 | 询 |
| 转 | 账 |
get_money() |
| save_money() |
| find_infor() |
| change_mon | ||||
|
|
|
|
|
|
|
|
|
|
|
退出系统 cout<<"感谢您的使用,再见!"<<endl
终 止
三、用户手册:
程序运行时,首先开户,开户后在选择其他服务。
开户后才能选择其他的服务,程序本身包含很多除错功能,当用户有不当操时程序会自动提示,并提示用户重新选择服务。
四、操作流程
1、首先给出用户操作
2、用户根据提示选择相应功能(比如 1)
4、当用户结束自己的操作时可推出系统
五、片断代码
在开户与销户操作时,引进了一个类似开关功能的数据成员 test,其主要功能是通过 test 的 1 与 0 的赋值来判断用户 的存在与否。1 表示开启此帐号,而 0 表示关闭此帐号:
(1)、类中定义
class customer
{private:
double customer _Num;
int test;//定义一个开关功能的数据成员
(2)、开启帐户
p[Z]->test=1;//在对象初始化的时候将其赋值为 1,即表示开启此户
(3)、关闭帐户
p[z]->test=0;//在用户进行销户的时候将其赋值为 0,表示关闭此帐户
(4)、测试帐户是否关闭
if(cn<10001||cn> customer_Num||p[cn-10000]->test==0)//通过判断 test 是否为 0 来判断此用户帐户是否存在
{cout<<"对不起,您的帐户错误或并不存在"<<endl; }
六、总结
回顾数据结构课程设计这些日子,至今我感慨颇多,的确,学到了很多东西包括以前在课本上没有学到的知识,还使我懂得了理论和时间结合是很重要的。
这次课程设计中遇到了一些问题与同学一起讨论解决,让我明白同学间合作的重要性。这个课程设计并不完美,还有很多要改善的地方,例如查询账户时不能通过账号来查询账户,而是直接显示所有用户信息,还有就是交易记录也是显示所有用户的交易信息,没有交易时间的显示。还有一些没想到的细节。虽然不是很完美,但发现不足之处并在以后的设计中注意这些细节,对于将来的实践还是很有帮助,我们可以不断发现我们的不完美,并想办法去改进这些不完美。
通过这次课程设计,让我进一步了解了C++程序设计方法。更重要的是培养了自己耐心、细心、用心的良好品质。希望以后能有机会对这门课进行更深一步的了解,也很乐意通过自己的努力来提高自己在这个知识领域的水平。同时也非常感谢同学的帮助及老师的建议与指导。
七、源代码
Customer.cpp:
#include<iostream>
Using namespace std;
#include "customer.h"
void dis_menu();
void slect_menu();
void handle_menu();
double customer_Num=10000;//用户帐号
int Z=0;//指针变量
customer *p[10000];//本程序支持 10000 个用户
void open_account()// 开户函数
{
char Name[8];
char ID[30];
char Work_Group[80];
char Tel_Num[20];
char Address[60];
float Money(0);
if(customer_Num==20000)
{
cout<<"对不起,系统存储空间已满,无法开户,对此带来的不便我们深表歉意!"<<endl;
dis_menu();
slect_menu();
return;
}
Z++;
customer_Num++;
p[Z]=new customer;
cout<<"请输入您的姓名:"<<endl;
cin>>Name;
cout<<"请输入您的身份证件号码:"<<endl;
cin>>ID;
cout<<"请输入您的单位地址:"<<endl;
cin>>Work_Group;
cout<<"请输入您的电话号码:"<<endl;
cin>>Tel_Num;
cout<<"请输入您的住址:"<<endl;
cin>>Address;
cout<<" 请输入您的金额(开户¥50.00元起):"<<endl;
cin>>Money; //银行开户 50 元起
char a1[80];
for(;;)
{ int Money;
gets(a1);
Money=atoi(a1);
if(Money<50||Money>100000000)
{
cout<<"对不起,您输入的金额不正确。"<<endl;
cout<<"(提示消息:金额小于 50 或过于巨大。)"<<endl;
cout<<"请重新输入您的金额:"<<endl;
}
else
break;
}
p[Z]->customer_Num=customer_Num;
for(int a=0;a<8;a++)
{
p[Z]->Name[a]=Name[a];
}
for(int b=0;b<30;b++)
{
p[Z]->ID[b]=ID[b];
}
for(int c=0;c<80;c++)
{
p[Z]->Work_Group[c]=Work_Group[c];
}
for(int d=0;d<20;d++)
{
p[Z]->Tel_Num[d]=Tel_Num[d];
}
for(int e=0;e<60;e++)
{
p[Z]->Address[e]=Address[e];
}
p[Z]->Money=Money;
p[Z]->test=1;
cout<<" 恭 喜 您 , 开 户 成 功 ! 您 的 帐 户 为 :"<<customer_Num<<"请牢记"<<endl;
cout<<"您需要继续服务吗(Y/N)?"<<endl;
char cn;
cin>>cn;
for(;cn!='n'&&cn!='N'&&cn!='y'&&cn!='Y';)
{
cout<<"您刚才输入的既不是“Y”也不是“N”!"<<endl;
cout<<"您需要继续服务吗(Y/N)?"<<endl;
cin>>cn;
}
if(cn=='y'||cn=='Y')
{
dis_menu();
slect_menu();
return;
}
if(cn=='n'||cn=='N')
{
cout<<"感谢您的使用,再见!"<<endl;
return;
}
}
void save_money()//存款函数
{
cout<<"请输入您的帐号:"<<endl;
int z=0;
int cn;
char a[80];
for(;;)
{
gets(a);
cn=atoi(a);
if(cn<10001||cn>customer_Num||p[cn-10000]->test==0)
{
cout<<"对不起,您输入的帐户错误或并不存在!"<<endl;
cout<<"您需要继续存款吗?(Y/N)"<<endl;
char cn;
cin>>cn;
for(;cn!='n'&&cn!='N'&&cn!='y'&&cn!='Y';)
{
cout<<" 您 刚 才 输 入 的 既 不 是 “ Y ” 也 不 是“N”!"<<endl;
cout<<"您需要继续存款吗?(Y/N)"<<endl;
cin>>cn;
}
if(cn=='y'||cn=='Y')
{
save_money();
return;
}
if(cn=='n'||cn=='N')
{
dis_menu();
slect_menu();
return;
}
}
else
z=cn-10000;
break;
}
cout<<"请输入您存入的金额:"<<endl;
int save;
for(;;)
{
cin>>save;
if(save<0)
{
cout<<"对不起,您输入的金额错误!"<<endl;
cout<<"请输入您存入的金额:"<<endl;
}
else
break;
}
p[z]->Money=p[z]->Money+save;
cout<<"存款成功!"<<endl;
cout<<"您需要继续存款吗(Y/N)?"<<endl;
char cn1;
cin>>cn1;
for(;cn1!='n'&&cn1!='N'&&cn1!='y'&&cn1!='Y';)
{
cout<<"您刚才输入的既不是“Y”也不是“N”!"<<endl;
cout<<"您需要继续存款吗(Y/N)?"<<endl;
cin>>cn1;
}
if(cn1=='y'||cn1=='Y')
{
save_money();
return;
}
if(cn1=='n'||cn1=='N')
{
dis_menu();
slect_menu();
return;
}
}
void get_money()//取款函数
{
cout<<"请输入您的帐号:"<<endl;
int z=0;
int cn;
char a[80];
for(;;)
{
gets(a);
cn=atoi(a);
if(cn<10001||cn>customer_Num||p[cn-10000]->test==0)
{
cout<<"对不起,您输入的帐户错误或并不存在!"<<endl;
cout<<"您需要继续取款吗?(Y/N)"<<endl;
char cn;
cin>>cn;
for(;cn!='n'&&cn!='N'&&cn!='y'&&cn!='Y';)
{
cout<<" 您 刚 才 输 入 的 既 不 是 “ Y ” 也 不 是 “N”!"<<endl;
cout<<"您需要继续取款吗?(Y/N)"<<endl;
cin>>cn;
}
if(cn=='y'||cn=='Y')
{
get_money();
return;
}
if(cn=='n'||cn=='N')
{
dis_menu();
slect_menu();
return;
}
}
else
z=cn-10000;
break;
}
cout<<"请输入您要取出的金额:"<<endl;
int get;
for(;;)
{
cin>>get;
if(get>p[z]->Money)
{
cout<<"对不起,您的余额额不足!"<<endl;
cout<<"请输入您要取出的金额:"<<endl;
}
else
break;
}
p[z]->Money=p[z]->Money-get;
cout<<"取款成功!"<<endl;
cout<<"您需要继续取款吗(Y/N)?"<<endl;
char cn1;
cin>>cn1;
for(;cn1!='n'&&cn1!='N'&&cn1!='y'&&cn1!='Y';)
{
cout<<"您刚才输入的既不是“Y”也不是“N”!"<<endl;
cout<<"您需要继续取款吗(Y/N)?"<<endl;
cin>>cn1;
}
if(cn1=='y'||cn1=='Y')
{
get_money();
return;
}
if(cn1=='n'||cn1=='N')
{
dis_menu();
slect_menu();
return;
}
}
void change_money()//转帐函数
{
int z1=0;
int z2=0;
int acco_num1;
int acco_num2;
cout<<"请输入您的帐号:"<<endl;
char a1[80];
for(;;)
{
gets(a1);
acco_num1=atoi(a1);
if(acco_num1<10001||acco_num1>customer_Num||p[acco_num1-10000]->test==0)
{
cout<<" 对 不 起 , 您 的 帐 户 错 误 或 并 不 存 在 。"<<endl;
cout<<"您需要继续转帐吗?(Y/N)"<<endl;
char cn;
cin>>cn;
for(;cn!='n'&&cn!='N'&&cn!='y'&&cn!='Y';)
{
cout<<" 您 刚 才 输 入 的 既 不 是 “ Y ” 也 不 是“N”!"<<endl;
cout<<"您需要继续转帐吗?(Y/N)"<<endl;
cin>>cn;
}
if(cn=='y'||cn=='Y')
{
change_money();
return;
}
if(cn=='n'||cn=='N')
{
dis_menu();
slect_menu();
return;
}
}
else
{
z1=acco_num1-10000;
break;
}
}
cout<<"请输入对方的帐号:"<<endl;
char a2[80];
for(;;)
{
gets(a2);
acco_num2=atoi(a2);
if(acco_num2<10000||acco_num2>customer_Num||p[acco_num2-10000]->test==0)
{
cout<<" 对 不 起 , 对方 的 帐户 错 误或 并 不 存在 。"<<endl;
cout<<"您需要继续转帐吗?(Y/N)"<<endl;
char cn;
cin>>cn;
for(;cn!='n'&&cn!='N'&&cn!='y'&&cn!='Y';)
{
cout<<" 您 刚 才 输 入 的 既 不 是 “ Y ” 也 不 是 “N”!"<<endl;
cout<<"您需要继续转帐吗?(Y/N)"<<endl;
cin>>cn;
}
if(cn=='y'||cn=='Y')
{
change_money();
return;
}
if(cn=='n'||cn=='N')
{
dis_menu();
slect_menu();
return;
}
else
{
z2=acco_num2-10000;
break;
}
}
cout<<"请输入您要转帐给对方的金额:"<<endl;
float change=0;
cin>>change;
for(;change>p[z1]->Money||change<0;)
{
cout<<"对不起,您的余额不足或金额错误!"<<endl;
cout<<"请输入您要转帐给对方的金额:"<<endl;
cin>>change;
}
p[z1]->Money=p[z1]->Money-change;
p[z2]->Money=p[z2]->Money+change;
cout<<"交易成功!"<<endl;
cout<<"您需要继续转帐服务吗(Y/N)?"<<endl;
char cn;
cin>>cn;
for(;cn!='n'&&cn!='N'&&cn!='y'&&cn!='Y';)
{
cout<<"您刚才输入的既不是“Y”也不是“N”!"<<endl;
cout<<"您需要继续转帐服务吗(Y/N)?"<<endl;
cin>>cn;
}
if(cn=='y'||cn=='Y')
{
change_money();
return;
}
if(cn=='n'||cn=='N')
{
dis_menu();
slect_menu();
return;
}
}
void find_infor()//查询函数
{
int z=0;
int cn;
char a[80];
for(;;)
{
gets(a);
cn=atoi(a);
if(cn<10001||cn>customer_Num||p[cn-10000]->test==0)
{
cout<<" 对不起,您的帐户错误或并不存在!"<<endl;
cout<<"您需要继续查询服务吗(Y/N)?"<<endl;
char cn;
cin>>cn;
for(;cn!='n'&&cn!='N'&&cn!='n'&&cn!='Y';)
{
cout<<"您刚才输入的既不是“Y”也不是“N”!"<<endl;
cout<<"您需要继续查询服务吗(Y/N)?"<<endl;
cin>>cn;
}
if(cn=='y'||cn=='Y')
{
find_infor();
return;
}
if(cn=='n'||cn=='N')
{
dis_menu();
slect_menu();
return;
}
}
else
{
z=cn-10000;
break;
}
}
cout<<"帐号:\t"<<p[z]->customer_Num<<endl;
cout<<"姓名:\t"<<p[z]->Name<<endl;
cout<<"住址:\t"<<p[z]->Address<<endl;
cout<<"电话:\t"<<p[z]->Tel_Num<<endl;
cout<<"余额:\t"<<p[z]->Money<<"元"<<endl;
cout<<"\n 您需要继续查询服务吗(Y/N)?"<<endl;
char cn1;
cin>>cn1;
for(;cn1!='n'&&cn1!='N'&&cn1!='y'&&cn1!='Y';)
{
cout<<"您刚才输入的既不是“Y”也不是“N”!"<<endl;
cout<<"您需要继续查询服务吗(Y/N)?"<<endl;
cin>>cn1;
}
if(cn1=='y'||cn1=='Y')
{
find_infor();
return;
}
if(cn1=='n'||cn1=='N')
{
dis_menu();
slect_menu();
return;
}
}
void del_account()//注销函数
{
cout<<"请输入您的帐户:"<<endl;
int z=0;
int cn;
char a[80];
for(;;)
{
gets(a);
cn=atoi(a);
if(cn<10001||cn>customer_Num||p[cn-10000]->test==0)
{
cout<<" 对 不 起 , 您 的 帐 户 错 误 或 并 不 存 在 !"<<endl;
cout<<"您需要继续查询服务吗(Y/N)?"<<endl;
char cn;
cin>>cn;
for(;cn!='n'&&cn!='N'&&cn!='y'&&cn!='Y';)
{
cout<<"您刚才输入的既不是“Y”也不是“N”!"<<endl;
cout<<"您需要继续查询服务吗(Y/N)?"<<endl;
cin>>cn;
}
if(cn=='y'||cn=='Y')
{
find_infor();
return;
}
if(cn=='n'||cn=='N')
{
dis_menu();
slect_menu();
return;
}
}
else
{
z=cn-10000;
break;
}
}
p[z]->test=0;
cout<<"销户成功!"<<endl;
cout<<"您需要继续服务吗?(Y/N)"<<endl;
char cn1;
cin>>cn1;
for(;cn1!='n'&&cn1!='N'&&cn1!='y'&&cn1!='Y';)
{
cout<<"您刚才输入的既不是“Y”也不是“N”!"<<endl;
cout<<"您需要继续服务吗?(Y/N)"<<endl;
cin>>cn1;
}
if(cn1=='y'||cn1=='Y')
{
dis_menu();
slect_menu();
return;
}
if(cn1=='n'||cn1=='N')
{
return;
}
}
Customer.h:
#ifndef CUSTOMER_H
#define CUSTOMER_H
class customer
{
private:
double customer_Num;
int test;
char Name[8];
char ID[30];
char Work_Group[80];
char Tel_Num[20];
char Address[60];
char password[10];
float Money;
public:
void save_money();
void get_money();
void change_money();
void find_infor();
friend void open_account();
friend void save_money();
friend void get_money();
friend void change_money();
friend void find_infor();
friend void del_account();
};
#endif;
Accounter.cpp:
#include<iostream>
using namespace std;
#include "COUSTOMER.H"
void about();
void dis_menu()
{
cout<<"******欢迎使用本程序******"<<endl;
cout<<"1:新开帐户2:存款3:取款"<<endl;
cout<<"4:转账 5:查询余额 6:注销帐户 7:退出系统"<<endl;
}
void slect_menu()
{
cout<<"请选择您需要的服务:"<<endl;
int choice;
char a[80];
for(;;)
{
gets(a);
choice=atoi(a);
if(choice<1||choice>8)
{
cout<<"对不起,您输入的选项不正确。"<<endl;
cout<<"请选择您需要的服务(1--8):"<<endl;
}
else
break;
}
switch(choice)
{
case 1:
open_account();
break;
case 2:
::save_money();
break;
case 3:
::get_money();
break;
case 4:
::change_money();
break;
case 5:
::find_infor();
break;
case 6:
::del_account();
break;
case 7:
cout<<"感谢您的使用,再见!"<<endl;
return;
break;
}
}
void main()//主函数
{
dis_menu();
slect_menu();
return;
}