自测题1道

这篇博客探讨了模拟银行系统的设计,包括银行、客户和队列类的定义,强调了类的实例化和依赖关系。作者通过实现建卡、存款、取款和销户等业务功能,发现并分享了关于前向声明、对象传递和代码封装等方面的调试收获。同时,提出了优化方案,如加强账户数据结构、使用STL容器、确保账号唯一性和提高代码可读性。
摘要由CSDN通过智能技术生成

看到这样一样题,想想就简单的写了写自测一下,还是有很多收获。
需求:
1.模拟银行,客户关系封装类;
2.客户到银行办理业务需先排队;
3.银行根据队列处理业务,优选选择金卡客户;
4.办理建卡、存款、取钱、销户业务。

代码思路:
1.定义银行类,客户类,队列类;
2.思考现实实例,银行、队列只能有一个实例,客户可以有多个实例
3.理清类关系,银行依赖于队列决定客户,银行依赖客户数据处理业务,队列依赖客户排队
4.确定主导类为银行类,主要的业务逻辑在银行
 
Debug收获:
1.前向声明的类,只能用它的成员指针(之前没有注意这个问题) 
2.对象传递尽量用指针,如果用返回值传递只能用堆内存

需要优化问题:
1.类的private封装,账户数据结构过于简单
2.银行客户账户数据存储用的是数组,可以用STL
3.银行账号,直接累加,可随机,要确保唯一
4.代码清晰易读,代码业务流程简化

 

#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;

//常量宏
#define QUEUE_LONGTH_MAX 50
#define CARD_SUM_MAX 10000
#define GOLDEN_SUM_LIMIT 888
#define ILLEGAL_VALUE 0xffff

//日志宏
#define log_info(...) do {\
printf("<%s %s> %s %s:%d INFO:",__DATE__, __TIME__,__FUNCTION__,__FILE__,__LINE__)&&\
printf(__VA_ARGS__)&&\
printf("\n");\
}while(0)

//类声明
class CserviceQueue;
class Cbank;
class Ccustomer;
class CserviceQueue;

enum CARDTYPE
{
  OrdinaryCard, //普卡
  GoldenCard    //金卡
};
//业务种类
enum SERVICE
{
  registerCard,
  deposite,
  query,
  withdraw,
  cancelCard 
};
//银行账户
struct sbankCustomerAccount
{
  int card_Number;
  int id_Customer;
  char* name;
  int moneySum;
  int cardType;  
};
//客户卡信息
struct sCard
{
  int card_Number;
  int cardType;  
};
//排队队列节点
struct sRegisterNode
{
  int num;
  Ccustomer *customer; 
  sRegisterNode *next;    
};

//客户类
class Ccustomer
{
public:
  Ccustomer():queueNo(0),customerBankCard(NULL)
  {
  }
  //需要处理业务信息
  void my_service(int id, char* name, int money, SERVICE ser)
  {
    customer_id = id;
    customer_name = name;
    customer_money = money;
    service = ser;
  }
  //delete掉自己的卡, customerBankCard在Cbank类中new
  void destoryCard()
  {
    delete customerBankCard;
    customerBankCard = NULL;
  }
  
  ~Ccustomer()
  {
    if(NULL!=customerBankCard)
    {
      delete customerBankCard;
      customerBankCard = NULL;
    }
  }
  
  int customer_id;  
  char * customer_name;  
  int customer_money;
  SERVICE service;
  
  sCard *customerBankCard;
  int queueNo;  
   
};

//排号队列类
class CserviceQueue
{
public:
  CserviceQueue():dealNumber(0),totalNumber(0)
  {
     head = tail = NULL;
  }

  //排队
  int registerQueue(Ccustomer *customer)    
  {  
    if(totalNumb
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值