Программирование Баз данных

Автор работы: Пользователь скрыл имя, 09 Июня 2014 в 02:25, курсовая работа

Описание работы

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

Содержание работы

ВВЕДЕНИЕ………………………………………………………………..…………………4
1. ОПИСАНИЕ ИСПОЛЬЗОВАННЫХ ТЕХНОЛОГИЙ ПРИ ПРОЕКТИРОВАНИИ……………………………………………………………...…….5
1.1 Архитектура модель-представление-контроллер……………………………..…….5
1.2 ASP.NET MVC Framework……………………………..…………………………….6
2. АНАЛИЗ ЗАДАЧИ……………………………………………………………………....9
3. ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ……………………………………….……..10
3.1 Структура таблиц…………………………………………………………………….10
3.2 Диаграмма отношений базы данных……………………………………………….12
4. АНАЛИЗ ЗАДАЧИ…………………………………………………………………......13
4.1 Структура сайта………………………………………………………………………13
4.2 Главная страница……………………………………………………………………13
4.3 Регистрация…………………………………………………………………….……..14
4.4 Авторизация…………………………………………………………………………..14
4.5 Страница добавления поста…………………………………………………………15
4.6 Страница просмотра поста…………………………………………………………..16
4.7 Страница просмотра постов по определенному тегу……………………………..16
5. ОСОБЕННОСТИ РЕАЛИЗАЦИИ……………………………………….…………….17
6. РЕАЛИЗАЦИЯ ФУНКЦИОНАЛЬНЫХ ВОЗМОЖНОСТЕЙ…………………….…18
6.1 Модели………………………………………………………………………………..18
6.2 Контроллеры…………………………………………………………………………20
ЗАКЛЮЧЕНИЕ………………………………………………………………………………21
БИБЛИОГРАФИЧЕСКИЙ СПИСОК….…………………………………………………...22
ПРИЛОЖЕНИЕ………………………………………………………………………………23
1. PostController.cs………………………………………………………………………23
2. UsetController.cs………………………………………………….......................……29
3. CustomMembershipProvider.cs………………………………....................................31
4. Классы для связи с базой данных………………………............................………...37

Файлы: 1 файл

kursovik_pvbd.docx

— 724.48 Кб (Скачать файл)

 

Таблица 5 - PostTags

Поле

Тип

PK/FK

NULL/NOT NULL

PostTagID

Int

PK

NOT NULL

PostID

Int

 

NOT NULL

TagID

Int

 

NOT NULL


 

Таблица 6- Tags

Поле

Тип

PK/FK

NULL/NOT NULL

TagID

Int

PK

NOT NULL

TagName

nvarchar(50)

 

NOT NULL


 

 

 

 

 

 

 

3.2 Диаграмма отношений БД

Диаграмма отношений БД приведена на рисунке 8.

Рисунок 8 – диаграмма отношений БД

 

4. ПРОЕКТИРОВАНИЕ ИНТЕРФЕЙСА ПРИЛОЖЕНИЯ

4.1 Структура сайта

Сайт имеет следующую структуру:

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

- регистрация;

- авторизация;

- страница добавления  поста;

- страница просмотра поста и комментариев к нему;

- страница просмотра постов по определенному тегу;

- страница просмотра постов  других пользователей.

4.2 Главная страница

Главная страница сайта (рис. 2)

Рисунок 2 - Главная страница

 

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

4.3 Регистрация

Страница регистрации позволяет пользователю зарегистрироваться в системе. Внешний вид страницы приведен на рис. 3.

Рисунок 3 – Страница регистрации

 

Страница содержит поля ввода Login, Password. Попасть на страницу регистрации можно нажав на ссылку «Регистрация», которая находится на странице авторизации (рис.4).

Для регистрации в системе пользователь должен ввести свое имя и пароль. Все поля являются обязательными.

 

5.4 Авторизация

Страница входа представлена на рисунке 4.

Рисунок 4 – страница входа

На странице входа находятся поля для ввода логина, пароля и кнопка войти. Если введенные данные верны, то открывается главная страница. Перейти на страницу входа можно нажав на ссылку «Home», она показывается в верхнем меню и если пользователь находится на ней, то она подсвечивается синим цветом. Для выходы из системы есть кнопка «Log out».

 

4.5 Страница добавления поста

Страница добавления поста показана на рисунке 5.

 

Рисунок 5 – страница добавления поста

Для добавления поста, пользователю надо всего лишь написать текст сообщения в поле input “Post Text” и добавить теги к своему посту, при нажатии на кнопку «Add Post» пост добавится в базу данных и пользователь автоматически попадет на домашнюю страницу.

 

4.6 Страница просмотра поста

Страница просмотра поста содержит текст, дату добавления, кем добавлен пост, его теги, а также комментарии к посту и возможность комментария поста. (рис. 6).

Рисунок 6 – страница просмотра поста

Зарегистрированные пользователи могут отправлять комментарии.

 

4.7 Страница просмотра постов по определенному тегу

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

Рисунок 7 – посты по определенному тегу

 

5. ОСОБЕННОСТИ РЕАЛИЗАЦИИ

 ADO.NET Entity Framework

В проекте для операций с данными, такими как выборка, вставка, обновление и удаление используется технология ADO.NET Entity Framework. С ее помощью можно писать запросы из кода на C# с помощью синтаксиса, используемого в LINQ.

ADO.NET Entity Framework – это платформа  доступа к данным, позволяющая  работать с данными в виде  объектов. Она позволяет абстрагироваться  от определений схемы хранения  данных и работать на более  высоком уровне абстракции. В .NET Framework 4.0 появится новая версия ADO.NET Entity Framework 4, которая учитывает опыт  прошлой версии и предлагает  множество новых сценариев работы  с данными на платформе .NET Framework [3].

 

6. РЕАЛИЗАЦИЯ ФУНКЦИОНАЛЬНЫХ ВОЗМОЖНОСТЕЙ

6.1 Модели

Класс User

Поля:

- UserID - уникальный идентификатор пользователя;

- UserName – имя пользователя;

- UserPassword – пароль;

- UserAvatarPath – путь к аватару;

- UserDeleted – является ли  пользователь удаленным или нет;

- UserRegDate – дата регистрации  пользователя;

- UserRoleID – роль пользователя.

Класс Post

Поля:

  • PostID– уникальный идентификатор комментария;
  • UserID - уникальный идентификатор пользователя, написавшего пост;
  • PostText– текст поста; 
  • PostDate – время добавления поста;
  • CommentID – связь с комментарием к посту;
  • PostDeleted - является ли пост удаленным или нет.

Класс Comment

Поля:

  • CommentID – уникальный идентификатор комментария;
  • CommentText – текст комментария;
  • UserID – id пользователя, который написал комментарий;
  • PostID – какому посту принадлежит этот комментарий;
  • CommentDate – дата добавления комментария;
  • CommentDeleted - является ли комментарий удаленным или нет.

Класс Tag

Поля:

  • TagID – уникальный идентификатор тега;
  • TagName – текст тега.

Класс PostTag

Поля:

  • PostTagID – уникальный идентификатор;
  • PostID - уникальный идентификатор поста;
  • TagID – уникальный идентификатор тега.

Класс Role

Поля:

  • RoleID – уникальный идентификатор;
  • RoleName – название роли.

 

6.2 Контроллеры

Для обработки команд пользователя, определения модели для работы и связывания ее с представлением было создано три контроллера:

- AccountController;

- HomeController;

- PostController;

-CommentController;

-UserController.

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

HomeController содержит методы  для отображения главной страницы.

PostController содержит методы для вывода, удаления, поиска постов.

CommentController нужен для добавления комментариев.

Основные методы контроллеров приведены в приложении.

 

ЗАКЛЮЧЕНИЕ

В результате проделанной работы было разработано web-приложение, использующее современные технологии такие как Html, CSS3, JavaScript и паттернов проектирования (MVC и т.д).

Было разработано приложение, позволяющее добавлять и просматривать посты, комментировать и осуществлять поиск по тегам.

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

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

Приложение создано с использованием ASP.NET MVC4 фреймворка, разработчики которого уделяют большое внимание сетевой безопасности.

Разработанное Web-приложение имеет аналогии в сети, например, сайт блог “Twitter” (http://twitter.com/).        В приложение заложена возможность его модернизации посредством увеличения эффективности поиска статей (за счет увеличения количества полей, по которым осуществляется поиск и ввода полнотекстового поиска), ввода дополнительной функциональности и настроек.

 

 

 

 

 

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

  1. MVC Framework. – URL: http://habrahabr.ru/blogs/net/49718/. Дата обращения: 9.05.2014.
  2. LINQ to SQL – URL: http://msdn.microsoft.com/ru-ru/library/bb386976.aspx. Дата обращения: 16.05.2014.
  3. Паттерны проектирования программных приложений [http://design-pattern.ru/patterns]
  4. Всплывающие окна подсказки без использования картинок [http://habrahabr.ru/post/161041/]
  5. Компоненты Bootstrap [http://bootstrap-ru.com/components.php]
  6. Джеффри Палермо 2012 г. ASP.NET MVC4 in Action

Мартин Фаулер. Москва 2006 г. Архитектура программных приложений. 
ПРИЛОЖЕНИЕ

  1. Код содержащийся в файле “PostController.cs” (содержит методы для вывода, удаления, поиска постов)

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

using Twitt.Providers;

using Twitt.Models;

using System.Web.Security;

 

namespace Twitt.Controllers

{

    public class PostController : Controller

    {

        //

        // GET: /Post/

 

        public ActionResult Index()

        {

            return View();

        }

 

        [Authorize]

        public ActionResult PostPage()

        {

            using (DbProvider _db = new DbProvider())

            {

                User user = _db.Users.FirstOrDefault(u => u.UserName == User.Identity.Name);

 

                if (user == null)

                {

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

                }

 

                return View(user);

            }

        }

 

        [Authorize]

        public ActionResult ShowUserPost()

        {

            using (DbProvider _db = new DbProvider())

            {

                string UserName = User.Identity.Name;

 

                int userID = ((CustomMembershipProvider)Membership.Provider).GetUserIdByName(UserName);

 

                var posts = _db.Posts.ToList<Post>().Where(p => p.UserID == userID);

                List<PostModel> model = new List<PostModel>();

 

                if (posts != null)

                {

                    foreach (var post in posts)

                    {

                        if (!IsPostDeleted(post.PostID))

                        {

 

                            List<int> tagIds = new List<int>();

                            foreach (var t in _db.PostTags.Where(p => p.PostID == post.PostID))

                            {

                                tagIds.Add(t.TagID);

                            }

 

                            List<string> tags = new List<string>();

                            foreach (var id in tagIds)

                            {

                                tags.Add(_db.Tags.First(t => t.TagID == id).TagName);

                            }

                            model.Add(new PostModel() { Post = post, Tags = tags });

                        }

                    }

 

                    model.Reverse();

 

                    return PartialView(model);

                }

 

                return RedirectToAction("PostPage", "Post");

            }

        }

 

        [Authorize]

        public ActionResult ShowLastPosts()

        {

            using (DbProvider _db = new DbProvider())

            {

                string UserName = User.Identity.Name;

 

                int userID = ((CustomMembershipProvider)Membership.Provider).GetUserIdByName(UserName);

 

                var posts = _db.Posts.ToList<Post>().Where(p => p.UserID != userID);

                List<PostModel> model = new List<PostModel>();

 

                if (posts != null)

                {

                    foreach (var post in posts)

                    {

                        if (!IsPostDeleted(post.PostID))

                        {

 

                            List<int> tagIds = new List<int>();

                            foreach (var t in _db.PostTags.Where(p => p.PostID == post.PostID))

                            {

                                tagIds.Add(t.TagID);

                            }

 

                            List<string> tags = new List<string>();

                            foreach (var id in tagIds)

                            {

                                tags.Add(_db.Tags.First(t => t.TagID == id).TagName);

                            }

                            model.Add(new PostModel() { Post = post, Tags = tags });

                        }

                    }

 

                    model.Reverse();

 

                    return PartialView(model);

                }

 

                return RedirectToAction("PostPage", "Post");

            }

        }

 

        [Authorize]

        public ActionResult DeleteUserPost(int PostID)

        {

            using (DbProvider _db = new DbProvider())

            {

                Post post = new Post();

 

                post = _db.Posts.FirstOrDefault(p => p.PostID == PostID);

 

                if (post != null)

                {

                    post.PostDeleted = 1;

                    _db.SaveChanges();

                }

                return RedirectToAction("PostPage", "Post");

            }

        }

 

        [Authorize]

        public ActionResult AddNewPost()

        {

            Post post = new Post();

 

            return View(post);

        }

 

        [Authorize]

        [HttpPost]

        public ActionResult AddNewPost(string PostText, string[] Tags)

        {

            using (DbProvider _db = new DbProvider())

            {

                string UserName = User.Identity.Name;

 

                int userID = ((CustomMembershipProvider)Membership.Provider).GetUserIdByName(UserName);

 

                int tagID = 0;

Информация о работе Программирование Баз данных