| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using System.Data.SqlClient;
- namespace СУБД_Агентство
- {
- public partial class FormFindLeven : Form
- {
- public FormFindLeven()
- {
- InitializeComponent();
- }
- int levenshtein(string t1, string t2)
- {
- // разница в количестве символов в проверяемых строках
- int lev = Math.Abs(t1.Length - t2.Length);
- // минимальная длина из длин двух строк
- int minlen = Math.Min(t1.Length, t2.Length);
- // перебор символов от нулевого и до последнего более короткой строки
- for (int i = 0; i <= minlen-1; i++)
- // если i-е символы не совпали, то сосчитать их
- if (t1[i] != t2[i]) lev++;
- return lev;
- }
-
- // структура данных для хранения фамилии и имени
- struct user
- {
- public string fam, name;
- }
- // список с фамилиями и именами клиентов
- List<user> lst = new List<user>();
- public int type;
- private void FormFindLeven_Load(object sender, EventArgs e)
- {
- // объект для подключения к базе данных
- SqlConnection con = new SqlConnection(Form1.txtcon);
- con.Open(); // открыть подключение
- string txtsql = @"
- select fam, name
- from Users
- where type = " + type;
- // SQL-запрос для извлечения из БД списка пользователей
- SqlCommand query1 = new SqlCommand(txtsql, con);
- // выполнить запрос и сохранить результат запроса
- SqlDataReader rez = query1.ExecuteReader();
- // если есть строки в результате запроса
- if (rez.HasRows)
- {
- // прочитать очередную строку из результата запроса
- // выполнять цикл до тех пор, пока не достигли последней записи в таблице
- // с результатами запроса
- while(rez.Read())
- {
- user u1;
- // новый элемент для списка пользователей
- u1.fam = rez["fam"].ToString(); u1.name = rez["name"].ToString();
- lst.Add(u1); // добавить в список очередного пользователя
- // вывести данные очередного пользователя в таблицу
- dgvUsers.Rows.Add(u1.fam, u1.name);
- }
- }
- con.Close(); // закрыть подключение
- }
- private void btnFind_Click(object sender, EventArgs e)
- {
- dgvUsers.Rows.Clear(); // очистить таблицу
- // перебор пользователей в списке
- foreach (user u1 in lst)
- {
- // если выполняется поиск по фамилии и фамилия пользователя не превышает 3 по расстоянию Левенштейна с символами для поиска, или выполняется поиск по имени и имя пользователя не превышает 3 по расстоянию Левенштейна с символами для поиска, ...
- if (rbtFam.Checked && levenshtein(u1.fam, tbxFind.Text) <= 3 ||
- rbtName.Checked && levenshtein(u1.name, tbxFind.Text) <= 3)
- // вывести в DataGridView такого пользователя
- dgvUsers.Rows.Add(u1.fam, u1.name);
- }
- }
- private void dgvUsers_CellContentClick(object sender, DataGridViewCellEventArgs e)
- {
- }
- private void btnShowAll_Click(object sender, EventArgs e)
- {
- dgvUsers.Rows.Clear(); // очистить таблицу
- // перебор пользователей в списке
- foreach (user u1 in lst)
- {
- // вывести в DataGridView пользователя
- dgvUsers.Rows.Add(u1.fam, u1.name);
- }
- }
- }
- }
|