ASP.NET MVC マルチテーブルの例 - ホテル管理

 

目次

ホテル客室バックグラウンド管理システム

sqlserver データベース

MVC プロジェクトを作成する

EFの紹介

EF マルチテーブル クエリ スキル

EF表記

ビュートラバーサルメソッド

コントローラーコード


ホテル客室バックグラウンド管理システム

1.言語と環境

1. 実装言語:C#言語。

2. 環境要件: Visual  Studio  2012  +  SQL  Server  2012 以降。

3. 実装技術: ASP.NET  MVC+EF ( 100 点)または ASP.NET+ 3 層+EF ( 90 点)

4. 機能要件: サードパーティ ツールを使用して、エンティティ クラスと永続化レイヤー コードを生成してはなりません。使用しない場合、ポイントは付与されません。

2.機能を実装する

1.図 1に示すように、最初にページを開いてすべてのホテルの部屋情報のリストを表示します  

図1

要件は次のとおりです。

(1). 室料単価:「2.50円」のように、小数点第2位を切り捨てて人民元で表示します。

(2) ホテルの客室状況:ホテルの客室状況がチェックインされていない場合、緑色のテキスト「空室」が表示され、「チェックイン」操作ボタンが表示され、客室状況がチェックインされている場合、赤色のテキストが表示されます。 「チェックイン」というテキストが表示され、「チェックアウト」アクションボタンが表示されます。

(3).部屋タイプ:部屋タイプ表から各部屋に対応する部屋タイプをクエリし、Webページに表示します。

2. 「チェックイン」をクリックすると該当するホテルの客室ステータスが「チェックイン済み」に変更されて再度表示され、「チェックアウト」ボタンをクリックするとホテルに対応します2に示すように、部屋のステータスが「未チェックイン」に変更され、再び表示されます  

図2

3.ホームページの削除リンクをクリックすると、図3に示すように、削除確認メッセージ ボックスがポップアップ表示され、削除するかどうかを尋ねられ、確認後に対応する部屋を削除し、削除が成功した後にホームページを再表示します。 . 

画像3

1. ホテル ルーム プロジェクト データベース ( Hotel DB ) を作成します。

2. ホテルの部屋タイプ テーブル ( RoomType )を作成します。情報テーブルの構造を表 1に示します。

 1 ルーム テーブル構造

フィールド名

例証する

フィールドタイプ

長さ

述べる

TID _

ナンバリング

ない_

主キー、自動インクリメント、インクリメントは 1

タイプ

型名

nv ar char

2 0

空でない

 2 ルーム テーブル構造

3.ホテルの部屋情報テーブル ( Room )を作成します。情報テーブルの構造を表 2に示します。

フィールド名

例証する

フィールドタイプ

長さ

述べる

ID

ナンバリング

ない_

主キー、自動インクリメント、インクリメントは 1

ナ・ミー

注文者

nv ar char

2 0

空でない

時間

型番_

ない_

型テーブル番号に関連付けられ

価格_

単価

10

1 8,2

空でない

電話1 つ

インターホン_

nv ar char

2 0

空でない

チェックイン状況

ない_

デフォルト 0、0 -チェックインなし、1 -チェックイン済み

4.特定の要件と推奨される実装手順

1. 上記のデータベース要件に従ってデータベースとテーブルを構築し、テスト データを追加します

2. システムフレームワークを構築します

( 1 ) プロジェクトを正しく作成します( MVC または ASP.NET )

(2) エンティティ データ モデルを作成します

( 3 ) コントローラー、ビュー (または 3 つのレイヤー) を作成します

3. ホームページを作成し、すべてのホテルの部屋情報を表示します。

(1)ホテルの全部屋をコントローラ

( 2 ) 部屋の単価は、「2.50円」のように小数点以下2桁の人民元で表示されます

( 3 ) ホテルの部屋の状態がチェックインされていない場合、緑色のテキストで「空室」と表示され、「チェックイン」操作ボタンが表示され、部屋の状態がチェックインされている場合、赤いテキストで「チェックイン済み」と表示されます。「チェックアウト」アクションボタンを表示します。

4. チェックインおよびチェックアウトの操作。

(1)   「未チェックイン」の部屋については、「チェックイン」クリックすると、指定したホテルの部屋のステータスが「チェックイン済み」に変更され、再度ホームページ表示されます。

(2)   「チェックイン済み」の部屋については、「チェックアウト」クリックすると、指定したホテルの部屋のステータスが未チェックイン」に変更され、再度ます。

5.  削除: 削除ボタンをクリックすると、削除の確認プロンプト ボックスがポップアップ表示されます。データを削除しない場合は [キャンセル] をクリックし、対応するルーム情報を削除してホームページ情報を表示するには [OK] をクリックします。

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 は自動的に生成されます。

作成した 2 つのテーブルをインポートする 

EF マルチテーブル クエリ スキル

EF表記

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

ビュートラバーサルメソッド

@foreach (ViewBag.list の var item)
            {                 <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");
            }
        }
    }
}

インデックス ビュー レイヤー


@{
    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/[email protected]">入住</a></td>
                    }
                    <td><a class="item-buttom" href="/Hotel/[email protected]" onclick="return confirm('是否删除该信息')">删除</a></td>
                </tr>
            }
        </table>
    </div>
</body>
</html>

おすすめ

転載: blog.csdn.net/feng8403000/article/details/127347907
おすすめ