Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа - копия.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
452.99 Кб
Скачать

Описание модели взаимодействия

(Sequence diagram, Collaboration diagram)

Диаграммакоопераций

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

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

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

С помощью диаграммы последовательности можно описать полный контекст взаимодействия как своеобразный временной график “жизни” всей совокупности объектов, взаимодействующих между собой для реализации варианта использования программной системы.

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

  1. выставление времени

    1. выставление времени часов:

      1. Нажать и не отпускать на кнопку «уст. время»

      2. Установить кнопками «Час» и «Мин» нужное время

      3. Отпустить кнопку «уст. время»

    2. выставление времени срабатывания будильника:

      1. Нажать и не отпускать на кнопку «уст. будильник»

      2. Установить кнопками «Час» и «Мин» нужное время срабатывания будильника

      3. Отпустить кнопку «уст. будильник»

  2. Переключение режимов работы

    1. Режим работы «Вкл»

      1. Отсчёт времени часов

      2. Сравнение времени часов и времени срабатывания будильника

    2. Режим работы «Выкл»

      1. Отсчёт времени часов

    3. Режим работы «Радио»

      1. Отсчёт времени часов

      2. Воспроизведение звука с модуля «Радио»

    4. Режим работы «Таймер»

      1. Отсчёт времени часов

      2. Воспроизведение звука с модуля «Радио»в течение 30 минут

        1. Предусловие

          1. Закончено воспроизведение звука с модуля «радио»

        2. Основной поток

          1. Включение режима «вкл» без смены положения перключателя

  3. Срабатывание будильника

    1. Отсчёт времени часов

      1. Предусловие

        1. Режим «вкл» или режим «таймер»(после 30 минут)

        2. Время часов == время срабатывания будильника

      2. Основной поток

        1. Воспроизведение звукового сигнала будильника

  4. «Сброс» - Нажатие на кнопку «сброс» при срабатывании будильника

    1. Предусловие

      1. Воспроизведение сигнала будильника

    2. Основной поток

      1. Остановка сигнала будильника

      2. Воспроизведение сигнала будильника через 5 минут

Приложение

UML Диаграмма

Диаграмма Use case

Activity diagram

Выставление времени

Сброс сигнала будильника

Выставление будильника

Переключение режимов работы

Диаграммы последовательностей:

Выставление времени на часах

Сброс будильника

Выставление времени срабатывания будильника

Переключение режимов работы

Листинг файлов

Time.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Media;

namespace timer

{

public class time

{

int hour;

int min;

int sec;

int m_sec;

public bool flag_show = true;

public time()

{

this.hour = DateTime.Now.Hour;

this.min = DateTime.Now.Minute;

this.sec = DateTime.Now.Second;

this.m_sec = DateTime.Now.Millisecond;

}

public time(int h, int m)

{

this.hour = h;

this.min = m;

this.sec = 0;

this.m_sec = 0;

}

public time(time a)

{

this.hour = a.hour;

this.min = a.min;

this.sec = a.sec;

this.m_sec = a.m_sec;

}

public void add_hour()

{

this.hour = (this.hour + 1) % 24;

}

public void add_min(int i = 1)

{

if (((this.min + i) / 60) > 0)

this.add_hour();

this.min = (this.min + i) % 60;

}

public void add_sec()

{

if (((this.sec + 1) / 60) > 0)

this.add_min();

this.sec = (this.sec + 1) % 60;

}

public string get_time(string str_flag = " ")

{

string str = this.hour.ToString("00");

str += str_flag + this.min.ToString("00");

str += str_flag + this.sec.ToString("00");

return str;

}

public string show_time()

{

if (DateTime.Now.Millisecond < 500)

return this.get_time(" : ");

return this.get_time();

}

public override bool Equals(object obj)

{

if (((time)obj).hour == this.hour && ((time)obj).min == this.min)

return true;

else

return false;

}

public static bool operator ==(time m1, time m2)

{

return m1.Equals(m2);

}

public static bool operator !=(time m1, time m2)

{

return !m1.Equals(m2);

}

public time ravno()

{

int a = this.hour;

int b = this.min;

time temp = new time (a, b);

return temp;

}

}

}

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.Windows.Forms;

using System.Threading;

using System.Media;

namespace timer

{

public partial class Form1 : Form

{

// делегат для манипулирования лейбом

public delegate void DelegateForTime(Label label);

// поле типа делегата

DelegateForTime DelTime;

time a = new time();

time b = new time();

time c = new time();

time d = new time();

time f = new time();

bool alarm_flag = false;

bool flag_alarm_time = false;

bool flag_timer = false;

bool flag_radio = false;

bool flag_reset = false;

SoundPlayer WMP = new SoundPlayer();

// поток

Thread t;

public Form1()

{

InitializeComponent();

DelTime = new DelegateForTime(StartTime);// указываем метод делегату

WMP.SoundLocation = "sound.wav";

}

private void Form1_Load(object sender, EventArgs e)

{

b.add_min();

t = new Thread(lbl_time_show);// создаем поток

t.IsBackground = true;

t.Start();

}

void StartTime(Label l)

{

l.Text = a.show_time();

}

void lbl_time_show()

{

while (true)

{

Invoke(DelTime, lbl_time);// запускаем метод с главного потока

}

}

public void alarm()

{

if (a == b)

{

if (alarm_flag)

{

c = a.ravno();

c.add_min(2);

WMP.Play();

alarm_flag = false;

flag_alarm_time = true;

lbl_flag.Text = "ALARM!!!!";

}

}

if (flag_alarm_time && c == a)

{

WMP.Stop();

flag_alarm_time = false;

rbtn_off.Checked = true;

}

if (flag_reset)

{

if (a == f)

{

c = a.ravno();

c.add_min(2);

WMP.Play();

flag_reset = false;

lbl_flag.Text = "ALARM!!!!";

}

}

}

void radio()

{

if (flag_radio)

{

WMP.Stop();

lbl_flag.Text = "Play Radio";

}

}

void timer_time()

{

if (flag_timer)

{

d = a.ravno();

d.add_min(1);

radio();

flag_timer = false;

}

if (a == d)

{

flag_radio = false;

this.timer2.Enabled = true;

alarm_flag = true;

}

}

private void button1_Click(object sender, EventArgs e)

{

Close();

}

private void checkBox_time_Click(object sender, EventArgs e)

{

checkBox2_alarm.Checked = false;

if (checkBox_time.Checked)

{

lbl_time.Visible = true;

lbl_alarm.Visible = false;

}

}

private void checkBox2_alarm_Click(object sender, EventArgs e)

{

checkBox_time.Checked = false;

if (checkBox2_alarm.Checked)

{

lbl_time.Visible = false;

lbl_alarm.Visible = true;

refresh_alarm();

}

else

{

lbl_time.Visible = true;

lbl_alarm.Visible = false;

}

}

void refresh_alarm(){

lbl_alarm.Text = b.get_time();

}

private void btn_reset_alarm_Click(object sender, EventArgs e)

{

if (flag_alarm_time)

{

f = a.ravno();

f.add_min(1);

WMP.Stop();

flag_reset = true;

lbl_flag.Text = "Сброс";

}

}

private void btn_set_min_Click(object sender, EventArgs e)

{

if (checkBox_time.Checked) a.add_min();

if (checkBox2_alarm.Checked)

{

b.add_min();

refresh_alarm();

}

}

private void btn_set_hour_Click(object sender, EventArgs e)

{

if (checkBox_time.Checked) a.add_hour();

if (checkBox2_alarm.Checked)

{

b.add_hour();

refresh_alarm();

}

}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

this.t.Abort();

}

private void timer1_Tick(object sender, EventArgs e)

{

a.add_sec();

}

private void timer2_Tick(object sender, EventArgs e)

{

alarm();

if (rbtn_timer.Checked) timer_time();

}

private void rbtn_on_CheckedChanged(object sender, EventArgs e)

{

if (rbtn_on.Checked)

{

lbl_flag.Text = "on";

flag_radio = false;

this.timer2.Enabled = true;

alarm_flag = true;

}

}

private void rbtn_off_CheckedChanged(object sender, EventArgs e)

{

if (rbtn_off.Checked)

{

lbl_flag.Text = "off";

flag_radio = false;

alarm_flag = false;

WMP.Stop();

}

}

private void rbtn_radio_CheckedChanged(object sender, EventArgs e)

{

if (rbtn_radio.Checked)

{

lbl_flag.Text = "radio";

WMP.Stop();

flag_radio = true;

alarm_flag = false;

radio();

}

}

private void rbtn_timer_CheckedChanged(object sender, EventArgs e)

{

if (rbtn_timer.Checked)

{

lbl_flag.Text = "timer";

bool flag_radio = true;

flag_timer = true;

timer_time();

}

}

}

}

Screenshot