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 Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// строка подключения к базе данных
public static string txtcon = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\DBAgentstvo.mdf;Integrated Security=True;Connect Timeout=30";
///
/// Генерация капчи из 4-х символов
///
/// Возвращает сгенерированную капчу
string GetCapcha()
{
string TxtLetter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string TxtDigit = "0123456789";
string t1 = TxtLetter + TxtDigit;
string capcha = "";
bool FlagDigit = false;
Random rnd = new Random();
for (int i = 1; i <= 3; i++)
{
// взять символ из строки с символами для капчи
char sim = t1[rnd.Next(t1.Length)];
// если символ - цифра, запомнить это
if (char.IsDigit(sim)) FlagDigit = true;
capcha += sim; // добавить символ к капче
}
if (FlagDigit == false)
capcha += TxtDigit[rnd.Next(TxtDigit.Length)];
else
capcha += TxtLetter[rnd.Next(TxtLetter.Length)];
return capcha;
}
private void Form1_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'dbAgentstvoDataSet1.Users' table. You can move, or remove it, as needed.
this.usersTableAdapter.Fill(this.dbAgentstvoDataSet1.Users);
// при запуске по умолчанию выбран риелтер
cmbTypeUser.SelectedIndex = 0;
LblCapcha.Text = GetCapcha();
}
private void cbxShowPass_CheckedChanged(object sender, EventArgs e)
{
// скрыть / показать символы пароля
tbxPass.UseSystemPasswordChar = !cbxShowPass.Checked;
}
private void btnLogin_Click(object sender, EventArgs e)
{
if (TbxCapcha.Text.ToUpper() != LblCapcha.Text)
{
MessageBox.Show("Символы капчи введены неверно!\nПопробуйте еще раз.");
LblCapcha.Text = GetCapcha();
TbxCapcha.Clear();
return;
}
// фильтр для таблицы Пользователи
string txtfilter = String.Format("login = '{0}' and password = '{1}' and type = '{2}'", tbxLogin.Text, tbxPass.Text, cmbTypeUser.SelectedIndex);
// включить фильтр
bsUsers.Filter = txtfilter;
// фильтр для передачи на рабочее место пользователя
string filterworkplace = String.Format("login = '{0}'", tbxLogin.Text);
// если не найден пользователь с указанным логином, паролем и типом
if (bsUsers.Count == 0)
{
MessageBox.Show(String.Format("Нет пользователя \"{0}\" с указанным логином и паролем.", cmbTypeUser.Text));
return;
}
tbxLogin.Clear(); tbxPass.Clear(); // очистить поля
this.Visible = false; // сделать форму для авторизации невидимой
if (cmbTypeUser.Text == "риелтер")
{
FormRielter frm = new FormRielter(); // создать форму для риелтера
// передать фильтр для фильтрации авторизовавшегося пользователя
frm.bsUsers.Filter = filterworkplace;
frm.ShowDialog(); // открыть форму
}
if (cmbTypeUser.Text == "клиент")
{
FormKlient frm = new FormKlient(); // создать форму для клиента
// передать фильтр для фильтрации авторизовавшегося пользователя
frm.bsUsers.Filter = filterworkplace;
frm.ShowDialog(); // открыть форму
}
this.Visible = true; // сделать видимой форму для авторизации
tbxLogin.Focus(); // установить курсор
// загрузить из базы данных обновленные записи из таблицы Users
this.usersTableAdapter.Fill(this.dbAgentstvoDataSet1.Users);
LblCapcha.Text = GetCapcha();
}
private void lblReg_Click(object sender, EventArgs e)
{
FormRegistration frm = new FormRegistration();
frm.ShowDialog();
// загрузить из базы данных обновленные записи из таблицы Users
this.usersTableAdapter.Fill(this.dbAgentstvoDataSet1.Users);
}
private void LblCapcha_Paint(object sender, PaintEventArgs e)
{
// массив цветов
Color[] colors = { Color.Green, Color.Black, Color.Yellow, Color.White };
Random rnd = new Random();
// изобразить от 5 до 10 линий
for (int i = 1; i <= rnd.Next(5, 11); i++)
{
// координаты начала и конца отрезка
int x1 = rnd.Next(LblCapcha.Width);
int y1 = rnd.Next(LblCapcha.Height);
int x2 = rnd.Next(LblCapcha.Width);
int y2 = rnd.Next(LblCapcha.Height);
// случайный цвет из массива цветов
Color col = colors[rnd.Next(colors.Length)];
// нарисовать линию на метке Label
e.Graphics.DrawLine(new Pen(col), x1, y1, x2, y2);
}
}
}
}