食堂消费管理系统.docx
《食堂消费管理系统.docx》由会员分享,可在线阅读,更多相关《食堂消费管理系统.docx(26页珍藏版)》请在冰豆网上搜索。
食堂消费管理系统
某轻工业学院本科
数据库课程设计总结报告
设计题目:
食堂消费管理系统
学生某:
系别:
专业:
班级:
学号:
指导教师:
2011年11月20日
某轻工业学院
课程设计任务书
题目食堂消费管理系统
专业、班级
学号某
主要内容:
系统数据初始化;餐卡基本信息录入与修改;职工工资标准基本设定;员工工资查询;系统用户设定,密码修改等。
基本要求:
立足于高校工资管理的实际事务,开发具有价值的工资管理专用软件,实现工资管理自动化,提高工作效率,减少手工工作方式难以避免的数据错漏。
主要参考资料等:
《数据库系统概论》作者:
王珊萨师煊:
高等教育
《SQLServer2005中文版关系数据库基础与实践教程》作者:
周峰
:
电子工业。
《SQLServer数据库开发实例精粹》作者:
徐国智汪孝宜等
:
电子工业。
完成期限:
两周
指导教师签名:
课程负责人签名:
年月日
食堂消费管理系统
1.需求分析
1.1系统目标:
实现一个食堂消费管理系统,完成餐卡信息管理,餐卡信息查询,窗口信息管理,餐卡消费管理和窗口信息查询等功能。
1.2系统功能需求:
本系统管理员能够对餐卡信息增加,修改,查询,删除等。
功能划分:
用户通过身份验证后进入主界面。
主界面为超级用户提供5项选择:
餐卡办理,餐卡挂失,餐卡充值,餐卡解除挂失,餐卡查询。
功能描述:
●餐卡办理:
管理员通过插入表和更新表来为餐卡使用人员办理新卡。
新生报到时,学生要到管理员那里办理新卡,管理员通过插入表信息来办理。
当卡主的卡丢失或损坏且确定要办理新卡时,管理员通过更新表的信息来办理新卡。
●餐卡挂失
当学生的餐卡找不到但是不能确定还能否找到时,学生可以到擦卡管理员那里去挂失。
管理员通过修改表的信息暂时禁用此卡。
●餐卡解除挂失
学生找到丢失的餐卡后,可以到管理员那里解除挂失。
管理员通过修改表的信息让此卡能从新使用。
●餐卡充值
餐卡余额不足时,学生可能无法到食堂消费,此时要到管理员那里充值。
管理员通过修改表的信息为餐卡充值。
●餐卡查询
就餐时可能出现刷错卡的情况,当刷错卡但是刷卡人员没有注意到时两方就会产纠纷,这时要到餐卡管理员那里查询消费情况。
1.3开发工具:
该综合教务系统的数据库采用了Microsoft的SQLServer2000企业版,前台应用程序采用了Java编写。
1.4系统的数据流图:
了解用户的应用要求,使用信息流程图分析应用系统中的信息流。
食堂消费管理系统的简单信息流如下。
(1)系统的上下文数据流图如图5-38
1.5数据字典
数据项名:
学生编号
说明:
标识每个学生身份
类型:
CHAR
长度:
7
别名:
学号
取值X围:
970000-979999
数据流名:
选课申请
说明:
由学生的个人信息,欲选课程信息组成选课申请
来自过程:
无
流至过程:
身份验证
数据结构:
学生个人信息
欲选课信息
数据结构:
学生个人信息
说明:
说明了学生的个人情况。
组成:
某
密码
数据存储:
上课时间信息
说明:
说明了每门课的上课时间,一门课可以有多个上课时间,同一时间可以有多门课程在上课。
输出数据流:
课程上课时间
数据描述:
课程编号
上课时间
数量:
每学期20-30个
存取方式:
随机存取
处理过程:
身份验证
说明:
对学生输入的某,密码进行验证,确定正确,得到相应的学生编号。
输入:
学生某
密码
选课的课程编号
输出:
学生编号
选课的课程编号
2数据库的概念设计
2.1系统的概念模型:
上图是食堂消费管理的概念模型的E/R图,该系统涉及的实体集有:
管理员实体集:
具有属性账号,工号ID和密码。
餐卡实体集:
具有属性卡号,是否挂失和金额。
卡主实体集:
具有属性卡号,证件号和某。
窗口实体集:
具有属性窗口号和机器号。
窗口负责人实体集:
具有属性某,年龄和性别。
菜实体集:
具有属性菜名,价格和种类。
厨师实体集:
具有属性某,年龄和性别。
一个管理员可以管理多X餐卡,所以管理员和餐卡之间的管理联系是1:
n的联系。
一X餐卡只属于一个卡主,每个卡主只有一X餐卡,所以餐卡与卡主之间的联系是1:
1的联系。
一个卡主可以到多个窗口消费,多个卡主可以到一个窗口消费,所以卡主与窗口之间的联系是n:
m的联系。
一个窗口可以出售多种菜,每种菜也可以被多个窗口出售,所以窗口与菜之间的联系是m:
n的联系。
2.2将概念模型转换成关系模型
2.2.1将E-R模型转换为关系模式
(1)管理员实体集可以转换为关系:
管理员(账号,ID,密码)
(2)餐卡实体集可以转换为关系
餐卡(卡号,是否挂失,金额)
(3)卡主实体可以转换为关系
卡主(证件号,某)
(4)窗口实体可以转换为关系
窗口(窗口号,机器号)
(5)窗口负责人实体可以转换为关系
窗口负责人(某,性别,性别)
(6)菜实体可以转换为关系
菜(菜名,价格,种类)
(7)厨师实体可以转换为关系
厨师(某,性别,年龄)
(8)卡主与餐卡之间的联系是1:
1的联系,所以没有必要为其建立一个关系,可以通过扩展卡主关系来表示:
卡主(证件号,某,卡号)
(9)管理员,餐卡之间的操作联系可以转换为关系:
操作(ID,卡号)
(10)餐卡和窗口之间的消费联系可以转化为关系:
消费(卡号,窗口号)
(11)窗口和菜之间的出售联系可以转化为关系:
出售(窗口号,菜名)
(12)菜和厨师之间的烹饪联系可以转换为关系
烹饪(菜名,某)
这里的某是指厨师某。
2.2.2数据库表结构设计:
把关系模型转化为表结构:
管理员信息表:
定义如下:
域名
含义
数据类型
长度
例子
备注
ID
管理员工号
Char
5
12345
主码
账号
管理员账号
Char
5
12345
密码
管理员密码
Char
5
23456
餐卡信息表:
定义如下:
域名
含义
数据类型
长度
例子
备注
卡号
餐卡卡号
Char
12
540907010238
主码
是否挂失
挂失情况
0
金额
餐卡余额
Int
100.00
卡主信息表:
域名
含义
数据类型
长度
例子
备注
证件号
卡主的证件号
Char
5
12345
主键
某
卡主某
Char
12
X三
卡号
卡主的擦卡卡号
Char
12
540907010152
窗口信息表
域名
含义
数据类型
长度
例子
备注
窗口号
食堂窗口编号
Int
11
主键
机器号
食堂刷卡机编号
Int
29
窗口负责人信息表
域名
含义
数据类型
长度
例子
备注
某
窗口负责人的某
Char
12
X义坤
主键
年龄
窗口负责人的年龄
Int
2
26
性别
窗口负责人的性别
Char
2
男
菜信息表
域名
含义
数据类型
长度
例子
备注
菜名
窗口所卖菜式的菜名
Char
30
酸辣白菜
主键
菜价
某种菜的价钱
Int
1.50
类别
是否为该窗口的特色菜
Char
2
否
厨师信息表
域名
含义
数据类型
长度
例子
备注
某
厨师的某
Char
12
X义坤
主键
性别
厨师的性别
Int
2
26
年龄
厨师的年龄
Char
2
男
2.2.3实现数据完整性:
通过各种约束,缺省,规则和触发器实现数据的完整性。
由于食堂消费管理系统的重要性,和各个数据之间的复杂相关性,保证数据的完整性显得更为重要。
不能让用户随意的删除,修改数据。
(1)各种外码约束保证数据的完整性,不能随意删除。
外码的设置在上面数据库建表时已经提到。
(2)主码约束保证实体的完整性,主码的设置在上面数据库建表时也已经提到了。
(3)创建规则保证年龄在18岁到35岁之间,不会输入错误数据。
3.开发工具
本该综合教务系统的数据库采用了Microsoft的SQLServer2000企业版,前台应用程序采用了Java编写。
4.1基本流程图
数据库设计
4.2总体结构和外部模块
5详细设计
5.1表的设计
本系统主要包括以下几个表:
管理员的登录信息,窗口管理人员的信息,学生的基本信息表,学生所持卡号的详细信息,每X卡对应的消费信息,窗口的信息,窗口的消费信息表,菜的信息。
5.2关系模式设计
在数据库的设计的时候,考虑到现实中无法进行透支消费等,进行了防止误操作的控制,比如消费金额如果超过一定数量将限制消费,无法消费价格超过余额的物品。
其中使用到了触发器的操作。
5.3存储过程设计和部分sql语句代码
由于存储过程不像解释执行的sql语句一样在提出操作请求时才进行语法分析和优化操作,因而运行效率高,它提供了在服务器端快速执行sql语句的有效途径.
存储过程降低了客户机和服务器之间的通行量,方便实施企业规则.
insertintocard_id_tablevalues('000001',23.4,1)
insertintocai_id_tablevalues(1,'麻辣鸡丝',1,1,6.5)
deletefromcai_id_tablewherecai_name='麻辣鸡丝'
insertintocooker_id_tablevalues(1,'X胖子','男','33')
insertintowindow_id_tablevalues(1,2,'麻辣鸡丝')
insertintowindow_manager_id_tablevalues(2,'X胖子','123')
insertintoxiaofei_id_table
select*fromxiaofei_id_tablewherecardid='000001'
5.4关键代码及操作
数据库的连接
package.gp.connectdb;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.SQLException;
publicclassLianJie{
publicstaticConnectiongetConnection()throwsClassNotFoundException,
SQLException{
Class.forName(".microsoft.sqlserver.jdbc.SQLServerDriver");
Connectionconn=DriverManager.getConnection(
"jdbc:
sqlserver:
//localhost:
1433;DatabaseName=shitang","sa",
"gp");
returnconn;
}
publicstaticPreparedStatementgetPreparedStatement(Stringsql)
throwsSQLException,ClassNotFoundException{
returngetConnection().prepareStatement(sql);
}
publicstaticResultSetgetResultSet(Stringsql)throwsSQLException,
ClassNotFoundException{
returngetPreparedStatement(sql).executeQuery();
}
publicstaticintexecuteDelete(Stringsql)throwsSQLException,
ClassNotFoundException{
returngetPreparedStatement(sql).executeUpdate();
}
}
对数据库的全部操作
package.gp.util;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.util.ArrayList;
importjava.util.List;
import.gp.connectdb.*;
import.gp.javabean.*;
publicclassAlloperate{
//所有的返回状态都是int,当为1是返回成功,当为0时候返回失败
//查询所有的cardid,username,cash,并且最后以cardBean的list返回
publicListlist(Stringstr){
Listlist=newArrayList();
try{
ResultSetrs=LianJie.getResultSet("select*from"+str);
while(rs.next()){
CardBeancard=newCardBean();
card.setCardid(rs.getString("cardid"));
card.setCash(rs.getFloat("cash"));
card.setUsername(rs.getString("username"));
list.add(card);
}
}catch(SQLExceptione){
e.printStackTrace();
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
returnlist;
}
//查询cardid下面的卡的信息(用户名,余额)
publicfloatshow(Stringcardid){
floatret=0;
try{
ResultSetrs=LianJie.getResultSet("select*fromcardinfowherecardid='"+cardid+"'");
while(rs.next()){
ret=rs.getFloat("cash");
}
}catch(SQLExceptione){
e.printStackTrace();
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
returnret;
}
//查询cardid下面的所有消费记录并且最后以OpBean的LIST返回
publicListlistlist(Stringstr){
Listlist=newArrayList();
try{
ResultSetrs=LianJie.getResultSet("select*fromcardopwherecardid='"+str+"'");
while(rs.next()){
OpBeanop=newOpBean();
op.setDate(rs.getString("optime"));
op.setOp(rs.getFloat("op"));;
list.add(op);
}
}catch(SQLExceptione){
e.printStackTrace();
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
returnlist;
}
//扣除cardid为cash的余额
publicintchuli(floatdao,Stringcardid){
intret=0;
try{
ret=LianJie.executeDelete("updatecardinfosetcash='"+dao+"'wherecardid='"+cardid+"'");
}catch(SQLExceptione){
e.printStackTrace();
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
returnret;
}
//清除cardid下面的所有记录
publicintclearcard(Stringcardid){
intret1=0,ret2=0;
try{
ret1=LianJie.executeDelete("deletefromcardinfowherecardid='"+cardid+"'");
ret2=LianJie.executeDelete("deletefromcardopwherecardid='"+cardid+"'");
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(ClassNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returnret1+ret2;
}
//添加cardid
publicintaddcard(Stringcardid,Stringusername){
intret=0;
try{
ret=LianJie.executeDelete("insertintocardinfo(cardid,username,cash)values('"+cardid+"','"+username+"','0')");
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(ClassNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returnret;
}
//添加cardid的消费记录
publicintaddop(Stringcardid,floatdao,Stringstr){
intret=0;
try{
ret=LianJie.executeDelete("insertintocardop(cardid,op,optime)values('"+cardid+"','"+dao+"','"+str+"')");
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(ClassNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returnret;
}
}
程序实现部分
用户首页:
登陆后的消费页面:
管理登陆后的页面(可以直接进行删除和更改操作)
对人物的添加操作
对本设计的简单评述,总结
通过参与此项目的工作,在这个学期内有了很大的收获,从开始的需求分析、数据库设计、系统设计到最后软件架构的实现、代码的编写,遇到了很多问题,通过查资料,向老师请教,在线提问等多种方式,最终一一解决,从而积累、学习到了很多知识!
最后系统使用javabean+jsp开发完成,在系统的实现过程中遇到了,诸如汉字乱码问题等,最大的问题还是由于刚开始的需求分析阶段未完全考虑遇到的问题导致最后功能很多都未能实现。
参考文献
[]萨师煊,王珊编著数据库系统概论高等教育,2004年12月第16版2~125
数据库原理及应用教程称志泊,王春林人民邮电2011年9月版
[]李静燕某师X学院学报:
综合版数据库设计技巧2007,(5):
63~65
[]王新龙存储过程应用研究科技情报开发与经济2006,(13):
183~184
[]孙明魁软件体系结构的探讨电脑与电信2007,(10)23~24