Giới thiệu dự án

Trong bối cảnh đô thị hóa và nhu cầu rèn luyện thể chất tăng trưởng mạnh mẽ, phong trào bóng đá phong trào (sân cỏ nhân tạo 5, 7 và 11 người) đã trở thành mô hình kinh doanh dịch vụ phổ biến tại Việt Nam với tốc độ tăng trưởng ước tính đạt 18% - 22%/năm. Tuy nhiên, hơn 80% các cơ sở sân bóng quy mô vừa và nhỏ hiện nay vẫn vận hành theo phương thức truyền thống: ghi chép sổ tay hoặc sử dụng bảng tính Excel rời rạc.

Phương thức thủ công này bộc lộ hàng loạt điểm nghẽn nghiêm trọng (pain points):

  • Xung đột lịch đặt sân (Double-booking): Nhân viên ghi nhận trùng khung giờ của nhiều đội bóng, dẫn đến tranh chấp và suy giảm uy tín của cơ sở kinh doanh.
  • Thất thoát doanh thu dịch vụ: Khó khăn trong việc kiểm soát đồng bộ giữa tiền thuê sân theo giờ và dịch vụ gia tăng đi kèm (nước giải khát, thuê áo tập, phụ kiện thể thao), gây thất thoát từ 15% đến 25% doanh thu phụ trợ.
  • Thiếu minh bạch thời gian: Không ghi nhận chính xác mốc thời gian khách bắt đầu vào sân (Check-in) và kết thúc (Check-out), gây sai lệch khi tính cước giờ lũy tiến.
  • Rủi ro quản trị nội bộ: Thiếu cơ chế phân quyền chặt chẽ giữa nhân viên trực ca và quản lý/chủ sân (Admin), tiềm ẩn nguy cơ chỉnh sửa dữ liệu doanh thu trái phép.
+-----------------------------------------------------------------------------+
|                            VẤN ĐỀ VẬN HÀNH THỦ CÔNG                         |
|  [Sổ tay / Excel rời rạc] ---> [Trùng lịch đặt] ---> [Thất thoát phụ trợ]   |
|                                     |                                       |
|                                     v                                       |
|                  [Xung đột khách hàng & Thất thoát tiền]                    |
+-----------------------------------------------------------------------------+
                                      |
                                      v (Chuyển đổi số)
+-----------------------------------------------------------------------------+
|                     GIẢI PHÁP DESKTOP WPF & SQL SERVER                      |
|  [FSM Quản lý trạng thái] + [Ràng buộc CSDL ACID] + [Giao diện Material UI] |
|                                     |                                       |
|                                     v                                       |
|                 [Tối ưu 100% doanh thu - Tự động hóa POS]                   |
+-----------------------------------------------------------------------------+

Đề tài "Ứng dụng Desktop quản lý sân banh" do sinh viên Trần Khánh Duy thực hiện dưới sự hướng dẫn của TS. Nguyễn Thiên Bảo tại Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh (HCMUTE) được nghiên cứu nhằm giải quyết triệt để các bài toán trên.

Mục tiêu cụ thể của dự án:

  1. Xây dựng phần mềm Desktop chuyên dụng trên hệ điều hành Windows sử dụng công nghệ Windows Presentation Foundation (WPF) kết hợp ngôn ngữ lập trình C# (.NET Framework 4.8).
  2. Thiết kế giao diện người dùng hiện đại, tối ưu trải nghiệm (UX) thông qua bộ thư viện Material Design in XAML Toolkit.
  3. Chuẩn hóa cơ sở dữ liệu quan hệ trên hệ quản trị Microsoft SQL Server 2019, đảm bảo toàn vẹn dữ liệu theo các thuộc tính ACID.
  4. Triển khai mô hình máy trạng thái hữu hạn (Finite State Machine - FSM) để quản lý vòng đời sân: Sẵn sàng hoạt động $\rightarrow$ Đang sử dụng $\rightarrow$ Đã in phiếu tạm tính $\rightarrow$ Thanh toán hoàn tất.
  5. Tích hợp phân hệ bán hàng POS (Point of Sale) dịch vụ ăn uống, quản lý đặt lịch trước tối đa 3 ngày, quản lý khách hàng và phân quyền tài khoản (RBAC).

Phạm vi và giới hạn dự án: Hệ thống tập trung xử lý nghiệp vụ quản lý nội bộ tại quầy lễ tân của các cụm sân bóng đá cỏ nhân tạo. Hệ thống vận hành độc lập dưới dạng Desktop Application trên môi trường mạng cục bộ (LAN), kết nối trực tiếp đến máy chủ cơ sở dữ liệu SQL Server mà chưa tích hợp cổng thanh toán trực tuyến hoặc ứng dụng di động cho khách hàng đặt sân từ xa.


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Khảo sát thị trường các giải pháp quản lý sân bóng đá mini hiện nay cho thấy sự phân hóa rõ rệt giữa các phần mềm thế hệ cũ và các nền tảng đám mây:

Giải pháp Nền tảng Ưu điểm Nhược điểm
Phần mềm Phú Lợi Desktop (WinForms) Chi phí thấp, tính năng nghiệp vụ chi tiết cho từng loại sân. Giao diện WinForms cũ kỹ, không tùy biến được bảng giá riêng lẻ cho từng sân đặc thù.
VEC FMS Web / Mobile Cloud Quản lý đa nền tảng qua Internet, hỗ trợ phát hành thẻ thành viên. Phụ thuộc hoàn toàn vào đường truyền Internet; chi phí duy trì hàng tháng cao; thao tác thêm/sửa phức tạp.
SkyTech Desktop Hệ thống icon trực quan, quản lý danh mục mặt hàng linh hoạt. Bố cục giao diện đơn điệu, cơ chế phân quyền chưa chuyên sâu.
TMT Solutions Desktop Quản lý lịch hẹn chặt chẽ, báo cáo doanh thu đa dạng. Giao diện rập khuôn, thiếu khả năng trực quan hóa trạng thái sân theo thời gian thực.

Phân loại yêu cầu hệ thống theo mô hình MoSCoW:

  • Must have (Bắt buộc): Xác thực người dùng, chuyển đổi trạng thái sân theo thời gian thực, tính tiền giờ tự động theo bảng giá, thanh toán kèm hóa đơn dịch vụ, đặt lịch trước 3 ngày.
  • Should have (Nên có): Phân quyền Admin/User, quản lý danh mục nước uống/thức ăn, lưu lịch sử hóa đơn chi tiết, quản lý thông tin khách hàng thân thiết.
  • Could have (Có thể mở rộng): Tạm dừng tính giờ khi gặp sự cố thời tiết, chuyển đổi sân nhanh (đổi sân khi đang sử dụng), in phiếu tạm tính.
  • Won't have (Chưa thực hiện ở phiên bản này): Đặt sân online qua Mobile App, tích hợp quét mã VietQR động, điều khiển bật/tắt dàn đèn sân bóng qua mạch IoT.

Thiết kế hệ thống

Kiến trúc phần mềm được tổ chức theo mô hình phân lớp (Layered Architecture) nhằm tách biệt giữa giao diện hiển thị, xử lý nghiệp vụ và truy xuất cơ sở dữ liệu:

graph TD
    subgraph Presentation_Layer [Presentation Layer]
        UI[WPF Windows / Pages]
        XAML[XAML Markup & Data Binding]
        MD[Material Design in XAML Toolkit]
    end

    subgraph WPF_Runtime [WPF Core Engine]
        PF[PresentationFramework.dll]
        PC[PresentationCore.dll]
        MIL[MILCore - Media Integration Layer]
        DX[DirectX Graphics Engine]
    end

    subgraph Business_Layer [Business Logic Layer]
        BLL_Auth[Authentication & RBAC Controller]
        BLL_Field[Field State Manager FSM]
        BLL_Billing[Billing & Price Calculation Engine]
        BLL_Booking[Time Conflict Validation Engine]
    end

    subgraph Data_Layer [Data Access Layer]
        CLR[Common Language Runtime CLR]
        ADO[ADO.NET / SQL Client Driver]
        TDS[Tabular Data Stream Protocol]
        SQL[(Microsoft SQL Server 2019)]
    end

    UI --> XAML
    XAML --> MD
    UI --> PF
    PF --> PC
    PC --> MIL
    MIL --> DX
    UI --> BLL_Auth
    UI --> BLL_Field
    UI --> BLL_Billing
    UI --> BLL_Booking
    BLL_Auth --> ADO
    BLL_Field --> ADO
    BLL_Billing --> ADO
    BLL_Booking --> ADO
    ADO --> CLR
    CLR --> TDS
    TDS --> SQL

Bảng đặc tả công nghệ hệ thống:

Thành phần Công nghệ / Thư viện Phiên bản Vai trò kỹ thuật
Framework Microsoft .NET Framework 4.8 Môi trường thực thi ứng dụng (CLR, Base Class Library).
UI Platform Windows Presentation Foundation 4.8 Xây dựng GUI dựa trên nền tảng đồ họa vector DirectX.
Ngôn ngữ C# (C-Sharp) 9.0 Hiện thực logic nghiệp vụ hướng đối tượng (OOP).
UI Toolkit MaterialDesignThemes 4.9.0 Cung cấp Material Design Controls, Transitions, Icons.
Hệ quản trị CSDL Microsoft SQL Server 2019 (15.x) Lưu trữ dữ liệu quan hệ, thực thi Transaction ACID.
Ngôn ngữ CSDL Transact-SQL (T-SQL) T-SQL 2019 Viết Stored Procedures, Constraints, Functions.
Giao thức mạng Tabular Data Stream (TDS) 7.4 Giao thức truyền dữ liệu giữa Client .NET và SQL Server.

Thiết kế cơ sở dữ liệu (Database Schema)

Cơ sở dữ liệu được chuẩn hóa ở dạng chuẩn 3NF (Third Normal Form) nhằm loại bỏ dư thừa dữ liệu và đảm bảo toàn vẹn tham chiếu.

-- Cấu trúc bảng Loại sân và Sân bóng
CREATE TABLE FieldType (
    TypeID INT IDENTITY(1,1) PRIMARY KEY,
    TypeName NVARCHAR(50) NOT NULL, -- Sân 5, Sân 7, Sân 11
    DefaultHourlyRate DECIMAL(18,2) NOT NULL
);

CREATE TABLE FootballField (
    FieldID INT IDENTITY(1,1) PRIMARY KEY,
    FieldName NVARCHAR(100) NOT NULL,
    TypeID INT FOREIGN KEY REFERENCES FieldType(TypeID),
    FieldStatus NVARCHAR(30) DEFAULT N'Ready', -- Ready, InUse, Printed, Maintenance
    IsActive BIT DEFAULT 1
);

-- Phân quyền và tài khoản
CREATE TABLE Account (
    Username VARCHAR(50) PRIMARY KEY,
    PasswordHash VARCHAR(256) NOT NULL,
    FullName NVARCHAR(100) NOT NULL,
    RoleName VARCHAR(20) NOT NULL CHECK (RoleName IN ('Admin', 'Staff')),
    IsActive BIT DEFAULT 1
);

-- Khách hàng và Đặt sân trước
CREATE TABLE Customer (
    CustomerID INT IDENTITY(1,1) PRIMARY KEY,
    CustomerName NVARCHAR(100) NOT NULL,
    PhoneNumber VARCHAR(15) UNIQUE NOT NULL,
    CreatedDate DATETIME DEFAULT GETDATE()
);

CREATE TABLE FieldBooking (
    BookingID INT IDENTITY(1,1) PRIMARY KEY,
    FieldID INT FOREIGN KEY REFERENCES FootballField(FieldID),
    CustomerID INT FOREIGN KEY REFERENCES Customer(CustomerID),
    BookingDate DATE NOT NULL,
    StartTime TIME NOT NULL,
    EndTime TIME NOT NULL,
    Status NVARCHAR(30) DEFAULT N'Confirmed', -- Confirmed, Cancelled, Completed
    CreatedBy VARCHAR(50) FOREIGN KEY REFERENCES Account(Username),
    CONSTRAINT CK_Booking_Time CHECK (EndTime > StartTime)
);

-- Phân hệ Hóa đơn và Bán lẻ dịch vụ
CREATE TABLE ServiceItem (
    ItemID INT IDENTITY(1,1) PRIMARY KEY,
    ItemName NVARCHAR(100) NOT NULL,
    Unit NVARCHAR(20) NOT NULL, -- Chai, Lon, Cái
    Price DECIMAL(18,2) NOT NULL,
    InventoryCount INT DEFAULT 0,
    IsActive BIT DEFAULT 1
);

CREATE TABLE Invoice (
    InvoiceID INT IDENTITY(1,1) PRIMARY KEY,
    FieldID INT FOREIGN KEY REFERENCES FootballField(FieldID),
    CustomerID INT NULL FOREIGN KEY REFERENCES Customer(CustomerID),
    CheckInTime DATETIME NOT NULL,
    CheckOutTime DATETIME NULL,
    TotalHours DECIMAL(5,2) DEFAULT 0,
    FieldTotal DECIMAL(18,2) DEFAULT 0,
    ServiceTotal DECIMAL(18,2) DEFAULT 0,
    FinalAmount DECIMAL(18,2) DEFAULT 0,
    InvoiceStatus NVARCHAR(30) DEFAULT N'Unpaid', -- Unpaid, Printed, Paid
    CreatedBy VARCHAR(50) FOREIGN KEY REFERENCES Account(Username)
);

CREATE TABLE InvoiceDetail (
    DetailID INT IDENTITY(1,1) PRIMARY KEY,
    InvoiceID INT FOREIGN KEY REFERENCES Invoice(InvoiceID),
    ItemID INT FOREIGN KEY REFERENCES ServiceItem(ItemID),
    Quantity INT NOT NULL CHECK (Quantity > 0),
    UnitPrice DECIMAL(18,2) NOT NULL,
    SubTotal AS (Quantity * UnitPrice)
);

Methodology

Dự án áp dụng mô hình phát triển phần mềm lặp thác nước cải tiến (Iterative Waterfall) kết hợp kiểm thử nghiệm thu theo từng ca sử dụng (Use Case-Driven Development). Lộ trình thực hiện diễn ra trong 12 tuần:

[Tuần 1-2]  Khảo sát nghiệp vụ, thu thập yêu cầu từ 3 cụm sân mini thực tế.
[Tuần 3-4]  Thiết kế lược đồ quan hệ CSDL (ERD), thiết kế Use Case & UI Mockups.
[Tuần 5-8]  Hiện thực hóa giao diện WPF Material Design & Logic BLL trong C#.
[Tuần 9-10] Tích hợp SQL Server, xây dựng Transaction, xử lý Store Procedures.
[Tuần 11]   Kiểm thử hộp đen (Black-box Testing) với phương pháp Use Case Testing.
[Tuần 12]   Tối ưu hóa hiệu năng, đóng gói ứng dụng MSI, hoàn tất tài liệu.

Đánh giá rủi ro và giải pháp khắc phục (Risk Assessment):

  • Rủi ro mất đồng bộ trạng thái khi mất điện đột ngột: Giải pháp là lưu vết mọi thay đổi trạng thái và thời gian Check-in trực tiếp vào CSDL tức thời, không lưu tạm trên RAM bộ nhớ đệm.
  • Rủi ro xung đột lịch đặt sân: Thiết lập điều kiện kiểm tra giao thoa khoảng thời gian (Interval Overlap Check) ngay trên câu truy vấn trước khi cấp phép ghi bản ghi đặt sân mới.

Implementation và kết quả

Development process

Quá trình xây dựng ứng dụng tập trung vào việc hiện thực hóa các thuật toán điều phối trạng thái và quản lý dữ liệu giao diện liên kết (Data Binding).

1. Thuật toán kiểm tra xung đột thời gian đặt sân

Khi khách hàng yêu cầu đặt sân vào ngày $D$, trong khoảng thời gian $[T_{\text{start}}, T_{\text{end}}]$, hệ thống tiến hành kiểm tra trên tập các bản ghi đặt sân đang có trạng thái Confirmed của sân đó theo thuật toán:

$$\exists , B \in \text{Bookings} \quad \text{sao cho} \quad (T_{\text{start}} < B.\text{EndTime}) \land (T_{\text{end}} > B.\text{StartTime})$$

public bool CheckBookingConflict(int fieldId, DateTime bookingDate, TimeSpan newStart, TimeSpan newEnd)
{
    using (var context = new FootballFieldDbContext())
    {
        bool hasConflict = context.FieldBookings.Any(b =>
            b.FieldID == fieldId &&
            b.BookingDate == bookingDate.Date &&
            b.Status == "Confirmed" &&
            newStart < b.EndTime &&
            newEnd > b.StartTime
        );
        return hasConflict; // True: Bị trùng lịch; False: Khung giờ hợp lệ
    }
}

Độ phức tạp thuật toán: $O(\log N)$ khi trường FieldIDBookingDate được đánh chỉ mục (Clustered/Non-Clustered Index) trên SQL Server.

2. Xử lý State Machine và tính toán hóa đơn tự động

public class BillingEngine
{
    public Invoice CalculateInvoice(int invoiceId, DateTime checkOutTime)
    {
        using (var db = new FootballFieldDbContext())
        {
            var invoice = db.Invoices.Include("InvoiceDetails").FirstOrDefault(i => i.InvoiceID == invoiceId);
            if (invoice == null) throw new InvalidOperationException("Hóa đơn không tồn tại.");

            invoice.CheckOutTime = checkOutTime;
            TimeSpan duration = checkOutTime - invoice.CheckInTime;
            decimal totalHours = (decimal)duration.TotalHours;
            invoice.TotalHours = Math.Round(totalHours, 2);

            // Lấy đơn giá theo loại sân
            var field = db.FootballFields.Include("FieldType").First(f => f.FieldID == invoice.FieldID);
            decimal hourlyRate = field.FieldType.DefaultHourlyRate;

            invoice.FieldTotal = invoice.TotalHours * hourlyRate;
            invoice.ServiceTotal = invoice.InvoiceDetails.Sum(d => d.Quantity * d.UnitPrice);
            invoice.FinalAmount = invoice.FieldTotal + invoice.ServiceTotal;
            invoice.InvoiceStatus = "Printed";

            // Cập nhật trạng thái sân bóng
            field.FieldStatus = "Printed";
            db.SaveChanges();

            return invoice;
        }
    }
}

3. Binding giao diện với XAML và Material Design

<UserControl x:Class="FootballFieldManagement.Views.FieldCardControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes">
    <materialDesign:Card Width="220" Height="160" Margin="10" UniformCornerRadius="8">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            
            <Border Background="{Binding StatusColorBrush}" Height="8" Grid.Row="0"/>
            
            <StackPanel Grid.Row="1" Margin="12">
                <TextBlock Text="{Binding FieldName}" FontWeight="Bold" FontSize="16"/>
                <TextBlock Text="{Binding FieldTypeName}" Foreground="Gray" FontSize="12"/>
                <TextBlock Text="{Binding CurrentStatusText}" Margin="0,8,0,0" FontWeight="SemiBold"/>
            </StackPanel>
            
            <StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right" Margin="8">
                <Button Style="{StaticResource MaterialDesignFlatButton}"
                        Command="{Binding CheckInCommand}"
                        IsEnabled="{Binding IsReadyToUse}" Content="BẮT ĐẦU"/>
                <Button Style="{StaticResource MaterialDesignRaisedButton}"
                        Command="{Binding PrintBillCommand}"
                        IsEnabled="{Binding IsInUse}" Content="IN PHIẾU"/>
            </StackPanel>
        </Grid>
    </materialDesign:Card>
</UserControl>

Testing và validation

Quá trình kiểm chuẩn được thực hiện thông qua phương pháp Use Case Testing với 18 kịch bản kiểm thử bao phủ toàn bộ luồng chức năng của hệ thống.

STT Use Case Kịch bản kiểm thử (Test Scenario) Điều kiện tiên quyết Kết quả mong đợi Trạng thái
TC01 Đăng nhập Nhập đúng Username và Password của Staff Tài khoản tồn tại và Active Mở giao diện Dashboard, phân quyền đúng Staff PASS
TC02 Đăng nhập Nhập sai mật khẩu 3 lần liên tiếp Tài khoản tồn tại Hiển thị cảnh báo lỗi, không cấp quyền truy cập PASS
TC03 Sử dụng sân Nhấn "Bắt đầu sử dụng" trên sân đang trống Sân có trạng thái Ready Trạng thái chuyển sang InUse, đồng hồ tính giờ kích hoạt PASS
TC04 Đổi sân Chuyển phiên đá từ Sân 1 sang Sân 2 Sân 1 InUse, Sân 2 Ready Toàn bộ tiền giờ & dịch vụ chuyển sang Sân 2, Sân 1 về Ready PASS
TC05 Bán dịch vụ Thêm 5 chai nước suối vào sân đang đá Sân ở trạng thái InUse Ghi nhận chi tiết vào InvoiceDetail, trừ tồn kho CSDL PASS
TC06 In phiếu Chọn "In phiếu" trên sân đang đá Sân ở trạng thái InUse Khóa chỉnh sửa dịch vụ, tạo hóa đơn tạm tính, đổi sang Printed PASS
TC07 Hủy in phiếu Nhấn "Hủy in phiếu" khi khách muốn đá thêm Sân ở trạng thái Printed Chuyển trạng thái ngược về InUse, tiếp tục cộng dồn thời gian PASS
TC08 Thu tiền Xác nhận thanh toán đủ số tiền hóa đơn Sân ở trạng thái Printed Lưu trạng thái Paid, reset sân về Ready, cập nhật doanh thu PASS
TC09 Đặt sân Đặt lịch sân trước 2 ngày vào khung 18h-19h Sân chưa có ai đặt khung này Lưu bản ghi FieldBooking, đổi màu ô lịch biểu PASS
TC10 Đặt sân Đặt lịch trùng với khung giờ đã có người đặt Đã có khách đặt 17h30-18h30 Hệ thống từ chối, báo lỗi xung đột thời gian PASS

Đo lường hiệu năng kỹ thuật (Performance Benchmarks):

  • Thời gian khởi động ứng dụng (Cold Startup): 1.15 giây trên cấu hình CPU Core i5-8250U, RAM 8GB.
  • Thời gian phản hồi truy vấn SQL (Query Latency): Trung bình 12.4ms cho các thao tác đọc danh sách sân và hóa đơn.
  • Mức tiêu thụ bộ nhớ RAM: Dao động ổn định trong khoảng 68MB - 84MB trong suốt phiên làm việc 8 giờ liên tục.
  • Độ chính xác tính cước: 100% trên 50 kịch bản kiểm thử đối soát giữa tính toán phần mềm và tính tay thủ công.

Đổi mới và đóng góp

  1. Ứng dụng Material Design in XAML trên kiến trúc WPF: Thay thế hoàn toàn giao diện WinForms xơ cứng truyền thống bằng hệ thống Component phẳng có chiều sâu thị giác. Việc sử dụng DirectX thông qua MILCore giúp hiệu ứng chuyển đổi trạng thái sân (Color Transitions) mượt mà ở mức 60 FPS, không gây giật lag giao diện người dùng.
  2. Mô hình hóa chu trình trạng thái sân dạng FSM: Chuẩn hóa quy trình vận hành sân bóng thành một máy trạng thái toán học nghiêm ngặt. Trạng thái không thể bị thay đổi tùy tiện (ví dụ: không thể "Thu tiền" nếu chưa qua bước "In phiếu tạm tính"), giúp triệt tiêu 100% sai sót do thao tác nhầm của nhân viên trực ca.
  3. Giải pháp kiểm soát doanh thu tự động: Tự động đồng bộ chi phí sân theo phút thực tế kết hợp kiểm soát xuất nhập tồn kho hàng nước uống tức thì, giúp các chủ sân cắt giảm triệt để tình trạng thất thoát tiền mặt (thường chiếm 5-10% tổng thu ở mô hình ghi sổ).
+-----------------------------------------------------------------------------+
|              CHU TRÌNH CHUYỂN ĐỔI TRẠNG THÁI SÂN (FSM WORKFLOW)             |
|                                                                             |
|  +--------------+   Check-in   +--------------+   In phiếu   +-----------+  |
|  | Sẵn sàng     | -----------> | Đang sử dụng | -----------> | Đã in     |  |
|  | (Ready)      |              | (InUse)      |              | phiếu     |  |
|  +--------------+              +--------------+              +-----------+  |
|         ^                             |                            |        |
|         | Thu tiền                    | Hủy sân                    | Hủy in |
|         | thành công                  v                            v phiếu  |
|         +-----------------------+------------+ <-------------------+        |
|                                 | Hủy/Reset  |                              |
|                                 +------------+                              |
+-----------------------------------------------------------------------------+

Ứng dụng thực tế và triển khai

Kịch bản triển khai thực tế

Hệ thống được thiết kế phù hợp tối ưu cho các mô hình kinh doanh thể thao:

  • Cụm sân bóng đá mini cỏ nhân tạo (quy mô từ 2 đến 12 sân).
  • Trung tâm thể thao tích hợp: Sân bóng đá kết hợp sân cầu lông, sân pickleball hoặc sân bóng rổ (chỉ cần cấu hình lại danh mục trong bảng FieldType).

Yêu cầu cấu hình hệ thống (System Requirements)

[Máy trạm / Server Quản lý]
- Hệ điều hành: Microsoft Windows 10 / Windows 11 (64-bit) hoặc Windows Server 2016+
- Vi xử lý: Intel Core i3 thế hệ 6 trở lên hoặc AMD Ryzen 3 tương đương
- Bộ nhớ RAM: Tối thiểu 4 GB (Khuyến nghị 8 GB)
- Ổ cứng: Tối thiểu 500 MB dung lượng khả dụng (SSD khuyến nghị cho tốc độ truy vấn CSDL)
- Môi trường thực thi: Microsoft .NET Framework 4.8 Runtime
- Cơ sở dữ liệu: Microsoft SQL Server Express 2016 / 2019 / 2022 (Bản miễn phí)
- Thiết bị ngoại vi: Tương thích máy in hóa đơn nhiệt khổ K80 / K58 qua cổng USB/LAN

Phân tích hiệu quả kinh tế (ROI & Cost-Benefit Analysis)

Đối với một cụm 4 sân bóng đá mini 5 người hoạt động với công suất trung bình 6 giờ/sân/ngày:

  • Chi phí đầu tư phần mềm: Khấu hao thiết bị máy tính có sẵn; chi phí bản quyền SQL Server Express = 0 VNĐ.
  • Thời gian tiết kiệm: Giảm 1.5 giờ ghi chép, đối chiếu sổ sách và tính toán hóa đơn mỗi ngày cho nhân viên thu ngân.
  • Chống thất thoát: Tiết kiệm trung bình 1,500,000 - 3,000,000 VNĐ/tháng thất thoát từ nước uống giải khát và tính thiếu giờ đá.
  • Thời gian hoàn vốn (Payback Period): Ước tính đạt được ngay trong tháng đầu tiên đưa vào vận hành.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Ràng buộc nền tảng: Ứng dụng xây dựng trên .NET Framework 4.8 và WPF nên chỉ có thể thực thi trên hệ điều hành Windows, chưa hỗ trợ đa nền tảng (macOS, Linux).
  • Thiếu đồng bộ thời gian thực từ xa: Chưa có cơ chế Webhook hoặc RESTful API để chủ sân theo dõi doanh thu từ xa qua điện thoại thông minh khi không có mặt tại quầy.
  • Giao dịch tài chính: Chưa tích hợp thư viện tạo mã QR thanh toán động (Dynamic VietQR) theo từng hóa đơn cụ thể.

Hướng phát triển trong tương lai

  1. Nâng cấp nền tảng: Chuyển đổi mã nguồn sang .NET 8 / .NET MAUI để hỗ trợ đa nền tảng và tối ưu hóa hiệu năng biên dịch Native AOT.
  2. Kiến trúc Cloud Hybrid: Xây dựng hệ thống Backend API (ASP.NET Core Web API) kết hợp CSDL đám mây (Azure SQL / AWS RDS) giúp đồng bộ dữ liệu đa chi nhánh.
  3. Tích hợp phần cứng IoT: Kết nối vi điều khiển ESP32 / Relay module để tự động đóng/ngắt hệ thống đèn chiếu sáng của từng sân bóng khớp chính xác theo thời gian bắt đầu và kết thúc trên phần mềm.

Đối tượng hưởng lợi

  • Sinh viên và học viên ngành CNTT: Tài liệu tham khảo hoàn chỉnh về cách áp dụng kiến trúc phần mềm hướng đối tượng (OOP), lập trình giao diện WPF nâng cao với Material Design và kỹ thuật mô hình hóa hệ thống bằng Use Case Specification.
  • Lập trình viên .NET: Cung cấp mẫu code chuẩn về Data Binding, thiết kế cơ sở dữ liệu quan hệ cho các bài toán POS / Scheduling, và kỹ thuật viết Unit Test/Use Case Test.
  • Chủ doanh nghiệp & Quản lý sân bóng: Sở hữu giải pháp chuyển đổi số quy trình vận hành với chi phí triển khai cực thấp, triệt tiêu sai sót thất thoát và nâng cao tính chuyên nghiệp của dịch vụ.
  • Khách hàng thuê sân: Trải nghiệm dịch vụ minh bạch, hóa đơn thanh toán rõ ràng từng phút thi đấu và dịch vụ sử dụng, loại bỏ hoàn toàn các tranh chấp không đáng có.

Câu hỏi thường gặp

1. Ứng dụng có yêu cầu kết nối Internet liên tục để hoạt động không?

Không. Hệ thống được thiết kế theo mô hình Desktop cục bộ kết nối SQL Server nội bộ, cho phép vận hành hoàn toàn ổn định 100% ngay cả khi mất kết nối Internet toàn bộ khu vực.

2. Hệ thống xử lý thế nào khi xảy ra mất điện đột ngột trong lúc sân đang hoạt động?

Mọi sự kiện như "Bắt đầu sử dụng" (Check-in) hay "Thêm mặt hàng" đều được lưu trực tiếp vào CSDL SQL Server với mốc thời gian hệ thống (GETDATE()). Khi có điện trở lại và mở lại phần mềm, thời gian đã đá của khách vẫn được bảo toàn nguyên vẹn và tiếp tục tính cước chính xác.

3. Có thể kết nối máy in hóa đơn nhiệt (máy in bill) với phần mềm không?

Có. Ứng dụng sử dụng chuẩn in ấn của Windows Driver thông qua PrintDialog hoặc xuất định dạng FlowDocument của WPF, hoàn toàn tương thích với tất cả các dòng máy in nhiệt khổ giấy K80 (80mm) và K58 (58mm) phổ biến trên thị trường.

4. Chi phí bảo trì và nâng cấp cơ sở dữ liệu hàng năm là bao nhiêu?

Hệ thống sử dụng phiên bản Microsoft SQL Server Express hoàn toàn miễn phí cho dung lượng CSDL dưới 10GB (đủ lưu trữ dữ liệu vận hành liên tục trong hơn 15 năm cho một cụm sân thể thao), do đó không phát sinh chi phí bản quyền CSDL định kỳ.

5. Làm thế nào để điều chỉnh bảng giá tiền sân khi áp dụng giá cao điểm / cuối tuần?

Tài khoản có quyền Admin có thể truy cập phân hệ "Bảng giá" (Price Management) để cập nhật đơn giá theo giờ cho từng loại sân (Sân 5, Sân 7) hoặc thiết lập các chính sách giá mới một cách trực quan mà không cần chỉnh sửa mã nguồn chương trình.


Kết luận

Đồ án tốt nghiệp "Ứng dụng Desktop quản lý sân banh" của sinh viên Trần Khánh Duy (Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh) đã giải quyết thành công bài toán chuyển đổi số nghiệp vụ quản lý cho các cơ sở thể thao phong trào. Bằng việc kết hợp sức mạnh xử lý giao diện của WPF Material Design với khả năng quản trị dữ liệu an toàn của SQL Server, đồ án đã mang đến một sản phẩm phần mềm có độ tin cậy cao, giao diện thẩm mỹ và giá trị ứng dụng thực tiễn lớn.

Hệ thống không chỉ đạt điểm đánh giá cao về mặt học thuật và kỹ thuật lập trình mà còn mở ra tiềm năng thương mại hóa rộng rãi khi được nâng cấp thêm các tính năng Cloud và IoT trong các giai đoạn tiếp theo.