前言:经历了之前计费收费系统中动态计费这个难点与前几天的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
{
public partial class MDIStudentForm : Form
{
public MDIStudentForm()
{
InitializeComponent();
}
//实例化上机类实体层
_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)
{
//让窗体在加载时将UserID传入,避免后期的混淆
lblunvisibleuserid.Text = frmLogin.AuserID;
//当前时钟属性
timercurrenttime.Enabled = true;
timercurrenttime.Interval = 1000;
lblcurrentdate.Text= DateTime.Now.ToString("yyyy-MM-dd"); //进入系统时第一时间显示当前日期
lblcurrenttime.Text = DateTime.Now.ToString("HH:mm:ss"); ;//进入系统时第一时间显示当前时间//大写表示24进制
timerdynamicdetect.Enabled = false;
timerdynamicdetect.Interval = 60000;
timerdynamictime.Enabled = false;
timerdynamictime.Interval = 10