- •Методические материалы для курсового проектирования
- •1Выбор темы курсовой работы
- •2Отчетные материалы
- •3Этапы выполнения курсовой работы
- •Проектирование.
- •Программная реализация проекта.
- •Тестирование программы.
- •4Требования к программе
- •5Требования к оформлению Пояснительной записки
- •6Защита курсовой работы
- •7Методика оценивания курсовой работы
- •8Пример титульного листа Пояснительной записки
- •Пояснительная записка
- •9Пример оглавления Пояснительной записки Содержание
- •1. Разработка информационной модели предметной области
- •2. Проектирование приложения
- •3. Программная реализация проекта
- •10Пример функциональных требований
- •11Пример приложения, разработанного по теме курсового проекта
- •11.1. Постановка задачи
- •11.2. Пользовательский интерфейс
- •11.3. Пример оформления программного кода приложения.
- •Int масш_x, int масш_y, Pen pg)
- •12Примерные темы курсовых работ:
- •13Основная рекомендуемая литература и материалы
Int масш_x, int масш_y, Pen pg)
{
int dy = размер.Height + (min_y-3)*масш_y,
dx = -(min_x-3) * масш_x;
int x1, x2, y1, y2;
SolidBrush br = new SolidBrush(pg.Color);
Font ft = new Font("Batang", 12);
x1 = dx+(точки_x[0])*масш_x;
y1 = dy - (точки_y[0])*масш_y ;
полотно.FillEllipse(br, x1 - 5, y1 - 5, 10, 10);
полотно.DrawString(точки_x[0].ToString() + "; " + точки_y[0].ToString(), ft,
Brushes.Black, x1 + 3, y1);
for (int i = 1; i < точки_x.Length; i++)
{
x2 = dx+ (точки_x[i]) * масш_x;
y2 = dy - (точки_y[i]) * масш_y;
полотно.DrawLine(pg, x1, y1, x2, y2);
полотно.FillEllipse(br, x2 - 5, y2 - 5, 10, 10);
полотно.DrawString(точки_x[i].ToString() + "; " + точки_y[i].ToString(), ft,
Brushes.Black, x2 + 1, y2);
x1 = x2;
y1 = y2;
}
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
Класс, представляющий стационарные радиостанции
namespace ПроектРадиостанции
{
/// <summary>
/// Класс, представляющий стационарные радиостанции
/// </summary>
[Serializable]
public class Стационарная : Радиостанция
{
private string насел_пункт;
/// <summary>
/// Конструктор класса "Стационарная"
/// </summary>
/// <param name="позывной">Позывной радиостанции</param>
/// <param name="дальность">дальность связи</param>
/// <param name="x">Координата x</param>
/// <param name="y">Координата y</param>
/// <param name="насел_пункт">Насел пункт, в котором расположена радиостанция</param>
public Стационарная(string позывной, int дальность, int x, int y, string насел_пункт)
: base(позывной, дальность, x, y)
{
this.насел_пункт = насел_пункт;
}
/// <summary>
/// Свойство, выдающее значение населенного пункта
/// </summary>
/// <return> Населенный пункт радиостанции</return>
public string Насел_пункт
{get {return насел_пункт;}
}
}
}
Форма Form1.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace ПроектРадиостанции
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
ArrayList база;
ArrayList промежуточные_точки_x;
ArrayList промежуточные_точки_y;
Стационарная сс;
Подвижная пс;
Form2 Радиостанции_И;
Form3 Графики;
string имяЗапись;
string имяЧтение;
FileStream поток;
int k = 1;
private void Form1_Load(object sender, EventArgs e)
{
база = new ArrayList();
dataGridView1.Columns.Add("", "Тип радиостанции");
dataGridView1.Columns.Add("", "Позывной");
dataGridView1.Columns.Add("", "Дальность связи");
dataGridView1.Columns.Add("", "Расположение");
dataGridView1.Columns.Add("", "Населенный пункт");
промежуточные_точки_x = new ArrayList();
промежуточные_точки_y = new ArrayList();
}
/// <summary>
/// Предлагает пользователю сохранить базу данных в файл
/// </summary>
public void save()
{
if (имяЧтение != "") { saveFileDialog1.FileName = имяЧтение; }
DialogResult ответ;
ответ = saveFileDialog1.ShowDialog();
if (ответ == DialogResult.OK)
{
имяЗапись = saveFileDialog1.FileName;
поток = new FileStream(имяЗапись, FileMode.Create);
BinaryFormatter форм = new BinaryFormatter();
форм.Serialize(поток, база);
поток.Close();
Text = имяЗапись + " - Радиостанции";
}
}
/// <summary>
/// Предлагает пользователю сохранить данные перед выходом
/// </summary>
public void exit()
{
DialogResult ответ;
ответ = MessageBox.Show("Сохранить изменения в базе данных?", "ВЫХОД",
MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (ответ == DialogResult.Yes) { save(); }
if (ответ == DialogResult.No) { Close(); }
if (ответ == DialogResult.Cancel) { return; }
}
/// <summary>
/// Добавляет в базу данных стационарную радиостанцию
/// </summary>
private void button2_Click(object sender, EventArgs e)
{
try
{
база.Add(new Стационарная(textBox1.Text, (int)numericUpDown1.Value,
int.Parse(textBox2.Text), int.Parse(textBox3.Text), textBox4.Text));
}
catch
{
MessageBox.Show("Должны быть заполнены все поля и в поле 'координаты' должны быть введены только числа!", "Ошибка!");
return;
}
сс = (Стационарная)база[база.Count - 1];
dataGridView1.Rows.Insert(0, 1);
dataGridView1[0, 0].Value = сс.GetType().Name;
dataGridView1[1, 0].Value = textBox1.Text;
dataGridView1[2, 0].Value = (int)numericUpDown1.Value;
dataGridView1[3, 0].Value = (textBox2.Text + "; " + textBox3.Text);
dataGridView1[4, 0].Value = textBox4.Text;
textBox1.Clear();
numericUpDown1.Value = 1;
textBox2.Clear();
textBox3.Clear();
textBox4.Clear();
}
/// <summary>
/// Добавляет в базу данных подвижную радиостанцию
/// </summary>
private void button4_Click(object sender, EventArgs e)
{
try
{
база.Add(new Подвижная(textBox1.Text, (int)numericUpDown1.Value, (int)промежуточные_точки_x[промежуточные_точки_y.Count - 1], (int)промежуточные_точки_y[промежуточные_точки_x.Count - 1], промежуточные_точки_x, промежуточные_точки_y));
}
catch
{
MessageBox.Show("Должны быть заполнены все поля и в поле 'координаты' должны быть введены только числа!", "Ошибка!");
return;
}
пс = (Подвижная)база[база.Count - 1];
dataGridView1.Rows.Insert(0, 1);
dataGridView1[0, 0].Value = пс.GetType().Name;
dataGridView1[1, 0].Value = textBox1.Text;
dataGridView1[2, 0].Value = (int)numericUpDown1.Value;
dataGridView1[3, 0].Value = пс.X + "; " + пс.Y;
dataGridView1[4, 0].Value = "";
промежуточные_точки_x.Clear();
промежуточные_точки_y.Clear();
textBox1.Clear();
numericUpDown1.Value = 1;
}
/// <summary>
/// Добавляет координаты новой точки в массив промежуточных точек
/// </summary>
private void button3_Click(object sender, EventArgs e)
{
try
{
промежуточные_точки_x.Add(int.Parse(textBox5.Text));
промежуточные_точки_y.Add(int.Parse(textBox6.Text));
}
catch
{
MessageBox.Show("В поле 'координаты' должны быть введены только числа!", "Ошибка!");
return;
}
textBox5.Clear();
textBox6.Clear();
}
/// <summary>
/// Открывает новую форму со схемами движения всех подвижных радиостанций, перебирая базу данных и выделяя из нее подвижные радиостанции
/// </summary>
private void button5_Click(object sender, EventArgs e)
{
Подвижная.Max_x = 0;
Подвижная.Max_y = 0;
Подвижная.Min_x = int.MaxValue;
Подвижная.Min_y = int.MaxValue;
Подвижная подв;
for (int i = 0; i < база.Count; i++)
{
if (база[i].GetType().Name == "Подвижная")
{
подв = (Подвижная)база[i];
for (int j = 0; j < подв.Точки_x.Length; j++)
{
if (подв.Точки_x[j] < Подвижная.Min_x) { Подвижная.Min_x = подв.Точки_x[j]; }
if (подв.Точки_x[j] > Подвижная.Max_x) { Подвижная.Max_x = подв.Точки_x[j]; }
}
for (int j = 0; j < подв.Точки_y.Length; j++)
{
if (подв.Точки_y[j] < Подвижная.Min_y) { Подвижная.Min_y = подв.Точки_y[j]; }
if (подв.Точки_y[j] > Подвижная.Max_y) { Подвижная.Max_y = подв.Точки_y[j]; }
}
}
}
Графики = new Form3();
Графики.База = база;
Графики.ShowDialog();
}
/// <summary>
/// Открывает новую форму с перечислением стационарных радиостанций, расположенных в населенных пунктах, название которых начинается с буквы "И"
/// </summary>
private void button1_Click(object sender, EventArgs e)
{
Радиостанции_И = new Form2();
Радиостанции_И.База_и = база;
Радиостанции_И.ShowDialog();
}
/// <summary>
/// Удаляет выбранную строку из базы данных
/// </summary>
private void button6_Click(object sender, EventArgs e)
{
try
{
int nom;
nom = dataGridView1.CurrentRow.Index;
база.RemoveAt(nom);
dataGridView1.Rows.RemoveAt(nom);
}
catch
{
MessageBox.Show("Не выделено ни одной строки!", "Ошибка!");
return;
}
}
/// <summary>
/// Ссылка на метод, закрывающий программу
/// </summary>
private void выходToolStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}
/// <summary>
/// Предлагает пользователю сменить цветовую главного окна программы
/// </summary>
private void цветоваяСхемаToolStripMenuItem_Click(object sender, EventArgs e)
{
DialogResult ответ;
ответ = colorDialog1.ShowDialog();
if (ответ == DialogResult.OK)
{
BackColor = colorDialog1.Color;
tabPage1.BackColor = colorDialog1.Color;
tabPage2.BackColor = colorDialog1.Color;
dataGridView1.BackgroundColor = colorDialog1.Color;
}
}
/// <summary>
/// Предлагает пользователю сменить шрифт надписей главного окна программы
/// </summary>
private void шрифтToolStripMenuItem_Click(object sender, EventArgs e)
{
DialogResult ответ;
ответ = fontDialog1.ShowDialog();
if (ответ == DialogResult.OK)
{
Font = fontDialog1.Font;
}
}
/// <summary>
/// Ссылка на метод, предлагающий сохранить несохраненные данные
/// </summary>
private void сохранитьToolStripMenuItem1_Click(object sender, EventArgs e)
{
save();
}
/// <summary>
/// Метод, выполняемый при закрывании главного окна программы
/// </summary>
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Form form = new Form();
DialogResult result;
result = MessageBox.Show("Сохранить изменения в базе данных?", "Радиостанции",
MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question,
MessageBoxDefaultButton.Button3);
if (result == System.Windows.Forms.DialogResult.Yes)
{
save();
form.Close();
}
else if (result == System.Windows.Forms.DialogResult.No)
{
form.Close();
}
else if (result == System.Windows.Forms.DialogResult.Cancel)
{
e.Cancel = true;
}
}
/// <summary>
/// Предлагает пользователю открыть готовую базу данных радиостанций из файла
/// </summary>
private void открытьToolStripMenuItem_Click(object sender, EventArgs e)
{
DialogResult ответ;
ответ = openFileDialog1.ShowDialog();
if (ответ == DialogResult.OK)
{
имяЧтение = openFileDialog1.FileName;
имяЗапись = openFileDialog1.FileName;
база.Clear();
поток = new FileStream(имяЧтение, FileMode.Open);
BinaryFormatter форм = new BinaryFormatter();
база = (ArrayList)форм.Deserialize(поток);
поток.Close();
dataGridView1.Rows.Clear();
Радиостанция рад;
for (int i = 0; i < база.Count; i++)
{
рад = (Радиостанция)база[i];
dataGridView1.Rows.Insert(0, 1);
dataGridView1[0, 0].Value = рад.GetType().Name;
dataGridView1[1, 0].Value = рад.Позывной;
dataGridView1[2, 0].Value = рад.Дальность;
dataGridView1[3, 0].Value = рад.X + "; " + рад.Y;
if (рад.GetType().Name == "Стационарная")
{
Стационарная ст = (Стационарная)база[i];
dataGridView1[4, 0].Value = ст.Насел_пункт;
}
}
}
Text = имяЧтение + " - Радиостанции";
}
/// <summary>
/// Создает новую базу данных, предварительно предложив сохранить несохраненные данные
/// </summary>
private void создатьToolStripMenuItem_Click(object sender, EventArgs e)
{
DialogResult ответ;
ответ = MessageBox.Show("При создании новой базы данных все несохраненные данные будут утеряны. Сохранить изменения в базе данных?", "ВЫХОД",
MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (ответ == DialogResult.Yes) { save(); }
if (ответ == DialogResult.Cancel) { return; }
база.Clear();
dataGridView1.Rows.Clear();
имяЧтение = "Новая база данных "+k.ToString()+".bin";
k++;
Text = имяЧтение + " - Радиостанции";
}
}
}
Форма Form2
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
namespace ПроектРадиостанции
{
/// <summary>
/// Форма с перечислением стационарных радиостанций, расположенных в населенных пунктах, название которых начинается с буквы "И"
/// </summary>
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
/// <summary>
/// Свойство, принимающее массив всех радиостанций
/// </summary>
public ArrayList База_и
{ set { база_и = value;}
}
Стационарная стац_и;
private ArrayList база_и;
int kol=0;
private void Form2_Load(object sender, EventArgs e)
{
dataGridView1.Rows.Clear();
dataGridView1.Columns.Add("", "Позывной");
dataGridView1.Columns.Add("", "Дальность связи");
dataGridView1.Columns.Add("", "Расположение");
dataGridView1.Columns.Add("", "Населенный пункт");
dataGridView1.Rows.Clear();
kol = 0;
for (int i = 0; i < база_и.Count; i++)
{
if (база_и[i].GetType().Name == "Стационарная")
{
стац_и = (Стационарная)база_и[i];
if (стац_и.Насел_пункт[0] == 'и' || стац_и.Насел_пункт[0] == 'И')
{
kol++;
dataGridView1.Rows.Insert(0, 1);
dataGridView1[0, 0].Value = стац_и.Позывной;
dataGridView1[1, 0].Value = стац_и.Дальность;
dataGridView1[2, 0].Value = стац_и.X.ToString() + "; " + стац_и.Y.ToString();
dataGridView1[3, 0].Value = стац_и.Насел_пункт;
}
}
}
if (kol > 0)
label2.Text = kol.ToString();
else label2.Text = "Таких радиостанций нет";
}
}
}
Форма Form3
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
namespace ПроектРадиостанции
{
/// <summary>
/// Форма со схемами движения всех подвижных радиостанций
/// </summary>
public partial class Form3 : Form
{
Bitmap графикВПамяти;
Graphics полотно;
Graphics полотноПанель;
Pen ps1;
Pen ps2;
Pen pr;
Pen pg;
int шир_x;
int выс_y;
int масш_x,
масш_y;
Random rnd;
private ArrayList база;
/// <summary>
/// Свойство, принимающее массив всех радиостанций
/// </summary>
public ArrayList База
{
set { база = value; }
}
public Form3()
{
InitializeComponent();
}
/// <summary>
/// Метод, вычисляющий размеры координатной сетки и выдающий сетку на полотно
/// </summary>
public void Рисовать_сетку()
{
Graphics.FromImage(графикВПамяти).Clear(Color.White);
Font font = new Font("Batang", 8);
SolidBrush br = new SolidBrush(Color.Black);
шир_x = Подвижная.Max_x - Подвижная.Min_x+6;
выс_y = Подвижная.Max_y - Подвижная.Min_y+6;
масш_x = panel1.Size.Width / шир_x;
масш_y = panel1.Size.Height / выс_y;
if (масш_x > 0 && масш_y > 0)
{
for (int i = 1; i * масш_x < panel1.Size.Width; i++)
{
Graphics.FromImage(графикВПамяти).DrawLine(ps1, i * масш_x, 0, i * масш_x,
panel1.Size.Height);
Graphics.FromImage(графикВПамяти).DrawString((Подвижная.Min_x - 3 + i).ToString(),
font, br, i * масш_x - 3, panel1.Height - 16);
}
for (int i = 1; i * масш_y < panel1.Size.Height; i++)
{// if (i % 10 == 0) { Graphics.FromImage(графикВПамяти).DrawLine(ps2, 0, i * масш_y,
panel1.Size.Width, i * масш_y); }
//else
Graphics.FromImage(графикВПамяти).DrawLine(ps1, 0, panel1.Height - i * масш_y,
panel1.Size.Width, panel1.Height - i * масш_y);
Graphics.FromImage(графикВПамяти).DrawString((Подвижная.Min_y - 3 + i).ToString(),
font, br, 3, panel1.Height - i * масш_y);
}
for (int i = 0; i * масш_y < panel1.Size.Width; i = i + 10)
{ Graphics.FromImage(графикВПамяти).DrawLine(ps2, 0, panel1.Height - i * масш_y,
panel1.Size.Width, panel1.Height - i * масш_y); }
for (int i = 0; i * масш_x < panel1.Size.Width; i = i + 10)
{ Graphics.FromImage(графикВПамяти).DrawLine(ps2, i * масш_x, 0, i * масш_x,
panel1.Size.Height); }
Graphics.FromImage(графикВПамяти).DrawRectangle(pr, 0, 0, panel1.Width, panel1.Height);
}
else { MessageBox.Show("Ошибка!","Ошибка!");
return;
}
}
/// <summary>
/// Метод, выдающий графики движения подвижных радиостанций на полотно
/// </summary>
public void Рсовать_графики()
{
Подвижная подвижная;
for (int i = 0; i < база.Count; i++)
{
if (база[i].GetType().Name == "Подвижная")
{
pg = new Pen(Color.FromArgb(255, rnd.Next(0, 255), rnd.Next(0, 255), rnd.Next(0, 255)), 3);
подвижная = (Подвижная)база[i];
подвижная.Рисовать(Graphics.FromImage(графикВПамяти), panel1.Size,
шир_x, выс_y, масш_x, масш_y, pg);
}
}
}
private void Form3_Load(object sender, EventArgs e)
{
ps1 = new Pen(Color.LightGray, 1);
ps2 = new Pen(Color.Gray, 1);
pr = new Pen(Color.Black, 2);
rnd = new Random();
графикВПамяти = new Bitmap(panel1.Size.Height, panel1.Size.Width);
полотно = Graphics.FromImage(графикВПамяти);
полотно.DrawImage(графикВПамяти, 0, 0);
полотноПанель = Graphics.FromHwnd(panel1.Handle);
Рисовать_сетку();
Рсовать_графики();
//for (int i = 0; i < база.Count; i++)
// {
// if (база[i].GetType().Name == "Подвижная")
// {
// подв = (Подвижная)база[i];
// подв.Рисовать(Graphics.FromImage(графикВПамяти), panel1.Size);
//}
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
полотноПанель.DrawImage(графикВПамяти, 0, 0);
}
}
}