Глава II. Проектирование и разработка программного продукта — КиберПедия 

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Глава II. Проектирование и разработка программного продукта

2020-04-01 101
Глава II. Проектирование и разработка программного продукта 0.00 из 5.00 0 оценок
Заказать работу

UML -диаграммы

 

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

UML диаграмма прецедентов

Диаграмма прецедентов (рис.2) - диаграмма, на которой отражены отношения, существующие между актёрами и прецедентами.

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

Проще сказать, диаграмма прецедентов отображает поведение системы или ее части под тем углом, под каким её видит пользователь.

 

Рис. 2 Диаграмма прецедентов


Диаграмма классов

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

Диаграмма классов (рис.3) представляет собой граф, вершинами которого являются элементы типа «классификатор», связанные различными типами структурных отношений. Диаграмма классов может также содержать интерфейсы, пакеты, отношения и даже отдельные экземпляры, такие как объекты и связи.

 

Рис. 3 Диаграмма классов


Описание классов

 

Для осуществления работы модели использовалось два класса

·   DPlayer (ПРИЛОЖЕНИЕ А)

·   DMessage (ПРИЛОЖЕНИЕ Б)

Класс DPlayer выполняет основные задачи по воспроизведению mp3 файлов, а класс DMessage реализует механизм локализации.

Интерфейс приложения

 

После запуска приложения, пользователь будет наблюдать внешний вид проигрывателя (рис.4). Сперва нужно выбрать песню, которую будем воспроизводить. Затем выбрать оптимальную громкость для прослушивания. Интуитивно понятный интерфейс даёт пользователю возможность воспроизвести, приостановить, остановить или загрузить новую мелодию. Основной проект DPlayerProgramm (ПРИЛОЖЕНИЕ В) состоит из: ресурсов (изображения кнопок и главной формы), экземпляров классов поставляемой библиотеки DPlayerClasses и обработки событий функциональных кнопок

 

Рис.4 Внешний вид

Выводы по ГЛАВЕ II

 

Во второй главе описано создание UML-диаграмм. Так была описана среда разработки ПО и модель «оболочка для воспроизведения аудиофайлов» содержащая 2 класса. Приложение дает возможность пользователю проигрывать mp3 файлы, содержит приятный и удобный интерфейс.

 


ЗАКЛЮЧЕНИЕ

 

В ходе курсового проектирования были усвоены и закреплены принципы разработки программного обеспечения с использованием объектно-ориентированного анализа.

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

·   возможность воспроизведения, остановки и приостановки mp3 файла;

·   перематывание песни на любые промежутки времени;

·   отображения названия песни и её общую длительность;

·   возможность регулировки уровня звука;

Основные достоинства программы:

·   малый размер приложения (141 Кб);

·   легкая переносимость программы;

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

Также были систематизированы знания и получены новые навыки.

 


СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

1. Оtvetin [Электронный ресурс]. - Режим доступа: http://otvetin.ru/naukatchech/607-kto-izobrel-pervye-chasy.html

2. Модели объектов и их назначение [Электронный ресурс]. - Режим доступа: http://school.xvatit.com/index.php

3. Свободная энциклопедия - Википедия [Электронный ресурс]. - Режим доступа: http://ru.wikipedia.org/wiki/

4. Citforum [Электронный ресурс]. - Режим доступа: http://citforum.ru/programming/tasm3/tasm3_4.shtml

5. С# [Электронный ресурс]. - Режим доступа: http://cesharp.narod.ru/

6. Введение в язык C++[Электронный ресурс]. - Режим доступа: http://dvo.sut.ru/libr/cvti/i618buz/1.htm

7. Герберт Шилдт: Полный справочник по С#.: Пер. с англ. - М.: Издательский дом "Вильямc", 2004. - 752 с.

1.  scala [Электронный ресурс]. - Режим доступа: http://ru-scala.livejournal.com/

 


ПРИЛОЖЕНИЕ А

 

Реализация класса DPlayer. cs.

namespace DPlayerClasses

{

public class DPlayer

{

public readonly int MAX_DISPLAY_SIZE = 45;

 

private string _command;

private bool isOpen;

private bool isPause;

private int volume;

private int navigate;

 

public bool IsOpen

{

get { return isOpen; }

}

public bool IsPause

{

get { return isPause; }

}

//

//Выполняется проигрывание

//

public bool IsPlay

{

get

{

if (this.Status == "playing") return true;

else return false;

}

}

//

//Длинна файла, секунды

//

public int Length

{

get

{

if (isOpen)

{.Text.StringBuilder sb = new System.Text.StringBuilder(128);("status MediaFile length", sb, 128, IntPtr.Zero);

if (sb.Length == 0) return 0;

return Convert.ToInt32(sb.ToString()) / 1000;

}

else return 0;

}

}

//

//Громкость (0-100)

//

public int Volume

{

get

{

return this.volume;

}

set

{

this.volume = value;("setaudio MediaFile volume to " + value * 10, null, 0, IntPtr.Zero);

}

}

//

//Движение по треку, переход на позицию

//

public int Navigate

{

get

{

if (!isOpen) return -1;.Text.StringBuilder sb = new System.Text.StringBuilder(128);("status MediaFile position", sb, 128, IntPtr.Zero);

return Convert.ToInt32(sb.ToString()) / 1000;

}

set

{

this.navigate = value;("seek MediaFile to " + value * 1000, null, 0, IntPtr.Zero);

mciSendString("play MediaFile", null, 0, IntPtr.Zero);

}

}

 

//

//Получение текущего статуса

//

public String Status

{

get

{.Text.StringBuilder sb = new System.Text.StringBuilder(128);

mciSendString("status MediaFile mode", sb, 128, IntPtr.Zero);

return sb.ToString();

}

}

public DPlayer()

{

volume = 100;

navigate = 0;

}

 

[DllImport("winmm.dll")]static extern long mciSendString(string Cmd, StringBuilder StrReturn, int ReturnLength, IntPtr HwndCallback);

 

public string LoadMP3File()

{

OpenFileDialog ofd = new OpenFileDialog();

ofd.InitialDirectory = Environment.SpecialFolder.MyMusic.ToString();

ofd.Filter = "mp3 files |*.mp3";

ofd.FilterIndex = 1;

if (ofd.ShowDialog() == DialogResult.OK)

{

return ofd.FileName.ToString();

}

return String.Empty;

}

 

public void PlayMP3Loop(bool loop)

{

if (isOpen)

{

_command = "play MediaFile";

if (loop)

{

_command += " REPEAT";

}

mciSendString(_command, null, 0, IntPtr.Zero);

isPause = false;

}

}

 

public void OpenMP3Player(string sFileName)

{

_command = "open \"" + sFileName + "\" type mpegvideo alias MediaFile";

mciSendString(_command, null, 0, IntPtr.Zero);

isOpen = true;

}

 

public void StopMP3Player()

{

if (isOpen)

{

mciSendString("stop MediaFile", null, 0, IntPtr.Zero);

}

}

 

public void PauseMP3Player()

{

//Если играет трек

if (isPause == false)

{

//Останавливаем проигрывание

mciSendString("pause MediaFile", null, 0, IntPtr.Zero);

isPause = true;

}

}

 

public void CloseMP3Player()

{

_command = "close MediaFile";

mciSendString(_command, null, 0, IntPtr.Zero);

isOpen = false;

}

}

}

 


ПРИЛОЖЕНИЕ Б

 

Реализация класса DMessage. cs.

namespace DPlayerClasses

{

public class DMessage

{

public enum Constants: short

{

// Подсказки

HINT_STOP,

HINT_PLAY,

HINT_PAUSE,

HINT_EJECT,

// Состояния воспроизведения

STATE_STOP,

STATE_PLAY,

STATE_PAUSE,

STATE_INITIAL_MP3NAME_H,

STATE_INITIAL_MP3NAME,

STATE_INITIAL_TIME_H

}

private readonly int MES_AMOUNT;

private string[] value;

 

public DMessage()

{

MES_AMOUNT = Enum.GetValues(typeof(Constants)).Length;

value = new string[MES_AMOUNT];

}

 

public string GetMessage(short type)

{

if (type >= 0 && type < MES_AMOUNT)

{

return value[type];

}

return string.Empty;

}

 

public void LoadLangFile(string file)

{

try

{

XDocument xdoc = XDocument.Load(file);

var messages = xdoc.Elements("DPlayer").Elements("mes");

if (messages.LongCount()!= MES_AMOUNT)

{

throw new Exception("Invalid language file");

}

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

{

value[i] = messages.ElementAt(i).Value;

}

}

catch (Exception ex)

{

throw new Exception(ex.Message);

}

 

}

}

}


ПРИЛОЖЕНИЕ В

 

Реализация главной части проекта.

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;DPlayerClasses;System.Runtime.InteropServices;

DPlayerProgramm

{

public partial class Form1: Form

{

private const string LANG_FILE = "ln/ru-RU.xml";

 

String mp3Name = String.Empty;

DPlayer DPlayer = new DPlayer();

DMessage DMes = new DMessage();

 

 

int iFormX, iFormY, iMouseX, iMouseY;//глобальные переменные

//int resetCounter = 0;

private void Form1_MouseDown(object sender, MouseEventArgs e)

{

iFormX = this.Location.X;

iFormY = this.Location.Y;

iMouseX = MousePosition.X;

iMouseY = MousePosition.Y;

}

 

private void Form1_MouseMove(object sender, MouseEventArgs e)

{

int iMouseX2 = MousePosition.X;

int iMouseY2 = MousePosition.Y;

if (e.Button == MouseButtons.Left)

this.Location = new Point(iFormX + (iMouseX2 - iMouseX), iFormY + (iMouseY2 - iMouseY));

}

 

public Form1()

{

try

{

DMes.LoadLangFile(LANG_FILE);

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

 

InitializeComponent();

 

this.VOLUME.Text = DPlayer.Volume.ToString()+"%";

 

}

 

private void button1_Click(object sender, EventArgs e)

{

Form1.ActiveForm.Close();

}

 

private void MIN_Click(object sender, EventArgs e)

{

Form1.ActiveForm.WindowState = FormWindowState.Minimized;

}

 

private void EJECT_Click(object sender, EventArgs e)

{

mp3Name = DPlayer.LoadMP3File();

int substr;

if (mp3Name!= String.Empty)

{

try

{NAME.Text = System.IO.Path.GetFileNameWithoutExtension(mp3Name); ((substr = MP3NAME.Text.Length) > DPlayer.MAX_DISPLAY_SIZE)

substr = DPlayer.MAX_DISPLAY_SIZE;

MP3NAME.Text = MP3NAME.Text.Substring(0, substr);

 

DPlayer.CloseMP3Player();

DPlayer.OpenMP3Player(mp3Name);

DPlayer.PlayMP3Loop(false);.MP3NAME_H.Text = DMes.GetMessage((short)DMessage.Constants.STATE_PLAY);

.MP3TIME_TOTAL.Text = String.Format("{0:00}:{1:00}", DPlayer.Length / 60, DPlayer.Length % 60);

this.TIME_TRACK.Maximum = DPlayer.Length;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message.ToString());

}

}

}

 

private void PLAY_Click(object sender, EventArgs e)

{

try

{

DPlayer.OpenMP3Player(mp3Name);

DPlayer.PlayMP3Loop(false);

if (DPlayer.IsPause == false)

this.PAUSE.Enabled = true;

this.MP3NAME_H.Text = DMes.GetMessage((short)DMessage.Constants.STATE_PLAY);

}

catch (Exception ex)

{

MessageBox.Show(ex.Message.ToString());

}

}

 

private void PAUSE_Click(object sender, EventArgs e)

{

try

{

DPlayer.PauseMP3Player();

if(DPlayer.IsPause == true)

this.PAUSE.Enabled = false;.MP3NAME_H.Text = DMes.GetMessage((short)DMessage.Constants.STATE_PAUSE);

}

catch (Exception ex)

{

MessageBox.Show(ex.Message.ToString());

}

}

 

private void STOP_Click(object sender, EventArgs e)

{

try

{

DPlayer.CloseMP3Player();.MP3NAME_H.Text = DMes.GetMessage((short)DMessage.Constants.STATE_STOP);

this.MP3TIME_CUR.Text = String.Format("{0:00}:{1:00}", 0, 0);

this.TIME_TRACK.Value = 0;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message.ToString());

}

}

 

private void RIGHT_Click(object sender, EventArgs e)

{

if (DPlayer.Navigate < DPlayer.Length + 5) DPlayer.Navigate += 5;

}

 

private void LEFT_Click(object sender, EventArgs e)

{

if (DPlayer.Navigate > 5) DPlayer.Navigate -= 5;

}

 

private void DTimer_Tick(object sender, EventArgs e)

{

int pos;

if (DPlayer.IsPlay)

{

pos = DPlayer.Navigate;

this.MP3TIME_CUR.Text = String.Format("{0:00}:{1:00}", pos / 60, (pos) % 60);

this.TIME_TRACK.Value = pos;

if (DPlayer.Navigate == DPlayer.Length - 1)

{

try

{

DPlayer.CloseMP3Player();

this.MP3NAME_H.Text = DMes.GetMessage((short)DMessage.Constants.STATE_STOP);.MP3TIME_CUR.Text = String.Format("{0:00}:{1:00}", 0, 0);

this.TIME_TRACK.Value = 0;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message.ToString());

}

}

}

}

private void TIME_TRACK_Scroll(object sender, ScrollEventArgs e)

{

DPlayer.Navigate = this.TIME_TRACK.Value;

}

 

private void VOLUME_TRACK_Scroll(object sender, ScrollEventArgs e)

{

DPlayer.Volume = this.VOLUME_TRACK.Value;

this.VOLUME.Text = this.VOLUME_TRACK.Value.ToString() + "%";

}

}

}


Поделиться с друзьями:

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

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

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.126 с.