Разработка приложения для оценивания фильмов

Создание многоуровневого приложения с Web-интерфейсом выставления оценки фильму и просмотра оценок других пользователей. Клиентская часть приложения. Разработка многопользовательского веб-приложения на ASP.NET MVC 3 с разграничением доступа к данным.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 22.02.2015
Размер файла 949,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru

Размещено на http://www.allbest.ru

Курсовая работа

по дисциплине: Технологии программирования

Разработка приложения для оценивания фильмов

Содержание

1. Постановка задачи

1.1 Характеристика объекта

1.2 Потенциал внедрения

1.3 Краткое техническое задание

2. Проектирование системы

2.1 Моделирование системы

2.2 Проектирование БД

2.3 Проектирование интерфейса

3. Разработка системы

3.1 Средства реализации

3.2 Этапы реализации

3.3 Код приложения

Заключение

Список литературы

Приложение

1. Постановка задачи

Целью данной курсовой работы является создание многоуровневого приложения с Web-интерфейсом. В связи с чем, мной были поставлены следующие задачи:

Создание базы данных и её связь с приложением

Разграничение доступа к данным

Создание понятного и удобного интерфейса для пользователей

Создание удобного интерфейса для администратора

1.1 Характеристика объекта

В качестве объекта автоматизации мной был выбран процесс выставления оценки фильму и просмотра оценок других пользователей.

1.2 Потенциал внедрения

Данное приложение предназначено для помощи при выборе фильма по различным категориям: жанрам, стране, актерам, оценкам других пользователей и т.д.

Целевая аудитория - люди, которые не могут самостоятельно определиться с выбором, хотели бы найти что-то подходящее им по атмосфере или настроению или другим тэгам.

Пользователи могут оставлять свое мнение о фильме и просматривать все мнения, которые оставили другие пользователи, чтобы решить, стоит смотреть фильм или нет.

1.3 Краткое техническое задание

Разрабатываемое приложение должно выполнять следующие функции:

Регистрация пользователей;

Удобный интерфейс для просмотра мнений и оценивания фильмов;

Предоставление пользователям возможности оценить фильм по различным категориям;

2. Проектирование системы

2.1 Моделирование системы

IDEF0

2.2 Проектирование БД

ER-диаграмма

Основные сущности в базе данных: пользователь, фильм.

Размещено на http://www.allbest.ru

Размещено на http://www.allbest.ru

Инфологическое проектирование

Получаем следующую схему таблиц и связи между ними:

Users

Marks

Films

GenreFilm

Genre

UserId

UserName

Age

GenreLike

Filmlike

ActorLike

AboutMe

idMark

UserId

FilmId

YourMark

CoolView

CoolTrack

QualIm

QualSo

Book

Com

FilmId

FilmName

Year

AgeCens

Time

Reiting

FilmNameEn

PicUrl

id

FilmId

genreId

genreId

genreName

Полная схема связей между таблицами БД в приложении 1.

2.3 Проектирование интерфейса

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

Меню предназначается для навигации по сайту и предлагает ссылки на все страницы доступные данной категории пользователя. Для зарегистрированных пользователей и администратора меню дополняется некоторыми ссылками. При переходе по ссылкам меню его вид не изменяется.

Страница регистрации. Эта страница предназначена для регистрации пользователя. Она содержит форму регистрации с полями, необходимыми для создания учетной записи. Если регистрация прошла успешно, пользователь перенаправляется на страницу, которая сообщает ему об успешной регистрации. После этого, а также когда пользователь заходит в приложение под своим логином, в верхнем правом углу видно его логин и ссылку для смены пароля.

Основное содержание страницы меняется в зависимости от местонахождения пользователя.

Главная страница. Эта страница отображается при первом входе на сайт, ее оформление и содержание рассказывает пользователю о приложении.

На странице фильмов присутствует выбор фильма, при нажатии показывается подробная информация о фильме со всеми оценками к этому фильму.

На странице оценивания пользователь может выбрать и оценить любой фильм, присутствующий в базе данных приложения, а также просмотреть и отредактировать свои оценки.

На странице данных пользователя, доступной для всех зарегистрированных пользователей есть возможность изменить свои данные.

На странице доступной только для администратора присутствует возможность редактировать все базы данных приложения.

3. Разработка системы

3.1 Средства реализации

В качестве средства проектирования базы данных был выбран Microsoft SQL Server.

Приложение разработано в среде Microsoft Visual Studio 2010, на технологии ASP .NET MVC, на языке программирования C#. При разработке была использована стратегия Code First. Для связи с базой используется EntityFramework. Клиентская часть приложения использует HTML5. Приложение является многопользовательским и для этого используются объекты Membership.

3.2 Этапы реализации

Сначала была выбрана тема курсовой работы и функции, которые должно выполнять приложение. На основе этого была спроектирована и заполнена база данных. Следующим этапом был спроектирован общий вид интерфейса. Далее, были программно реализованы страницы для пользователей, не зарегистрированных посетителей и администратора. Далее приложение было протестировано и откорректировано на ошибки. Интерфейс был дополнен из соображений удобства.

3.3 Код приложения

Модель

Таблица Фильмы

namespace Filmion.Models

{

[Bind(Exclude = "FilmId")]

public class Film

{

[ScaffoldColumn(false)]

public int FilmId { get; set; }

[DisplayName("Название")]

[Required(ErrorMessage = "Введите название фильма")]

[StringLength(200)]

public string FilmName { get; set; }

[DisplayName("Год выхода")]

public int Year { get; set; }

[DisplayName("Возрастной ценз")]

public int AgeCens { get; set; }

[DisplayName("Продолжительность")]

public int Time { get; set; }

[DisplayName("Рейтинг")]

public decimal Reiting { get; set; }

[DisplayName("Оригинальное название")]

[StringLength(200)]

public string FilmNameEn { get; set; }

[DisplayName("Описание фильма")]

[StringLength(2000)]

public string Description { get; set; }

[DisplayName("URL постера")]

[StringLength(1024)]

public string PicUrl { get; set; }

public List<GenreFilm> GenreFilm { get; set; }

public List<ActorFilm> ActorFilm { get; set; }

public List<ProduserFilm> ProduserFilm { get; set; }

public List<CountryFilm> CountryFilm { get; set; }

public List<TagFilm> TagFilm { get; set; }

public virtual List<Mark> Mark { get; set; }

}

}

Таблица Жанры (модели таблиц Актеры, Продюсеры, Тэги и Страны выглядят таким же образом)

namespace Filmion.Models

{

[Bind(Exclude = "GenreId")]

public class Genre

{

[ScaffoldColumn(false)]

public int GenreId { get; set; }

[DisplayName("Жанр")]

[Required(ErrorMessage = "Введите название жанра")]

[StringLength(50)]

public string GenreName { get; set; }

public List<GenreFilm> GenreFilm { get; set; }

}

}

Связь жанров с фильмами

namespace Filmion.Models

{

[Bind(Exclude = "GenreFilmId")]

public class GenreFilm

{

[ScaffoldColumn(false)]

public int GenreFilmId { get; set; }

[DisplayName("Фильм")]

public int FilmId { get; set; }

[DisplayName("Жанр")]

public int GenreId { get; set; }

public virtual Film Film { get; set; }

public virtual Genre Genre { get; set; }

}

}

Таблица Оценок

namespace Filmion.Models

{

[Bind(Exclude = "MarkId")]

public class Mark

{

[ScaffoldColumn(false)]

public int MarkId { get; set; }

[DisplayName("Пользователь")]

public int UserId { get; set; }

[DisplayName("Фильм")]

public int FilmId { get; set; }

[DisplayName("Качество изображения")]

public int QualIm { get; set; }

[DisplayName("Качество звука")]

public int QualSo { get; set; }

[DisplayName("Ваша оценка фильму")]

public int YourMark { get; set; }

[DisplayName("Красивые виды")]

[StringLength(3)]

public string CoolView { get; set; }

[DisplayName("Крутой саундтрек")]

[StringLength(3)]

public string CoolTrack { get; set; }

[DisplayName("По мотивам книги")]

[StringLength(30)]

public string Book { get; set; }

[DisplayName("Комментарий")]

[StringLength(2000)]

public string Comment { get; set; }

public virtual Film Film { get; set; }

public virtual User User { get; set; }

}

}

Таблица Пользователя

namespace Filmion.Models

{

[Bind(Exclude = "UserId")]

public class User

{

[ScaffoldColumn(false)]

public int UserId { get; set; }

[DisplayName("Имя пользователя")]

[StringLength(100)]

public string UserName { get; set; }

[DisplayName("Возраст")]

public int Age { get; set; }

[DisplayName("Любимые жанры")]

[StringLength(200)]

public string GenreLike { get; set; }

[DisplayName("Любимые фильмы")]

[StringLength(1000)]

public string Filmlike { get; set; }

[DisplayName("Любимые актеры")]

[StringLength(1000)]

public string ActorLike { get; set; }

[DisplayName("О себе")]

[StringLength(1000)]

public string AboutMe { get; set; }

public List<Mark> Mark { get; set; }

}

}

Класс целостности

using System.Data.Entity;

namespace Filmion.Models

{

public class FilmionEntities : DbContext

{

public DbSet<Genre> Genre { get; set; }

public DbSet<Country> Country { get; set; }

public DbSet<Actor> Actor { get; set; }

public DbSet<Produser> Produser { get; set; }

public DbSet<GenreFilm> GenreFilm { get; set; }

public DbSet<CountryFilm> CountryFilm { get; set; }

public DbSet<ActorFilm> ActorFilm { get; set; }

public DbSet<ProduserFilm> ProduserFilm { get; set; }

public DbSet<TagFilm> TagFilm { get; set; }

public DbSet<Film> Film { get; set; }

public DbSet<Tag> Tag { get; set; }

public DbSet<Category> Category { get; set; }

public DbSet<User> User { get; set; }

public DbSet<Mark> Mark { get; set; }

}

}

Контроллеры

Случайный фильм

namespace Filmion.Controllers

{

public class RandomFilmController : Controller

{

FilmionEntities DB = new FilmionEntities();

public ActionResult Index()

{

DbSet<Film> films = DB.Film;

int[] array = (from film in films select film.FilmId).ToArray();

Random rand=new Random();

int random=rand.Next(0,array.Length);

var randomfilm = DB.Film.Find(array[random]);

return View(randomfilm);

}

}

}

Создание, изменение, удаление жанров

namespace Filmion.Controllers

{

public class GenreManagerController : Controller

{

private FilmionEntities db = new FilmionEntities();

public ViewResult Index()

{

return View(db.Genre.ToList());

}

public ViewResult Details(int id)

{

Genre genre = db.Genre.Find(id);

return View(genre);

}

public ActionResult Create()

{

return View();

}

[HttpPost]

public ActionResult Create(Genre genre)

{

if (ModelState.IsValid)

{

db.Genre.Add(genre);

db.SaveChanges();

return RedirectToAction("Index");

}

return View(genre);

}

public ActionResult Edit(int id)

{

Genre genre = db.Genre.Find(id);

return View(genre);

}

[HttpPost]

public ActionResult Edit(Genre genre)

{

if (ModelState.IsValid)

{

db.Entry(genre).State = EntityState.Modified;

db.SaveChanges();

return RedirectToAction("Index");

}

return View(genre);

}

public ActionResult Delete(int id)

{

Genre genre = db.Genre.Find(id);

return View(genre);

}

[HttpPost, ActionName("Delete")]

public ActionResult DeleteConfirmed(int id)

{

Genre genre = db.Genre.Find(id);

db.Genre.Remove(genre);

db.SaveChanges();

return RedirectToAction("Index");

}

protected override void Dispose(bool disposing)

{

db.Dispose();

base.Dispose(disposing);

}

}

}

Добавление связи жанра с фильмом

namespace Filmion.Controllers

{

public class GenreFilmManagerController : Controller

{

private FilmionEntities db = new FilmionEntities();

public ActionResult Index(int id)

{

var genrefilm = db.GenreFilm.Where(a => a.FilmId == id).ToList();

return PartialView(genrefilm);

}

public ActionResult Create()

{

ViewBag.FilmId = new SelectList(db.Film, "FilmId", "FilmName");

ViewBag.GenreId = new SelectList(db.Genre, "GenreId", "GenreName");

return View();

}

[HttpPost]

public ActionResult Create(GenreFilm genrefilm)

{

if (ModelState.IsValid)

{

db.GenreFilm.Add(genrefilm);

db.SaveChanges();

return RedirectToAction("Index", "FilmManager");

}

ViewBag.FilmId = new SelectList(db.Film, "FilmId", "FilmName", genrefilm.FilmId);

ViewBag.GenreId = new SelectList(db.Genre, "GenreId", "GenreName", genrefilm.GenreId);

return View(genrefilm);

}

public ActionResult Edit(int id)

{

GenreFilm genrefilm = db.GenreFilm.Find(id);

ViewBag.GenreId = new SelectList(db.Genre, "GenreId", "GenreName", genrefilm.GenreId);

return View(genrefilm);

}

[HttpPost]

public ActionResult Edit(GenreFilm genrefilm)

{

if (ModelState.IsValid)

{

db.Entry(genrefilm).State = EntityState.Modified;

db.SaveChanges();

return RedirectToAction("Index", "FilmManager");

}

ViewBag.GenreId = new SelectList(db.Genre, "GenreId", "GenreName", genrefilm.GenreId);

return View(genrefilm);

}

public ActionResult Delete(int id)

{

GenreFilm genrefilm = db.GenreFilm.Find(id);

return View(genrefilm);

}

[HttpPost, ActionName("Delete")]

public ActionResult DeleteConfirmed(int id)

{

GenreFilm genrefilm = db.GenreFilm.Find(id);

db.GenreFilm.Remove(genrefilm);

db.SaveChanges();

return RedirectToAction("Index", "FilmManager");

}

protected override void Dispose(bool disposing)

{

db.Dispose();

base.Dispose(disposing);

}

}

}

Создание, изменение редактирование фильма

namespace Filmion.Controllers

{

public class FilmManagerController : Controller

{

private FilmionEntities db = new FilmionEntities();

//

// GET: /FilmManager/

public ViewResult Index()

{

return View(db.Film.ToList());

}

public ActionResult Create()

{

return View();

}

[HttpPost]

public ActionResult Create(Film film)

{

if (ModelState.IsValid)

{

db.Film.Add(film);

db.SaveChanges();

return RedirectToAction("Index");

}

return View(film);

}

public ActionResult Edit(int id)

{

Film film = db.Film.Find(id);

return View(film);

}

[HttpPost]

public ActionResult Edit(Film film)

{

if (ModelState.IsValid)

{

db.Entry(film).State = EntityState.Modified;

db.SaveChanges();

return RedirectToAction("Index");

}

return View(film);

}

public ActionResult Delete(int id)

{

Film film = db.Film.Find(id);

return View(film);

}

[HttpPost, ActionName("Delete")]

public ActionResult DeleteConfirmed(int id)

{

Film film = db.Film.Find(id);

db.Film.Remove(film);

db.SaveChanges();

return RedirectToAction("Index");

}

protected override void Dispose(bool disposing)

{

db.Dispose();

base.Dispose(disposing);

}

}

}

Контроллер оценок

namespace Filmion.Controllers

{

public class MarkController : Controller

{

private FilmionEntities db = new FilmionEntities();

public ViewResult Index()

{

var mark = db.Mark.Include(m => m.Film).Include(m => m.User);

return View(mark.ToList());

}

public ActionResult MarkFilm(int id)

{

var marks = db.Mark.Where(a => a.FilmId == id).ToList();

return PartialView(marks);

}

public ViewResult MarkUser()

{

var marks = db.Mark.Where(a => a.User.UserName == User.Identity.Name).ToList();

return View(marks);

}

public ViewResult Details(int id)

{

Mark mark = db.Mark.Find(id);

return View(mark);

}

public ActionResult Create()

{

ViewBag.FilmId = new SelectList(db.Film, "FilmId", "FilmName");

return View();

}

[HttpPost]

public ActionResult Create(Mark mark)

{

var user = db.User.Single(a => a.UserName == User.Identity.Name);

mark.UserId = user.UserId;

if (ModelState.IsValid)

{

db.Mark.Add(mark);

db.SaveChanges();

return RedirectToAction("MarkUser");

}

ViewBag.FilmId = new SelectList(db.Film, "FilmId", "FilmName", mark.FilmId);

return View(mark);

}

public ActionResult Edit(int id)

{

Mark mark = db.Mark.Find(id);

ViewBag.FilmId = new SelectList(db.Film, "FilmId", "FilmName", mark.FilmId);

return View(mark);

}

[HttpPost]

public ActionResult Edit(Mark mark)

{

if (ModelState.IsValid)

{

db.Entry(mark).State = EntityState.Modified;

db.SaveChanges();

return RedirectToAction("MarkUser");

}

ViewBag.FilmId = new SelectList(db.Film, "FilmId", "FilmName", mark.FilmId);

return View(mark);

}

public ActionResult Delete(int id)

{

Mark mark = db.Mark.Find(id);

return View(mark);

}

[HttpPost, ActionName("Delete")]

public ActionResult DeleteConfirmed(int id)

{

Mark mark = db.Mark.Find(id);

db.Mark.Remove(mark);

db.SaveChanges();

return RedirectToAction("MarkUser");

}

protected override void Dispose(bool disposing)

{

db.Dispose();

base.Dispose(disposing);

}

}

}

Контроллер пользователя

namespace Filmion.Controllers

{

public class UserController : Controller

{

private FilmionEntities db = new FilmionEntities();

public ViewResult Index()

{

return View(db.User.First(d=>d.UserName == User.Identity.Name));

}

public ViewResult Details(int id)

{

User user = db.User.Find(id);

return View(user);

}

public ActionResult Create()

{

return View();

}

[HttpPost]

public ActionResult Create(User user)

{

user.UserName = User.Identity.Name;

if (ModelState.IsValid)

{

db.User.Add(user);

db.SaveChanges();

return RedirectToAction("Index");

}

return View(user);

}

public ActionResult Edit(int id)

{

User user = db.User.Find(id);

return View(user);

}

[HttpPost]

public ActionResult Edit(User user)

{

user.UserName = User.Identity.Name;

if (ModelState.IsValid)

{

db.Entry(user).State = EntityState.Modified;

db.SaveChanges();

return RedirectToAction("Index");

}

return View(user);

}

protected override void Dispose(bool disposing)

{

db.Dispose();

base.Dispose(disposing);

}

}

}

Контроллер просмотра информации о фильмах

namespace Filmion.Controllers

{

public class FilmsController : Controller

{

FilmionEntities DB = new FilmionEntities();

public ActionResult Index()

{

var film = DB.Film.ToList();

return View(film);

}

public ActionResult GenreList()

{

var genres = DB.Genre.ToList();

return PartialView(genres);

}

public ActionResult Views(int id)

{

var genreFilm = DB.GenreFilm.Where(a => a.GenreId == id).ToList();

return View(genreFilm);

}

public ActionResult Mores(int Id)

{

var film = DB.Film.Find(Id);

return View(film);

}

}

}

Контроллер для выведения списков жанров, актеров и др. для конкретного фильма

namespace Filmion.Controllers

{

public class ListController : Controller

{

private FilmionEntities db = new FilmionEntities();

public ActionResult CountryList(int id)

{

var countryfilm = db.CountryFilm.Where(a => a.FilmId == id).ToList();

return PartialView(countryfilm);

}

public ActionResult ActorList(int id)

{

var actorfilm = db.ActorFilm.Where(a => a.FilmId == id).ToList();

return PartialView(actorfilm);

}

public ActionResult GenreList(int id)

{

var genrefilm = db.GenreFilm.Where(a => a.FilmId == id).ToList();

return PartialView(genrefilm);

}

public ActionResult ProduserList(int id)

{

var produserfilm = db.ProduserFilm.Where(a => a.FilmId == id).ToList();

return PartialView(produserfilm);

}

public ActionResult TagList(int id)

{

var tagfilm = db.TagFilm.Where(a => a.FilmId == id).ToList();

return PartialView(tagfilm);

}

}

}

Заключение

В данной курсовой работе были выполнены поставленные задачи, а именно:

Была создана база данных на MicrosoftSQLServer 2008;

Было разработано многопользовательское веб-приложение на ASP.NET MVC 3 с разграничением доступа к данным;

Был разработан простой в понимании интерфейс;

Приложение выполняет все функции прописанные в техническом задании.

приложение интерфейс фильм

Cписок литературы

1.Алекс Макки - Введение в .NET 4.0 и VisualStudio 2010 для профессионалов

2.Эндрю Троелсен- Язык программирования C# 2010 и платформа .NET 4

3.http://msdn.microsoft.com/ - статьи по Microsoft .NETFramework 4, VisualStudio и пошаговые руководства по созданию веб-приложений

Приложение

Размещено на Allbest.ru


Подобные документы

  • Характеристика объекта автоматизации. Создание многоуровневой архитектуры приложения, отладка метода безошибочной идентификации пользователей системы. Разработка нестандартного метода преобразования объектов базы данных в объекты классов приложения.

    курсовая работа [395,4 K], добавлен 28.04.2015

  • Разработка приложения, которое будет выполнять функции показа точного времени и точной даты. Определение дополнительных функций разработанного приложения. Рассмотрение основных этапов создания программного продукта. Результаты тестирования приложения.

    курсовая работа [2,2 M], добавлен 14.04.2019

  • Разработка клиент-серверного приложения, позволяющего взаимодействовать друг с другом с использованием доступа к базам данных. Проектирование связи сервера с базой данных с помощью технологии ODBC. Разработка интерфейса программы, ее тестирование.

    курсовая работа [352,0 K], добавлен 24.08.2016

  • Основные инструменты построения Web-приложения. Язык сценариев PHP. Системный анализ предметной области базы данных. Коды SQL запросов на создание таблиц. Разработка Web-приложения. Описание функциональности модулей. Система управления содержимым статей.

    курсовая работа [4,8 M], добавлен 28.04.2014

  • Разработка исполняемого Win32 приложения с визуальным интерфейсом, обеспечивающим построение функций принадлежности. Проектирование визуального интерфейса приложения, включающего кнопки доступа к функциям построения графика, полей ввода исходных данных.

    дипломная работа [343,8 K], добавлен 06.06.2010

  • Назначение и возможности разработанного приложения для контроля активности сетевых и периферийных устройств предприятия. Язык программирования Java. Распределенные многоуровневые приложения. Структура базы данных, интерфейс разработанного приложения.

    курсовая работа [1,0 M], добавлен 16.12.2012

  • Создание, изучение и разработка приложение на Android. Среда разработки приложения DelphiXE5. Установка и настройка среды программирования. Этапы разработки приложения. Инструменты для упрощения конструирования графического интерфейса пользователя.

    курсовая работа [1,6 M], добавлен 19.04.2017

  • Основные принципы написания оконных приложений с графическим интерфейсом на языке Java в среде Eclipse. Управление компоновками компонентов: показ диалоговых окон, вывод графической информации. Структура приложения и размещение элементов интерфейса.

    лабораторная работа [1,1 M], добавлен 01.05.2014

  • Создание приложения для Android на языке Java. Переключатель языка и варианты перевода, которые появляются, когда пользователь вводит текст в поле. Возможность просмотра истории переводов. Разработка и подготовка вида экранов тестового приложения.

    курсовая работа [114,8 K], добавлен 03.08.2017

  • Разработка приложения с помощью среды Microsoft Visual Studio 2010 Express. Интерфейс приложения. Разработка конечного программного продукта, демонстрирующего работу многопоточного приложения, использующего взаимоисключение на основе критической секции.

    лабораторная работа [300,4 K], добавлен 21.07.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.