酒店管理系统

--  create 创建
-- alter  更改
--      程序   存储过程名
create proc usp_guestnumbytypename 
--客房类型名称            输出
@typename nvarchar(32) output,
--计数
@count int output
as  --例如
--选择
select @count=count(*) from 
--客房信息表  内部 连接  客房类型表
Room inner join RoomType
--向  客房信息表.客房类型编号=客房类型.客房类型编号
on Room.RoomTypeID=RoomType.TypeID
--内部连接  客人信息表  向  客人信息表.客房编号=客房.客房编号
inner join GuestRecord on GuestRecord.RoomID=Room.RoomID
 --   类型名称=自定义类型名称
where TypeName=@typename
go
--声明局部变量  @count
declare @count int
--声明@typename
declare @typename  nvarchar(32) 
--赋值
set @typename ='标准间'
set @count=0
--实行  存储过程名  
exec usp_guestnumbytypename @typename output,@count output
--打印
print @count 
print '入住'+@typename+'的客人总数是:'+convert(nvarchar(32),@count)




go
--第二题
--创建  程序
create procedure usp_RoomInfo
--声明@roomnum
 @roomnum int
as 
--判断
if(@roomnum=-1)
 begin
   --查询所有客房信息
   select room.RoomID,Room.BedNum,Room.RoomStateID,TypeName,TypePrice
    from room,roomtype
    where room.roomtypeid=Roomtype.TypeID
 end
else
begin
    select room.RoomID,Room.BedNum,Room.RoomStateID,TypeName,TypePrice
    from room,roomtype
    where room.roomtypeid=Roomtype.TypeID
    and Room.RoomID=@roomnum
end
--调用
exec usp_RoomInfo -1

go

 --第三题
create procedure  usp_DelListByType
  @typeName nvarchar(20)
as
 if not exists  --非  退出
 (
   select RoomTypeId from room  --房间的类型号
   where roomtypeid in 
   (
     select typeid
     from roomtype
     where typename=@typename
   )
 )
 begin
 --删除
    delete from roomtype
    where typeName=@typename
    --返回   错误行数
    return @@rowcount
end
else
return -1

--调用
declare @result int
--实行
exec @result=usp_DelListByType '长包房'



if(@result>0)
print '删除酒店客房类型编号是三人间的记录'+convert(nvarchar(20),@result)+''
else
print @result


go
--第四题
create Proc usp_insertGuestRecord
--声明局部变量
  @identityID nvarchar(20),
  @guestName nvarchar(20),
  @roomID int,
  @resideID int,
  @resideDate datetime,
  @leaveDate datetime,
  @Deposit decimal(18,2)=1000,
  @TotalMoney decimal(18,2),
  @guestID int output
as
 --检查身份证号
  if(len(@identityID)!=18)
  begin
    print '身份证号只能是18位'
    return
  end
  --押金的默认值为1000元(在参数的时候已经设置)
  --插入记录
  
  --开始  通过
  begin tran
   declare @ErrorSum int
   --向客人信息表中插入值
   insert into GuestRecord
   values(@identityID,@guestName,@roomID,@resideID,
   @resideDate,@leaveDate,@Deposit,@TotalMoney)
   set @ErrorSum=@ErrorSum+@@Error
   
   --将客人入住房间的当前状态设置为"入住"的状态编号
   declare @roomStateID int
   select @roomStateID=RoomStateID from roomState
   where RoomStateName='已入住'
   
   --更新  客人  赋值
   update room set RoomStateID=@roomStateID
   where RoomID=@roomID
   set @ErrorSum=@ErrorSum+@@Error
   if(@ErrorSum>0)
   begin
     rollback tran--回滚事务
   end
   else
   begin
   commit tran   --提交事务
   set @guestID=@@Identity
   end
   
   
   
   go
 --调用
 declare @guestID int
 exec usp_insertGuestRecord 

'410523198806267523','李小龙',1008,1,'2013-3-11','2013-3-15',500,500,@guestID output
if(@guestID>0)
begin
  print '插入客人记录操作成功'
  print '客户编号是'+convert(nvarchar(20),@guestID)
end
else
 print '操作失败'





 
原文地址:https://www.cnblogs.com/WuXuanKun/p/5276485.html