C#机房重构之上下机

上机

上机的难点在于对流程的划分是否细致,以及代码顺序是否安排合理。这里附上一张上机流程图。

 C#机房重构之上下机_第1张图片

 

 

下机

下机的难点在金额计算以及灵活运用表的增删改查。 关于运算,小编没有设置准备时间,一是因为这样计算简单了一些,二是我们每个人都要对自己的选择负责,即使上机不满1小时,也要扣你4块钱。这样既让顾客理性登录该系统,又给管理员减少了不必要的麻烦。

C#机房重构之上下机_第2张图片

 

 

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 list = new List();
            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 basicdatalist = new List();
            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 basicdatalist = new List();
            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 list = new List();
            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 studentlist = new List();
            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 addlist = new List();
            addlist = addfacade.FacadeAddOnline(addonline);


            //实例化查找Online表,用于把Online表到用户信息赋给Line表
            Enitity.OnlineEnitity selectonline = new Enitity.OnlineEnitity();
            Facade.SignOutFacade selectfacade = new Facade.SignOutFacade();
            selectonline.userID = LoginUI.userID;
            List selectlist = new List();
            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 deletelist = new List();
            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);     //关闭所有窗体

        }
    }
}

 

窗体对照

C#机房重构之上下机_第3张图片

你可能感兴趣的:(C#机房重构之上下机)