Модель складання програм радіостанції

Розробка програми для реалізації системи, що забезпечує автоматичне управління та моделювання зміни музичних програм на радіостанції з використанням засобів Microsoft Visual. Програмна реалізація інтерфейсу та процесу моделювання роботи системи.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 08.01.2012
Размер файла 1,7 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Міністерство освіти, науки, молоді та спорту України

Криворізький національний університет

Кафедра інформатики та прикладної математики

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

курсу об'єктно-орієнтоване програмування

на тему: «Модель складання програм радіостанції»

Виконав:

студент 3-го курсу

групи І-09

Бєляєв М.В.

м. Кривий Ріг

2011

ВСТУП

Об'єктне та об'єктно-орієнтоване програмування (ООП) виникло в результаті розвитку ідеології процедурного програмування, де дані і підпрограми (процедури, функції) їх обробки формально не пов'язані. Крім того, в сучасному об'єктно-орієнтованому програмуванні часто велике значення мають поняття події (так зване подієво-орієнтоване програмування) та компонента (компонентне програмування).

В даний час кількість прикладних мов програмування (список мов), що реалізують об'єктно-орієнтовану парадигму, є найбільшим по відношенню до інших парадигм. В області системного програмування до цих пір застосовується парадигма процедурного програмування, і загальноприйнятою мовою програмування є мова C++. Хоча при взаємодії системного і прикладного рівнів операційних систем помітний вплив стали надавати мови об'єктно-орієнтованого програмування.

Об'єктно-орієнтована мова створює оточення у вигляді безлічі незалежних об'єктів, кожен з яких відрізняється своїми властивостями і способами взаємодії з іншими об'єктами. У цьому оточенні кожен об'єкт, по суті, веде себе подібно комп'ютера: він може отримувати повідомлення від інших об'єктів і в свою чергу посилати повідомлення, запам'ятовувати інформацію та обробляти її певним чином.

Задаючи структуру обміну повідомленнями між об'єктами, програміст отримує сукупність операцій, які й складають програму. Об'єкти можна використовувати для вирішення завдань, не розуміючи механізму їх (об'єктів) роботи.

Об'єктно-орієнтована мова приховує багато деталей роботи системи всередині самих об'єктів. Однак при необхідності програміст може модифікувати деталі внутрішнього устрою об'єктів, створюючи тим самим інші об'єкти, необхідні для вирішення нових завдань.

Операції над даними, укладеними в об'єкті, запускаються при отриманні ним повідомлення, яке зазначає потрібну послідовність дій. Конкретна процедура, що ідентифікується повідомленням і вимагає виконання, міститься в одержуваному повідомленні об'єкт у вигляді внутрішньої програми,названої методом. Метод виконує маніпуляції з даними, що зберігаються всередині об'єкта, і може також посилати повідомлення іншим об'єктам з метою отримання потрібного результату, який потім повертається до об'єкта, що послав повідомлення.

Кожен об'єкт сприймає повідомлення, що стосуються тих понять, які він представляє. Наприклад, об'єкт, відповідальний за роботу з числами, розуміє повідомлення, що стосуються арифметичних обчислень. Інший об'єкт, що представляє список, не сприймає подібних повідомлень, але реагує на запити запам'ятовування і добування інформації. Об'єкт, що стежить за становищем фігур на екрані комп'ютера, знає, як відповідати на запити про розташування і розміри фігур.

Об'єктно-орієнтована мова добре підходить для написання складних програм для керування комп'ютерних систем. Оскільки кожна частина системи може бути представлена об'єктом, заміна однієї з них, наприклад програми управління друкуючим пристроєм (принтером) або екраном, може бути здійснена без змін на інші частини системи. Програміст просто домагається того, щоб нова частина відповідала на ті ж повідомлення, що і замінена. Яким чином досягається результат - несуттєво.

Мета роботи: розробити програму для реалізації системи, що забезпечує автоматичне управління та моделювання зміни музичних програм на радіо. Система повинна враховувати:

· радіостанція працює цілодобово;

· за добу радіостанція пропонує декілька програм;

· програми діляться на два види:

o замовлення від слухачів;

o хіт-паради;

· зберігати фонотеку музичних творів;

· приймати та обробляти потік заявок від клієнтів.

Для досягнення мети потрібно вирішити наступні задачі:

- вивчити літературу за темою роботи;

- розробити модель системи управління програмами на радіостанції;

- реалізувати програму управління програмами на радіостанції;

- протестувати розроблену програму.

радіостанція програма microsoft visual

РОЗДІЛ І АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ

1.1 Об'єктна модель системи

Об'єктна модель описує структуру об'єктiв, що складають систему, їх атрибути, їх операцiї, їх взаємозв'язок з iншими об'єктами. В об'єктній моделi мають бути вiдображенi поняття i об'єкти дiйсного свiту, якi важливi для розроблюваної системи. В об'єктній моделi вiдображається прагматика розроблюваної системи, що виявляється у використаннi термiнологiї прикладної областi.

1.2 Об'єкти i класи

Об'єкти. Мета розробки об'єктної моделi -- описати об'єкти. Приклади об'єктiв: Банк «Аваль», Iван Ничепоренко, процес № 1953, телефон тощо. Тобто об'єктом є будь-яка рiч, яка має змiст для розглядуваної прикладної областi. Отже, об'єктом є поняття, абстракцiя чи будь-яка рiч з чiтко окресленим кордоном, яка має змiст у контексті розглядуваної прикладної проблеми. Ведення об'єктiв має двi цілі:

o зрозумiти прикладну задачу (проблему);

o створити основу для реалiзацii на комп'ютерi.

Декомпозицiя проблеми на об'єкти є процес, який дуже погано формалiзується. Усi об'єкти можуть вiдрiзнятися один вiд одного: нехай нам належать два яблука, якi мають однаковий колiр, форму, масу i смак; усе одно два яблука (а не одне), якщо з'їсти одне з них (друге залишиться).

Мiж об'єктами можливо встановити відношення тотожності. Об'єкти, якi задовольняють це вiдношення, -- однаковi (тотожнi). У випадку з яблуками iнодi говорять про два представники об'єкта яблуко. Тут i далi вважатимемо, що об'єкт i представник -- одно i те саме.

Класи. Два яблука з попереднього прикладу належать одному й тому самому класу об'єктiв. Колiр, маса, форма i смак яблука -- це його атрибути: сукупнiсть атрибутiв i їх значень характеризує об'єкт.

Усi об'єкти одного i того самого класу характеризуються однаковими наборами атрибутiв. Проте об'єднання об'єктiв у класи визначається не наборами атрибутiв, а семантикою. Так, наприклад, стайня i кiнь можуть мати однаковi атрибути: цiну i вiк. При цьому вони можуть належати одному класу, якщо розглядаються в задачi просто як товар, або до рiзних класів, що бiльш природно.

Об'єднання об'єктiв у класи дозволяє ввести в задачу абстракцiю i розглядати її у загальнiшій постановцi. Клас має iм'я (наприклад «кiнь»), яке переходить на всi об'єкти цього класу. Крiм того, до класу включаються iмена атрибутiв, якi визначенi для об'єктiв. У цьому сенсі опис класу аналогiчний опису типу структури (запису); кожний об'єкт має той самий змiст, що й представник

1.3 Атрибути об'єктiв

Атрибут -- значення, яке характеризує об'єкт в його класi. Приклади атрибутiв: категорiя, баланс, кредит (атрибути об'єктiв класу Рахунок); iм'я, вiк, маса (атрибути об'єктiв класу Людина) тощо.

Серед атрибутiв розрiзняються постiйнi (сталі) та змiннi атрибути. Постiйнi атрибути характеризують об'єкт у його класi (наприклад, номер рахунку, категорiя, iм'я людини i т. д.). Поточне значення змiнних атрибутiв характеризує поточний стан об'єкта (наприклад, баланс рахунку, вiк людини i т. д.); змiни значень цих атрибутiв спричинюють змiни стану об'єкта. Атрибути перелiчуються в другій частинi прямокутника, яка зображає клас Iнодi зазначають тип атрибутiв i початкове значення змiнних атрибутiв (сукупнiсть початкових значень цих атрибутiв задає початковий стан об'єкта).

Слiд зазначити, що, говорячи про класи та їх об'єкти, ми не припускаємо нiякої об'єктно-орiєнтованої мови програмування. Це, зокрема, виявляється в тому, що на етапi розробки програмної системи слiд розглядати лише такi атрибути, якi мають змiст у дiйсному вигляді (усi атрибути об'єктiв класу Рахунок мають цю властивість). Атрибути зв'язанi з особливостями загальної реалiзацiї.

Інші приклади класів

Наприклад, коли вiдомо, що використовуватиметься база даних, в якої кожний об'єкт має унiкальний iдентифікатор, то включати цей iдентифiкатор до числа атрибутiв об'єкта на даному етапi не слiд. Річ у тім, що, запроваджуючи такi атрибути, ми обмежуємо можливостi реалiзацiї системи. Так, введенням у вигляді атрибута унікального ідентифікатора об'єкта в базу даних ми із самого початку проектування відмовляємось від використання СУБД, які цей ідентифікатор не підтримують.

1.4 Операції і методи

Операція -- це функція (або перетворення), яку можна застосувати до об'єкта даного класу. Приклади операцій: ПЕРЕВІРИТИ, ЗНЯТИ, ПОМІСТИТИ ВІДКРИТИ НА ЧИТАННЯ, ЧИТАТИ, і т.д.

Усі об'єкти даного класу використовують одного й того самого представника (один і той самий примірник) кожної операції (тобто збільшення кількості об'єктів не приводить до збільшення кількості завантаженого програмного коду). Об'єкт, з якого викликана операція, передається їй як її неявний аргумент (параметр). Одна і та сама операція може застосовуватися до об'єктів різних класів: така операція називається поліморфною, оскільки для різних класів вона може мати різні форми.

Наприклад, для об'єктів Вектор і Комплексне число можна визначити операцію +; ця операція буде поліморфною, оскільки додавання векторів і додавання комплексних чисел -- різні операції.

Кожній операції відповідає метод-реалізація цієї операції для об'єктів даного класу.

Отже, операція -- це специфікація методу, метод -- реалізація операції. Наприклад, у класі файл може бути визначена операція друк (print). Ця операція може бути реалізована різними методами:

а) друк двійкового файла;

б) друк файла тексту і т. ін.

Логічно ці методи виконують одну й ту саму операцію, хоч реалізуються вони різними фрагментами коду.

Кожна операція має один неявний аргумент -- об'єкт, до якого вона застосовується. Крім того, операція може мати й інші аргументи (параметри). Ці додаткові аргументи параметризують операцію, але не пов'язані з вибором методу. Метод пов'язаний тільки з класом і об'єктом, деякі об'єктно-орієнтовані мови, наприклад С++, допускають одну і ту саму операцію з різним числом аргументів, причому, використовуючи те чи інше число аргументів, ми практично вибираємо один із методів, пов'язаний з такою операцією; на етапі попереднього проектування системи зручно вважати ці операції різними (різні імена), аби не ускладнювати проектування.

Операція (методи, які її реалізують) визначається своєю сигнатурою, яка включає, крім імені операції, типи всіх її аргументів і тип результату (повернення значення). При цьому важливо, щоб операція і методи, що її реалізують, мали однакову сигнатуру. Зауважимо, що два методи, які реалізують одну й ту саму операцію, мають однакову сигнатуру.

Операції перелічуються в третій частині прямокутника, який описує клас. Операція може бути вказана за іменем, але можна і задати її сигнатуру (звичайно це робиться в кінці розглядуваної фази життєвого циклу). У графічній мові технології ОМТ тип будь-якого об'єкта даних вказується після імені будь-якого об'єкта, після двокрапки (як у мові Паскаль).

При моделюванні системи корисно розрізняти операції з побічними ефектами (ці ефекти виявляються в змінах значень атрибутів об'єкта, тобто в зміні його стану), і операції, які видають значення вимог без зміни стану об'єкта. Ці останні операції звуться запитами.

Значення деяких атрибутів об'єкта можуть бути доступні тільки операціям цього об'єкта. Такі атрибути називатимемо закритими. закриті атрибути для класу Рахунок. Про значення закритих атрибутів об'єкта можна дізнатися поза об'єктом лише в тому разі, якщо серед операцій цього об'єкта визначені відповідні запити. Аналогічно в об'єкті можна визначити і закриті (допоміжні) операції, проте на ранніх стадіях проектування цього, як правило, не роблять, оскільки виділення закритих операцій пов'язане з реалізацією системи.

Відкриті й закриті атрибути та операції

Запити без аргументів (за винятком неявного аргументу-об'єкта, до якого застосовується операція) можуть розглядатися як похідні атрибути. Значення похідних атрибутів залежать від значень основних атрибутів. У цьому їх різниця від основних атрибутів, значення яких незалежні. Отож, стан об'єкта визначається тільки значенням основних атрибутів і визначає значення похідних атрибутів. Так, наприклад, довжина, ширина і висота кімнати -- її основні атрибути, а кубатура -- похідний атрибут.

Вибір основних атрибутів об'єктів вільний, але до числа основних атрибутів не слід включати такі атрибути, які є похідними.

1.5 Постановка задачі

Система повинна враховувати:

· радіостанція працює цілодобово;

· за добу радіостанція пропонує декілька програм;

· програми діляться на два види:

o замовлення від слухачів;

o хіт-паради;

· зберігати фонотеку музичних творів;

· приймати та обробляти потік заявок від клієнтів.

Система також повинна враховувати деякі похідні параметри, до числа яких входять:

· розподілення музикальних творів за жанром, виконавцями;

· рейтинг для кожної пісні, що звучала останнім часом.

У системі повинна бути передбачена можливість визначення поточного часу і дати, які будуть використовуватися при генерації роботи радіостанції.

Система повинна забезпечувати постійний вивід на дисплей поточних значень моделювання, а також поточний час і дату. Користувач повинен мати можливість побачити, що відбувається в модельній системі зараз.

Система повинна також дозволяти користувачеві самостійно змінювати програми та музику.

1.6 Обмеження

Будемо вважати, що:

· використовується комп'ютер з одним процесором.

· системні час і дата підтримуються вбудованими годинниками, а відповідні значення відображаються в оперативну пам'ять.

· Списки музикальних творів знаход також відображено в оперативну пам'ять.

· введення команд користувачем здійснюється за допомогою стандартної клавіатури та миші.

· екраном служить звичайний монітор з'єднаний з комп'ютером через відеокарту.

· використовуємо влаштований в BIOS таймер.

Система розроблена у вигляді програми Windows, для роботи з графічним інтерфейсом ОС були використані засоби Microsoft Visual C# 2010 Express

РОЗДІЛ ІІ. ОБ'ЄКТНО-ОРІЄНТОВАНИЙ АНАЛІЗ

2.1 Абстракція «Музика»

Рис. 2.1

Клас «Music» (Рис 2.1) відповідає за збереження інформації про конкретну музичну композицію. Класс зберігає у собі такі поля:

o альбом;

o жанр;

o назва;

o виконавець;

o рейтинг;

public class Music//Класс музика

{

public int Genre;//жанр 0-класика 1-джаз 2-рок 3-поп 4-рэп

public string Name;//Им'я

public string Performer;//Виконавець

public int Rating;//Рейтинг

public string Album;//Альбом

public Music(int arg1, string arg2, string arg3, string arg4)

{//Конструктор

Genre=arg1;

Name=arg2;

Performer=arg3;

Album = arg4;

Rating=0;

}

public Music()

{

//Констр без параметрів

}

}

2.2 Абстракція «Програма на радіо»

Рис 2.2

Клас «RadioProgram» (Рис 2.2) отримує та зберігає інформацію про програму, що буде запущена на радіо

Класс зберігає такі поля:

o жанр;

o назва;

o початок;

o закінчення;

o тип.

public class RadioProgram//Програма на радіо

{

public int Genre;//жанр 0-класика 1-джаз 2-рок 3-поп 4-реп

public string Name;//Им'я

public int Type;//0-по жанрам 1-по заявкам

public int Time;//Час начало ефіру

public int TimeFinish;//Час кінець ефиру

public RadioProgram(int arg1, string arg2, int arg3, int arg4, int arg5)

{//Конструктор с параметрами для програми

Type=arg1;

Name = arg2;

Genre = arg3;

Time=arg4;

TimeFinish = arg5;

}

}

2.3 Абстракція «Таймер»

Ця абстракція уже реалізована в Microsoft Visual C# 2010 Express за допомогою класу Timer. Він буде викликати функції моделювання потоку заявок від слухачів, а також моделювати початок та закінчення радіо-програм.

РОЗДІЛ ІІІ. ПРОГРАМНА РЕАЛІЗАЦІЯ

3.1 Реалізація інтерфейсу

Розміщення компонентів головної форми в середовищі Microsoft Visual C# 2010 Express реалізується за допомогою «дизайнера форм».

Головними компонентами на формі є ListBox та RichTextBox, які відображають поточну інформацію по відповідним даним. Ці компоненти забезпечують зручний показ відображуваної інформації, що робить інтерфейс програми дружнім до користувача.

Головне вікно програми (рис. 3.1).

Рис. 3.1. Головне вікно програми

3.1 Реалізація процесу моделювання

Моделювання проходить в таймері, де кожний «тік» відбувається моделювання елементрної часової зміни для моделюючої системи. private void timer_Tick(object sender, EventArgs e)

{//Подія таймера

Music BufMusic = new Music();//

label6.Text = Time.ToString();//Виводимо час

Time = Time.Add(new TimeSpan(0, 5, 0));// часу 5 хв

int RandPlase=0;

richTextBox1.Text = "";

foreach (Music i in Applications)//Виводимо заявки

{

richTextBox1.Text += "\"" + i.Name + "\" - "

+ i.Performer + "\n";

}

foreach (RadioProgram i in ProgramsList)//Проходимо по списку програм

{

if (i.Time <= Time.Hours && i.TimeFinish > Time.Hours)//Якщо час програми {

if (i.Type ==0)// по стилям

{

Applications.Clear();//Вивілюнюєм список заявок

richTextBox1.Text = "Заявки не приймаються";

for (int j = 0; j < PlayList.Count; j++)//Цикл по пісням

{

if (NowPlay.Performer != PlayList[j].Performer && i.Genre == PlayList[j].Genre)

{//

NowPlay = PlayList[j];//Тоді грає выбрана пісня

label4.Text = "Зараз в эфір " + i.Name;//Выводим информацию про программу

//

for (int k = 0; k < PlayList.Count; k++)

{

RandPlase = Rand.Next(PlayList.Count);

BufMusic = PlayList[k];

PlayList[k] = PlayList[RandPlase];

PlayList[RandPlase] = BufMusic;

}

//=================================================

break;//прирываем цикл т.к. песня уже выбрана

}

}

}

else//Записи по заявкам

{

for (int j = 0; j < Rand.Next(3, 7); j++)//Цикл генерации заявок случ. число

{

Music App = new Music();//вот собственно создали

switch (Rand.Next(4))//случайно выбрали поле

{//затем выбрали это поле случайно из имеющихся например только автора или только альбом

//или конкретно песню

case 0: App.Album = Сatalog[Rand.Next(Сatalog.Count)].Album; break;

case 1: App.Genre = Сatalog[Rand.Next(Сatalog.Count)].Genre; break;

case 2: App.Name = Сatalog[Rand.Next(Сatalog.Count)].Name; break;

case 3: App.Performer = Сatalog[Rand.Next(Сatalog.Count)].Performer; break;

}

Applications.Add(App);//сформированый объект добавляем в список

}

for (int j = 0; j < Сatalog.Count; j++)//Цикл по фонотеке

{

for (int p = 0; p < Applications.Count; p++)//Цикл по заявкам

{

if (Applications[p].Album == Сatalog[j].Album ||

Applications[p].Genre == Сatalog[j].Genre ||

Applications[p].Name == Сatalog[j].Name ||

Applications[p].Performer == Сatalog[j].Performer)

{//Нашли совпадение присволи остальные поля

Applications[p] = Сatalog[j];

Сatalog[j].Rating++;//начислили рейтинг

}

}

}

for (int j = 0; j < Applications.Count; j++)//Цикл по заявкам

{

if (NowPlay.Performer != Applications[j].Performer)

{//Тоже условие предвидущий раз не играл тоже исполнитель

NowPlay = Applications[j];//сейчас играет текк. Заявка

label4.Text = "Сейчас в эфире " + i.Name;//Выводим информацию про программу

for (int z = 0; z < Applications.Count; z++)

//Опять проходим по ЗАявкам и удаляем все которые удолетворились выше

{

if(Applications[z].Name==Applications[j].Name)

Applications.RemoveAt(z);

}

break;//прирываем цикл т.к. песян выбрана уже

}

}

}

break;//Прирываем цикл т.к. Программу уже определили

}

}

//Выводим всю игформацию о песне

label5.Text = "Название \"" + NowPlay.Name + "\"\nИсполнитель "

+ NowPlay.Performer + "\nАльбом " +

NowPlay.Album + "\nРейтинг " +

NowPlay.Rating;

}

3.2 Інструкція користувача

Для того, щоб запустити систему моніторингу, необхідно натиснути кнопку «Начать».

Для того, щоб зупинити моніторинг, натисніть кнопку «Стоп». При цьому програма не закривається.

Для налаштування датчиків(калібрування, задання часу опитування датчика) необхідно перейти на вкладку відповідного датчика, встановити всі відповідні налаштування (щоб налаштування вступили в силу необхідно натиснути кнопку «Применить»). Кнопка «По умолчанию» встановить всі параметри датчика за замовчуванням.

Огляд історії значень (максимального та мінімального значення) здійснюється на вкладці відповідного датчика.

ВИСНОВКИ

В процесі виконання роботи розроблена програма автоматичного управління та моделювання зміни музичних програм на радіо, программа враховує такі положення:

· радіостанція працює цілодобово;

· за добу радіостанція пропонує декілька програм;

· програми діляться на два види:

o замовлення від слухачів;

o хіт-паради;

· зберігати фонотеку музичних творів;

· приймати та обробляти потік заявок від клієнтів.

Для досягнення мети були вирішені задачі:

- вивчена літературу за темою роботи;

- розроблена модель системи потоку заявок від слухачів та система управління зміною радіо-програм;

- розроблена програма для моделювання роботи системи;

- проведена серія тестів, в ході яких підтверджено правильність роботи розробленої програми.

СПИСОК ВИКОРИСТАННИХ ДЖЕРЕЛ

1. Г. Буч«Объектно-ориентированный анализ и проэктирование», К. Диалектика 1999.

2. Павловская Т.А., Щупак Ю.А. «С#. Объектно-ориентированное программирование: Практикум.», Питер, 2005.

3. Шилдт Г., «Справочник программиста по С#», Издательский дом “Вильямс”, 2001.

4. А.Я. Архангелский, «Программирование в С# », Москва, 2003

ДОДАТОК А

Лістинг модулів програми

Файл 1. Form1.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.IO;//Библеотека для файлов

using System.Windows.Forms;

namespace WindowsFormsApplication2

{

public partial class Form1: Form

{

List<RadioProgram> ProgramsList = new List<RadioProgram>();//Список Программ

List<Music> Сatalog = new List<Music>();//Список Песен Фонотека

List<Music> PlayList = new List<Music>();//Список Песен для воспроизведения

List<Music> Applications = new List<Music>();//Список песен заявок

TimeSpan Time = new TimeSpan();//Время

Music NowPlay = new Music();//Песня сейчас в ифире

string[] FromFile = new string[1];//массив строк прочитаных из файлов

Random Rand = new Random();//случайное число

public Form1()

{

InitializeComponent();

FromFile = File.ReadAllLines("catalog.txt");//считываем строки с файла

foreach (string s in FromFile)//Проходим в цикле каждую строку

{

string[] words = s.Split('@');//разделяем строку на слова, указав разделитель @

Music Mobj = new Music(Convert.ToInt32(words[0]), words[3], words[1], words[2]);

//отправляем конструктору параметры выделеных строк

Сatalog.Add(Mobj);//Добавляем созданый выше объект в список фонотеки

PlayList.Add(Mobj);//Добавляем созданый выше объект в список песен

listBox1.Items.Add("\"" + Mobj.Name + "\" - " + Mobj.Performer + " (" + GenreSTRADD(Mobj.Genre) + ")");

//Добавляем в элемент listBox

}

listBox1.SelectedIndex = 0;//Ставим в начало

FromFile = File.ReadAllLines("programs.txt");

//считываем строки с дркгого файла

foreach (string s in FromFile)

{

//делаем все тоже самое для программ

string[] words = s.Split('@');

RadioProgram Pobj = new RadioProgram(Convert.ToInt32(words[0]), words[1],

Convert.ToInt32(words[2]), Convert.ToInt32(words[3]), Convert.ToInt32(words[4]));

ProgramsList.Add(Pobj);

richTextBox.Text+="\"" + Pobj.Name + "\""+Pobj.Time

+"-"+Pobj.TimeFinish+" (" + GenreSTRADD(Pobj.Genre) + ")\n";

}

}

private string GenreSTRADD(int G)//функция принимая число возвращяет строку стиля

{

string Res="";

switch (G)//вот приняли

{

case 0: Res = "Классика"; break;

case 1: Res = "Джаз"; break;

case 2: Res = "Рок"; break;

case 3: Res = "Поп"; break;

case 4: Res = "Рэп"; break;

case 5: Res = "Все"; break;

}

return Res;//вот вернули

}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)

{

//В событие переключение элементов listBox выводим информацию о песне в label2

label2.Text = "Название \"" + Сatalog[listBox1.SelectedIndex].Name + "\"\nИсполнитель "

+ Сatalog[listBox1.SelectedIndex].Performer +"\nАльбом "+

Сatalog[listBox1.SelectedIndex].Album + "\nРейтинг " +

Сatalog[listBox1.SelectedIndex].Rating;

}

private void timer_Tick(object sender, EventArgs e)

{//Событие тикания таймера

Music BufMusic = new Music();//Временный обьект для замены

label6.Text = Time.ToString();//Выводим время

Time = Time.Add(new TimeSpan(0, 5, 0));//Добавляем времени 5 мин

int RandPlase=0;

richTextBox1.Text = "";

foreach (Music i in Applications)//Выводим заявки

{

richTextBox1.Text += "\"" + i.Name + "\" - "

+ i.Performer + "\n";

}

foreach (RadioProgram i in ProgramsList)//Проходим по списку программ

{

if (i.Time <= Time.Hours && i.TimeFinish > Time.Hours)//Если время программи попадает в текущее время

{

if (i.Type ==0)//Записи по стилям

{

Applications.Clear();//Освобождаем список заявок

richTextBox1.Text = "Заявки не принимаются";

for (int j = 0; j < PlayList.Count; j++)//Цикл по песням

{

if (NowPlay.Performer != PlayList[j].Performer && i.Genre == PlayList[j].Genre)

{//Если предведущий исполнитель не тот же что и в тек. песне

//и стиль программы и песни совпадают

NowPlay = PlayList[j];//Тогда сейчас играет выбраная песня

label4.Text = "Сейчас в эфире " + i.Name;//Выводим информацию про программу

// Перемешиваем Каталог для того чтобы все песни проигрались

for (int k = 0; k < PlayList.Count; k++)

{

RandPlase = Rand.Next(PlayList.Count);

BufMusic = PlayList[k];

PlayList[k] = PlayList[RandPlase];

PlayList[RandPlase] = BufMusic;

}

//=================================================

break;//прирываем цикл т.к. песня уже выбрана

}

}

}

else//Записи по заявкам

{

for (int j = 0; j < Rand.Next(3, 7); j++)//Цикл генерации заявок случ. число

{

Music App = new Music();//вот собственно создали

switch (Rand.Next(4))//случайно выбрали поле

{//затем выбрали это поле случайно из имеющихся например только автора или только альбом

//или конкретно песню

case 0: App.Album = Сatalog[Rand.Next(Сatalog.Count)].Album; break;

case 1: App.Genre = Сatalog[Rand.Next(Сatalog.Count)].Genre; break;

case 2: App.Name = Сatalog[Rand.Next(Сatalog.Count)].Name; break;

case 3: App.Performer = Сatalog[Rand.Next(Сatalog.Count)].Performer; break;

}

Applications.Add(App);//сформированый объект добавляем в список

}

for (int j = 0; j < Сatalog.Count; j++)//Цикл по фонотеке

{

for (int p = 0; p < Applications.Count; p++)//Цикл по заявкам

{

if (Applications[p].Album == Сatalog[j].Album ||

Applications[p].Genre == Сatalog[j].Genre ||

Applications[p].Name == Сatalog[j].Name ||

Applications[p].Performer == Сatalog[j].Performer)

{//Нашли совпадение присволи остальные поля

Applications[p] = Сatalog[j];

Сatalog[j].Rating++;//начислили рейтинг

}

}

}

for (int j = 0; j < Applications.Count; j++)//Цикл по заявкам

{

if (NowPlay.Performer != Applications[j].Performer)

{//Тоже условие предвидущий раз не играл тоже исполнитель

NowPlay = Applications[j];//сейчас играет текк. Заявка

label4.Text = "Сейчас в эфире " + i.Name;//Выводим информацию про программу

for (int z = 0; z < Applications.Count; z++)

//Опять проходим по ЗАявкам и удаляем все которые удолетворились выше

{

if(Applications[z].Name==Applications[j].Name)

Applications.RemoveAt(z);

}

break;//прирываем цикл т.к. песян выбрана уже

}

}

}

break;//Прирываем цикл т.к. Программу уже определили

}

}

//Выводим всю игформацию о песне

label5.Text = "Название \"" + NowPlay.Name + "\"\nИсполнитель "

+ NowPlay.Performer + "\nАльбом " +

NowPlay.Album + "\nРейтинг " +

NowPlay.Rating;

}

private void button1_Click(object sender, EventArgs e)

{//Событие нажатие клавиши

if (!timer.Enabled)//Если таймер не включен-Включаем

{

button1.Text = "Стоп";//меняем текст кнопки

timer.Enabled = true;

}

else//Иначе выключаем)

{

button1.Text = "Начать";//меняем текст кнопки

timer.Enabled = false;

Time = new TimeSpan();

}

}

private void button2_Click(object sender, EventArgs e)

{

timer.Interval = 100;

}

private void button3_Click(object sender, EventArgs e)

{

timer.Interval = 1000;

}

private void Form1_Load(object sender, EventArgs e)

{

}

}

public class Music//Класс музыка

{

public int Genre;//жанр 0-классика 1-джаз 2-рок 3-поп 4-рэп

public string Name;//Имя

public string Performer;//Исполнитель

public int Rating;//Рейтинг

public string Album;//Альбом

public Music(int arg1, string arg2, string arg3, string arg4)

{//Конструктор всю выше описаную дичь принимает и сохраняет

Genre=arg1;

Name=arg2;

Performer=arg3;

Album = arg4;

Rating=0;

}

public Music()

{

//Констр бес параметров вызываем если нам не нужно ничего первоначально присваивать

}

}

public class RadioProgram//Программа на радио

{

public int Genre;//жанр 0-классика 1-джаз 2-рок 3-поп 4-рэп

public string Name;//Имя

public int Type;//0-по жанрам 1-по заявкам

public int Time;//Время начало ифира

public int TimeFinish;//Время конец ифира

public RadioProgram(int arg1, string arg2, int arg3, int arg4, int arg5)

{//Конструктор с параметрами для программ

Type=arg1;

Name = arg2;

Genre = arg3;

Time=arg4;

TimeFinish = arg5;

}

}

}

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.