Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы Java и C# технологии.doc
Скачиваний:
171
Добавлен:
01.03.2016
Размер:
3.04 Mб
Скачать
    1. Порядок выполнения работы

В данном порядке выполнения лабораторной работы будет разработано приложение, которое будет работать с данными с базы данных (отображать, добавлять удалять, редактировать данные). Доступ к базе будет осуществляться с применением технологии ADO.NET.В качестве СУБД был выбранPostgreSQL. Предметная область будет состоять из двух объектов: «Группа» и «Студент», которые состоят в отношении один ко многим.

  1. Установите PostgreSQL, если он у вас еще не установлен. Создайте в СУБДPostgreSQLбазу данныхuniver, создайте в базе таблицыGroupsиStudents. Запросы для создания таблиц приведены ниже:

--Таблицагрупп

CREATE TABLE Groups(

id bigserial NOT NULL,

groupname varchar(20),

curatorname varchar(20),

headmanname varchar(20),

PRIMARY KEY (id));

--Таблицастудентов

CREATE TABLE Students(

id bigserial NOT NULL,

firstname varchar(20),

lastname varchar(20),

sex varchar(1) NOT NULL CHECK (sex = 'М' or sex = 'Ж'),

age integer,

groupid bigint,

PRIMARY KEY (id),

FOREIGN KEY (groupid) REFERENCES Groups ON UPDATE CASCADE ON DELETE CASCADE);

  1. Создайте новое приложение WindowsForms.

  2. Добавьте в каталог с проектом библиотекудля работы с СУБДPostgreSQL. Данную библиотеку можно скачать по ссылкеhttp://www.postgresql.org/.В данном проекте был использован архив Npgsql2.0.10-bin-ms.net.zip. Были использованы библиотеки Npgsql.dll и Mono.Security.dll.

  3. Подключите библиотеку Npgsql.dll к проекту (нажмите правой кнопкой на «Ссылки» в дереве объектов, потом на «Добавить ссылку…», перейдите на закладку «Обзор», выберите необходимые файлы).

Рисунок 3.2 – Подключение библиотеки Npgsql.dllк проекту

  1. Приступим к созданию главной формы. На главной форме разметите компонент MenuStrip, добавьте к нему пункт меню«Источник данных», а к пункту «Источник данных» пункты «Подключение к базе» и «Отключение от базы», создайте обработчики нажатия на эти два пункта меню.

  2. Установите на форму компонент SplitConteinerдля того, чтобы разделить рабочую область формы на две части.

  3. Установите с левую и правую части компонент GoupBox. Установите у левогоGoupBoxсвойствоTextв значение «Группы», а у правого свойствоTextв значение – «Студенты», установите у обоихGoupBoxсвойствоDockв значениеFill.

  4. Разместите на левом и на правом GoupBoxкомпонентыDataGridView. Установите у них свойствоDockв значениеFill. ЛевыйDataGridViewбудет использоваться для отображения списка групп, а правый для отображения списка студентов в группе. Настройте каждый из DataGridView следующим образом: ReadOnly – True, MultiSelect – False, RowHeadersVisible – False, SelectionMode – FullRowSelect, AllowUserToAddRows - False.

  5. Добавьте два компонента ContextMenuStrip, свяжите одно контекстное меню с левым DataGridView, а другое с правым DataGridView через свойство ContextMenuStrip. Добавьте в каждом меню три пункта «Добавить», «Удалить», «Заменить», к каждому пункту меню добавьте обработчик на нажатие.

  6. Создайте три дополнительные формы. Одна будет использоваться для ввода настроек подключения, вторая - для добавления и изменения группы, третья – для добавления и изменения студента. Добавить новую форму можно нажав на проект правой кнопкой мыши, в контекстном меню выбрать «Добавить», «Создать элемент», в дереве выбрать «WindowsForms», выбрать в списке «ФормаWindowsForms».

  7. Приступим к реализации функций подключения к базе данных и отключения от базы данных. Откройте Form2в режиме конструктора. Добавьте пять компонентовTextBoxи компонент Button. Назовите компонентButton– «Подключиться». ПервыйTextBoxбудет использоваться для ввода адреса серверабаз данных, второй – для ввода порта, третий – для ввода имени базы данных, четвертый – для ввода имени пользователя, пятый – для ввода пароля. КомпонентButtonбудет использоваться для подключения к базе данных. Подпишите каждое поле ввода с использованием компонентаLabel. Результат проектирования формы для ввода настроек подключения к базе данных приведен на рисунке 3.3.

Рисунок 3.3 – Внешний вид формы ввода настроек подключения к базе данных

  1. Откройте Form2 с использованием редактораCSharp. Добавьте над конструктором формы поле:

private Form1 perent;

Это поле необходимо для доступа к родительской форме. Также добавьте метод по установлению значения этого поля:

public void setPerent(Form1 perent)

{

this.perent = perent;

}

  1. Добавьте обработчик нажатия на кнопку «Подключиться»:

//Присоединиться к базе

private void button1_Click(object sender, EventArgs e)

{

string server = textBox1.Text;

int port = Int32.Parse(textBox2.Text);

string database = textBox3.Text;

string user = textBox4.Text;

string passwd = textBox5.Text;

NpgsqlConnection connection =

perent.Connect(server, port, database, user, passwd);

perent.setConnection(connection);

perent.FillDataGridView1ByGroups();

this.Visible = false;

}

Метод Connect будет реализован в главной форме позже.

  1. Откройте главную форму Form1с использованием редактораCSharp.Добавьте над конструктором формы поля:

//Ссылканаподключение

private NpgsqlConnection connection = null;

//СсылканаDataSet

private DataSet dataSet = null;

//Ссылки на DataAdapter для группы и студента

private NpgsqlDataAdapter groupDataAdapter = null;

private NpgsqlDataAdapter studentDataAdapter = null;

//Ссылки на вспомогательные формы

private Form2 form2 = null;

private Form3 form3 = null;

private Form4 form4 = null;

Добавьте метод по установке значения поля connection:

public void setConnection(NpgsqlConnection connection)

{

this.connection = connection;

}

  1. Создайте методы для полученияDataSetи Form2:

//Создание DataSet

private DataSet getDataSet()

{

if (dataSet == null)

{

dataSet = new DataSet();

dataSet.Tables.Add("Groups");

dataSet.Tables.Add("Students");

}

return dataSet;

}

//Получить форму установления соединения

public Form2 getForm2()

{

if (form2 == null)

{

form2 = new Form2();

form2.setPerent(this);

}

return form2;

}

  1. Добавьте метод установления соединения с базой:

//Установить соединение с базой

public NpgsqlConnection Connect(string host, int port, string database,

string user, string parol)

{

NpgsqlConnectionStringBuilder stringBuilder =

new NpgsqlConnectionStringBuilder();

stringBuilder.Host = host;

stringBuilder.Port = port;

stringBuilder.UserName = user;

stringBuilder.Password = parol;

stringBuilder.Database = database;

stringBuilder.Timeout = 30;

NpgsqlConnection connection =

new NpgsqlConnection(stringBuilder.ConnectionString);

connection.Open();

return connection;

}

  1. Добавьте методы по заполнению dataGridView1 группами иdataGridView2 студентами:

//Заполнить DataGridView1 студентами

public void FillDataGridView1ByGroups()

{

getDataSet().Tables["Groups"].Clear();

groupDataAdapter = new NpgsqlDataAdapter(

"SELECT * FROM Groups", connection);

new NpgsqlCommandBuilder(groupDataAdapter);

groupDataAdapter.Fill(getDataSet(), "Groups");

dataGridView1.DataSource = getDataSet().Tables["Groups"];

}

//Заполнить DataGridView2 студентами заданной группы

public void FillDataGridView2ByStudents(string groupName)

{

getDataSet().Tables["Students"].Clear();

studentDataAdapter = new NpgsqlDataAdapter(

"SELECT Students.id, firstname, lastname, sex, age, groupid " +

"FROM Groups, Students " +

"WHERE Groups.id = Students.groupid AND groupname = '" +

groupName + "'", connection);

new NpgsqlCommandBuilder(studentDataAdapter);

studentDataAdapter.Fill(dataSet, "Students");

dataGridView2.DataSource = getDataSet().Tables["Students"];

}

  1. Добавьте обработчики нажатия на пункты главного меню «Подключение к базе» и «Отключиться от базы»:

//Обработчик нажатия на "Подключиться к базе данных"

private void подключениеКБазеToolStripMenuItem_Click(

object sender, EventArgs e)

{

getForm2().Visible = true;

}

//Обработчик нажатия на "Отключиться от базы данных"

private void отключитьсяОтБазыToolStripMenuItem_Click(

object sender, EventArgs e)

{

connection.Close();

}

Функции подключения и отключения от базы реализованы, теперь приступим к реализации функций добавления, удаления и редактирования группы.

  1. Откройте Form3 в режиме конструктора. Назовите форму «Группа», добавьте три компонентаTextBoxи два компонента Button. Первый компонент TextBoxбудет использоваться для ввода названия группы, второй – для ввода ФИО куратора группы, третий – для ввода ФИО старосты группы. Назовите одну кнопку «Добавить», а вторую – «Заменить». Подпишите поля ввода компонентамиLabel.Результат проектирования формы добавления и редактирования групп представлен на рисунке 3.4.

Рисунок 3.4 – Внешний вид формы добавления и редактирования студентов

  1. Откройте Form3 с использованием редактораCSharp. Добавьте над конструктором формы поля:

private Form1 perent = null;

private int row;

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

  1. Добавьте методы по установлению значений полей:

public void setPerent(Form1 perent)

{

this.perent = perent;

}

public void setRow(int row)

{

this.row = row;

}

  1. Добавьте методы для установления свойств компонентов формы:

public void setTextBox1Text(string text)

{

textBox1.Text = text;

}

public void setTextBox2Text(string text)

{

textBox2.Text = text;

}

public void setTextBox3Text(string text)

{

textBox3.Text = text;

}

public void setButton1Visible(bool value)

{

this.button1.Visible = value;

}

public void setButton2Visible(bool value)

{

this.button2.Visible = value;

}

  1. Добавьте обработчики нажатия на кнопки «Добавить» и «Заменить»:

//Добавить группу

private void button1_Click(object sender, EventArgs e)

{

perent.AddGroup(textBox1.Text, textBox2.Text, textBox3.Text);

perent.FillDataGridView1ByGroups();

this.Visible = false;

}

//Заменить группу

private void button2_Click(object sender, EventArgs e)

{

perent.UpdateGroup(row, textBox1.Text, textBox2.Text, textBox3.Text);

perent.FillDataGridView1ByGroups();

this.Visible = false;

}

Методы AddGroup и UpdateGroup будут реализованы позже в главной форме.

  1. Откройте Form1 (главную форму) с использованием редактораCSharp. Добавьте метод по созданиюForm3 (формы для добавления и редактирования групп):

//Получить форму добавления и замены группы

public Form3 getForm3()

{

if (form3 == null)

{

form3 = new Form3();

form3.setPerent(this);

}

return form3;

}

  1. Добавьте методы по добавлению и замене группы с использованием отсоединенных объектов:

//Добавить группу

public void AddGroup(string groupName,

string curatorName, string headmanName)

{

getDataSet().Tables["Groups"].Rows.Add(0, groupName,

curatorName, headmanName);

groupDataAdapter.Update(getDataSet(), "Groups");

}

//Заменить группу

public void UpdateGroup(int row, string groupName,

string curatorName, string headmanName)

{

getDataSet().Tables["Groups"].Rows[row]["groupname"] = groupName;

getDataSet().Tables["Groups"].Rows[row]["curatorname"] = curatorName;

getDataSet().Tables["Groups"].Rows[row]["headmanname"] = headmanName;

groupDataAdapter.Update(getDataSet(), "Groups");

}

  1. Добавьте обработчики нажатия на пункты «Добавить», «Удалить», «Заменить» контекстного меню для группы:

//Обработчик нажатия на "Добавить группу"

private void добавитьToolStripMenuItem_Click(object sender, EventArgs e)

{

getForm3().Visible = true;

getForm3().setButton1Visible(true);

getForm3().setButton2Visible(false);

getForm3().setTextBox1Text("");

getForm3().setTextBox2Text("");

getForm3().setTextBox3Text("");

}

//Нажатие на "Удалить группу"

private void удалитьToolStripMenuItem_Click(object sender, EventArgs e)

{

int selectedRow = dataGridView1.SelectedCells[0].RowIndex;

DialogResult dr = MessageBox.Show("Удалить группу?", "",

MessageBoxButtons.YesNo);

if (dr == DialogResult.Yes)

{

getDataSet().Tables["Groups"].Rows[selectedRow].Delete();

groupDataAdapter.Update(getDataSet(), "Groups");

getDataSet().Clear();

FillDataGridView1ByGroups();

}

}

//Нажатие на "Заменить группу"

private void зАменитьToolStripMenuItem_Click(object sender, EventArgs e)

{

int selectedRow = dataGridView1.SelectedCells[0].RowIndex;

string groupName = (string)getDataSet().Tables["Groups"]

.Rows[selectedRow].ItemArray[1];

string curatorName = (string)getDataSet().Tables["Groups"]

.Rows[selectedRow].ItemArray[2];

string headmanName = (string)getDataSet().Tables["Groups"]

.Rows[selectedRow].ItemArray[3];

getForm3().Visible = true;

getForm3().setButton1Visible(false);

getForm3().setButton2Visible(true);

getForm3().setTextBox1Text(groupName);

getForm3().setTextBox2Text(curatorName);

getForm3().setTextBox3Text(headmanName);

getForm3().setRow(selectedRow);

}

  1. Добавьте обработчик нажатия на строчку dataGridView1,чтобы вdataGridView2 отображался список заданной группы:

//Обработчик нажатия на строчку DataGridView1

private void dataGridView1_CellClick(object sender,

DataGridViewCellEventArgs e)

{

int selectedRow = dataGridView1.SelectedCells[0].RowIndex;

string key = (string)dataGridView1.Rows[selectedRow].Cells[1].Value;

FillDataGridView2ByStudents(key);

}

  1. Приступим к реализации функций добавления удаления и замены студентов. Откройте Form4 (форму добавления и редактирования студентов)с использованием конструктора форм. Добавьте 4 компонентаTextBoxи два компонента Button. Первый компонентTextBox, будет использоватьсядля ввода имени студента, второй – для ввода фамилии студента, третий – для ввода пола студента, четвертый - для ввода года рождения студента. Назовите одну кнопку «Добавить», а вторую «Заменить». Подпишите каждый компонентTextBoxс использование компонентаLabel. Результат проектирования формы добавления и замены студентов представлен на рисунке 3.5.

Рисунок 3.5 – Внешний вид формы добавления и замены студентов

  1. Откройте Form4с использованием редактораCSharp. Добавьте над конструктором формы поля:

private Form1 perent = null;

private string groupName;

private long groupId;

private int row;

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

  1. Добавьте методы по установлению вышеописанных полей:

public void setPerent(Form1 perent)

{

this.perent = perent;

}

public void setGroupName(string groupName)

{

this.groupName = groupName;

}

public void setGroupId(long groupId)

{

this.groupId = groupId;

}

public void setRow(int row)

{

this.row = row;

}

  1. Добавьте методы для установления свойств компонентов формы:

public void setTextBox1Text(string text)

{

textBox1.Text = text;

}

public void setTextBox2Text(string text)

{

textBox2.Text = text;

}

public void setTextBox3Text(string text)

{

textBox3.Text = text;

}

public void setTextBox4Text(string text)

{

textBox4.Text = text;

}

public void setButton1Visible(bool value)

{

this.button1.Visible = value;

}

public void setButton2Visible(bool value)

{

this.button2.Visible = value;

}

  1. Добавьте обработчики нажатия на кнопки «Добавить» и «Удалить»:

//Добавить студента

private void button1_Click(object sender, EventArgs e)

{

perent.AddStudent(textBox1.Text, textBox2.Text,

textBox3.Text, Int16.Parse(textBox4.Text), groupId);

perent.FillDataGridView2ByStudents(groupName);

this.Visible = false;

}

//Заменить студента

private void button2_Click(object sender, EventArgs e)

{

perent.UpdateStudent(row, textBox1.Text, textBox2.Text,

textBox3.Text, System.Convert.ToInt32(textBox4.Text));

perent.FillDataGridView2ByStudents(groupName);

this.Visible = false;

}

Методы AddStudent, UpdateStudent будут реализованы позже в главной форме.

  1. Откройте Form1 (главную форму) в режиме редактораCSharp. Добавьте метод для созданияForm4:

//Получить форму добавления и замены студента

public Form4 getForm4()

{

if (form4 == null)

{

form4 = new Form4();

form4.setPerent(this);

}

return form4;

}

  1. Добавьте методы для добавления и замены студента:

//Добавить студента

public void AddStudent(string firstName,

string secondName, string sex, int age, long groupId)

{

getDataSet().Tables["Students"]

.Rows.Add(0, firstName, secondName, sex, age, groupId);

studentDataAdapter.Update(getDataSet(), "Students");

}

//Заменить студента

public void UpdateStudent(int row, string firstName,

string secondName, string sex, int age)

{

getDataSet().Tables["Students"].Rows[row]["firstname"] = firstName;

getDataSet().Tables["Students"].Rows[row]["lastname"] = secondName;

getDataSet().Tables["Students"].Rows[row]["sex"] = sex;

getDataSet().Tables["Students"].Rows[row]["age"] = age;

studentDataAdapter.Update(getDataSet(), "Students");

}

  1. Добавьте обработчики нажатия на пункты «Добавить», «Удалить» и «Заменить» контекстного меню студента:

//Нажатие на "Добавить студента"

private void добавитьToolStripMenuItem1_Click(object sender, EventArgs e)

{

getForm4().Visible = true;

getForm4().setButton1Visible(true);

getForm4().setButton2Visible(false);

getForm4().setTextBox1Text("");

getForm4().setTextBox2Text("");

getForm4().setTextBox3Text("");

getForm4().setTextBox4Text("");

int selectedRow = dataGridView1.SelectedCells[0].RowIndex;

long groupId = (long)getDataSet().Tables["Groups"]

.Rows[selectedRow].ItemArray[0];

string groupName = (string)getDataSet().Tables["Groups"]

.Rows[selectedRow].ItemArray[1];

getForm4().setGroupName(groupName);

getForm4().setGroupId(groupId);

}

//Нажатие на "Удалить студента"

private void удалитьToolStripMenuItem1_Click(object sender, EventArgs e)

{

int selectedRow = dataGridView2.SelectedCells[0].RowIndex;

DialogResult dr = MessageBox.Show("Удалить студента?", "",

MessageBoxButtons.YesNo);

if (dr == DialogResult.Yes)

{

getDataSet().Tables["Students"].Rows[selectedRow].Delete();

studentDataAdapter.Update(getDataSet(), "Students");

string key = (string)dataGridView1

.Rows[selectedRow].Cells[1].Value;

FillDataGridView2ByStudents(key);

}

}

//Нажатие на "Заменить студента"

private void заменитьToolStripMenuItem1_Click(object sender, EventArgs e)

{

int selectedRow = dataGridView2.SelectedCells[0].RowIndex;

string firstName = (string)getDataSet().Tables["Students"]

.Rows[selectedRow].ItemArray[1];

string secondName = (string)getDataSet().Tables["Students"]

.Rows[selectedRow].ItemArray[2];

string sex = (string)getDataSet().Tables["Students"]

.Rows[selectedRow].ItemArray[3];

int age = (int)getDataSet().Tables["Students"]

.Rows[selectedRow].ItemArray[4];

string sAge = System.Convert.ToString(age);

getForm4().Visible = true;

getForm4().setButton1Visible(false);

getForm4().setButton2Visible(true);

getForm4().setTextBox1Text(firstName);

getForm4().setTextBox2Text(secondName);

getForm4().setTextBox3Text(sex);

getForm4().setTextBox4Text(sAge);

getForm4().setRow(selectedRow);

int selectedRow1 = dataGridView1.SelectedCells[0].RowIndex;

string groupName = (string)getDataSet().Tables["Groups"]

.Rows[selectedRow1].ItemArray[1];

getForm4().setGroupName(groupName);

}

Результат работы программы приведен на рисунке 3.6.

Рисунок 3.6 – Результат работы программы