Lập trình C# - Quản lý khách sạn

Xây dựng chương trình quản lý khách sạn theo yêu cầu sau:

 Thiết kế lớp đối tượng khách hàng gồm các thuộc tính (Số CMTND, họ tên, tuổi, giới tính, quê quán)

- Thiết kế get/set cho thuộc tính
- Tạo hàm tạo ko đối và đầy đủ đối số
- Tạo hàm nhập và hiển thị thông tin

2. Thiết kế lớp Hotel gồm các thuộc tính : tên, địa chỉ, loại khách sạn (VIP, Bình dân,...), danh sách các Room, mã khách sạn
- Thiết kế get/set cho thuộc tính
- Tạo hàm tạo ko đối và đầy đủ đối số
- Tạo hàm nhập và hiển thị thông tin
3. Thiết kế lớp Room gồm các thuộc tính : Tên phòng, giá tiền, tầng, số người tối đa ở, mã phòng
- Thiết kế get/set cho thuộc tính
- Tạo hàm tạo ko đối và đầy đủ đối số
- Tạo hàm nhập và hiển thị thông tin

4. Thiết kế lớp Book gồm các thuộc tính : ngày book, ngày trả phòng, Số CMTND người book, mã khách sạn, mã phòng

Chú ý : Số CMTND -> nếu chưa tồn tại -> nhập thông tin KH đó
Mã khách sạn -> Nếu ko tồn tại, yêu cầu nhập đúng khách sạn đã có
Mã Phòng -> yêu cầu nhập đúng mã phòng của KH mà người dùng muốn book -> Nếu nhập sai, yêu cầu nhập đúng mới dừng.

Chú thích menu :
Khi người dùng chọn 1 : Hỏi người dùng số khách sạn cần nhập => Khi nhập mỗi khách sạn thì yêu cầu
- Nhập thông tin khách sạn đó
- Hỏi người dùng nhập số phòng cần nhập cho khách sạn đó => Nhập thông tin từng phòng
Khi người dùng chọn 2 : In toàn bộ thông tin liên quan tới KS
Khi người dùng chọn 3 : Nhập thông tin đặt phòng (Book)
Khi người dùng chọn 4: Nhập vào 1 ngày book và ngày trả phòng, in ra tất cả các phòng có thể đap ứng đc yêu cầu trên
Khi người dùng chọn 5 : In ra tổng tiền mà mỗi khách sạn kiếm được ra màn hình.
Khi người dùng chọn 6 : Nhập Số CMTND khách hàng => In ra tất cả các khách sạn mà khách hàng này đã tới.
Khi người dùng chọn 7 : Thoát chương trình.


Trong project chúng ta tạo 4 class Book.csCustomer.cs, Hotel.cs, Room.cs

Bước 1Xây dựng Class Book.cs

using System;
using System.Collections.Generic;
using System.Text;

namespace HotelManager
{
    public class Book
    {
        public string CMTND { get; set; }
        public string HotelCode { get; set; }
        public string RoomNo { get; set; }
        public DateTime CheckIn { get; set; }
        public DateTime CheckOut { get; set; }

        public Book()
        {
        }

        public void Input(List<Customer> customers, List<Hotel> hotels)
        {
            if (hotels.Count == 0)
            {
                Console.WriteLine("Khong co du lieu!!!");
                return;
            }

            Console.WriteLine("Nhập chứng minh nhân dân: ");
            CMTND = Console.ReadLine();
            bool isFind = false;
            foreach (Customer customer in customers)
            {
                if (customer.CMTND.Equals(CMTND))
                {
                    isFind = true;
                    break;
                }
            }
            if (!isFind)
            {
                //nhap moi du lieu KH
                Customer customer = new Customer();
                customer.CMTND = CMTND;
                customer.InputWithoutCMTND();

                customers.Add(customer);
            }

            Console.WriteLine("Nhập mã khách sạn: ");
            Hotel currentHotel = null;
            for (; ; )
            {
                foreach (Hotel hotel in hotels)
                {
                    Console.WriteLine("Mã khách sạn: {0}, Tên khách sạn: {1}", hotel.HotelCode, hotel.Name);
                }
                HotelCode = Console.ReadLine();
                foreach (Hotel hotel in hotels)
                {
                    if (hotel.HotelCode.Equals(HotelCode))
                    {
                        currentHotel = hotel;
                        break;
                    }
                }
                if (currentHotel != null)
                {
                    break;
                }
                Console.WriteLine("(Not Found) Nhập lại: ");
            }

            Console.WriteLine("Nhập mã phòng: ");
            if (currentHotel.RoomList.Count == 0)
            {
                Console.WriteLine("Khách sạn không cài đặt phòng!!!");
                return;
            }

            for (; ; )
            {
                foreach (Room room in currentHotel.RoomList)
                {
                    Console.WriteLine("Mã phòng: {0}, Tên phòng: {1}", room.RoomNo, room.RoomName);
                }
                isFind = false;
                RoomNo = Console.ReadLine();
                foreach (Room room in currentHotel.RoomList)
                {
                    if (room.RoomNo.Equals(RoomNo))
                    {
                        isFind = true;
                        break;
                    }
                }
                if (isFind)
                {
                    break;
                }
                else
                {
                    Console.WriteLine("(Not Found) Nhap lai: ");
                }
            }

            Console.WriteLine("Ngày nhận phòng (dd/mm/YYYY): ");
            string dateTime = Console.ReadLine();
            CheckIn = ConvertStringToDatetime(dateTime);

            Console.WriteLine("Ngày trả phòng  (dd/mm/YYYY): ");
            dateTime = Console.ReadLine();
            CheckOut = ConvertStringToDatetime(dateTime);
        }

        public DateTime ConvertStringToDatetime(string value)
        {
            //string iString = "2005-05-05 22:12 PM";
            DateTime oDate = DateTime.ParseExact(value, "dd/MM/yyyy", null);

            return oDate;
        }
    }
}

Bước 2Xây dựng Class Customer.cs

using System;
using System.Collections.Generic;
using System.Text;

namespace HotelManager
{
    public class Customer
    {
        public string CMTND { get; set; }
        public string Fullname { get; set; }
        public string Age { get; set; }
        public string Gender { get; set; }
        public string Address { get; set; }

        public Customer()
        {
        }

        public void Input()
        {
            Console.WriteLine("Nhập chứng minh nhân dân: ");
            CMTND = Console.ReadLine();

            InputWithoutCMTND();
        }

        public void InputWithoutCMTND()
        {
            Console.WriteLine("Nhập tên khách hàng: ");
            Fullname = Console.ReadLine();

            Console.WriteLine("Nhập tuổi: ");
            Age = Console.ReadLine();

            Console.WriteLine("Nhập giới tính: ");
            Gender = Console.ReadLine();

            Console.WriteLine("Nhập địa chỉ: ");
            Address = Console.ReadLine();
        }

        public void Display()
        {
            Console.WriteLine("Chứng minh nhân dân : {0}, Tên khách hàng: {1}, Tuổi: {3}, Giới tính: {4}, Địa chỉ: {5}",
                              CMTND, Fullname, Age, Gender, Address);
        }
    }
}

Bước 3: Xây dựng Class Hotel.cs

using System;
using System.Collections.Generic;
using System.Text;

namespace HotelManager
{
    public class Hotel
    {
        public string HotelCode { get; set; }
        public string Name { get; set; }
        public string Address { get; set; }
        public string Type { get; set; }
        public List<Room> RoomList { get; set; }

        public Hotel()
        {
            RoomList = new List<Room>();
        }

        public void Input()
        {
            Console.WriteLine("Nhập mã khách sạn: ");
            HotelCode = Console.ReadLine();

            Console.WriteLine("Nhập tên khách sạn: ");
            Name = Console.ReadLine();

            Console.WriteLine("Nhập địa chỉ: ");
            Address = Console.ReadLine();

            Console.WriteLine("Nhập loại khách sạn (VIP/Binh Dan):");
            Type = Console.ReadLine();

            for (; ; )
            {
                Room room = new Room();
                room.Input();

                RoomList.Add(room);

                Console.WriteLine("Có tiếp tục nhập hay không? Y/N: ");
                string option = Console.ReadLine();

                if (option.ToUpper().Equals("N"))
                {
                    break;
                }
            }
        }

        public void Display()
        {
            Console.WriteLine("Mã khách sạn: {0}, Tên khách sạn: {1}, Địa chỉ: {2}, Loại: {3}", HotelCode, Name, Address, Type);

            foreach (Room room in RoomList)
            {
                room.Display();
            }
        }
    }
}

Bước 4Xây dựng Class Room.cs

using System;
using System.Collections.Generic;
using System.Text;

namespace HotelManager
{
    public class Room
    {
        public string RoomName { get; set; }
        public float Price { get; set; }
        public string RoomNo { get; set; }
        public int PeopleMax { get; set; }
        public int Floor { get; set; }

        public Room()
        {
        }

        public void Input()
        {
            Console.WriteLine("Nhập mã phòng: ");
            RoomNo = Console.ReadLine();

            Console.WriteLine("Nhập tên phòng: ");
            RoomName = Console.ReadLine();

            Console.WriteLine("Nhập giá phòng: ");
            Price = float.Parse(Console.ReadLine());

            Console.WriteLine("Nhập số người tối đa: ");
            PeopleMax = int.Parse(Console.ReadLine());

            Console.WriteLine("Nhập tầng mấy?: ");
            Floor = int.Parse(Console.ReadLine());
        }

        public void Display()
        {
            Console.WriteLine("Mã phòng: {0}, tên phòng: {1}, giá: {2}, số người tối đa: {3}, tầng: {4}",
                              RoomNo, RoomName, Price, PeopleMax, Floor);
        }
    }
}

Bước 5: Xây dựng hàm Main

using System;
using System.Collections.Generic;
using System.Text;

namespace HotelManager
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.OutputEncoding = Encoding.UTF8;
            List<Customer> customers = new List<Customer>();
            List<Hotel> hotels = new List<Hotel>();
            List<Book> books = new List<Book>();

            int choose;

            do
            {
                ShowMenu();
                choose = int.Parse(Console.ReadLine());

                switch (choose)
                {
                    case 1:
                        InputHotel(hotels);
                        break;
                    case 2:
                        DisplayHotel(hotels);
                        break;
                    case 3:
                        Booking(customers, hotels, books);
                        break;
                    case 4:
                        FindBookingAvaiable(hotels, books);
                        break;
                    case 5:

                        break;
                    case 6:

                        break;
                    case 7:
                        Console.WriteLine("Thoát!!!");
                        break;
                    default:
                        Console.WriteLine("Nhập sai!!!");
                        break;
                }
            } while (choose != 7);
        }

        static void FindBookingAvaiable(List<Hotel> hotels, List<Book> books)
        {
            if (hotels.Count == 0)
            {
                Console.WriteLine("Không có dữ liệu !!!");
                return;
            }

            Hotel currentHotel = null;
            for (; ; )
            {
                foreach (Hotel hotel in hotels)
                {
                    Console.WriteLine("Mã khách sạn: {0}, Tên khách sạn: {1}", hotel.HotelCode, hotel.Name);
                }
                string HotelCode = Console.ReadLine();
                foreach (Hotel hotel in hotels)
                {
                    if (hotel.HotelCode.Equals(HotelCode))
                    {
                        currentHotel = hotel;
                        break;
                    }
                }
                if (currentHotel != null)
                {
                    break;
                }
                Console.WriteLine("(Not Found) Nhập lại: ");
            }
            if (currentHotel.RoomList.Count == 0)
            {
                Console.WriteLine("Không có dữ liệu!!!");
                return;
            }

            Console.WriteLine("Ngày nhận phòng (dd/mm/YYYY): ");
            string dateTime = Console.ReadLine();
            DateTime CheckIn = DateTime.ParseExact(dateTime, "dd/MM/yyyy", null);

            Console.WriteLine("Ngày trả phòng (dd/mm/YYYY): ");
            dateTime = Console.ReadLine();
            DateTime CheckOut = DateTime.ParseExact(dateTime, "dd/MM/yyyy", null);

            //Tim kiem phong co the book
            //Room => co the booking
            //R001 => A1=>A2 & CheckIn => CheckOut : CheckIn > A2 hoac CheckOut < A1
            foreach (Room room in currentHotel.RoomList)
            {
                //Tim da danh sach booking cho phong room.
                List<Book> currentBooking = new List<Book>();
                foreach (Book book in books)
                {
                    if (book.HotelCode.Equals(currentHotel.HotelCode) && book.RoomNo.Equals(room.RoomNo))
                    {
                        currentBooking.Add(book);
                    }
                }
                //Kiem tra phong nay co kha nang book hay ko
                bool isFind = false;
                foreach (Book book in currentBooking)
                {
                    if (DateTime.Compare(book.CheckIn, CheckOut) > 0 || DateTime.Compare(book.CheckOut, CheckIn) < 0)
                    {
                        //OK
                    }
                    else
                    {
                        isFind = true;
                        break;
                    }
                }

                if (!isFind)
                {
                    Console.WriteLine("Phòng số: {0}, Tên phòng: {1}", room.RoomNo, room.RoomName);
                }
            }
        }

        static void Booking(List<Customer> customers, List<Hotel> hotels, List<Book> books)
        {
            Book book = new Book();
            book.Input(customers, hotels);

            books.Add(book);
        }

        static void DisplayHotel(List<Hotel> hotels)
        {
            foreach (Hotel hotel in hotels)
            {
                hotel.Display();
            }
        }

        static void InputHotel(List<Hotel> hotels)
        {
            for (; ; )
            {
                Hotel hotel = new Hotel();
                hotel.Input();

                hotels.Add(hotel);

                Console.WriteLine("Bạn có tiếp tụcc nhập hay không? Y/N:");
                string option = Console.ReadLine();
                if (option.ToUpper().Equals("N"))
                {
                    break;
                }
            }
        }

        static void ShowMenu()
        {
            Console.WriteLine("\nCHƯƠNG TRÌNH QUẢN LÝ KHÁCH SẠN C#");
            Console.WriteLine("*************************MENU**************************");
            Console.WriteLine("**   1. Nhâp thông tin khách sạn                     **");
            Console.WriteLine("**   2. Hiển thị thông tin khách sạn                 **");
            Console.WriteLine("**   3. Đặt phòng                                    **");
            Console.WriteLine("**   4. Tìm phòng trong                              **");
            Console.WriteLine("**   5. Thốnng kê doanh thu khách sạn                **");
            Console.WriteLine("**   6. Tìm kiếm thông tin khách hàng                **");
            Console.WriteLine("**   7. Thoát                                        **");
            Console.WriteLine("**   Chọn:                                           **");
            Console.WriteLine("*******************************************************");

        }
    }
}

Xem ví dụ

Bước 6: Nhấn Ctrl+F5 để chạy và xem kết quả

Chọn 1 nhập thông tin khách sạn

Chọn 2 xem thông tin khách sạn