sunyiyuan

连接SQL Server:

sqlsvr_conn.php

 1 <?php
 2 header("Content-type: text/html; charset=utf-8");
 3 $serverName = "localhost"; //数据库服务器地址
 4 $uid = "sa"; //数据库用户名
 5 $pwd = "123"; //数据库密码
 6 $connectionInfo = array("UID"=>$uid, "PWD"=>$pwd, "Database"=>"BookSys","CharacterSet" => "UTF-8");
 7 $conn = sqlsrv_connect( $serverName, $connectionInfo);
 8 if( $conn == false)
 9 {
10 echo "连接失败!";
11 die( print_r( sqlsrv_errors(), true));
12 }else{
13 //echo "连接成功!";  
14 }
15 ?>

用户登录系统:login.php:

<!--内置css设置页面的样式-->
<body style="background: #e9f9d8;color: #33abab">
<?php
	session_start();
	//启动session会话,目的是传递登录用户的id
	require "sqlsvr_conn.php";
	//将连接数据库的文件包含进来
	//若是登录表单中有传递进来的变量
	if(isset($_POST[\'username\']) and isset($_POST[\'password\']))
	{
		$userid=$_POST[\'username\']; //存储传过来的变量
    	$password=$_POST[\'password\'];//存储传过来的变量
    	$sql="select * from Guest where Gid=\'$userid\' and Pwd=\'$password\'";
 		$fr=sqlsrv_query($conn, $sql, array(), array( "Scrollable" => \'static\'));//执行查询语句并将结果(资源型结果集)存储在变量里	
    	if ($fobj = sqlsrv_fetch_object( $fr)) {
    		//在Guest数据库中查找,若存在该用户则登录成功,并将当前获得的userid写入session
    		$_SESSION[\'valid_user\']=$userid;
    	}
 	}
 	if (isset($_SESSION[\'valid_user\']))
	{
	//若存在valid_user信息,即登录成功,插入一段js,以提示用户登录成功,并实现跳转(跳转到buyT.php即售票页面)
	?>
	<script type="text/javascript">
		alert(\'登录成功,即将进入售票页!\');
		window.location.href=\'buyT.php\';
	</script>
	<?php
	}
	else
	{
	//否不存在valid_user信息,登录失败或者未登录,显示登录表单,以让用户登录
	//根据有无表单提交,分为两种情况
	if (isset($_POST[\'username\']))
		//1、有表单提交数据,登录失败
		echo "<p>登录失败,请检查用户名和密码后重试!</p>";
	
	else
		//2、没有表单提交数据,未登录
		echo "<p>未登录</p>";
		?>
<form action="login.php" method="POST"><!--打印登录表单-->
	<fieldset>
	<legend>请输入您的个人信息!</legend>
	<p><label for="username">账号:</label>
		<input type="username" name="username" size="30"/></p>
	<p><label for="password">密码:</label>
		<input type="password" name="password"  size="30"/></p>
	</fieldset>
	<!--内置css设置button的样式,其实没啥用,就是好看点-->
	<button type="submit" name="login" id="back_botton" style="background: #79cdcd;
                        color: #fff!important; 
                        line-height: 36px;
                        padding: 0 20px;
                        font-weight: normal;
                        font-size: 16px;
                        font-family: tahoma, arial, \'Hiragino Sans GB\',幼圆, sans-serif;
                        border: 0;
                        border-radius: 30px;">Login</button> 
</form>
<?php
	}
?>
<!--内置css设置页脚的样式-->
<font style=\'position:absolute;bottom:0;width:100%;\'>
        Copyright LZU ©2020
</body>

  售票页:buyT.php

<html>
<head>
    <title>飞机订票系统</title>
</head>
<!--css样式表,分别设置表单、按钮、页面整体的样式-->
<style type="text/css">
    .form-item .form-label-b {
    font-weight: 700;
    }
    #back_botton{
                        background: #79cdcd;
                        color: #fff!important; 
                        
                        padding: 0 20px;
                        font-weight: normal;
                        font-size: 16px;
                        font-family: tahoma, arial, "Hiragino Sans GB",幼圆, sans-serif;
                        border: 0;
                        border-radius: 30px;
    }
    body{
        background: #e9f9d8;
        color: #33abab;
    }
</style>
<body>
<?php 
//启动session会话,目的是传递登录用户的id
session_start();
//从session中取得登录用户的id
$Gid=$_SESSION[\'valid_user\'];
?>
<!--打印页头、注销连接、查看历史订单连接、搜索表单-->
<h3 style="position: absolute;top: 0px;right: 0px;">编号为<?php echo $Gid;?>的旅客朋友,你好!</h3>
<p><a style="position: absolute;top: 50px;right: 20px;color: #33abab;" href="logout.php">注销</a></p>
<p><a href=\'HistoryOrder.php\'>查看历史订单</a></p>
<form method="get" action="buyT.php">
    输入航班编号以搜索:<input type="text" name="key">
    <input type="submit" name="sub" id=\'back_botton\'>
</form>
<?php
    //将连接数据库的文件包含进来
    require "sqlsvr_conn.php";
    //若是用户点击了搜索按钮进行搜索
    if(!empty($_GET[\'key\'])){
        //将搜索条件设为Fid等于用户要搜索的内容
        $key=$_GET[\'key\'];
        $k=" where Fid=\'$key\'";
    }
    //若是用户未点击了搜索按钮进行搜索
    else{
        //将搜索条件设为空
        $k=\'\';
        $key="";
    }
    $sql="select * from Flight $k";
    $result=sqlsrv_query($conn, $sql, array(), array( "Scrollable" => \'static\'));//执行查询语句并将结果(资源型结果集)存储在变量里
    $num=sqlsrv_num_rows($result);//取出记录条数
    //利用循环,以表格的形式打印每个航班的信息
     while( $obj = sqlsrv_fetch_object( $result)) {
            //为了得到航班的出发地和目的地,额外查询Route表
            $sql="select * from Route where Rid=\'$obj->Rid\'";
            $rr=sqlsrv_query($conn, $sql, array(), array( "Scrollable" => \'static\'));
            $robj = sqlsrv_fetch_object( $rr);
?>
        <table border="2" width="100%" cellspacng="0">
            <form>
            <div class="form-group">
                <div class="form-item">
                    <span class="form-label-b">航班号:</span>
                    <span><?php echo $obj->Fid;?></span>
                </div>
            </div>

            <div>
                <span>路线号:</span>
                <span><?php echo $obj->Rid;?></span>
            </div>
            <div>
                <span>票价:</span>
                <span><?php echo $obj->Price;?></span>
            </div>
            <div>
                <span>起飞时间:<?php echo $obj->DepTime->format(\'Y-m-d H:i:s\') ;?></span>
                <span>降落时间:<?php echo $obj->LandTime->format(\'Y-m-d H:i:s\')  ;?></span>
            </div>
            <div>
                <span>出发地:<?php echo $robj->Depart;?></span>
                <span>目的地:<?php echo $robj->Dest;?></span>
            </div>
            <div>
                <a href=insert.php?Fid=<?php echo $obj->Fid; ?>>购票</a>
            </div>
            </form>
         </table>
<?php
}
echo \'<br>共\'.$num.\'条记录\';
?>

</body>
</html>

买票功能:insert.php

 1 <?php
 2 session_start();
 3 //启动session会话
 4 require "sqlsvr_conn.php";
 5 //将连接数据库的文件包含进来
 6     if(!empty($_GET[\'Fid\'])){
 7         $Fid=$_GET[\'Fid\'];//将buyT.php页面传递进来的变量赋给$Fid
 8         $Gid=$_SESSION[\'valid_user\'];//登录用户的id
 9         $sql="insert into Ticket(Gid,Fid) values(\'$Gid\',\'$Fid\');";
10         $result=sqlsrv_query($conn, $sql);
11         //由于数据库中已建立了相关的触发器,所以航班剩余票数,用户里程数,会员制信息,账单记录信息均由触发器控制,这里只需要进行简单的插入即可
12         //插入一段js,以提示用户购票成功,并实现跳转
13         if($result){
14 ?>
15                 <script type="text/javascript">
16                     alert(\'购票成功!即将返回\');
17                     window.location.href=\'buyT.php\';
18                 </script>
19 <?php
20         }
21         else{
22             echo "插入失败!";
23         }
24     }
25     else {
26         echo \'信息缺失!\';
27     }
28 ?>

退票功能:del.php

 1 <?php
 2 session_start();
 3 
 4 if(!empty($_GET)){
 5     $Tid=$_GET[\'Tid\'];
 6     require "sqlsvr_conn.php";
 7     $sql="delete from ticket where Tid=\'$Tid\'";
 8      $result=sqlsrv_query($conn, $sql);
 9      //由于数据库中已经建立了相关的触发器,所以航班剩余票数,用户里程数,会员制信息,账单记录信息均由触发器控制,这里只需要进行简单的删除即可
10     if($result){
11         //插入一段js,以提示用户退票成功,并实现跳转
12 ?>
13 <script type="text/javascript">
14     alert(\'退票成功,即将返回!\');
15     window.location.href=\'HistoryOrder.php\';
16 </script>
17 
18 <?php
19         }
20         else{
21         echo "退票失败!<a href=HistoryOrder.php>返回售票页";
22         }
23 
24     }
25 ?>

查看订单:HistoryOrder.php

 1 <?php 
 2 //启动session会话,目的是传递登录用户的id
 3 session_start();
 4 //登录用户的id
 5 $Gid=$_SESSION[\'valid_user\'];
 6 //打印页头
 7 ?>
 8 <h3 style="position: absolute;top: 0px;right: 0px;">编号为<?php echo $Gid;?>的旅客朋友,你好!</h3>
 9 <p><a style="position: absolute;top: 50px;right: 20px;" href="logout.php">注销</a></p>
10 <p><a href=\'buyT.php\'>返回购票页</a></p>
11 <?php
12     echo "<h1 align=left>您的历史订单</h1><br>";
13 ?>
14 <!--css样式表,分别设置表单、页面整体的样式-->
15 <style type="text/css">
16     .form-item .form-label-b {
17     font-weight: 700;
18     }
19     body{
20         background: #e9f9d8;
21         color: #33abab;
22     }
23 </style>
24 <body>
25 <?php
26     require "sqlsvr_conn.php";
27     
28     $sql="select * from Ticket where Gid=\'$Gid\'";
29     $result=sqlsrv_query($conn, $sql, array(), array( "Scrollable" => \'static\'));
30     
31     $num=sqlsrv_num_rows($result);//取出记录条数,是一个属性
32     //利用循环,以表格的形式打印历史订单的信息
33      while( $obj = sqlsrv_fetch_object( $result)) {
34         //为了得到航班的出发时间、降落时间、出发地和目的地,额外查询Fight、Route表
35          $sql="select * from Flight where Fid=\'$obj->Fid\'";
36          $fr=sqlsrv_query($conn, $sql, array(), array( "Scrollable" => \'static\'));
37          $fobj = sqlsrv_fetch_object( $fr);
38          $sql="select * from Route where Rid=\'$fobj->Rid\'";
39          $rr=sqlsrv_query($conn, $sql, array(), array( "Scrollable" => \'static\'));
40          $robj = sqlsrv_fetch_object( $rr);
41 ?>
42         <table border="2" width="100%" cellspacng="0">
43             <form>
44             <div class="form-group">
45                 <div class="form-item">
46                     <span class="form-label-b">机票号:</span>
47                     <span><?php echo $obj->Tid;?></span>
48                 </div>
49             </div>
50 
51             <div>
52                 <span>航班号:</span>
53                 <span><?php echo $obj->Fid;?></span>
54             </div>
55             <div>
56                 <span>座位号:</span>
57                 <span><?php echo $obj->SeatNum;?></span>
58             </div>
59             <div>
60                 <span>票价:</span>
61                 <span><?php echo number_format($obj->Price, 2);?></span>
62             </div>
63             <div>
64                 <span>折扣后票价:</span>
65                 <span><?php echo number_format($obj->DiscPrice, 2);?></span>
66             </div>
67             <div>
68                 <span>起飞时间:<?php echo $fobj->DepTime->format(\'Y-m-d H:i:s\') ;?></span>
69                 <span>降落时间:<?php echo $fobj->LandTime->format(\'Y-m-d H:i:s\')  ;?></span>
70             </div>
71             <div>
72                 <span>出发地:<?php echo $robj->Depart;?></span>
73                 <span>目的地:<?php echo $robj->Dest;?></span>
74             </div>
75             <div>
76                 <a href=del.php?Tid=<?php echo $obj->Tid; ?>>退票</a>
77             </div>
78             </form>
79          </table>
80 <?php
81 }
82 echo \'<br>共\'.$num.\'条记录\';
83 ?>

注销功能:logout.php

 1 <?php
 2 //因为要注销,所以把session给销毁
 3 session_start();
 4 unset($_SESSION[\'valid_user\']);
 5 session_destroy();
 6 //插入一段js,以提示用户注销成功,并实现跳转
 7 ?>
 8 <script type="text/javascript">
 9     alert(\'注销成功,即将返回登录页!\');
10     window.location.href=\'login.php\';
11 </script>

数据库:

  BookSys

tables:

 1 --建立公司表
 2 create table Company
 3 (
 4     CName varchar(20) NOT NULL,
 5     Addr varchar(40),
 6     Hotline varchar(12),
 7     BLRN char(4) PRIMARY KEY --工商注册号
 8 );
 9 --建立飞机表
10 create table Plane
11 (
12     Pid char(4) PRIMARY KEY,
13     BLRN char(4) NOT NULL REFERENCES Company(BLRN),
14     Seating int check(Seating>=0),--座位数为正
15 );
16 --建立航线表
17 create table Route
18 (
19     Rid char(4) PRIMARY KEY,
20     BLRN char(4) NOT NULL REFERENCES Company(BLRN),
21     Depart varchar(20),  --起点
22     Dest varchar(20),    --终点
23     RMile float    --里程
24 );
25 --建立机场表
26 create table Airport
27 (
28     Aid char(4)  PRIMARY KEY,
29     AName varchar(20),
30     Addr varchar(20)
31 );
32 --建立航班表
33 create table Flight
34 (
35     Fid char(4)  PRIMARY KEY,
36     Pid char(4) NOT NULL REFERENCES Plane(Pid),
37     Rid char(4) NOT NULL REFERENCES Route(Rid),
38     Aid char(4) NOT NULL REFERENCES Airport(Aid),
39     Price money,
40     DepTime datetime,
41     LandTime datetime,
42     Seated int default 0,--航班上已经售出的座位
43     IsDelay bit default 0,--是否延误,默认不延误
44     unique(Rid,Pid)--一个航班由航线和飞机唯一确定
45 );
46 --建立客户表
47 create table Guest
48 (
49     Gid char(4)  PRIMARY KEY ,
50     Pwd varchar(10),
51     GName varchar(20),
52     Addr varchar(20),
53     Tel varchar(11),
54     Gender char(2) check(Gender = \'F\' or Gender = \'M\'),
55     GMile float default(0),
56     Discount float check(Discount between 0 and 1) default(1),
57 );
58 --建立机票表
59 create table Ticket
60 (
61     --Tid int identity(1,1) PRIMARY KEY,
62     Tid varchar(10)PRIMARY KEY,
63     Gid char(4) NOT NULL REFERENCES Guest(Gid),
64     Fid char(4) NOT NULL REFERENCES Flight(Fid),
65     Aid char(4) NOT NULL REFERENCES Airport(Aid),
66     SeatNum char(20),
67     Price money default 0,
68     DiscPrice money default 0,
69     unique(Gid,Fid)  --一个人的id只能买一张一个航班的机票
70 );
71 --建立账单表
72 create table Bill
73 (
74     Tid varchar(10) PRIMARY KEY,
75     Gid char(4) NOT NULL,
76     Time datetime default (getdate())
77 );
78 
79 /*
80 drop table Bill
81 drop table Ticket
82 drop table Guest
83 drop table Flight
84 drop table Airport
85 drop table Route
86 drop table Plane
87 drop table Company
88 */

trigger:

  1 --旅客折扣触发器
  2 create trigger GuestDiscount
  3 on guest
  4 after UPDATE
  5 as
  6 begin
  7     declare @GMile float,@Gid char(10),@isspecial bit;
  8     select @GMile=GMile,@Gid=Gid from inserted;  --获取乘客里程、id(主键)
  9     if(@GMile>1000 and @GMile<=5000)
 10     begin
 11         update guest set discount=0.98 where Gid=@Gid;
 12     end
 13     else if(@GMile>5000 and @GMile<10000)
 14     begin
 15         update guest set discount=0.95 where Gid=@Gid;
 16     end
 17     else if(@GMile>10000)
 18     begin
 19         update guest set discount=0.90 where Gid=@Gid;
 20     end
 21 end
 22 --select * from guest
 23 --update guest set GMile=8000 where Gid=\'G001\'
 24 --drop trigger GuestDiscount
 25 go
 26 --买票触发器BuyTicket
 27 create trigger BuyTicket--当买票时判断是否有座,增加顾客里程数,判断顾客经过折扣后的票价
 28 on Ticket
 29 instead of insert
 30 as
 31 begin
 32     declare @char varchar(5),@Tid varchar(10),@Gid char(4),@Fid char(4),@Aid char(4),
 33     @Price money,@DisPrice money,@Discount float,@Seating int,@Seated int,@Pid char(10),@RMile float;
 34     select @Gid=Gid,@Fid=Fid from inserted;    --买票的旅客id、航班号
 35     select @Seating=Plane.Seating,@Pid=Plane.Pid from Plane,Flight where Flight.Fid=@Fid and Plane.Pid=Flight.Pid;--飞机座位数
 36     select @Seated=Seated from Flight where Fid=@Fid;  --航班已售出座位数
 37     /*判断:若航班已售出座位数等于飞机总座位数,则不能出票,提示售罄;否则正常出票*/
 38     if @Seated = @Seating
 39     print \'出票失败:该航班的机票已售罄,请选择其余航班!\';
 40     else
 41     begin
 42     set @Seated=@Seated+1;  --已售出座位数加一
 43     set @char=convert(varchar,@Seated);
 44     set @Tid=@Fid+\'T\'+@char; --生成机票id(航班id加上座位号)
 45     select @Aid=Aid,@Price=Price from Flight where Flight.Fid=@Fid;  --航班所属机场、机票售价
 46     select @Discount=Discount from Guest where Gid=@Gid;    --旅客的机票折扣
 47     select @DisPrice=@Price*@Discount;                        --优惠后机票价格
 48     select @RMile=Route.RMile from Flight,Route where Flight.Fid=@Fid and Route.Rid=Flight.Rid;    --航线的里程
 49     update Guest set GMile=GMile+@RMile where Gid=@Gid;  --更新乘客里程(加上本次航线的里程)
 50     update Flight set Seated=@Seated where Fid=@Fid;    --更新航班已售出票数(座位数)
 51     insert into Ticket values(@Tid,@Gid,@Fid,@Aid,@Seated,@Price,@DisPrice);    --生成车票
 52     insert into Bill(Tid,Gid) values(@Tid,@Gid);        --生成账单
 53     print \'订票成功!您的车票详情如下:\';
 54     print \'车票id:\'+@Tid;
 55     print \'应收票价:\'+convert(varchar,@Price);
 56     print \'您的购票折扣为:\'+convert(varchar,@Discount);
 57     print \'实收票价:\'+convert(varchar,@Disprice);
 58     print \'座位号:\'+convert(varchar,@Seated);
 59     end
 60 end
 61 insert into Ticket(Gid,Fid) values(\'G002\',\'F004\');
 62 --drop trigger BuyTicket
 63 go
 64 --退票触发器RefoundTicket
 65 create trigger RefoundTicket--退票操作,飞机座加一,用户里程数减少,账单表记录删除
 66 on Ticket
 67 after DELETE
 68 as
 69 begin
 70     declare @Tid varchar(10),@Gid char(4),@Fid char(4),@DisPrice money,@Seated int,@RMile float;
 71     select  @Tid=Tid ,@Gid=Gid,@Fid=Fid,@DisPrice=DiscPrice from deleted;--获取机票id、旅客id
 72     select @Seated=Flight.Seated from Flight where Flight.Fid=@Fid;--该航班的已售出座位数
 73     select @RMile=Route.RMile from Flight,Route where Flight.Fid=@Fid and Route.Rid=Flight.Rid;  --航线的里程
 74     update Guest set GMile=GMile-@RMile where Gid=@Gid;     --更新乘客里程(减去本次航线的里程)
 75     --select * from flight where Fid=@Fid;
 76     update Flight set Seated=@Seated-1 where Fid=@Fid;  --更新飞机售出座位数(减一)
 77     --select * from flight where Fid=@Fid;
 78     delete from Bill where @Tid=Tid;    --删除该账单
 79     print \'退票成功!\'+char(13)+char(10)+\'退票信息如下:\';
 80     print \'车票id:\'+@Tid;
 81     print \'实收金额:\'+convert(varchar,@Disprice);
 82     print \'收取手续费:\'+convert(varchar,@DisPrice)+\'*0.05=\'+convert(varchar,convert(money,@DisPrice*0.05));
 83     print \'实际退款金额:\'+convert(varchar,convert(money,@DisPrice-@DisPrice*0.05));
 84     print \'感谢使用!\'
 85 end
 86 --delete from ticket where Tid=\'F006T1\'
 87 --drop trigger RefoundTicket
 88 go
 89 --航班延误触发器
 90 create trigger FlightDelay
 91 on Flight
 92 after UPDATE
 93 as
 94 begin
 95     declare @DepTimeOld datetime,@DepTimeNew datetime;
 96     declare @IsDelay bit,@Fid char(4);
 97     select @DepTimeOld=DepTime from deleted;
 98     select @DepTimeNew=DepTime,@Fid=Fid from inserted;
 99     if @DepTimeOld<@DepTimeNew /*若更新航班出发时间比原来时间晚,则表示延误*/
100     begin
101     update Flight set IsDelay=1 where Fid=@Fid;
102     print \'乘坐\'+@Fid+\'号航班的旅客飞机已结晚点,非常抱歉本次航班为您带来的不便!\'
103     end
104     else if @DepTimeOld>@DepTimeNew/*若更新航班出发时间比原来时间早,则表示飞机提前(一般不应发生这种情况)*/
105     begin
106     update Flight set IsDelay=0 where Fid=@Fid;
107     print \'乘坐\'+@Fid+\'号航班的旅客飞机由于某些原因提前,非常抱歉本次航班为您带来的不便!\'
108     end
109 end
110 --update flight set DepTime=\'2020-12-25 21:10\' where Fid=\'F001\';
111 --select * from flight
112 --drop trigger FlightDelay;

 

分类:

技术点:

相关文章:

  • 2021-09-14
  • 2022-01-26
  • 2022-02-03
  • 2021-06-26
  • 2021-11-30
  • 2021-09-14
  • 2021-11-01
  • 2021-09-14
猜你喜欢
  • 2021-09-14
  • 2021-09-14
  • 2021-11-23
  • 2021-11-13
  • 2021-04-20
  • 2021-10-18
相关资源
相似解决方案