1、食堂消费管理系统某轻工业学院本科数据库课程设计总结报告设计题目:食堂消费管理系统学生某:系别:专业:班级:学号:指导教师:2011 年 11月 20 日某轻工业学院课程设计任务书题目 食堂消费管理系统 专业、班级学号某主要内容:系统数据初始化;餐卡基本信息录入与修改;职工工资标准基本设定;员工工资查询;系统用户设定,密码修改等。基本要求:立足于高校工资管理的实际事务,开发具有价值的工资管理专用软件,实现工资管理自动化,提高工作效率,减少手工工作方式难以避免的数据错漏。主要参考资料等:数据库系统概论 作者:王珊 萨师煊 :高等教育SQL Server2005中文版关系数据库基础与实践教程作者:周
2、峰 :电子工业。SQL Server数据库开发实例精粹 作者:徐国智 汪孝宜 等 :电子工业。完 成 期 限: 两周 指导教师签名:课程负责人签名:年 月 日食堂消费管理系统1.需求分析1.1系统目标:实现一个食堂消费管理系统,完成餐卡信息管理,餐卡信息查询,窗口信息管理,餐卡消费管理和窗口信息查询等功能。1.2系统功能需求:本系统管理员能够对餐卡信息增加,修改,查询,删除等。 功能划分: 用户通过身份验证后进入主界面。主界面为超级用户提供5项选择:餐卡办理,餐卡挂失,餐卡充值,餐卡解除挂失,餐卡查询。功能描述:餐卡办理:管理员通过插入表和更新表来为餐卡使用人员办理新卡。新生报到时,学生要到管
3、理员那里办理新卡,管理员通过插入表信息来办理。当卡主的卡丢失或损坏且确定要办理新卡时,管理员通过更新表的信息来办理新卡。餐卡挂失当学生的餐卡找不到但是不能确定还能否找到时,学生可以到擦卡管理员那里去挂失。管理员通过修改表的信息暂时禁用此卡。餐卡解除挂失学生找到丢失的餐卡后,可以到管理员那里解除挂失。管理员通过修改表的信息让此卡能从新使用。餐卡充值餐卡余额不足时,学生可能无法到食堂消费,此时要到管理员那里充值。管理员通过修改表的信息为餐卡充值。餐卡查询就餐时可能出现刷错卡的情况,当刷错卡但是刷卡人员没有注意到时两方就会产纠纷,这时要到餐卡管理员那里查询消费情况。1.3开发工具:该综合教务系统的数
4、据库采用了Microsoft的SQL Server2000企业版,前台应用程序采用了Java编写。1.4系统的数据流图:了解用户的应用要求,使用信息流程图分析应用系统中的信息流。食堂消费管理系统的简单信息流如下。(1)系统的上下文数据流图如图5-381.5数据字典数据项名:学生编号说明: 标识每个学生身份类型: CHAR长度: 7别名: 学号取值X围:970000979999数据流名:选课申请说明: 由学生的个人信息,欲选课程信息组成选课申请来自过程:无流至过程:身份验证数据结构:学生个人信息 欲选课信息数据结构:学生个人信息说明: 说明了学生的个人情况。组成: 某 密码数据存储:上课时间信息
5、说明: 说明了每门课的上课时间,一门课可以有多个上课时间,同一时间可以有多门课程在上课。输出数据流:课程上课时间数据描述:课程编号 上课时间数量: 每学期2030个存取方式:随机存取处理过程:身份验证说明: 对学生输入的某,密码进行验证,确定正确,得到相应的学生编号。输入: 学生某 密码 选课的课程编号输出: 学生编号 选课的课程编号2数据库的概念设计2.1系统的概念模型:上图是食堂消费管理的概念模型的E/R图,该系统涉及的实体集有:管理员实体集:具有属性账号,工号ID和密码。餐卡实体集:具有属性卡号,是否挂失和金额。卡主实体集:具有属性卡号,证件号和某。窗口实体集:具有属性窗口号和机器号。窗
6、口负责人实体集:具有属性某,年龄和性别。菜实体集:具有属性菜名,价格和种类。厨师实体集:具有属性某,年龄和性别。一个管理员可以管理多X餐卡,所以管理员和餐卡之间的管理联系是1:n的联系。一X餐卡只属于一个卡主,每个卡主只有一X餐卡,所以餐卡与卡主之间的联系是1:1的联系。一个卡主可以到多个窗口消费,多个卡主可以到一个窗口消费,所以卡主与窗口之间的联系是n:m的联系。一个窗口可以出售多种菜,每种菜也可以被多个窗口出售,所以窗口与菜之间的联系是m:n的联系。2.2将概念模型转换成关系模型2.2.1将E-R模型转换为关系模式(1) 管理员实体集可以转换为关系: 管理员(账号,ID,密码)(2) 餐卡
7、实体集可以转换为关系 餐卡(卡号,是否挂失,金额)(3) 卡主实体可以转换为关系卡主(证件号,某)(4)窗口实体可以转换为关系 窗口(窗口号,机器号)(5)窗口负责人实体可以转换为关系 窗口负责人(某,性别,性别)(6)菜实体可以转换为关系 菜(菜名,价格,种类)(7)厨师实体可以转换为关系 厨师(某,性别,年龄)(8) 卡主与餐卡之间的联系是1:1的联系,所以没有必要为其建立一个关系,可以通过扩展卡主关系来表示: 卡主(证件号,某,卡号)(9) 管理员,餐卡之间的操作联系可以转换为关系: 操作(ID,卡号)(10) 餐卡和窗口之间的消费联系可以转化为关系: 消费(卡号,窗口号)(11)窗口和
8、菜之间的出售联系可以转化为关系: 出售(窗口号,菜名)(12)菜和厨师之间的烹饪联系可以转换为关系 烹饪(菜名,某) 这里的某是指厨师某。2.2.2 数据库表结构设计:把关系模型转化为表结构:管理员信息表:定义如下:域名含义数据类型长度例子备注ID管理员工号Char512345主码账号管理员账号Char512345密码管理员密码Char523456餐卡信息表:定义如下:域名含义数据类型长度例子备注卡号餐卡卡号Char12540907010238主码是否挂失挂失情况0金额餐卡余额Int100.00卡主信息表:域名含义数据类型长度例子备注证件号卡主的证件号Char512345主键某卡主某Char1
9、2X三卡号卡主的擦卡卡号Char12540907010152窗口信息表域名含义数据类型长度例子备注窗口号食堂窗口编号Int11主键机器号食堂刷卡机编号Int29窗口负责人信息表域名含义数据类型长度例子备注某窗口负责人的某Char12X义坤主键年龄窗口负责人的年龄Int226性别窗口负责人的性别Char2男菜信息表域名含义数据类型长度例子备注菜名窗口所卖菜式的菜名Char30酸辣白菜主键菜价某种菜的价钱Int1.50类别是否为该窗口的特色菜Char2否厨师信息表域名含义数据类型长度例子备注某厨师的某Char12X义坤主键性别厨师的性别Int226年龄厨师的年龄Char2男2.2.3实现数据完整性
10、:通过各种约束,缺省,规则和触发器实现数据的完整性。由于食堂消费管理系统的重要性,和各个数据之间的复杂相关性,保证数据的完整性显得更为重要。不能让用户随意的删除,修改数据。(1)各种外码约束保证数据的完整性,不能随意删除。外码的设置在上面数据库建表时已经提到。(2)主码约束保证实体的完整性,主码的设置在上面数据库建表时也已经提到了。(3)创建规则保证年龄在18岁到35岁之间,不会输入错误数据。3.开发工具本该综合教务系统的数据库采用了Microsoft的SQL Server2000企业版,前台应用程序采用了Java编写。4.1基本流程图数据库设计4.2总体结构和外部模块5详细设计5.1表的设计
11、本系统主要包括以下几个表:管理员的登录信息,窗口管理人员的信息,学生的基本信息表,学生所持卡号的详细信息,每X卡对应的消费信息,窗口的信息,窗口的消费信息表,菜的信息。5.2关系模式设计在数据库的设计的时候,考虑到现实中无法进行透支消费等,进行了防止误操作的控制,比如消费金额如果超过一定数量将限制消费,无法消费价格超过余额的物品。其中使用到了触发器的操作。5.3存储过程设计和部分sql语句代码由于存储过程不像解释执行的sql语句一样在提出操作请求时才进行语法分析和优化操作,因而运行效率高,它提供了在服务器端快速执行sql语句的有效途径.存储过程降低了客户机和服务器之间的通行量,方便实施企业规则
12、.insertinto card_id_table values(000001,23.4,1)insertinto cai_id_table values(1,麻辣鸡丝,1,1,6.5)deletefrom cai_id_table where cai_name=麻辣鸡丝insertinto cooker_id_table values(1,X胖子,男,33)insertinto window_id_table values(1,2,麻辣鸡丝)insertinto window_manager_id_table values(2,X胖子,123)insertinto xiaofei_id_ta
13、ble select*from xiaofei_id_table where cardid=0000015.4关键代码及操作数据库的连接package .gp.connectdb;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class LianJie public static Connection getConnection() th
14、rows ClassNotFoundException, SQLException Class.forName(.microsoft.sqlserver.jdbc.SQLServerDriver);Connection conn = DriverManager.getConnection( jdbc:sqlserver:/localhost:1433;DatabaseName=shitang, sa, gp);return conn;public static PreparedStatement getPreparedStatement(String sql) throws SQLExcept
15、ion, ClassNotFoundException return getConnection().prepareStatement(sql);public static ResultSet getResultSet(String sql) throws SQLException, ClassNotFoundException return getPreparedStatement(sql).executeQuery();public static int executeDelete(String sql) throws SQLException, ClassNotFoundExceptio
16、n return getPreparedStatement(sql).executeUpdate();对数据库的全部操作package .gp.util;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import .gp.connectdb.*;import .gp.javabean.*;public class Alloperate /所有的返回状态都是int,当为1是返回成功,当为0时候返回失败 /查询所有的cardid,user
17、name,cash,并且最后以cardBean的list返回 public List list(String str) List list=new ArrayList(); try ResultSet rs=LianJie.getResultSet(select * from +str); while(rs.next() CardBean card=new CardBean(); card.setCardid(rs.getString(cardid); card.setCash(rs.getFloat(cash); card.setUsername(rs.getString(username)
18、; list.add(card); catch (SQLException e) e.printStackTrace(); catch (ClassNotFoundException e) e.printStackTrace(); return list; /查询cardid下面的卡的信息(用户名,余额) public float show(String cardid) float ret = 0; try ResultSet rs=LianJie.getResultSet(select * from cardinfo where cardid =+cardid+); while(rs.nex
19、t() ret=rs.getFloat(cash); catch (SQLException e) e.printStackTrace(); catch (ClassNotFoundException e) e.printStackTrace(); return ret; /查询cardid下面的所有消费记录并且最后以OpBean的LIST返回 public List listlist(String str) List list=new ArrayList(); try ResultSet rs=LianJie.getResultSet(select * from cardop where c
20、ardid=+str+); while(rs.next() OpBean op=new OpBean(); op.setDate(rs.getString(optime); op.setOp(rs.getFloat(op); list.add(op); catch (SQLException e) e.printStackTrace(); catch (ClassNotFoundException e) e.printStackTrace(); return list; /扣除cardid为cash的余额 public int chuli(float dao,String cardid) in
21、t ret=0; try ret = LianJie.executeDelete(update cardinfo set cash=+dao+where cardid=+cardid+); catch (SQLException e) e.printStackTrace(); catch (ClassNotFoundException e) e.printStackTrace(); return ret; /清除cardid下面的所有记录 public int clearcard(String cardid) int ret1=0 ,ret2=0; try ret1 = LianJie.exe
22、cuteDelete(delete from cardinfo where cardid = +cardid+); ret2 = LianJie.executeDelete(delete from cardop where cardid = +cardid+); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace(); catch (ClassNotFoundException e) / TODO Auto-generated catch block e.printStackTrace(); re
23、turn ret1+ret2 ; /添加cardid public int addcard(String cardid, String username) int ret =0; try ret=LianJie.executeDelete(insert into cardinfo (cardid , username,cash)values(+cardid+,+username+,0); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace(); catch (ClassNotFoundExcept
24、ion e) / TODO Auto-generated catch block e.printStackTrace(); return ret; /添加cardid的消费记录 public int addop(String cardid, float dao,String str) int ret = 0; try ret = LianJie.executeDelete(insert into cardop (cardid , op , optime )values(+cardid+,+dao+,+str+); catch (SQLException e) / TODO Auto-gener
25、ated catch block e.printStackTrace(); catch (ClassNotFoundException e) / TODO Auto-generated catch block e.printStackTrace(); return ret ; 程序实现部分用户首页:登陆后的消费页面:管理登陆后的页面(可以直接进行删除和更改操作)对人物的添加操作对本设计的简单评述,总结通过参与此项目的工作,在这个学期内有了很大的收获,从开始的需求分析、数据库设计、系统设计到最后软件架构的实现、代码的编写,遇到了很多问题,通过查资料,向老师请教,在线提问等多种方式,最终一一解决,从而积累、学习到了很多知识!最后系统使用javabean+jsp开发完成,在系统的实现过程中遇到了,诸如汉字乱码问题等,最大的问题还是由于刚开始的需求分析阶段未完全考虑遇到的问题导致最后功能很多都未能实现。参考文献 萨师煊,王珊编著 数据库系统概论 高等教育,2004年12月第16版 2125数据库原理及应用教程 称志泊,王春林 人民邮电 2011年9月版李静燕 某师X学院学报:综合版 数据库设计技巧2007,(5): 6365王新龙 存储过程应用研究 科技情报开发与经济 2006,(13):183184孙明魁 软件体系结构的探讨 电脑与电信 2007 ,(10) 2324
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1