Файл: Разработка приложения справочной службы аэропорта.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 29.03.2023

Просмотров: 871

Скачиваний: 13

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

ЗАКЛЮЧЕНИЕ

Целью данной работы была разработка программного обеспечения «Справочная служба аэропорта», как пример создания небольшого сервиса, для предоставления услуг справочной службы пользователям о наличии рейсов по выбранным маршрутам. Также на примере производства данного продукта, была цель показать популярные на данный момент инструменты и способы разработки web приложения.

В процессе создания данного приложения были изучены:

  1. Актуальные средства и методики производства программного обеспечения. Проведен анализ рынка производства ПО и было выявлено, что .Net технологии в производстве web приложений стабильно входят в топ технологий данного сегмента;
  2. Ряд фреймворков, без помощи которых современный программист вряд ли обойдется в процессе трудовой деятельности, так как данные средства значительно повышают производительность труда и снижают порог вхождения в продакшн производство программных продуктов;
  3. Паттерн MVC. Также был эффективно внедрен при разработке приложения. Была дана высшая оценка такому подходу, так как при его использовании можно добиться высокого процента покрытия кода тестами, ввиду независимости частей программы друг от друга. Преимуществом также является возможность масштабирования и беспрепятственного написания кода, большой командой разработчиков;
  4. Спецификация языка С# и LINQ;
  5. Спецификация языка разметки HTML5;

Также проведен сравнительный анализ сред разработки программного обеспечения. Как вывод можно смело заявить, что для .Net разработки Visual Studio остается вне конкуренции.

Было разработано и приложение «Справочная служба аэропорта», в котором было реализована доступ клиента к базе данных рейсов данного аэропорта. Изображение 20 отображает результат ввода клиентом запроса на рейс Москва-Лондон.

Изображение 20. Результат работы приложения

Также приложение позволяет просмотреть все рейсы, без запроса конкретного маршрута (Изображение 21. Таблица всех рейсов).

Изображение 21. Таблица всех рейсов

Данное приложение весьма гибкое и масштабируемое. В качестве дальнейшего развития, можно реализовать собственный сервис по приобретению билетов на рейсы, аренды автомобилей от парковки аэропорта, предоставление номеров отеля и так далее.

В заключении можно сказать, что данный программный продукт («Справочная служба аэропорта») является законченной, полнофункциональной программой, способной к дальнейшему масштабированию и улучшению в случае такой необходимости.


СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

  1. Непейвода Н.Н., Скопин И.Н. Основания программирования–Институт компьютерных исследований, 2003.
  2. Журавлева Т.Ю. Системное и прикладное программное обеспечение: Учебное пособие – Издательство Московского государственного открытого университета, 2010.
  3. Зинкевич В.П. Вычислительная техника и программирование: учебное пособие – Издательство Московского государственного открытого университета, 2011.
  4. Стив Макконелл, Совершенный код, 2005.
  5. Роберт Мартин. Идеальный программист. Как стать профессионалом разработки ПО, 2017.
  6. Эндрю Стиллмен - Изучаем C#, 3-е издание, 2014.
  7. Документация по C#, https://docs.microsoft.com/ru-ru/dotnet/csharp/.
  8. Джеффри Рихтер. CLR via C#. Программирование на платформе Microsoft.NET Framework 4.5 на языке C#, 2015.
  9. Шевчук А., Охрименко Д., Косьянов А. Design Patterns via C#. Приемы объектно-ориентированного проектирования 2015.
  10. Брайан П. Хоган. HTML5 и CSS3. Веб-разработка по стандартам нового поколения, 2014.
  11. Дженнифер Роббинс: HTML5. Карманный справочник, 2019.
  12. Entity Framework Core 2 для ASP.NET Core MVC для профессионалов | Фримен Адам, 2019.
  13. Pro ASP.NET MVC 5 Адам Фримен, 2013.
  14. Джеймс Чамберс, Дэвид Пэккетт, Сфймон Тиммс. ASP.NET Core Разработка приложений, 2018.
  15. Фримен А. - ASP.NET Core MVC с примерами на C# для профессионалов, 2017.
  16. Документация по ASP.NET Core, https://docs.microsoft.com/en-us/aspnet/core/?view=aspnetcore-3.1.
  17. Википедия. https://ru.wikipedia.org.
  18. Документация по Visual Studio. https://visualstudio.microsoft.com/ru/.
  19. Документация по Bootstrap 4 на русском языке. https://bootstrap-4.ru/.
  20. Документация по EF Core. https://docs.microsoft.com/ru-ru/ef/core/.
  21. Карл И. Вигерс Разработка требований к программному обеспечению – Русская Редакция, 2004.

ПРИЛОЖЕНИЯ

Приложение 1. Модель данных.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Threading.Tasks;

namespace Airport_Info_Service.Models

{

public class Flight

{

public int Id { get; set; }

public string Number { get; set; }

public string From { get; set; }

public string To { get; set; }

public string DepartureDateTime { get; set; }

public string Status { get; set; }

}

public class FlightViewModel

{

public string From { get; set; }

public string To { get; set; }

}

}

Приложение 2. Контекст Данных.

using Microsoft.EntityFrameworkCore;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Threading.Tasks;

namespace Airport_Info_Service.Models

{

public class AppDbContext : DbContext

{

public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)

{

Database.EnsureCreated();

}

public DbSet<Flight> Flights { get; set; }


}

}

Приложение 3. Миграция данных.

using Microsoft.EntityFrameworkCore.Migrations;

namespace Airport_Info_Service.Migrations

{

public partial class first : Migration

{

protected override void Up(MigrationBuilder migrationBuilder)

{

migrationBuilder.CreateTable(

name: "Flights",

columns: table => new

{

Id = table.Column<int>(nullable: false)

.Annotation("SqlServer:Identity", "1, 1"),

Number = table.Column<string>(nullable: true),

From = table.Column<string>(nullable: true),

To = table.Column<string>(nullable: true),

DepartureDateTime = table.Column<string>(nullable: true),

Status = table.Column<string>(nullable: true)

},

constraints: table =>

{

table.PrimaryKey("PK_Flights", x => x.Id);

});

}

protected override void Down(MigrationBuilder migrationBuilder)

{

migrationBuilder.DropTable(

name: "Flights");

}

}

}

Приложение 4. Снимок модели данных.

using Airport_Info_Service.Models;

using Microsoft.EntityFrameworkCore;

using Microsoft.EntityFrameworkCore.Infrastructure;

using Microsoft.EntityFrameworkCore.Metadata;

using Microsoft.EntityFrameworkCore.Storage.ValueConversion;

namespace Airport_Info_Service.Migrations

{

[DbContext(typeof(AppDbContext))]

partial class AppDbContextModelSnapshot : ModelSnapshot

{

protected override void BuildModel(ModelBuilder modelBuilder)

{

#pragma warning disable 612, 618

modelBuilder

.HasAnnotation("ProductVersion", "3.1.0")

.HasAnnotation("Relational:MaxIdentifierLength", 128)

.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

modelBuilder.Entity("Airport_Info_Service.Models.Flight", b =>

{

b.Property<int>("Id")

.ValueGeneratedOnAdd()

.HasColumnType("int")

.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

b.Property<string>("DepartureDateTime")

.HasColumnType("nvarchar(max)");

b.Property<string>("From")

.HasColumnType("nvarchar(max)");

b.Property<string>("Number")

.HasColumnType("nvarchar(max)");

b.Property<string>("Status")

.HasColumnType("nvarchar(max)");

b.Property<string>("To")

.HasColumnType("nvarchar(max)");

b.HasKey("Id");

b.ToTable("Flights");

});

#pragma warning restore 612, 618

}

}

}

Приложение 5. Layout.

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="utf-8" />

<meta name="viewport" content="width=device-width, initial-scale=1.0" />

<title>@ViewData["Title"] - Airport Info Service</title>

<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />

<link rel="stylesheet" href="~/css/site.css" />

</head>

<body>

<header>

<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">

<div class="container">

<a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">Справочная служба аэропорта</a>

<button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse" aria-controls="navbarSupportedContent"

aria-expanded="false" aria-label="Toggle navigation">

<span class="navbar-toggler-icon"></span>

</button>

<div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">

<ul class="navbar-nav flex-grow-1">

<li class="nav-item">

<a class="nav-link" asp-action="List" asp-controller="Home">Все рейсы</a>

</li>

<li class="nav-item">

<a class="nav-link text-danger">@DateTime.Now</a>

</li>

</ul>

</div>

</div>

</nav>

</header>

<div class="container">


<main role="main" class="pb-3">

@RenderBody()

</main>

</div>

<footer class="border-top footer text-muted">

<div class="container">

&copy; 2020 - Airport Info Service

</div>

</footer>

<script src="~/lib/jquery/dist/jquery.min.js"></script>

<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>

<script src="~/js/site.js" asp-append-version="true"></script>

@RenderSection("Scripts", required: false)

</body>

</html>

Приложение 6. Index.

@model FlightViewModel

@{

ViewData["Title"] = "Home Page";

}

<div class="row">

<div class="col-md-6">

<form id="profile-form" method="post">

<div asp-validation-summary="All" class="text-danger"></div>

<div class="form-group">

<label asp-for="From">Откуда</label>

<input asp-for="From" class="form-control" />

</div>

<div class="form-group">

<label asp-for="To">Куда</label>

<input asp-for="To" class="form-control" />

</div>

<button type="submit"

class="btn btn-primary">

Ввод

</button>

</form>

</div>

</div>

Приложение 7. NotFound.

@model FlightViewModel

@{

ViewData["Title"] = "Error";

}

<div class="container">

<h3>К сожалению, по данному маршруту рейсов не найдено!</h3>

<br />

<a class="btn btn-dark btn-sm" asp-action="Index" asp-controller="Home">Проверить другой рейс</a>

</div>

Приложение 8. ViewImports.

@using Airport_Info_Service

@using Airport_Info_Service.Models

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

Приложение 9. ViewStart.

@{

Layout = "_Layout";

}

Приложение 10. appsettings.

{

"Logging": {

"LogLevel": {

"Default": "Information",

"Microsoft": "Warning",

"Microsoft.Hosting.Lifetime": "Information"

}

},

"AllowedHosts": "*",

"ConnectionStrings": {

"AppDbContext": "Server=(localdb)\\mssqllocaldb;Database=InfoDB;Trusted_Connection=True;MultipleActiveResultSets=true"

}

}

Приложение 11. Контроллер.

using System;

using System.Collections.Generic;

using System.Diagnostics;

using System.Linq;

using System.Threading.Tasks;

using Microsoft.AspNetCore.Mvc;

using Microsoft.Extensions.Logging;

using Airport_Info_Service.Models;

namespace Airport_Info_Service.Controllers

{

public class HomeController : Controller

{

private AppDbContext db;

public HomeController(AppDbContext context)

{

db = context;

}

[HttpGet]

public IActionResult Index()

{

return View();

}

[HttpPost]

public IActionResult Index(FlightViewModel flightViewModel)

{

if (ModelState.IsValid)

{

if(flightViewModel != null)

{

List<Flight> flights = db.Flights.Where(x => x.To == flightViewModel.To && x.From == flightViewModel.From).ToList();

if(flights.Count != 0)

{

return View("List", flights);

}

else

{

return View("NotFound");

}

}

else

{

return View();

}

}

else

{

return View();

}

}

public IActionResult List(List<Flight> flights)

{

if (flights.Count != 0)

{

return View(flights);

}

else

{

flights = db.Flights.ToList();

return View(flights);

}

}

}

}

Приложение 12. Startup.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Threading.Tasks;

using Microsoft.AspNetCore.Builder;

using Microsoft.AspNetCore.Hosting;

using Microsoft.AspNetCore.HttpsPolicy;

using Microsoft.Extensions.Configuration;