/// <summary> /// 学生下机 /// </summary> /// <param name="StuentCardno">学生卡号</param> /// <param name="TimeSolt">上机时长</param> /// <returns></returns> public void LoginOutStudent(string StuentCardno, string stuName) { #region 实例化退出工厂 //使用工厂实例化接口 LoginOutStudentIDAL idal = (LoginOutStudentIDAL)fact.CreateUser("LoginOutStudentDAL"); DataTable BasitInfoTable = idal.SelectBasit(); //获取基础信息 //获取正在上机的卡号信息 StudentOnLine studentOnline = new StudentOnLine(); //实例化正在上机实体 studentOnline.StudentCardno = int.Parse(StuentCardno); //给卡号赋值 DataTable OnlineTable = idal.SelectOnLineStudent(studentOnline); //获取正在上机的卡号信息 #endregion #region 计算上机时长 double LimTime = double.Parse(BasitInfoTable.Rows[0][2].ToString()); //给最小上机时间赋值 //获取上机日期+时间 string LoginData = DateTime.Parse(OnlineTable.Rows[0][3].ToString()).ToString("yyyy/MM/dd"); //获取上机日期 string LoginTime = DateTime.Parse(OnlineTable.Rows[0][4].ToString()).ToShortTimeString(); //获取上机时间 string LoginDateTime = LoginData + " " + LoginTime; //合并上机日期+时间 //获取下机日期+时间 string LoginOutData = DateTime.Parse(DateTime.Now.Date.ToString()).ToString("yyyy/MM/dd"); //获取上机日期 string LoginOutTime = DateTime.Now.ToShortTimeString(); //获取上机时间 string LoginOutDateTime = LoginOutData + " " + LoginOutTime; //合并上机日期+时间 //公式:下机日期和时间-上机日期和时间=上机时长 TimeSpan TimeSolt = DateTime.Parse(LoginOutDateTime) - DateTime.Parse(LoginDateTime); #endregion #region 计算消费金额 string stuentType = OnlineTable.Rows[0][1].ToString(); //给卡号类型赋值 double Cash = 0; //收费标准 //给收费标准赋值 if (stuentType == "固定用户") { Cash = double.Parse(BasitInfoTable.Rows[0][3].ToString());//给固定用户收费标准赋值 } else if (stuentType == "临时用户") { Cash = double.Parse(BasitInfoTable.Rows[0][4].ToString());//给临时用户收费标准赋值 }//end if //实例化策略模式,传入卡号类型和对应的收费标准。 Cash.StuCashContext stuCashContext = new Cash.StuCashContext(stuentType, Cash); //传入:消费时长和最小上机时间,得到消费金额 double Money = stuCashContext.GetResult(TimeSolt.ToString(), LimTime); #endregion //计算目前余额:公式:上机前余额-消费金额=当前余额 double NowCsh = double.Parse(OnlineTable.Rows[0][2].ToString()) - Money; #region 更新学生上机记录 //给上机记录实体赋值,和实例化 #region 给上机记录实体赋值 StudentLien StuLine = new StudentLien(); StuLine.Computer = Computer.GetMachineName(); //计算机名称 StuLine.ConsumptionCash = Money; //消费金额 StuLine.NowCash = NowCsh; //目前余额 StuLine.OnDate = DateTime.Parse(OnlineTable.Rows[0][3].ToString()); //上机日期 StuLine.OnLineMin = TimeSolt.ToString(); //在线时长 StuLine.OnTime = OnlineTable.Rows[0][4].ToString(); //上机时间 StuLine.StudentCardno = int.Parse(OnlineTable.Rows[0][0].ToString()); //卡号 StuLine.StudentLevel = OnlineTable.Rows[0][1].ToString(); //用户类型 StuLine.StudentNam = stuName; //用户姓名 问题:正在上机表设计不合理,无法得到用户姓名。 StuLine.UpDate = DateTime.Now.Date; //下机日期 StuLine.UpTime = DateTime.Now.ToShortTimeString(); //下机时间 #endregion //向上机记录插入信息 idal.InsertLineStudent(StuLine); #endregion //更新卡号状态和目前余额 RegistrationCardno stuCardno = new RegistrationCardno(); stuCardno.StudentCardno = StuLine.StudentCardno;//给卡号赋值 stuCardno.Studentbalance = NowCsh; stuCardno.State = "未激活"; idal.UpdateRegiCardno(stuCardno); //删除在线学生信息 idal.DeleteOnLineStudent(studentOnline); }