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

举报
红目香薰 发表于 2022/10/28 00:23:21 2022/10/28
【摘要】 ​目录酒店房间后台管理系统sqlserver数据库创建MVC项目引入EFEF多表查询技巧EF写法视图遍历方法控制器编码酒店房间后台管理系统1.语言和环境1. 实现语言:C#语言。2. 环境要求:Visual Studio 2012 + SQL Server 2012 或以上版本。3. 实现技术:ASP.NET MVC+EF(100 分)或 ASP.NET+三层+EF(90 分)。4. 功能要...


目录


酒店房间后台管理系统

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 所示


编辑

图1

要求如下

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

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

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


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


编辑

图2

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

编辑


图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图

编辑

创建MVC项目

编辑

引入EF

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

编辑

引入刚创建的两个表 

编辑

编辑

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>


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。