食堂消费管理系统.docx

上传人:b****1 文档编号:23021314 上传时间:2023-04-30 格式:DOCX 页数:26 大小:537.50KB
下载 相关 举报
食堂消费管理系统.docx_第1页
第1页 / 共26页
食堂消费管理系统.docx_第2页
第2页 / 共26页
食堂消费管理系统.docx_第3页
第3页 / 共26页
食堂消费管理系统.docx_第4页
第4页 / 共26页
食堂消费管理系统.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

食堂消费管理系统.docx

《食堂消费管理系统.docx》由会员分享,可在线阅读,更多相关《食堂消费管理系统.docx(26页珍藏版)》请在冰豆网上搜索。

食堂消费管理系统.docx

食堂消费管理系统

某轻工业学院本科

数据库课程设计总结报告

 

设计题目:

食堂消费管理系统

学生某:

系别:

专业:

班级:

学号:

指导教师:

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 小学教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1