目录
酒店房间后台管理系统
sqlserver数据库
创建MVC项目
引入EF
EF多表查询技巧
EF写法
视图遍历方法
控制器编码
酒店房间后台管理系统
1.语言和环境
1. 实现语言:C#语言。
2. 环境要求:Visual Studio 2012 SQL Server 2012 或以上版本。
3. 实现技术:ASP.NET MVC EF(100 分)或 ASP.NET 三层 EF(90 分)。
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
建表语句:
代码语言:javascript复制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控制器
代码语言:javascript复制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视图层
代码语言:javascript复制@{
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>