看到這樣一樣題,想想就簡單的寫了寫自測一下,還是有很多收穫。
需求:1.模擬銀行,客戶關係封裝類;
2.客戶到銀行辦理業務需先排隊;
3.銀行根據佇列處理業務,優選選擇金卡客戶;
4.辦理建卡、存款、取錢、銷戶業務。
**思路:
1.定義銀行類,客戶類,佇列類;
2.思考現實例項,銀行、佇列只能有乙個例項,客戶可以有多個例項
3.理清類關係,銀行依賴於佇列決定客戶,銀行依賴客戶資料處理業務,佇列依賴客戶排隊
4.確定主導類為銀行類,主要的業務邏輯在銀行
debug收穫:
1.前向宣告的類,只能用它的成員指標(之前沒有注意這個問題)
2.物件傳遞盡量用指標,如果用返回值傳遞只能用堆記憶體
需要優化問題:
1.類的private封裝,賬戶資料結構過於簡單
2.銀行客戶賬戶資料儲存用的是陣列,可以用stl
3.銀行賬號,直接累加,可隨機,要確保唯一
4.**清晰易讀,**業務流程簡化
#include #include #include 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 while(0)
//類宣告
class cservicequeue;
class cbank;
class ccustomer;
class cservicequeue;
enum cardtype
;//業務種類
enum service
;//銀行賬戶
struct sbankcustomeraccount
;//客戶卡資訊
struct scard
;//排隊佇列節點
struct sregisternode
;//客戶類
class ccustomer
//需要處理業務資訊
void my_service(int id, char* name, int money, service ser)
//delete掉自己的卡, customerbankcard在cbank類中new
void destorycard()
~ccustomer()
}int customer_id;
char * customer_name;
int customer_money;
service service;
scard *customerbankcard;
int queueno;
};//排號佇列類
class cservicequeue
//排隊
int registerqueue(ccustomer *customer)
p=new sregisternode;
p->num=dealnumber;
dealnumber++;
totalnumber++;
p->customer = customer;
p->next=null;
if (head==null)
else
return p->num;
} //讀取佇列資料,優選讀金卡
ccustomer* readqueue()
}//如果沒有金卡,依次讀佇列
pordinary = pordinary->next;
}return head->customer;
} return null;
} //獲取佇列資訊
void queueinfo()
log_info("deal num amount %d, left num amount %d", dealnumber, totalnumber);
} //刪除佇列節點
sregisternode *deletedata(int value)
//與傳入值不等,繼續遍歷
while ((p->next!=null)&&(p->num!=value))
if (value==p->num)
else
//中間節點與傳入值相等
q->next=p->next;
totalnumber--;
delete p;
}else
log_info("number: %d is not in the queue", value);
return head;
} ~cservicequeue()
} private:
sregisternode *head,*tail,*p, *pordinary, *pinfo;
int dealnumber;//當前處理號
int totalnumber;//當前佇列總共號
};//銀行類
class cbank
//處理業務
void dealservice(ccustomer* customer)
else
//customerinfocheck(customer->customerbankcard->card_number);
break;
//查詢業務
case query:
customerinfocheck(customer->customerbankcard->card_number);
break;
//存錢
case deposite:
depositmoney(customer->customerbankcard->card_number, customer->customer_money);
//customerinfocheck(customer->customerbankcard->card_number);
break;
//取錢
case withdraw:
withdrawmoney(customer->customerbankcard->card_number, customer->customer_money);
//customerinfocheck(customer->customerbankcard->card_number);
break;
//銷卡
case cancelcard:
cancelbankcard(customer->customerbankcard->card_number, customer->customer_money);
customer->destorycard();
log_info("bank card has been cancelled");
break;
default:
log_info("wong service !");
break; }}
//銀行獲取佇列客戶
ccustomer* deal_queue_order(cservicequeue *queue)
//辦卡
scard* newcard(int id_customer, char* name, int moneysum, int cardtype)
return false;
} //存錢
void depositmoney(int card_number,int moneysum)
}//取錢
void withdrawmoney(int card_number,int moneysum)
else
}}
//銷卡
void cancelbankcard(int card_number,int moneysum)
//查詢
void customerinfocheck(int card_number)
課時 1 自測題
kubernetes 並不支援為應用固定 ip,於是我自己通過編寫網路外掛程式把應用 ip 管理在了 etcd 裡,然後上線。請問這破壞了雲原生的理念了嗎?單選題 a.否 b.是 容器啟動後,我會時常 ssh 進入到容器裡然後寫很多檔案。請問這破壞了雲原生理念了嗎?單選題 a.否 b.是 我編寫的容...
自測題目1
1 題目描述 寫出乙個程式,接受乙個由字母和數字組成的字串,和乙個字元,然後輸出輸入字串中含有該字元的個數。不區分大小寫。輸入描述 第一行輸入乙個有字母和數字以及空格組成的字串,第二行輸入乙個字元。輸出描述 輸出輸入字串中含有該字元的個數。示例1輸入 abcdefa輸出 1public class ...
JS內部函式一道自測題
var add function tmp.tostring function return tem 將子函式返回 方便外部呼叫 求alert add 1 2 3 的輸出值 1.內部函式受其父函式作用域限制不能夠被直接呼叫 2.要想呼叫內部函式,要麼定義全域性變數並且將內部函式賦值給全域性變數,通過呼...