Курсовая работа по предмету "Программирование, компьютеры и кибернетика, ИТ технологии"

Узнать цену курсовой по вашей теме


Разработка приложения – клиента электронной почты


6

AСТРAХAНСКИЙ ГОСУДAРСТВEННЫЙ УНИВEРСИТEТ

Кaфeдрa

информaционных систeм

и тeхнологий

Курсовaя рaботa по дисциплинe

«Объeктно-ориeнтировaнноe прогрaммировaниe»

нa тeму:

“Разработка приложения - клиента электронной почты”

Выполнили: студeнты группы ЗИ-31

Егоров Д.С.

Арушанов С.С.

Курсовaя рaботa допущeнa к зaщитe

Руководитeль: aсс. Пaвлов A.A.

Курсовaя рaботa выполнeнa с оцeнкой ___________

Пaвлов A.A.___________

Aстрaхaнь - 2009 г.

СОДЕРЖАНИЕ

  • ВВЕДЕНИЕ
  • 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ
  • 2. РАБОЧИЙ ПРОЕКТ
    • 2.1. Общие сведения о работе программы
    • 2.2. Функциональное назначение
    • 2.3. Инсталляция и выполнение программы
    • 2.4. Общий алгоритм программного обеспечения
    • 2.5. Разработанные меню и интерфейсы
    • 2.6. Описание основных классов и методов приложения
  • 3. ПРОГРАММА И МЕТОДИКА ИСПЫТАНИЙ
  • ЗАКЛЮЧЕНИЕ
  • СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
  • ПРИЛОЖЕНИЕ 1

ВВЕДЕНИЕ

Язык С++, разработанный Microsoft имеет массу преимуществ перед другими языками типа С, С++, Java: простота, объектная ориентированность, типовая защищенность, «сборка мусора», поддержка совместимости версий и многое другое. Данные возможности позволяют быстро и легко разрабатывать приложения. При создании С++ его авторы учитывали достижения многих других языков программирования: C++, С, Java, Visual Basic и т.д. Надо заметить, что поскольку С++ разрабатывался что называется «с нуля», у его авторов была возможность не переносить в него все неудачные особенности любого из предшествующих языков. Особенно это касается проблемы совместимости с предыдущими версиями. В результате получился действительно простой, удобный и современный язык, который по мощности не уступает C++, но существенно повышает продуктивность разработок. Ввиду высокой объектной ориентированности, язык С++ великолепно подходит для быстрого конструирования различных компонентов -- от высокоуровневой бизнес-логики до системных приложений, использующих низкоуровневый код. Также следует отметить, что С++ является и Web-ориентированным -- с помощью простых встроенных конструкций языка ваши компоненты легко превратятся в Web-сервисы, к которым можно будет обращаться из Интернета, используя любой язык на любой операционной системе. Дополнительные возможности и преимущества С++ перед другими языками приносит использование современных Web-технологий, таких как: XML (Extensible Markup Language) и SOAP (Simple Object Access Protocol). Удобные методы для разработки Web-приложений позволяют программистам, владеющим навыками объектно-ориентированного программирования, легко освоиться в разработке Web-сервисов.

Цель данной курсовой работы укрепить и улучшить практические навыки основ объектно-ориентированного программирования, полученных во время изучения курса, по данному предмету, а также научиться применять полученные знания в сетевом программировании .NET.

1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ

Разработка приложения-клиента электронной почты.

В ходе разработки клиентского приложения электронной почты, необходимо разработать и реализовать с использование двух основных протоколов передачи электронной почты POP3 и SMTP:

· методы приема и отправки сообщений;

· интуитивно понятный интерфейс, обеспечивающий удобную работу с приложением;

· сохранение почтовых сообщений на локальном диске компьютера;

· реализовать алгоритмы построения списка сообщений;

· при выборе сообщения обеспечить отображение темы сообщения, отправителя и адресата письма, а также текст самого сообщения;

· дополнительно необходимо реализовать возможность сворачивания приложения в трей панели задач Windows;

· проверку наличия новых сообщений по времени и смену иконки в трее при получении новых сообщений.

2. РАБОЧИЙ ПРОЕКТ

2.1. Общие сведения о работе программы

Программа разработaнa в среде программирования Microsoft Visual Studio 2008, на языке программирования C++.

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

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

2.2. Функциональное назначение

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

2.3. Инсталляция и выполнение программы

Для запуска программы из среды «Microsoft Visual Studio 2008» необходимо, зайдя в «Microsoft Visual Studio 2008» запустить файл Mail client.sln.

2.4. Общий алгоритм программного обеспечения

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

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

6

Рис. 1.1. «Диаграмма работы протокола POP3»

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

При нажатии на кнопку «SendMail», происходит отправка письма, используя протокол SMTP.

При нажатии кнопки выход в меню «Файл», происходит завершение работы программы.

6

Рис. 1.2. «Диаграмма работы протокола SMTP»

2.5. Разработанные меню и интерфейсы

При запуске программы на экране появляется главное окно программы с элементами управления (Рис. 2.1).

Рис. 2.1. «Главное окно»

Для настройки почтового клиента необходимо нажать на меню «Настройки». В результате, загружается окно настроек (рис. 2.2.).

Рис. 2.2. «Настройки»

Для отправки письма необходимо запустить окно «Написать письмо» (рис 2.3.), нажатием на кнопку «Написать письмо» в меню «Файл».

Рис. 2.3. окно «Написать сообщение»

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

Рис. 3.1. «Диаграмма классов»

Класс POP3

Класс POP3, также как и одноименный протокол используется для извлечения сообщений с почтового сервера. Данный класс наследуется от System.Net.Sockets.TcpClient реализованного в VS 2008.

Класс содержит несколько методов:

· ConnectPOP - используется для установки соединения с сервером;

· DisconnectPOP - закрывает соединение с сервером;

· ListMessages - получаем список сообщений с сервера;

· RetriveMessage - получение сообщения с сервера;

· DeleteMessage - удаление сообщения на сервере;

· Write - принимает сообщение на входе и записывает его в сетевой поток TCP;

· Response - метод обратный от Write.

Класс SMTP

Класс SMTP как и одноименный протокол обеспечивает отправку сообщений.

Содержит метод SendMail, который обеспечивает отправку сообщения по протоколу SMTP.

Класс Form1

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

Основные методы:

· LoadProfile - загрузка файла профиля почтового ящика;

· ReadMess - чтение сообщения из файла;

· FileCreate - сохранение почтового сообщения;

· ListMess - загрузка сообщений в элемент ListView;

· ItemsAdd - добавление новых сообщений в элемент ListView;

Класс FormSettings

Класс FormSettings обеспечивает интерфейс окна настроек почтового ящика, а также обеспечивает сохранение этих настроек в файл профиля.

Основные методы:

· LoadProfile - загрузка файла профиля почтового ящика;

· EditProfile - сохранение изменений профиля почтового ящика;

3. ПРОГРАММА И МЕТОДИКА ИСПЫТАНИЙ

Запуск программы осуществляется с помощью запуска файла Mail client.sln из среды разработки «MVS-2008».

Вверху окна расположены кнопки главного меню (рис. 3.5.1). Ниже расположено поле, в которое загружается список полученных писем. В самое нижнее поле загружается текст письма.

Результатом нажатия на меню «Получить почту», будет загрузка входящих писем в верхнее поле. Результатом нажатия на любое письмо, будет загрузка текста письма в нижнее поле. Для отправки письма нужно загрузить окно «Написать письмо» (рис 3.5.3) в меню файл. Результатом нажатия кнопки «SendMail» в окне «Написать письмо» будет отправка Эл. письма адресату. Результатом нажатия кнопки «выход» в меню «файл», будет выход из программы.

ЗАКЛЮЧЕНИЕ

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Герберт Шилдт «Полный справочник по C++», 2004 г.

2. Лабор В.В «Создание приложений для Windows», 2003 г.

3. Агуров П.В «Разработка компонентов в MS Visual Studio», 2008 г.

4. Э.Кровчик, В.Кумар, Н.Логари, А.Мунгале, К.Нагел, Т.Паркер, Ш.Шивакумар «NET сетевое программирование для профессионалов»,2005г.

ПРИЛОЖЕНИЕ 1

Form1.cs

namespace Mail_client

{

public partial class Form1 : Form

{

private string dir;

public static int countMesStart;

public static int countMes=0;

public static string sServerName ;

public static string sUserName;

public static string sPassword;

public static string SMTPserver;

private FormSettings fset= new FormSettings();

private FormNewMess fnewmess = new FormNewMess();

public Form1()

{

InitializeComponent();

this.ShowInTaskbar = false;

dir = Directory.GetCurrentDirectory();

ItemsAdd();

LoadProfile();

}

public string LoadProfile() //загрузка файла профиля

{

FileStream fs = new FileStream(dir+"messagesprofileporfile.txt",

FileMode.Open, FileAccess.Read);

StreamReader sr = new StreamReader(fs);

string CurLine;

int i = 0;

while

( (CurLine = sr.ReadLine()) != null)

{

i++;

if(i==1)

countMes = Convert.ToInt32(CurLine);

if (i == 2)

{

sServerName = CurLine;

}

if (i == 3)

sUserName = CurLine;

if (i == 4)

sPassword = CurLine;

if (i == 4)

SMTPserver = CurLine;

}

countMesStart = countMes;

fs.Close();

sr.Close();

return CurLine;

}

public string ReadMess(string num, int c) //чтение сообщения

{

String fil="";

if (c==2 )

fil = "";

if (c == 1)

fil = ".txt";

FileStream fs = new FileStream(dir+"messages" + num + fil,

FileMode.Open, FileAccess.Read);

StreamReader sr = new StreamReader(fs);

string CurLine="";

CurLine = sr.ReadToEnd();

fs.Close();

sr.Close();

return CurLine;

}

public void Get() //получение сообщений с сервера

{ string content;

POPException.POP3 oPOP = new POPException.POP3();

oPOP.ConnectPOP(sServerName, sUserName, sPassword);

ArrayList MessageList= oPOP.ListMessages();

foreach (POPException.POP3EmailMessage POPMsg in MessageList)

{

POPException.POP3EmailMessage POPMsgContent= oPOP.RetriveMessage(POPMsg);

content= POPMsgContent.msgContent;

string filename = Theme(content);

FileCreate(filename,content);

// richTextBox2.Text += content;

ItemsAdd();

}

oPOP.DisconnectPOP();

}

public string Theme(string content) //процедура получения темы сообщения

{

string resultValue="";

char m=r ;

int i = content.LastIndexOf("Subject:");

i += 9;

for ( char c=content[i];content[i]!=m; i++)

{

c = content[i];

resultValue +=c;

}

return resultValue;

}

public string FromMess(string content) //получение поля ОТ

{

string resultValue = "";

char m = r;

int i = content.IndexOf("From:");

i+=6;

for (char c = content[i]; content[i] != m; i++)

{

c = content[i];

resultValue += c;

}

return resultValue;

}

public string ToMess(string content) //получения поля кому

{

string resultValue = "";

char m = r;

int i = content.IndexOf("nTo:");

i += 4;

for (char c = content[i]; content[i] != m; i++)

{

c = content[i];

resultValue += c;

}

return resultValue;

}

public void FileCreate(string filename,string content) //процедура создания файла

{

countMes++;

FileStream myStream=File.Create(dir+"messages"+countMes+".txt");

int z = content.Length;

for ( int i=0; i < z; i++)

{

char c = content[i];

myStream.WriteByte((byte)c);

}

myStream.Close();

}

public void ListMess(string num,string theme, string from) // добавление сообщений в листвью

{

ListViewItem lvi = new ListViewItem((listView1.Items.Count + 1).ToString());

lvi.SubItems.Add(theme);

lvi.SubItems.Add(from);

listView1.Items.Add(lvi);

}

public void ItemsAdd()// Добавление новых сообщений

{string strin="";

// listBox1.Items.Clear();

listView1.Items.Clear();

//char c;

string[] contents = System.IO.Directory.GetFileSystemEntries(dir + @"messages");

foreach (string s in contents)

{

if ((s.IndexOf("profile") == -1))

{

for (int z = s.LastIndexOf("")+1; z < s.Length; z++)

{

char c = s[z];

strin += c;

}

string content=ReadMess(strin, 2);

string from = FromMess(content);

ListMess(strin,Theme(content), from);

// listBox1.Items.Add(strin);

strin = "";

}

}

}

public string ShowMes() //процедура показа выделенного сообщения

{

string resultValue = "";

if (listView1.SelectedItems.Count == 0)

return resultValue ;

string x = listView1.SelectedItems[0].Text;

string content = ReadMess(listView1.SelectedItems[0].Text, 1);

// ListMess(x,Theme(content), FromMess(content));

Them.Text = Theme(content);

From.Text = FromMess(content);

To.Text = ToMess(content);

char m = n;

char z = 0;

int i = content.LastIndexOf("Content-Transfer-Encoding:");

i += 9;

while (content[i] != m)

i++;

for (char c = content[i+1]; i < (content.Length); i++)

{

c = content[i];

resultValue += c;

}

return resultValue ;

}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)

{

string content = ShowMes();

richTextBox3.Text = content;

}

private void настройкиЯщикаToolStripMenuItem_Click(object sender, EventArgs e) //показ формы настройки ящмка

{

fset.ShowDialog(this);

}

private void mnuShow_Click(object sender, EventArgs e) //отображение главной формы

{

//Включаем отображения приложения на панели задач при запуске

this.ShowInTaskbar = true;

//Показываем форму

this.Show();

timer1.Enabled = false;

notifyIcon1.Icon =new Icon(dir+@"messagesprofileFolder1.ico");

//Отключаем доступность пункта меню mnuShow

mnuShow.Enabled = false;

//Включаем доступность пункта меню mnuHide

mnuHide.Enabled = true;

//Переменной Hidden устанавливаем значение false

}

private void mnuHideToolStripMenuItem_Click(object sender, EventArgs e)//сворачивание главной формы в трей

{

this.ShowInTaskbar = false;

this.Hide();

mnuShow.Enabled = true;

mnuHide.Enabled = false;

timer1.Enabled = true;

}

private void notifyIcon1_DoubleClick(object sender, EventArgs e) //открытие формы по щелчку на иконке в трее

{

mnuShow_Click(this, new EventArgs());

}

private void Form1_FormClosing(object sender, FormClosingEventArgs e) //закрытие главной формы

{

if (e.CloseReason == CloseReason.UserClosing)

{

e.Cancel = true;

this.Hide();

mnuShow.Enabled = true;

mnuHide.Enabled = false;

timer1.Enabled = true;

}

}

private void выходToolStripMenuItem_Click(object sender, EventArgs e) // процедура выхода из программы

{

notifyIcon1.Visible = false;

this.ShowInTaskbar = false;

this.Hide();

listView1.Items.Clear();

Application.Exit();

}

private void написатьПисьмоToolStripMenuItem_Click(object sender, EventArgs e)//показ формы Нового сообщения

{

fnewmess.ShowDialog(this);

private void timer1_Tick(object sender, EventArgs e) //таймер отвечает за проверку сообщений по времени

{

Get();

if (countMesStart < countMes)

{

notifyIcon1.Icon = new Icon(dir + @"messagesprofileNotePad.ico");

}

}

private void listView1_ItemActivate(object sender, EventArgs e)//изменение выброного сообщения

{

string content = ShowMes();

richTextBox3.Text = content;

}

private void получитьПочтуToolStripMenuItem_Click(object sender, EventArgs e)

{

Get();

}

private void Form1_Deactivate(object sender, EventArgs e)

{

if (WindowState == FormWindowState.Minimized)

{

this.ShowInTaskbar = false;

this.Hide();

mnuShow.Enabled = true;

mnuHide.Enabled = false;

timer1.Enabled = true;

}

}

private void Form1_Activated(object sender, EventArgs e)

{

if (WindowState == FormWindowState.Normal)

{

this.ShowInTaskbar = true;

//Показываем форму

this.Show();

timer1.Enabled = false;

mnuShow.Enabled = false;

mnuHide.Enabled = true;

notifyIcon1.Icon = new Icon(dir + @"messagesprofileFolder1.ico");

}

}

}

}

Program.cs

namespace Mail_client

{

namespace POPException

{

public class POPException : System.ApplicationException

{

public POPException(string str)

: base(str)

{

}

}

static class Program

{

static Form1 frm = null;

public static Form1 MainForm { get { return frm; } }

/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

static void Main()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(frm = new Form1());

}

}

public class POP3EmailMessage //класс описывающий emailMessage

{

public long msgNumber;

public long msgSize;

public bool msgReceived;

public string msgContent;

}

public class SMTP

{

public void SendMail(string sSMTPServer, string sFrom, string sTo, string sSubject, string sBody)//класс SMTP отвечающий за отправку сообщений

{

SmtpClient client = new SmtpClient(sSMTPServer, 25);

client.Credentials = new NetworkCredential(Form1.sUserName, Form1.sPassword);

MailMessage message = new MailMessage(Form1.sUserName, sTo, sSubject, sBody);

client.Send(message);

}

}

public class POP3 : System.Net.Sockets.TcpClient // Класс POP3 отвечающий за доставку смс сообщений

{

public void ConnectPOP(string sServerName, string sUserName, string sPassword) // соединение с POP сервером

{

string sMessages;

string sResult;

//вызываем метод connect класса TcpClient

Connect(sServerName, 110);

sResult = Response();

//проверка ответа

if (sResult.Substring(0, 3) != "+OK")

throw new POPException(sResult);

//отправляем имя пользователя

sMessages = "USER " + sUserName + "rn";

Write(sMessages);

sResult = Response();

//проверка ответа

if (sResult.Substring(0, 3) != "+OK")

throw new POPException(sResult);

//отправляем пароль

sMessages = "PASS " + sPassword + "rn";

Write(sMessages);

sResult = Response();

//проверка ответа

if (sResult.Substring(0, 3) != "+OK")

throw new POPException(sResult);

}

public void DisconnectPOP() //отсоединение от POP сервера

{

string sMessage;

string sResult;

sMessage = "QUITrn";

Write(sMessage);

sResult = Response();

//проверка ответа

if (sResult.Substring(0, 3) != "+OK")

throw new POPException(sResult);

}

public ArrayList ListMessages() //получение списка сообщений с сервера

{

string sMessage;

string sResult;

ArrayList returnValue = new ArrayList();

sMessage = "LISTrn";

Write(sMessage);

sResult = Response();

//проверка ответа

if (sResult.Substring(0, 3) != "+OK")

throw new POPException(sResult);

while (true)

{

sResult = Response();

if (sResult == ".rn")

{

// Program.MainForm.Add(returnValue);

return returnValue;

}

else

{

POP3EmailMessage oMailMessage = new POP3EmailMessage();

//Определяем разделитель

char[] sep = { };

//используем метод Split, чтобы разбить массив

string[] values = sResult.Split(sep);

//Помещаем данные в объект OMailMessage

long count=Int32.Parse(values[0]);

// ToString(count);

// Program.MainForm.Add(rv);

oMailMessage.msgNumber = Int32.Parse(values[0]);

oMailMessage.msgSize = Int32.Parse(values[1]);

oMailMessage.msgReceived = false;

returnValue.Add(oMailMessage);

continue;

}

}

}

public POP3EmailMessage RetriveMessage(POP3EmailMessage msgRETR) //доставка сообщений с POP сервера

{

string sMessage;

string sResult;

POP3EmailMessage oMailMessage = new POP3EmailMessage();

oMailMessage.msgNumber = msgRETR.msgNumber;

oMailMessage.msgSize = msgRETR.msgSize;

//для получения соответсвующего сообщения посылаем RETR

sMessage = "RETR " + msgRETR.msgNumber + "rn";

Write(sMessage);

sResult = Response();

if (sResult.Substring(0, 3) != "+OK")

throw new POPException(sResult);

//поскольку сообщение получено устанавливаем во флаге true

oMailMessage.msgReceived = true;

while (true)

{

sResult = Response();

if (sResult == ".rn")

break;

else

oMailMessage.msgContent += sResult;

}





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

Доработать Узнать цену работы по вашей теме
Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем курсовую работу самостоятельно:
! Как писать курсовую работу Практические советы по написанию семестровых и курсовых работ.
! Схема написания курсовой Из каких частей состоит курсовик. С чего начать и как правильно закончить работу.
! Формулировка проблемы Описываем цель курсовой, что анализируем, разрабатываем, какого результата хотим добиться.
! План курсовой работы Нумерованным списком описывается порядок и структура будующей работы.
! Введение курсовой работы Что пишется в введении, какой объем вводной части?
! Задачи курсовой работы Правильно начинать любую работу с постановки задач, описания того что необходимо сделать.
! Источники информации Какими источниками следует пользоваться. Почему не стоит доверять бесплатно скачанным работа.
! Заключение курсовой работы Подведение итогов проведенных мероприятий, достигнута ли цель, решена ли проблема.
! Оригинальность текстов Каким образом можно повысить оригинальность текстов чтобы пройти проверку антиплагиатом.
! Оформление курсовика Требования и методические рекомендации по оформлению работы по ГОСТ.

Читайте также:
Разновидности курсовых Какие курсовые бывают в чем их особенности и принципиальные отличия.
Отличие курсового проекта от работы Чем принципиально отличается по структуре и подходу разработка курсового проекта.
Типичные недостатки На что чаще всего обращают внимание преподаватели и какие ошибки допускают студенты.
Защита курсовой работы Как подготовиться к защите курсовой работы и как ее провести.
Доклад на защиту Как подготовить доклад чтобы он был не скучным, интересным и информативным для преподавателя.
Оценка курсовой работы Каким образом преподаватели оценивают качества подготовленного курсовика.

Другие популярные курсовые работы:

Сейчас смотрят :

Курсовая работа Организация перевозки груза на воздушном транспорте
Курсовая работа ПРОКУРАТУРА РОССИЙСКОЙ ФЕДЕРАЦИИ
Курсовая работа Финансовое планирование на предприятии (на примере ОАО "Северное сияние")
Курсовая работа Статистическое изучение объема, состава и динамики доходов и расходов государственного бюджета
Курсовая работа Исследования групповых форм работы на уроках истории
Курсовая работа Разработка программы защиты информации от несанкционированного доступа на базе алгоритма шифрования методом открытого ключа
Курсовая работа Анализ эффективности деятельности предприятия
Курсовая работа Олигополия
Курсовая работа Дивидендная политика предприятия
Курсовая работа Производство кирпича
Курсовая работа Аудит расчетов с прочими дебиторами и кредиторами
Курсовая работа Организация работы зоны уборочно-моечных работ для автотранспортного предприятия г. Ижевска
Курсовая работа Учёт и анализ молодняка и животных на выращивании и откорме на СПК "Родина"
Курсовая работа Проблемы и перспективы развития въездного туризма на примере Ленинградской области
Курсовая работа Использование экономических методов в управлении торговым предприятием