《面向对象程序设计》课程设计报告模拟ATM自动取款机系统
姓名 :
学号 :
专业班级 :
完成时间 :
指导老师 :
目录
一、需求分析 (2)
二、程序的主要功能 (2)
三、程序运行平台 (2)
四、流程图 (2)
五、程序类的说明 (2)
六、模块分析 (3)
七、比较有特色的函数 (4)
八、存在的不足与对策 (4)
九、程序源代码 (4)
一、需求分析
为了方便用户的及时取款,查询,及时修改密码的方便,本课题设计并模拟银行的自动取款机使用过程中的界面和用户交互过程。实现查询银行卡余额,取款,修改密码,退出系统等功能。 二、程序的主要功能
1、锁机功能:
卡号,密码输入最多三次,否则直接退出系统。 2、取款功能:
取款金额受卡余额,机单笔最大取款金额及机当前剩余金额的限制。 3、查询功能:
实现查询余额的功能。 4、更改密码:
实现密码更改功能,对于密码要有2次验证。 5、退卡功能:
实现退出系统功能。 三、程序运行平台
Dev c++ 四、流程图
图1 系统流程图
五、程序类的说明
5.1 ATM 类:
该类主要实现取款,查询,修改密码,登录界面等功能。 class ATM//ATM 类 {
public:
ATM(YongHu& y):yh(y)
登陆界面
主界面
取款功能 查询功能 修改密码
锁卡功能
退出系统
{}
...............
private:
int times;
YongHu& yh;
};
5.2 YongHu类:
该类主要实现卡号,密码,余额的获取函数等功能。
class YongHu//用户类
{
public:
friend class ATM;
............
private:
char ID[20];//卡号
char password[10];//密码
float money;//卡上余额
};
5.3 查询函数:
调用YongHu类的获取函数将信息输出
void ATM::CX()
{
...........
}
5.4 修改密码函数:
使用do while语句实现修改密码的功能
void ATM::GG()
{
.........
}
5.5 密码星号函数:
通过while语句实现输入密码时每输入一个字符就显示一个星号的功能char * ATM::GetPassword()
{
........
}
六、模块分析
1、锁机功能:
卡号,密码输入最多三次,否则直接退出系统。
2、取款功能:
取款金额受卡余额,机单笔最大取款金额及机当前剩余金额的限制。
3、查询功能:
实现查询余额的功能。
4、更改密码:
实现密码更改功能,对于密码要有2次验证。
5、退卡功能:
实现退出系统功能。
七、比较有特色的函数
char * ATM::GetPassword()
{
char c;
int i=0;
char password[6];
while ((c=getch())!='\r')
{
password[i]=c;
putchar('*');
i++;
if (i>=6)
{
break;
}
}
return password;
}
//实现密码星号化的功能
八、存在的不足与对策
由于我的能力及时间限制,所以这次这个系统设计得非常简单,功能也很单一,并且这次并没有使用文件的功能,所有的数据都是一次性的,我会在课下继续探究可以完善该系统的方法.
九、程序源代码
//funtion.h
#include
#include
#include
class YongHu;//定义全局类class
class ATM//ATM类
{
public:
ATM(YongHu& y):yh(y)
{}
void DLJM();//登陆界面
bool HDMM(char ID[],char password[]);//核对密码void QK();//取款
void CX();//查询
void GG();//更改密码
void GNJM();//功能界面
void LK();//锁卡
void TC();//退出
char *GetPassword();
private:
int times;
YongHu& yh;
};
class YongHu//用户类
{
public:
friend class ATM;
YongHu(char id[],float Money,char Password[]);
char* get_ID();//获取卡号
char* get_password();//获取密码
float get_money();//获取余额
void set_password(char Password[]);//设置密码
void set_money(float m);
private:
char ID[20];//卡号
char password[10];//密码
float money;//卡上余额
};
//ATM.cpp
#include
#include
#include "funtion.h"
#include
using namespace std;
void ATM::DLJM()//登陆界面
{
times=0;
char ID[20],password[10],ch;
int i=0;
do
{
i=0;
cout<<" ◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆"< cout<<" ◆欢迎使用中国农业银行!◆"< cout<<" ◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆"< cout<<" 测试卡号为:123456"< cout<<" 测试密码为:123456"< cout<<" 测试卡号余额为:10000元"< cout<<" 请输入您的卡号"< cout<<"★卡号:"; do { cin.get(ch); ID[i++]=ch; }while(ch!='\n'); ID[i-1]='\0'; i=0; cout< cout<<"★密码:"; strcpy(password,GetPassword()); if(!HDMM(ID,password)) { cout<<"~对不起,您的卡号或密码有误,请重新输入"< times++; } else { GNJM(); } }while(times<3); LK(); } bool ATM::HDMM(char ID[],char password[]) { if(strcmp(ID,yh.get_ID())==0&&strcmp(password,yh.get_password())==0) return true; else return false; } void ATM::GNJM() { int n; cout< cout<<"★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆"< cout<<"☆1)取款★"< cout<<"★2)查询余额☆"< cout<<"☆3)更改密码★"< cout<<"★4)退出系统☆"< cout<<"★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆"< cout< cin>>n; if(n<0||n>4) { cout<<"★您输入的序号不正确,请重新输入:"; cin>>n; } switch(n) { case 1:QK(); break; case 2:CX(); break; case 3:GG(); break; case 4:TC(); break; }while(true); } void ATM::QK() { float m; char ch; cout< cin>>m; while(m<=0) { cout<<"★请输入正确的取款数:"< cin>>m; } if(yh.get_money()-m<0) { cout<<"~对不起,您的余额不足!"< } else { if((int)m%100!=0) { cout<<"~对不起,您的取款金额必须为100的倍数!"< } else { if(m>2000) { cout<<"~对不起,您每次只能取2000元!"< } else { cout<<"~操作成功,请稍后!!!"< yh.set_money(m); cout<<"★请输入(y/n)确认是否取钱!"< cin>>ch; while(ch!='Y'&&ch!='y'&&ch!='N'&&ch!='n') { cout<<"★请再次输入(y/n)确认是否取钱!"< cin>>ch; } if(ch=='y'||ch=='Y') cout<<"~您已取款成功!请收好钱!"; else cout<<"~您已取款成功!请尽快取钱!"; } } } GNJM(); } void ATM::CX() { cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"< cout<<" "< cout<<" 卡号:"< cout<<" 余额:"< cout<<" "< cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"< GNJM(); } void ATM::GG() { char password[10],Xpassword[10]; times=0; do { cout< strcpy(password,GetPassword()); if(!HDMM(yh.get_ID(),password)) times++; else break; }while(times<3); if(times==3) LK(); int t=1; do { cout< strcpy(password,GetPassword()); cout< strcpy(Xpassword,GetPassword()); t=strcmp(password,Xpassword);//对新密码进行比较,如果相等,则返回0 if(t!=0) cout< }while(t!=0); yh.set_password(password); cout< GNJM(); } void ATM::LK() { cout<<"~对不起,你输入的密码错误已达三次,您的卡已被没收!"< exit(1); } void ATM::TC() { cout<<"~请取走您的卡,感谢您的使用,欢迎您下次再来!"< exit(0); } char * ATM::GetPassword() { char c; int i=0; char password[6]; while ((c=getch())!='\r') { password[i]=c; putchar('*'); i++; if (i>=6) { break; } } return password; } //YongHu.cpp #include "funtion.h" #include YongHu::YongHu(char id[],float Money,char Password[])//用户的构造函数{ strcpy(ID,id);//strcpy函数是复制两字符串的函数,头文件为 money=Money; strcpy(password,Password); } float YongHu::get_money()//获取余额函数 { return money; } char* YongHu::get_ID()//获取卡号 { return ID; } void YongHu::set_money(float m) { money-=m; } char* YongHu::get_password()//获取密码 { return password; } void YongHu::set_password(char Password[])//设置密码 { strcpy(password,Password); } //main.cpp #include #include "funtion.h" int main(void) { YongHu y1("123456",10000,"123456");//创建用户y1 ATM a(y1); a.DLJM(); a.GNJM(); return 0; }