Файл: Курсовая работа Расчетнопояснительная записка Дисциплина Программирование и основы алгоритмизации Студент Буков А. А.docx

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 26.04.2024

Просмотров: 29

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Пользовательский интерфейс




  1. Создание кнопки «Добавить фото» (рисунок 8).

С её помощью можно изменять фотографии автомобилей, загружая изображение с внешних источников в любом графическом формате.

  1. Определение обработчика события Click для кнопки:


private void button1_Click(object sender, EventArgs e)

{

OpenFileDialog d = new OpenFileDialog();

if (d.ShowDialog() == System.Windows.Forms.DialogResult.Cancel)

return;

Image img = Image.FromFile(d.FileName);

dataGridView1.CurrentCell.Value = img;

dataGridView1.CurrentRow.Cells[8].Value = d.FileName;

}


Рисунок 8 – Создание кнопки добавления фото


  1. Запуск программы, открытие файла, сортировка по году (рисунок 9), сортировка по цене – на рисунке 10.

  2. Создание формы Form1 – стартовое меню – на рисунке 11.




Рисунок 9 – Сортировка по году


Рисунок 10 – Сортировка по цене


Рисунок 11 – Стартовое меню программы


  1. Создание в компоненте menuStrip1 для пункта меню первого уровня с текстом Данные (Name - data1) пункт с текстом Редактировать (Name - edit1).

  2. Определение обработчика события Click для этого пункта меню:


private void edit1_Click(object sender, EventArgs e)

{

int position = dataGridView1.CurrentRow.Index;

string make = dataGridView1.Rows[position].Cells[1].Value.ToString();

string model = dataGridView1.Rows[position].Cells[2].Value.ToString();

string country = dataGridView1.Rows[position].Cells[3].Value.ToString();

int power = Convert.ToInt16(dataGridView1.Rows[position].Cells[4].Value);

int year = Convert.ToInt16(dataGridView1.Rows[position].Cells[5].Value);

double price = Convert.ToDouble(dataGridView1.Rows[position].Cells[6].Value);

string link = "";

if (dataGridView1.Rows[position].Cells[8].Value != null)

link = dataGridView1.Rows[position].Cells[8].Value.ToString();

Form3 form3 = new Form3(this, position, make, model, country, year, power, price, link);

form3.Owner = this;

form3.ShowDialog();

}


  1. Создание формы Form3 – форма редактирования записи – приведено на рисунке 12.





Рисунок 12 – Форма редактирования записи

ЗАКЛЮЧЕНИЕ


В ходе проделанной работы были закреплены знания основ программирования на языке C#, а также получены навыки работы с формой DataGridView, сериализацией и десериализацией XML файла, bindingSource и bindingNavigator, подключением встроенных ссылок, ресурсными папками, файловым менеджером, встроенными библиотеками и т.д. При выполнении курсовой работы были освоены все этапы создания программного комплекса от постановки задачи до практической реализации, сопровождающейся документацией и инструкциями по его использованию. Программа имеет понятный графический интерфейс, является законченной и удобной для использования.

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ


      1. Ключарев А.А., Матьяш В.А., Щекин С.В. Структуры и алгоритмы обработки данных: Учебное пособие / СПбГУАП. СПб., 2004.

      2. Колдаев В.Д. Основы алгоритмизации и программирования: Учебное пособие / Колдаев В.Д; Под ред. проф.Л.Г. Гагариной - М.: ИД ФОРУМ, НИЦ ИНФРА-М, 2016. - 416 с.

      3. Павловская Т. А. C/C++. Программирование на языке высокого уровня: учебник. СПб. : ПИТЕР, 2007. - 461 с.

      4. Страуструп, Б. Язык программирования C++ [Текст] = The C++ Programming Language : специальное издание / Б. Страуструп ; пер.: С. Анисимов, М. Кононов ; ред.: Ф. Андреев, А. Ушаков. - [Б. м.] : Бином-Пресс, 2008. - 1098 с.

      5. Кнут, Д. Искусство программирования [Текст] = The art of computer programming: [в 3 т.]. Т. 1. Основные алгоритмы / Д. Кнут ; ред. Ю. В. Козаченко. - 3-е изд. - М. : Вильямс, 2014. - 720 с.

      6. Демидович, Е.М. Основы алгоритмизации и программирования. Язык СИ [Текст] : учебное пособие / Е. М. Демидович. - 2-е изд., испр. и доп. - СПб. : БХВ - Петербург, 2008. - 440 с.

      7. Вирт, Н Алгоритмы и структуры данных. Новая версия для Оберона + CD [Текст] / Н. Вирт ; пер. Д. Б. Подшивалов. - 2-е изд., испр. - М. : ДМК Пресс, 2012. - 272 с.

      8. Давыдов В.Г. Visual С++. Разработка Windows-приложений с помощью MFS и API функций / В.Г. Давыдов – СПб.: БХВ – Петербург, 2008. – 576 с.

      9. Шилдт Г. Полный справочник по С, 4-ое издание / Г. Шилдт пер. с англ. – М.: Издательский дом «Вильямс», 2015. – 704 с.

      10. Оберг Р.Д., Торстейнсон П. Архитектура .NET и программирование с помощью Visual C++ / Р.Д. Оберг, П. Торстейнсон пер.с англ. М.:Издательский дом "Вильям", 2002. - 656 с.



ПРИЛОЖЕНИЕ А


Программный код приложения. Файл Car.cs
using System.Drawing;
namespace CarsShowroom

{

public class Car

{

private int id; // Уникальный номер авто

private string make; // Марка авто

private string model; // Модель авто

private Bitmap photo; // Фото авто

private string country; // Страна-производитель авто

private int year; // Год выпуска авто

private int power; // Мощность двигателя

private double price; // Цена авто

private string link; // Ссылка на фото
public Car()

{ }
// id

public int Id

{

get

{

return id;

}

set

{

id = value;

}

}
// make

public string Make

{

get

{

return make;

}

set

{

make = value;

}

}
// model

public string Model

{

get

{

return model;

}

set

{

model = value;

}

}
// country

public string Country

{

get

{

return country;

}

set

{

country = value;

}

}
// power

public int Power

{

get

{

return power;

}

set

{

power = value;

}

}
// year

public int Year

{

get

{

return year;

}

set

{

year = value;

}

}
// price

public double Price

{

get

{

return price;

}

set

{

price = value;

}

}
// photo

public Bitmap Photo

{

get

{

return photo;

}

set

{

photo = value;

}

}
// link

public string Link

{

get

{

return link;

}

set

{

link = value;

}

}

}

}

Программный код приложения. Файл Form1.cs
using System;

using System.Windows.Forms;
namespace CarsShowroom

{

public partial class Form1 : Form

{

private Form form2 = new Form2();
public Form1()

{

InitializeComponent();

}
private void button1_Click(object sender, EventArgs e)

{

form2.Owner = this;

form2.ShowDialog();

Close();

}
private void button2_Click(object sender, EventArgs e)

{

Application.Exit();

}

}

}

Программный код приложения. Файл Form2.cs
using Microsoft.VisualBasic;

using System;

using System.Collections.Generic;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.IO;

using System.Xml.Serialization;
namespace CarsShowroom

{

public partial class Form2 : Form

{

private XmlSerializer xmls = new XmlSerializer(typeof(List));

private string makeToFind = "";
public Form2()

{

InitializeComponent();

carBindingSource.DataSource = new List();

id2.Tag = 0;

year2.Tag = 1;

price2.Tag = 2;

}
private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)

{

if (dataGridView1.Rows[e.RowIndex].IsNewRow)

return;

string err = "", s = e.FormattedValue.ToString();

int i; double d;

switch (e.ColumnIndex)

{

// id

case 0:

// make

case 1:

if (s == "")

err = "Поле \"Марка\" не должно быть пустым";

break;

// model

case 2:

if (s == "")

err = "Поле \"Модель\" не должно быть пустым";

break;

// country

case 3:

if (s == "")

err = "Поле \"Производитель\" не должно быть пустым";

break;

// power

case 4:

if (!int.TryParse(s, out i))

err = "Строку нельзя преобразовать в число";

else if (i < 0)

err = "Отрицательные числа не допускаются";

break;

// year

case 5:

if (!int.TryParse(s, out i))

err = "Строку нельзя преобразовать в число";

else if (i < 0)

err = "Отрицательные числа не допускаются";

break;

// price

case 6:

if (!double.TryParse(s, out d))

err = "Строку нельзя преобразовать в число";

else if (d < 0)

err = "Отрицательные числа не допускаются";

break;

}

e.Cancel = err != "";

dataGridView1.Rows[e.RowIndex].ErrorText = err;

}
private void dataGridView1_RowValidating(object sender, DataGridViewCellCancelEventArgs e)

{

if (dataGridView1.Rows[e.RowIndex].IsNewRow)

return;

string err = "";

if (dataGridView1[1, e.RowIndex].Value == null)

err = "Поле \"Марка\" должно быть непустым";

e.Cancel = err != "";

dataGridView1.Rows[e.RowIndex].ErrorText = err;

}
private void SaveData(string name)

{

int n = dataGridView1.RowCount;

for (int i = 0; i < n - 1; i++)

{

dataGridView1.Rows[i].Cells[7].Value = null;

}

if (name == "" || dataGridView1.RowCount == 1)

return;

if (dataGridView1.CurrentRow.IsNewRow)

dataGridView1.CurrentCell =

dataGridView1[0, dataGridView1.RowCount - 2];

StreamWriter sw = new StreamWriter(name, false, Encoding.Default);

xmls.Serialize(sw, carBindingSource.DataSource);

sw.Close();

for (int i = 0; i < n - 1; i++)

{

if (dataGridView1.Rows[i].Cells[8].Value != null)

dataGridView1.Rows[i].Cells[7].Value = new Bitmap(dataGridView1.Rows[i].Cells[8].Value + "");

}

}

private void new1_Click(object sender, EventArgs e)

{

carBindingSource.DataSource = new List();

SaveData(saveFileDialog1.FileName);

saveFileDialog1.FileName = "";

Text = "CarShop";

dataGridView1.CurrentCell = null;

}
private void open1_Click(object sender, EventArgs e)

{

openFileDialog1.FileName = "";

if (openFileDialog1.ShowDialog() == DialogResult.OK)

{

SaveData(saveFileDialog1.FileName);

string s = openFileDialog1.FileName;

StreamReader sr = new StreamReader(s, Encoding.Default);

carBindingSource.SuspendBinding();

carBindingSource.DataSource = xmls.Deserialize(sr);

carBindingSource.ResumeBinding();

sr.Close();

saveFileDialog1.FileName = s;

Text = "CarShop - " + Path.GetFileNameWithoutExtension(s);

int n = dataGridView1.RowCount;

for (int i = 0; i < n - 1; i++)

{

if (dataGridView1.Rows[i].Cells[8].Value != null)

{

dataGridView1.Rows[i].Cells[7].Value = new Bitmap(dataGridView1.Rows[i].Cells[8].Value + "");

dataGridView1.Rows[i].Height = new Bitmap(dataGridView1.Rows[i].Cells[8].Value + "").Height;

}

}

}

}
private void save1_Click(object sender, EventArgs e)

{

if (saveFileDialog1.ShowDialog() == DialogResult.OK)

{

string h = saveFileDialog1.FileName;

SaveData(h);

Text = "Car - " + Path.GetFileNameWithoutExtension(h);

}

}
private void Form2_FormClosing(object sender, FormClosingEventArgs e)

{

SaveData(saveFileDialog1.FileName);

}
private void file1_DropDownOpening(object sender, EventArgs e)

{

save1.Enabled = dataGridView1.RowCount > 1;

}
public void updateId()

{

menuStrip1.Enabled = !dataGridView1.IsCurrentCellDirty;

int row = dataGridView1.CurrentRow.Index;

if (!dataGridView1.IsCurrentCellDirty &&

(int)dataGridView1["Id1", row].Value == 0)

{

int maxId = 0;

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

{

int v = (int)dataGridView1["Id1", i].Value;

if (maxId < v)

maxId = v;

}

dataGridView1["Id1", row].Value = maxId + 1;

}

}
private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)

{

updateId();

}
private int CompareById(Car a, Car b)

{

return a.Id - b.Id;

}
private int CompareByYear(Car a, Car b)

{

return a.Year.CompareTo(b.Year);

}
private int CompareByPrice(Car a, Car b)

{

return a.Price.CompareTo(b.Price);

}
private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e)

{

find1.Enabled = bindingNavigatorDeleteItem.Enabled = !dataGridView1.Rows[e.RowIndex].IsNewRow;

}
private void year2_Click(object sender, EventArgs e)

{

if (dataGridView1.RowCount == 1)

return;

dataGridView1.CurrentCell = dataGridView1[0, 0];

Comparison comp = CompareByYear;

switch ((int)(sender as ToolStripMenuItem).Tag)

{

case 0:

comp = CompareById;

break;

case 1:

comp = CompareByYear;

break;

case 2:

comp = CompareByPrice;

break;

}

(carBindingSource.DataSource as List).Sort(comp);

carBindingSource.ResetBindings(false);

}
private void find1_Click(object sender, EventArgs e)

{

makeToFind = Interaction.InputBox("Введите начальную часть производителя авто для поиска:",

"Поиск по производителю авто", makeToFind, -1, -1).Trim();
if (makeToFind == "")

return;
int ind = (carBindingSource.DataSource as

List).FindIndex(dataGridView1.CurrentRow.Index, delegate (Car a)

{

return a.Country.StartsWith(makeToFind,

StringComparison.OrdinalIgnoreCase);

});
if (ind != -1)

dataGridView1.CurrentCell = dataGridView1[3, ind];

else

MessageBox.Show("Производитель авто не найден", "Поиск по производителю авто");

}
private void button1_Click_1(object sender, EventArgs e)

{

OpenFileDialog d = new OpenFileDialog();

if (d.ShowDialog() == System.Windows.Forms.DialogResult.Cancel)

return;

Image img = Image.FromFile(d.FileName);

dataGridView1.CurrentCell.Value = img;

dataGridView1.CurrentRow.Cells[8].Value = d.FileName;

}
private void exit1_Click(object sender, EventArgs e)

{

Close();

}
private void edit1_Click(object sender, EventArgs e)

{

int position = dataGridView1.CurrentRow.Index;

string make = dataGridView1.Rows[position].Cells[1].Value.ToString();

string model = dataGridView1.Rows[position].Cells[2].Value.ToString();

string country = dataGridView1.Rows[position].Cells[3].Value.ToString();

int power = Convert.ToInt16(dataGridView1.Rows[position].Cells[4].Value);

int year = Convert.ToInt16(dataGridView1.Rows[position].Cells[5].Value);

double price = Convert.ToDouble(dataGridView1.Rows[position].Cells[6].Value);

string link = "";

if (dataGridView1.Rows[position].Cells[8].Value != null)

link = dataGridView1.Rows[position].Cells[8].Value.ToString();

Form3 form3 = new Form3(this, position, make, model, country, year, power, price, link);

form3.Owner = this;

form3.ShowDialog();

}

}

}

Программный код приложения. Файл Form3.cs
using System;

using System.Drawing;

using System.Windows.Forms;
namespace CarsShowroom

{

public partial class Form3 : Form

{

private Form2 form2;

private int position; // Позиция в таблице
public Form3(Form2 form2, int position) // конструктор для создания записи

{

InitializeComponent();

Button_Block();

this.form2 = form2;

this.position = position;

}
public Form3 (Form2 form2, int position, string make, string model, string country, int year, int power, double price, string link) // конструктор для редактирования записи

{

InitializeComponent();

Button_Block();

this.form2 = form2;

this.position = position;

comboBox1.Text = make;

textBox1.Text = model;

if (link != "")

{

pictureBox1.Image = new Bitmap(link);

}

textBox2.Text = country;

textBox3.Text = power.ToString();

numericUpDown1.Value = year;

textBox5.Text = price.ToString();

}
private void Button_Block() // блокировка кнопки "ОК"

{

if (!textBox1.Text.Equals("") && !textBox2.Text.Equals("") && !textBox3.Text.Equals("")

&& !textBox5.Text.Equals("") && !comboBox1.Text.Equals(""))

{

button2.Enabled = true;

}

else

{

button2.Enabled = false;

}

}
private void textBox3_KeyPress(object sender, KeyPressEventArgs e)

{

if (!Char.IsDigit(e.KeyChar) && e.KeyChar != Convert.ToChar(8))

{

e.Handled = true;

}

}
private void button2_Click(object sender, EventArgs e)

{

this.Hide();

form2.dataGridView1.Rows[position].Cells[1].Value = comboBox1.Text;

form2.dataGridView1.Rows[position].Cells[2].Value = textBox1.Text;

form2.dataGridView1.Rows[position].Cells[3].Value = textBox2.Text;

form2.dataGridView1.Rows[position].Cells[4].Value = textBox3.Text;

form2.dataGridView1.Rows[position].Cells[5].Value = numericUpDown1.Value;

form2.dataGridView1.Rows[position].Cells[6].Value = textBox5.Text;

}
private void button1_Click(object sender, EventArgs e)

{

string path;

Bitmap image; //Bitmap для открываемого изображения

OpenFileDialog open_dialog = new OpenFileDialog(); //создание диалогового окна для выбора файла

open_dialog.Filter = "Image Files(*.BMP;*.JPG;*.GIF;*.PNG)|*.BMP;*.JPG;*.GIF;*.PNG|All files (*.*)|*.*"; //формат загружаемого файла

if (open_dialog.ShowDialog() == DialogResult.OK) //если в окне была нажата кнопка "ОК"

{

try

{

image = new Bitmap(open_dialog.FileName);

path = open_dialog.FileName;

pictureBox1.Size = image.Size;

pictureBox1.Image = image;
form2.dataGridView1.Rows[position].Cells[8].Value = path; // ссылка

form2.dataGridView1.Rows[position].Cells[7].Value = image; // фото

form2.dataGridView1.Rows[position].Height = image.Height; // высота строки

}

catch

{

DialogResult rezult = MessageBox.Show("Невозможно открыть выбранный файл",

"Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

}
private void comboBox1_TextUpdate(object sender, EventArgs e)

{

Button_Block();

}
private void textBox5_KeyPress(object sender, KeyPressEventArgs e)

{

if (!Char.IsDigit(e.KeyChar) && e.KeyChar != Convert.ToChar(8) && e.KeyChar != ',')

{

e.Handled = true;

}

}
private void Form3_FormClosing(object sender, FormClosingEventArgs e)

{

if (e.CloseReason == CloseReason.UserClosing)

{

e.Cancel = true;

Hide();

}

}

}

}