Запустим приложение, содержащее изначальные тестовые данные.
Рис.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Курсовая_Баранов_
{
staticclassProgram
{
///<summary>
/// The main entry point for the application.
///</summary>
[STAThread]
staticvoid Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(newForm1());
}
}
}
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Носова_курсовая
{
publicpartialclassForm1: Form
{
publicbool b = false;
publicНабор_данныхНД;
DataGridViewCellCancelEventArgs row;
public Form1()
{
InitializeComponent();
НД = newНабор_данных(dataSet1);
НД.ПостроитьДеревоУзлов(treeView1);
банкиBindingSource.DataSource = НД.ДатьТаблицуБанков();
состоянияBindingSource.DataSource = НД.ДатьТаблицуСостояний();
DataTable table = НД.ДатьТаблицу();
банкоматыBindingSource.DataSource = table;
}
privatevoid button1_Click(object sender, EventArgs e)
{
Close();
}
privatevoid 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;
}
privatevoid dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
DataGridView view = (DataGridView)sender;
view.Rows[e.RowIndex].ErrorText = "Неверноуказаныданныевстолбце:" + view.Columns[e.ColumnIndex].HeaderText;
e.ThrowException = false;
}
privatevoid dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
row = e;
}
privatevoid dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
DataGridView view = (DataGridView)sender;
view.Rows[e.RowIndex].ErrorText = "";
view.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText = "";
}
privatevoid toolStripButton2_Click(object sender, EventArgs e)
{
Close();
}
privatevoid toolStripButton1_Click(object sender, EventArgs e)
{
Form2 f2 = newForm2(this);
f2.ShowDialog();
if (b == true)
{label1.Text = "ДоброПожаловать!";}
}
privatevoid treeView1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
Form3 f3 = newForm3(НД);
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Носова_курсовая
{
publicpartialclassForm2: Form
{
Form1 f1;
publicНабор_данныхНД;
public Form2(Form1 f1)
{
НД = f1.НД;
this.f1 = f1;
InitializeComponent();
}
privatevoid button2_Click(object sender, EventArgs e)
{
this.Close();
}
privatevoid 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Носова_курсовая
{
publicpartialclassForm3: Form
{
Набор_данных НД;
public Form3(Набор_данных НД)
{
InitializeComponent();
this.НД = НД;
банкиBindingSource.DataSource = НД.ДатьТаблицуБанков();
состоянияBindingSource.DataSource = НД.ДатьТаблицуСостояний();
}
privatevoid 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Носова_курсовая
{
publicclassНабор_данных
{
privatereadonlystring fileName = Application.StartupPath + "\\Банкоматы.xml";
privateDataSet1 ds;
// Конструктор
publicНабор_данных(DataSet1 DataSet1)
{
ds = DataSet1;
///если файл был сохранен раньше читаем его
if (File.Exists(fileName))
{
//читаем
ds.ReadXml(fileName);
}
else
{
//или создаем новое хранилище
ds = НачЗапDS();
}
}
/// Инициализируем набор данных начальными значениями
publicDataSet1 НачЗап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;
}
// Получить навигационные узлы
publicvoid ПостроитьДеревоУзлов(TreeView treeView)
{
treeView.Nodes.Clear();
// Создать корневой узел
TreeNode node = newTreeNode("Все Банкоматы"); // узел.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 = newTreeNode(rowБанки.Название_банка);
node.Tag = String.Format("{0} = '{1}'", iD_Банки, rowБанки.Название_банка);
foreach (DataSet1.СостоянияRow rowсост in ds.Состояния.Rows) // Перебираем состояния
{
TreeNode дочернийУзел = newTreeNode(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]; // Первыйвыделяем
}
/// Вернуть табличку с банками
publicDataTable ДатьТаблицуБанков()
{
return ds.Банки;
}
/// Вернуть табличку с пользователями
publicDataTable ДатьТаблицуПользователей()
{
return ds.Пользователи;
}
/// Вернуть табличку с состояниями
publicDataTable ДатьТаблицуСостояний()
{
return ds.Состояния;
}
publicint УзнатьID_банка(int bank) //поиск ID определенного банка
{
for (int i = 0; i < ds.Банкоматы.Rows.Count; i++)
{
if (ds.Банкоматы[i].Id_банка == bank)
{
return ds.Банкоматы[i].Id_банка;
}
}
return -1;}
publicint УзнатьID_состояния(int sost) //поиск ID определенного состояния
{
for (int i = 0; i < ds.Банкоматы.Rows.Count; i++)
{
if (ds.Банкоматы[i].Id_состояния == sost)
{
return ds.Банкоматы[i].Id_состояния;
}
}
return -1;
}
publicstring Узнать_логин_пользователя(int p) //поиск ID определенного предмета
{
return ds.Пользователи[p].Логин_пользователя;
}
publicstring Узнать_пароль_пользователя(int p) //поиск ID определенного предмета
{
return ds.Пользователи[p].Пароль_пользователя;
}
publicint Узнать_длину_пользователей()
{
return ds.Пользователи.Rows.Count;
}
// Вернуть Отфильтрованную табличку с банкоматами
// режим - только чтение
publicDataTableДатьОтобранныеБанкоматы(string filterExpression)
{
DataSet1.БанкоматыDataTable table = newDataSet1.БанкоматыDataTable();
DataRow[] row = ds.Банкоматы.Select(filterExpression); //Отобратьстрокипофильтру
foreach (DataRow selectrow in row)
table.Rows.Add(selectrow.ItemArray);
return table;
}
// Вернуть всю таблицу
// режим изменения данных
publicDataTableДатьТаблицу()
{
return ds.Банкоматы;
}
// Сохраняем наш набор данных (схема не нужна, так как она есть в.XSD)
publicvoidСохранитьDS()
{
ds.WriteXml(fileName);
}
}
}