Cтарооскольский технологический институт (филиал)

Федерального государственного образовательного учреждения

высшего профессионального образования

"Национальный исследовательский технологический университет "МИСиС"

Кафедра АиСУ

Курсовая работа

по курсу " Технологии разработки программного обеспечения"

Выполнила:

Группа:ПРО-08-1д

Проверил:

Старый Оскол,

2012 год

Сожержание

1.Техническое задание ………………………………………………………………….3

2.Моделирование предметной области…………………………………………………………………………………………..4

3.Предварительное проектирование. Моделирование прецедентов………………………………………………………………..…………………...5

4. Предварительно проектирование. Анализ пригодности……………………………………………………………………..……………..6

5.Детальное проектирование. Диаграммы последовательности и диаграммы классов уровня проектирования………………………………………………………………………..7

6.Детальное проектирование. Реализация…………………………………..………….7

7.Список литературы……………………………………………………………………19

1.Техническое задание

1.1 Введение

Настоящее техническое задание распространяется на разработку программного обеспечения электронного перевода нот в гитарные табулатуры.

1.2. Основания для разработки

1.2.1. Программа разрабатывается на основании требований заказчика, СТИ НИТУ МИСиС

1.2.2. Наименование работы: «CNtT: Convert note to tab»

1.2.3. Исполнитель: студенты группы ПРО

1.3. Назначение

Программное обеспечение предназначено для перевода нот в гитарные табулатуры.

1.4. Требования к программному обеспечению

НЕ нашли? Не то? Что вы ищете?

1.4.1. Требования к функциональным характеристикам

1.4.1.1. В CNtT производится выбор нотного знака, а так же расстановка пауз

1.4.1.2. CNtT имеет функции копирования, вставки и удаления по одной ноте, а так же удаления всех нот одновременно

1.4.1.3. CNtT переводит ноты в гитарные табулатуры нажатием одной кнопки.

1.4.1.4. В CNtT так же возможно сохранять гитарные табулатуры в формате txt.

1.4.1.5 В CNtT возможно сохраняет ноты в формате jpeg

1.4.2. Требования к программной совместимости

Клиентская часть программы должна работать на платформах Microsoft Windows /XP/Vista/7

Серверная часть системы должна работать на платформе Windows 7.

1.5. Требования к программной документации

1.5.1. Разрабатываемые программные модули должны быть самодокументируемы, т. е. тексты программ должны содержать все необходимые комментарии.

1.5.2. Разрабатываемая система должна включать справочную документацию о работе программ и подсказки для пользователей.

1.6. Технико-экономические показатели

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

1.7. Стадии и этапы разработки

После передачи Исполнителем отдельного функционального модуля программы Заказчику последний имеет право тестировать модуль в течение 7 дней. После тестирования Заказчик должен принять работу по данному этапу или в письменном виде изложить причину отказа принятия. В случае обоснованного отказа исполнитель обязуется доработать модуль.

1.8. Порядок контроля и приемки

№ этапа

Наименование этапа

Сроки этапа

Чем заканчивается этап

1

Изучение предметной области. Проектирование системы. Разработка предложений по реализации системы.

05.09.201207.10.2012

Предложение по работе системы. Акт сдачи-приемки

2

Разработка программного обеспечения системы. Пробное внедрение системы.

09.10.201228.11.2012

Программная система, решающая поставленные задачи для пилотной эксплуатации. Акт сдачи-приемки

3

Тестирование и отладка системы. Внедрение.

30.11.201214.12.2012

Годовая система книжного электронного магазина. Программная документация. Акт сдачи-приемки работ.

2.Моделирование предметной области

Звук

 

3.Предварительное проектирование. Моделирование прецедентов

Главная последовательность:

Клиент выбирает ноту или паузу из панели инструментов и перетаскивает ее на нотный стан. После нажимает на кнопку (Tab).Система конвертирует нот в гитарную табулатуру и выдает ее на втором окне. При необходимости удалить можно 1 ноту, нажав на кнопку (D) , а после на ноту, которую надо удалить .Так же очистить весь нотный стан нажав на кнопку (Del all not).

Клиент может сохранить изображение нот на нотном стане используя кнопку (save as jpeg),а так же при нажатии на кнопку (save as txt) полученная табулатур сохраняется в формате txt

Альтернативные последовательности

Если Клиент не заполнив нотный стан и нажал на кнопку (Tab), то система выдает ошибку

Рис. 3.1 Модель прецедентов

4. Предварительно проектирование. Анализ пригодности

Рис.4.1.Диаграмма пригодности

Рис.4.2Модель предметной области с атрибутами классов

5.Детальное проектирование. Диаграммы последовательности и диаграммы классов уровня проектирования

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

Рис.5.2.Диаграмма классов уровня проектирования

6.Детальное проектирование. Реализация

6.1.Спецификация:

Программное обеспечение предназначено для перевода нот в гитарные табулатуры.

Файл запуска: CNtT. exe

6.2.Ведомость держателей подлинников:

ttt, JuJenka, AБ

6.3.Листинг программы:

using System;

using System. Collections. Generic;

using ponentModel;

using System. Data;

using System. Drawing;

using System. Linq;

using System. Text;

using System. Windows. Forms;

namespace noti

{

public partial class Form1 : Form

{

Bitmap bitmap;

int x_m, y_m,

koordinaty_line_kol, ch_not = 0, otklonenie_noty = 6;

double dl_not = 1, ch_dlitelnost = 0, raz_1, raz_2;

int[] not_st;//massiv koordinat "y" notnix linii

string notia = "G";

nota[] mas_not = new nota[100];

Notni_stan odin = new Notni_stan();

Image g_kluch = Image. FromFile(@"..\image\g-kluch. gif");

Image image_nota= Image. FromFile(@"..\image\1.gif");

bool poz_not = false, del=false, pauz=false;

string[,] tab_not_table ={

{"e","f","x","g","x","a","x","b","c'","x","d'","x","e'","f'","x","g'","x","a'","x","b'","x"},

{"B","c","x","d","x","e","f","x","g","x","a","x","b","c'","x","d'","x","e'","f'","x","g'"},

{"G","x","A","x","B","c","x","d","x","e","f","x","g","x","a","x","b","c'","x","d'","x"},

{"D","x","E","F","x","G","x","A","x","B","c","x","d","x","e","f","x","g","x","a","x"},

{"A,","x","B,","C","x","D","x","E","F","x","G","x","A","x","B","c","x","d","x","e","f"},

{"E,","F,","x","G,","x","A,","x","B,","C","x","D","x","E","F","x","G","x","A","x","B","c"}

};

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

raz_1 = 4;

raz_2 = 4;

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

mas_not[i] = new nota();

pictureBox1.Image = bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);

not_st = odin. postroenie_notni_stan2(bitmap, 0, 30, pictureBox1.Width, out koordinaty_line_kol);

Graphics g = Graphics. FromImage(bitmap);

g. DrawImage(g_kluch, 10, 48, 20, 50);

panel1.Refresh();

toolStripButton1.Image = Image. FromFile(@"..\image\i1.png");

toolStripButton2.Image = Image. FromFile(@"..\image\i2.png");

toolStripButton3.Image = Image. FromFile(@"..\image\i3.png");

toolStripButton4.Image = Image. FromFile(@"..\image\i4.png");

toolStripButton5.Image = Image. FromFile(@"..\image\i5.png");

toolStripButton6.Image = Image. FromFile(@"..\image\i6.png");

toolStripButton7.Image = Image. FromFile(@"..\image\i7.png");

toolStripButton8.Image = Image. FromFile(@"..\image\i8.png");

toolStripButton9.Image = Image. FromFile(@"..\image\i9.png");

toolStripButton10.Image = Image. FromFile(@"..\image\i10.png");

toolStripButton11.Image = Image. FromFile(@"..\image\i11.png");

// button4.Image = Image. FromFile(@"..\image\iTAB. png");

//-------

}

class Notni_stan

{

public int[] postroenie_notni_stan2(Bitmap pole, int x_n_s, int y_n_s, int dlina, out int koordinaty_line_kol)

{

int j = 0, nach_y = 0;

int[] koord_line = new int[26];

Graphics g = Graphics. FromImage(pole);

Pen Gr = new Pen(Color. LightGray, 2);

Pen Bl = new Pen(Color. Black, 2);

Pen Wh = new Pen(Color. White, 6);

Pen[] lin = { Gr, Wh };

nach_y += y_n_s;

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

{

if (i >= 10 && i <= 19) lin[0] = Bl; else lin[0] = Gr;

g. DrawLine(lin[i % 2], x_n_s, nach_y += ((i % 2 == 1) ? 4 : 2), dlina, nach_y);

koord_line[i] = nach_y;

j++;//kolichestvo vozvrachaimix koordinat metodom

}

koordinaty_line_kol = j;

return koord_line;

}

}

class zvyk

{

public string opredelenie_noty(int x, int y, int[] k_line)

{

string[] noti = { "b'","a'","g'","f'","e'","d'","c'",

"b", "a", "g", "f", "e", "d", "c",

"B", "A", "G", "F", "E", "D", "C",

"B,","A,","G,","F,","E,"};

string zv_notia = "A";

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

{

if (y == k_line[i])

zv_notia = noti[i];

}

return zv_notia;

}

}

class nota

{

public int x;

public int y;

public string zv;

public double dl;

public void Save_not(int xn, int yn, string zvn, double dln)

{

x = xn; y = yn; zv = zvn; dl = dln;

}

}

class takt_line

{

public int postr_takt_line(Bitmap pole, int x1, int y1, int y2)

{

Graphics g = Graphics. FromImage(pole);

Pen lin = new Pen(Color. Black, 2);

g. DrawLine(lin, x1 + 5, y1 + 30, x1 + 5, y2 + 30);

return 0;

}

}

void yv()

{

pictureBox1.Width = pictureBox1.Width * 2;

not_st = odin. postroenie_notni_stan2(bitmap, pictureBox1.Width / 2, 50, pictureBox1.Width, out koordinaty_line_kol);

}

void save_izo()

{

SaveFileDialog saveFileDialog1 = new SaveFileDialog();

saveFileDialog1.Filter = "JPeg Image (*.jpg)|*.jpg|Все файлы (*.*)|*.*";

saveFileDialog1.ShowDialog();

if (saveFileDialog1.FileName!= "")

{

System. IO. FileStream fs = (System. IO. FileStream)saveFileDialog1.OpenFile();

bitmap. Save(fs, System. Drawing. Imaging. ImageFormat. Jpeg);

}

}

void save_text()

{

SaveFileDialog saveFileDialog2 = new SaveFileDialog();

saveFileDialog2.Filter = "Текстовый документ (*.txt)|*.txt|Все файлы (*.*)|*.*";

{

if

(saveFileDialog2.ShowDialog() == System. Windows. Forms. DialogResult. OK &&

saveFileDialog2.FileName. Length > 0)

{

richTextBox1.SaveFile(saveFileDialog2.FileName, RichTextBoxStreamType. PlainText);

}

}

}

private void pictureBox1_MouseClick(object sender, MouseEventArgs e)

{

x_m = e. X;

y_m = e. Y;

if (poz_not == true)

{

if (del == false)

{

//-----otrisovka noti

pictureBox1.Image = bitmap;

Graphics g = Graphics. FromImage(bitmap);

g. DrawImage(image_nota, x_m, y_m - otklonenie_noty);

//-identifikacia_noti_i_save

double pldl = 0;

zvyk N = new zvyk();

takt_line l = new takt_line();

if (pauz == false)

notia = N. opredelenie_noty(e. X, e. Y, not_st);

else

notia = "pz";

mas_not[ch_not].Save_not(x_m, y_m, notia, dl_not);

ch_not++;

//----proverka_akord_li

pldl = dl_not;

for (int i = 0; i < ch_not - 1; i++)

if (e. X >= mas_not[i].x - 3 && e. X <= mas_not[i].x + 3)

pldl = 0;

}

else

{

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

{

if (e. X >= mas_not[i].x - 3 && e. X <= mas_not[i].x + 6)

{

mas_not[i].zv = "Del";

del_not();

noti_iz_mas(ch_not, mas_not);

break;

}

}

}

}

}

private void toolStripButton1_Click(object sender, EventArgs e)

{

image_nota = Image. FromFile(@"..\image\1.gif");

otklonenie_noty = 6;

dl_not = 1;

del = false;

pauz = false;

}

private void toolStripButton2_Click(object sender, EventArgs e)

{

image_nota = Image. FromFile(@"..\image\2.gif");

otklonenie_noty = 31;

dl_not = 0.5;

del = false;

pauz = false;

}

private void toolStripButton3_Click(object sender, EventArgs e)

{

image_nota = Image. FromFile(@"..\image\3.gif");

otklonenie_noty = 31;

dl_not = 0.25;

del = false;

pauz = false;

}

private void toolStripButton4_Click(object sender, EventArgs e)

{

image_nota = Image. FromFile(@"..\image\4.gif");

otklonenie_noty = 31;

dl_not = 0.125;

del = false;

pauz = false;

}

private void toolStripButton5_Click(object sender, EventArgs e)

{

image_nota = Image. FromFile(@"..\image\5.gif");

otklonenie_noty = 31;

dl_not = 0.0625;

del = false;

pauz = false;

}

private void toolStripButton6_Click(object sender, EventArgs e)

{

image_nota = Image. FromFile(@"..\image\6.gif");

otklonenie_noty = 3;

dl_not = 1;

del = false;

pauz = true;

}

private void toolStripButton7_Click(object sender, EventArgs e)

{

image_nota = Image. FromFile(@"..\image\7.gif");

otklonenie_noty = 2;

dl_not = 0.5;

del = false;

pauz = true;

}

private void toolStripButton8_Click(object sender, EventArgs e)

{

image_nota = Image. FromFile(@"..\image\8.gif");

otklonenie_noty = 18;

dl_not = 0.25;

del = false;

pauz = true;

}

private void toolStripButton9_Click(object sender, EventArgs e)

{

image_nota = Image. FromFile(@"..\image\9.gif");

otklonenie_noty = 4;

dl_not = 0.125;

del = false;

pauz = true;

}

private void toolStripButton10_Click(object sender, EventArgs e)

{

image_nota = Image. FromFile(@"..\image\10.gif");

otklonenie_noty = 11;

dl_not = 0.0625;

del = false;

pauz = true;

}

private void toolStripButton11_Click(object sender, EventArgs e)

{

del = true;

}

private void button1_Click(object sender, EventArgs e)

{

del_not();

}

private void button4_Click(object sender, EventArgs e)//tab

{

string[] tab = { "e)", "b)", "g)", "d)", "a)", "E)" };

//---sortirovka not po poriadky

nota obmen;

for (int i = 1; i < ch_not; i++)

for (int j = 0; j < ch_not-1; j++)

if (mas_not[j].x > mas_not[j+1].x)

{

obmen = mas_not[j];

mas_not[j] = mas_not[j+1];

mas_not[j+1] = obmen;

}

//

for (int j = 0; j < ch_not; j++)

{

if (mas_not[j].zv!= "Del")

{

if (mas_not[j].zv!= "pz")

{

bool f_n = false;

int lad = 0, strun = 0, strun_poisk = 0, il = 0;

for (strun_poisk = 0; strun_poisk < 6; strun_poisk++)

{

for (il = 0; il < 20; il++)

if (mas_not[j].zv == tab_not_table[strun_poisk, il])

{

lad = il;

strun = strun_poisk;

f_n = true;

break;

}

if (f_n == true) break;

}

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

{

tab[i] += "-";

if (i == strun) tab[i] += Convert. ToString(lad);

else tab[i] += "-";

}

if (lad > 9)//esli nomer lada 2znacnii dorisovat pod i nad 2oi cifroi linii

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

if (i!= strun) tab[i] += "-";

richTextBox1.Lines = tab;

strun_poisk = 0;

}

}

}

}

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)

{

poz_not = false;

int x_z, y_z, rk = 4;

x_z = e. X;

y_z = e. Y;

pictureBox1.Image = bitmap;

Bitmap bitmap2 = new Bitmap(bitmap);

Graphics g = Graphics. FromImage(bitmap2);

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

{

if (y_z == not_st[i])

{

if (i!= 0 && i!= 25)

if (not_st[i + 1] - not_st[i] == 2)

rk = 6;

else

rk = 4;

if (i == 25) rk = 6;

poz_not = true;

Pen Ze;

if(del == true)Ze = new Pen(Color. DarkMagenta, rk);

else Ze = new Pen(Color. Green, rk);

g. DrawLine(Ze, x_z, y_z, x_z + 10, y_z);

g. Dispose();

pictureBox1.Image = bitmap2;

}

}

}

void del_not()

{

ch_dlitelnost = 0;

bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);

pictureBox1.Image = bitmap;

not_st = odin. postroenie_notni_stan2(bitmap, 0, 30, pictureBox1.Width, out koordinaty_line_kol);

Graphics g = Graphics. FromImage(bitmap);

g. DrawImage(g_kluch, 10, 48, 20, 50);

// ch_not = 0;

}

void noti_iz_mas(int ch_not_p, nota[] mas_not_p)

{

Graphics g = Graphics. FromImage(bitmap);

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

{

if (mas_not_p[i].zv!= "Del")

{

if (mas_not[i].zv!= "pz")

{

switch (mas_not_p[i].dl. ToString())

{

case "1":

image_nota = Image. FromFile(@"..\image\1.gif");

otklonenie_noty = 6;

break;

case "0,5":

image_nota = Image. FromFile(@"..\image\2.gif");

otklonenie_noty = 31;

break;

case "0,25":

image_nota = Image. FromFile(@"..\image\3.gif");

otklonenie_noty = 31;

break;

case "0,125":

image_nota = Image. FromFile(@"..\image\4.gif");

otklonenie_noty = 31;

break;

case "0,0625":

image_nota = Image. FromFile(@"..\image\5.gif");

otklonenie_noty = 31;

break;

}

g. DrawImage(image_nota, mas_not_p[i].x, mas_not_p[i].y - otklonenie_noty);

}

else

{

switch (mas_not_p[i].dl. ToString())

{

case "1":

image_nota = Image. FromFile(@"..\image\6.gif");

otklonenie_noty = 3;

break;

case "0,5":

image_nota = Image. FromFile(@"..\image\7.gif");

otklonenie_noty = 2;

break;

case "0,25":

image_nota = Image. FromFile(@"..\image\8.gif");

otklonenie_noty = 18;

break;

case "0,125":

image_nota = Image. FromFile(@"..\image\9.gif");

otklonenie_noty = 4;

break;

case "0,0625":

image_nota = Image. FromFile(@"..\image\10.gif");

otklonenie_noty = 11;

break;

}

g. DrawImage(image_nota, mas_not_p[i].x, mas_not_p[i].y - otklonenie_noty);

}

}

}

}

private void button2_Click(object sender, EventArgs e)

{

save_izo();

}

private void button3_Click(object sender, EventArgs e)

{

save_text();

} }}

6.4.Интерфейс:

6.5Результат программы:

Рис.6.5.1.Перевод нот в гитарную табулатуру

Рис.6.5.2. Удаление нот с нотного стана

Рис.6.5.3. Сохранение в формате. txt

Рис.6.5.4. Сохранение в формате. jpg

6.6.Документация.

Выбор длительности ноты, расстановка на нотном стане:

Выбор ноты производится нажатием на кнопку с изображением длительности ноты. Расстановка производится перетаскиванием выбранной ноты на нотный стан

*Расстановка пауз:

Произвдится перетаскиванием выбранной паузы на нотный стан

*Удаление нот по одной:

После нажатия на кнопку удаления (D) , вбирается нота, которую необходимо удалить, посредством щелчка левой кнопки мыши

*Перевод нот в гитарные табулатуры:

После нажатия на кнопку (Tab) все ноты, на нотном стане, конверти - руются в гитарные табулатуры и выводятся во втором окне.

*Очистка нотного стана:

После нажатия на кнопку (Del all not) все ноты на нотном стане удаляются

*Сохранение в формате jpeg:

При нажатии на кнопку (save as jpeg) изображение нотного стана можно сохранить, указав в диалоговом окне путь и имя сохраняемого файла.

*Сохранение в формате txt:

При нажатии на кнопку (save as txt) полученная табулатур сохраняется в формате txt, при этом в диалоговом окне указываются путь и имя файла

6.7.Описание языка

C#— объектно-ориентированный язык программирования.

В центре ООП находится понятие объекта. Объект — это сущность, которой можно посылать сообщения, и которая может на них реагировать, используя свои данные. Объект — это экземпляр класса. Данные объекта скрыты от остальной программы. Сокрытие данных называется инкапсуляцией.

Наличие инкапсуляции достаточно для объектности языка программирования, но ещё не означает его объектной ориентированности — для этого требуется наличие наследования.

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

Список литературы

Технологии разработки программного обеспечения. Методические указания к выполнению лабораторных работ. Старый Оскол. СТИ МИСиС, 2008. – 36 с.

Объектно-ориентированный анализ и проектирование с примерами приложений. 3-е изд. [Текст] / Гради Буч, Максимчук, Энгл, Бобби Дж. Янг, Джим Коналлен, Хьюстон. — М.: Вильямс, 2008. — 720 с.: ил.; 24 см. — Библиогр.: с. 641–714. — ISBN 1401-9.

Гагарина, Л. Г. Технология разработки программного обеспечения: учебное пособие [текст] / , , . Под ред. . — М.: ИД «ФОРУМ»: ИНФРА-М, 2008. — 400 с.: ил.; 22 см. — Библиогр.: с. 388–391. — ISBN 0342-1 (ИД «ФОРУМ»), 3193-4 (ИНФРА-М).