重构-充值和充值记录
来源:互联网 发布:网络兼职诈骗一审 编辑:程序博客网 时间:2024/05/01 18:14
前言
充值窗体真的用了很大的功夫,一些小的细节上的东西总是感觉做的不够好,于是改进了好几遍,接下来听我一一道来。
正文
在设计数据表的时候,把Balance放到了Student_Info表,充值的时候把充值的钱加上原来的余额作为新的余额更新到Student_Info表中,这个道理是很简单的,也很容易实现,真正让我有点为难的是充值记录表。
首先来看一下数据库充值记录表
设计充值记录表的时候想的是,在操作员或学生自己查询充值记录的时候,显示的是每一次充值的钱和充值后的余额。
当时想的很简单啊,直接查询一下充值后的余额就好了,或者充值前查询余额,然后在数据库中加上充值金额更新进去就好啦。直到代码写到DLL层才发现这样行不通的。
DLL层代码如下:
//把充值记录写入Recharge_Info表 SqlParameter[] sqlParams = {new SqlParameter ("@userID",UserID ), new SqlParameter ("@money",Money ), new SqlParameter ("Operator", Cuser),//操作员名称 new SqlParameter ("@Date",DateTime.Now.ToShortDateString()),//定义当前日期 new SqlParameter ("@Time",DateTime.Now.ToShortTimeString()), new SqlParameter ("@operation",operation ),//行为 充值 new SqlParameter ("@NewBalance",NewBalance)};//NewBalance为充值后的新余额 string sql = @"INSERT INTO Recharge_Info (userID,Recharge,Balance,Date,Time,operation,Operator) VALUES(@userID,@money,@NewBalance,@Date,@Time,@operation,@Operator) "; int count = sqlHelper.sqlHelper.ExecuteNonQuery(sql, sqlParams); //更新Student_Info表中余额 SqlParameter[] sqlParams1 = {new SqlParameter ("@Balance",Money )}; string sql1 = @"UPDATE Student_Info set Balance=Balance + @Balance "; int count1 = sqlHelper.sqlHelper.ExecuteNonQuery(sql1, sqlParams1); return count;
NewBalance为充值后的余额,NewBalance从哪儿来?
刚开始觉得好麻烦啊,所以先让NewBalance等于充值的金额了,这样的话查询充值记录效果如下:
充值金额和余额一样...
强迫症肯定忍不了这个啊...
于是想在充值完成后再查一下Student_Info表然后把余额再更新到Recharge_Info表
后来一想这样也行不通,Recharge_Info表中是充值记录,一个ID有多条数据,根本不知道更新到哪一条...
所以只能使用另一个办法,在充值前查询当前余额,然后在更新Recharge_Info表时把余额和充值金额加起来形成新的余额插入到表中
//第一次查询余额,然后给充值记录表更新使用 crcs.Facade.QueryFactory cxye = new Facade.QueryFactory(); DataTable yue = cxye.Fcxye(UserID); string Balance = yue.Rows[0][6].ToString(); //开始充值 crcs.Facade.InsertFancade Recharge = new Facade.InsertFancade();//实例化外观 int Rec = Recharge.FRecharge(UserID, Money, Cuser, Balance);
第一次查询后的余额传值到充值代码中,此处没有使用实体,也给后面改代码带来了很大的麻烦,以后一定要养成一个使用实体的好习惯
然后在BLL层把查询到的旧余额Balance和充值金额Money加起来
这个时候就又遇到了一个问题,由于Balance和Money都是string类型,string类型是字符串型,是不可以直接相加求和的
只好把string类型先转换为int型,然后再相加求和,再次转化为string类型,传值到DLL层进行数据库更新
int a1 = int.Parse(Money);//把充值金额Money转换为int类型 int a2 = (int)Convert.ToSingle(Balance);//把充值旧余额Balance转换为int类型 int a3 = a1 + a2; //求和 string NewBalance = Convert.ToString(a3);//把新余额转化为String类型这个时候会发现转换充值金额Moeny和转换旧余额Balance的时候使用的代码不一样
为什么呢?
查询回来的旧余额在数据库中类型是numeric(12, 3)
比如说余额为100块,传回来的值就为100.00
这样使用第一种转化代码就转化不了小数点了
所以使用第二种,转换后int类型也为100,直接砍掉了小数点后数字
如果小数点后为.5等其他金额的话这个时候是要被砍掉的
暂时没有其他的解决方法
希望了解的小伙伴可以提个意见
这样把NewBalance更新到数据库中,在充值记录表中就可以看到余额了
后面四条是调好代码后的效果,已经显示总余额了呢
总结
充值这个界面由于充值记录表,改了很长时间,刚开始由于逻辑上的问题,直到代码写完才发现行不通,由于没有考虑后面添加传值的数据,所以也就没有使用实体,这些都是这次遇到的教训。
通过写这个界面,收获还是很大的。
- 重构-充值和充值记录
- vb.net版机房重构--充值记录查询
- 【机房重构】——查看上机记录、充值记录+三层+存储过程+模板方法
- 大话重构 记录
- 记录一次重构
- 机房重构之充值
- C#个人重构之充值
- 一次代码重构记录
- [Android]App重构记录
- 项目记录33--tolua 框架 回顾架构和重构事件派发LNotice
- Android 重构学院新闻 App 记录
- 记录一个项目的推翻重构
- 简图记录-重构改善设计
- Android重构记录及其模块化
- google和baidu:301重定向的索引记录观察
- Linux学习记录(10)Linux管道和重定向
- python 记录编译错误和输出重定向到文件
- 重构和回流
- 预览显示图片and上传图片保存到image里
- wicket框架下生成多选框ListMultipleChoice,第二个多选框的内容根据第一个框动态生成
- 120 C语言文件概述
- wcf获取最新版本之后自己的东西没了
- Jackson ObjectMapper类
- 重构-充值和充值记录
- 单工通信、半双工通信和双工通信
- Java 中BufferedReader & InputStreamReader 用法
- Ext分区文件恢复工具extundelete
- makefile
- STM8库文件判断指定IO输入引脚电平GPIO_ReadInputPin有问题
- 函数模版之重载
- plc可控编程入门
- 微信小程序架构分析 (下)