- •Оглавление
- •1 Анализ проблем предприятия
- •2 Постановка проблемы
- •3 Анализ способов решения проблемы
- •3.1 Выбор формы представления данных
- •3.2 Выбор субд
- •3.3 Выбор языка программирования
- •4 Реализация решения
- •4.1 Проектирование бд
- •4.1.1 Концептуальное проектирование
- •4.1.2 Логическое проектирование
- •4.1.3 Физическое проектирование
- •4.2 Создание пользовательского интерфейса
- •Приложение а
- •Приложение б
- •Приложение в
- •Приложение г
Приложение в
Код формы Register.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApplication2
{
public partial class Register : Form
{
public Register()
{
InitializeComponent();
this.ActiveControl = this.textBox1;
this.AcceptButton = this.button1;
}
private void button1_Click(object sender, EventArgs e)
{
string connectionstring = Properties.Settings.Default.conSt;
Datas dataform = new Datas();
if (connectionstring == "" || !File.Exists(Properties.Settings.Default.DbFileName))
{
dataform.chooseFile();
return;
}
string login = textBox1.Text;
string password = textBox2.Text;
OleDbConnection conn = new OleDbConnection(connectionstring);
conn.Open();
OleDbCommand comm = new OleDbCommand("SELECT COUNT(*) FROM `Users` WHERE Login = @login and Password = @password", conn);
comm.Parameters.Add("@login", OleDbType.Char).Value = login;
comm.Parameters.Add("@password", OleDbType.Char).Value = password;
if ((int)(comm.ExecuteScalar()) == 1)
{
MessageBox.Show("Пользователь существует", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
//Проверка заполненности формы регистрации
if (textBox1.Text == String.Empty)
{
MessageBox.Show("Не заполнено поле Логин", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
else if (textBox2.Text == String.Empty)
{
MessageBox.Show("Не заполнено поле Пароль", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
//Заполнение таблицы Users
comm = new OleDbCommand("INSERT INTO `users` VALUES(@1, @2, @3); ", conn);
comm.Parameters.Add("@1", OleDbType.Char).Value = login;
comm.Parameters.Add("@2", OleDbType.Char).Value = password;
comm.Parameters.Add("@3", OleDbType.Boolean).Value = "false";
comm.ExecuteNonQuery();
//Переход к окну LoginForm
this.Hide();
LoginForm loginform = new LoginForm();
loginform.Show();
}
private void Register_FormClosed(object sender, FormClosedEventArgs e)
{
Application.OpenForms[0].Show();
}
}
}
Приложение г
Код формы Datas.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
using System.IO;
namespace WindowsFormsApplication2
{
public partial class Datas : Form
{
string zapros = null;
public Datas()
{
InitializeComponent();
}
private OleDbConnection conn;
private OleDbCommand comm;
public string connectionstring;
public void connecting()
{
connectionstring = Properties.Settings.Default.conSt;
if (connectionstring == "" || !File.Exists(Properties.Settings.Default.DbFileName))
{
chooseFile();
}
conn = new OleDbConnection(connectionstring);
comm = new OleDbCommand();
}
public void DataTable_Load(object sender, EventArgs e)
{
connecting();
// TODO: данная строка кода позволяет загрузить данные в таблицу "pOCHTADataSet.Class". При необходимости она может быть перемещена или удалена.
// this.classTableAdapter.Fill(this.pOCHTADataSet.Class);
conn.Open();
//Получение списка таблиц БД в combobox
DataTable tbls = conn.GetSchema("Tables", new string[] { null, null, null, "TABLE" });
foreach (DataRow row in tbls.Rows)
{
string TableName = row["TABLE_NAME"].ToString();
comboBox1.Items.Add(TableName);
}
conn.Close();
//Выделение строки
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView1.DefaultCellStyle.SelectionBackColor = Color.Blue;
}
//ОТОБРАЖЕНИЕ ВСЕЙ ТАБЛИЦЫ
public void LoadFullTable_Click(object sender, EventArgs e)
{
ClearDGV();
connecting();
comm.Connection = conn;
conn.Open();
zapros = @"SELECT Pochtamt.[Индекс], Pochtamt.[Наименование почтамта], OPS.[Наименование ОПС], OPS.[Индекс ОПС], OPS.[ЕАС], ConnectType.[Вид соединения], TypeOPS.[Наименование типа ОПС], Class.[Класс ОПС], Address.Район, Address.[Населённый пункт], Address.Улица, Address.Дом, OPS.Телефон, InternetCanal.ТелефонИнтернет, TypeCanal.[Наименование типа канала], Speed.Скорость, Operator.[Название оператора], InternetCanal.[IP-адрес], OPS.[Количество окон] FROM ((((Operator INNER JOIN (((TypeCanal INNER JOIN InternetCanal ON TypeCanal.idTypeCanal = InternetCanal.[Тип канала]) INNER JOIN (TypeOPS INNER JOIN ((PassportOPS INNER JOIN Pochtamt ON PassportOPS.Почтамт = Pochtamt.idPochtamt) INNER JOIN OPS ON PassportOPS.ОПС = OPS.idOPS) ON TypeOPS.idTypeOPS = OPS.[Тип ОПС]) ON InternetCanal.idInternetCanal = PassportOPS.Интернет) INNER JOIN Speed ON InternetCanal.Скорость = Speed.idSpeed) ON Operator.idOperator = InternetCanal.Оператор) INNER JOIN ConnectType ON InternetCanal.[Вид соединения] = ConnectType.idConnectType) INNER JOIN Class ON OPS.Класс = Class.idClass) INNER JOIN Address ON OPS.Адрес = Address.idAddress)";
DataTable tble = getTable(zapros);
dataGridView1.DataSource = tble;
numRows();
conn.Open();
//количество строк и столбцов
dataGridView1.ReadOnly = true;
conn.Close();
}
//Нумерация строк в таблице
public void numRows()
{
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
dataGridView1.Rows[i].HeaderCell = new DataGridViewRowHeaderCell();
dataGridView1.Rows[i].HeaderCell.Value = (i + 1) + " ";
}
}
//выборка данных для колонки с выпадающим списком
public DataGridViewComboBoxColumn createCBColumn(DataTable source, string dMember, string vMember)
{
//Создание колонки
DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn();
//Назначем источник данных
column.DataSource = source;
//Отображаемое значение
column.ValueMember = dMember;
//Значение
column.DisplayMember = vMember;
column.MaxDropDownItems = 100;
return column;
}
//Метод для получения таблицы
public int RowC = 0;
public int ColumnC = 0;
public DataTable getTable(string zapros)
{
connecting();
comm.Connection = conn;
comm.CommandText = zapros;
conn.Open();
//создаем таблицу
DataTable tble = new DataTable();
OleDbDataReader reader = comm.ExecuteReader();
for (int i = 0; i < reader.FieldCount; i++) //fieldcount количество столбцов
{
tble.Columns.Add(reader.GetName(i)); //getname получение имени столбца columns.add добавление столбца
}
object[] newRow; //массив для хранения строк из результата запроса
ColumnC = reader.FieldCount;
RowC = 0;
while (reader.Read())
{
RowC++;
newRow = new object[reader.FieldCount];
for (int i = 0; i < reader.FieldCount; i++)
{
newRow[i] = reader.GetValue(i);
}
tble.Rows.Add(newRow);
}
numRows();
reader.Dispose();
conn.Close();
return tble;
}
public void button3_Click(object sender, EventArgs e)
}
connecting();
conn.Open();
ClearDGV();
dataGridView1.ReadOnly = true;
zapros = @"SELECT " + comboBox1.SelectedItem + @".* FROM " + comboBox1.SelectedItem;
OleDbDataAdapter dbAdapter1 = new OleDbDataAdapter(zapros, conn);
DataTable dataTable = new DataTable();
dbAdapter1.Fill(dataTable);
dataGridView1.DataSource = dataTable;
conn.Close();
}
public void UpdateBtn_Click(object sender, EventArgs e)
{
DataSet dataSett = new DataSet();
try
{
// dataSett.AcceptChanges();
// this.table1TableAdapter.Update(this.database2DataSet1.Table1);
}
catch
{
MessageBox.Show("lololo");
}
}
//Действие при закрытии формы
private void Datas_FormClosed(object sender, FormClosedEventArgs e)
{
Form loginform = Application.OpenForms[0];
loginform.Show();
}
//МЕНЮ ToolStripMenu
private void выходToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
Form loginform = Application.OpenForms[0];
loginform.Close();
}
private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show("Разработчик: Крыжевич Павел (c) 2017", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void вернутьсяКАвторизацииToolStripMenuItem_Click(object sender, EventArgs e)
{
Form loginform = Application.OpenForms[0];
loginform.Show();
this.Close();
}
private void экспортТаблицыВExcelToolStripMenuItem_Click(object sender, EventArgs e)
{
saveFileDialog1.InitialDirectory = "C:\\tmp";
saveFileDialog1.Filter = "All files (*.*)|*.*|Microsoft Office Excel *.xlsx|*.xlsx";
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.AddExtension = true;
saveFileDialog1.ShowDialog();
}
//Проверка возможности редактирования таблицы
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked == true)
{
this.dataGridView1.ReadOnly = false;
}
else
{
this.dataGridView1.ReadOnly = true;
}
}
//СОРТИРОВКА
static bool IsNum(string s)
{
foreach (char c in s)
{
if (!Char.IsDigit(c)) return false;
}
return true;
}
public void Sort()
{
string TableColumnName = null;
string SortTextis = null;
if (IsNum(SortText.Text) == true)
{
SortTextis = SortText.Text;
}
else
{
SortTextis = "'" + SortText.Text + "'";
}
connecting();
conn.Open();
// Выбор таблицы из Combobox
int SortIndex = 1000;
SortIndex = SortBox.SelectedIndex;
switch (SortIndex)
{
case 0:
TableColumnName = @"Pochtamt.[Наименование почтамта]";
break;
case 1:
TableColumnName = @"OPS.[Наименование ОПС]";
break;
case 2:
TableColumnName = @"OPS.[Индекс ОПС]";
break;
case 3:
TableColumnName = @"OPS.ЕАС";
//Условие для ЕАС
if (EACcheck.Checked)
{
SortTextis = "-1";
}
else
{
SortTextis = "0";
}
break;
case 4:
TableColumnName = @"ConnectType.[Вид соединения]";
break;
case 5:
TableColumnName = @"TypeOPS.[Наименование типа ОПС]";
break;
case 6:
TableColumnName = @"Class.[Класс ОПС]";
break;
case 7:
TableColumnName = @"Address.[Населённый пункт]";
break;
case 8:
TableColumnName = @"TypeCanal.[Наименование типа канала]";
break;
case 9:
TableColumnName = @"Operator.[Название оператора]";
break;
}
comm.Connection = conn;
if (TableColumnName == "" || SortTextis == "")
{
TableColumnName = "";
SortTextis = "";
MessageBox.Show("Не заполнено условие поиска", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
try
{
zapros = "SELECT distinct Pochtamt.Индекс, Pochtamt.[Наименование почтамта], OPS.[Наименование ОПС], OPS.[Индекс ОПС], TypeOPS.[Наименование типа ОПС], Class.[Класс ОПС], Address.[Населённый пункт], Address.Улица, Address.Дом, OPS.Телефон, OPS.ЕАС, OPS.[Количество окон], TypeCanal.[Наименование типа канала], Operator.[Название оператора], Speed.Скорость, InternetCanal.ТелефонИнтернет, InternetCanal.[IP-адрес], ConnectType.[Вид соединения] FROM (((((((Class INNER JOIN (Address INNER JOIN OPS ON Address.idAddress = OPS.Адрес) ON Class.idClass = OPS.Класс) INNER JOIN PassportOPS ON OPS.idOPS = PassportOPS.ОПС) INNER JOIN ((InternetCanal INNER JOIN ConnectType ON InternetCanal.[Вид соединения] = ConnectType.idConnectType) INNER JOIN Operator ON InternetCanal.Оператор = Operator.idOperator) ON PassportOPS.Интернет = InternetCanal.idInternetCanal) INNER JOIN Pochtamt ON PassportOPS.Почтамт = Pochtamt.idPochtamt) INNER JOIN Speed ON InternetCanal.Скорость = Speed.idSpeed) INNER JOIN TypeCanal ON InternetCanal.[Тип канала] = TypeCanal.idTypeCanal) INNER JOIN TypeOPS ON OPS.[Тип ОПС] = TypeOPS.idTypeOPS) WHERE " + TableColumnName + " = " + SortTextis;
}
catch (OleDbException)
{
MessageBox.Show("ERROR", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
conn.Close();
//создаем таблицу
DataTable tble = getTable(zapros);
dataGridView1.DataSource = tble;
conn.Close();
}
//Кнопка сортировки, запросы на выборку
public void button2_Click(object sender, EventArgs e)
{
ClearDGV();
Sort();
dataGridView1.ReadOnly = true
numRows();
}
//Замена формы сортировки
public void SortBox_SelectedIndexChanged(object sender, EventArgs e)
{
int SelIndex = this.SortBox.SelectedIndex;
if (SelIndex == 3)
{
SortText.Visible = false;
EACcheck.Visible = true;
}
else
{
SortText.Visible = true;
EACcheck.Visible = false;
}
}
//Очистка таблицы
public void ClearDGV()
{
dataGridView1.SelectAll();
dataGridView1.ClearSelection();
dataGridView1.Columns.Clear();
dataGridView1.DataSource = null;
}
//Метод экспорта в EXCEL
public void ExportToExcel()
{
//Подключение к Excel
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook ObjWorkBook;
Microsoft.Office.Interop.Excel.Worksheet ObjWorkSheet;
//Создание новой книги Excel
ObjWorkBook = excelApp.Workbooks.Add(System.Reflection.Missing.Value);
//Создание новой таблицы Excel
ObjWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBook.Sheets[1];
excelApp.Workbooks.Add();
Microsoft.Office.Interop.Excel.Worksheet workSheet = (Microsoft.Office.Interop.Excel.Worksheet)excelApp.ActiveSheet;
conn.Open();
numRows();
DataTable tble = getTable(zapros);
//Считывание таблицы
for (int i = 0; i < ColumnC; i++)
{
workSheet.Cells[1, i + 1] = dataGridView1.Columns[i].HeaderText;
}
for (int i = 0; i < dataGridView1.ColumnCount; i++)
{
for (int j = 0; j < RowC; j++)
{
workSheet.Cells[j + 2, i + 1] = dataGridView1[i, j].Value.ToString();
}
}
//Сохранение книги Excel
string pathToFile;
pathToFile = saveFileDialog1.FileName;
workSheet.SaveAs(pathToFile);
excelApp.Application.Quit();
}
private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
{
try { ExportToExcel(); }
catch { MessageBox.Show("Невозможно экспортировать данную таблицу."); return; }
}
private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
{
MessageBox.Show("Файл выбран!", "Уведомление", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
//Выбор пути к файлу БД
public void chooseFile()
{
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
FileInfo fi = new FileInfo(openFileDialog1.FileName);
Properties.Settings.Default.conSt = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + openFileDialog1.FileName;
Properties.Settings.Default.DbFileName = openFileDialog1.FileName;
connectionstring = Properties.Settings.Default.conSt;
Properties.Settings.Default.Save();
}
}
public void выбратьФайлБДToolStripMenuItem_Click(object sender, EventArgs e)
{
chooseFile();
return;
}
}
}
