C#实现航班预订系统完整攻略
目录
简介
航班预订系统是指通过计算机网络,提供适当的航班信息和相应的预订服务,让用户能够方便地进行航班查询和预订。在本文中,我们将使用C#语言实现一个简单的航班预订系统。
基本功能
这个航班预订系统具有以下基本功能:
- 用户可以以一种用户友好的方式查询航班信息。
- 用户可以选择要预订的航班,并进行预订。
- 用户可以查看预订的历史记录。
- 管理员可以管理航班信息和预订记录。
技术栈
本文中,我们将使用以下技术来实现这个航班预订系统:
- C#编程语言
- .NET框架(包括.NET Core和.NET Framework)
- ASP.NET Core和ASP.NET MVC框架
- Entity Framework Core
- SQL Server数据库
实现步骤
下面是实现这个航班预订系统的详细步骤。
步骤1:创建数据库
我们需要创建一个数据库,用于保存航班信息和预订记录。我们可以使用SQL Server管理工具进行创建。下面是一个简单的SQL语句,为您展示如何创建一个名为“FlightBooking”的数据库。
CREATE DATABASE FlightBooking;
步骤2:创建数据表
我们需要创建两个数据表,一个用于保存航班信息,另一个用于保存预订记录。下面是这两个表的结构。
航班表(Flight)
列名 | 数据类型 | 说明 |
---|---|---|
ID | int | 航班ID |
FlightNumber | varchar(50) | 航班号 |
FromCity | varchar(50) | 始发城市 |
ToCity | varchar(50) | 目的地城市 |
DepartureTime | datetime | 出发时间 |
ArrivalTime | datetime | 到达时间 |
Duration | int | 飞行时长 |
Price | decimal | 价格 |
CREATE TABLE Flight (
ID int PRIMARY KEY,
FlightNumber varchar(50) NOT NULL,
FromCity varchar(50) NOT NULL,
ToCity varchar(50) NOT NULL,
DepartureTime datetime NOT NULL,
ArrivalTime datetime NOT NULL,
Duration int NOT NULL,
Price decimal NOT NULL
);
预订记录表(Booking)
列名 | 数据类型 | 说明 |
---|---|---|
ID | int | 记录ID |
FlightID | int | 航班ID |
PassengerName | varchar(50) | 乘客姓名 |
BookedSeats | int | 预订的座位数 |
BookingTime | datetime | 预订时间 |
CREATE TABLE Booking (
ID int PRIMARY KEY,
FlightID int NOT NULL,
PassengerName varchar(50) NOT NULL,
BookedSeats int NOT NULL,
BookingTime datetime NOT NULL,
FOREIGN KEY (FlightID) REFERENCES Flight (ID)
);
步骤3:创建C#项目
我们可以使用Visual Studio来创建一个ASP.NET Core Web应用程序项目。在创建项目时,请选择MVC项目模板。这将创建一个带有控制器,视图和模型的项目。
步骤4:实现模型
我们需要实现两个模型:Flight和Booking。这些模型将映射到上面创建的Flight和Booking表。
public class Flight
{
public int ID { get; set; }
public string FlightNumber { get; set; }
public string FromCity { get; set; }
public string ToCity { get; set; }
public DateTime DepartureTime { get; set; }
public DateTime ArrivalTime { get; set; }
public int Duration { get; set; }
public decimal Price { get; set; }
}
public class Booking
{
public int ID { get; set; }
public int FlightID { get; set; }
public string PassengerName { get; set; }
public int BookedSeats { get; set; }
public DateTime BookingTime { get; set; }
}
步骤5:实现数据访问
我们可以使用Entity Framework Core来访问我们的数据库。我们需要实现一个DbContext,以及一个带有增删改查功能的FlightBookingRepository。
public class FlightBookingDbContext : DbContext
{
public FlightBookingDbContext(DbContextOptions<FlightBookingDbContext> options)
: base(options)
{
}
public DbSet<Flight> Flights { get; set; }
public DbSet<Booking> Bookings { get; set; }
}
public class FlightBookingRepository
{
private readonly FlightBookingDbContext _dbContext;
public FlightBookingRepository(FlightBookingDbContext dbContext)
{
_dbContext = dbContext;
}
public async Task<List<Flight>> GetFlightsAsync()
{
return await _dbContext.Flights.ToListAsync();
}
public async Task<Flight> GetFlightAsync(int id)
{
return await _dbContext.Flights.FindAsync(id);
}
public async Task<int> BookFlightAsync(int flightId, string passengerName, int bookedSeats)
{
var flight = await _dbContext.Flights.FindAsync(flightId);
if (flight == null)
{
return -1; // invalid flight id
}
if (bookedSeats > 20 || flight.BookedSeats + bookedSeats > 20)
{
return -2; // too many seats
}
flight.BookedSeats += bookedSeats;
var booking = new Booking
{
FlightID = flightId,
PassengerName = passengerName,
BookedSeats = bookedSeats,
BookingTime = DateTime.Now
};
_dbContext.Bookings.Add(booking);
await _dbContext.SaveChangesAsync();
return booking.ID;
}
public async Task<List<Booking>> GetBookingsAsync()
{
return await _dbContext.Bookings.Include(b => b.Flight).ToListAsync();
}
public async Task<List<Booking>> GetBookingsForFlightAsync(int flightId)
{
return await _dbContext.Bookings.Include(b => b.Flight).Where(b => b.FlightID == flightId).ToListAsync();
}
}
步骤6:实现控制器
我们需要实现两个控制器:FlightsController和BookingsController。这些控制器将处理用户请求,并将它们传递给相应的服务(即FlightBookingRepository),以供处理。
public class FlightsController : Controller
{
private readonly FlightBookingRepository _repository;
public FlightsController(FlightBookingRepository repository)
{
_repository = repository;
}
public async Task<IActionResult> Index()
{
var flights = await _repository.GetFlightsAsync();
return View(flights);
}
public async Task<IActionResult> Book(int id)
{
var flight = await _repository.GetFlightAsync(id);
if (flight == null)
{
return NotFound();
}
return View(flight);
}
[HttpPost]
public async Task<IActionResult> Book(int flightId, string passengerName, int bookedSeats)
{
var result = await _repository.BookFlightAsync(flightId, passengerName, bookedSeats);
if (result == -1)
{
ModelState.AddModelError("", "Invalid flight ID.");
}
else if (result == -2)
{
ModelState.AddModelError("", "Too many seats.");
}
if (!ModelState.IsValid)
{
var flight = await _repository.GetFlightAsync(flightId);
if (flight == null)
{
return NotFound();
}
return View(flight);
}
return RedirectToAction("Index");
}
}
public class BookingsController : Controller
{
private readonly FlightBookingRepository _repository;
public BookingsController(FlightBookingRepository repository)
{
_repository = repository;
}
public async Task<IActionResult> Index()
{
var bookings = await _repository.GetBookingsAsync();
return View(bookings);
}
public async Task<IActionResult> Detail(int flightId)
{
var bookings = await _repository.GetBookingsForFlightAsync(flightId);
return View(bookings);
}
}
步骤7:实现视图
我们需要实现一些视图,以展示查询航班信息和预订记录的界面。下面是一些示例视图。
主页(Index.cshtml)
@model List<Flight>
@foreach (var flight in Model)
{
<div>
<a href="@Url.Action("Book", new { id = flight.ID })">@flight.FlightNumber</a>
from @flight.FromCity to @flight.ToCity
on @flight.DepartureTime.ToShortDateString() @flight.DepartureTime.ToShortTimeString()
for @flight.Duration minutes
$@flight.Price per seat
(booked seats: @flight.BookedSeats)
</div>
}
预订页(Book.cshtml)
@model Flight
<h2>@Model.FlightNumber from @Model.FromCity to @Model.ToCity</h2>
<form method="post">
<div>
<label for="passengerName">Name:</label>
<input type="text" id="passengerName" name="passengerName" />
</div>
<div>
<label for="bookedSeats">Seats:</label>
<input type="number" id="bookedSeats" name="bookedSeats" min="1" max="20" />
</div>
<button type="submit">Submit</button>
</form>
<div>
<a href="@Url.Action("Index")">Back to list</a>
</div>
预订记录页(Index.cshtml)
@model List<Booking>
@foreach (var booking in Model)
{
<div>
<a href="@Url.Action("Detail", new { flightId = booking.FlightID })">@booking.PassengerName</a>
booked @booking.BookedSeats seats on
@booking.Flight.FlightNumber
(from @booking.Flight.FromCity to @booking.Flight.ToCity on @booking.Flight.DepartureTime.ToShortDateString())
at @booking.BookingTime.ToShortDateString() @booking.BookingTime.ToShortTimeString()
</div>
}
预订记录详情页(Detail.cshtml)
@model List<Booking>
<h2>Booking Detail</h2>
<table>
<tr>
<th>Passenger Name</th>
<th>Seats</th>
</tr>
@foreach (var booking in Model)
{
<tr>
<td>@booking.PassengerName</td>
<td>@booking.BookedSeats</td>
</tr>
}
</table>
<div>
<a href="@Url.Action("Index")">Back to list</a>
</div>
步骤8:运行应用程序
我们可以直接在Visual Studio中运行这个应用程序,或者使用命令行运行。
以上就是C#实现一个简单的航班预订系统的完整攻略。如果您想深入了解,可以参考Microsoft官方文档。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现航班预订系统 - Python技术站