Разработка приложения для оценивания фильмов
На странице оценивания пользователь может выбрать и оценить любой фильм, присутствующий в базе данных приложения, а также просмотреть и отредактировать свои оценки. Целевая аудитория — люди, которые не могут самостоятельно определиться с выбором, хотели бы найти что-то подходящее им по атмосфере или настроению или другим тэгам. Потенциал внедрения Данное приложение предназначено для помощи при… Читать ещё >
Разработка приложения для оценивания фильмов (реферат, курсовая, диплом, контрольная)
Курсовая работа по дисциплине: Технологии программирования Разработка приложения для оценивания фильмов
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-диаграмма Основные сущности в базе данных: пользователь, фильм.
Инфологическое проектирование Получаем следующую схему таблиц и связи между ними:
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 { get; set; }
public List ActorFilm { get; set; }
public List ProduserFilm { get; set; }
public List CountryFilm { get; set; }
public List TagFilm { get; set; }
public virtual List 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 { 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 { get; set; }
}
}
Класс целостности
using System.Data.Entity;
namespace Filmion. Models
{
public class FilmionEntities: DbContext
{
public DbSet Genre { get; set; }
public DbSet Country { get; set; }
public DbSet Actor { get; set; }
public DbSet Produser { get; set; }
public DbSet GenreFilm { get; set; }
public DbSet CountryFilm { get; set; }
public DbSet ActorFilm { get; set; }
public DbSet ProduserFilm { get; set; }
public DbSet TagFilm { get; set; }
public DbSet Film { get; set; }
public DbSet Tag { get; set; }
public DbSet Category { get; set; }
public DbSet User { get; set; }
public DbSet Mark { get; set; }
}
}
Контроллеры Случайный фильм
namespace Filmion. Controllers
{
public class RandomFilmController: Controller
{
FilmionEntities DB = new FilmionEntities ();
public ActionResult Index ()
{
DbSet 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 и пошаговые руководства по созданию веб-приложений
Приложение