4支持校园卡的食堂消费信息管理系统数据库设计数据库大作业.docx
《4支持校园卡的食堂消费信息管理系统数据库设计数据库大作业.docx》由会员分享,可在线阅读,更多相关《4支持校园卡的食堂消费信息管理系统数据库设计数据库大作业.docx(39页珍藏版)》请在冰豆网上搜索。
![4支持校园卡的食堂消费信息管理系统数据库设计数据库大作业.docx](https://file1.bdocx.com/fileroot1/2023-7/22/0bc3207f-aecc-485c-8302-e70a70142265/0bc3207f-aecc-485c-8302-e70a701422651.gif)
4支持校园卡的食堂消费信息管理系统数据库设计数据库大作业
数据库原理课程设计
题目:
支持校园卡的食堂消费信息管理系统
专业:
计算机科学与技术
班级:
学生:
教师:
日期:
2014年06月18日
支持校园卡的食堂消费信息管理系统数据库设计
一.需求分析阶段
1.引言
通过对本校区学生日常生活的实地调查以及自己的亲身体验,了解到现在许多高校学生生活消费仍然停留在多种消费分块进行,相对独立的模式。
开发出合适的学生消费管理系统,可以有利于提高高校消费管理的工作效率。
2.目标与任务
(1)需求分析阶段的目标:
1.了解目前高校的学生消费管理现状
2.通过平时的观察、思考和亲身体会,加上重点实地调查和记录的方式了解和收集大部分学生所需要的消费管理的工作流程,确定系统的基本开发方向。
3.与小组成员讨论个人想法,共同制定开发方案
4.与指导老师交流小组的想法,征求意见,改正不合理的地方,确定新系统的边界,为下面的概念设计与逻辑设计奠定基础。
3.需求分析阶段的任务
(1)处理对象:
系统要处理的对象包括:
学生基本信息,发卡部门的基本信息,财务部门的基本信息,校园卡的基本信息,食堂消费的基本信息,各个对象包括信息如下所示(详细的数据见于数据字典)
1.学生的基本信息(Student):
包括学生姓名,学生学号,身份证号,学生性别,学生所在院系,学生所在专业等方面的信息
2.校园卡的基本信息:
包括持卡人的学生学号,持卡人的身份证号,持卡人的所在院系,校园卡的状态,校园卡内的余额
3.食堂消费基本信息:
包括消费(HConsume)金额等基本信息
4.财务部门基本信息:
包括办公室基本信息
5.校园卡日常事务管理基本信息:
包括办卡部门基本信息,办卡信息(FStudentAdd),挂失信息(FLostInf),充值信息(DRecharge)每个数据结构中的数据项见数据字典
(2)处理功能要求:
系统主要完成以下几个功能:
1.学生基本信息的信息查询与更新
2.校园卡日常事务管理情况基本信息查询与更新
3.校园卡状态的查询
4.学生在食堂的消费金额的查询
5.食堂营业额的基本信息的查询和修改,查询所有食堂的营业额以体现食堂总体的收入状况,查询各个食堂的收入为评价食堂的服务质量提供依据
(3)安全性和完整性要求
安全性是通过视图机制,不同的用户只能访问系统授权的视图,这样可提供系统数据一定程度上的安全性,再通过用户授权机制,用用户登录方式来识别用户级别,根据这个级别来分配用户权限,达到数据更高层次的安全保密功能。
完整性要求用于描述学生的基本信息,财务部门的基本信息,校园卡日常事务管理的基本信息,校园卡基本信息,食堂消费基本信息中数据项能否为null,以及一些用户自定义完整性(符合实际要求),此处用于触发器实现,详细完整性要求见于系统的逻辑设计阶段和数据库实施阶段。
二、概念结构设计阶段
学生
食堂刷卡机
校园卡
财务部门
发卡部门
消费
充值
包含
挂补
持有
1
n
1
m
1
m
n
m
n
1
1.E-R图:
学生食堂消费
2.数据字典:
编号
数据项名称
简述
类型及宽度
取值范围
DI-1
Studentid
学生身份证号
Char(18)
0-999999999999999999
DI-2
Studentno
学生学号
Char(9)
0-999999999
DI-3
Studentna
学生姓名
Char(10)
DI-4
Studentsex
学生性别
Char(4)
“男”“女”
DI-5
Studentbirth
学生出生年
Int
DI-6
Studentdept
学生所在院系
Char(20)
DI-7
Studentspecial
学生所在专业
Char(20)
DI-8
Studentclass
学生所在班级
Char(20)
DI-9
Cardstate
校园卡状态
“挂失”“未挂失”
DI-10
Cardmoney
校园卡余额
Float
DI-11
CZmoney
充值金额
Float
DI-12
Dinmoney
食堂刷卡金额
Float
3.数据结构:
数据结构编号
数据结构名称
数据结构别名
数据结构含义
数据项组成
Ds-1
学生信息
Student
记录学生的信息
Studentid,Studentno,Studentna,Studentsex,Studentdept,Studentspecial
Ds-2
办卡信息
FStudentAdd
记录办卡信息
Studentno,Studentid
Ds-3
挂失信息
FloseInf
记录挂失信息
Studentno,Studentid
Ds-4
解挂信息
FUnlose
记录解挂信息
Studentno,Studentid
Ds-5
充值信息
DRecharge
记录充值信息
Studentno,CZmoney
Ds-6
校园卡信息
StudentEdit
记录校园卡信息
Studentno,Studentid,Cardstates,Cardmoney
Ds-7
食堂刷卡信息
Hconsume
记录食堂刷卡信息
Consumemoney
4.数据流:
编号
数据流名称
输入信息
输出信息
1
查询学生信息
学号
学生基本信息
2
修改学生信息
变更信息
学生基本信息
3
查询校园卡信息
校园卡号
校园卡基本信息
4
修改校园卡信息
变更信息
校园卡基本信息
5
查询食堂消费信息
校园卡号
食堂消费基本信息
6
修改食堂消费信息
变更信息
食堂消费基本信息
5.数据存储:
数据存储名
输入数据流
输出数据流
学生信息表
修改学生信息记录
学生信息
校园卡信息表
修改校园卡信息记录
校园卡信息
食堂信息表
修改食堂信息记录
食堂信息
处理过程:
处理过程名
输入数据流
输出数据流
数据维护
各数据表的更新、修改信息
更新及修改后的各信息表
注册学生信息
学生基本信息
学生基本信息
注册校园卡信息
校园卡基本信息
校园卡基本信息
三、逻辑结构设计阶段:
1.将E-R图转化为关系模型
通过分析所要实现的功能以及现有的实体和联系,确定要把学生实体,校园卡实体,食堂实体分别转化为单独的关系模式,为了便于查询学生在食堂刷卡消费信息,学生的校园卡信息管理,把消费型刷卡关系转化为独立的关系模式,考虑到学生要往校园卡里充值,再从学生和校园卡的拥有关系中抽取出校园卡的充值关系模式。
具体关系模式转化结果如下:
学生:
Student(Studentid,Studentno,Studentna,Studentsex,Studentdept,Studentspecial)
校园卡:
Card(Cardno,Studentno,Studentid,Cardstate,Cardmoney)
充值信息:
DRecharge(Studentno,Czmoney)
消费刷卡:
Hconsume(Consumemoney)
2.系统功能模块图:
食堂消费管理系统
系统管理
财务部门
发卡部门
食堂刷卡机
学生信息管理
用户登录
退出
校园卡充值
挂失
与
解
挂
校园卡办理
消费
四、数据库的物理设计阶段
1.物理设计阶段的目标和任务
数据库的物理设计就是根据所用的DBMS和处理需求,进行物理存储安排,建立索引,形成数据库的内模式,为逻辑数据模型选取一个最适合应用要求的物理结构的过程,在这个阶段中要完成两大任务:
(1)确定数据库的物理结构,在关系数据库中主要是存取方法和存储结构
(2)对物理结构进行评价,评价的重点是时间和空间效率。
2.数据存储方面
为数据库中各基本表建立的索引如下:
(1)由于进本表Card,Student的主码Cardno,Studentno经常在查询条件和连接操作的连接条件中出现,且他们的取值唯一,考虑在这两个属性上分别建立唯一性索引;
(2)有的基本表中的属性经常性的发生变化,索引并不是越多越好,而要权衡系统为维护索引付出的代价,因此在其他的表上可考虑不建立索引,也可以适当的建立索引。
五、数据库实施阶段
1.程序编码
部分源代码:
Controller-Mainwindow
/*
*Tochangethislicenseheader,chooseLicenseHeadersinProjectProperties.
*Tochangethistemplatefile,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packagecontroller;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importview.DRecharge;
importview.FLoseInf;
importview.SLogin;
importview.FStudentAdd;
importview.FUnLose;
importview.HConsume;
importview.SInformation;
/**
*
*@authorcomputer
*/
publicclassMainWindowextendsJFrameimplementsActionListener{
JMenuBarmenuBar;
JMenumenu1,menu2,menu3,menu4;
JMenuItemm11,m12,m13;
JMenuItemm21;
JMenuItemm31,m32,m33,m34;
JMenuItemm41;
publicMainWindow(){
createMenu();
setTitle("支持校园卡的食堂信息管理系统");
setIconImage((newImageIcon("icon.gif")).getImage());
setSize(800,600);
Dimensionsize=Toolkit.getDefaultToolkit().getScreenSize();
setLocation((size.width-getWidth())/2,(size.height-getHeight())/2);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setVisible(true);
}
privatevoidcreateMenu(){
menuBar=newJMenuBar();
menu1=newJMenu("系统管理(S)");
menu1.setMnemonic('S');
m11=newJMenuItem("学生信息查询");
m12=newJMenuItem("用户登录");
m13=newJMenuItem("退出(X)");
m13.setAccelerator(KeyStroke.getKeyStroke('X',2));
menu1.add(m11);
menu1.add(m12);
menu1.addSeparator();
menu1.add(m13);
menu2=newJMenu("财务部门(D)");
menu2.setMnemonic('D');
m21=newJMenuItem("校园卡充值");
menu2.add(m21);
menu3=newJMenu("发卡部门(F)");
menu3.setMnemonic('F');
m31=newJMenuItem("校园卡挂失");
m32=newJMenuItem("校园卡解卦");
m33=newJMenuItem("补办校园卡");
m34=newJMenuItem("办理校园卡");
menu3.add(m31);
menu3.add(m32);
menu3.add(m33);
menu3.add(m34);
menu4=newJMenu("食堂刷卡机(H)");
menu4.setMnemonic('H');
m41=newJMenuItem("消费");
menu4.add(m41);
m11.addActionListener(this);
m12.addActionListener(this);
m13.addActionListener(this);
m21.addActionListener(this);
m31.addActionListener(this);
m32.addActionListener(this);
m33.addActionListener(this);
m34.addActionListener(this);
m41.addActionListener(this);
menuBar.add(menu1);
menuBar.add(menu2);
menuBar.add(menu3);
menuBar.add(menu4);
this.setJMenuBar(menuBar);
}
@Override
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==m34){
newFStudentAdd();
}
if(e.getSource()==m12){
newSLogin();
}
if(e.getSource()==m21){
newDRecharge();
}
if(e.getSource()==m31){
newFLoseInf();
}
if(e.getSource()==m32){
newFUnLose();
}
if(e.getSource()==m41){
newHConsume();
}
if(e.getSource()==m11){
newSInformation();
}
}
//publicstaticvoidmain(Stringargs[]){
//newMainWindow();
//}
}
Controller-Start
/*
*Tochangethislicenseheader,chooseLicenseHeadersinProjectProperties.
*Tochangethistemplatefile,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packagecontroller;
importjava.awt.event.ActionEvent;
importjavax.swing.JFrame;
/**
*
*@authorcomputer
*/
publicclassStart{
publicvoidactionPerformed(ActionEvente){
}
publicstaticvoidmain(Stringargs[]){
JFrame.setDefaultLookAndFeelDecorated(true);
newMainWindow();
}
}
Dao-ConnectDB
/*
*Tochangethislicenseheader,chooseLicenseHeadersinProjectProperties.
*Tochangethistemplatefile,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packagedao;
importjava.sql.Connection;
importjava.sql.DriverManager;
/**
*
*@authorcomputer
*/
publicclassConnectDB{
publicstaticConnectionconnect(){
try{
Class.forName("com.mysql.jdbc.Driver");//加载驱动程序
Connectioncon=DriverManager.getConnection("jdbc:
mysql:
//localhost:
3306/school?
useUnicode=true&characterEncoding=utf8","root","123456");//连接数据库
returncon;//返回连接对象
}catch(Exceptione){
e.printStackTrace();
returnnull;
}
}
}
Dao-FStudentDao
/*
*Tochangethislicenseheader,chooseLicenseHeadersinProjectProperties.
*Tochangethistemplatefile,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packagedao;
importidao.IFStudentDao;
importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.util.ArrayList;
importjava.util.List;
importmodel.FStudent;
/**
*
*@authorcomputer
*/
publicclassFStudentDaoimplementsIFStudentDao{
publicbooleanaddFStudent(FStudentfStudent){
Connectioncon=null;//连接对象
PreparedStatementps=null;//SQL预处理类接口,能大大提高系统效率
try{
con=ConnectDB.connect();//连接数据库
Stringsql="insertintostudent(StudentId,StudentDe,StudentNa,StudentSex,StudentPo,StudentNo)values(?
?
?
?
?
?
)";
ps=con.prepareStatement(sql);
ps.setString(1,fStudent.getStudentId());
ps.setString(2,fStudent.getStudentDe());
ps.setString(3,fStudent.getStudentNa());
ps.setString(4,fStudent.getStudentSex());
ps.setString(5,fStudent.getStudentPo());
ps.setString(6,fStudent.getStudentNo());
intn=ps.executeUpdate();
returnn>0;
}catch(SQLExceptione){
e.printStackTrace();
returnfalse;
}finally{
try{
ps.close();
}catch(SQLExceptionex){
}
}
}
@Override
publicbooleaneditFStudent(FStudentfStudent){
thrownewUnsupportedOperationException("Notsupportedyet.");//Tochangebodyofgeneratedmethods,chooseTools|Templates.
}
@Override
publicbooleandeleteFStudent(intfStudentId){
thrownewUnsupportedOperationException("Notsupportedyet.");//Tochangebodyofgeneratedmethods,chooseTools|Templates.
}
@Override
publicFStudentfintFStudent(intfStudentId){
thrownewUnsupportedOperationException("Notsupportedyet.");//Tochangebodyofgeneratedmethods,chooseTools|Templates.
}
@Override
publicListfintAllFStudents(){
thrownewUnsupportedOperationException("Notsupportedyet.");//Tochangebodyofgeneratedmethods,chooseTools|Templates.
}
@Override
publicListfintSomeFStudents(StringfStudentName,intpageNo,intpageSize){
thrownewUnsupportedOperationExceptio