Автор работы: Пользователь скрыл имя, 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
}
public string Title
{
get { return _title; }
set
{
_title = value;
OnPropertyChanged("Title");
}
}
public List<SmsTemplate> SmsTemplates
{
get { return _smsTemplates; }
set
{
_smsTemplates = value;
                
OnPropertyChanged("
                
OnPropertyChanged("
}
}
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("
}
}
public override string ToString()
{
            return string.Format("{0} ({1})",Title,ContactList.
}
}
}
ApplicationPresenter.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SmsMessanger.Model;
using System.Collections.
using SmsMessanger.Views;
using System.Net;
using System.IO;
using System.Web;
namespace SmsMessanger.Presenters
{
    public class ApplicationPresenter:Presenter
{
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<SmsTempla
private readonly DistributionListRepository _distributionListRepository;
        private ObservableCollection<Distribut
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>(_
_checkedGroups = new ObservableCollection<Group>();
            
_contactRepository = new ContactRepository(_
            
_currentContacts = new ObservableCollection<Contact>(
_smsTemplateGroupRepository = new SmsTemplateGroupRepository();
            
_currentSmsTemplateGroups = new ObservableCollection<SmsTempla
            
_distributionListRepository = new DistributionListRepository(_
            
_currentDistributionLists = new ObservableCollection<Distribut
_logEventRepository = new LogEventRepository();
_smsReportRepository = new SendSmsReportRepository();
            List<DistributionList> list = 
_distributionListRepository.
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("
}
}
public ObservableCollection<Contact> CurrentContacts
{
get { return _currentContacts; }
set
{
_currentContacts = value;
                
OnPropertyChanged("
}
}
        public ObservableCollection<SmsTempla
{
get { return _currentSmsTemplateGroups; }
set
{
_currentSmsTemplateGroups = value;
                
OnPropertyChanged("
}
}
            public ObservableCollection<Distribut
{
get { return _currentDistributionLists; }
set
{
_currentDistributionLists = value;
                
OnPropertyChanged("
}
}
public void ReloadContactDependencys()
{
            
_distributionListRepository.
            
СurrentDistributionLists = new ObservableCollection<Distribut
}
#region Работа с рассылками
        public void OpenDistributionList(Distribut
{
            
_contactRepository.
if (distributionList == null) return;
View.AddTab(
new EditDistributionListPresenter(
this,new EditDistributionListView(),
distributionList,
_groupRepository.FindAll())
);
}
        public void SaveDistributionList(Distribut
{
            
_distributionListRepository.
            if (!СurrentDistributionLists.
                
СurrentDistributionLists.Add(
}
        public void DeleteDistributionList(Distrib
{
            
_distributionListRepository.
            
СurrentDistributionLists.
}
#endregion
#region работа с настройками
public void OpenSettings()
{
View.AddTab(new EditConfigPresenter(this,new EditConfigView()));
}
        public void SaveSettings(EditConfigPresent
{
View.RemoveTab(presenter);
}
#endregion
#region Работа с SMS
public void SaveSmsTemplate(SmsTemplate smsTemplate)
{
            
_smsTemplateGroupRepository.
            
CurrentSmsTemplateGroups = new ObservableCollection<SmsTempla
StatusText = string.Format("Шаблон SMS {0} сохранен.", smsTemplate.Title);
}
        public void SaveSmsTemplateGroup(SmsTempla
{
            
_smsTemplateGroupRepository.
            
CurrentSmsTemplateGroups = new ObservableCollection<SmsTempla
            Loger.Write(string.Format("
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(SmsTempla
{
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.
            
gr.SmsTemplates.Remove(
            
CurrentSmsTemplateGroups =  new ObservableCollection<SmsTempla
            
_smsTemplateGroupRepository.
}
        public void DeleteSmsTemplateGroup(SmsTemp
{
if (templateGroup == null) return;
            
CurrentSmsTemplateGroups.
            
_smsTemplateGroupRepository.
}
        public void SendSmsByDistributionList(Dist
{
            
View.AddTab(new SendSmsByListPresenter(this, new SendSmsByListView(), distributionList, 
_smsTemplateGroupRepository.
}
public void SendSmsByContact(Contact contact,SmsTemplate template)
{
            
View.AddTab(new SendSmsByListPresenter(this, new SendSmsByListView(), new DistributionList(new List<Contact>() { contact }, "Временный список рассылки"), 
_smsTemplateGroupRepository.
}
public void SendSmsByList(List<Contact> contacts, string message)
{
SendSmsReport report = new SendSmsReport();
report.Message = message;
foreach (var contact in contacts)
                if (!string.IsNullOrEmpty(
{
//Отправляем сообщение
                    Loger.Write(string.Format("
//Заменяем в сообщении переменные на текст
message = message.Replace("%username%", contact.Fio);
                    
message = message.Replace("%currentDate%
//Если прога в боевом режиме, то отправляем смс
if (Configurator.CombatMode)
{
//Форматируем сообщение в нужную кодировку
                        string GETMessage = HttpUtility.UrlEncode(message, Encoding.GetEncoding("windows-
                        WebRequest request = WebRequest.Create(string.
                            "http://smsc.ru/sys/send.php?
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.
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.
)
);
}
public void SaveContact(Contact contact)
{
            
_contactRepository.
            if (!CurrentContacts.Contains(
CurrentContacts.Add(contact);
            
contact.Group.Contacts.Add(
ReloadContactDependencys();
StatusText = string.Format("Студент {0} сохранен.",contact.Fio);
}
public void DeleteContact(Contact contact)
{
if (contact != null)
{
                
_contactRepository.
                if (CurrentContacts.Contains(
                    
CurrentContacts.Remove(
}
}
public void ApplyFilters()
{
//if (CheckedGroups.Count != 0)
{
                var selected = from c in _contactRepository.FindAll() where _checkedGroups.Contains(c.
                
CurrentContacts = new ObservableCollection<Contact>(
}
//else
              //  CurrentContacts = new ObservableCollection<Contact>(
}
public List<Contact> FindContactsById(Guid[] ids)
{
            return _contactRepository.FindById(
}
#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(
            if (!CurrentGroups.Contains(
CurrentGroups.Add(group);
StatusText = string.Format("{0} сохранена.", group.Title);
}
public void AddCheckedGroup(Group group)
Информация о работе Разработка системы рассылки СМС сообщений