close

Вход

Забыли?

вход по аккаунту

?

курсач(9)

код для вставкиСкачать
Cтарооскольский технологический институт (филиал)
Федерального государственного образовательного учреждения
высшего профессионального образования
"Национальный исследовательский технологический университет
"МИСиС"
Кафедра АиСУ
Курсовая работа
по курсу " Технологии разработки программного обеспечения"
Выполнила:
Бушмакина В.В.
Группа:ПРО-08-1д
Проверил:
Чичварин А.В.
Старый Оскол,
2012 год
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.2012–07.10.2012
области.
Проектирование
системы. Разработка
предложений
по
реализации системы.
2
Разработка
09.10.2012–28.11.2012
программного
обеспечения системы.
Пробное
внедрение
системы.
3
Тестирование
и 30.11.2012–14.12.2012
отладка
системы.
Внедрение.
Чем заканчивается
этап
Предложение
по
работе системы. Акт
сдачи-приемки
Программная система,
решающая
поставленные задачи
для
пилотной
эксплуатации.
Акт
сдачи-приемки
Годовая
система
книжного
электронного
магазина.
Программная
документация.
Акт
сдачи-приемки работ.
2.Моделирование предметной области
Гитарные
табулатуры
Длительность
Координаты
Ноты
Нотный стан
Звук
3.Предварительное проектирование. Моделирование прецедентов
Главная последовательность:
Клиент выбирает ноту или паузу из панели инструментов и
перетаскивает ее на нотный стан. После нажимает на кнопку (Tab).Система
конвертирует нот в гитарную табулатуру и выдает ее на втором окне.При
необходимости удалить можно 1 ноту , нажав на кнопку (D) , а после на ноту
, которую надо удалить .Так же очистить весь нотный стан нажав на кнопку
(Del all not).
Клиент может сохранить изображение нот на нотном стане используя
кнопку (save as jpeg),а так же при нажатии на кнопку (save as txt) полученная
табулатур сохраняется в формате txt
Альтернативные последовательности
Если Клиент не заполнив нотный стан и нажал на кнопку (Tab), то
система выдает ошибку
Сохранение
гитарной
табулатуры
формате txt
Выбор
длительности
ноты, расстановка
на нотном стане
Расстановка
пауз
в
Сохранение нот
в формате jpeg
Удаление нот по
одной
клиент
Очистка нотного
стана
Перевод нот в
гитарные
табулатуры
Рис. 3.1 Модель прецедентов
4. Предварительно проектирование. Анализ пригодности
Инструменты
Отображен
ие нотного
стана
Щелчок по
кнопке
Очищение
координат
Клиент
Сохранить
в формате
jpeg
Сохранение
Очистка
нотного стана
Сохранить
в формате
txt
Сохранение
Результат
перевода
нот в табы
Рис.4.1.Диаграмма пригодности
Ноты
Нотный стан
-длительность
-координаты
-звук
-координаты
Гитарная
табулатура
Рис.4.2Модель предметной области с атрибутами классов
5.Детальное проектирование. Диаграммы последовательности и
диаграммы классов уровня проектирования
Удаление
1 ноты
Перевод из нот
в табы
инструменты
Отображение
табов
Нотный стан
Выбор нужного
элемента
на
панели
инструментов
Отображение
нот на нотном
стане
Отображение
табов
Рис.5.1.Диаграмма последовательности прецедента
Рис.5.2.Диаграмма классов уровня проектирования
6.Детальное проектирование. Реализация
6.1.Спецификация:
Программное обеспечение предназначено для перевода нот в гитарные табулатуры.
Файл запуска: CNtT.exe
6.2.Ведомость держателей подлинников:
ttt, JuJenka, AБ
6.3.Листинг программы:
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Linq;
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#— объектно-ориентированный язык программирования.
В центре ООП находится понятие объекта. Объект — это сущность, которой можно
посылать сообщения, и которая может на них реагировать, используя свои данные. Объект
— это экземпляр класса. Данные объекта скрыты от остальной программы. Сокрытие
данных называется инкапсуляцией.
Наличие инкапсуляции достаточно для объектности языка программирования, но
ещё не означает его объектной ориентированности — для этого требуется наличие
наследования.
Но даже наличие инкапсуляции и наследования не делает язык программирования в
полной мере объектным с точки зрения ООП. Основные преимущества ООП проявляются
только в том случае, когда в языке программирования реализован полиморфизм; то есть
возможность объектов с одинаковой спецификацией иметь различную реализацию.
Документ
Категория
Программное обеспечение
Просмотров
2
Размер файла
516 Кб
Теги
курсач
1/--страниц
Пожаловаться на содержимое документа