前言:經歷了之前計費收費系統中動態計費這個難點與前幾天的c#版機房重構的小試牛刀,自己信心滿滿地開始了重構版機房的動態計費以及核心內容的完成:上下機。話不多說,我們開始吧。
流程圖:
關鍵點:
1.在dal層對使用者的狀態進行改變,ui層時鐘開始計時,從而上機;
2.計時期間定期將餘額更新至資料庫,並判斷學生是否餘額充足;
3.下機時,禁用計時時鐘,通過ui層改變使用者狀態、向offline表內新增下機資料,完成下機。
**:ui層:(由於還未製作基本資料窗體,因此判斷餘額暫時用「5」來表示,後期會改正)
using system;
using system.collections.generic;
using system.componentmodel;
using system.data;
using system.drawing;
using system.linq;
using system.text;
using system.threading.tasks;
using system.windows.forms;
using system.collections;
using _2.facade;
using _7.entity;
namespace _1.ui
//例項化上機類實體層
_7.entity.onlineentity onlinestudent = new _7.entity.onlineentity();
//例項化上機類外觀層
_2.facade.onlinefacade onlinefacade = new _2.facade.onlinefacade();
//例項化下機類外觀層
_2.facade.offlinefacade offlinefacade = new _2.facade.offlinefacade();
//例項化下機類實體層
_7.entity.offlineentity offlinestudent = new _7.entity.offlineentity();
//定義全域性變數存userid
public static string userid = frmlogin.auserid;
//載入事件
private void mdistudentform_load(object sender, eventargs e)
//上機
private void btnonline_click(object sender, eventargs e)
else
}else
}//下機
private void btnoffline_click(object sender, eventargs e)
else
btnoffline.enabled = false;
}//當前時鐘
private void timercurrenttime_tick(object sender, eventargs e)
//動態時間時鐘
private void timerdynamictime_tick(object sender, eventargs e)
//1.動態計算時間功能
//定義日期型識別符號標識上機日期
datetime ondate;
datetime currentdate;
datetime ontime;
datetime currenttime;
timespan alltime;
//查詢當前時間與日期
ondate = convert.todatetime(lblondate.text);
ontime = convert.todatetime(lblontime.text);
currentdate = convert.todatetime(lblcurrentdate.text);
currenttime = convert.todatetime(lblcurrenttime.text);
//動態計算消費時間
alltime = (currentdate - ondate) + (currenttime - ontime);
lblconsumetime.text = convert.tostring(alltime);//將得出上機的時間外顯
//將消費的時間存入實體層
offlinestudent.alltime = alltime;
}//計費時鐘
private void timerdynamicdetect_tick(object sender, eventargs e)
else
//計算消費金額
double consumecash = convert.todouble(offlinestudent.alltime.hours) * 60 * unitmoney + (convert.todouble(offlinestudent.alltime.minutes+1) *unitmoney +convert.todouble(offlinestudent.alltime.seconds)*(1/60)*unitmoney);
//計算餘額
double cash = convert.todouble(lblcash.text) - unitmoney;
//外顯變化
lblcash.text = convert.tostring(cash);
lblconsumecash.text = convert.tostring(consumecash);
//將餘額傳給實體層
offlinestudent.cash = cash;
//呼叫外觀層方法
offlinefacade.modifycash(offlinestudent);
//若餘額不足5元
if(cash>0.00&&cash<=5.00)
else if (cash <= 0.00)
}//選單-退出
private void tsmexit_click(object sender, eventargs e)
else
}//退出窗體後轉到工作列
private void mdistudentform_formclosing(object sender, formclosingeventargs e)
}//工作列小圖示的事件
private void grasicon_click(object sender, eventargs e)
//notifyicon移動事件
private void grasicon_mousemove(object sender, mouseeventargs e)}}
繼續學習中... 重構 C 上下機
記得第一次做機房收費系統的時候,做上下機這塊思路就不是很清楚,馬馬虎虎就過去了,果不其然,欠下的遲早是要還的,不過這個過程是我做機房收穫最多的。做機房重要的還是思路,思路捋清了,按照思路一步一步實現功能就簡單多了,在上下機這個過程中深有體會,接下來分享一下我的思路。1 判斷輸入卡號是否為空 2 判斷...
C 機房重構 下機(職責鏈模式)
職責鏈模式 職責鏈 當客戶提交乙個請求時,請求是沿著鏈傳遞,直至有乙個concretehandler物件負責處理,接收者和傳送者都滅有對方的明確資訊,且鏈中的物件自己也並不知道鏈的結構,僅需保持乙個指向其後繼者的引用。具體實現 在機房重構中職責鏈主要用於確定學生的消費時間,以下為具體的實現 抽象類p...
機房重構 上下機(職責鏈模式和策略模式)
機房重構中上機功能相對好實現一些,下機用到了職責鏈模式和策略模式,職責鏈模式算時間,策略模式算消費金額 部分 dal層 public class offdal ioffidal string sql select from card where cardno cardno datatable tab...