实时更新余额
根据自己设置的基本数据表查询用卡用户的基本数据,判断每小时的单价。
DataTable dtbasic = loginfacade.InquiryBasicDataInfo(basic);//调用查询基础数据的方法
//判断用户类型,如果时会员卡就返回会员卡的单价,否则就执行非会员卡的单价
if (dtcard.Rows[0]["CardType"].ToString() == "会员卡")
{
lblcash.Text = dtbasic.Rows[0]["Rate"].ToString();
}
else
{
lblcash.Text = dtbasic.Rows[0]["tmpRate"].ToString();
}
给最初的消费金额设定初值为0
labSpendCash.Text = "0";//定义消费金额默认为0
添加一个计时器,计算上机的时间,将上机时间转化为分钟,把计算出的时间赋值给消费时间
计算消费时间,我这里设定的是以每分钟为单位收取金额,所以用单价/60*消费时间,实时更新余额。
private void timer2_Tick(object sender, EventArgs e)
{
TimeSpan ts1 = new TimeSpan(Convert.ToDateTime(FrmLogin.onDatetime).Ticks);
TimeSpan ts2 = new TimeSpan(Convert.ToDateTime(DateTime.Now.ToLongTimeString()).Ticks);
TimeSpan ts = ts1.Subtract(ts2).Duration();//计算上机时长
ontime = Convert.ToDouble(ts.Days * 24 * 60 + ts.Hours * 60 + ts.Minutes);//将上机时间转化为分钟
labSpendTime.Text = ontime.ToString();//动态显示时间
//计算金额
if (dtCardInfo.Rows[0]["CardType"].ToString().Trim() == "会员卡")
{
double rate = Convert.ToDouble(dtBasic.Rows[0]["Rate"]);
costSpend = (rate / 60) * ontime;
}
else
{
double tmprate = Convert.ToDouble(dtBasic.Rows[0]["tmpRate"]);
costSpend = (tmprate / 60) * ontime;
}
labSpendCash.Text = costSpend.ToString();
自动下机
用text事件来检测用户的余额,随着text的改变,当用户的余额等于五时给出提示,余额为0时强制下机,关闭系统。
private void lbblance_TextChanged(object sender, EventArgs e)
{
if (Convert.ToDouble(lbblance.Text.Trim()) == 5.0)
{
Model.ShowMsg show = new Model.ShowMsg();
show.ShowMessageBoxTimeout("余额不足,请充值!", "温馨提示", MessageBoxButtons.OK, 2000);
}
else if (Convert.ToDouble(lbblance.Text.Trim()) <= 0.0)
{
Model.ShowMsg show = new Model.ShowMsg();
show.ShowMessageBoxTimeout("余额不足,即将自动下机", "温馨提示", MessageBoxButtons.OK, 2000);
button3.PerformClick();
}
这里用的提示框是自动关闭,以秒为单位,自己可以根据需求设置。