MainForm.cs 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. using System;
  2. using System.Data;
  3. using System.Drawing;
  4. using System.Windows.Forms;
  5. using Npgsql;
  6. namespace CarApp
  7. {
  8. class Program
  9. {
  10. [STAThread]
  11. static void Main()
  12. {
  13. Application.EnableVisualStyles();
  14. Application.Run(new MainForm());
  15. }
  16. }
  17. class MainForm : Form
  18. {
  19. // строка подключения
  20. string conn = "Host=edu-pg.itiscaf.ru;Port=5432;Database=dbwork;Username=valko_da;Password=vn$Y$5dr#$6;";
  21. DataGridView grid = new DataGridView();
  22. TextBox txtAdres = new TextBox();
  23. TextBox txtPhone = new TextBox();
  24. TextBox txtGorod = new TextBox();
  25. Button btnAdd = new Button();
  26. Button btnUpdate = new Button();
  27. Button btnDelete = new Button();
  28. // для процедуры
  29. ComboBox cmbMarka = new ComboBox();
  30. DateTimePicker dtpOt = new DateTimePicker();
  31. DateTimePicker dtpDo = new DateTimePicker();
  32. Button btnProc = new Button();
  33. DataGridView gridProc = new DataGridView();
  34. int selectedId = -1;
  35. public MainForm()
  36. {
  37. Text = "Продажа автомобилей";
  38. Size = new Size(950, 600);
  39. StartPosition = FormStartPosition.CenterScreen;
  40. var tabs = new TabControl { Dock = DockStyle.Fill };
  41. tabs.TabPages.Add(MakeClientTab());
  42. tabs.TabPages.Add(MakeProcTab());
  43. Controls.Add(tabs);
  44. LoadClients();
  45. LoadMarki();
  46. }
  47. // ВКЛАДКА КЛИЕНТЫ
  48. TabPage MakeClientTab()
  49. {
  50. var tab = new TabPage("Клиенты");
  51. // таблица
  52. grid.Location = new Point(10, 10);
  53. grid.Size = new Size(550, 500);
  54. grid.ReadOnly = true;
  55. grid.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
  56. grid.AllowUserToAddRows = false;
  57. grid.SelectionChanged += (s, e) =>
  58. {
  59. if (grid.CurrentRow == null) return;
  60. selectedId = Convert.ToInt32(grid.CurrentRow.Cells[0].Value);
  61. txtAdres.Text = grid.CurrentRow.Cells[1].Value?.ToString();
  62. txtPhone.Text = grid.CurrentRow.Cells[2].Value?.ToString();
  63. txtGorod.Text = grid.CurrentRow.Cells[3].Value?.ToString();
  64. };
  65. // поля
  66. var lAdres = new Label { Text = "Адрес:", Left = 580, Top = 20, Width = 80 };
  67. var lPhone = new Label { Text = "Телефон:", Left = 580, Top = 65, Width = 80 };
  68. var lGorod = new Label { Text = "Город:", Left = 580, Top = 110, Width = 80 };
  69. txtAdres.Location = new Point(580, 40); txtAdres.Width = 300;
  70. txtPhone.Location = new Point(580, 85); txtPhone.Width = 300;
  71. txtGorod.Location = new Point(580, 130); txtGorod.Width = 300;
  72. btnAdd.Text = "Добавить"; btnAdd.Location = new Point(580, 180); btnAdd.Width = 140;
  73. btnUpdate.Text = "Изменить"; btnUpdate.Location = new Point(740, 180); btnUpdate.Width = 140;
  74. btnDelete.Text = "Удалить"; btnDelete.Location = new Point(580, 220); btnDelete.Width = 300;
  75. btnAdd.Click += (s, e) => AddClient();
  76. btnUpdate.Click += (s, e) => UpdateClient();
  77. btnDelete.Click += (s, e) => DeleteClient();
  78. tab.Controls.AddRange(new Control[] {
  79. grid, lAdres, txtAdres, lPhone, txtPhone, lGorod, txtGorod,
  80. btnAdd, btnUpdate, btnDelete
  81. });
  82. return tab;
  83. }
  84. void LoadClients()
  85. {
  86. try
  87. {
  88. using var c = new NpgsqlConnection(conn);
  89. c.Open();
  90. var da = new NpgsqlDataAdapter("SELECT id_klienta, adres, nomer_telefona, gorod FROM klient", c);
  91. var dt = new DataTable();
  92. da.Fill(dt);
  93. grid.DataSource = dt;
  94. grid.Columns[0].HeaderText = "ID";
  95. grid.Columns[1].HeaderText = "Адрес";
  96. grid.Columns[2].HeaderText = "Телефон";
  97. grid.Columns[3].HeaderText = "Город";
  98. }
  99. catch (Exception ex) { MessageBox.Show(ex.Message); }
  100. }
  101. void AddClient()
  102. {
  103. try
  104. {
  105. using var c = new NpgsqlConnection(conn);
  106. c.Open();
  107. var cmd = new NpgsqlCommand(
  108. "INSERT INTO klient(adres, nomer_telefona, gorod) VALUES(@a,@p,@g)", c);
  109. cmd.Parameters.AddWithValue("@a", txtAdres.Text);
  110. cmd.Parameters.AddWithValue("@p", txtPhone.Text);
  111. cmd.Parameters.AddWithValue("@g", txtGorod.Text);
  112. cmd.ExecuteNonQuery();
  113. LoadClients();
  114. }
  115. catch (Exception ex) { MessageBox.Show(ex.Message); }
  116. }
  117. void UpdateClient()
  118. {
  119. if (selectedId == -1) { MessageBox.Show("Выберите строку"); return; }
  120. try
  121. {
  122. using var c = new NpgsqlConnection(conn);
  123. c.Open();
  124. var cmd = new NpgsqlCommand(
  125. "UPDATE klient SET adres=@a, nomer_telefona=@p, gorod=@g WHERE id_klienta=@id", c);
  126. cmd.Parameters.AddWithValue("@a", txtAdres.Text);
  127. cmd.Parameters.AddWithValue("@p", txtPhone.Text);
  128. cmd.Parameters.AddWithValue("@g", txtGorod.Text);
  129. cmd.Parameters.AddWithValue("@id", selectedId);
  130. cmd.ExecuteNonQuery();
  131. LoadClients();
  132. }
  133. catch (Exception ex) { MessageBox.Show(ex.Message); }
  134. }
  135. void DeleteClient()
  136. {
  137. if (selectedId == -1) { MessageBox.Show("Выберите строку"); return; }
  138. if (MessageBox.Show("Удалить?", "", MessageBoxButtons.YesNo) != DialogResult.Yes) return;
  139. try
  140. {
  141. using var c = new NpgsqlConnection(conn);
  142. c.Open();
  143. var cmd = new NpgsqlCommand("DELETE FROM klient WHERE id_klienta=@id", c);
  144. cmd.Parameters.AddWithValue("@id", selectedId);
  145. cmd.ExecuteNonQuery();
  146. LoadClients();
  147. }
  148. catch (Exception ex) { MessageBox.Show(ex.Message); }
  149. }
  150. //ВКЛАДКА ПРОЦЕДУРА
  151. TabPage MakeProcTab()
  152. {
  153. var tab = new TabPage("Хранимая процедура");
  154. var lMarka = new Label { Text = "Марка:", Left = 10, Top = 15, Width = 60 };
  155. cmbMarka.Location = new Point(75, 12);
  156. cmbMarka.Width = 150;
  157. cmbMarka.DropDownStyle = ComboBoxStyle.DropDownList;
  158. var lOt = new Label { Text = "С:", Left = 240, Top = 15, Width = 20 };
  159. dtpOt.Location = new Point(263, 12); dtpOt.Width = 130;
  160. dtpOt.Format = DateTimePickerFormat.Short;
  161. dtpOt.Value = new DateTime(2023, 1, 1);
  162. var lDo = new Label { Text = "По:", Left = 405, Top = 15, Width = 25 };
  163. dtpDo.Location = new Point(433, 12); dtpDo.Width = 130;
  164. dtpDo.Format = DateTimePickerFormat.Short;
  165. dtpDo.Value = DateTime.Today;
  166. btnProc.Text = "Выполнить";
  167. btnProc.Location = new Point(580, 10);
  168. btnProc.Width = 120;
  169. btnProc.Click += (s, e) => RunProc();
  170. gridProc.Location = new Point(10, 50);
  171. gridProc.Size = new Size(900, 480);
  172. gridProc.ReadOnly = true;
  173. gridProc.AllowUserToAddRows = false;
  174. gridProc.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
  175. tab.Controls.AddRange(new Control[] {
  176. lMarka, cmbMarka, lOt, dtpOt, lDo, dtpDo, btnProc, gridProc
  177. });
  178. return tab;
  179. }
  180. void LoadMarki()
  181. {
  182. try
  183. {
  184. using var c = new NpgsqlConnection(conn);
  185. c.Open();
  186. var cmd = new NpgsqlCommand("SELECT nazvanie_marki FROM marka ORDER BY nazvanie_marki", c);
  187. var r = cmd.ExecuteReader();
  188. while (r.Read()) cmbMarka.Items.Add(r.GetString(0));
  189. if (cmbMarka.Items.Count > 0) cmbMarka.SelectedIndex = 0;
  190. }
  191. catch (Exception ex) { MessageBox.Show(ex.Message); }
  192. }
  193. void RunProc()
  194. {
  195. if (cmbMarka.SelectedItem == null) return;
  196. MessageBox.Show(
  197. $"Марка: {cmbMarka.SelectedItem}\n" +
  198. $"Дата от: {dtpOt.Value.Date:d}\n" +
  199. $"Дата до: {dtpDo.Value.Date:d}"
  200. );
  201. try
  202. {
  203. using var c = new NpgsqlConnection(conn);
  204. c.Open();
  205. var cmd = new NpgsqlCommand(
  206. "SELECT * FROM GetCitiesByMarkAndPeriod(@m, @d1, @d2)", c);
  207. cmd.Parameters.AddWithValue("@m", cmbMarka.SelectedItem.ToString());
  208. cmd.Parameters.AddWithValue("@d1", dtpOt.Value.Date);
  209. cmd.Parameters.AddWithValue("@d2", dtpDo.Value.Date);
  210. var da = new NpgsqlDataAdapter(cmd);
  211. var dt = new DataTable();
  212. da.Fill(dt);
  213. gridProc.DataSource = dt;
  214. }
  215. catch (Exception ex) { MessageBox.Show(ex.Message); }
  216. }
  217. }
  218. }