Создание интернет-сервиса, социальной сети – "Image Poster"

Анализ клиентской части программного обеспечения для социальной сети "Image Poster". Выбор типовой архитектуры. Разработка UML–диаграмм для программного обеспечения для социальной сети. Интерфейс клиентской части. Загрузка и комментирование фотографий.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 25.05.2017
Размер файла 3,4 M

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

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

3

Регистрация пользователя с логином, длина которого находится в диапазоне 6-20 символов, но используются символы, не входящие в ограничения [a-Z _-.]

На странице регистрации пользователь заполняет корректно все необходимые поля, за исключением логина - указывается логин, длина которого находится в диапазоне 6 - 20 символов, но используются символы, не входящие в ограничение [a-Z _-.]

Пользователь нажимает кнопку «Регистрация». Выполняется отображение информационного сообщение о некорректно заполненном поле с правилами, выполняется очистка поля.

4

Регистрация пользователя с паролем, длина которого превышает 20 символов.

На странице регистрации пользователь заполняет корректно все необходимые поля, за исключением пароля - указывается пароль, длина которого превышает 20 символов. Пользователь нажимает кнопку «Регистрация». Выполняется отображение информационного сообщение о некорректно заполненном поле с правилами, выполняется

7. ЭКОНОМИЧЕСКАЯ ЧАСТЬ

7.1 Описание продукции

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

Разрабатываемый продукт - это программный продукт, а именно:

Web-сайт, социальная сеть «Image Poster».

Для работы программы необходима видеокарта (Nvidia), монитор с разрешением не менее 1280 Ч 1024 пикселей, необходимый объем оперативной памяти - 1 гб. Необходимая операционная система - Windows XP и выше, браузер Internet Explorer версия 9.0 и выше.

7.2 Разработка перечня работ по проектированию ПО

В данном подразделе необходимо составить перечень работ по проектированию программного продукта и рассчитать продолжительность и трудоемкость работ.

Для проектирования БД нам понадобится один программист Senior и два программиста Junior.

Продолжительность отдельного этапа определяется таким соотношением:

T =

где Т - продолжительность отдельного этапа определяется в рабочих днях, округляется до целого.

t - трудоемкость этапа (человеко-дни).

n - принятое количество исполнителей, занятых одновременно выполнением этапа.

Результаты расчета трудоемкости представлены в таблице 1.1, согласно этим подсчетам на разработку системы потребуется 37 дней одному программисту (в таблице так же представлена трудоемкость руководителя).

Таблица 7.1 - Перечень работ по разработке ПП.

№ п/п

Этапы

Трудоемкость чел.дни

Продолж, дни

Программист Senior

Программиста Junior

1

2

3

4

5

1. Разработка ТЗ и постановка задачи

1

Разработка ТЗ

2

2

2

2. Разработка технического предложения

2

Постановка задачи, разработка требований к ПО

2

2

2

3

Разработка внедряемых файлов с исходным кодом для работы ПО

3

5

5

4

Подготовка и тестирование инструментальных средств

1

2

2

5

Разработка интерфейса программы

2

2

2

6

Разработка алгоритмов программы

2

5

5

7

Разработка программного кода

3

8

8

3. Оформление результатов

8

Разработка документации

1

2

2

9

Тестирование программы, проведение экспериментов

2

5

5

10

Доработка ПО

1

2

2

4. Внедрение результатов

11

Окончательное тестирование и проведение экспериментов

2

2

2

Итого

21

37

37

7.3 Расчет сметы затрат и цены разработки ПО

В таблице 7.2 представлены расходы на материалы.

Таблица 7.2 - Расходы на материалы.

Материал

Назначение

Кол-во, шт.

Цена за шт., грн

Сумма, грн

Пакет Microsoft Office

Оформление документации и отчетов

1

1 799,00

1 799,00

CD-R диск

Хранение ПО

1

20,00

20,00

Чернила для принтера

Печать документации

1

200,00

200,00

Бумага формата А4

Печать документации

2
(1000 листов)

80

160

Итого

2179

Заработная плата (ЗП) исполнителя и руководителя состоит из основной и дополнительной заработной платы.

Для разработки программного продукта требуется инженер-программист, оклад которого составляет 2500 грн/мес (20 рабочих дней). Оклад руководителя составляет 8000 грн/месс (табл. 1.3).

Таблица 7.3 - Средние месячные и дневные заработные платы

Месячная ЗП, грн

Дневная ЗП, грн

Руководитель

8000

400

Разработчик

2500

125

Фонд основной заработной платы определяется по формуле

Где Тисп, Трук - трудоемкость работы исполнителя и руководителя соответственно.

Зсд исп, Зсд рук - среднедневные заработные платы исполнителя и руководителя соответственно.

Отсюда

Зос = 125*37 + 350*21 = 4625 + 7350 = 11 975 грн.

Дополнительная заработная плата (оплата отпусков, доплаты за дополнительный рабочий день, премии за достижения в работе) составляет 20% от основной заработной платы. Таким образом,

Здоп = Зос * Ндоп/100 = 11 975 * 20/100 = 2395 грн.

Фонд заработной платы составляет

Фзп = Зос + Здоп = 11 975 + 2395 = 14 370 грн.

Начисления на заработную плату в процентах от основной и дополнительной заработной плат (единый социальный фонд) составляет 37,5%.

Зсоц = Фзп * Нсоц/100 = 14 370 * 37,5/100 = 5388,75 грн.

Годовая норма амортизационных отчислений (АМО) рассчитывается как 25% от стоимости компьютера. Для выполнения работ, связанных с проектированием программного продукта и отладкой. Необходим компьютер стоимостью до 7000 грн , а так же пакет Microsoft Office - 1799.00.

АМО = (7000,00 + 1800,00)* 0,25 = 2200 грн.

За 37 рабочих дней АМО получим - (2200\365)*37 = 223 грн.

Затраты на освоение производства (10% от основной ЗП):

Зосв = Зос * Носв / 100 = 11 975*10 / 100 = 1197,5 грн.

Себестоимость разработки программного продукта равна сумме всех вышеуказанных расходов:

Ср = Зм + Фз + Зсоц + Зосв + АМО =

2179+14 370+5388,75+1197,5+223 = 23 358,25

Цена разработки рассчитывается по формуле:

ЦР АЗР = Ср + П + НДС,

где П - плановая прибыль (20% от себестоимости разработки);

НДС - налог на добавленную стоимость (17% от себестоимости и плановой прибыли).

П = 0,2 * Ср = 0,2 * 23 358,25 = 4671,65 грн;

НДС = 0,17 * (Ср+П) = 0,17 * (23 358,25 + 4671,65) = 4765,083 грн;

ЦР АЗР = Ср + П + НДС = 23 358,25 + 4671,65 + 4765,083 = 32 794,983 грн;

Калькуляционные статьи на разработку программного продукта представлены в табл. 7.4.

Таблица 7.4 - Статьи калькуляции на разработку:

Статья калькуляции

Затраты, грн

Материалы

2179

Основная заработная плата

11 975

Дополнительная заработная плата

2395

Общий фонд заработной платы

14 370

Начисления на заработную плату (единый соц.фонд)

5316,9

Затраты на освоение производства

1197,5

Амортизационные отчисление

223

Себестоимость разработки ПП

23 358,25

Плановая прибыль

4671,65

Цена без НДС

28 029,9

НДС

4765,083

Цена разработки

32 794,983

Таким образом, себестоимость разработки составляет 24 813,4 грн, цена с учетом НДС разработки составляет 34 838,01 (прибыль составляет 20% от себестоимости).

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

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

ЗАКЛЮЧЕНИЕ

В ходе разработки интернет-сервиса «Image Poster» были реализованы все требования, описанные в первом разделе. Данная система является удобным функциональным инструментом в своей предметной области. Тем не менее, ее можно расширять дальше полезной функциональностью.

В дальнейшем будет проводиться следующая модификация:

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

2. добавление звукового оформления;

3. добавления еще большего функций взаимодействия с другими пользователями;

4. возможность накладывать графические фильтры на фото;

5. добавление поддержки украинского языка;

6. добавление возможности играть в мини-игры с другими пользователями сети

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

Перечень ссылок

1. Диаграммы классов UML. Логическое моделирование. - [Эл. ресурс]. - Режим доступа: [http://www.informicus.ru /Default.aspx&subdivisionid=3] - 25.04.2015

2. Диаграммы размещения. - [Эл. ресурс]. - Режим доступа: [http://www.maksakov-sa.ru/ModelUML/DaigrRazm/index.html] - 01.04.2015

3. Проектированию реляционных баз данных. - [Эл. ресурс]. - Режим доступа: [http://habrahabr.ru/post/193136/html] - 01.04.2015

4. Свойства алгоритмов. - [Эл. ресурс]. - Режим доступа: [http://www.progivsem.ru/content.sv_va_alg.php] - 15.03.2014.

5. Шилд Г., C# 4.0: Полное руководство - Вильямс, 201. - 1056 с.: ил.

6. Мартин Р., Чистый код: создание, анализ и рефакторинг. Библиотека программиста. - СПб.: Питер, 2013. - 464 с.: ил.

7. Архитектура клиент-сервер или Web. - [Эл. ресурс]. - Режим доступа: [http://www.interface.ru/home.asp?artId=22674] - 18.04.2015.

8. UML диаграмма вариантов использования. - [Эл. ресурс]. - Режим доступа: [http://habrahabr.ru/post/47940/] - 15.04.2015.

9. Определение требований к программному обеспечению. - [Эл. ресурс]. - Режим доступа: [http://www.caseclub.ru/articles/treb.html] - 15.04.2015.

ПРИЛОЖЕНИЕ А. Техническое задание

1 Введение

1.1 Наименование приложения

Наименование - «Image Poster» (далее по тексту Приложение).

1.2 Краткая характеристика области применения

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

2 Основание для разработки

2.1 Основание для проведения разработки

Основанием для разработки Программы является задание на выпускную работу бакалавра кафедры "Компьютерные системы и сети" (503) Национального аэрокосмического университета им. Н.Е. Жуковского "ХАИ".

2.2 Наименование и условное обозначение разработки

Наименование темы разработки - «Разработка социальной сети».

3 Назначение разработки

3.1 Функциональное назначение разработки

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

3.2 Эксплуатационное назначение

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

Клиентская часть модуля предназначена для эксплуатации на ПК, установленном в офисе или в домашних условиях.

Серверная часть модуля предназначена для эксплуатации на сервере.

4 Требования к программе или программному изделию

4.1 Требования к функциональным характеристикам

4.1.1 Требования к составу выполняемых функций

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

- соединение с сервером;

- загрузка фотографий на сервер;

- сохранение и передача сообщений;

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

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

4.1.2 Требования к организации входных данных

Входные данные приложения организованы в виде:

- Реляционной базы данных MS SQL с пользовательскими данными;

- Информационных данных вводимых пользователем с клавиатуры;

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

? поле ввода «Login» с длиной не менее 1 символов и не более 10 символов, используются только латинские буквы и символ «_»;

? поле ввода «Password» с длиной не менее 1 символов и не более 100 символов, используются только латинские буквы и символ «_»;

4.1.3 Требования к организации выходных данных

Выходные данные модуля выступают в виде:

- данных, отображаемых на формах клиенсткого приложения.

4.1.4 Требования к временным характеристикам

Требования к временным характеристикам не предъявляются.

4.2 Требования к надежности

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

4.3 Условия эксплуатации

4.3.1 Климатические условия эксплуатации

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

4.3.2 Требования к видам обслуживания

После инсталляции Программа не требует отдельного администрирования и обслуживания.

С увеличением количества пользователей и запросов к системе в единицу времени необходимо увеличение вычислительной мощности веб-сервера.

4.3.3 Требования к численности и квалификации персонала

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

4.4. Требования к составу и параметрам технических средств

4.4.1 Требования к серверной части

В состав технических средств должен входить веб-сервер включающий в себя:

1) Процессор с тактовой частотой, ГГц - 1, не менее;

2) Оперативную память объемом, MБ - 512, не менее;

3) Свободного дискового пространства:

? для 32-разрядной ОС, МБ - 850, не менее;

? для 64-разрядной ОС, ГБ - 2, не менее.

4.4.2 Требования к клиентской части

В состав технических средств должен входить персональный компьютер (ПЭВМ) включающий в себя:

- Процессор с тактовой частотой, ГГц - 1.6, не менее;

- Материнскую плату с FSB, МГц - 133, не менее;

- Оперативную память объемом, МБ - 512, не менее;

- Монитор любого типа с диагональю не меньше 10";

- Видеоадаптер не ниже Radeon 9250

- Подключение к интернету либо локальной сети (при условии, что сервер установлен на одной из машин, подключенной к этой сети);

- Клавиатуру;

- Мышь.

4.5 Требования к информационной и программной совместимости

4.5.1 Требования к информационным структурам и методам решения

Требования к информационным структурам (файлов) на входе и выходе, а также к методам решения не предъявляются.

4.5.2 Требования к исходным кодам и языкам программирования

Для разработки клиенской части программы в качестве языка программирования должен использоваться язык C#.

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

Дополнительные настройки компиляторов не требуются.

4.5.3 Требования к программным средствам, используемым программой

Программа должна быть реализована в виде приложения выполняемого под управлением ОС Windows (например, MS Windows 7).

4.5.4 Требования к защите информации и программ

Требования к защите информации и программ не предъявляются.

4.6 Специальные требования

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

5 Требования к программной документации

5.1 Предварительный состав программной документации

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

а) техническое задание;

б) схемы алгоритмов;

в) пояснительная записка;

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

ПРИЛОЖЕНИЕ Б. Исходный код приложения

Листинг Base Controller`a:

using ImagePoster.Business;

using ImagePoster.DAL;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Mvc;

using System.Web.Security;

using WebMatrix.WebData;

namespace ImagePoster.Controllers

{

public abstract class BaseController : Controller

{

protected BusinessLogic bussines = new BusinessLogic(new Repository());

protected override void Initialize(System.Web.Routing.RequestContext requestContext)

{

base.Initialize(requestContext);

bussines.serverBasePath = AppDomain.CurrentDomain.GetData("APPBASE").ToString();

if (WebSecurity.IsAuthenticated)

{

if (Session["UserId"] == null)

setupLoginData(WebSecurity.CurrentUserName);

bussines.userId = (int)Session["UserId"];

bussines.isAdmin = Roles.Provider.IsUserInRole(WebSecurity.CurrentUserName, "admin");

}

Session["Lang"] = Session["Lang"] == null ? "en" : Session["Lang"];

Tools.setUpLocale(Session["Lang"] as string);

}

protected void setupLoginData(string email)

{

var repo = new Repository();

var user = repo.Users.Where(u => u.Email.ToUpper() == email.ToUpper()).First();

Session["UserId"] = user.id;

Session["UserName"] = Tools.getName(user);

Session["Lang"] = user.lang;

}

}

}

Листинг Account Controller`a:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Transactions;

using System.Web;

using System.Web.Mvc;

using System.Web.Security;

using DotNetOpenAuth.AspNet;

using Microsoft.Web.WebPages.OAuth;

using WebMatrix.WebData;

using ImagePoster.Models;

using ImagePoster.DAL;

using ImagePoster.DAL.Entity;

using ImagePoster.Business;

using ImagePoster.Business.Exceptions;

using ImagePoster.App_LocalResources;

namespace ImagePoster.Controllers

{

[Authorize]

public class AccountController : BaseController

{

[Authorize(Roles="admin")]

public ActionResult setAdmin(string email)

{

Roles.AddUserToRole(email, "admin");

return PartialView("AdminOrNot", email);

}

[Authorize(Roles = "admin")]

public ActionResult removeAdmin(string email)

{

Roles.RemoveUserFromRole(email, "admin");

return PartialView("AdminOrNot", email);

}

//

// GET: /Account/Login

[AllowAnonymous]

public ActionResult Login(string returnUrl)

{

ViewBag.ReturnUrl = returnUrl;

return View();

}

//

// POST: /Account/Login

[HttpPost]

[AllowAnonymous]

[ValidateAntiForgeryToken]

public ActionResult Login(LoginModel model, string returnUrl)

{

if (!WebSecurity.IsConfirmed(model.Email))

{

ModelState.AddModelError("", GlobalRes.UserNotconfirmEmail);

}

else if (ModelState.IsValid && WebSecurity.Login(model.Email, model.Password, persistCookie: model.RememberMe))

{

setupLoginData(model.Email);

return RedirectToLocal(returnUrl);

}

else

{

ModelState.AddModelError("", GlobalRes.EmailOrPasswordIncorrect);

}

return View(model);

}

//

// POST: /Account/LogOff

[HttpPost]

[ValidateAntiForgeryToken]

public ActionResult LogOff()

{

WebSecurity.Logout();

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

}

//

// GET: /Account/Register

[AllowAnonymous]

public ActionResult Register()

{

return View();

}

//

// POST: /Account/Register

[HttpPost]

[AllowAnonymous]

[ValidateAntiForgeryToken]

public ActionResult Register(RegisterModel model, HttpPostedFileBase ImageFile)

{

string imgURL = Tools.noPhoto;

if (ModelState.IsValid )

{

// Attempt to register the user

try

{

if(ImageFile != null)

Tools.isValidImg(ImageFile);

var token = WebSecurity.CreateUserAndAccount(model.Email, model.Password,

new

{

FirstName = model.FirstName,

LastName = model.LastName,

imgURL = imgURL

}, false);

// email confirm removed!!!

var msg = string.Format(GlobalRes.Email_Confirm,

Url.Action("Confirm", "Account", new { token = token }, Request.Url.Scheme));

Tools.SendEmail(model.Email, "Email confirmation", msg);

if (ImageFile != null)

{

// сохранять картинку только в том случаее, если остальные данные правильные

imgURL = Tools.saveImg(ImageFile.InputStream, Server.MapPath("~/" + Tools.uploadPath));

var repo = new Repository();

var user = repo.Users.Where(u => u.Email == model.Email).FirstOrDefault();

user.imgURL = imgURL;

repo.SaveChanges();

}

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

}

catch (MembershipCreateUserException e)

{

ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));

}

catch (ImageExceptions e)

{

ModelState.AddModelError("", e.ToString());

}

}

// If we got this far, something failed, redisplay form

return View(model);

}

[AllowAnonymous]

public ActionResult ForgetPassword()

{

// show form for enter password

return View();

}

[HttpPost]

[AllowAnonymous]

[ValidateAntiForgeryToken]

public ActionResult ForgetPassword(ForgetPasswordModel model)

{

if (ModelState.IsValid && bussines.repo.Users.Where(u => u.Email.ToUpper() == model.Email.ToUpper()).Count() > 0)

{

var token = WebSecurity.GeneratePasswordResetToken(model.Email);

var msg = string.Format(GlobalRes.Email_ForgetPassword,

Url.Action("ResetPassword", "Account", new { token = token }, Request.Url.Scheme));

Tools.SendEmail(model.Email, "Email confirmation", msg);

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

}

else

{

ModelState.AddModelError("", GlobalRes.InvalidEmail);

}

return View();

}

[AllowAnonymous]

public ActionResult ResetPassword(string token)

{

return View(new ResetPasswordModel { token = token});

}

[HttpPost]

[AllowAnonymous]

[ValidateAntiForgeryToken]

public ActionResult ResetPassword(ResetPasswordModel model)

{

if (ModelState.IsValid && WebSecurity.ResetPassword(model.token, model.NewPassword))

{

return Redirect("Login");

}

else

{

ModelState.AddModelError("", GlobalRes.CantSetPassword);

}

return View(model);

}

[AllowAnonymous]

public ActionResult Confirm(string token)

{

var rez = WebSecurity.ConfirmAccount(token);

return RedirectToAction("Manage", new { Message = rez ? ManageMessageId.EmailConfirm : ManageMessageId.EmailNotConfirm });

}

//

// GET: /Account/Manage

public ActionResult Manage(ManageMessageId? message)

{

ViewBag.StatusMessage =

message == ManageMessageId.ChangePasswordSuccess ? GlobalRes.PasswordHasBeenChanged

: message == ManageMessageId.EmailConfirm ? GlobalRes.EmailWasConfirm

: message == ManageMessageId.EmailNotConfirm ? GlobalRes.EmailWasNotConfirm

: "";

ViewBag.ReturnUrl = Url.Action("Manage");

return View();

}

//

// POST: /Account/Manage

[HttpPost]

[ValidateAntiForgeryToken]

public ActionResult Manage(LocalPasswordModel model)

{

ViewBag.ReturnUrl = Url.Action("Manage");

if (ModelState.IsValid)

{

// ChangePassword will throw an exception rather than return false in certain failure scenarios.

bool changePasswordSucceeded;

try

{

changePasswordSucceeded = WebSecurity.ChangePassword(User.Identity.Name, model.OldPassword, model.NewPassword);

}

catch (Exception)

{

changePasswordSucceeded = false;

}

if (changePasswordSucceeded)

{

return RedirectToAction("Manage", new { Message = ManageMessageId.ChangePasswordSuccess });

}

else

{

ModelState.AddModelError("", GlobalRes.ERR_CurrentPasswordBadOrNewInvalid);

}

}

// If we got this far, something failed, redisplay form

return View(model);

}

[ValidateInput(false)]

public ActionResult ChangeFirstName(string name)

{

bussines.changeFirstName(Server.HtmlEncode(name));

setupLoginData(WebSecurity.CurrentUserName);

return Content(name);

}

[ValidateInput(false)]

public ActionResult ChangeLastName(string name)

{

bussines.changeLastName(Server.HtmlEncode(name));

setupLoginData(WebSecurity.CurrentUserName);

return Content(name);

}

public ActionResult ChangeAvatar(HttpPostedFileBase ImageFile)

{

try

{

if (ImageFile != null)

{

Tools.isValidImg(ImageFile);

bussines.changeAvatar(ImageFile);

}

}

catch (ImageExceptions e)

{

ModelState.AddModelError("", e.ToString());

}

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

}

public ActionResult RemoveAvatar()

{

bussines.removeAvatar();

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

}

#region Helpers

private ActionResult RedirectToLocal(string returnUrl)

{

if (Url.IsLocalUrl(returnUrl))

{

return Redirect(returnUrl);

}

else

{

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

}

}

public enum ManageMessageId

{

ChangePasswordSuccess,

EmailConfirm,

EmailNotConfirm,

}

private static string ErrorCodeToString(MembershipCreateStatus createStatus)

{

// See http://go.microsoft.com/fwlink/?LinkID=177550 for

// a full list of status codes.

switch (createStatus)

{

case MembershipCreateStatus.DuplicateUserName:

return "User name already exists. Please enter a different user name.";

case MembershipCreateStatus.DuplicateEmail:

return "A user name for that e-mail address already exists. Please enter a different e-mail address.";

case MembershipCreateStatus.InvalidPassword:

return "The password provided is invalid. Please enter a valid password value.";

case MembershipCreateStatus.InvalidEmail:

return "The e-mail address provided is invalid. Please check the value and try again.";

case MembershipCreateStatus.InvalidAnswer:

return "The password retrieval answer provided is invalid. Please check the value and try again.";

case MembershipCreateStatus.InvalidQuestion:

return "The password retrieval question provided is invalid. Please check the value and try again.";

case MembershipCreateStatus.InvalidUserName:

return "The user name provided is invalid. Please check the value and try again.";

case MembershipCreateStatus.ProviderError:

return "The authentication provider returned an error. Please verify your entry and try again. If the problem persists, please contact your system administrator.";

case MembershipCreateStatus.UserRejected:

return "The user creation request has been canceled. Please verify your entry and try again. If the problem persists, please contact your system administrator.";

default:

return "An unknown error occurred. Please verify your entry and try again. If the problem persists, please contact your system administrator.";

}

}

#endregion

}

}

Листинг Home Controller`a

using ImagePoster.App_LocalResources;

using ImagePoster.Business;

using ImagePoster.Business.Exceptions;

using ImagePoster.DAL;

using ImagePoster.DAL.Entity;

using System;

using System.Collections.Generic;

using System.Diagnostics;

using System.Globalization;

using System.Linq;

using System.Threading;

using System.Web;

using System.Web.Mvc;

using System.Web.Security;

using WebMatrix.WebData;

namespace ImagePoster.Controllers

{

[Authorize]

public class HomeController : BaseController

{

[AllowAnonymous]

public ActionResult ChangeLang(string lang, string returnUrl)

{

if (Request.IsAuthenticated)

{

if (bussines.changeLang(lang))

{

Session["Lang"] = lang;

Tools.setUpLocale(lang);

}

}

else

{

try

{

Session["Lang"] = lang;

Tools.setUpLocale(lang);

}

catch

{

Session["Lang"] = "en";

Tools.setUpLocale("en");

}

}

return Redirect(returnUrl);

}

public ActionResult Users(int id)

{

return View(bussines.UserInfo(id));

}

public ActionResult Index()

{

return View(bussines.Feeds());

}

[HttpPost]

[ValidateInput(false)]

public ActionResult Index(HttpPostedFileBase ImageFile, string msg)

{

bussines.AddPost(ImageFile, Server.HtmlEncode(msg));

return RedirectToAction("Index");

}

[HttpPost]

[ValidateInput(false)]

public ActionResult Comment(int postId, string msg)

{

var comment = bussines.AddComment(postId, Server.HtmlEncode(msg));

var isAdmin = User.IsInRole("admin");

if (Request.IsAjaxRequest())

{

var comments = new List<Comment>();

comments.Add(comment);

return PartialView("Comments", Tools.commentsToModel(comments, bussines.userId, isAdmin));

}

return RedirectToAction("Index");

}

public ActionResult removeComment(int id)

{

bussines.removeComment(id);

if (Request.IsAjaxRequest())

{

return Content("<b>" + GlobalRes.CommentWasRemoved + "</b>");

}

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

}

public ActionResult removePost(int id)

{

bussines.removePost(id);

if (Request.IsAjaxRequest())

{

return Content("<b>" + GlobalRes.PostWasRemoved + "</b>");

}

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

}

[Authorize]

public ActionResult Friend()

{

var model = bussines.Friends();

ViewBag.Message = GlobalRes.NumberOfFriends + " " + model.Count();

return View(model);

}

[Authorize]

public ActionResult unfollow(int id)

{

if (Request.IsAjaxRequest())

{

return PartialView("followOrUnfollow", bussines.unfollow(id));

}

return RedirectToAction("Friend");

}

[Authorize]

public ActionResult follow(int id)

{

if (Request.IsAjaxRequest())

{

return PartialView("followOrUnfollow", bussines.follow(id));

}

return RedirectToAction("Friend");

}

[Authorize]

[ValidateInput(false)]

public ActionResult search(string q)

{

var model = bussines.search(Server.HtmlEncode(q));

ViewBag.Message = GlobalRes.NumberOfPeople + " " + model.Count();

return View(model);

}

[AllowAnonymous]

public ActionResult About()

{

ViewBag.Message = "Your app description page.";

return View();

}

[AllowAnonymous]

public ActionResult Policy()

{

ViewBag.Message = "Your contact page.";

return View();

}

public ActionResult Account()

{

var user = bussines.getUser();

ViewBag.FirstName = user.FirstName;

ViewBag.LastName = user.LastName;

ViewBag.img = user.imgURL;

return View();

}

}

}

ПРИЛОЖЕНИЕ В. Презентация проекта

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


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

  • Анализ административного программного обеспечения локальной сети. Структура сетевых операционных систем. Планирование и сетевая архитектура локальной сети. Использование сетевых ресурсов на примере предприятия, предоставляющего услуги Интернет-провайдера.

    контрольная работа [112,5 K], добавлен 15.12.2010

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

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

  • Выбор программного средства для клиентской и серверной части. Требования к программному обеспечению. Анализ приложений "Gmote", "Remote for VLC", "Пульт MPC&VLC", "The Remote Control". Схема функционирования клиентской части. Тестирование окна управления.

    дипломная работа [1,5 M], добавлен 31.03.2013

  • Устройство соединения сегментов сети. Выбор необходимого программного обеспечения на современном предприятии. Расчет стоимости оборудования. Выбор принтеров для необходимого программного обеспечения. Структура базового технического обеспечения компании.

    презентация [492,4 K], добавлен 02.08.2015

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

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

  • Обзор вариантов использования компьютерных сетей в муниципальном образовании. Компьютерные сети и их топологии. Выбор и обоснование архитектуры сети школы, её оборудование и защита. Использование программного обеспечения "1С:ХроноГраф Школа 3.0 Проф".

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

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

    презентация [2,1 M], добавлен 03.05.2015

  • Типы социальных сетей, их влияние на современного человека. Тенденции и перспективы развития социальных сетей. Внедрение в повседневную жизнь мобильных интернет-технологий. Анализ социальной сети на примере VK.com - крупнейшей в Рунете социальной сети.

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

  • Последовательность конфигурирования клиентского программного обеспечения для работы в сети. Парметры настройки и подключения сетевого принтера. Обновление конфигурации программы 1С: Предприятие. Анализ аппаратного обеспечения сети данной организации.

    отчет по практике [1,6 M], добавлен 22.01.2011

  • Выбор и обоснование технологий построения локальных вычислительных сетей. Анализ среды передачи данных. Расчет производительности сети, планировка помещений. Выбор программного обеспечения сети. Виды стандартов беспроводного доступа в сеть Интернет.

    курсовая работа [5,3 M], добавлен 22.12.2010

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