1、江苏省联合职业技术学院毕业论文题目:饮料销售管理系统姓 名: 学 号: 年 级:10信息高职3专 业:软件开发学生类别:网站设计指导教师: 教学单位:江苏联合职业技术学院2015年5月1日摘要:饮料销售管理系统是几个相对独立的模块包括用户管理模块,用户充值模块,商品展示模块,购物车模块,订单模块,商品添加模块,进行集中式管理。用户登录后进行消费和充值。采用会员制,用户充值消费相应金额会获得相应的会员折扣,对用户信息,购买的物品,消费金额重点记录。用户可以通过简单的操作完成充值,商品的购买和删除,数量的增减,个人信息填写到订单完成等步骤。整个系统模块有较强的可操作性和扩展性。关键字:饮料销售,会
2、员制,存储过程,Visual Basic 2010,V目录1. 需求分析41.1功能需求41.2性能需求42. 系统设计52.1设计思想52.2系统总体结构图52.3各子系统功能分析63. 系统数据库详细设计64. 系统主要用户界面85. 核心代码段116. 总结347. 参考文献34附录一 开题报告附录二 中期报告1. 需求分析这是一个饮料销售系统,只需要销售,只考虑卖。(1)该管理软件提供用户账号的管理,包括登录,注册,注销。(2)该管理软件提供货物的添加。(3)该管理软件会对会员信息,销售记录,销售的商品类型,数量重点记录。本系统的特色是采用会员制:(1) 会员分:普通会员,青铜会员,白
3、银会员,黄金会员。成为会员的方式:(1) 有消费办理会员卡就可以成为普通会员,一次性充值500成为青铜会员,1000成为白银会员、2000成为黄金会员。(2) 普通会员累计消费500成为青铜会员,消费1000成为白银会员,消费2000成为黄金会员。成为会员的优势:会员打折方式:青铜会员9.5折,白银会员9折,黄金会员8折。1.1功能需求功能模块主要有如下几个部分:用户管理模块,用户充值模块,商品展示模块,购物车模块,订单模块,商品添加模块,具体功能描述如下:用户管理模块:其功能是对用户信息的管理,包括登录,注销,注册。用户充值模块:其功能是对登录进来的用户充值。商品展示模块:其功能是展示所有货
4、物,点击购买即可。购物车模块:其功能是显示你所购买的货物,可进行数量添加或删除操作。订单模块:其功能是当用户填写完相关信息就会存入订单模块。商品添加模块:其功能是对货物的添加。1.2性能需求(1)数据精确度用户登录的用户名,充值的金额,物品的单价都取整数,方便操作与运算。(2)时间特性该管理系统软件从启动到进入系统登陆界面的时间正常情况下少于5秒,录入并更新数据的时间正常情况下少于5秒。2.1设计思想(1)系统分成几个相对独立的模块,但这些模块都进行集中式管理。(2)分层的模块化程序设计思想,整个系统采用模块化机构设计,作为应用程序有较强的可操作性和扩展性。(3)合理的数据流设计,在应用系统设
5、计中,相对独立的模块间以数据流相互连接,使各模块间的耦合性较低,方便系统运行,提高系统安全性。2.2系统总体结构图饮料销售系统商品的新增用户订单查询商品添加模块订单模块用户信息填写购物车模块商品数量管理商品的查询商品的购买商品展示模块注销用户给用户充值用户充值模块用户管理模块新增用户2.3各子系统功能分析1)系统用户模块功能:本模块的主要功能是对系统用户的增加以及注销。2)系统登陆模块功能:本模块的主要功能是对用户进行验证,符合要求的才能进入系统。3)商品展示模块功能:本模块的主要功能是展示所有货物的编号,名称,价格。点击购物即可。4)充值模块功能:本模块的主要功能是给进入系统的用户充值,根据
6、充值金额的不同,会员等级不同。5)购物车模块功能:本模块的主要功能是将商品展示模块中点击购买的物品加入购物车,在本模块中可以进行数量的更改以及货物的删除,用户电话地址的输入等。6)订单模块功能:本模块的主要功能是展示用户购买的商品信息及个人信息。7)商品添加模块功能:本模块的主要功能是指定的用户权限给系统添加商品。3.系统数据库详细设计用户登录表(M_USER)字段名类型长度主/外键字段约束中文名UserIdNumberPrimaryNot null用户编号UserNameVarchar220Not null用户名Level_IdVarchar21Not null用户等级Consumption
7、_AmountNumberNot null消费金额Topup_MoneyNumberNot null充值金额BalanceNumberNot null用户余额商品表(M_GOODS)字段名类型长度主/外键字段约束中文名GoodsIDVarchar210PrimaryNot null商品编号GoodsNameVarchar220Not null商品名称PriceNumberNot null商品单价等级表(M_LEVEL)字段名类型长度主/外键字段约束中文名Level_IDVarchar21PrimaryNot null等级编号Level_NameVarchar24Not null等级名称Leve
8、l_DiscountNumberNot null等级折扣购物表(M_SHOP)字段名类型长度主/外键字段约束中文名ProductIDVarchar210Not null商品编号ProductNameVarchar220Not null 商品名称ProductPriceNumberNot null商品单价QuantityNumberNot null商品数量UserIdNumberNot null用户编号订单表(T_ORDER)字段名类型长度主/外键字段约束中文名IDVarchar210PrimaryNot null订单编号UserIdNumberNot null用户编号GoodsIdVarcha
9、r210Not null商品编号QuantityNumberNot null商品数量TotalNumberNot null商品总价AddressVarchar250Not null地址TelVarchar220Not null电话DateTimeDateNot null日期4.系统主要用户界面图1.用户登录图2.用户注册图3.用户充值图4.商品展示图5.购物车图6.商品订单图7.商品添加5.核心代码段(1)用户登录模块 登录代码 PublicSubLogin()TryDimstrAsString = Provider=OraOLEDB.Oracle;Data Source=orcl; _ +
10、User ID=test;Password=test;Unicode=True/数据库连接字符串Dim conn AsNewOleDb.OleDbConnection(str)conn.Open() /连接并打开DimsqlAsString = select * from M_USER where USERID = &txtID.Text.ToString().Trim() & _ + and USERNAME = &txtUser.Text.ToString().Trim() & /登录语句DimcmdAsNewOleDb.OleDbCommand(sql, conn) /command对象
11、DimnaAsString = cmd.ExecuteScalar() /执行语句IfnaString.EmptyThen /如果不是空切到画面2 MultiView1.ActiveViewIndex = 1 Session(username) = txtUser.Text.ToString.Trim()Session(userid) = txtID.Text.ToString.Trim()lblName.Text = Session(username)txtID.Text = txtUser.Text = ElseMsgBox(用户名或密码错误,请重新输入)txtID.Text = txtU
12、ser.Text = EndIfconn.Close() /关闭连接Catch ex AsException MsgBox(ex.ToString()EndTryShowUserInfo()EndSub(2)显示用户基本信息模块 显示用户基本信息 PublicSubShowUserInfo()DimintRowCountAsInteger = 0 DimstrExAsString = Dimw_paraorcBindAsOracleParameter() = NewOracleParameter(B_ID, OracleType.Number),NewOracleParameter(OUT_C
13、UR, OracleType.Cursor) w_paraorcBind(0).Value = Session(userid)w_paraorcBind(0).Direction = ParameterDirection.Inputw_paraorcBind(1).Direction = ParameterDirection.OutputTryDimdbaAsNewNetTraining.DBAccessDimdtSelectAsDataTable = dba.ExecuteQueryByPro(SHOP_6222.D6222_select_userinfo, w_paraorcBind, s
14、trEx).Tables(0)/调用显示用户信息的存储过程/获取字段值lblLevel.Text = dtSelect.Rows(0).Item(level_name)lblCost.Text = dtSelect.Rows(0).Item(consumption_amount)lblBalance.Text = dtSelect.Rows(0).Item(balance) Session(discount) = dtSelect.Rows(0).Item(level_discount)/折扣 Session(balance) = dtSelect.Rows(0).Item(balance)/
15、余额Catch ex AsExceptionMsgBox(ex.ToString()EndTryEndSub调用的存储过程PROCEDURE D6222_select_userinfo ( B_ID IN M_USER.USERID%TYPE , OUT_CUR OUTSYS_REFCURSOR) ;PROCEDURE D6222_select_userinfo( B_ID IN M_USER.USERID%TYPE , OUT_CUR OUTSYS_REFCURSOR) isbeginopen OUT_CUR forselectm_level.level_name, m_user.consu
16、mption_amount,m_user.balance,m_level.level_discountfromm_user , m_levelwherem_level.level_id = m_user.level_idand M_USER.USERID = B_ID ;end;(3)用户注册模块 注册 PrivateSubRegist()/定义变量DimintRowCountAsInteger = 0DimstrExAsString = /定义一个对象存值Dimw_paraorcBindAsOracleParameter() = NewOracleParameter(B_USERNAME,
17、OracleType.VarChar) /赋值w_paraorcBind(0).Value = txtRegist.Text/输入输出类型w_paraorcBind(0).Direction = ParameterDirection.InputTry/数据库连接DimdbaAsNewNetTraining.DBAccess/执行DimintReturn = dba.ExecuteNonQueryByPro(SHOP_6222.D6222_REGISTUSER, w_paraorcBind, strEx) /调用注册的存储过程/try catch 异常捕捉/搜索最后的IDDimstrAsStri
18、ng = Provider=OraOLEDB.Oracle;Data Source=orcl; _ + User ID=test;Password=test;Unicode=True/数据库连接字符串Dim conn AsNewOleDb.OleDbConnection(str)conn.Open() /连接并打开DimsqlAsString = select max(userid) from M_USER /查询刚刚注册的用户名DimcmdAsNewOleDb.OleDbCommand(sql, conn) 、/command对象DimnaAsString = cmd.ExecuteScal
19、ar()/执行语句IfnaString.EmptyThen /如果有结果MsgBox(您注册的用户名为 + na + , 请保管好! )txtID.Text = natxtUser.Text = txtRegist.Text.ToString.Trim()txtRegist.Text = /注销一次Session.Clear()Session.RemoveAll()ElseMsgBox(错误)EndIfconn.Close()/关闭连接Login()Catch ex AsExceptionMsgBox(输入错误!)EndTryEndSub调用的存储过程PROCEDURE D6222_REGIS
20、TUSER ( B_USERNAME IN M_USER.USERNAME%TYPE);PROCEDURE D6222_REGISTUSER(B_USERNAME IN M_USER.USERNAME%TYPE)ISBEGININSERTINTO M_USER VALUES(USERID.NEXTVAL,B_USERNAME,1,0,0,0);END;(4)用户充值模块 用户充值 PublicSubTopUp()If (Session(username) = String.Empty) Then/登录判定MsgBox(您还未登录)Response.Redirect(/index.aspx)El
21、seDimintRowCountAsInteger = 0DimstrExAsString = Dimw_paraorcBindAsOracleParameter() = NewOracleParameter(B_ID, OracleType.VarChar),NewOracleParameter(B_TOPUP_MONEY, OracleType.Number) w_paraorcBind(0).Value = Session(userid)w_paraorcBind(1).Value = txttopup.Textw_paraorcBind(0).Direction = Parameter
22、Direction.Inputw_paraorcBind(1).Direction = ParameterDirection.InputTryDimdbaAsNewNetTraining.DBAccessDimdtReturn = dba.ExecuteNonQueryByPro(SHOP_6222.D6222_Topup, w_paraorcBind, strEx) /调用充值的存储过程IfstrExThenMsgBox(充值失败)ElseIftxttopup.Text = 0 ThenMsgBox(您输入的金额为0,请重新输入!)ElseMsgBox(充值成功!)EndIfEndIfCat
23、ch ex AsExceptionMsgBox(输入金额有误!)EndTryEndIfSession(balance) = txttopup.TextResponse.Redirect(/index.aspx)EndSub调用的存储过程PROCEDURE D6222_Topup ( B_ID INM_USER.USERID%TYPe, B_TOPUP_MONEY INM_user.topup_money%TYPE) ;PROCEDURE D6222_Topup ( B_ID IN M_USER.USERID%TYPE, B_TOPUP_MONEY INM_user.topup_money%TY
24、PE) isxiaofeinumber;chongzhinumber; levelidnumber;moneyidnumber;yuenumber;yue2number;beginchongzhi := 0;updatem_usersettopup_money = B_TOPUP_MONEY whereuserid = b_id;selecttopup_moneyintochongzhifromm_userwhereuserid = b_id;select balance into yue2 fromm_userwhereuserid = b_id;selectlevel_Idintoleve
25、lidfromm_userwhereuserid = b_id;moneyid := 1;ifchongzhi= 500andchongzhi=500andxiaofei= 1000andchongzhi=1000andxiaofei= 2000orxiaofei=2000thenmoneyid := 4 ;endif;iflevelid= moneyidthenlevelid := moneyid;endif;yue := chongzhi+ yue2;updatem_usersetlevel_id = levelid ,balance = yuewhereuserid = b_id;yue
26、 :=0; end;(5)商品展示模块 抽取商品表 PrivateFunctionsearch(ByValsearchConditionAsSearchCondition) AsStringDimsqlAsString = String.Emptysql += Selectsql += GOODSID,sql += GOODS_NAME,sql += PRICEsql += From M_GOODS sql += Order By GOODSIDReturnsqlEndFunction 窗体加载事件 ProtectedSubPage_Load(ByVal sender AsObject, By
27、Val e AsSystem.EventArgs) HandlesMe.LoadDimdtAsDataTable/定义一个数据库DimmssageAsString = String.Empty/定义一个接收消息的变量DimsqlAsString = String.Empty/定义一个接收sql的变量TryDimdbaAsNewNetTraining.DBAccess/连接数据库sql = search(searchCondition) /使用search方法进行查询dt = dba.ExecuteQuery(sql, mssage).Tables(0)gvwShowGoods.DataSour
28、ce = dtgvwShowGoods.DataBind()Catch ex AsExceptionMsgBox(数据库连接失败!)EndTryEndSub(6)点击购买将物品添加至购物车 添加至购物车 PrivateSubGOODSINSERT()/定义变量DimintRowCountAsInteger = 0DimstrExAsString = /定义存值对象Dimw_paraorcBindAsOracleParameter() = NewOracleParameter(PROID, OracleType.VarChar),NewOracleParameter(PRONAME, Oracl
29、eType.VarChar),NewOracleParameter(PROPRICE, OracleType.Number),NewOracleParameter(PUSERID, OracleType.VarChar),NewOracleParameter(PQUANTITY, OracleType.Number) /赋值w_paraorcBind(0).Value = Session(PID)w_paraorcBind(1).Value = Session(PNAME)w_paraorcBind(2).Value = Session(PPRICE)w_paraorcBind(3).Valu
30、e = Session(userid)w_paraorcBind(4).Value = 0/输入输出类型w_paraorcBind(0).Direction = ParameterDirection.Inputw_paraorcBind(1).Direction = ParameterDirection.Inputw_paraorcBind(2).Direction = ParameterDirection.Inputw_paraorcBind(3).Direction = ParameterDirection.Inputw_paraorcBind(4).Direction = Paramet
31、erDirection.InputTry/数据库连接DimdbaAsNewNetTraining.DBAccess/执行DimintReturn = dba.ExecuteNonQueryByPro(Shop_6222.D6222_AddGOODS, w_paraorcBind, strEx)/try catch 异常捕捉IfstrExThenMsgBox(WRONG)ElseMsgBox(物品添加成功!)EndIfCatch ex AsExceptionMsgBox(WRONG)EndTryEndSub调用的存储过程PROCEDURE D6222_AddGOODS ( PROID IN M_
32、SHOP.PRODUCTID%TYPE, PRONAME IN M_SHOP.PRODUCTNAME%TYPE,PROPRICE IN M_SHOP.PRODUCTPRICE%TYPE, PUSERID IN M_SHOP.USERID%TYPE, PQUANTITY IN M_SHOP.QUANTITY%TYPE ); PROCEDURE D6222_AddGOODS( PROID IN M_SHOP.PRODUCTID%TYPE, PRONAME IN M_SHOP.PRODUCTNAME%TYPE, PROPRICE IN M_SHOP.PRODUCTPRICE%TYPE, PUSERI
33、D IN M_SHOP.USERID%TYPE, PQUANTITY IN M_SHOP.QUANTITY%TYPE )ISnumcountnumber; PQU NUMBER;BEGINselectcount(0)intonumcountfromm_shopwhereuserid =PUSERID and PRODUCTID =PROID;if (numcount = 0) thenINSERTINTO M_SHOP VALUES(PROID,PRONAME,PROPRICE,1,PUSERID);elseSELECT QUANTITY INTO PQU FROM M_SHOP WHERE
34、USERID = PUSERID AND PRODUCTID = PROID;UPDATE M_SHOP SET QUANTITY = (PQU + 1) WHERE PRODUCTID = PROIDAND USERID = PUSERID ;endif;PQU :=0;END;(7)购物车模块 1)购物车,计算余额与消费,余额不足采用现金支付 PrivateSubAddConsumption_Amount()DimintRowCountAsInteger = 0DimstrExAsString = Dimw_paraorcBindAsOracleParameter() = NewOracl
35、eParameter(B_USERID, OracleType.VarChar),NewOracleParameter(B_CON_AM, OracleType.VarChar) /赋值w_paraorcBind(0).Value = Session(userid)w_paraorcBind(1).Value = Convert.ToDouble(lblcoust.Text)/输入输出类型w_paraorcBind(0).Direction = ParameterDirection.Inputw_paraorcBind(1).Direction = ParameterDirection.Inp
36、utIf (Convert.ToDouble(Session(balance) Convert.ToDouble(lblcoust.Text) ThenMsgBox(当前用户余额不足,自动启用现金支付!)UserCash()InsertOrder()DeleteShopCart()Response.Redirect(/Order.aspx)/重新读取用户信息Dim l1 AsNewlogin1l1.ShowUserInfo()ElseInsertOrder()Try/数据库连接DimdbaAsNewNetTraining.DBAccess/执行DimintReturn = dba.Execut
37、eNonQueryByPro(Shop_6222.D6222_AddConsumption_Amount, w_paraorcBind, strEx)/try catch异常捕捉IfstrExThenMsgBox(WRONG)ElseEndIfCatch ex AsExceptionMsgBox(WRONG)EndTryResponse.Redirect(/Order.aspx)EndIfEndSub 启用现金支付 PrivateSubUserCash()DimintRowCountAsInteger = 0DimstrExAsString = /定义一个对象存储Dimw_paraorcBindAsOracleParameter() = NewOracleParameter(B_USERID, OracleType.VarChar),NewOracleParameter(B_CON_AM, OracleType.Number) /赋值w_paraorcBind(0).Value = Session(userid)w_paraorcBind(1).Value = Convert.ToDouble(lblcoust