面向对象程序设计实训说明书电影院网上订票系统设计.docx
《面向对象程序设计实训说明书电影院网上订票系统设计.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计实训说明书电影院网上订票系统设计.docx(25页珍藏版)》请在冰豆网上搜索。
面向对象程序设计实训说明书电影院网上订票系统设计
中北大学
面向对象程序设计实训
说明书
学院、系:
软件学院
专业:
软件工程
学生班级:
13140A01
学生姓名:
景贝贝
学号:
1314011438
设计题目:
电影院网上订票系统设计
起迄日期:
2015年6月29日-2015年7月10日
指导教师:
杨秋翔
2015年7月8日
实训任务书
1.设计目的:
进一步掌握面向对象程序设计的思想和方法,遵照软件工程中软件系统的开发流程,使用JAVA/JAVAWEB完成一个软件系统,在实践中提高分析问题、解决问题的能力,动手编程的能力和团队协作的能力。
2.系统设计内容和要求(包括原始数据、技术参数、条件、设计要求等):
设计内容:
电影院网上订票系统应该包括以下功能:
用户信息、座位信息、订购信息、影片安排信息、放映厅信息等管理工作。
要求:
(1)基于B/S模式,并采用MVC架构,分层合理,最大限度的减少代码冗余。
(2)遵照软件工程规范,严格按照软件系统的开发流程(需求分析,概要设计,详细设计,编码实现,测试)进行。
(3)系统中的数据表设计应在数据库实训的基础上进一步规范合理、高效,尽量减少数据冗余。
(4)最终完成的软件系统应操作简捷,友好,方便,实用。
3.设计工作任务及工作量的要求〔包括课程设计说明书(论文)、图纸、实物样品等〕:
(1)根据设计内容和要求进行需求分析,分析出系统要解决的问题。
(2)根据需求分析的内容进行概要设计和详细设计,并在小组中合理分工。
(3)按格式要求,每人根据自己完成的工作写出实训说明书。
实训任务书
4.自己承担的任务
(1)普通用户的登陆验证
(2)查看电影信息
(3)用户选择电影和座位
(4)用户提交订单,删除订单
5.设计成果形式及要求:
实训说明书
软件系统
6.工作计划及进度:
2015年
6.29-7.30需求分析
7.1-7.2概要设计和详细设计
7.3-7.7系统实现与测试
7.8撰写实训说明书
7.9验收答辩、成绩考核
7.10上交实训报告
一、需求分析
需求分析包括可行性分析、系统流程图和数据流图,数据字典。
可行性分析包括技术可行性、经济可行性和操作可行性。
1.1可行性分析
1.1.1技术可行性
根据电影院提出的系统功能、性能及实现系统的各种约束条件,根据新系统目标来衡量所需的技术是否具备,本系统是一个数据库管理和查询的系统,现有的技术已较为成熟,硬件、软件的性能要求、环境条件等各项条件良好,估计利用现有技术条件应完全可以达到该系统的功能目标。
同时,考虑给予的开发期限也较为充裕,预计系统是可以在规定期限内完成开发的。
由以上分析可知,影院售票系统的开发在技术上是可行的。
1.1.2经济可行性
电影院具有信息化的处理设施,并且拥有支持本系统的应用平台。
因此无需再投入资金购买其他设施。
系统的开发基于本人对程序开发的实践学习而来,电影院无需资金投入,并且软件开发过程投入的成本不高,因此开发经费完全可以接受。
由以上分析可知,影院售票系统在经济上是可行的。
1.1.3操作可行性
根据系统页面用户可以自动查询影片信息。
还可浏览完影片信息以后操作订票、退票等功能。
管理员也可以在后台添加、修改并删除影片信息,还可以管理注册用户信息和用户订票信息。
由以上分析可知本系统在操作上也是可行的。
1.2系统流程图
首先未注册的用户要先注册,注册完了以后输入用户名和密码进入页面。
根据网站上的影片信息用户可以选择自己喜欢的电影来订票。
然后订票信息会自动存储到后台订票信息数据当中。
本系统的具体流程为如图所示。
系统流程图
1.3数据流图
本系统的基本模型数据流图为如图所示。
系统基本模型数据流图
系统功能数据流图
1.4数据需求
(1)影片信息:
电影名称、导演、演员、电影简介、语言、片场(分钟)、放映日期、时间、价格、票数、
(2)订票信息:
电影名称、放映时间、放映大厅、座位号、票价(单价)
(3)用户信息:
用户名、用户密码、手机号
(4)放映厅信息:
放映大厅名字、座位数
1.5数据字典
Film(电影表)
列名
含义
类型
长度
取值范围
filmid
影片编号
Int
4
0-32767
FilmName
电影名称
varchar(20)
20
Director
导演
varchar(10)
10
Language
语言
varchar(10)
10
timeLong
片长(分钟)
Int
2
Date
放映日期
varchar(50)
50
0-31
Money
价格
Int
2
0-100
Number
票数
Int
2
0-300
Time
放映时间
Int
10
order(订票表)
列名
含义
类型
长度
取值范围
orderid
主键
Int
2
filmname
电影名称
varchar(20)
20
Time
放映时间
varchar(50)
50
Hall
放映大厅
varchar(10)
10
seatname
座位号
Int
2
money
票的单价
Int
2
Hall(放映大厅)
列名
含义
类型
长度
取值范围
hall
放映大厅编号
Int
seatname
放映大厅
varchar10)
10
User(用户信息表)
列名
含义
类型
长度
取值范围
UID
用户序号
Int
2
1-10
username
用户名
varchar(10)
10
50
password
用户密码
varchar(10)
10
0-9
Admin(管理员信息表)
列名
含义
类型
长度
取值范围
Adminname
用户名
varchar(10)
10
50
password
用户密码
varchar(10)
10
0-9
Seat(座位类别)
列名
含义
类型
长度
取值范围
Seatid
主键
Int
1-10
seatname
座位编号
Nvarchar(10)
3
1-100
二、概要设计
从数据需求分析中得出系统的实体属性图,遵循三范式原则,对实体之间的依关系进
行了整合,得出本系统E-R图,如图所示。
系统E-R图
其中影片信息实体属性图又为如下图所示。
影片信息实体属性图
订单详情实体属性图为如图所示。
图影片场次实体属性图
用户实体属性图为如图所示。
图用户信息实体属性图
全局概念E-R图
三、详细设计
ER图向关系模型的转换
影片(影片编号,类别,票价,播放日期,名称,导演,片长)
影票(影票编号,票价,播放日期,影片名称,座位号)
注册用户(用户编号,用户名,密码)
放映大厅(大厅编号,名字)
座位(座位id,座位号)
Orders(orderId,FName,Time,Hall,Number,Money);
Seat(SEID,seatname);
Hall(HID,HHall);
User(username,password,phonenumber);
Film(FID,FilmName,FDirector,FLanguage,FLong,FDate,FMoney,FNumber,FTimeID);
Ticket(订票表)
列名
含义
类型
长度
其他
TId
影票号
Int
主码
TFName
电影名称
Nvarchar(20)
20
TDate
放映日期
Nvarchar(50)
50
TTime
放映时间
Nvarchar(50)
50
HID
放映大
厅编号
Nvarchar(10)
10
外部码
TNumber
座位号
Int
外部码
TMoney
票数总价
Int
Seat(座位类别)
列名
含义
类型
长度
其他
SEID
座位号
Int
1-10
主码
SMoney
座位票价
Int
2
SNumber
座位编号
Nvarchar(10)
3
Film(电影表)
列名
含义
类型
长度
其他
FID
影片编号
Int
4
主码
FFilmName
电影名称
Nvarchar(20)
20
FDirector
导演
Nvarchar(10)
10
FLanguage
语言
Nvarchar(10)
10
FLong
片长(分钟)
Int
FDate
放映日期
Nvarchar(50)
50
FMoney
价格
Int
FNumber
票数
Int
FTimeID
放映日期
Int
user(用户表)
列名
含义
类型
长度
其他
phonenumber
用户电话
Varchar
11
Username
用户名
Nvarchar(10)
10
主码
password
用户密码
Nvarchar(10)
10
Hall(放映大厅)
列名
含义
类型
长度
其他
HID
放映大厅编号
Int
主码
HHall
放映大厅
Nvachar10)
4、编码实现
文件目录
IOrderDAOimpl.java
packagecn.movie.impl;
importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.util.ArrayList;
importjava.util.List;
importcn.movie.dao.IOrderDAO;
importcn.movie.vo.FilmInformation;
importcn.movie.vo.Order;
publicclassOrderDAOImplimplementsIOrderDAO{
privateConnectionconn;
privatePreparedStatementpstmt=null;
privatePreparedStatementpstmt1=null;
privatePreparedStatementpstmt2=null;
privatePreparedStatementpstmt3=null;
publicOrderDAOImpl(Connectionconn){
this.conn=conn;
}
@Override
publicbooleandoUpdate(Ordervo)throwsException{
booleanflag=false;
returnfalse;
}
@Override
publicbooleandoRemove(intid,Stringhall,Stringfilmname,Stringseatname)throwsException{
booleanflag=false;
//System.out.println(id);
Stringsql="DELETEFROMordersWHEREorderId=?
";
this.pstmt=this.conn.prepareStatement(sql);
this.pstmt.setInt(1,id);
Stringsql1="selectseatnameafromhallwherehall='"+hall+"'";
this.pstmt1=this.conn.prepareStatement(sql1);
ResultSetrs=this.pstmt1.executeQuery();
rs.next();
//System.out.println("++++++++++"+rs.getString
(1));
Stringsql2="insertinto"+rs.getString
(1)+"(seatname)values(?
)";
this.pstmt2=this.conn.prepareStatement(sql2);
this.pstmt2.setString(1,seatname);
this.pstmt2.executeUpdate();
Stringsql3="updatefilmsetnumber=number+1wherefilmName=?
";
this.pstmt3=this.conn.prepareStatement(sql3);
this.pstmt3.setString(1,filmname);
this.pstmt3.executeUpdate();
//System.out.println(id);
if(this.pstmt.executeUpdate()>0){
flag=true;
}
returnflag;
}
@Override
publicOrderfindById(Stringid)throwsException{
//TODOAuto-generatedmethodstub
returnnull;
}
@Override
publicListfindAll(StringkeyWord,intcurrentPage,intlineSize)
throwsException{
Listall=newArrayList();
Stringsql="select*fromorderswhereusername=?
";
this.pstmt=this.conn.prepareStatement(sql);
this.pstmt.setString(1,keyWord);
ResultSetrs=pstmt.executeQuery();
while(rs.next()){
Orderorder=newOrder();
order.setOrderId(rs.getInt
(1));
order.setSeatname(rs.getString(3));
order.setFilmname(rs.getString(4));
order.setTime(rs.getString(6));
order.setHall(rs.getString(5));
order.setMoney(rs.getInt(7));
all.add(order);
}
returnall;
}
publicbooleandoCreate(Orderorder)throwsException{
booleanflag=false;
Stringsql="INSERTINTOorders(username,seatname,filmname,hall,time,money)VALUES(?
?
?
?
?
?
)";
this.pstmt=this.conn.prepareStatement(sql);
this.pstmt.setString(1,order.getUsername());
this.pstmt.setString(2,order.getSeatname());
this.pstmt.setString(3,order.getFilmname());
this.pstmt.setString(4,order.getHall());
this.pstmt.setString(5,order.getTime());
this.pstmt.setInt(6,order.getMoney());
Stringsql1="updatefilmsetnumber=number-1wherefilmName=?
";
this.pstmt1=this.conn.prepareStatement(sql1);
this.pstmt1.setString(1,order.getFilmname());
this.pstmt1.executeUpdate();
Stringsql2="selectseatnameafromhallwherehall='"+order.getHall()+"'";
this.pstmt2=this.conn.prepareStatement(sql2);
ResultSetrs=pstmt2.executeQuery();
rs.next();
Stringsql3="deletefrom"+rs.getString
(1)+"whereseatname=?
";
this.pstmt3=this.conn.prepareStatement(sql3);
this.pstmt3.setString(1,order.getSeatname());
this.pstmt3.executeUpdate();
if(this.pstmt.executeUpdate()>0){
flag=true;
//System.out.println("判断");
}
//System.out.println(flag);
returnflag;
}
publiclonggetAllCount(StringkeyWord)throwsException{
return0;
}
@Override
publicListfindAll()throwsException{
Listall=newArrayList();
Stringsql="select*fromorders";
this.pstmt=this.conn.prepareStatement(sql);
ResultSetrs=pstmt.executeQuery();
while(rs.next()){
Orderorder=newOrder();
order.setOrderId(rs.getInt
(1));
order.setUsername(rs.getString
(2));
order.setSeatname(rs.getString(3));
order.setHall(rs.getString(4));
order.setTime(rs.getString(5));
order.setMoney(rs.getInt(6));
all.add(order);
}
returnall;
}
@Override
publicbooleandoRemove(Stringid)throwsException{
//TODOAuto-generatedmethodstub
returnfalse;
}
@Override
publicListgetAllseat(StringkeyWord)throwsException{
//System.out.println(keyWord);
Stringsql="selectseatnameafromhallwherehall='"+keyWord+"'";
this.pstmt=this.conn.prepareStatement(sql);
ResultSetrs=pstmt.executeQuery();
rs.next();
//System.out.println("++++++++++"+rs.getString
(1));
Stringsql1="selectseatnamefrom"+rs.getString
(1);
this.pstmt1=this.conn.prepareStatement(sql1);
ResultSetrs1=pstmt1.executeQuery();
Listseatname=newArrayList();
inti=0;
while(rs1.next()){
//System.out.println(rs.getString
(1));
seatname.add(rs1.getString
(1));
}
returnseatname;
}
}
OrderServlet.java
packagecn.movie.servlet;
importjava.io.IOException;
importjava.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpSession;
importcn.movie.factory.DAOFactory;
importcn.movie.vo.FilmInformation;
importcn.movie.vo.Order;
publicclassOrderServletextendsHttpServle