Реализация базы данных приложения «Выбор ноутбука»
Подробное описание всех необходимых таблиц находится в главе 2, пункт 2. В данном пункте будет рассмотрена программная реализация и использование таблиц базы данных.
На рисунке 48 представлена схема DataSet (набор данных) приложения.
Рисунок 48. Схема DataSet
Теперь, рассмотрим все команды, с помощью которых данные таблицы подключаются к формам. Текст этих команд хранится в объекте SqlCommand, в свойстве CommandText.
К форме администратора таблица подключается следующим образом:
SELECT id, Parameters, Price, Notebook
FROM Notebook
Таблица «Bluetooth»:
SELECT Bluetooth
FROM Bluetooth
Таблица «Диагонали»:
SELECT Diagonal
FROM Diagonal
Таблица «Приводы»:
SELECT [disk]
FROM [Disk]
Таблица «HDD»:
SELECT HDD
FROM HDD
Таблица «Использование»:
SELECT using
FROM Using
Таблица «ОЗУ»:
SELECT Operativ_pam
FROM Operativ
Таблица «Операционная система»:
SELECT os
FROM os
Таблица «Цены»:
SELECT money
FROM Money
Таблица «Процессор»:
SELECT [proc]
FROM Processor
Таблица «Производитель»:
SELECT Firm
FROM Firm
Таблица результата особого поиска подключена следующим образом:
SELECT id, Notebook, Parameters, Price
FROM Notebook
Таблица результата поиска по назначению:
SELECT id, Notebook, Parameters, Price
FROM Notebook
Таблица результата поиска по характеристикам:
SELECT id, Notebook, Price, Parameters
FROM Notebook
В главе 2 пункте 3 так же была описана хранимая функция, которая позволяет сверить пароль с паролем, хранимым в таблице. Подключение этой функции происходит в форме авторизации администратора следующим образом:
У объекта SqlCommand выбирается значение свойства CommandType – Stored Procedure. Далее, в свойстве CommandText выбирается нужная хранимая функция, в данном случае это dbo.проверить_пароль. Выполнение функции осуществляется ее вызовом в коде формы с помощью команды sqlCommand1.ExecuteScalar().
ЗАКЛЮЧЕНИЕ
В результате проделанной работы была разработана информационная система «Выбор ноутбука».
Было выполнено предпроектное обследование организации, в которую планируется внедрить систему.
Разработан проект приложения «Выбор ноутбука»: схема данных, модель интерфейса и модель базы данных.
Далее было реализовано приложение с использованием Microsoft Visual Studio 2008 «Выбор ноутбука»:
Реализована база данных на SQL SERVER 2005;
Реализован интерфейс программы.
Приложение «Выбор ноутбука» может быть использовано в любом магазине, занимающемся реализацией компьютерной техники. По своей сути оно заменяет консультанта по работе с клиентами.
В дальнейшем возможно расширение функционала приложения, увеличение базы данных техники, добавление других разделов техники помимо ноутбуков, более детальное разграничение доступа пользователей.
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
1. «Википедия» свободная энциклопедия http://ru.wikipedia.org
2. Герберт Шилдт, ИД “Вильямс”, “Полный справочник по C#” , Москва 2004 г.
3. Уэйт, М. Язык С. Руководство для начинающих. / М. Уэйт, С. Прага, Д. Мартин. - М.: Мир, 1995. - 521с.: ил.
4. Лахатин, А.С. Языки программирования. Учеб. пособие / А.С. Лахатин, Л.Ю. Искакова. - Екатеринбург, 1998. - 548с.: ил.
5. «Microsoft Visio 2007 – инструмент ИТ-специалистов и бизнес-пользователей» Автор: Андрей Колесов. 15.12.2007.
ПРИЛОЖЕНИЕ
Приложение 1
ALTER FUNCTION [dbo].[проверить_пароль]
(@hpwd as char(50), @login char(20))
RETURNS bigint
AS
BEGIN
declare @n as bigint
declare @kod as bigint
set @n = (select count(kod) from Users where login=@login and hash_pwd=@hpwd)
if @n <> 1
begin
set @kod = -1
end
else
begin
set @kod = (select top 1 kod from Users where login=@login and hash_pwd=@hpwd order by kod asc)
end
RETURN @kod
END
Приложение 2
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Haracteristic fr1 = new Haracteristic();
fr1.Show();
}
private void button2_Click(object sender, EventArgs e)
{
Naznachen fr2 = new Naznachen();
fr2.Show();
}
private void button5_Click(object sender, EventArgs e)
{
Opisanie fr3 = new Opisanie();
fr3.Show();
}
private void button4_Click(object sender, EventArgs e)
{
//try
//{
// Process SysInfo = new Process();
// SysInfo.StartInfo.ErrorDialog = true;
// SysInfo.StartInfo.FileName = "help.chm";
// SysInfo.Start();
//}
//catch (Exception ex)
//{
// MessageBox.Show(ex.Message);
//}
Help.ShowHelp(this, "Help.chm");
}
private void label2_Click(object sender, EventArgs e)
{
}
private void button3_Click(object sender, EventArgs e)
{
Password fr4 = new Password();
fr4.Show();
}
private void button6_Click(object sender, EventArgs e)
{
Osobiy frfr = new Osobiy();
frfr.Show();
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
Приложение 3
public partial class Haracteristic : Form
{
public Haracteristic()
{
InitializeComponent();
}
private void label1_Click(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
Proizvodit fr_pr = new Proizvodit();
if (fr_pr.ShowDialog() != DialogResult.OK)
{
textBox3.Text = "";
return;
}
else
{
textBox3.Text = fr_pr.firma;
}
}
private void button4_Click(object sender, EventArgs e)
{
Proc fr_proc = new Proc();
if (fr_proc.ShowDialog() != DialogResult.OK)
{
textBox5.Text = "";
return;
}
else
{
textBox5.Text = fr_proc.proc;
}
}
private void button5_Click(object sender, EventArgs e)
{
Operativ fr_ozy = new Operativ();
if (fr_ozy.ShowDialog() != DialogResult.OK)
{
textBox6.Text = "";
return;
}
else
{
textBox6.Text = fr_ozy.ozy;
}
}
private void button6_Click(object sender, EventArgs e)
{
hdd fr_hdd = new hdd();
if (fr_hdd.ShowDialog() != DialogResult.OK)
{
textBox7.Text = "";
return;
}
else
{
textBox7.Text = fr_hdd.hddisk;
}
}
private void button7_Click(object sender, EventArgs e)
{
Disk fr_disk = new Disk();
if (fr_disk.ShowDialog() != DialogResult.OK)
{
textBox8.Text = "";
return;
}
else
{
textBox8.Text = fr_disk.disk_tip;
}
}
private void button13_Click(object sender, EventArgs e)
{
if (textBox3.Text == "" && textBox5.Text == "" && textBox6.Text == "" && textBox7.Text == "" && textBox8.Text == "")
{
MessageBox.Show("Не выбраны параметры для поиска", "Ошибка");
return;
}
else
{
string f = "";
if (textBox3.Text != "")
f += "(Parameters like '%" + textBox3.Text + "%') And ";
if (textBox5.Text != "")
f += "(Parameters like '%" + textBox5.Text + "%') And ";
if (textBox6.Text != "")
f += "(Parameters like '%" + textBox6.Text + "%') And ";
if (textBox7.Text != "")
f += "(Parameters like '%" + textBox7.Text + "%') And ";
if (textBox8.Text != "")
f += "(Parameters like '%" + textBox8.Text + "%') And ";
f = " \nWHERE " + f.Remove(f.Length - 5);
BindingSource bs = new BindingSource();
sqlCommand1.CommandText = sql + f;
sqlConnection1.Open();
SqlDataReader dr = sqlCommand1.ExecuteReader();
if (dr.HasRows)
bs.DataSource = dr;
dr.Close();
sqlConnection1.Close();
dataGridView1.AutoGenerateColumns = false;
dataGridView1.DataSource = bs;
}
}
string sql;
private void Haracteristic_Load(object sender, EventArgs e)
{
sql = @"SELECT id, Notebook, Price, Parameters
FROM Notebook";
}
}
Приложение 4
public partial class Naznachen : Form
{
public Naznachen()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Price fr_cena = new Price();
if (fr_cena.ShowDialog() != DialogResult.OK)
{
textBox2.Text = "";
return;
}
else
{
textBox2.Text = fr_cena.diapozon;
}
}
private void button2_Click(object sender, EventArgs e)
{
Ispolz fr_isp = new Ispolz();
if (fr_isp.ShowDialog() != DialogResult.OK)
{
textBox3.Text = "";
return;
}
else
{
textBox3.Text = fr_isp.isp;
}
}
private void button8_Click(object sender, EventArgs e)
{
Diagonal fr_diag = new Diagonal();
if (fr_diag.ShowDialog() != DialogResult.OK)
{
textBox16.Text = "";
return;
}
else
{
textBox16.Text = fr_diag.diag;
}
}
private void button11_Click(object sender, EventArgs e)
{
OS fr_os = new OS();
if (fr_os.ShowDialog() != DialogResult.OK)
{
textBox22.Text = "";
return;
}
else
{
textBox22.Text = fr_os.op_sys;
}
}
private void button10_Click(object sender, EventArgs e)
{
Bluetooth fr_bl = new Bluetooth();
if (fr_bl.ShowDialog() != DialogResult.OK)
{
textBox20.Text = "";
return;
}
else
{
textBox20.Text = fr_bl.bl_podkl;
}
}
private void button13_Click(object sender, EventArgs e)
{
if (textBox2.Text == "" && textBox3.Text == "" && textBox16.Text == "" && textBox22.Text == "" && textBox20.Text == "")
{
MessageBox.Show("Не выбраны параметры для поиска", "Ошибка");
return;
}
else
{
string f = "";
if (textBox2.Text != "")
f += "(Parameters like '%" + textBox2.Text + "%') And ";
if (textBox3.Text != "")
f += "(Parameters like '%" + textBox3.Text + "%') And ";
if (textBox16.Text != "")
f += "(Parameters like '%" + textBox16.Text + "%') And ";
if (textBox22.Text != "")
f += "(Parameters like '%" + textBox22.Text + "%') And ";
if (textBox20.Text != "")
f += "(Parameters like '%" + textBox20.Text + "%') And ";
f = " \nWHERE " + f.Remove(f.Length - 5);
BindingSource bs = new BindingSource();
sqlCommand1.CommandText = sql + f;
sqlConnection1.Open();
SqlDataReader dr = sqlCommand1.ExecuteReader();
if (dr.HasRows)
bs.DataSource = dr;
dr.Close();
sqlConnection1.Close();
dataGridView1.AutoGenerateColumns = false;
dataGridView1.DataSource = bs;
}
}
string sql;
private void Naznachen_Load(object sender, EventArgs e)
{
sql = @"SELECT id, Notebook, Parameters, Price
FROM Notebook";
}
}
Приложение 5
public partial class Password : Form
{
public Password()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string login1 = this.textBox1.Text;
string pwd = this.textBox2.Text;
sqlConnection1.Open();
sqlCommand1.Parameters["@login"].Value = login1;
sqlCommand1.Parameters["@hpwd"].Value = pwd;
sqlCommand1.ExecuteScalar();
this.sqlCommand1.Parameters["@RETURN_VALUE"].Value;
System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] pwdb = Encoding.Unicode.GetBytes(this.textBox1.Text);
// Преобразование строки b64 в массив байт
//Convert.FromBase64String(
byte[] hashb = md5.ComputeHash(pwdb);
string b64hash = Convert.ToBase64String(hashb);
this.textBox2.Text = b64hash;
int n = b64hash.Length;
//MessageBox.Show(string.Format("n={0}, lenHash={1}", n, hashb.Length));
//if (textBox2.Text == "GaKFQUS2Oo92F6byJQGbEg==")
//{
// Close();
// Admin fr1 = new Admin();
// fr1.Show();
// //newMDIChild.MdiParent = Form1.ActiveForm;
// //newMDIChild.Show();
//}
//else
//{
// textBox2.Text = "";
// MessageBox.Show("Введен неверный пароль", "Ошибка");
//}
}
private void Password_Load(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void label1_Click(object sender, EventArgs e)
{
}
}
Приложение 6
public partial class Osobiy : Form
{
public Osobiy()
{
InitializeComponent();
}
string sql;
protected internal string vop;
private void Osobiy_Load(object sender, EventArgs e)
{
// TODO: данная строка кода позволяет загрузить данные в таблицу "iisDataSet5.Vopros". При необходимости она может быть перемещена или удалена.
this.voprosTableAdapter.Fill(this.iisDataSet5.Vopros);
sql = @"SELECT id, Notebook, Parameters, Price
FROM Notebook";
textBox1.Text = dataGridView1.Rows[0].Cells[1].Value.ToString();
textBox2.Text = dataGridView1.Rows[1].Cells[1].Value.ToString();
textBox3.Text = dataGridView1.Rows[2].Cells[1].Value.ToString();
textBox4.Text = dataGridView1.Rows[3].Cells[1].Value.ToString();
textBox5.Text = dataGridView1.Rows[4].Cells[1].Value.ToString();
if (textBox3.Text == "")
{
textBox3.Visible = false;
button5.Visible = false;
button6.Visible = false;
}
else
{
textBox3.Visible = true;
button5.Visible = true;
button6.Visible = true;
}
if (textBox4.Text == "")
{
textBox4.Visible = false;
button7.Visible = false;
button8.Visible = false;
}
else
{
textBox4.Visible = true;
button7.Visible = true;
button8.Visible = true;
}
if (textBox5.Text == "")
{
textBox5.Visible = false;
button9.Visible = false;
button10.Visible = false;
}
else
{
textBox5.Visible = true;
button9.Visible = true;
button10.Visible = true;
}
//textBox6.Visible = false;
//textBox7.Visible = false;
//textBox8.Visible = false;
//textBox9.Visible = false;
//textBox10.Visible = false;
//dataGridView1.Visible = false;
//textBox13.Visible = false;
//button13.Visible = false;
//button14.Visible = false;
//button15.Visible = false;
}
private void button1_Click(object sender, EventArgs e)
{
textBox6.Visible = true;
textBox6.Text = "Пульт_ДУ";
}
private void button2_Click(object sender, EventArgs e)
{
textBox6.Visible = true;
textBox6.Text = "Без_пульта";
}
private void button3_Click(object sender, EventArgs e)
{
textBox7.Visible = true;
textBox7.Text = "Сканер_отпечатка";
}
private void button4_Click(object sender, EventArgs e)
{
textBox7.Visible = true;
textBox7.Text = "Без_сканера_отпечатка";
}
private void button5_Click(object sender, EventArgs e)
{
textBox8.Visible = true;
textBox8.Text = "Опция1";
}
private void button6_Click(object sender, EventArgs e)
{
textBox8.Visible = true;
textBox8.Text = "Без_опции1";
}
private void button7_Click(object sender, EventArgs e)
{
textBox9.Visible = true;
textBox9.Text = "Опция2";
}
private void button8_Click(object sender, EventArgs e)
{
textBox9.Visible = true;
textBox9.Text = "Без_опции2";
}
private void button9_Click(object sender, EventArgs e)
{
textBox10.Visible = true;
textBox10.Text = "Опция3";
}
private void button10_Click(object sender, EventArgs e)
{
textBox10.Visible = true;
textBox10.Text = "Без_опции3";
}
private void button11_Click(object sender, EventArgs e)
{
if (textBox10.Text == "" && textBox6.Text == "" && textBox7.Text == "" && textBox8.Text == "" && textBox9.Text == "")
{
MessageBox.Show("Не выбраны параметры для поиска", "Ошибка");
return;
}
else
{
string f = "";
if (textBox6.Text != "")
f += "(Parameters like '%" + textBox6.Text + "%') And ";
if (textBox7.Text != "")
f += "(Parameters like '%" + textBox7.Text + "%') And ";
if (textBox8.Text != "")
f += "(Parameters like '%" + textBox8.Text + "%') And ";
if (textBox9.Text != "")
f += "(Parameters like '%" + textBox9.Text + "%') And ";
if (textBox10.Text != "")
f += "(Parameters like '%" + textBox10.Text + "%') And ";
f = " \nWHERE " + f.Remove(f.Length - 5);
BindingSource bs = new BindingSource();
sqlCommand1.CommandText = sql + f;
sqlConnection1.Open();
SqlDataReader dr = sqlCommand1.ExecuteReader();
if (dr.HasRows)
bs.DataSource = dr;
dr.Close();
sqlConnection1.Close();
dataGridView2.AutoGenerateColumns = false;
dataGridView2.DataSource = bs;
}
}
private void button12_Click(object sender, EventArgs e)
{
if (textBox11.Text == "admin")
{
dataGridView1.Visible = true;
textBox13.Visible = true;
button13.Visible = true;
button14.Visible = true;
button15.Visible = true;
Osobiy.ActiveForm.Height = 410;
}
else
{
MessageBox.Show("Введен неверный пароль", "Ошибка");
}
textBox11.Text = "";
}
private void dataGridView1_Click(object sender, EventArgs e)
{
textBox13.Text = (string)dataGridView1["voprDataGridViewTextBoxColumn", dataGridView1.CurrentRow.Index].Value;
}
private void button13_Click(object sender, EventArgs e)
{
System.Data.SqlClient.SqlConnection sqlConnection1 =
new System.Data.SqlClient.SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Ксения\\Универ\\4 КУРС\\ИИС\\ЭКСПЕРТКА\\ПРОЕКТ\\WindowsFormsApplication1\\WindowsFormsApplication1\\iis.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = "INSERT Vopros (Id, vopr) VALUES" +
"(@Id, @vopr)";
cmd.Connection = sqlConnection1;
cmd.Parameters.AddWithValue("@Id", 3);
cmd.Parameters.AddWithValue("@vopr", textBox13.Text);
sqlConnection1.Open();
cmd.ExecuteNonQuery();
sqlConnection1.Close();
MessageBox.Show("Вопрос добален. Данные отобразятся при следующем входе в базу данных.");
}
private void button14_Click(object sender, EventArgs e)
{
if (dataGridView1.CurrentRow == null)
{
MessageBox.Show("Строка для удаления не выбрана");
return;
}
int id = (int)dataGridView1["idDataGridViewTextBoxColumn", dataGridView1.CurrentRow.Index].Value;
if (MessageBox.Show("Вы действительно хотите удалить вопрос " + id + "?", "Удаление сведений",
MessageBoxButtons.OKCancel) == DialogResult.Cancel)
return;
else
{
delCommand.Parameters["@Id"].Value = id;
delCommand.ExecuteNonQuery();
MessageBox.Show("База данных обновлена. Данные отобразятся при следующем входе в базу данных.");
}
}
private void button15_Click(object sender, EventArgs e)
{
button13.PerformClick();
}
}