Form1.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using DLLPass;
  11. namespace СУБД_Швейная_фабрика
  12. {
  13. public partial class FormAuthorization : Form
  14. {
  15. public FormAuthorization()
  16. {
  17. InitializeComponent();
  18. }
  19. // public static string TxtCon = @"Data Source=213.155.192.79,3002;Initial Catalog=fab2021;Persist Security Info=True;User ID=fab2021;Password=fab2021";
  20. /// <summary>
  21. /// Генерация капчи из 4-х символов
  22. /// </summary>
  23. /// <returns>Возвращает сгенерированную капчу</returns>
  24. string GetCapcha()
  25. {
  26. string TxtLetter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  27. string TxtDigit = "0123456789";
  28. string t1 = TxtLetter + TxtDigit;
  29. string capcha = "";
  30. bool FlagDigit = false;
  31. Random rnd = new Random();
  32. for(int i = 1; i <= 3; i++)
  33. {
  34. // взять символ из строки с символами для капчи
  35. char sim = t1[rnd.Next(t1.Length)];
  36. // если символ - цифра, запомнить это
  37. if (char.IsDigit(sim)) FlagDigit = true;
  38. capcha += sim; // добавить символ к капче
  39. }
  40. if (FlagDigit == false)
  41. capcha += TxtDigit[rnd.Next(TxtDigit.Length)];
  42. else
  43. capcha += TxtLetter[rnd.Next(TxtLetter.Length)];
  44. return capcha;
  45. }
  46. private void FormAuthorization_Load(object sender, EventArgs e)
  47. {
  48. // TODO: This line of code loads data into the 'fab2021DataSet1.Users' table. You can move, or remove it, as needed.
  49. this.usersTableAdapter.Fill(this.fab2021DataSet1.Users);
  50. CmbRole.SelectedIndex = 0;
  51. LblCapcha.Text = GetCapcha();
  52. }
  53. /// <summary>
  54. /// Авторизация пользователя
  55. /// </summary>
  56. private void BtnLogin_Click(object sender, EventArgs e)
  57. {
  58. //if (TbxCapcha.Text.ToUpper() != LblCapcha.Text)
  59. //{
  60. // MessageBox.Show("Символы капчи введены неверно!\nПопробуйте еще раз.");
  61. // LblCapcha.Text = GetCapcha();
  62. // TbxCapcha.Clear();
  63. // return;
  64. //}
  65. // роль пользователя (считывается из ComboBox)
  66. string role = CmbRole.SelectedItem.ToString();
  67. // фильтр для таблицы Пользователи
  68. string TxtFilter = String.Format("login = '{0}' and pass = '{1}' and role = '{2}'", TbxLogin.Text, TbxPass.Text, role);
  69. // логин для передачи на рабочее место
  70. string TxtFilterForUser = string.Format("login = '{0}'", TbxLogin.Text);
  71. BsUsers.Filter = TxtFilter; // включить фильтр
  72. if (BsUsers.Count == 0)
  73. {
  74. MessageBox.Show(String.Format("Нет пользователя '{0}' с указанным логином и паролем!", role));
  75. return;
  76. }
  77. TbxLogin.Clear(); TbxPass.Clear(); // очистить поля
  78. this.Visible = false; // скрыть форму для авторизации
  79. if (role == "заказчик")
  80. {
  81. // создать форму для заказчика
  82. FormZakazchik frm = new FormZakazchik();
  83. // отфильтровать авторизовавшегося пользователя
  84. frm.BsUsers.Filter = TxtFilterForUser;
  85. frm.ShowDialog();
  86. }
  87. if (role == "менеджер")
  88. {
  89. // создать форму для менеджера
  90. FormManager frm = new FormManager();
  91. // отфильтровать авторизовавшегося пользователя
  92. frm.BsUsers.Filter = TxtFilterForUser;
  93. frm.ShowDialog();
  94. }
  95. if (role == "кладовщик")
  96. {
  97. // создать форму для кладовщика
  98. FormKladovschik frm = new FormKladovschik();
  99. // отфильтровать авторизовавшегося пользователя
  100. frm.BsUsers.Filter = TxtFilterForUser;
  101. frm.ShowDialog();
  102. }
  103. this.Visible = true; // показать форму для авторизации
  104. // загрузить обновленные записи из БД
  105. this.usersTableAdapter.Fill(this.fab2021DataSet1.Users);
  106. TbxLogin.Focus();
  107. TbxCapcha.Clear();
  108. LblCapcha.Text = GetCapcha();
  109. }
  110. /// <summary>
  111. /// Скрыть/показать пароль
  112. /// </summary>
  113. private void CbxShowPass_CheckedChanged(object sender, EventArgs e)
  114. {
  115. TbxPass.UseSystemPasswordChar = !TbxPass.UseSystemPasswordChar;
  116. }
  117. /// <summary>
  118. /// Изображение случайных линий поверх капчи
  119. /// </summary>
  120. private void LblCapcha_Paint(object sender, PaintEventArgs e)
  121. {
  122. // массив цветов
  123. Color[] colors = { Color.Green, Color.Black, Color.Yellow, Color.White };
  124. Random rnd = new Random();
  125. // изобразить от 5 до 10 линий
  126. for (int i = 1; i <= rnd.Next(5, 11); i++)
  127. {
  128. // координаты начала и конца отрезка
  129. int x1 = rnd.Next(LblCapcha.Width);
  130. int y1 = rnd.Next(LblCapcha.Height);
  131. int x2 = rnd.Next(LblCapcha.Width);
  132. int y2 = rnd.Next(LblCapcha.Height);
  133. // случайный цвет из массива цветов
  134. Color col = colors[rnd.Next(colors.Length)];
  135. // нарисовать линию на метке Label
  136. e.Graphics.DrawLine(new Pen(col), x1, y1, x2, y2);
  137. }
  138. }
  139. private void LblReg_Click(object sender, EventArgs e)
  140. {
  141. FormReg frm = new FormReg();
  142. if (frm.ShowDialog() == DialogResult.OK)
  143. this.usersTableAdapter.Fill(this.fab2021DataSet1.Users);
  144. }
  145. }
  146. }