航空售票系统的界面上传到我的资源中了,界面是用C#做的,不怎么美观,重点在于数据库。
在航空售票系统中我觉得最重要的两点就是视图和存储过程的创建。
表的创建一般学了数据库的都会
视图是根据具体要求来的,这里就不细说。
重点讲下退票和购票的存储过程,因为它们涉及到购票表,退票表,机票表之间的关系。
购买一张机票,机票表中总数-1;
退订一张机票,机票表中总数+1;
代码如下:
--退订机票存储过程
if exists (select *from sysobjects where name = 'CountTICKET')
drop proc CountTICKET
go
create proc CountTICKET
@a varchar(50)
as
declare @err int =0
declare @updateticket_numble int
select @updateticket_numble=SEAT_NUMBLE from TICKET where TICKET_ID=@a
update TICKET set SEAT_NUMBLE =@updateticket_numble+1 where TICKET_ID=@a
set @err = @err + @@error
return @err
go
--购买机票存储过程
if exists (select *from sysobjects where name = 'CountsubTICKET')
drop proc CountsubTICKET
go
create proc CountsubTICKET
@a varchar(50)
as
declare @err int =0
declare @updateticket_numble int
select @updateticket_numble=SEAT_NUMBLE from TICKET where TICKET_ID=@a
update TICKET set SEAT_NUMBLE =@updateticket_numble-1 where TICKET_ID=@a
set @err = @err + @@error
return @err
go
这里@err是返回给C#代码做判断的。
整个数据库代码如下:
use 航空售票系统
if exists(select * from sysobjects where name = 'FIGHT')
drop table FIGHT
go
CREATE TABLE FIGHT--航班表
(
FIGHT_NUMBER VARCHAR(50) NOT NULL PRIMARY KEY,--航班号
FIGHT_DepartureCity VARCHAR(50) NOT NULL,--出发城市
FIGHT_DestinationCity VARCHAR(50) NOT NULL,--抵达城市
FIGHT_DepartureTime VARCHAR(50) NOT NULL,--起飞时间
FIGHT_ArrialTime VARCHAR(50) NOT NULL,--抵达时间
CAMPANY_NUMBER VARCHAR(50) NOT NULL,--公司编号
SEAT_COUNT INT NOT NULL,--座位总数
CONSTRAINT FK_CAMPANY_NUMBER2 FOREIGN
KEY(CAMPANY_NUMBER)references CAMPANY(CAMPANY_NUMBER)
);
use 航空售票系统
if exists(select * from sysobjects where name = 'CAMPANY')
drop table CAMPANY
go
CREATE TABLE CAMPANY--航空公司表
(
CAMPANY_NUMBER VARCHAR(50) NOT NULL, --公司编号
COMPANY_NAME VARCHAR(50) NOT NULL,--公司名
COMPANY_TELEPHONE VARCHAR(50) NOT NULL,--电话
COMPANY_ADDRESS VARCHAR(50) NOT NULL,--地址
CONSTRAINT FK_CAMPANY_NUMBER PRIMARY KEY(CAMPANY_NUMBER)
);
ALTER TABLE CAMPANY ADD CONSTRAINT CK_CAMPANY_LAN CHECK(LEN(COMPANY_TELEPHONE)=11)
use 航空售票系统
if exists(select * from sysobjects where name = 'TICKET')
drop table TICKET
go
CREATE TABLE TICKET--机票表
(
TICKET_ID VARCHAR(50) NOT NULL,--机票编号
FIGHT_NUMBLE VARCHAR(50) NOT NULL,--航班编号
TICKET_TYPE VARCHAR(50) NOT NULL,--机票类型
SEAT_NUMBLE INT NOT NULL,--机票数量
TICKET_PRICE INT NOT NULL,--机票价格
销售状态 VARCHAR(50) NOT NULL,--状态
CAMPANY_NUMBER VARCHAR(50) NOT NULL,--公司编号
CONSTRAINT PK_机票 PRIMARY KEY NONCLUSTERED (TICKET_ID),
CONSTRAINT FK_TICKET_CAMPANY_NUMBER FOREIGN KEY(CAMPANY_NUMBER) references CAMPANY(CAMPANY_NUMBER)
);
use 航空售票系统
if exists(select * from sysobjects where name = 'PASSAGER')
drop table PASSAGER
go
CREATE TABLE PASSAGER--乘客信息表
(
PASSAGER_ID VARCHAR(50)
CONSTRAINT FK_PASSAGER_ID PRIMARY KEY(PASSAGER_ID ),--旅客身份证
PASSAGER_NAME VARCHAR(50) NOT NULL,--旅客姓名
PASSAGER_SEX VARCHAR(4) NOT NULL,--旅客性别
PASSAGER_TELEPHONE VARCHAR(50) NOT NULL,--旅客电话
);
use 航空售票系统
if exists(select * from sysobjects where name = 'BUY_TICKETS')
drop table BUY_TICKETS
go
CREATE TABLE BUY_TICKETS--买票表
(
TICKET_COUNT VARCHAR(50) NOT NULL ,--数量
BUY_TICKETS_TIME DATE NOT NULL,--购买时间
PASSAGER_ID VARCHAR(50) NOT NULL,--旅客身份证号
TICKET_ID VARCHAR(50) NOT NULL,--机票编号
CONSTRAINT PK_旅客机票 PRIMARY KEY NONCLUSTERED (PASSAGER_ID,TICKET_ID),
CONSTRAINT FK_BUY_PASSAGER_ID FOREIGN KEY(PASSAGER_ID) references PASSAGER(PASSAGER_ID),
CONSTRAINT FK_BUY_TICKET_ID FOREIGN KEY(TICKET_ID) references TICKET(TICKET_ID));
ALTER TABLE BUY_TICKETS ADD CONSTRAINT CK_BUY_TICKETS_LEN CHECK(LEN(PASSAGER_ID)=18)
USE 航空售票系统
use 航空售票系统
if exists(select * from sysobjects where name = 'REFUND')
drop table REFUND
go
CREATE TABLE REFUND--退票表
(
REFUND_TIME VARCHAR(50),--退票时间
PASSAGER_ID VARCHAR(50),--旅客身份证号
TICKET_ID VARCHAR(50) NOT NULL,--机票编号
CONSTRAINT PK_退旅客机票 PRIMARY KEY(PASSAGER_ID,TICKET_ID),
CONSTRAINT FK_REFUND_PASSAGER_ID FOREIGN KEY(PASSAGER_ID) references PASSAGER(PASSAGER_ID),
CONSTRAINT FK_REFUND_TICKET_ID FOREIGN KEY(TICKET_ID) references TICKET(TICKET_ID), );
ALTER TABLE REFUND ADD CONSTRAINT CK_REFND_LEN CHECK(LEN(PASSAGER_ID)=18)
USE 航空售票系统
use 航空售票系统
if exists(select * from sysobjects where name = 'ACCOUNTS1')
drop table ACCOUNTS1
go
CREATE TABLE ACCOUNTS1--游客账号
(
ACCOUNT1_ID VARCHAR(50) --账号
CONSTRAINT FK_ACCOUNT1_ID PRIMARY KEY(ACCOUNT1_ID ),
PASSWORD1 VARCHAR(50) NOT NULL,--密码
)
use 航空售票系统
if exists(select * from sysobjects where name = 'ACCOUNTS')
drop table ACCOUNTS
go
CREATE TABLE ACCOUNTS--工作人员账号
(
ACCOUNT_ID VARCHAR(50) --账号
CONSTRAINT FK_ACCOUNT_ID PRIMARY KEY(ACCOUNT_ID ),
PASSWORD VARCHAR(50) NOT NULL--密码
)
--创建视图
--为显示长沙航空的所有机票创建一个名CX_TICKET的视图
use 航空售票系统
go
create view CX_TICKET
as
select *
from TICKET
where CAMPANY_NUMBER=(select CAMPANY_NUMBER
from CAMPANY
where COMPANY_NAME ='长沙航空'
)
go
select * from CX_TICKET
--2.为查询航班座位数大于10的航班创建一个名为zw_count视图
use 航空售票系统
go
create view zw_count
as
select *
from FIGHT
where SEAT_COUNT>10
go
select * from zw_count
drop view zw_count
--在视图CX_TICKET中插入
use 航空售票系统
go
insert into CX_TICKET
Values('T0003','F0003','经济舱','12','560','在售','G0001')
--删除视图CX_TICKET
use 航空售票系统
go
drop view CX_TICKET
--创建航空公司表的存储过程
if exists(select * from sysobjects where name='CAMPANY1')
drop proc CAMPANY1
use 航空售票系统
go
create proc CAMPANY1
@a varchar(50),
@b varchar(50),
@c varchar(50),
@d varchar(50)
as
insert into CAMPANY values(@a,@b,@c,@d)
go
--使用存储过程
exec CAMPANY1 'G0001','长沙航空','15200000000','长沙'
exec CAMPANY1 'G0002','北京航空','15200000001','北京'
exec CAMPANY1 'G0003','天津航空','15200000003','天津'
exec CAMPANY1 'G0004','湖北航空','15200000004','武汉'
go
--更新存储过程
update CAMPANY set CAMPANY_NUMBER='G0003' where CAMPANY_NUMBER='G0002'
--删除存储过程
drop proc CAMPANY1
go
--创建买票表的存储过程(不需要)
--创建航班表的存储过程
if exists(select * from sysobjects where name='FIGHT1')
drop proc FIGHT1
use 航空售票系统
go
create proc FIGHT1
@a varchar(50),
@b varchar(50),
@c varchar(50),
@d varchar(50),
@e varchar(50),
@f varchar(50),
@g int
as
insert into FIGHT values(@a,@b,@c,@d,@e,@f,@g)
go
--使用存储过程
exec FIGHT1 'F0001','长沙','北京','2016-12-12 09:00','2016-12-12 11:00','G0001','20'
exec FIGHT1 'F0002','北京','长沙','2016-12-12 09:00','2016-12-12 11:00','G0002','22'
exec FIGHT1 'F0003','长沙','天津','2016-12-14 07:00','2016-12-14 09:00','G0003','25'
exec FIGHT1 'F0004','长沙','武汉','2016-12-12 19:00','2016-12-12 20:00','G0004','28'
exec FIGHT1 'F0005','长沙','北京','2016-12-13 09:00','2016-12-13 11:00','G0001','21'
go
--更新存储过程
--update CAMPANY set='' where =''
--删除存储过程
drop proc FIGHT1
go
--创建乘客表的存储过程
if exists(select * from sysobjects where name='PASSAGER1')
drop proc PASSAGER1
use 航空售票系统
go
create proc PASSAGER1
@a varchar(50),
@b varchar(50),
@c varchar(4),
@d varchar(50)
as
insert into PASSAGER values(@a,@b,@c,@d)
go
--使用存储过程
exec PASSAGER1 '123456789123456789','小白','男','13700000000'
exec PASSAGER1 '123456789123456788','小黑','男','13700000001'
exec PASSAGER1 '123456789123456787','小红','女','13700000002'
go
--更新存储过程
--update CAMPANY set='' where =''
--删除存储过程
drop proc PASSAGER1
go
--创建退票表的存储过程(不需要)
--创建机票表的存储过程
if exists(select * from sysobjects where name='TICKET1')
drop proc TICKET1
use 航空售票系统
go
create proc TICKET1
@a varchar(50),
@b varchar(50),
@c varchar(50),
@d int,
@e int,
@f varchar(50),
@g varchar(50)
as
insert into TICKET values(@a,@b,@c,@d,@e,@f,@g)
go
--使用存储过程
exec TICKET1 'T0001','F0001','二等舱','20','560','在售','G0001'
exec TICKET1 'T0002','F0002','头等舱','10','1560','在售','G0002'
exec TICKET1 'T0003','F0003','二等舱','12','560','在售','G0003'
exec TICKET1 'T0004','F0004','二等舱','20','560','在售','G0004'
go
--更新存储过程
--update CAMPANY set='' where =''
--删除存储过程
drop proc TICKET1
go
if exists (select *from sysobjects where name = 'DeleteinTICKET')
drop proc DeleteinTICKET
go
create proc DeleteinTICKET
@a varchar(50)
as
declare @err int =0
delete from BUY_TICKETS where TICKET_ID=@a
delete from REFUND where TICKET_ID=@a
delete from TICKET where TICKET_ID = @a
set @err = @err + @@error
return @err
go
--退订机票存储过程
if exists (select *from sysobjects where name = 'CountTICKET')
drop proc CountTICKET
go
create proc CountTICKET
@a varchar(50)
as
declare @err int =0
declare @updateticket_numble int
select @updateticket_numble=SEAT_NUMBLE from TICKET where TICKET_ID=@a
update TICKET set SEAT_NUMBLE =@updateticket_numble+1 where TICKET_ID=@a
set @err = @err + @@error
return @err
go
--购买机票存储过程
if exists (select *from sysobjects where name = 'CountsubTICKET')
drop proc CountsubTICKET
go
create proc CountsubTICKET
@a varchar(50)
as
declare @err int =0
declare @updateticket_numble int
select @updateticket_numble=SEAT_NUMBLE from TICKET where TICKET_ID=@a
update TICKET set SEAT_NUMBLE =@updateticket_numble-1 where TICKET_ID=@a
set @err = @err + @@error
return @err
go