Разработка базы данных с использованием графических примитивов

Заказать уникальную курсовую работу
Тип работы: Курсовая работа
Предмет: C#
  • 51 51 страница
  • 10 + 10 источников
  • Добавлена 10.06.2024
1 496 руб.
  • Содержание
  • Часть работы
  • Список литературы
Введение 4
Постановка задачи 6
1. Проектирование приложения 8
1.1. Понятие жизненного цикла программного продукта и его модели 8
1.2. Выбор модели жизненного цикла 14
2. Проектирование баз данных 16
2.1 Логическая модель БД 16
2.2 Физическая модель БД 18
3. Реализация проекта 21
3.1 Выбор средств разработки 21
3.2 Разработка пользовательского интефейса 22
3.3 Написание программного кода 25
3.4 Тестирование и отладка 31
3.5 Создание билда 32
4. Программная документация 33
4.1 Руководство пользователя (инструкция) 33
Заключение 38
Список использованных источников 40
Приложение А 42
Фрагмент для ознакомления

CreateFile(nameBD); Connect = new SQLiteConnection("Data Source=" + nameBD);stringcommandText = "CREATE TABLE IF NOT EXISTS Products ";commandText += "(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, ";commandText += "Category TEXT NOT NULL, ";commandText += "NameProduct TEXT NOT NULL, ";commandText += "Price INTEGER NOT NULL, ";commandText += "Guarantee INTEGER, ";commandText += "StoreCount INTEGER NOT NULL DEFAULT 0)";cmd = new SQLiteCommand(commandText, Connect);Connect.Open();cmd.ExecuteNonQuery();cmd.Dispose();Connect.Close(); }private void подключитьсяКБДToolStripMenuItem_Click(object sender, EventArgs e) {if (File.Exists(nameBD) == false) {DialogResultdialogResult = MessageBox.Show("Базаданныхотсутствует, создатьбазуданных?", "Подключениекбазеданных", MessageBoxButtons.YesNo);if (dialogResult == DialogResult.Yes) { // создаем новую базу данных и таблицу в нейCreateBD(nameBD);MessageBox.Show("Новая база данных создана и подключена");базаToolStripMenuItem.Enabled = true;загрузитьДанныеToolStripMenuItem.Enabled = true;сохранитьДанныеToolStripMenuItem.Enabled = true; }else if (dialogResult == DialogResult.No){ // если база отсутствует и был отказ от созданияMessageBox.Show("База данных отсутствует, для дальнейшей работы создайте базу данных"); } }else { // если база имеется, сообщаем об этомConnect = new SQLiteConnection("Data Source=" + nameBD);Connect.Open();MessageBox.Show("Базаданныхуспешноподключена");Connect.Close();базаToolStripMenuItem.Enabled = true;загрузитьДанныеToolStripMenuItem.Enabled = true;сохранитьДанныеToolStripMenuItem.Enabled = true; } }privateintInsertLine(string txt) {int number;using (Connect = new SQLiteConnection($"Data Source={nameBD}")) {Connect.Open();cmd = new SQLiteCommand(txt, Connect);number = cmd.ExecuteNonQuery(); }return number; }private void создатьБДToolStripMenuItem_Click(object sender, EventArgs e) {if (File.Exists(nameBD) == true) {DialogResultdialogResult = MessageBox.Show("Имеетсябазаданных, хотитесоздатьновуюбазуданных?", "Подключениекбазеданных", MessageBoxButtons.YesNo);if (dialogResult == DialogResult.Yes) { // закрываем соединение с базой данных if (Connect != null)Connect.Close(); // удаляембазуданныхFile.Delete("ComputerStoreBD.db");// создаем новую базу данных и таблицу в нейCreateBD("ComputerStoreBD.db");MessageBox.Show("Новая база данных создана");базаToolStripMenuItem.Enabled = true;загрузитьДанныеToolStripMenuItem.Enabled = true;сохранитьДанныеToolStripMenuItem.Enabled = true;DialogResult dialogResult1 = MessageBox.Show("Вбазеотсутствуютданные, добавитьданныеизфайла?", "Созданиебазыданных", MessageBoxButtons.YesNo);if (dialogResult1 == DialogResult.Yes) {int k = 0;intnumber; // открываем файл с данными и заполняем таблицу // настраиваем фильтр при открытии файла openFileDialog1.Filter = "Textfiles(*.txt)|*.txt|Allfiles(*.*)|*.*"; // вызываем метод открытия диалогового окна openFileDialog1.ShowDialog(); // в f будем хранить имя файла из которого будем считывать массивString fileNameData = openFileDialog1.FileName;try { // Check if file exists or notif (fileNameData.Length != 0) { // Read the file present in the pathusing (StreamReadersr = new StreamReader(fileNameData)) {string line; // Iterating the filewhile (!sr.EndOfStream) {stringcommandText = "INSERT INTO Products (Category, NameProduct, Price, Guarantee, StoreCount) VALUES (";line = sr.ReadLine();commandText += "'" + line + "', ";line = sr.ReadLine();commandText += "'" + line + "', ";line = sr.ReadLine();commandText += line + ", ";line = sr.ReadLine();commandText += line + ", ";line = sr.ReadLine();commandText += line + ");";number = InsertLine(commandText); k = k + number; } } } } // Caught the exceptioncatch (Exception ex) {MessageBox.Show("The process failed: {0}", ex.ToString()); }MessageBox.Show($"Втаблицу Products добавленообъектов: {k}"); }else if (dialogResult1 == DialogResult.No){ // если база пуста и был отказ от добавленияMessageBox.Show("Для добавления данных выберите пункт Файл-Загрузить данные или введите данные вручную после того, как откроете таблицу");} } } }private void загрузитьДанныеToolStripMenuItem_Click(object sender, EventArgs e){int k = 0;intnumber; // открываем файл с данными и заполняем таблицу // настраиваем фильтр при открытии файла openFileDialog1.Filter = "Textfiles(*.txt)|*.txt|Allfiles(*.*)|*.*"; // вызываем метод открытия диалогового окна openFileDialog1.ShowDialog(); // в f будем хранить имя файла из которого будем считывать массивString fileNameData = openFileDialog1.FileName;try { // проверяемвыбранлиФайлif (fileNameData.Length != 0) { // открываемфайлдлячтенияusing (StreamReadersr = new StreamReader(fileNameData)) {string line; // Iterating the filewhile (!sr.EndOfStream) {stringcommandText = "INSERT INTO Products (Category, NameProduct, Price, Guarantee, StoreCount) VALUES (";line = sr.ReadLine();commandText += "'" + line + "', ";line = sr.ReadLine();commandText += "'" + line + "', ";line = sr.ReadLine();commandText += line + ", ";line = sr.ReadLine();commandText += line + ", ";line = sr.ReadLine();commandText += line + ");";number = InsertLine(commandText); k = k + number;} } } } // если файл с данными некорректныйcatch (Exceptionex) {MessageBox.Show("Ошибка при добавлении данных: {0}", ex.ToString()); }MessageBox.Show($"В таблицу Products добавлено объектов: {k}");}publicDataTableGetDataFromTable(string tableName) {dt = new DataTable();using (Connect = new SQLiteConnection($"Data Source={nameBD}")) {Connect.Open();string query = $"SELECT * FROM {tableName};";using (cmd = new SQLiteCommand(query, Connect)) {using (var adapter = new SQLiteDataAdapter(cmd)) {adapter.Fill(dt); } } }returndt; }private void открытьТаблицуToolStripMenuItem_Click(object sender, EventArgs e) {ProductGridView.Visible = true;panelAct.Visible = true;DataTabledt = GetDataFromTable("Products");ProductGridView.DataSource = dt;ProductGridView.Visible = true;ProductGridView.Tag = "Products";if (dt.Rows.Count == 0) {MessageBox.Show("Таблицапуста! Для добавления данных выберите пункт Файл-Загрузить данные или введите данные вручную."); } // Очистить и заполнить выпадающий список сортировкиcmbBoxSort.Items.Clear();if (ProductGridView.Columns.Count > 0) {foreach (DataGridViewColumn column in ProductGridView.Columns) {cmbBoxSort.Items.Add(column.HeaderText); } } }private void RefreshTable(string tableName) {if (ProductGridView.Tag != null) {DataTabledt = GetDataFromTable(tableName);ProductGridView.DataSource = dt; } }private void cmbBoxSort_SelectedIndexChanged(object sender, EventArgs e) {if (cmbBoxSort.SelectedItem != null && ProductGridView.DataSource != null) {stringsortField = cmbBoxSort.SelectedItem.ToString(); (ProductGridView.DataSource as DataTable).DefaultView.Sort = sortField; } }private void btnInsertData_Click(object sender, EventArgs e) {if (CategorytxtBox.Text.Length != 0 && NameProducttxtBox.Text.Length != 0 && PricetxtBox.Text.Length != 0) {int number;if (GuaranteetxtBox.Text.Length != 0) {stringcommandText = "INSERT INTO Products (Category, NameProduct, Price, Guarantee, StoreCount) VALUES (";commandText += "'" + CategorytxtBox.Text + "', ";commandText += "'" + NameProducttxtBox.Text + "', ";commandText += PricetxtBox.Text + ", ";commandText += GuaranteetxtBox.Text + ", ";commandText += countUpDown.Value.ToString() + ");";number = InsertLine(commandText); }else {stringcommandText = "INSERT INTO Products (Category, NameProduct, Price, StoreCount) VALUES (";commandText += "'" + CategorytxtBox.Text + "', ";commandText += "'" + NameProducttxtBox.Text + "', ";commandText += PricetxtBox.Text + ", ";commandText += countUpDown.Value.ToString() + ");";number = InsertLine(commandText); }MessageBox.Show($"Втаблицу Users добавленообъектов: {number}");RefreshTable("Products"); } }private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e){MessageBox.Show("Программное приложение для просмотра, добавления, удаления, сортировки и поиска данных в базе данных 'Компьютерный магазин'");}public void DeleteRow(int id, string tableName) {using (Connect = new SQLiteConnection($"Data Source={nameBD}")) {Connect.Open();cmd = new SQLiteCommand(Connect);cmd.CommandText = $"DELETE FROM {tableName} WHERE Id = @Id";cmd.Parameters.AddWithValue("@Id", id);cmd.ExecuteNonQuery(); } }private void btnDel_Click(object sender, EventArgs e) {if (ProductGridView.CurrentRow == null) return; // Проверяем, выбраналистрокаintrowIndex = ProductGridView.CurrentRow.Index;if (ProductGridView.Rows[rowIndex].Cells[0].Value == null) return; // Проверяем, естьлизначениевячейкес IDboolisParsed = int.TryParse(ProductGridView.Rows[rowIndex].Cells[0].Value.ToString(), out id);if (!isParsed) return; // Если не удалось преобразовать ID в число, прекращаем выполнениеvarconfirmationResult = MessageBox.Show("Вы уверены, что хотите удалить эту запись?", "Подтверждение удаления", MessageBoxButtons.YesNo, MessageBoxIcon.Question);if (confirmationResult == DialogResult.Yes) {vartableName = ProductGridView.Tag.ToString();DeleteRow(id, tableName);RefreshTable("Products"); } }private void btnEdit_Click(object sender, EventArgs e) {if (ProductGridView.CurrentRow == null) return; // Проверяем, выбраналистрокаintrowIndex = ProductGridView.CurrentRow.Index;if (ProductGridView.Rows[rowIndex].Cells[0].Value == null) return; // Проверяем, естьлизначениевячейкес IDboolisParsed = int.TryParse(ProductGridView.Rows[rowIndex].Cells[0].Value.ToString(), out id);if (!isParsed) return; // Если не удалось преобразовать ID в число, прекращаем выполнениеCategorytxtBox.Text = ProductGridView.Rows[rowIndex].Cells[1].Value.ToString();NameProducttxtBox.Text = ProductGridView.Rows[rowIndex].Cells[2].Value.ToString();PricetxtBox.Text = ProductGridView.Rows[rowIndex].Cells[3].Value.ToString();GuaranteetxtBox.Text = ProductGridView.Rows[rowIndex].Cells[4].Value.ToString();countUpDown.Value = Convert.ToInt32(ProductGridView.Rows[rowIndex].Cells[5].Value.ToString()); }private void btnSave_Click(object sender, EventArgs e) {if (CategorytxtBox.Text.Length != 0 && NameProducttxtBox.Text.Length != 0 && PricetxtBox.Text.Length != 0) {int number;stringcommandText;if (GuaranteetxtBox.Text.Length != 0) { //UPDATE Users SET Age = 20 WHERE Name = 'Tom'commandText = "UPDATE Products SET ";commandText += "Category='" + CategorytxtBox.Text + "', ";commandText += "NameProduct='" + NameProducttxtBox.Text + "', ";commandText += "Price=" + PricetxtBox.Text + ", ";commandText += "Guarantee=" + GuaranteetxtBox.Text + ", ";commandText += "StoreCount=" + countUpDown.Value.ToString() + " WHERE id=" + id.ToString(); }else {commandText = "UPDATE Products SET ";commandText += "Category='" + CategorytxtBox.Text + "', ";commandText += "NameProduct='" + NameProducttxtBox.Text + "', ";commandText += "Price=" + PricetxtBox.Text + ", ";commandText += "StoreCount=" + countUpDown.Value.ToString() + " WHERE id=" + id.ToString(); }using (Connect = new SQLiteConnection($"Data Source={nameBD}")) {Connect.Open();cmd = new SQLiteCommand(commandText, Connect);number = cmd.ExecuteNonQuery();MessageBox.Show($"Обновленообъектов: {number}"); } //MessageBox.Show($"Втаблицу Users обновленообъектов: {number}");RefreshTable("Products"); } }private void SearchInDataTable(string searchQuery1, string searchQuery2 = null) {if (ProductGridView.DataSource is DataTabledtOriginal){ // Создаем копию DataTable для фильтрации, чтобы не изменять исходные данныеDataTabledtFiltered = dtOriginal.Clone(); // Преобразуем DataTable в Enumerable для использования LINQvarrows = dtOriginal.AsEnumerable(); // Фильтрация строк по первому поисковому запросуvarfilteredRows = rows.Where(row => row.ItemArray.Any(field => field.ToString().Contains(searchQuery1)));// Если задан второй поисковый запрос, дополнительно фильтруем строкиif (!string.IsNullOrEmpty(searchQuery2)) {filteredRows = filteredRows.Where(row => row.ItemArray.Any(field => field.ToString().Contains(searchQuery2)));} // Добавляем отфильтрованные строки в новуюDataTableforeach (var row in filteredRows) {dtFiltered.ImportRow(row); } // УстанавливаемотфильтрованнуюDataTableвкачествеисточникаданныхдляDataGridViewProductGridView.DataSource = dtFiltered; } }private void btnFind_Click(object sender, EventArgs e) {string searchQuery1 = NameSearchtxtBox.Text;string searchQuery2 = CategorySearchtxtBox.Text;RefreshTable("Products"); // Вызываем метод поиска // Если второе текстовое поле пустое, поиск выполнен только по 1 признакуSearchInDataTable(searchQuery1, string.IsNullOrEmpty(searchQuery2) ? null : searchQuery2); }private void btnClear_Click(object sender, EventArgs e) {ProductGridView.DataSource = dt;RefreshTable("Products"); }private void сохранитьДанныеToolStripMenuItem_Click(object sender, EventArgs e) {string s;if (dt.Rows.Count == 0) {MessageBox.Show("Таблицапуста!"); }else {RefreshTable("Products");try { // полнаяперезаписьфайлаusing (StreamWriter writer = new StreamWriter("outputData.txt", false, Encoding.Default)) {for (int j = 0; j < ProductGridView.Rows.Count; j++) {for (inti = 1; i < ProductGridView.Rows[j].Cells.Count; i++) {writer.WriteLine(ProductGridView.Rows[j].Cells[i].Value );} } }MessageBox.Show("Данные успешно сохранены!"); }catch {MessageBox.Show("При сохранении данных произошли ошибки, проверьте данные!");} } }private void PricetxtBox_KeyPress(object sender, KeyPressEventArgs e) { //вводтолькоцифри backspaceif (!Char.IsDigit(e.KeyChar) && e.KeyChar != Convert.ToChar(8)) {e.Handled = true; } }private void GuaranteetxtBox_KeyPress(object sender, KeyPressEventArgs e) { //вводтолькоцифри backspaceif (!Char.IsDigit(e.KeyChar) && e.KeyChar != Convert.ToChar(8)) {e.Handled = true; } }private void CategorytxtBox_KeyPress(object sender, KeyPressEventArgs e) { //запретввода / и \if (e.KeyChar== Convert.ToChar(47) || e.KeyChar == Convert.ToChar(92)) {e.Handled = true; } }private void NameProducttxtBox_KeyPress(object sender, KeyPressEventArgs e) { //запретввода / и \if (e.KeyChar == Convert.ToChar(47) || e.KeyChar == Convert.ToChar(92)) {e.Handled = true; } }private void CategorySearchtxtBox_KeyPress(object sender, KeyPressEventArgs e) { //запретввода / и \if (e.KeyChar == Convert.ToChar(47) || e.KeyChar == Convert.ToChar(92)) {e.Handled = true; } }private void NameSearchtxtBox_KeyPress(object sender, KeyPressEventArgs e) { //запретввода / и \if (e.KeyChar == Convert.ToChar(47) || e.KeyChar == Convert.ToChar(92)){e.Handled = true; } } }}

1. С++. Объектно-ориентированное программирование: практикум: учебное пособие для студентов вузов./ Павловская Т.А., Щупак Ю.А. – СПб.: Питер, 2005. – 264с.
2. Гриффитс И. Программирование на С# 5.0/ Иэн Гриффитс ; [пер. с англ. М.А. Райтмана]. – М.: Эксмо, 2014. – 1136 с.
3. Знакомство с Visual Studio: [Электронный ресурс] URL: https://habr.com/ru/sandbox/79099/. (Дата обращения: 13.05.2022).
4. Ишкова Э.А. Самоучитель C#. Начала программирования. 2-е издание. – СПб.: Наука и Техника, 2013. – 496 с.
5. Модели и методологии разработки ПО. [Сайт GeekBrains] – URL: https://gb.ru/blog/modeli-i-metodologii-razrabotki-po/ (дата обращения 10.05.2024). – Режим доступа: свободный
6. Павловская Т.А. С#. Программирование на языке высокого уровня: Учебник для вузов. – СПб.: Питер, 2014. – 432 с.
7. Перл, И. А. Введение в методологию программной инженерии: учебное пособие / И. А. Перл, О. В. Калёнова. – СПб: НИУ ИТМО, 2017. – 53 с. – Текст: электронный // Лань: электронно-библиотечная система. – URL: https://e.lanbook.com/book/136397 (дата обращения: 10.05.2024). – Режим доступа: для авториз. пользователей.
8. Пример создания “*.mdf” файла локальной базы данных Microsoft Sql Server. 19 июля, 2016. [Электронный ресурс] URL: https://www.bestprog.net/ru/2016/07/19/002-пример-создания-mdf-файла-локально/ (Дата обращения 11.05.2024). – Режим доступа: свободный
9. Уотсон, Карли, Нейгел, Кристиан, Педерсен, Якоб Хаммер, Рид, Джон Д., Скиннер, Морган. Visual C# 2010: полный курс: Пер. с англ. – М.: ООО «И.Д. Вильямс», 2011. – 960 с.
10. Windows Forms: [Электронный ресур]. URL: https://microsoft.fandom.com/ru/wiki/Windows_Forms. (Дата обращения 11.05.2024). – Режим доступа: свободный