Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пример1_ ПЗ_курсовой ЧМИ.doc
Скачиваний:
8
Добавлен:
28.08.2019
Размер:
666.11 Кб
Скачать

Министерство образования и науки Украины

Донецкий национальный технический университет

УТВЕРЖДАЮ

Зав. кафедрой КСМ

____________Г.В. Аверин

«____»__________200_г.

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

на курсовую работу по дисциплине

«Проектирование человеко-машинных интерфейсов»

студента группы ПКД__

________________________________________________________

ФИО

Факультета вычислительной техники и информатики

Тема: "Разработка интерфейса прикладного программного обеспечения с использованием моделей построения нестандартных элементов управления".

1. Срок защиты курсовой работы «___ » ___________ 200__ г.

2. Цель работы: приобрести практические навыки в области разработки дизайна прикладного программного обеспечения (ПО), его функциональности, а также в области разработки тестов для юзабилити-тестирования пользователя ПО.

3. Название прикладного программного обеспечения:______________________________

_____________________________________________________________________________

4. Содержание пояснительной записки:

а) Введение;

б) Описание актуальности, целей и задач разрабатываемого ПО, его назначение и область применения.

в) Обзор программных продуктов, имеющих аналогичные цели и назначение.

г) Разработка интерфейса ПО и краткое описание основных элементов управления:

- описание назначения основных окон приложения, элементов управления, расположенных на них, элементов группировки (если есть);

- описание функциональности ПО и способов взаимодействия пользователя с ним;

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

д) Разработка алгоритмов и блок-схем, описывающих функциональность ПО.

е) Разработка алгоритмов и блок-схем, описывающих процесс визуализации и модификации поведения нестандартных управляющих элементов.

ж) Разработка прикладного программного обеспечения.

з) Разработка тестов юзабилити-тестирования.

5. Приложения к курсовой работе:

а) Техническое задание;

б) Тексты (листинги) разработанного программного обеспечения;

в) юзабилити-тест для ПО (до 15 вопросов и шкала оценивания)

  1. Дата выдачи задания «___»____________200_г.

Руководитель ___________________

подпись

Задание принял к исполнению, студент_____________________/ /

подпись ФИО

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ

ДОНЕЦКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

ПРИЛОЖЕНИЕ Б

Тексты (листинги) разработанного программного обеспечения

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace WindowsApplication5

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

Form GameForm = new WinForm();

GameForm.ShowDialog();

}

private void Form1_Load(object sender, EventArgs e)

{

pictureBox1.Image = Properties.Resources.Panel_02;

pictureBox2.Image = Properties.Resources.Panel_01;

pictureBox3.Image = Properties.Resources.button;

pictureBox4.Image = Properties.Resources.button;

}

Font f = new Font(FontFamily.GenericSansSerif, 10);

private void pictureBox3_Paint(object sender, PaintEventArgs e)

{

e.Graphics.DrawString("Начать!", f, Brushes.Black, new PointF(10, 7));

}

private void pictureBox4_Paint(object sender, PaintEventArgs e)

{

e.Graphics.DrawString("Выход", f, Brushes.Black, new PointF(10, 7));

}

private void pictureBox4_Click(object sender, EventArgs e)

{

this.Close();

}

private void pictureBox3_Click(object sender, EventArgs e)

{

this.Visible = false;

Form f = new WinForm();

f.ShowDialog();

this.Close();

}

Point Shift;

private void pictureBox2_MouseDown(object sender, MouseEventArgs e)

{

Shift = new Point(e.X, e.Y);

}

private void pictureBox2_MouseMove(object sender, MouseEventArgs e)

{

Point loc = this.Location;

if (e.Button == MouseButtons.Left)

{

loc.X += e.X - Shift.X;

loc.Y += e.Y - Shift.Y;

this.Location = loc;

}

}

private void pictureBox1_Click(object sender, EventArgs e)

{

}

}

}

Листинг 1 – Класс Form1

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

namespace pair_pics

{

/// <summary>

/// Summary description for WinForm.

/// </summary>

public class WinForm : System.Windows.Forms.Form

{

/// <summary>

/// Required designer variable.

/// </summary>

private System.ComponentModel.IContainer components;

private const int

nw = 4, // кол-во клеток по горизонтали

nh = 4, // кол-во клеток по вертикали

// произведение nw и nh

// должно быть кратно 2-м;

np = (int)(nw*nh / 2); // кол-во пар парных картинок

// рабочая графическая поверхность

private System.Drawing.Graphics g;

// картинки, загруженные из файла

private Bitmap pics;

// ширина и высота клетки

private int cw, ch;

// игровое поле

private int[,] field = new int[nw,nh];

// field[i,j] < 100 - код картинки, клетка закрыта;

// field[i,j] > 100 и < 200 - клетка открыта, т.е. игрок видит картинку;

// field[i,j] > 200 - игрок нашел пару для этой картинки

private int n; // колво открытых пар картинок

private int count; // количества открытых в данный момент клеток

private int[] open1 = new int[2];// координаты 1-й открытой клетки

private int[] open2 = new int[2];// координаты 2-й открытой клетки

// таймер

private System.Windows.Forms.Timer timer1;

// заглавное меню mainMenu1

private System.Windows.Forms.MainMenu mainMenu1;

// элемент меню menuItem1 Новая игра

private System.Windows.Forms.MenuItem menuItem1;

// рисует клетку поля field[i,j]

private void cell(int i, int j) {

int // левый верхний угол клетки (координаты)

x = i*(cw+2),

y = j*(ch+2);

if (field[i,j] > 200)

// для этой клетки найдена пара,

// ее нужно убрать с поля

g.FillRectangle(SystemBrushes.Control,

x, y, cw+2, ch+2);

if ((field[i,j] > 100) && (field[i,j] < 200)) {

// клетка открыта - вывести картинку

g.DrawImage(pics,

new Rectangle(x+1, y+1, cw, ch),

new Rectangle((field[i,j]-101)*cw, 0, cw, ch),

GraphicsUnit.Pixel);

g.DrawRectangle(Pens.Black,

x+1, y+1, cw, ch);

}

if ((field[i,j] > 0) && (field[i,j] < 100)) {

// клетка закрыта

g.FillRectangle(SystemBrushes.Control,

x+1, y+1, cw, ch);

g.DrawRectangle(Pens.Black,

x+1, y+1, cw, ch);

}

}

// отрисовывает поле field

private void drawField() {

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

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

this.cell(i,j);

}

// новая игра

private void newGame() {

// генератор случайных чисел

Random rnd = new Random();

int rndN;

int[] buf = new int[np];

// np - кол-во пар парных картинок;

// в buf[i] записываем, сколько чисел i

// (индентификаторы картинок)

// записали в массив field

// сгенерируем игровое поле:

// запишем в массив field случайные числа от 1 до k,

// каждое число должно быть записано два раза

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

for(int j = 0; j<nh ; j++){

do

{

rndN = rnd.Next(np) + 1;

} while(buf[rndN-1] == 2);

field[i,j] = rndN;

buf[rndN-1]++;

}

n = 0;

count = 0;

this.drawField();

}

public WinForm()

{

InitializeComponent();

}

/// <summary>

/// Clean up any resources being used.

/// </summary>

protected override void Dispose(bool disposing)

{

if (disposing)

{

if (components != null)

{

components.Dispose();

}

}

base.Dispose(disposing);

}

#region Windows Form Designer generated code

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

private void InitializeComponent()

{

this.components = new System.ComponentModel.Container();

this.timer1 = new System.Windows.Forms.Timer(this.components);

this.mainMenu1 = new System.Windows.Forms.MainMenu();

this.menuItem1 = new System.Windows.Forms.MenuItem();

//

// timer1

//

this.timer1.Tick += new System.EventHandler(this.timer1_Tick);

//

// mainMenu1

//

this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {

this.menuItem1});

//

// menuItem1

//

this.menuItem1.Index = 0;

this.menuItem1.Text = "Новая игра";

this.menuItem1.Click += new System.EventHandler(this.menuItem1_Click);

//

// WinForm

//

this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);

this.ClientSize = new System.Drawing.Size(292, 271);

this.MaximizeBox = false;

this.Menu = this.mainMenu1;

this.Name = "WinForm";

this.Text = "Парные картинки";

this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.WinForm_MouseDown);

this.Load += new System.EventHandler(this.WinForm_Load);

this.Paint += new System.Windows.Forms.PaintEventHandler(this.WinForm_Paint);

}

#endregion

/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

static void Main()

{

Application.Run(new WinForm());

}

// обработка события Paint

private void WinForm_Paint(object sender, System.Windows.Forms.PaintEventArgs e)

{

// отрисовать игровое поле

this.drawField();

}

// загрузка формы

private void WinForm_Load(object sender, System.EventArgs e)

{

try {

// загружаем файл с картинками

pics = new Bitmap("psource.bmp");

}

catch(Exception exc) {

MessageBox.Show("Файл 'psource.bmp' не найден.\n" +

exc.ToString(), "Парные картинки",

MessageBoxButtons.OK,

MessageBoxIcon.Error);

this.Close();

return;

}

// определяем высоту и ширину клетки игрового поля

cw = (int)(pics.Width / np);

ch = pics.Height;

// ширина и высота рабочей области формы

this.ClientSize =

new System.Drawing.Size(nw*(cw+2) + 1, nh*(ch+2) + 1);

// рабочая графическая поверхность

g = this.CreateGraphics();

timer1.Enabled = false;

timer1.Interval = 200;

this.newGame();

}

// щелчок мыши на игровом поле

private void WinForm_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)

{

int

i = (int)(e.X / cw), // индекс клетки по горизонтали (с нуля)

j = (int)(e.Y / ch); // индекс клетки по вертикали (с нуля)

// если таймер запущен, т.е. только что была открыта

// пара одинаковых картинок, но они еще не "стерты",

// и щелчок мыши производится на одной из этих картинок,

// выходим из процедуры

if ((timer1.Enabled) && (field[i,j] > 200)) return;

// щелчок на месте одной из двух уже найденных парных картинок

if (field[i,j] > 200) return;

// открытых клеток нет

if (count == 0) {

count++;

// записываем координаты 1-й открытой клетки

open1[0] = i; open1[1] = j;

// клетка помечается как открытая

field[i,j] += 100;

// отрисовать клетку

this.cell(i,j);

return;

}

// открыта одна клетка, надо открыть вторую

if (count == 1) {

// записываем координаты 2-й открытой клетки

open2[0] = i; open2[1] = j;

// если открыта одна клетка, и щелчок сделан

// в той же клетке, ничего не происходит

if ((open1[0] == open2[0]) && (open1[1] == open2[1]))

return;

else {

// теперь открыты две клетки

count++;

// клетка помечается как открытая

field[i,j] += 100;

// отрисовать клетку

this.cell(i,j);

// открыты 2 одинаковые картинки

if (field[open1[0],open1[1]] == field[open2[0],open2[1]]) {

n++;

// в массиве field клетки помечаются как совпавшие

field[open1[0],open1[1]] += 100;

field[open2[0],open2[1]] += 100;

count = 0;

// запускаем таймер - процедура обработки

// события Timer "сотрет" одинаковые картинки

timer1.Enabled = true;

}

}

return;

}

if (count == 2) {

// открыты 2 клетки с разными картинками,

// закроем их и откроем новую, в которой

// сделан щелчок

// закрываем открытые клетки

field[open1[0],open1[1]] -= 100;

field[open2[0],open2[1]] -= 100;

this.cell(open1[0],open1[1]);

this.cell(open2[0],open2[1]);

// записываем в open1 номер текущей клетки

open1[0] = i; open1[1] = j;

count = 1; // счетчик открытых клеток

// открыть текущую клетки

field[i,j] += 100;

this.cell(i,j);

}

}

// обработка события таймера

private void timer1_Tick(object sender, System.EventArgs e)

{

// отрисовать клетки

this.cell(open1[0],open1[1]);

this.cell(open2[0],open2[1]);

// остановка таймера

timer1.Enabled = false;

if (n == np)

// открыты все пары

g.DrawString("Game over! Thanks for playing.",

new Font("Tahoma", 10, FontStyle.Bold),

Brushes.Black, 5, 5);

}

// щелчок на пункте меню Новая игра

private void menuItem1_Click(object sender, System.EventArgs e)

{

g.FillRectangle(

SystemBrushes.Control,

0, 0, nw*(cw+2), nh*(ch+2));

this.newGame();

}

}

}

Листинг 2 – WinForm

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ

ДОНЕЦКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

ПРИЛОЖЕНИЕ В

Юзабилити-тест для ПО

1.Возникли ли у вас затруднения в работе с данной игрой. ( Если да, то укажите какие именно)

Да, возникли затруднения (какие) ________________________________________________________________________________________________________________

Нет, затруднения отсутствуют

2. При работе с данной игрой возникают ли у вас ошибки, приводящие к автоматическому завершению? (Если да, укажите какие ошибки)

Да, ошибки есть(какие) ______________________________________________________________________________________________________________________

Нет, ошибок нет

3.Не возникают ли у вас вопросы по правилам и стратегии игры? (Если да, укажите какие вопросы)

Да, возникли вопросы (какие)

_____________________________________________________________________________________________________________

Нет, вопросы не возникли

4. Удалось ли вам освоить данную игру? (Если нет, укажите причину)

Нет,(причина)______________________________________________________________________________________________________________________

Да, освоил(а)

5. Удалось ли вам открытия приложения с началом игры? (Если нет, укажите причину)

Нет,(причина)______________________________________________________________________________________________________________________

Да, открыл (а)

6. Сколько времени потребовалось вам для открытия приложения с началом игры?

2-3 сек

4-5сек

5-6сек

7. Устраивает ли Вас сочетание цветов главного окна приложения?

Да

Нет

8. Устраивает ли Вас сочетание цветов главного кнопок приложения?

Да

Нет

9. Сколько времени Вам потребовалось на освоение данной игры?

1-3 мин

3-4 мин

5-6 мин

10. Что вызывало наибольшие трудности при освоении?

Недостаточно навыков при работе с компьютером

Отсутствие справочной документации

Другое ________________________________________________________________________________________________________________

11. Не возникало ли критических ошибок во время игры? (Если да, укажите какие ошибки)

Да, ошибки есть(какие) ______________________________________________________________________________________________________________________

Нет, ошибок нет

12. Пожелания разработчику данной игры (укажите недостатки игры) ________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

13. Выполняет игра все необходимые функции?

Да

Нет

14. Достаточно ли было времени для выполнения всех заданий теста

Да

Нет

15. В какие игры вы играли ранее (перечислите)?

______________________________________________________________________________________________________________________________________________________________________________________________________

16. Какие аналоги данной игры вы знаете (перечислите)?

______________________________________________________________________________________________________________________________________________________________________________________________________