上机
上机的难点在于对流程的划分是否细致,以及代码顺序是否安排合理。这里附上一张上机流程图。
下机
下机的难点在金额计算以及灵活运用表的增删改查。 关于运算,小编没有设置准备时间,一是因为这样计算简单了一些,二是我们每个人都要对自己的选择负责,即使上机不满1小时,也要扣你4块钱。这样既让顾客理性登录该系统,又给管理员减少了不必要的麻烦。
U层代码
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace UI
{
public partial class frmSignOut : Form
{
public frmSignOut()
{
InitializeComponent();
}
//应用单例模式
private static frmSignOut fmsignout;
public static frmSignOut GetInstance()
{
if (fmsignout == null || fmsignout.IsDisposed)
{
fmsignout = new frmSignOut();
}
return fmsignout;
}
private void frmSignOut_Load(object sender, EventArgs e)
{
//实例化Online表用于显示上机信息的list
Enitity.OnlineEnitity online = new Enitity.OnlineEnitity();
Facade.SignOutFacade facade = new Facade.SignOutFacade();
online.userID = LoginUI.userID;
List<Enitity.OnlineEnitity> list = new List<Enitity.OnlineEnitity>();
list = facade.FacadeSignOut(online);
//显示上机信息
txtUserID.Text = Convert.ToString(list[0].userID);
txtLoginTime.Text = Convert.ToString(list[0].loginTime);
txtNowTime.Text = Convert.ToString(DateTime.Now);
TimeSpan ts = DateTime.Now - list[0].loginTime; //获取DateTime类型的上机时长
string str = ts.ToString();
int start = 0, length = 8; //切割DateTime类型上机时长的小数部分
txtOnlineTime.Text = str.Substring(start, length); //显示只有时,分,秒的上机时长
txtBalance.Text = Convert.ToString(list[0].balance); //显示余额
//实例化出BasicData表,用来调用基本信息
Enitity.BasicDataEnitity basicdata = new Enitity.BasicDataEnitity();
Facade.SignOutFacade fBasicData = new Facade.SignOutFacade();
List<Enitity.BasicDataEnitity> basicdatalist = new List<Enitity.BasicDataEnitity>();
basicdatalist = fBasicData.FacadeBasicData(basicdata);
textBox1.Text = Convert.ToString(basicdatalist[0].unitRate);
}
private void button1_Click(object sender, EventArgs e)
{
//实例化出BasicData表,计算消费
Enitity.BasicDataEnitity basicdata = new Enitity.BasicDataEnitity();
Facade.SignOutFacade fBasicData = new Facade.SignOutFacade();
List<Enitity.BasicDataEnitity> basicdatalist = new List<Enitity.BasicDataEnitity>();
basicdatalist = fBasicData.FacadeBasicData(basicdata);
textBox1.Text = Convert.ToString(basicdatalist[0].unitRate);
//计算消费金额
TimeSpan ts = DateTime.Now - Convert.ToDateTime(txtLoginTime.Text); //获取上机时长
double ontime = Convert.ToDouble(ts.TotalHours);//转化时间
double a = Convert.ToDouble(ontime) + Convert.ToDouble(1);
double b = Convert.ToDouble(textBox1.Text);
int a1 = (int)a; int b1 = (int)b; //取整
double spendmoney = a * b;
double newbalance;
//实例化视图V_OnlineStudent表用于读取原余额balance,并计算balance
Enitity.OnlineEnitity online = new Enitity.OnlineEnitity();
Facade.SignOutFacade facade = new Facade.SignOutFacade();
online.userID = LoginUI.userID;
List<Enitity.OnlineEnitity> list = new List<Enitity.OnlineEnitity>();
list = facade.FacadeSignOut(online);
double c = Convert.ToDouble(list[0].balance);
int c1 = (int)c;
int s1 = (int)spendmoney;
newbalance = c1 - s1; //计算出下机之后的余额
int nbalance = (int)newbalance; //把小数型的余额转换成int类型,目的是取整
//实例化更新学生表,更新新余额
Enitity.StudentEnitity updatebalance = new Enitity.StudentEnitity();
Facade.SignOutFacade balancefacade = new Facade.SignOutFacade();
updatebalance.userID = LoginUI.userID;
updatebalance.balance = Convert.ToString(nbalance); // 更新取整后的余额到表中
List<Enitity.StudentEnitity> studentlist = new List<Enitity.StudentEnitity>();
studentlist = balancefacade.FacadeStudent(updatebalance);
MessageBox.Show("下机成功!");
//实例化更新Online表,更新Online表用户的下机时间和下机状态。
Enitity.OnlineEnitity addonline = new Enitity.OnlineEnitity();
Facade.SignOutFacade addfacade = new Facade.SignOutFacade();
addonline.userID = LoginUI.userID;
addonline.status = "下机";
addonline.logoutTime = DateTime.Now.ToLocalTime();
List<Enitity.OnlineEnitity> addlist = new List<Enitity.OnlineEnitity>();
addlist = addfacade.FacadeAddOnline(addonline);
//实例化查找Online表,用于把Online表到用户信息赋给Line表
Enitity.OnlineEnitity selectonline = new Enitity.OnlineEnitity();
Facade.SignOutFacade selectfacade = new Facade.SignOutFacade();
selectonline.userID = LoginUI.userID;
List<Enitity.OnlineEnitity> selectlist = new List<Enitity.OnlineEnitity>();
selectlist = selectfacade.FacadeSelectOnline(selectonline);
//实例化出Line表信息,用来更新记录
Enitity.LineEnitity line = new Enitity.LineEnitity();
Facade.SignOutFacade fLine = new Facade.SignOutFacade();
line.userID = selectlist[0].userID;
line.loginTime = selectlist[0].loginTime;
line.logoutTime = selectlist[0].logoutTime;
line.computer = selectlist[0].computer;
line.status = selectlist[0].status;
int linelist;
linelist = fLine.FacadeLine(line);
//实例化用于后面删除用户上机表信息的deletelist
Enitity.OnlineEnitity deleteonline = new Enitity.OnlineEnitity();
Facade.SignOutFacade deletefacade = new Facade.SignOutFacade();
deleteonline.userID = LoginUI.userID;
List<Enitity.OnlineEnitity> deletelist = new List<Enitity.OnlineEnitity>();
deletelist = deletefacade.FacadeDeleteOnline(deleteonline);
//清空文本框
foreach (Control ctr in Controls) //遍历控件
{
if (ctr is TextBox) //找到TextBox控件和ComboBox控件
{
((TextBox)ctr).Text = string.Empty; //清空TextBox控件的文本内容
}
}
this.Close(); //关闭当前窗体
Application.OpenForms["frmMain"].Close(); //关闭主窗体
System.Environment.Exit(0); //关闭所有窗体
}
}
}