Создание интернет-сервиса, социальной сети – "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 |
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