Разработка системы рассылки СМС сообщений

Автор работы: Пользователь скрыл имя, 29 Января 2013 в 17:29, курсовая работа

Краткое описание

Целью курсовой работы является автоматизация рассылки SMS сообщений, для ускорения и облегчения работы по оповещению студентов.
Задачей, для достижения данной цели является создание приложения SmsMessenger, которое будет производить автоматизацию рассылки SMS.

Содержание

Введение 2
1. Описание предметной области 3
1.1. Предметная область курсового проекта 3
1.2. Информационно-логическая модель предметной области 3
2. Создание приложения SmsMessenger 6
2.1. Логическое проектирование 6
2.2. Модель данных 7
2.3. Описание представлений и представителей 8
3. Тестирование программы 17
Заключение 25
Список литературы 26
Пиложение А. Задание на курсовой проект 27
Приложение Б. Структура исходных файлов 28
Приложение В. XAML код всех представлений и библиотек ресурсов 30
Приложение Г. Код классов программы. 62

Вложенные файлы: 1 файл

Kursovik.docx

— 6.63 Мб (Скачать файл)

        }

        public string Title

        {

            get { return _title; }

            set

            {

                _title = value;

                OnPropertyChanged("Title");

            }

 

        }

        public List<SmsTemplate> SmsTemplates

        {

            get { return _smsTemplates; }

            set

            {

                _smsTemplates = value;

                OnPropertyChanged("SmsTemplates");

                OnPropertyChanged("SmsTemplateGroup");

            }

 

        }

 

        public SmsTemplateGroup()

        {

            SmsTemplates = new List<SmsTemplate>();

        }

 

        public override string ToString()

        {

            return Title;

        }

    }

}

 

 

TargetList.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace SmsMessanger.Model

{

    public class TargetList:Notifer

    {

        private Guid _id;

        private string _title;

        private DateTime _bornDate;

        private List<Contact> _contactList;

 

        public Guid Id

        {

            get { return _id; }

            set

            {

                _id = value;

                OnPropertyChanged("Id");

            }

 

        }

        public string Title

        {

            get { return _title; }

            set

            {

                _title = value;

                OnPropertyChanged("Title");

            }

 

        }

        public DateTime BornDate

        {

            get { return _bornDate; }

            set

            {

                _bornDate = value;

                OnPropertyChanged("BornDate");

            }

 

        }

        public List<Contact> ContactList

        {

            get { return _contactList; }

            set

            {

                _contactList = value;

                OnPropertyChanged("ContactList");

            }

 

        }

 

        public override string ToString()

        {

            return string.Format("{0} ({1})",Title,ContactList.Count);

        }

    }

}

ApplicationPresenter.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using SmsMessanger.Model;

using System.Collections.ObjectModel;

using SmsMessanger.Views;

using System.Net;

using System.IO;

using System.Web;

 

namespace SmsMessanger.Presenters

{

    public class ApplicationPresenter:PresenterBase<Shell>

    {

        private readonly ContactRepository _contactRepository;

        private ObservableCollection<Contact> _currentContacts;

 

        private readonly GroupRepository _groupRepository;

        private ObservableCollection<Group> _currentGroups;

       

        private readonly ObservableCollection<Group> _checkedGroups;

 

        private readonly SmsTemplateGroupRepository _smsTemplateGroupRepository;

        private ObservableCollection<SmsTemplateGroup> _currentSmsTemplateGroups;

 

        private readonly DistributionListRepository _distributionListRepository;

        private ObservableCollection<DistributionList> _currentDistributionLists;

 

        private readonly SendSmsReportRepository _smsReportRepository;

 

        private LogEventRepository _logEventRepository;

 

        private string _statusText;

 

        public ApplicationPresenter(Shell view):base(view)

        {

            Loger.Write("Приложение запущено", LogImages.Normal);

 

            _groupRepository = new GroupRepository();

            _currentGroups = new ObservableCollection<Group>(_groupRepository.FindAll());

 

            _checkedGroups = new ObservableCollection<Group>();

 

            _contactRepository = new ContactRepository(_groupRepository);

            _currentContacts = new ObservableCollection<Contact>(_contactRepository.FindAll());

 

            _smsTemplateGroupRepository = new SmsTemplateGroupRepository();

            _currentSmsTemplateGroups = new ObservableCollection<SmsTemplateGroup>(_smsTemplateGroupRepository.FindAll());

 

            _distributionListRepository = new DistributionListRepository(_contactRepository);

            _currentDistributionLists = new ObservableCollection<DistributionList>(_distributionListRepository.FindAll());

 

            _logEventRepository = new LogEventRepository();

 

            _smsReportRepository = new SendSmsReportRepository();

 

            List<DistributionList> list = _distributionListRepository.FindAll();

 

            ApplyFilters();

        }

 

        public string StatusText

        {

            get

            {

               return _statusText;

            }

            set

            {

                _statusText = value;

                OnPropertyChanged("StatusText");

            }

        }

 

        public ObservableCollection<Group> CheckedGroups

        {

            get

            {

                return _checkedGroups;

            }

        }

        public ObservableCollection<Group> CurrentGroups

        {

            get { return _currentGroups; }

            set

            {

                _currentGroups = value;

                OnPropertyChanged("CurrentGroups");

            }

        }

        public ObservableCollection<Contact> CurrentContacts

        {

            get { return _currentContacts; }

            set

            {

                _currentContacts = value;

                OnPropertyChanged("CurrentContacts");

            }

        }

        public ObservableCollection<SmsTemplateGroup> CurrentSmsTemplateGroups

        {

            get { return _currentSmsTemplateGroups; }

            set

            {

                _currentSmsTemplateGroups = value;

                OnPropertyChanged("CurrentSmsTemplateGroups");

            }

        }

            public ObservableCollection<DistributionList> СurrentDistributionLists

        {

            get { return _currentDistributionLists; }

            set

            {

                _currentDistributionLists = value;

                OnPropertyChanged("СurrentDistributionLists");

            }

        }

       

 

        public void ReloadContactDependencys()

        {

            _distributionListRepository.RebuildTree();

            СurrentDistributionLists = new ObservableCollection<DistributionList>(_distributionListRepository.FindAll());

        }

 

        #region Работа с рассылками

 

        public void OpenDistributionList(DistributionList distributionList)

        {

            _contactRepository.ClearChecked();

            if (distributionList == null) return;

            View.AddTab(

                    new EditDistributionListPresenter(

                        this,new EditDistributionListView(),

                        distributionList,

                        _groupRepository.FindAll())

                        );

        }

 

        public void SaveDistributionList(DistributionList distributionList)

        {

            _distributionListRepository.SaveDistributionList(distributionList);

            if (!СurrentDistributionLists.Contains(distributionList))

                СurrentDistributionLists.Add(distributionList);

        }

 

        public void DeleteDistributionList(DistributionList distributionList)

        {

            _distributionListRepository.DeleteDestributionList(distributionList);

            СurrentDistributionLists.Remove(distributionList);

        }

 

       

        #endregion

 

        #region работа с настройками

        public void OpenSettings()

        {

            View.AddTab(new EditConfigPresenter(this,new EditConfigView()));

        }

 

        public void SaveSettings(EditConfigPresenter presenter)

        {

            View.RemoveTab(presenter);

        }

        #endregion

 

        #region Работа с SMS

 

        public void SaveSmsTemplate(SmsTemplate smsTemplate)

        {

            _smsTemplateGroupRepository.SaveSmsTemplate(smsTemplate);

 

            CurrentSmsTemplateGroups = new ObservableCollection<SmsTemplateGroup>(_smsTemplateGroupRepository.FindAll());

 

            StatusText = string.Format("Шаблон SMS {0} сохранен.", smsTemplate.Title);

        }

 

        public void SaveSmsTemplateGroup(SmsTemplateGroup smsTemplateGroup)

        {

            _smsTemplateGroupRepository.SaveSmsTemplateGroup(smsTemplateGroup);

            CurrentSmsTemplateGroups = new ObservableCollection<SmsTemplateGroup>(_smsTemplateGroupRepository.FindAll());

            Loger.Write(string.Format("Сохранение шаблона группы SMS: {0}", smsTemplateGroup.Title), LogImages.Save);

            StatusText = string.Format("Шаблон Группы SMS {0} сохранен.", smsTemplateGroup.Title);

        }

 

        public void OpenSmsTemplate(SmsTemplate template)

        {

            if (template == null) return;

            View.AddTab(

                    new EditSmsTemplatePresenter(

                        this, new EditSmsView(),

                        template)

                        );

        }

 

        public void OpenSmsTemplateGroup(SmsTemplateGroup smsTemplateGroup)

        {

            if (smsTemplateGroup == null) return;

            View.AddTab(

                    new EditSmsTemplateGroupPresenter(

                        this, new EditSmsTemplateGroupView(),

                        smsTemplateGroup)

                        );

        }

 

        public void DeleteSmsTemplate(SmsTemplate template)

        {

            if (template == null) return;

           

            SmsTemplateGroup group = template.ParentGroup;

            SmsTemplateGroup gr = CurrentSmsTemplateGroups.First(g => g == template.ParentGroup);

            gr.SmsTemplates.Remove(template);

            CurrentSmsTemplateGroups =  new ObservableCollection<SmsTemplateGroup>(_smsTemplateGroupRepository.FindAll());

            _smsTemplateGroupRepository.DeleteSmsTemplate(template);           

        }

 

        public void DeleteSmsTemplateGroup(SmsTemplateGroup templateGroup)

        {

            if (templateGroup == null) return;

            CurrentSmsTemplateGroups.Remove(templateGroup);

            _smsTemplateGroupRepository.DeleteSmsTemplateGroup(templateGroup);

        }

 

        public void SendSmsByDistributionList(DistributionList distributionList, SmsTemplate smsTemplate)

        {

            View.AddTab(new SendSmsByListPresenter(this, new SendSmsByListView(), distributionList, _smsTemplateGroupRepository.FindAll(), smsTemplate));

        }

 

        public void SendSmsByContact(Contact contact,SmsTemplate template)

        {

            View.AddTab(new SendSmsByListPresenter(this, new SendSmsByListView(), new DistributionList(new List<Contact>() { contact }, "Временный список рассылки"), _smsTemplateGroupRepository.FindAll(), template));

        }

 

        public void SendSmsByList(List<Contact> contacts, string message)

        {

            SendSmsReport report = new SendSmsReport();

            report.Message = message;

 

            foreach (var contact in contacts)

                if (!string.IsNullOrEmpty(contact.CellPhone))

                {

                    //Отправляем сообщение

                    Loger.Write(string.Format("Сообщение [{0}] отправляется на телефон: {1} / {2}", message, contact.CellPhone, contact.Fio), LogImages.Normal);

                   

                    //Заменяем в сообщении переменные на текст

                    message = message.Replace("%username%", contact.Fio);

                    message = message.Replace("%currentDate%", DateTime.Now.ToString());

 

                    //Если прога в боевом режиме, то отправляем смс

                    if (Configurator.CombatMode)

                    {

                        //Форматируем сообщение в нужную кодировку

                        string GETMessage = HttpUtility.UrlEncode(message, Encoding.GetEncoding("windows-1251"));

                        WebRequest request = WebRequest.Create(string.Format(

                            "http://smsc.ru/sys/send.php?login={0}&psw={1}&phones={2}&mes={3}",

                            Configurator.SmscLogin, Configurator.SmscPassword, contact.CellPhone, GETMessage

                            ));

                        WebResponse response = request.GetResponse();

                        Stream stream = response.GetResponseStream();

                        StreamReader sr = new StreamReader(stream);

                        string s = sr.ReadToEnd();

                        Loger.Write(s, LogImages.Warning);

                    }

 

                    report.AddSuccess(contact);

                }

                else

                {

                    //Не Отправляем сообщение

                    Loger.Write(string.Format("Не удалось отправить сообщение [{0}] для {1}. Телефон отсутствует, либо заполнен не верно", message, contact.Fio), LogImages.Normal);

                    report.AddFail(contact);

                }

            _smsReportRepository.SaveReport(report);

            OpenSmsReport(report);

        }

 

        public void OpenSmsReport(SendSmsReport report)

        {

            View.AddTab(new SmsSendReportPresenter(this, new SmsSendReportView(), report));

        }

 

        #endregion

 

        #region Работа с контактами

        public void OpenContact(Contact contact)

        {

            if (contact == null) return;

            View.AddTab(

                    new EditContactPresenter(

                        this, new EditContactView(),

                        contact,

                        new List<Group>(_groupRepository.FindAll())

                        )

                    );

        }

       

        public void SaveContact(Contact contact)

        {           

            _contactRepository.SaveContact(contact);

            if (!CurrentContacts.Contains(contact))

                CurrentContacts.Add(contact);

            contact.Group.Contacts.Add(contact);

            ReloadContactDependencys();

            StatusText = string.Format("Студент {0} сохранен.",contact.Fio);

        }

 

        public void DeleteContact(Contact contact)

        {

            if (contact != null)

            {

                _contactRepository.DeleteContact(contact);

                if (CurrentContacts.Contains(contact))

                    CurrentContacts.Remove(contact);

            }

 

        }

 

        public void ApplyFilters()

        {

            //if (CheckedGroups.Count != 0)

            {

                var selected = from c in _contactRepository.FindAll() where _checkedGroups.Contains(c.Group) select c;

                CurrentContacts = new ObservableCollection<Contact>(selected);

            }

            //else

              //  CurrentContacts = new ObservableCollection<Contact>(_contactRepository.FindAll());

        }

 

        public List<Contact> FindContactsById(Guid[] ids)

        {

            return _contactRepository.FindById(ids);

        }

 

        #endregion

 

        #region Работа с группами

        public void OpenGroup(Group group)

        {

            if (group == null) return;

            View.AddTab(

                    new EditGroupPresenter(

                        this, new EditGroupView(),

                        group)

                    );

        }

 

        public void SaveGroup(Group group)

        {

            _groupRepository.SaveGroup(group);

            if (!CurrentGroups.Contains(group))

                CurrentGroups.Add(group);

            StatusText = string.Format("{0} сохранена.", group.Title);

        }

 

        public void AddCheckedGroup(Group group)

Информация о работе Разработка системы рассылки СМС сообщений