Файл: Курсовая работа Расчетнопояснительная записка Дисциплина Программирование и основы алгоритмизации Студент Буков А. А.docx
Добавлен: 26.04.2024
Просмотров: 31
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Пользовательский интерфейс
-
Создание кнопки «Добавить фото» (рисунок 8).
С её помощью можно изменять фотографии автомобилей, загружая изображение с внешних источников в любом графическом формате.
-
Определение обработчика события 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 – Создание кнопки добавления фото
-
Запуск программы, открытие файла, сортировка по году (рисунок 9), сортировка по цене – на рисунке 10. -
Создание формы Form1 – стартовое меню – на рисунке 11.
Рисунок 9 – Сортировка по году
Рисунок 10 – Сортировка по цене
Рисунок 11 – Стартовое меню программы
-
Создание в компоненте menuStrip1 для пункта меню первого уровня с текстом Данные (Name - data1) пункт с текстом Редактировать (Name - edit1). -
Определение обработчика события 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();
}
-
Создание формы Form3 – форма редактирования записи – приведено на рисунке 12.
Рисунок 12 – Форма редактирования записи
ЗАКЛЮЧЕНИЕ
В ходе проделанной работы были закреплены знания основ программирования на языке C#, а также получены навыки работы с формой DataGridView, сериализацией и десериализацией XML файла, bindingSource и bindingNavigator, подключением встроенных ссылок, ресурсными папками, файловым менеджером, встроенными библиотеками и т.д. При выполнении курсовой работы были освоены все этапы создания программного комплекса от постановки задачи до практической реализации, сопровождающейся документацией и инструкциями по его использованию. Программа имеет понятный графический интерфейс, является законченной и удобной для использования.
Таким образом, выполнены все поставленные задачи, и цель курсовой работы достигнута в полном объеме.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
-
Ключарев А.А., Матьяш В.А., Щекин С.В. Структуры и алгоритмы обработки данных: Учебное пособие / СПбГУАП. СПб., 2004. -
Колдаев В.Д. Основы алгоритмизации и программирования: Учебное пособие / Колдаев В.Д; Под ред. проф.Л.Г. Гагариной - М.: ИД ФОРУМ, НИЦ ИНФРА-М, 2016. - 416 с. -
Павловская Т. А. C/C++. Программирование на языке высокого уровня: учебник. СПб. : ПИТЕР, 2007. - 461 с. -
Страуструп, Б. Язык программирования C++ [Текст] = The C++ Programming Language : специальное издание / Б. Страуструп ; пер.: С. Анисимов, М. Кононов ; ред.: Ф. Андреев, А. Ушаков. - [Б. м.] : Бином-Пресс, 2008. - 1098 с. -
Кнут, Д. Искусство программирования [Текст] = The art of computer programming: [в 3 т.]. Т. 1. Основные алгоритмы / Д. Кнут ; ред. Ю. В. Козаченко. - 3-е изд. - М. : Вильямс, 2014. - 720 с. -
Демидович, Е.М. Основы алгоритмизации и программирования. Язык СИ [Текст] : учебное пособие / Е. М. Демидович. - 2-е изд., испр. и доп. - СПб. : БХВ - Петербург, 2008. - 440 с. -
Вирт, Н Алгоритмы и структуры данных. Новая версия для Оберона + CD [Текст] / Н. Вирт ; пер. Д. Б. Подшивалов. - 2-е изд., испр. - М. : ДМК Пресс, 2012. - 272 с. -
Давыдов В.Г. Visual С++. Разработка Windows-приложений с помощью MFS и API функций / В.Г. Давыдов – СПб.: БХВ – Петербург, 2008. – 576 с. -
Шилдт Г. Полный справочник по С, 4-ое издание / Г. Шилдт пер. с англ. – М.: Издательский дом «Вильямс», 2015. – 704 с. -
Оберг Р.Д., Торстейнсон П. Архитектура .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
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
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
{
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();
}
}
}
}