Oracle:简单分析火车票余票查询和座位剩余

引用CSDN论坛上的一个问题,http://bbs.csdn.net/topics/392284590 ,开始思路错误,给了一个错误的答案,然后仔细分析了一下

题目如下:

假设有一个车次1经过5个站,站点1,站点2,站点3,站点4,站点5(另外有一个车次2,经过站点3,站点4,站点6)

有3个座位,座位1,座位2,座位3
有乘客,买了车次1 站点1到站点3的座位1,站点4到站点5的座位1,
站点2到站点4的座位2,站点1到站点2的座位3,站点3到站点5的座位3,
自己确定数据库表的结构

问:怎么查到站点3到站点4的车次信息,它的余票,哪个座位有余票

思路:创建三张表,分别如下

--座位信息表
drop table train_seat;
create table train_seat(
num varchar(6), --车次
seat_num varchar(10),--座位号
primary key(num,seat_num)
);
--站点信息表
drop table train_site;
create table train_site(
num varchar(6), --车次
site varchar(10),--站点
primary key(num,site)
);
----创建序列
create sequence train_order_seq
increment by 1 
start with 1
maxvalue 10000  
nominvalue   
nocache  
--订票信息表
drop table train_order;
create table train_order(
id int,
num varchar(6), --车次
site_start varchar(10),--起始站点
site_end varchar(10),--截止站点
isOrder int,--是否预定:0-否,1-是
seat_num varchar(10),--座位号
order_people varchar(10),--预定人
primary key(id)
);

插入数据:

INSERT INTO TRAIN_ORDER (ID, NUM, SITE_START, SITE_END, ISORDER, SEAT_NUM, ORDER_PEOPLE) VALUES (train_order_seq.nextval, '车次1', '1', '3', 1, '1', 'A');
INSERT INTO TRAIN_ORDER (ID, NUM, SITE_START, SITE_END, ISORDER, SEAT_NUM, ORDER_PEOPLE) VALUES (train_order_seq.nextval, '车次1', '4', '5', 1, '1', 'B');
INSERT INTO TRAIN_ORDER (ID, NUM, SITE_START, SITE_END, ISORDER, SEAT_NUM, ORDER_PEOPLE) VALUES (train_order_seq.nextval, '车次1', '2', '4', 1, '2', 'C');
INSERT INTO TRAIN_ORDER (ID, NUM, SITE_START, SITE_END, ISORDER, SEAT_NUM, ORDER_PEOPLE) VALUES (train_order_seq.nextval, '车次1', '1', '2', 1, '3', 'D');
INSERT INTO TRAIN_ORDER (ID, NUM, SITE_START, SITE_END, ISORDER, SEAT_NUM, ORDER_PEOPLE) VALUES (train_order_seq.nextval, '车次1', '3', '5', 1, '3', 'E');

INSERT INTO TRAIN_SITE (NUM, SITE) VALUES ('车次1', '1');
INSERT INTO TRAIN_SITE (NUM, SITE) VALUES ('车次1', '2');
INSERT INTO TRAIN_SITE (NUM, SITE) VALUES ('车次1', '3');
INSERT INTO TRAIN_SITE (NUM, SITE) VALUES ('车次1', '4');
INSERT INTO TRAIN_SITE (NUM, SITE) VALUES ('车次1', '5');
INSERT INTO TRAIN_SITE (NUM, SITE) VALUES ('车次2', '3');
INSERT INTO TRAIN_SITE (NUM, SITE) VALUES ('车次2', '4');
INSERT INTO TRAIN_SITE (NUM, SITE) VALUES ('车次2', '6');
INSERT INTO TRAIN_SEAT (NUM, SEAT_NUM) VALUES ('车次1', '1');
INSERT INTO TRAIN_SEAT (NUM, SEAT_NUM) VALUES ('车次1', '2');
INSERT INTO TRAIN_SEAT (NUM, SEAT_NUM) VALUES ('车次1', '3');
INSERT INTO TRAIN_SEAT (NUM, SEAT_NUM) VALUES ('车次2', '1');
INSERT INTO TRAIN_SEAT (NUM, SEAT_NUM) VALUES ('车次2', '2');
INSERT INTO TRAIN_SEAT (NUM, SEAT_NUM) VALUES ('车次2', '3');
查询余票及剩余座位信息:
--查询哪个座位有余票
select A.num,A.seat_num from(
select s1.num,s1.seat_num,o1.id from train_seat s1 left join train_order o1 on s1.num = o1.num and s1.seat_num = o1.seat_num and o1.site_start <=3 and o1.site_end >=4) A
where A.id is null order by A.num
--查询余票数
select A.num,count(*) 余票 from(
select s1.num,s1.seat_num,o1.id from train_seat s1 left join train_order o1 on s1.num = o1.num and s1.seat_num = o1.seat_num and o1.site_start <=3 and o1.site_end >=4) A
where A.id is null group by A.num


使用说明 1 电脑上装JDK 2 电脑上装oracle数据库,创建train数据库。 3 在dos下打开train数据库后,把oracle.txt创建和序列里的代码(包括insert代码)复制到dos下运行,记得最后再按一下回车键,让最后一行也运行。 4 在eclipse或myeclipse下新建java项目(注意不是jsp项目)后,复制src文件夹到替换项目里的src。然后在复制train.pro,右击项目名粘贴(即把train.pro 加到项目 目录里) 5 把classes12.jar 添加到项目里。右键项目,点击Build Path 后再点击add External Archives 后找到classes12.jar文件打开即可。 6 在eclipse里打开wed包下OracleDB.java 设置oracle 连接byby用户的密码,String password="baby"; 我的密码是baby,这里改成你自己的密码。 7 运行client包下的Administrator.java ,若没有错如则OK。 8 运行后点击工具条里的‘工具’,后再点击‘生成所有列车’,若成功,此时可看见列车里增加了很多数据。可能有点慢,稍等一会。 9 若8 成功,则点击工具条里的‘工具’,后再点击‘生成所有车票’,若成功,此时可看见车票里增加了很多数据。可能有点慢,稍等一会。 关于工具条理的‘生成所有列车’ ‘生成所有车票’ "生成列车" "生成车票" "设置天数" 的介绍 1 ‘生成所有列车’ 是根据车次和车站的全部数据自动生成 列车 里的数据, 仅限于第一次时使用。 2 ‘生成所有车票’ 是根据 列车 里的全部数据自动生成 车票 里的数据, 仅限于第一次时使用。 3 "生成列车" 是根据你输入的某一列车次(必须是车次里的车次和车站里有与之相关的数据时才能使用)自动生成 列车 里的数据 4 "生成车票" 是根据你输入的某一ID(必须是列车里的ID)自动生成 车票 里的数据 5 "设置天数" 是设置能够预订和销售的最多天数,默认是3 天,即能预订和销售3天内的车票 注意: 1 订票记录,销售记录,退票记录里的时间是系统自动生成,在任何情况下都不需填写 也不能修改 2 在管理员模块里添加,删除和修改后需更新一下才能显示,只需点一下别的,在点刚修改的即可,数据完全正确 3 退票员和销售员登录时分别查询对应的记录,因此需要在管理员模块里增加相应记录后才能登录 4 此系统暂时已知还有多个缺陷,如如退票是可一张票可退多次,一个订票id可买多张车票。由于时间因素,就不在修补了。 5 train.pro 是个配置文件,可用记事本打开,尽量在train下的Main_Config.java里修改其配置信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值