ASP.NET MVC多表示例题-酒店管理

时间:2022-10-16 19:53:12

 

目录

酒店房间后台管理系统

sqlserver数据库

创建MVC项目

引入EF

EF多表查询技巧

EF写法

视图遍历方法

控制器编码


酒店房间后台管理系统

1.语言和环境

1. 实现语言:C#语言。

2. 环境要求:Visual Studio 2012 + SQL Server 2012 或以上版本。

3. 实现技术:ASP.NET MVC+EF100 分) ASP.NET+三层+EF90 分)

4. 功能要求:不得使用第三方工具生成实体类、持久层代码,否则不得分。

2.实现功能

1. 首次打开页面,展示所有酒店房间信息列表,如图 1 所示

ASP.NET MVC多表示例题-酒店管理

图1

要求如下

(1).房间单价:保留两位小数,以人民币形式显示,如“¥2.50

(2).酒店房间状态:若酒店房间状态为未入住,则显示绿色文字“空房间”,并显示“入住”操作按钮;如果房间状态为已入住,则显示红色文字“已入住”,并显示“退房”操作按钮。

(3).房间类型:从房间类型表中查询出每间房所对应房间类型,显示在网页中。

2.点击“入住”,可以将对应酒店房间状态修改为“已入住”,并重新显示;点击“退房”按钮将对应酒店房间状态修改为“未入住”并重新显示,如图 2 所示。

ASP.NET MVC多表示例题-酒店管理

图2

3.点击首页中的删除链接,弹出删除确认消息框,提示是否删除,确认后删除对应房间,删除成功后重新显示首页,如图 3 所示。

ASP.NET MVC多表示例题-酒店管理

图3

1. 创建酒店房间项目数据库(HotelDB)。

2. 创建酒店房间类型表(RoomType,信息表结构见表 1

 1 Room 表结构

字段名

说明

字段类型

长度

备注

TID

编号

int

主键,自增,增量为 1

TypeName

类型名

nvarchar

20

非空

 2 Room 表结构

3.创建酒店房间信息表(Room,信息表结构见表 2

字段名

说明

字段类型

长度

备注

ID

编号

int

主键,自增,增量为 1

Name

下单人

nvarchar

20

非空

TID

类型编号

int

非空,外键,关联到类型表编号

Price

单价

decimal

18,2

非空

Phone

内线电话

nvarchar

20

非空

Statu

入住状态

int

默认 0,0-未入住,1-已入住

4.具体要求及推荐实现步骤

1. 按以上数据库要求建库、建表,并添加测试数据

2. 搭建系统框架

1)正确创建项目(MVC 或者 ASP.NET

(2)创建实体数据模型

3)创建控制器、视图(或者三层)

3. 创建首页并显示所有酒店房间信息。

(1)控制器(或者三层)中编写显示所有酒店房间的方法。

2)房间单价以人民币形式显示,保留两位小数,如“¥2.50

3 若酒店房间状态为未入住,则显示绿色文字“空房间”,并显示“入住”操作按钮;如果房间状态为已入住,则显示红色文字“已入住”,并显示“退房”操作按钮。

4. 入住和退房操作。

(1)  对“未入住”房间点击“入住”将指定酒店房间状态更改为已入住”并重新显示首页。

(2)  对“已入住”房间点击“退房”将指定酒店房间状态更改为未入住”并重新显示首页。

5.  删除:点击删除按钮,弹出确认删除提示框,点击“取消”不删除数据;点击“确定”才会删除对应房信息,并显示首页信息。

sqlserver数据库

库名HotelDB

建表语句: 

create table RoomType(
   TID int primary key identity(1,1),
   TypeName varchar(20) not null
)

create table Room(
   ID int primary key identity(1,1),
   [Name] nvarchar(20) not null,
   TID int references RoomType(TID) not null,
   Price decimal(18,2) not null,
   Phone nvarchar(20) not null,
   Statu int check(Statu=1 OR Statu=0)
)

insert into RoomType
   select '单人间'union
   select '双人间'union
   select '三人间'
insert into Room
   select '3601',1,188,2022,0 union
   select '3602',2,288,2023,0 union
   select '3603',1,188,2022,1 union
   select '3501',1,188,2022,0 union
   select '3502',3,388,2022,1 union
   select '3503',1,188,2022,0 
go

ER图

ASP.NET MVC多表示例题-酒店管理

创建MVC项目

ASP.NET MVC多表示例题-酒店管理

引入EF

我这里离交HotelDB,会自动生成HotelDBEntities

ASP.NET MVC多表示例题-酒店管理

引入刚创建的两个表 

ASP.NET MVC多表示例题-酒店管理

ASP.NET MVC多表示例题-酒店管理

EF多表查询技巧

EF写法

List<Room> rooms = db.Room.Include("RoomType").ToList();

视图遍历方法

@foreach (var item in ViewBag.list)
            {
                <tr>
                    <td>@item.ID</td>
                    <td>@item.RoomType.TypeName</td>
                    <td>@item.Name</td>

                </tr>
            }

控制器编码

创建HotelController.cs控制器

using DEMOMVC20221016.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace DEMOMVC20221016.Controllers
{
    public class HotelController : Controller
    {
        // GET: Hotel
        public ActionResult Index()
        {
            using (HotelDBEntities db = new HotelDBEntities()) {
                List<Room> rooms = db.Room.Include("RoomType").ToList();
                ViewBag.list = rooms;
                return View();
            }
        }
        [HttpGet]
        public void UpdateById(string roomid)
        {//入住和退房处理

            int id = int.Parse(roomid);
            using (HotelDBEntities db = new HotelDBEntities())
            {
                Room room = db.Room.Where(p => p.ID == id).FirstOrDefault();
                room.Statu = room.Statu == 0 ? 1 : 0;
                db.SaveChanges();
                Response.Redirect("/Hotel/Index");
            }
        }
        public void delete(string roomid)
        {//删除数据处理
            int id = int.Parse(roomid);
            using (HotelDBEntities db = new HotelDBEntities())
            {
                Room room = db.Room.Where(p => p.ID == id).FirstOrDefault();
                db.Room.Remove(room);
                db.SaveChanges();
                Response.Redirect("/Hotel/Index");
            }
        }
    }
}

Index视图层


@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <style>
        table {
            /*border-collapse: collapse;*/
            border-spacing: 0;
            width: 100%;
            border: 1px solid #e8e8e8;
            text-align: center;
        }

        td {
            height: 50px;
            border: 1px solid #e8e8e8;
        }

        th {
            height: 50px;
            border: 1px solid #e8e8e8;
            background: #527aff;
        }

        .item-buttom {
            background: #527aff;
            color: white;
            padding: 5px 10px 5px 10px;
            text-decoration: none;
            margin-left: 5px;
        }
    </style>
</head>
<body>
    <div>
        <table>
            <tr>
                <th>编号</th>
                <th>房间类型</th>
                <th>房间号</th>
                <th>单价</th>
                <th>内线电话</th>
                <th>状态</th>
                <th>删除</th>
            </tr>
            @foreach (var item in ViewBag.list)
            {
                <tr>
                    <td>@item.ID</td>
                    <td>@item.RoomType.TypeName</td>
                    <td>@item.Name</td>
                    <td>¥@item.Price</td>
                    <td>@item.Phone</td>
                    @if (@item.Statu == 1)
                    {
                        <td style="color:red">已入住<a class="item-buttom" href="/Hotel/UpdateById?roomid= @item.ID">退房</a></td>

                    }
                    else
                    {
                        <td style="color:#4cff00">空房间<a class="item-buttom" href="/Hotel/UpdateById?roomid=@item.ID">入住</a></td>
                    }
                    <td><a class="item-buttom" href="/Hotel/delete?roomid=@item.ID" onclick="return confirm('是否删除该信息')">删除</a></td>
                </tr>
            }
        </table>
    </div>
</body>
</html>