Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Носова_пояснительная_записка.docx
Скачиваний:
167
Добавлен:
16.07.2019
Размер:
635.86 Кб
Скачать
    1. Разработка алгоритмов

Для чтения базы данных, хранящейся в формате XML используется алгоритм конвертации базы в элемент DataSet, который после конвертации экспортируется в главную форму для дальнейшей работы. При завершении работы пользователя с экспортированной базой она преобразовывается обратно в XML с сохранением настроек таблиц и полей, а так же добавляя измененные пользователем в ходе работы строки.

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

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

  1. Разработка программы

    1. Выбор языка и среды программирования

Для написания данной программы был выбран язык программирования C# и среда разработки Visual Studio 2008. Выбор обусловлен тем, что данное приложение является курсовой работой по профильному предмету, основной задачей которого было изучение языка C#. Выбор среды обусловлен наличием в университетских аудиториях Visual Studio максимальной версии 2008 года.

    1. Развертывание приложения

Для нормального функционирования программы требуется:

    1. Наличие установленного пакета .NET Framework версии 3.5 или выше

    2. Процессор на уровне Pentium III или выше, если того требует операционная система

    3. ОЗУ 128 МБ или минимум, необходимый для работы операционной системы

    4. Видеокарта, поддерживающая разрешение 1024 на 768 или выше

    5. Клавиатура, мышь

    6. Наличие операционной системы Windows XP или выше

При низких параметрах оперативной памяти или мощности процессора возможно значительное замедление вычислений.

    1. Контрольный пример и описание результатов

Запустим приложение, содержащее изначальные тестовые данные.

Рис.5. Запуск приложения с начальными данными

Добавление нового банка

Рис.6. Добавление нового банка

Удаление добавленного банка

ВАЖНО! Удаление записей производится выделением удаляемой строки и нажатием кнопки Delete на клавиатуре.

Рис .7. Удаление нового банка

Авторизация пользователя

Рис. 8. Авторизация

Выводы

Благодаря использованию технологии XML и возможностей .NET стало возможным создание продукта, отвечающего требованиям задания

Заключение

В ходе программирования были разработаны стандартные методы работы с XML базой данных и реализованы в виде оболочки обычного Windows-приложения

Приложение 1 – UML диаграммы

Приложение 2 – Исходный код

Program.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;

namespace Курсовая_Баранов_

{

static class Program

{

/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

static void Main()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new Form1());

}

}

}

Form1.cs

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;

namespace Носова_курсовая

{

public partial class Form1 : Form

{

public bool b = false;

public Набор_данных НД;

DataGridViewCellCancelEventArgs row;

public Form1()

{

InitializeComponent();

НД = new Набор_данных(dataSet1);

НД.ПостроитьДеревоУзлов(treeView1);

банкиBindingSource.DataSource = НД.ДатьТаблицуБанков();

состоянияBindingSource.DataSource = НД.ДатьТаблицуСостояний();

DataTable table = НД.ДатьТаблицу();

банкоматыBindingSource.DataSource = table;

}

private void button1_Click(object sender, EventArgs e)

{

Close();

}

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)

{

DataTable table;

if (e.Node == treeView1.Nodes[0]) //режим редактирования и добавления

{

table = НД.ДатьТаблицу();

dataGridView1.ReadOnly = false;

dataGridView1.AllowUserToAddRows = true; //разрешить добавление строк

// Показать список (редактировать можно)

idбанкаDataGridViewTextBoxColumn.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox;

idсостоянияDataGridViewTextBoxColumn.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox;

}

else

{ // Только чтение

table = НД.ДатьОтобранныеБанкоматы(e.Node.Tag.ToString());

dataGridView1.ReadOnly = true;

dataGridView1.AllowUserToAddRows = false;

// Убрать список (редактировать нельзя)

idбанкаDataGridViewTextBoxColumn.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;

idсостоянияDataGridViewTextBoxColumn.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;

}

банкоматыBindingSource.DataSource = table;

}

private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)

{

DataGridView view = (DataGridView)sender;

view.Rows[e.RowIndex].ErrorText = "Неверно указаны данные в столбце :" + view.Columns[e.ColumnIndex].HeaderText;

e.ThrowException = false;

}

private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)

{

row = e;

}

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)

{

DataGridView view = (DataGridView)sender;

view.Rows[e.RowIndex].ErrorText = "";

view.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText = "";

}

private void toolStripButton2_Click(object sender, EventArgs e)

{

Close();

}

private void toolStripButton1_Click(object sender, EventArgs e)

{

Form2 f2 = new Form2(this);

f2.ShowDialog();

if (b == true)

{label1.Text = "Добро Пожаловать!";}

}

private void treeView1_MouseClick(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Right)

{

Form3 f3 = new Form3(НД);

f3.ShowDialog();

f3.Close();

НД.ПостроитьДеревоУзлов(treeView1);

}

}

}

}

Form2.cs

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;

namespace Носова_курсовая

{

public partial class Form2 : Form

{

Form1 f1;

public Набор_данных НД;

public Form2(Form1 f1)

{

НД = f1.НД;

this.f1 = f1;

InitializeComponent();

}

private void button2_Click(object sender, EventArgs e)

{

this.Close();

}

private void button1_Click(object sender, EventArgs e)

{

for (int i = 0; i < НД.Узнать_длину_пользователей(); i++)

{

if ((textBox1.Text == НД.Узнать_логин_пользователя(i)) && (textBox2.Text == НД.Узнать_пароль_пользователя(i))) { f1.b = true; this.Close();return; }

else { f1.b = false;}

}

}

}

}

Form3.cs

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;

namespace Носова_курсовая

{

public partial class Form3 : Form

{

Набор_данных НД;

public Form3(Набор_данных НД)

{

InitializeComponent();

this.НД = НД;

банкиBindingSource.DataSource = НД.ДатьТаблицуБанков();

состоянияBindingSource.DataSource = НД.ДатьТаблицуСостояний();

}

private void button1_Click(object sender, EventArgs e)

{

this.Close();

}

}

}

НаборДанных.cs

using System;

using System.IO;

using System.Data;

using System.Windows.Forms;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Носова_курсовая

{

public class Набор_данных

{

private readonly string fileName = Application.StartupPath + "\\Банкоматы.xml";

private DataSet1 ds;

// Конструктор

public Набор_данных(DataSet1 DataSet1)

{

ds = DataSet1;

///если файл был сохранен раньше читаем его

if (File.Exists(fileName))

{

//читаем

ds.ReadXml(fileName);

}

else

{

//или создаем новое хранилище

ds = НачЗапDS();

}

}

/// Инициализируем набор данных начальными значениями

public DataSet1 НачЗапDS()

{

// Банки

ds.Банки.AddБанкиRow("Мастербанк");

ds.Банки.AddБанкиRow("Сбербанк");

ds.Банки.AddБанкиRow("Юникредитбанк");

ds.Банки.AddБанкиRow("Ситибанк");

ds.Банки.AddБанкиRow("Альфабанк");

// Пользователи

ds.Пользователи.AddПользователиRow("admin", "admin", "Администратор");

ds.Пользователи.AddПользователиRow("user", "user", "Пользователь");

// Состояния

ds.Состояния.AddСостоянияRow("Отключен");

ds.Состояния.AddСостоянияRow("Включен");

ds.Состояния.AddСостоянияRow("Сломан");

//Банкоматы

ds.Банкоматы.AddБанкоматыRow(ds.Банки[0], ds.Состояния[0], 5000, "Тьмутаракань, д.9", "Рубли", true);

ds.Банкоматы.AddБанкоматыRow(ds.Банки[1], ds.Состояния[1], 35000, "Тимирязевская, д.5", "Доллары", true);

ds.Банкоматы.AddБанкоматыRow(ds.Банки[2], ds.Состояния[2], 0, "Дмитровское шоссе, д.1", "Евро", true);

ds.Банкоматы.AddБанкоматыRow(ds.Банки[3], ds.Состояния[1], 35000, "Простоквашино, д.8", "Фунты", true);

ds.Банкоматы.AddБанкоматыRow(ds.Банки[4], ds.Состояния[0], 5000, "Деревня Гадюкино, д.5", "Гривны", true);

return ds;

}

// Получить навигационные узлы

public void ПостроитьДеревоУзлов(TreeView treeView)

{

treeView.Nodes.Clear();

// Создать корневой узел

TreeNode node = new TreeNode("Все Банкоматы"); // узел.Text="Все банкоматы"

node.Tag = ""; //Будет использовано в качестве фильтра для отбора строк

treeView.Nodes.Add(node);

// Создать подчиненные узлы

string iD_Банки = ds.Банки.Id_банкаColumn.ColumnName; //имя поля

string iD_Состояния = ds.Состояния.Id_состоянияColumn.ColumnName; //имя поля

foreach (DataSet1.БанкиRow rowБанки in ds.Банки.Rows) // Перебираем назначения

{

node = new TreeNode(rowБанки.Название_банка);

node.Tag = String.Format("{0} = '{1}'", iD_Банки, rowБанки.Название_банка);

foreach (DataSet1.СостоянияRow rowсост in ds.Состояния.Rows) // Перебираем состояния

{

TreeNode дочернийУзел = new TreeNode(rowсост.Состояние.ToString());

дочернийУзел.Tag = String.Format("{0} = '{1}' AND {2} = '{3}'",

iD_Банки, rowБанки.Название_банка,

iD_Состояния, rowсост.Состояние);

node.Nodes.Add(дочернийУзел); // Добавить в узел Назначение дочерний узел ФормаВыпуска

}

treeView.Nodes.Add(node); // Добавить в список узел вместе с дочерними

}

treeView.SelectedNode = treeView.Nodes[0]; // Первый выделяем

}

/// Вернуть табличку с банками

public DataTable ДатьТаблицуБанков()

{

return ds.Банки;

}

/// Вернуть табличку с пользователями

public DataTable ДатьТаблицуПользователей()

{

return ds.Пользователи;

}

/// Вернуть табличку с состояниями

public DataTable ДатьТаблицуСостояний()

{

return ds.Состояния;

}

public int УзнатьID_банка(int bank) //поиск ID определенного банка

{

for (int i = 0; i < ds.Банкоматы.Rows.Count; i++)

{

if (ds.Банкоматы[i].Id_банка == bank)

{

return ds.Банкоматы[i].Id_банка;

}

}

return -1;}

public int УзнатьID_состояния(int sost) //поиск ID определенного состояния

{

for (int i = 0; i < ds.Банкоматы.Rows.Count; i++)

{

if (ds.Банкоматы[i].Id_состояния == sost)

{

return ds.Банкоматы[i].Id_состояния;

}

}

return -1;

}

public string Узнать_логин_пользователя(int p) //поиск ID определенного предмета

{

return ds.Пользователи[p].Логин_пользователя;

}

public string Узнать_пароль_пользователя(int p) //поиск ID определенного предмета

{

return ds.Пользователи[p].Пароль_пользователя;

}

public int Узнать_длину_пользователей()

{

return ds.Пользователи.Rows.Count;

}

// Вернуть Отфильтрованную табличку с банкоматами

// режим - только чтение

public DataTable ДатьОтобранныеБанкоматы(string filterExpression)

{

DataSet1.БанкоматыDataTable table = new DataSet1.БанкоматыDataTable();

DataRow[] row = ds.Банкоматы.Select(filterExpression); //Отобрать строки по фильтру

foreach (DataRow selectrow in row)

table.Rows.Add(selectrow.ItemArray);

return table;

}

// Вернуть всю таблицу

// режим изменения данных

public DataTable ДатьТаблицу()

{

return ds.Банкоматы;

}

// Сохраняем наш набор данных (схема не нужна, так как она есть в .XSD)

public void СохранитьDS()

{

ds.WriteXml(fileName);

}

}

}

15