当前位置:文档之家› 电影院售票数据库系统设计

电影院售票数据库系统设计

计算机实验报告课程:ORACLE 班级:学号:姓名:仪器编号实验日期实验:四电影院售票数据库系统设计实验目的:1.进一步熟悉oracle的各种操作。

2.能够在实际的实例中灵活运用学到的有关知识。

实验环境:装有oracle 10g的计算机且操作系统为Windows xp。

实验内容:(可用附页)见附页实验结果:(可用附页)见附页实验内容:电影院售票数据库系统设计数据库设计是对于一个给定的应用环境,构建一个最优的数据库模式,并据此建立既能有效、完整、安全存储数据的数据库,又能满足多个用户的信息要求和处理要求的应用系统,本数据库设计就是为了能够在很好的保存商品进销存的所有数据而进行设计。

(结合数据库设计和你要完成的系统进行陈述)。

数据库设计的过程包含需求分析、概念结构设计、逻辑结构设计、物理结构设计、应用的设计。

下面就按照数据库设计的过程进行逐一陈述一、需求分析1、系统设计的意义电影院售票系统的数据库设计适用于电影院的售票,订票,退票服务。

利用数据库实现规范、方便的管理。

从而提升工作的效率,达到增长营利的效果。

2、数据库对象介绍1)余票表2)售票表3)订票表4)退票表5)电影票综合表3、系统相关对象电影院售票人员及管理人员,消费者(购票者)4、数据库对象分析余票表—>> 可以出售给消费者的所有电影票的表单售票表—>> 已经在售票处出售给消费者电影票的表单订票表—>> 通过电话、网络等途径订购电影票的表单退票表—>> 消费者(因某些原因)要求退还金钱的表单电影票综合表—>> 包括电影院所有的电影票的表单5、功能分析1)电影院的售票人员根据余票表单出售电影票,然后在售票表中记录。

2)通过订票表相应的在余票表中更新记录,减少一张票数。

3)通过退票表相应的在余票表中更新记录,增加一张票数。

4)根据表单实现查看总营利的功能5)查看已经和未拿走订票的情况6)查看当日上映电影及当日营利7)查看已过期的未出售电影表单8)…………6、进阶分析每张电影票都有自己唯一的编号ID,同一类型的电影票用片名来区分(同一片名的不同影片在片名后加入文字说明区分。

)有一个电影综合表,可以根据某个元素查出其他的各元素。

如:根据片名可以查看所有该影片的电影票的每张编号,座位,票价,片映时间,该影片的票数等其他各种信息。

二、概念结构设计1、各对象属性余票表:编号,片名,片映日期,影片时间,影厅,座位,票价,余票数。

售票表:编号,片名,片映日期,影片时间,影厅,座位,票价,实收,找零,售票日期,售票数。

订票表:编号,片名,片映日期,影片时间,影厅,座位,票价,手续费,售票日期,取票时间。

退票表:编号,片名,片映日期,票价,售票日期,手续费,实退金额。

电影票综合表:编号,片名,片映日期,影片时间,影厅,座位,票价,总票数。

(编号为每张电影票的区别号码,片名来区别不同的电影,影片时间单位为分钟)2、画出E-r图局部e-r图三、逻辑结构设计1、表的设计余票表(remain_ticket):售票表(sale_ticket):订票表(book_ticket):退票表(back_ticket):电影票综合表(movie_ticket):四、物理结构设计1、创建表空间create tablespace movie_tbsdatafile'D:\app\other_tablespace\movie_tbs01.dbf'size 32m;2、在oracle中创建用户movie并使用上面的表空间create user movieidentified by moviedefault tablespace movie_tbs;3、给movie用户授权并使用movie用户完成下列步骤grant create session,dba to movie;4、创建各对象表余票表:create table remain_ticket(movie_id number(20) PRIMARY KEY,movie_name varchar2(100),movie_date date,movie_time number(20),movie_room varchar2(20),movie_seat varchar2(20),movie_price number(20),remain_count number(20));售票表:create table sale_ticket(movie_id number(20) PRIMARY KEY,movie_name varchar2(100),movie_date date,movie_time number(20),movie_room varchar2(20),movie_seat varchar2(20),movie_price number(20),movie_price_get number(20),movie_change number(20),movie_saledate date,sale_count number(20));订票表:create table book_ticket(movie_id number(20) PRIMARY KEY,movie_name varchar2(100),movie_date date,movie_time number(20),movie_room varchar2(20),movie_seat varchar2(20),movie_price number(20),movie_poundage number(20),movie_saledate date,movie_picktime date);退票表:create table back_ticket(movie_id number(20) PRIMARY KEY,movie_name varchar2(100),movie_date date,movie_price number(20),movie_saledate date,movie_poundage number(20),movie_refund number(20));电影综合表:create table movie_ticket(movie_id number(20) PRIMARY KEY,movie_name varchar2(100),movie_date date,movie_room varchar2(20),movie_seat varchar2(20),movie_price number(20),all_count number(20),movie_time number(20));5、创建视图1)根据余票表中电影片名、余票数、票价和电影综合表中的总票数创建销售视图create view sale_conditionasselect r.movie_name,r.movie_price,r.remain_count,m.all_countfrom remain_ticket r,movie_ticket m;2)根据售票表中的片名、票价、售票数创建营利视图create view get_condition(片名,票价,售票数,收益)asselect movie_name,movie_price,sale_count,movie_price*sale_count from sale_ticket;3)订票表中已经拿走票的视图create view take_condition(编号,片名,片映时间,售票时间,取票时间)asselectmovie_id,movie_name,movie_date,movie_saledate,to_number(to_cha r(movie_picktime,'yyyy-mon-dd,hh24:mi:ss'))from book_ticketwhereto_number(to_char(movie_picktime,'yyyy-mon-dd,hh24:mi:ss')) <= to_number(to_char(sysdate,'yyyy-mon-dd,hh24:mi:ss'));4)订票表中未拿走票的视图create view untake_conditionasselectmovie_id,movie_name,movie_date,movie_saledate,movie_picktime from book_ticketwhere movie_picktime = null;5)查看当天上映电影的表单(片名、片映时间、影片时间、票价、余票数)create view today_movie(片名,片映时间,影片时间,票价,余票数)as selectmovie_name,to_char(movie_date,'yyyy-mon-dd'),movie_time,movie_ price,remain_countfrom remain_ticketwhere to_char(movie_date,'yyyy-mon-dd') =to_char(sysdate,'yyyy-mon-dd');6)查看电影票销售排行(片名、片映时间、票价、总票数-余票数、票价*(总票数-余票数))create view sale_range(片名,片映时间,票价,售票数,收益)as selectr.movie_name,r.movie_date,r.movie_price,m.all_count - r.remain_count,r.movie_price * (m.all_count - r.remain_count)from remain_ticket r,movie_ticket m;7)查看已过期的未出售的电影表单(片名、片映时间、票价、余票数)create view unsale_condition(片名,片映时间,票价,余票数)asselectmovie_name,to_number(to_char(movie_date,'yyyy-mon-dd,hh24:mi: ss')),movie_price,remain_countfrom remain_ticketwhere to_number(to_char(movie_date,'yyyy-mon-dd,hh24:mi:ss')) <= to_number(to_char(sysdate,'yyyy-mon-dd,hh24:mi:ss'));6、创建触发器1)订票表+1的同时,余票表-1create trigger book_ticket_addafter insertof movie_idon book_ticketfor each rowbegindelete from remain_ticketwhere remain_ticket.movie_id = book_ticket.movie_id;end;2)退票表+1的同时,余票表+1,售票表-1create trigger back_ticket_addafter insertof movie_idon back_ticket bfor each rowbeginselectm.movie_id,m.movie_name,m.movie_date,m.movie_time,m.movie _room,m.movie_seat,m.movie_pricefrom movie_ticketwhere b.movie_id = m.movie_idinsert into remain_ticket values(m.movie_id,m.movie_name,m.movie_date,m.movie_time,m.movi e_room,m.movie_seat,m.movie_price,remain_ticket=remain_ticke t+1);delete from sale_ticketwhere sale_ticket.movie_id=b.movie_id;end;3)电影综合表+1的同时,余票表+1create trigger movie_ticket_addafter inserton movie_ticket mbegininsert into remain_ticket(movie_id,movie_name,movie_date,movie_time,movie_room,movi e_seat,movie_price,movie_count)values(m.movie_id,m.movie_name,m.movie_date,m.movie_time, m.movie_room,m.movie_seat,m.movie_price,m.movie_count+1); end;7、创建过程输入一个元素,输出整列的其他信息create or replace procedure movie_id_lookup(p_movie_id in number,p_movie_name out movie_ticket.movie_name%type,p_movie_date out movie_ticket.movie_date%type,p_movie_room out movie_ticket.movie_room%type,p_movie_seat out movie_ticket.movie_seat%type,p_movie_price oupricemovie_ticket.movie_price%type,p_all_count out movie_ticket.all_count%type,p_movie_time out movie_ticket.all_count%type)asbeginselectmovie_name,movie_date,movie_room,movie_seat,movie_price,mo vie_time,all_countfrom movie_ticketwhere movie_id = p_movie_id;exceptionwhen no_data_found thenp_movie_name :='null';p_movie_date :='null';p_movie_room :='null';p_movie_seat :='null';p_movie_price :='null';p_movie_time :='null';p_all_count :='null';end movie_id_lookup;variable name varchar2(100);variable movie_date date;variable room varchar2(20);variable seat varchar2(20);variable name varchar2(100);variable price number(20);variable count number(20);五、数据库实施本数据库利用ORACLE的表、视图和触发器等实现电影票售票系统的相应功能。

相关主题