
- •Содержание
- •Введение
- •1. Описание постановки задачи
- •2. Объектная модель программной системы согласно методологии омт (в виде idef-диаграмм)
- •2.1 Анализ требований
- •2.2 Предварительное проектирование системы
- •3. Описание алгоритмов обработки данных (блок-схема алгоритма)
- •4. Реализация системы на языке с# (листинг программы с комментариями)
- •Заключение
3. Описание алгоритмов обработки данных (блок-схема алгоритма)
Основные алгоритмы обработки данных, требующие внимания, в этом программном продукте реализованы двумя функциями:
сохранение базы в файл;
загрузка базы из файла.
Словесное описание алгоритма сохранения базы в файл:
Выбираем соответствующую вкладку.
Редактируем таблицу;
Сохраняем данные в файл, путем нажатия на кнопку "Сохранить изменения".
Словесное описание алгоритма загрузки базы из файла:
Загрузка файла осуществляется автоматически при выборе соответствующей таблицы.
Редактируем таблицу.
Закрываем файл.
Непосредственно с реализацией алгоритмов можно ознакомиться в представленном полном листинге программы (Раздел 4).
Основная форма: файл "Form1. cs”, "Form1. Designer. cs”;
Реализация классов: файл "Classes. cs”;
Типизированный файл: "Base”
4. Реализация системы на языке с# (листинг программы с комментариями)
using System;
using System. Collections. Generic;
using System.componentModel;
using System. Data;
using System. Drawing;
using System. Linq;
using System. Text;
using System. Windows. Forms;
using System. IO;
namespace PKP
{
public partial class PKP_Form: Form
{
Public PKP_Form ()
{
InitializeComponent ();
}
private void главнаяToolStripMenuItem_Click (object sender, EventArgs e)
{
panel1. Visible = true;
panel2. Visible = false;
panel3. Visible = false;
panel4. Visible = false;
panel5. Visible = false;
}
private void продукцияToolStripMenuItem_Click (object sender, EventArgs e)
{
panel1. Visible = false;
panel2. Visible = true;
panel3. Visible = false;
panel4. Visible = false;
panel5. Visible = false;
}
private void персоналToolStripMenuItem_Click (object sender, EventArgs e)
{
panel1. Visible = false;
panel2. Visible = false;
panel3. Visible = true;
panel4. Visible = false;
panel5. Visible = false;
BazaInOzy. my_db. tables [6]. LoadTableFromOzy (dataGridView2);
}
private void нашиКонтактыToolStripMenuItem_Click (object sender, EventArgs e)
{
panel1. Visible = false;
panel2. Visible = false;
panel3. Visible = false;
panel4. Visible = true;
panel5. Visible = false;
MessageBox. Show (" Адрес: Белово\r\nГ.<. \r\n - ул,Советская 26\r\n - ВИДЕТЬ ВАС!!!", "Наши контакты", MessageBoxButtons. OK, MessageBoxIcon. Information);
}
private void Form1_Load (object sender, EventArgs e)
{
// BazaInOzy. my_db. create_shema ();
BazaInOzy. my_db. LoadBaseFromInputFile ();
this. dataGridView1. RowCount = 5;
this. dataGridView1. ColumnCount = 5;
this.comboBox1. Items. Clear ();
foreach (NatTable d in BazaInOzy. my_db. tables)
{
if ( (d. table_name! ="Персонал") && (d. table_name! ="Новинки"))
{this.comboBox1. Items. Add (d. table_name); }
}
this. dataGridView1. Columns [1]. HeaderCell. Value = "Модель";
this. dataGridView1. Columns [2]. HeaderCell. Value = "Характеристики";
this. dataGridView1. Columns [3]. HeaderCell. Value = "Цена";
this. dataGridView1. Columns [4]. HeaderCell. Value = "Наличие";
panel1. Visible = true; // Реализация видимости панелей
panel2. Visible = false;
panel3. Visible = false;
panel4. Visible = false;
panel5. Visible = false;
comboBox1. SelectedIndex = 0;
BazaInOzy. my_db. tables [0]. LoadTableFromOzy (dataGridView1);
panel1. Size = this. Size;
panel1. Left = 0;
panel1. Top = menuStrip1. Height;
pictureBox1. Parent = panel1;
pictureBox1. Size = this. Size;
panel2. Size = this. Size;
panel2. Left = 0;
panel2. Top = menuStrip1. Height;
panel3. Size = this. Size;
panel3. Left = 0;
panel3. Top = menuStrip1. Height;
panel4. Size = this. Size;
panel4. Left = 0;
panel4. Top = menuStrip1. Height;
panel5. Left = 0;
panel5. Top = menuStrip1. Height;
panel5. Size = this. Size;
dataGridView1. AdvancedRowHeadersBorderStyle. Bottom = DataGridViewAdvancedCellBorderStyle. Single;
}
private void comboBox1_SelectedIndexChanged (object sender, EventArgs e)
{
BazaInOzy. source_table = comboBox1. SelectedText;
BazaInOzy. TableNumber = comboBox1. SelectedIndex;
foreach (NatTable d in BazaInOzy. my_db. tables) { if (d. table_name == BazaInOzy. source_table) { BazaInOzy. TableNumber = d. table_number - 1; } }
BazaInOzy. my_db. tables [BazaInOzy. TableNumber]. LoadTableFromOzy (this. dataGridView1);
}
private void button1_Click (object sender, EventArgs e)
{ BazaInOzy. my_db. tables [BazaInOzy. TableNumber]. SaveTableInOzy (this. dataGridView1);
BazaInOzy. my_db. SaveBaseInOutputFile ();
}
private void button3_Click_2 (object sender, EventArgs e)
{
BazaInOzy. my_db. tables [7]. SaveTableInOzy (dataGridView3);
BazaInOzy. my_db. SaveBaseInOutputFile ();
}
private void новинкиToolStripMenuItem_Click (object sender, EventArgs e)
{
panel1. Visible = false;
panel2. Visible = false;
panel3. Visible = false;
panel4. Visible = false;
panel5. Visible = true;
BazaInOzy. my_db. tables [7]. LoadTableFromOzy (dataGridView3);
}
private void button4_Click (object sender, EventArgs e)
{
BazaInOzy. my_db. tables [6]. SaveTableInOzy (this. dataGridView2);
BazaInOzy. my_db. SaveBaseInOutputFile ();
}
private void panel3_Paint (object sender, PaintEventArgs e)
{
}
private void pictureBox1_Click (object sender, EventArgs e)
{
}
}
}
// Классы
using System;
using System. Collections. Generic;
using System. Linq;
using System. Text;
using System. Data;
using System. IO;
using System.runtime. Serialization. Formatters. Binary;
using System. Windows. Forms;
namespace PKP
{
public static class BazaInOzy
{
public static int TableNumber = 0; // номер текущей выбранной таблицы
public static string source_table = ""; // имя выбранной таблицы
public static NatBaza my_db = new NatBaza (5); // свойство, непосредственно // переменная для хранения базы данных в ОЗУ, инициализирована конструктором с // аргументом 5 (создается сразу пять таблиц)
} // статический класс. предназначен для хранения загруженной БД в ОЗУ.
[Serializable] // атрибут Serializable означает, что объект нижеописанного типа можно
// будет разбить на поток байтов и запихать в типизированный файл.
public class NatBaza // класс для хранения БД в памяти. Содержит методы (функции) для сохранения и загрузки БД на жёсткий диск
{
public NatTable [] tables; // свойство, массив таблиц NatTable в памяти
public NatBaza (int j) // конструктор класса, нужен для создания объекта (переменной) типа NatBaza
{
tables = new NatTable [8];
for (int i = 0; i < j; i++) { tables [i] = new NatTable ("", 5, i,
5); }
}
public void SaveBaseInOutputFile ()
{
FileStream f = new FileStream (@"Base. Nat", FileMode. Open, FileAccess. ReadWrite);
BinaryFormatter b = new BinaryFormatter ();
b. Serialize (f, this);
f. Close ();
} // метод сохраняет БД из памяти на жесткий диск
public void LoadBaseFromInputFile ()
{
FileStream f = new FileStream (@"Base. Nat", FileMode. Open, FileAccess. ReadWrite);
BinaryFormatter b = new BinaryFormatter ();
BazaInOzy. my_db = (NatBaza) b. Deserialize (f);
f. Close ();
} // метод загружает БД из файла в ОЗУ
public void create_shema ()
{
BazaInOzy. my_db = new NatBaza (8);
for (int i = 0; i < 8; i++)
{ BazaInOzy. my_db. tables [i] = new NatTable ("", 5, 0,10); }
for (int i = 0; i < 8; i++)
{
}
BazaInOzy. my_db. tables [0]. table_name = "Вид продукции 1 ";
BazaInOzy. my_db. tables [1]. table_name = " Вид продукции 2 ";
BazaInOzy. my_db. tables [2]. table_name = " Вид продукции 3";
BazaInOzy. my_db. tables [3]. table_name = " Вид продукции 4";
BazaInOzy. my_db. tables [4]. table_name = " Вид продукции 5";
BazaInOzy. my_db. tables [5]. table_name = " Вид продукции 6";
BazaInOzy. my_db. tables [6]. table_name = "Персонал";
BazaInOzy. my_db. tables [7]. table_name = "Новинки";
BazaInOzy. my_db. SaveBaseInOutputFile ();
} // Дополнительный метод создаёт схему БД
}
[Serializable]
public class NatTable // класс, аналог DataTable, предназначен для хранения таблиц в памяти, и привязки их к визуальным объектам (DataGridView)
{
public string table_name; // имя выбранной таблицы
public int table_number; // её номер
public string [] FieldName; // массив. содержит заголовки столбцов
public int rows_count; // количество строк
public int columns_count; // количество столбцов
public object [,] table; // массив обжектов (собственно таблица)
public NatTable (string table_name, int fields_count, int table_number, int row_count)
// конструктор создаёт объект NatTable
{
this. table_number = table_number;
this. table_name = table_name;
FieldName = new string [fields_count];
rows_count = row_count;
columns_count = fields_count;
this. table = new object [rows_count, columns_count];
}
public void SaveTableInOzy (DataGridView d)
{
table = new object [d. Rows. Count,d. Columns. Count];
FieldName = new string [d. Columns. Count];
this. rows_count = d. RowCount;
this. columns_count = d. ColumnCount;
for (int i = 0; i < d. Rows. Count; i++)
{
for (int j = 0; j < d. Columns. Count; j++)
{
this. table [i, j] = d. Rows [i]. Cells [j]. Value;
}
}
} // метод сохраняет результаты промежуточного изменения таблицы в ОЗУ
public void LoadTableFromOzy (DataGridView d) // метод. загружает таблицу в DataGridView
{
d. RowCount = BazaInOzy. my_db. tables [BazaInOzy. TableNumber]. rows_count;
d. ColumnCount = BazaInOzy. my_db. tables [BazaInOzy. TableNumber]. columns_count;
for (int i = 0; i < d. Rows. Count; i++)
{
for (int j = 0; j < d. Columns. Count; j++)
{
d. Rows [i]. Cells [j]. Value=this. table [i, j];
}
}
}