机房重构 充值
前言
机房系统重构也开始有一段时间了,逐渐的找到感觉了,总的来说就是套路,要先搞清楚七层结构的特点,然后就是要特别的明白怎样去写库,怎样去读库,这两方面掌握了就简单多了.其他的都是小问题.废话不多说了,看看我的充值界面吧!
正文
充值界面概览
主要的界面就是这个样子的里边还涉及到一些小功能,接下来咱们就一一的来了解一下.
充值界面的主要内容肯定是充值,怎样去充值呢,来看第二张图比较一下有什么不同的地方.
很清楚的就看出来了吧!是的就是右下角红色框中的变化,当鼠标选中相应的充值金额后右下角就会出现支付金额的这个功能主要是给管理员和操作员来使用的,一般用户是看不见这个功能的,
当让我最初的设想是选中支付功能后点击"微信支付"会弹出二维码进行扫码支付,当然这功能还没实现.所以目前只能点击红框中的支付.
还可以给你想要充值的人充值,只要你有足够的钱,就是在最上边的"更改",当点击更改的时候会出现一个账号输入框,输入你想要充值的账号信息然后充值就可以了.界面如下:
这个界面还支持查询记录操作的,针对不同的权限提供不同的功能.查询界面如下
这个界面也有很多相关的小功能,不同的条件的组合查询都在里边,这个组合查询的方法是比较取巧的一种,功能也是可以实现的.输入条件点击查询就会出现你想要的数据,
导出功能就是,将表中的查询到的信息导出表格保存.
界面的大致情况就是这样的.接下来就是代码了.
充值主要代码
先看U层中的代码,这个代码没有优化,看起来可能会很费劲,这个仅供参考,因为这也是第一次用C#进行的重构.整体功能都实现了之后会逐步的优化代码的.
//定义充值金额
private string RechargeCash;
public FrmRecharge()
{
InitializeComponent();
}
private void FrmRecharge_Load(object sender, EventArgs e)
{
txtRechargeAmount.Visible = false;//其他金额输入框隐藏
pnlChangeUID.Visible = false;//账号更输入框隐藏
pnlRechargeChack.Visible = false;//查询余额窗口隐藏
//登录用户的名称
string n = Login.name;
string name = n.ToString();
lblUserIDdisplay.Text = name;
if (txtUserName.Text != "")
{
name = txtUserName.Text;
}
Facade.RechargeFacade frmRecharge = new Facade.RechargeFacade();//实例化外观层
Entity.RechargeEntity recharge = new Entity.RechargeEntity();
recharge.UserID = name;
recharge.RechargeDay = Convert.ToDateTime("1753-01-01 01:01:00");
recharge.Transactor = "";
//recharge.RechargeAmount =Convert.ToDecimal("");
DataTable table = frmRecharge.CombiningQueriesRecharge(recharge);//接收外观层穿过来的值
foreach (DataRow line in table.Rows)
{
//因为列已经一致了,所以直接将datatable的行转成数组就可以添加到datagridview中了
dgvRecharge.Rows.Add(line.ItemArray);
dgvRecharge.RowHeadersVisible = false;// 行头隐藏
dgvRecharge.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;//列宽自动适应数据的长度
//去掉最后一行空行
dgvRecharge.AllowUserToAddRows = false;
}
}
private void lblOther_Click(object sender, EventArgs e)
{
txtRechargeAmount.Visible = true;
txtRechargeAmount.BackColor = ColorTranslator.FromHtml("#3388ff");
lblOther .BackColor = ColorTranslator.FromHtml("#317ef3");
lblTen.BackColor = ColorTranslator.FromHtml("#f0f0f0");
lblTwenty.BackColor = ColorTranslator.FromHtml("#f0f0f0");
lblFifty.BackColor = ColorTranslator.FromHtml("#f0f0f0");
}
/// <summary>
/// 文本框输入限制,只能输入数字、退格键、和小数点
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void txtRechargeAmount_KeyPress_1(object sender, KeyPressEventArgs e)
{
if (!Char.IsNumber(e.KeyChar) && !Char.IsPunctuation(e.KeyChar) && !Char.IsControl(e.KeyChar))
{
e.Handled = true;
}
else if (Char.IsPunctuation(e.KeyChar))
{
if (e.KeyChar == '.')
{
if (((TextBox)sender).Text.LastIndexOf('.') != -1)
{
e.Handled = true;
}
}
else
{
e.Handled = true;
}
}
}
private void lblOther_MouseMove(object sender, MouseEventArgs e)
{
}
private void lblOther_MouseLeave(object sender, EventArgs e)
{
}
private void lblTen_Click(object sender, EventArgs e)
{
txtRechargeAmount.Visible = false;
lblTen.BackColor= ColorTranslator.FromHtml("#317ef3");
lblOther.BackColor = ColorTranslator.FromHtml("#f0f0f0");
lblTwenty.BackColor = ColorTranslator.FromHtml("#f0f0f0");
lblFifty.BackColor = ColorTranslator.FromHtml("#f0f0f0");
//充值金额为10元
RechargeCash = "10";
lblOtherpay.Text = "支付" + RechargeCash;
}
private void lblTwenty_Click(object sender, EventArgs e)
{
txtRechargeAmount.Visible = false;
lblTwenty.BackColor = ColorTranslator.FromHtml("#317ef3");
lblOther.BackColor = ColorTranslator.FromHtml("#f0f0f0");
lblTen.BackColor = ColorTranslator.FromHtml("#f0f0f0");
lblFifty.BackColor = ColorTranslator.FromHtml("#f0f0f0");
//充值金额为20元
RechargeCash = "20";
lblOtherpay.Text = "支付" + RechargeCash;
}
private void lblFifty_Click(object sender, EventArgs e)
{
txtRechargeAmount.Visible = false;
lblFifty.BackColor = ColorTranslator.FromHtml("#317ef3");
lblOther.BackColor = ColorTranslator.FromHtml("#f0f0f0");
lblTen.BackColor = ColorTranslator.FromHtml("#f0f0f0");
lblTwenty.BackColor = ColorTranslator.FromHtml("#f0f0f0");
//充值金额是50元
RechargeCash = "50";
lblOtherpay.Text = "支付" + RechargeCash;
}
private void label1_Click(object sender, EventArgs e)
{
string n = Login.name;
string name = n.ToString();
lblOtherpay.Text = "支付" + RechargeCash;
//数据库查询用户名为lblUserIDdisplay.Text的用户信息(未写)
//将充值信息写入到数据库中充值表中
Entity.RechargeEntity rechargeEntity = new Entity.RechargeEntity();
rechargeEntity.UserID =lblUserIDdisplay.Text;
rechargeEntity.RechargeAmount =Convert.ToInt32(RechargeCash);
//rechargeEntity.RechargeDay = 1234565798; //Convert.ToString(DateTime.Now());
rechargeEntity.Transactor =name;
rechargeEntity.ChackOut = "未结账";
Boolean flag = false;
Facade.RechargeFacade recharge = new Facade.RechargeFacade();//实例化外观
flag = recharge.addRecharge(rechargeEntity);
if (flag==false)
{
MessageBox.Show("未写入充值表中");
return;
}
//充值金额加入到余额中
decimal openbalance = FrmUserInfo.openingbalance;
decimal balance =Convert.ToDecimal(openbalance.ToString());
Entity.UserInfo userup = new Entity.UserInfo();
userup.UserID =lblUserIDdisplay.Text;
userup.Balance =int.Parse(RechargeCash);
Facade.RegisterFacade facadeupdate = new Facade.RegisterFacade();//实例化外观
flag = facadeupdate.updateUserInfoBalance(userup);
if (flag == false)
{
MessageBox.Show("充值成功");
}
}
private void txtRechargeAmount_TextChanged(object sender, EventArgs e)
{
//充值金额是输入的金额,最大不超过9999元
RechargeCash =txtRechargeAmount.Text;
lblOtherpay.Text = "支付" + RechargeCash;
}
private void lblChangeUserID_Click(object sender, EventArgs e)
{
pnlChangeUID.Visible = true;//用户输入框打开
}
private void btnSureChange_Click(object sender, EventArgs e)
{
lblUserIDdisplay.Text = txtChangeUserID.Text;
pnlChangeUID.Visible = false;
}
private void lblStamp_Click(object sender, EventArgs e)
{
//导出Excel
string fileName = "";
string saveFileName = "";
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.DefaultExt = "xlsx";
saveDialog.Filter = "Excel文件|*.xlsx";
saveDialog.FileName = fileName;
saveDialog.ShowDialog();
saveFileName = saveDialog.FileName;
if (saveFileName.IndexOf(":") < 0) return; //被点了取消
Microsoft.Office.Interop.Excel.Application xlApp =
new Microsoft.Office.Interop.Excel.Application();
if (xlApp == null)
{
MessageBox.Show("无法创建Excel对象,您的电脑可能未安装Excel");
return;
}
Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
Microsoft.Office.Interop.Excel.Workbook workbook =
workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
Microsoft.Office.Interop.Excel.Worksheet worksheet =
(Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
//写入标题
for (int i = 0; i < dgvRecharge.ColumnCount; i++)
{ worksheet.Cells[1, i + 1] = dgvRecharge.Columns[i].HeaderText; }
//写入数值
for (int r = 0; r < dgvRecharge.Rows.Count; r++)
{
for (int i = 0; i < dgvRecharge.ColumnCount; i++)
{
worksheet.Cells[r + 2, i + 1] = dgvRecharge.Rows[r].Cells[i].Value;
}
System.Windows.Forms.Application.DoEvents();
}
worksheet.Columns.EntireColumn.AutoFit();//列宽自适应
MessageBox.Show(fileName + "资料保存成功", "提示", MessageBoxButtons.OK);
if (saveFileName != "")
{
try
{
workbook.Saved = true;
workbook.SaveCopyAs(saveFileName); //fileSaved = true;
}
catch (Exception ex)
{//fileSaved = false;
MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
}
}
xlApp.Quit();
GC.Collect();//强行销毁
}
private void lblQuery_Click(object sender, EventArgs e)
{
Facade.RechargeFacade frmRecharge = new Facade.RechargeFacade();//实例化外观层
Entity.RechargeEntity recharge = new Entity.RechargeEntity();
//查询条件用户名
if (chkUserName.CheckState == CheckState.Checked)
{
recharge.UserID = txtUserName.Text;
}
else
{
recharge.UserID = "";
}
if (chkRechargeDay.CheckState == CheckState.Checked)
{
recharge.RechargeDay =Convert.ToDateTime(dTPRechargeDay.Text);
}
else
{
recharge.RechargeDay=Convert.ToDateTime("1753-01-01 01:01:00");
}
if (chkRechargeAmount.CheckState == CheckState.Checked)
{
recharge.RechargeAmount =Convert.ToDecimal(txtRechargeAmount.Text);
}
if (chkTransactor.CheckState == CheckState.Checked)
{
recharge.Transactor = txtTransactor.Text;
}
else
{
recharge.Transactor ="";
}
DataTable table = frmRecharge.CombiningQueriesRecharge(recharge);//接收外观层穿过来的值
dgvRecharge.Rows.Clear();//清空行
foreach (DataRow line in table.Rows)
{
//因为列已经一致了,所以直接将datatable的行转成数组就可以添加到datagridview中了
dgvRecharge.Rows.Add(line.ItemArray);
dgvRecharge.RowHeadersVisible = false;// 行头隐藏
dgvRecharge.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;//列宽自动适应数据的长度
//去掉最后一行空行
dgvRecharge.AllowUserToAddRows = false;
}
}
private void lblChackOut_Click(object sender, EventArgs e)
{
pnlRechargeChack.Visible = true;
}
其他层的代码主要就是数据库的读取和写入的问题了,有需要了解的可以给我留言.
结束
通过这几天的不断学习和研究对C#这个语言有了一个整体的客观认识,对代码也相对来说熟悉点了,当然最大的收获就是完全理清楚了七层结构,虽然用的还不是很好,后边会改进的.就先写这么多了,今天好像是1024程序员节呢!祝大家节日快乐!