本项目为连锁店餐饮系统。前台C#,服务器采用Java开发,oracle数据库;通过webservice实现前后台的交互,后台以提供服务的方式,供前端调用并进行数据库操作。
商家根据餐饮副食店实际情况提出了新的需求,希望能够通过在店内放置触摸屏的方式,使会员顾客能够以触摸屏的方式选择商品并放入自己的购物车,之后售货员只需要读取卡内的购物车信息即可刷卡消费,这样大大节约了顾客挑选商品的时间,使整个购物流程并行化程度提高。由于顾客消费的时间大多集中在早中晚,并行化会使店内的销售量显著提高。
经过一周的时间终于完成了模块的更新,下面我将分4个方面详细的描述整个流程,并附上关键部分源码,分享给大家共同学习。
1.功能模块介绍;2,触屏设置实现(前台、服务器、数据库);3,触屏显示实现;4,触屏结算实现
一 功能模块介绍:
展柜设置(包括4个子模块)
1.1 触屏设置(管理员操作)
本子模块包括4项功能:
——选择:根据门店编号mdbh从数据库消费记录表和物料表中获取外卖记录,显示在combox中;
——插入:管理员从combox中选取要显示的商品图片,获取该图片的绝对路径,以记录的方式插入到config.txt文本中,每个图片代表一条记录
——删除:删除TXT文档中对应的条目。
——保存:将当前Imagelistview中的商品图片信息保存成TXT文档,存储在项目的指定目录下。
1.2 触屏显示(顾客操作)
本模块中,自动加载“触屏设置”中保存的TXT文档,读取其中的记录并将对应的图片全屏显示;双击图片会进入商品细节页面,在本界面,顾客可以选择”加入购物车“或”返回“,本页面能够显示库存量,若库存量《0,点击返回后对应图片将显示售罄。
同时设置两个按钮“上一页”,“下一页”,通过点击可以实现翻页查看。
(注:顾客通过本显示屏可以看到本店内所有的商品信息,并有选择的加入到自己卡的购物车中)
1.3 触屏结算(售货员操作)
本模块包括3项功能:
——读卡:售货员点击“读卡”,系统将卡内的购物车信息显示在购物车栏中;
——修改:删除菜品:售货员可以对购物车中的商品调整数量或删除
——结算:对IC卡的购物车商品结算,同时删除数据库中对应的购物车信息,执行卡金额操作,并打印小票。
1.4 图片下载(管理员操作)
通过FTP的方式,管理员可以从指定的FTP目录中选择图片,加入本门店的图片库中,供展柜设置使用。
总体界面设计:
1.5 总体流程:
前台:主要是画界面,写webservice调用方法,逻辑实现;
服务器端:若无对应的服务,则注册webservice服务(1.在sun-jaxws.xml 中通过endpoint注册;2.在对应的服务中加入注解,@webservice和@HandlerChain和@webMethod,注意名字要和xml中对应;注册完服务之后,通过具体的方法执行Sql语句操作数据库,反馈到前台,显示。
当思路清晰、宏观设计之后,具体的实现就是搬砖的过程,我们只需要一步步的根据需求完成模块即可。Let’s go!
二 触屏设置
2.1界面设计:
2.2自动加载物料表,Combox显示
1.通过调用getYLData方法从数据库中获取物料数据存入List中
private void initYL(String lb)
{
物料编号.Visible = true;
ylComb.Visible = true;
ylAddBtn.Visible = true;
getYLData(lb); //设置物料表ylList
if (ylList != null)
{
foreach (DataBean bean in ylList)
{
//物料列表
this.ylComb.Items.Add(bean.GetValue("WL_WLBH") + "|" + bean.GetValue("WL_WLMC") + "|" + bean.GetValue("WL_3lMC") + "|" + bean.GetValue("WL_JLDW") + "|" + bean.GetValue("SL"));
}
}
}
2.通过webservice调取服务MaterialService中的getDataFromXSJL方法获取物料数据,存入ArrayList中。
private void getYLData(string ALMC)
{
ServiceDelegate serviceDelegate = ServiceDelegateFactory.Instance();
//ArrayList materialList = new ArrayList();
try
{
ylList = (ArrayList)serviceDelegate.CommonInvoke("MaterialService", "getDataFromXSJL", ALMC);
}
catch (Exception ex)
{
if (ex is WebServiceException)
{
if ((ex as WebServiceException).ExceptionType ==
EnumDefine.WebServiceException.ConnectException)
{
PopMessage.Error("EXC0009E", ConfigUtil.GetItemValue("ErrorMessageTitle"));
}
else
{
PopMessage.Error("EXC0006E", ConfigUtil.GetItemValue("ErrorMessageTitle"));
}
}
else
{
throw ex;
}
return;
}
if (serviceDelegate.MessageList != null)
{
ServiceMessageBean popMessage = (ServiceMessageBean)serviceDelegate.MessageList[0];
if (popMessage.Parameters != null)
{
PopMessage.Error(popMessage.MessageCode, ConfigUtil.GetItemValue("ErrorMessageTitle"), popMessage.Parameters);
}
else
{
PopMessage.Error(popMessage.MessageCode, ConfigUtil.GetItemValue("ErrorMessageTitle"));
}
serviceDelegate.MessageList.Clear();
}
}
3.服务器代码
MaterialService