食堂售饭系统文档格式.docx
《食堂售饭系统文档格式.docx》由会员分享,可在线阅读,更多相关《食堂售饭系统文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
1输入学生信息
2学生存款额(由读卡器端输入器完成)
3查询,修改,删除功能输入
d.在安全与保密方面的要求:
1使用者之间的ID号不能重复;
2ID号不被他人轻易知道;
3即便知道也能有快速相应的机制,予以弥补;
4有使用追踪功能,可以让用户了解,自己使用的情况。
3.1功能的规定
数据流程图
E-R图如下:
学生信息库(student_info)
列名
数据类型
学生学号
stu_num
int
卡ID
id
学生姓名
name
Char(20)
性别
male
boolean
电话号码
tel
地址
address
Char(50)
卡信息(card_info)
余额
sum
float
锁
lock
卡历史(card_his)
时间
daytime
daytype
款额
操作
op
3.2接口设计
1用户接口
(1)用户类别:
1有提供学生查阅的学生界面。
2提供管理员操作的管理员界面。
3提供刷卡的刷卡服务员界面。
(2)管理员界面菜单
1状态
1.1登陆;
1.2注销;
2新建--新建学生信息界面;
3查询更新
3.1学生消费历史
3.2学生信息
4挂失
4.1加锁
4.2解锁
5注销卡
(3)学生查询菜单
2查询历史
3查询学生信息
(4)刷卡界面
2消费方式
2.1正常
2.2定价
3显示上次输出
2外部接口
说明本系统同外界的所有接口的安排包括软件与硬件之间的接口、本系统与各支持软件之间的接口关系。
3内部接口
查询和更新都要调用数据库的操作。
3.3系统出错处理设计
出错信息
1在学生刷卡后,卡ID被锁,将会出现错误信息:
“KardLocked”
2学生卡信息丢失,查询时或者消费-存款时,不认卡情况
3存款额大于999.99元,刷卡器只显示小于等于999,99元部分
4消费时消费额大于存款额。
系统将会提示错误,不作其他任何操作。
措施(号码对应)
1只能解卡锁
2有备份数据库,随时可以恢复
3只能更换刷卡器
4计时充钱
3.4详细设计
3.4.1入口程序entry()设计说明
1程序描述
提供管理员和学生用户,刷卡服务三种环境,限制用户对系统的使用权限。
特点:
非常驻内存;
单独的一个程序;
顺序处理。
2输入项
权限:
三个单选项。
Level。
管理员用户名:
字符串类型,user,长度不超过20,可以是数字(不能开头)和字母、汉字;
管理员密码:
字符串类型,pass,长度不超过20,可以是数字和字母,区分大小写
3输出项
欢迎或者提示错误信息。
4流程逻辑
3.4.2查询模块search()设计说明
完成对系统(数据库)的查找。
学生卡信息,时间信息,消费信息等。
查找结果。
4流程逻辑
3.4.3消费模块pay()设计说明
4.1程序描述
完成消费部分。
对输入和消费额,进行合法性验证。
4.2输入项
卡ID,定价与否,消费额。
4.3输出项
卡余额,错误提示。
4.4流程逻辑
3.4.4存款模块deposit()设计说明
完成存款部分。
对输入和存款额,进行合法性验证。
卡ID,存款额。
4流程逻辑
学生代号
1
2
3
读卡成功
N
Y
卡没有锁
存款成功
显示余额
显示
不可能
题是错误
提示
显示存款成功信息
不显示
显示存款失败信息
3.4.5面向对象分析、设计
面向对象分析首要的工作,是建立问题域的对象模型,这个模型描述了现实世界中的“类于对象”以及它们之间的关系,表示了目标系统的静态数据结构。
其中对象是对问题域中有意义的事务的抽象,他们既可能是物理实体,也可能是抽象概念。
要确定类和对象,我们先要找出候选的类于对象,然后在从中筛选出正确的类于对象。
1有四个类:
(1)类名:
学生帐户
属性:
学号,卡ID,余额,锁
方法:
创建(学生,卡,历史),更新属性,更新数据库,注销(学生,卡,历史),返回(学号,卡ID,余额,锁),消费,存款,设定(号,卡ID,余额,锁),撤销历史,显示历史
(2)类名:
读卡器
读取ID,确认卡,警告,设定ID
(3)类名:
输入器
值,临时值1,临时值2
读入,加法,减法,乘法,等于,定价,常用,最
后一次输入,取消卡,消费
(4)类名:
屏幕
值1,值2,值3,定价
显示当前输入,显示卡余额,清屏,定价,
2细化对象模型,生成Java代码框架
//=============
(1)学生帐户=============
publicclassStudentInfo
{privateIntegerstu_num;
privateIntegercard_id;
privateDoublesum;
privateBooleanlock;
publicStudentInfo()
{}
publicvoidcreateStuInfo(Integerstu_num,Integercard_id,Stringname,Booleanmale,Integertel,Stringaddress)
publicvoidcreateCardInfo(Integerid)
publicvoidcreateCardHis(Integerid)
publicvoidupdateAttr()
publicvoidupdateDB()
publicvoiddeposit(Doublevalue)
publicvoiddelCardHis()
publicvoiddelCardInfo()
publicvoiddelStuInfo()
{}
publicvoidspend(Doublevalue)
publicvoidunDoHis()
publicvoidprintHis()
publicIntegergetStu_num()
{returnnull;
}
publicIntegergetCard_id()
publicDoublegetSum()
publicBooleangetLock()
{
returnnull;
}}
//=============
(2)读卡器=============
publicclassCardReader
{
publicCardReader()
publicIntegerreadId()
publicBooleanjudgeId()
publicvoidalarm()
publicvoidsetCard_id(Integerid){}
}
//=============(3)输入器=============
publicclassInputer
{privateDoublevalue=0;
privateDoubletemp=0;
publicInputer()
publicDoubleread()
publicDoubleplus()
}
publicDoubleminus()
publicDoublemultiply()
publicvoidequal()
publicvoidfixPrice()
publicvoidcommonUse()
publicvoidlastVal()
publicvoiddenyCard()
publicvoidspend()
//=============(4)屏幕=============
publicclassScreen
{privateIntegervalue1;
privateBooleanfixlight;
publicScreen()
publicvoidprintNow()
publicvoidprintSum()
publicvoidcls()
publicvoidsetFix(Booleanstate)
4、关键代码与分析
4.1.权限界面
1数据库联接公共部分
publicstaticConnectionconn=null;
publicstaticStatementstate=null;
publicstaticvoidodbc(){
StringDBDriver="
sun.jdbc.odbc.JdbcOdbcDriver"
;
StringconnectionStr="
jdbc:
odbc:
myodbc"
try{
Class.forName(DBDriver);
catch(java.lang.ClassNotFoundExceptione){System.err.println("
DBconnecton:
"
+e.getMessage());
conn=DriverManager.getConnection(connectionStr,"
"
);
state=conn.createStatement();
}catch(SQLExceptionex){System.err.println("
aq.executeQuery:
+ex.getMessage());
2刷卡选择部分
//===================刷卡界面===================
if(this.jRadioButton2.isSelected()){
this.setVisible(false);
JOptionPane.showMessageDialog(null,"
欢迎进入刷卡界面!
Spend.main(null);
//===================管理员界面===================
if(this.jRadioButton1.isSelected()){
Stringnstr,pstr,sql;
nstr=this.jTextField1.getText();
pstr=this.jTextField2.getText();
sql="
select*fromadminwherenamelike'
+nstr+"
'
ResultSetrs=null;
try{
rs=Main.state.executeQuery(sql);
if(rs.next()){
if(pareTo(rs.getString("
pass"
))==0){
欢迎进入管理员界面!
Admin.main(null);
}else
密码错误"
}else{JOptionPane.showMessageDialog(null,"
用户名错误"
//===================学生查询界面===================
if(this.jRadioButton3.isSelected()){
欢迎进入学生查询界面!
StuInfo.main(null);
4.2.提示界面
4.3.消费界面
1搜索部分
if(Ids.getText().equals("
)){
卡号不能为空!
Ids.setFocusable(true);
}else{
Stringsql="
select*fromcard_infowhereid="
+Ids.getText();
ResultSetrs=Main.state.executeQuery(sql);
if(rs.next()){
if(rs.getBoolean(3)){
JOptionPane.showMessageDialog(null,"
卡已
经被锁,如要解锁,请与管理员联系否则10日后自动注销!
if(DjCheck.isSelected()){
Sum.setText(rs.getString
(2));
this.result=String.valueOf(Integer.parseInt(Sum.getText())-Integer.parseInt(Dingjia.getText()));
消费完毕,卡剩余"
+result+"
。
如果要继续消费请在10秒内操作,只后自动关闭帐户"
Sum.setText(result);
}else{
Ids.setEditable(false);
this.jButton26.setEnabled(false);
this.jPanel1.setVisible(true);
jButton12.setEnabled(true);
jButton13.setEnabled(true);
jButton14.setEnabled(true);
jButton15.setEnabled(true);
卡号错误!
2消费部分
this.result=String.valueOf((Integer.parseInt(Sum.getText())-Integer.parseInt(Now.getText())));
updatecard_infosetsum="
+result+"
whereid="
if(Main.state.executeUpdate(sql)==0){
消费失败"
this.nows=Now.getText();
this.sums=Sum.getText();
3加减乘部分
if(Jisuan.getText().compareTo("
)==0){
Jisuan.setText(Now.getText());
Now.setText("
0"
else{
switch(ops){
case3:
inta=0;
a=Integer.parseInt(Jisuan.getText())*Integer.parseInt(Now.getText());
if(a>
999){
计算量超过消费最大值!
Jisuan.setText(String.valueOf(Integer.parseInt(Jisuan.getText())*Integer.parseInt(Now.getText())));
Now.setText(Jisuan.getText());
break;
case2:
intb=0;
b=Integer.parseInt(Jisuan.getText())+Integer.parseInt(Now.getText());
if(b>
}else{Jisuan.setText(String.valueOf(Integer.parseInt(Jisuan.getText())+Integer.parseInt(Now.getText())));
Now.setText(Jisuan.getText());
case1:
intc=1;
c=Integer.parseInt(Jisuan.getText())-Integer.parseInt(Now.getText());
if(c>
999||c<
=0){JOptionPane.showMessageDialog(null,"
计算量超过消费有效值!
}else{Jisuan.setText(String.valueOf(Integer.parseInt(Jisuan.getText())-Integer.parseInt(Now.getText())));
ops=0;
Op.setText("
="
4.4学生查询界面
1查找信息部分
if(num.getText().equals("
num.setFocusable(true);
select*fromstudent_infowherestu_num="
+num.getText();
id.setText(rs.getString
(2));
name.setText(rs.getString(3));
if(rs.getBoolean(4))
sex.setText("
男"
elsesex.setText("
女"
tel.setText(rs.getString(5));
address.setText(rs.getString(6));
JOpt