C 機房重構 上下機 動態計費

2021-09-20 21:36:34 字數 3490 閱讀 5675

前言:經歷了之前計費收費系統中動態計費這個難點與前幾天的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...