270 likes | 398 Views
第 14 章 商品销售功能实现. 宋桂岭. 本章要点. 掌握全屏软件布局方法 掌握键盘事件的处理方式 实现商品销售功能. 14.1 功能概述. 进销存系统中的商品销售功能系统一般为独立的软件系统,包括收款、退货、锁屏、操作帮助、挂单、取单、交班等功能。 注意前台收款系统是一个全屏软件,在实际应用中,前台客户端除了本软件,使不允许其他程序运行的,而且全键盘操作,客户端机器一般不配置鼠标. 14.1 功能概述. 涉及数据库表. 14.2 商品销售系统主界面设计.
E N D
第14章 商品销售功能实现 宋桂岭
本章要点 • 掌握全屏软件布局方法 • 掌握键盘事件的处理方式 • 实现商品销售功能
14.1 功能概述 • 进销存系统中的商品销售功能系统一般为独立的软件系统,包括收款、退货、锁屏、操作帮助、挂单、取单、交班等功能。 • 注意前台收款系统是一个全屏软件,在实际应用中,前台客户端除了本软件,使不允许其他程序运行的,而且全键盘操作,客户端机器一般不配置鼠标
14.1 功能概述 • 涉及数据库表
14.2 商品销售系统主界面设计 • 打开VS2005,执行“新建”→“项目”命令,新建一个名为HcitPosSale的Windows应用程序 • 在VS2005的解决方案资源管理器中,选择“HcitPosSale”,右键,在下拉菜单中选择“添加”→“新建项”,在弹出的添加新项对话框中选择“Windows窗体”,并将该窗体命名为“FrmMain.cs”
14.2 商品销售系统主界面设计 • 在VS2005工具箱中选择“容器”选项卡,拖动控件到商品销售窗体上,这里需要四个Panel控件和一个StatusBar控件完成布局
14.2 商品销售系统主界面设计 • 在panel1容器中添加一个Label控件,将其Dock属性设置为Fill,Font属性设置为“宋体, 26.25pt, style=Bold”,Text属性设置为“淮信POS进销存系统--销售子系统”,TextAlign属性设置为MiddleCenter
14.2 商品销售系统主界面设计 • 在VS2005工具箱中选择“数据”选项卡,选择DataGridView控件,拖动到panel2容器控件中,设置DataGridView控件的Name属性为gvSaleDetails,AutoSizeColumnsMode属性设置为Fill,Dock属性为Fill,MultiSelect属性设置为False,SelectionMode属性为FullRowSelect
14.2 商品销售系统主界面设计 • 目前界面截图
14.2 商品销售系统主界面设计 • 在panel3容器中添加如图所示控件,各个控件的值依次为txtSearch、btnHelp、btnLockScreen、btnTrade、btnReturn、btnOffWork和btnClose
14.2 商品销售系统主界面设计 • 在panel4容器中添加如图所示控件,将TextBox控件命名为txtTotal
14.2 商品销售系统主界面设计 • 从VS2005工具箱中选择StatusStrip控件,拖动到销售程序主界面上,可仿照进销存后台程序设置相关信息
14.3 初始化工作 • 在VS2005的解决方案资源管理器中,选择“HcitPosSale”,右键,在下拉菜单中选择“添加”→“类”,向系统中添加“SysUtility”类 namespace HcitPosSale { public class SysUtility { public static string UserID = "unLogined"; public enum SaleMethod { Sale = 1, Return } } }
14.3 初始化工作 • 双击“FrmMain.cs”文件,添加如下代码: private void InitDataTableColumn() { dt.Rows.Clear(); dt.Columns.Clear(); dt.Columns.Add("GoodsID", Type.GetType("System.String")); dt.Columns.Add("GoodsName", Type.GetType("System.String")); dt.Columns.Add("BarCode", Type.GetType("System.String")); dt.Columns.Add("SalesCount", Type.GetType("System.Int32")); dt.Columns.Add("GoodsUnit", Type.GetType("System.String")); dt.Columns.Add("Price", Type.GetType("System.Double")); dt.Columns.Add("TotalMoney", Type.GetType("System.Double")); DataColumn[] dc = { dt.Columns["GoodsID"] }; dt.PrimaryKey = dc; }
14.3 初始化工作 • 在主界面的Load事件中,添加如下代码,从而完成控件初始化工作 private void FrmMain_Load(object sender, EventArgs e) { InitDataTableColumn(); gvSaleDetails.AutoGenerateColumns = false; gvSaleDetails.DataSource = dt; }
14.4 实现商品录入功能 • 录入商品的操作为:用户输入商品条码后,按回车键,如果该商品为新增商品,则在内存表中新增该商品信息,否则修改该商品的销售数量、销售金额等信息。在添加商品后,通过“G”键将焦点切换到DataGridView控件上,通过上下箭头来选择商品,通过“+”键实现增加当前商品数量,通过“-”键实现减少当前商品数量,具体实现步骤如下:
14.4 实现商品录入功能 • 在FrmMain类中添加“AddGoods”方法,具体代码参考教材 • 继续添加“ChangeGoodsCount”方法,增加或减少DataGridView控件当前选择行的商品数量,修改销售金额 • 为商品销售主窗体添加“KeyDown”事件,在“FrmMain_KeyDown”中添加如下代码 • 在输入进价或数量后,应能自动计算合计金额,该功能通过设置DataGridView控件的DataBindingComplete事件来实现
14.5 实现商品销售功能 • 1、在FrmMain类中添加“GenerateSalesID”方法,用于自动生成销售单号 • 2、添加SaleGoods方法,实现销售功能
14.5 实现商品销售功能 • 3、添加结账找零提示功能对话框,该窗体布局如图所示,TextBox控件命名由上到下为txtTotalMoney、txtRecMoney和txtChange
14.5 实现商品销售功能 • 为该窗体添加公有方法SetTotalMoney,用于接收来自父窗体的消息 • public void SetTotalMoney(string money) • { • txtTotalMoney.Text = money; • }
14.5 实现商品销售功能 • 为实收金额的文本输入框控件添加TextChanged事件,实现找零提示功能 • private void txtRecMoney_TextChanged(object sender, EventArgs e) • { • double totalMoney = Convert.ToDouble(txtTotalMoney.Text); • double recMoney = 0; • if (txtRecMoney.Text != "") • recMoney = Convert.ToDouble(txtRecMoney.Text); • txtChange.Text = Convert.ToString(recMoney - totalMoney); • }
14.5 实现商品销售功能 • 双击“收款”按钮,添加如下代码,实现收款功能 • private void btnTrade_Click(object sender, EventArgs e) • { • FrmChange frm = new FrmChange(); • frm.SetTotalMoney(txtTotal.Text); • frm.ShowDialog(); • SaleGoods(SysUtility.SaleMethod.Sale); • }
14.5 实现商品销售功能 • 双击“退货”按钮,添加如下代码,实现退货功能 • private void btnReturn_Click(object sender, EventArgs e) • { • FrmChange frm = new FrmChange(); • frm.SetTotalMoney(txtTotal.Text); • frm.ShowDialog(); • SaleGoods(SysUtility.SaleMethod.Return); • }
14.6 实现锁屏功能 核心代码: private bool CanUnlock() { DbHelper db = new DbHelper(); string select = "select password from usersinfo where userid=@userid"; db.AddParameter("userid", SysUtility.UserID); SqlDataReader dr = db.ExecuteReader(select); if (dr.Read()) { string password = dr["password"].ToString(); if (password == txtPasswd.Text) return true; } return false; }
14.7 实现系统登录功能 • 打开HcitPos后台系统,选择FrmLogin.cs、FrmLogin.Designer.cs和FrmLogin.resx三个文件,拷贝到前台销售系统HcitPosSale文件夹下 • 在VS2005的解决方案资源管理器中,选择“HcitPosSale”,右键,在下拉菜单中选择“添加”→“添加现有项”,在弹出的对话框中同时选中拷贝过来三个文件,将之添加到当前系统中。
14.7 实现系统登录功能 • 3、切换到FrmMain主窗体,修改该窗体的Load事件为如下代码: • private void FrmMain_Load(object sender, EventArgs e) • { • FrmLogin frm = new FrmLogin(); • frm.ShowDialog(); • InitDataTableColumn(); • gvSaleDetails.AutoGenerateColumns = false; • gvSaleDetails.DataSource = dt; • }
本章小结 • 本章讲述了超市POS进销存系统中前台销售子系统的实现过程。该子系统由于要安装到不同的客户端上,因此将之开发为一个独立的应用程序。由于在实际运行环境中,客户端没有鼠标,因此本章内容涉及了窗体的键盘事件处理这一新知识点。 • 至此,超市POS进销存系统前后台的开发过程已经介绍完毕,读者可以结合源代码反复练习,并认真体会开发流程