work1911: Исходный код и EER

This commit is contained in:
Student 2025-11-19 16:11:00 +04:00
commit c7d073eb90
55 changed files with 4666 additions and 0 deletions

244
EER/EER_Neshina.sql Normal file
View File

@ -0,0 +1,244 @@
-- MySQL dump 10.13 Distrib 8.0.36, for Win64 (x86_64)
--
-- Host: git.pgk.alspio.com Database: ISP41_Neshina_dem2
-- ------------------------------------------------------
-- Server version 5.7.44
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `Materials`
--
DROP TABLE IF EXISTS `Materials`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Materials` (
`idMaterials` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Type` int(11) DEFAULT NULL,
`Price` decimal(10,2) DEFAULT NULL,
`Quantity` int(11) DEFAULT NULL,
`MinQuantity` int(11) DEFAULT NULL,
`QuantityPack` int(11) DEFAULT NULL,
`Unit` int(11) DEFAULT NULL,
PRIMARY KEY (`idMaterials`),
KEY `fk_type_idx` (`Type`),
KEY `fk_unit_idx` (`Unit`),
CONSTRAINT `fk_type` FOREIGN KEY (`Type`) REFERENCES `TypeMaterial` (`idTypeMaterial`) ON DELETE NO ACTION ON UPDATE CASCADE,
CONSTRAINT `fk_unit` FOREIGN KEY (`Unit`) REFERENCES `Unit` (`idUnit`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Materials`
--
LOCK TABLES `Materials` WRITE;
/*!40000 ALTER TABLE `Materials` DISABLE KEYS */;
INSERT INTO `Materials` VALUES (1,'Глина',1,15.29,1570,5500,30,1),(2,'Каолин',1,18.20,1030,3500,25,1),(3,'Гидрослюда',3,9999.00,2147,3500,25,1),(4,'Монтмориллонит',1,17.67,3000,3000,30,1),(5,'Перлит',2,13.99,150,1000,50,2),(6,'Стекло',2,2.40,3000,1500,500,1),(7,'Дегидратированная глина',2,21.95,3000,2500,20,1),(9,'Техническая сода',3,54.55,1200,1500,25,1),(10,'Жидкое стекло',3,76.59,500,1500,15,1),(11,'Кварц',4,18.20,1500,2500,10,1),(12,'Полевой шпат',4,15.99,750,1500,100,1),(13,'Краска-раствор',5,200.90,1496,2500,5,2),(16,'Жильный кварц',3,18.60,2556,1600,25,1),(17,'Барий углекислый',4,303.64,340,1500,25,1),(18,'Бура техническая',4,125.99,165,1300,25,1),(19,'Углещелочной реагент',3,3.45,450,1100,25,1),(20,'Пирофосфат натрия',3,700.99,356,1200,25,1);
/*!40000 ALTER TABLE `Materials` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `NameSupplier`
--
DROP TABLE IF EXISTS `NameSupplier`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `NameSupplier` (
`idNameSupplier` int(11) NOT NULL AUTO_INCREMENT,
`Material` int(11) DEFAULT NULL,
`Supplier` int(11) DEFAULT NULL,
PRIMARY KEY (`idNameSupplier`),
KEY `fk_material_idx` (`Material`),
KEY `fk_pol_idx` (`Supplier`),
CONSTRAINT `fk_material` FOREIGN KEY (`Material`) REFERENCES `Materials` (`idMaterials`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_pol` FOREIGN KEY (`Supplier`) REFERENCES `Supplier` (`idSupplier`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `NameSupplier`
--
LOCK TABLES `NameSupplier` WRITE;
/*!40000 ALTER TABLE `NameSupplier` DISABLE KEYS */;
INSERT INTO `NameSupplier` VALUES (1,13,19),(2,2,3),(3,2,9),(4,6,19),(6,5,6),(7,1,4),(9,7,9),(10,12,4),(11,1,1),(13,16,17),(14,12,1),(15,3,9),(16,6,20),(17,12,12),(18,4,9),(19,11,11),(20,17,17),(21,10,12),(23,1,6),(24,11,15),(25,3,3),(26,5,9),(28,17,20),(29,18,20),(30,9,18),(31,20,20),(32,3,4),(33,16,15),(34,5,10),(36,4,4),(37,13,12),(38,6,7),(40,2,1),(41,10,18),(42,18,7),(43,7,11),(44,18,13),(45,4,3),(46,10,16),(47,10,7),(50,19,16),(51,11,14),(52,16,13),(53,13,16),(54,11,13),(55,7,2),(57,17,7),(59,7,7),(60,3,5),(61,20,7),(62,5,5),(63,9,7),(64,1,10),(65,9,16),(66,4,10),(67,19,12),(68,9,8),(69,18,2),(70,20,5),(71,16,10),(72,6,2),(73,19,8),(74,17,5),(75,20,8),(76,2,5),(78,19,5),(79,13,8),(80,12,10);
/*!40000 ALTER TABLE `NameSupplier` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Supplier`
--
DROP TABLE IF EXISTS `Supplier`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Supplier` (
`idSupplier` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Type` int(11) DEFAULT NULL,
`INN` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Rating` int(11) DEFAULT NULL,
`Date` date DEFAULT NULL,
PRIMARY KEY (`idSupplier`),
KEY `fk_types_idx` (`Type`),
CONSTRAINT `fk_types` FOREIGN KEY (`Type`) REFERENCES `TypeSupplier` (`idTypeSupplier`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Supplier`
--
LOCK TABLES `Supplier` WRITE;
/*!40000 ALTER TABLE `Supplier` DISABLE KEYS */;
INSERT INTO `Supplier` VALUES (1,'БрянскСтройресурс',1,'9432455179',8,'2015-12-20'),(2,'Стройкомплект',1,'7803888520',7,'2017-09-13'),(3,'Железногорская руда',2,'8430391035',7,'2016-12-23'),(4,'Белая гора',2,'4318170454',8,'2019-05-27'),(5,'Тульский обрабатывающий завод',2,'7687851800',7,'2015-06-16'),(6,'ГорТехРазработка',3,'6119144874',9,'2021-12-27'),(7,'Сапфир',4,'1122170258',3,'2022-04-10'),(8,'ХимБытСервис',3,'8355114917',5,'2022-03-13'),(9,'ВоронежРудоКомбинат',4,'3532367439',8,'2023-11-11'),(10,'Смоленский добывающий комбинат',4,'2362431140',3,'2018-11-23'),(11,'МосКарьер',3,'4159215346',2,'2012-07-07'),(12,'КурскРесурс',1,'9032455179',4,'2021-07-23'),(13,'Нижегородская разработка',4,'3776671267',9,'2016-05-23'),(14,'Речная долина',4,'7447864518',8,'2015-06-25'),(15,'Карелия добыча',3,'9037040523',6,'2017-03-09'),(16,'Московский ХимЗавод',3,'6221520857',4,'2015-05-07'),(17,'Горная компания',1,'2262431140',3,'2020-12-22'),(18,'Минерал Ресурс',2,'4155215346',7,'2015-05-22'),(19,'Арсенал',1,'3961234561',5,'2010-11-25'),(20,'КамчаткаСтройМинералы',1,'9600275878',7,'2016-12-20');
/*!40000 ALTER TABLE `Supplier` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `TypeMaterial`
--
DROP TABLE IF EXISTS `TypeMaterial`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `TypeMaterial` (
`idTypeMaterial` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`idTypeMaterial`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `TypeMaterial`
--
LOCK TABLES `TypeMaterial` WRITE;
/*!40000 ALTER TABLE `TypeMaterial` DISABLE KEYS */;
INSERT INTO `TypeMaterial` VALUES (1,'Пластичные материалы'),(2,'Добавка'),(3,'Электролит'),(4,'Глазурь'),(5,'Пигмент');
/*!40000 ALTER TABLE `TypeMaterial` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `TypeProduction`
--
DROP TABLE IF EXISTS `TypeProduction`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `TypeProduction` (
`idTypeProduction` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Coefficient` decimal(10,2) DEFAULT NULL,
PRIMARY KEY (`idTypeProduction`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `TypeProduction`
--
LOCK TABLES `TypeProduction` WRITE;
/*!40000 ALTER TABLE `TypeProduction` DISABLE KEYS */;
INSERT INTO `TypeProduction` VALUES (1,'Тип продукции 1',1.20),(2,'Тип продукции 2',90.00),(3,'Тип продукции 3',3.45);
/*!40000 ALTER TABLE `TypeProduction` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `TypeSupplier`
--
DROP TABLE IF EXISTS `TypeSupplier`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `TypeSupplier` (
`idTypeSupplier` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`idTypeSupplier`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `TypeSupplier`
--
LOCK TABLES `TypeSupplier` WRITE;
/*!40000 ALTER TABLE `TypeSupplier` DISABLE KEYS */;
INSERT INTO `TypeSupplier` VALUES (1,'ЗАО'),(2,'ООО'),(3,'ПАО'),(4,'ОАО');
/*!40000 ALTER TABLE `TypeSupplier` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `TypeWithProcent`
--
DROP TABLE IF EXISTS `TypeWithProcent`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `TypeWithProcent` (
`idTypeWithProcent` int(11) NOT NULL AUTO_INCREMENT,
`Name` int(11) DEFAULT NULL,
`Procent` decimal(10,4) DEFAULT NULL,
PRIMARY KEY (`idTypeWithProcent`),
KEY `fk_oioi_idx` (`Name`),
CONSTRAINT `fk_oioi` FOREIGN KEY (`Name`) REFERENCES `TypeMaterial` (`idTypeMaterial`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `TypeWithProcent`
--
LOCK TABLES `TypeWithProcent` WRITE;
/*!40000 ALTER TABLE `TypeWithProcent` DISABLE KEYS */;
INSERT INTO `TypeWithProcent` VALUES (1,1,0.0012),(2,2,0.0020),(3,3,0.0015),(4,4,0.0030),(5,5,0.0025);
/*!40000 ALTER TABLE `TypeWithProcent` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `Unit`
--
DROP TABLE IF EXISTS `Unit`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `Unit` (
`idUnit` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`idUnit`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `Unit`
--
LOCK TABLES `Unit` WRITE;
/*!40000 ALTER TABLE `Unit` DISABLE KEYS */;
INSERT INTO `Unit` VALUES (1,'кг'),(2,'л');
/*!40000 ALTER TABLE `Unit` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2025-11-19 15:59:52

Binary file not shown.

View File

@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.8.34511.84
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NeshinaDem3", "NeshinaDem3\NeshinaDem3.csproj", "{E6B40B3D-4197-489D-AD89-F7FDABAF4249}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{E6B40B3D-4197-489D-AD89-F7FDABAF4249}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E6B40B3D-4197-489D-AD89-F7FDABAF4249}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E6B40B3D-4197-489D-AD89-F7FDABAF4249}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E6B40B3D-4197-489D-AD89-F7FDABAF4249}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {515958ED-882C-432E-980A-F00EFA219FAF}
EndGlobalSection
EndGlobal

261
NeshinaDem3/NeshinaDem3/Add.Designer.cs generated Normal file
View File

@ -0,0 +1,261 @@
namespace NeshinaDem3
{
partial class Add
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Add));
this.txtName = new System.Windows.Forms.TextBox();
this.cmbType = new System.Windows.Forms.ComboBox();
this.txtPrice = new System.Windows.Forms.TextBox();
this.txtQuantity = new System.Windows.Forms.TextBox();
this.txtMinQuantity = new System.Windows.Forms.TextBox();
this.txtStockQuantity = new System.Windows.Forms.TextBox();
this.cmbUnit = new System.Windows.Forms.ComboBox();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this.label7 = new System.Windows.Forms.Label();
this.label8 = new System.Windows.Forms.Label();
this.btnSave = new System.Windows.Forms.Button();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// txtName
//
this.txtName.Location = new System.Drawing.Point(13, 85);
this.txtName.Name = "txtName";
this.txtName.Size = new System.Drawing.Size(318, 20);
this.txtName.TabIndex = 0;
//
// cmbType
//
this.cmbType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbType.FormattingEnabled = true;
this.cmbType.Location = new System.Drawing.Point(13, 131);
this.cmbType.Name = "cmbType";
this.cmbType.Size = new System.Drawing.Size(318, 21);
this.cmbType.TabIndex = 1;
//
// txtPrice
//
this.txtPrice.Location = new System.Drawing.Point(13, 178);
this.txtPrice.Name = "txtPrice";
this.txtPrice.Size = new System.Drawing.Size(318, 20);
this.txtPrice.TabIndex = 2;
//
// txtQuantity
//
this.txtQuantity.Location = new System.Drawing.Point(13, 224);
this.txtQuantity.Name = "txtQuantity";
this.txtQuantity.Size = new System.Drawing.Size(318, 20);
this.txtQuantity.TabIndex = 3;
//
// txtMinQuantity
//
this.txtMinQuantity.Location = new System.Drawing.Point(13, 276);
this.txtMinQuantity.Name = "txtMinQuantity";
this.txtMinQuantity.Size = new System.Drawing.Size(318, 20);
this.txtMinQuantity.TabIndex = 4;
//
// txtStockQuantity
//
this.txtStockQuantity.Location = new System.Drawing.Point(13, 322);
this.txtStockQuantity.Name = "txtStockQuantity";
this.txtStockQuantity.Size = new System.Drawing.Size(318, 20);
this.txtStockQuantity.TabIndex = 5;
//
// cmbUnit
//
this.cmbUnit.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbUnit.FormattingEnabled = true;
this.cmbUnit.Location = new System.Drawing.Point(13, 373);
this.cmbUnit.Name = "cmbUnit";
this.cmbUnit.Size = new System.Drawing.Size(318, 21);
this.cmbUnit.TabIndex = 6;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("Comic Sans MS", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label1.Location = new System.Drawing.Point(94, 9);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(148, 40);
this.label1.TabIndex = 7;
this.label1.Text = "Добавить";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label2.Location = new System.Drawing.Point(10, 69);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(57, 15);
this.label2.TabIndex = 8;
this.label2.Text = "Название";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label3.Location = new System.Drawing.Point(10, 115);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(28, 15);
this.label3.TabIndex = 9;
this.label3.Text = "Тип";
//
// label4
//
this.label4.AutoSize = true;
this.label4.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label4.Location = new System.Drawing.Point(10, 162);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(34, 15);
this.label4.TabIndex = 10;
this.label4.Text = "Цена";
//
// label5
//
this.label5.AutoSize = true;
this.label5.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label5.Location = new System.Drawing.Point(10, 208);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(71, 15);
this.label5.TabIndex = 11;
this.label5.Text = "Количество";
//
// label6
//
this.label6.AutoSize = true;
this.label6.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label6.Location = new System.Drawing.Point(10, 260);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(147, 15);
this.label6.TabIndex = 12;
this.label6.Text = "Минимальное количество";
//
// label7
//
this.label7.AutoSize = true;
this.label7.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label7.Location = new System.Drawing.Point(10, 306);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(126, 15);
this.label7.TabIndex = 13;
this.label7.Text = "Количество на складе";
//
// label8
//
this.label8.AutoSize = true;
this.label8.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label8.Location = new System.Drawing.Point(10, 357);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(114, 15);
this.label8.TabIndex = 14;
this.label8.Text = "Единица измерения";
//
// btnSave
//
this.btnSave.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(84)))), ((int)(((byte)(111)))), ((int)(((byte)(148)))));
this.btnSave.Font = new System.Drawing.Font("Comic Sans MS", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.btnSave.ForeColor = System.Drawing.SystemColors.Control;
this.btnSave.Location = new System.Drawing.Point(83, 419);
this.btnSave.Name = "btnSave";
this.btnSave.Size = new System.Drawing.Size(184, 64);
this.btnSave.TabIndex = 25;
this.btnSave.Text = "Сохранить изменения";
this.btnSave.UseVisualStyleBackColor = false;
this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
//
// button1
//
this.button1.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.button1.Location = new System.Drawing.Point(13, 461);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(54, 23);
this.button1.TabIndex = 26;
this.button1.Text = "Назад";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Add
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(207)))), ((int)(((byte)(206)))));
this.ClientSize = new System.Drawing.Size(343, 496);
this.Controls.Add(this.button1);
this.Controls.Add(this.btnSave);
this.Controls.Add(this.label8);
this.Controls.Add(this.label7);
this.Controls.Add(this.label6);
this.Controls.Add(this.label5);
this.Controls.Add(this.label4);
this.Controls.Add(this.label3);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.cmbUnit);
this.Controls.Add(this.txtStockQuantity);
this.Controls.Add(this.txtMinQuantity);
this.Controls.Add(this.txtQuantity);
this.Controls.Add(this.txtPrice);
this.Controls.Add(this.cmbType);
this.Controls.Add(this.txtName);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.Name = "Add";
this.Text = "Add";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TextBox txtName;
private System.Windows.Forms.ComboBox cmbType;
private System.Windows.Forms.TextBox txtPrice;
private System.Windows.Forms.TextBox txtQuantity;
private System.Windows.Forms.TextBox txtMinQuantity;
private System.Windows.Forms.TextBox txtStockQuantity;
private System.Windows.Forms.ComboBox cmbUnit;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.Button btnSave;
private System.Windows.Forms.Button button1;
}
}

View File

@ -0,0 +1,171 @@
using MySql.Data.MySqlClient;
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;
namespace NeshinaDem3
{
public partial class Add : Form
{
public Add()
{
InitializeComponent();
LoadTypes();
LoadUnits();
}
private void btnSave_Click(object sender, EventArgs e) //ДОБАВЛЕНИЕ
{
if (string.IsNullOrWhiteSpace(txtName.Text))
{
MessageBox.Show("Введите название материала.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtName.Focus();
return;
}
if (cmbType.SelectedItem == null)
{
MessageBox.Show("Выберите тип материала.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
cmbType.Focus();
return;
}
if (!decimal.TryParse(txtPrice.Text, out decimal price) || price < 0)
{
MessageBox.Show("Введите корректную цену (неотрицательное число).", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtPrice.Focus();
return;
}
if (!int.TryParse(txtQuantity.Text, out int quantity) || quantity < 0)
{
MessageBox.Show("Введите корректное количество (неотрицательное целое число).", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtQuantity.Focus();
return;
}
if (!int.TryParse(txtMinQuantity.Text, out int minQty) || minQty < 0)
{
MessageBox.Show("Введите корректное минимальное количество.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtMinQuantity.Focus();
return;
}
if (!int.TryParse(txtStockQuantity.Text, out int stockQty) || stockQty < 0)
{
MessageBox.Show("Введите корректное количество на складе.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtStockQuantity.Focus();
return;
}
if (cmbUnit.SelectedItem == null)
{
MessageBox.Show("Выберите единицу измерения.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
cmbUnit.Focus();
return;
}
var typeItem = (ComboItem)cmbType.SelectedItem;
var unitItem = (ComboItem)cmbUnit.SelectedItem;
//ЗАПРОС
string insertQuery = @"
INSERT INTO Materials (Name, Type, Price, Quantity, MinQuantity, QuantityPack, Unit)
VALUES (@name, @type, @price, @quantity, @minQty, @stockQty, @unit)";
var conn = DB.GetInstance().GetConnection();
if (conn.State == ConnectionState.Closed)
conn.Open();
using (var cmd = new MySqlCommand(insertQuery, conn))
{
cmd.Parameters.AddWithValue("@name", txtName.Text.Trim());
cmd.Parameters.AddWithValue("@type", typeItem.Id);
cmd.Parameters.AddWithValue("@price", price);
cmd.Parameters.AddWithValue("@quantity", quantity);
cmd.Parameters.AddWithValue("@minQty", minQty);
cmd.Parameters.AddWithValue("@stockQty", stockQty);
cmd.Parameters.AddWithValue("@unit", unitItem.Id);
try
{
cmd.ExecuteNonQuery();
MessageBox.Show("Материал успешно добавлен!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.DialogResult = DialogResult.OK;
this.Close();
}
catch (Exception ex)
{
MessageBox.Show($"Ошибка при добавлении: {ex.Message}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void LoadTypes() //ЗАГРУЗКА ТИПОВ МАТЕРИАЛОВ
{
string query = "SELECT idTypeMaterial, Name FROM TypeMaterial";
var conn = DB.GetInstance().GetConnection();
if (conn.State == ConnectionState.Closed)
conn.Open();
using (var cmd = new MySqlCommand(query, conn))
{
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
cmbType.Items.Add(new ComboItem
{
Id = reader.GetInt32("idTypeMaterial"),
Name = reader.GetString("Name")
});
}
}
}
}
private void LoadUnits() //ЗАГРУЗКА ЕДИНИЦ
{
string query = "SELECT idUnit, Name FROM Unit";
var conn = DB.GetInstance().GetConnection();
if (conn.State == ConnectionState.Closed)
conn.Open();
using (var cmd = new MySqlCommand(query, conn))
{
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
cmbUnit.Items.Add(new ComboItem
{
Id = reader.GetInt32("idUnit"),
Name = reader.GetString("Name")
});
}
}
}
}
public class ComboItem //НУЖНО ПРОСТО
{
public int Id { get; set; }
public string Name { get; set; }
public override string ToString()
{
return Name;
}
}
private void button1_Click(object sender, EventArgs e)
{
this.Hide();
}
}
}

View File

@ -0,0 +1,337 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
</root>

210
NeshinaDem3/NeshinaDem3/AddInf.Designer.cs generated Normal file
View File

@ -0,0 +1,210 @@
namespace NeshinaDem3
{
partial class AddInf
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddInf));
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.txtName = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.txtCoefficient = new System.Windows.Forms.TextBox();
this.label5 = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this.label7 = new System.Windows.Forms.Label();
this.label8 = new System.Windows.Forms.Label();
this.label9 = new System.Windows.Forms.Label();
this.btnSave = new System.Windows.Forms.Button();
this.btnCancel = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("Comic Sans MS", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label1.Location = new System.Drawing.Point(91, 9);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(148, 40);
this.label1.TabIndex = 8;
this.label1.Text = "Добавить";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(9, 71);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(0, 13);
this.label2.TabIndex = 9;
this.label2.Click += new System.EventHandler(this.label2_Click);
//
// txtName
//
this.txtName.Location = new System.Drawing.Point(12, 87);
this.txtName.Name = "txtName";
this.txtName.Size = new System.Drawing.Size(318, 20);
this.txtName.TabIndex = 10;
this.txtName.TextChanged += new System.EventHandler(this.txtName_TextChanged);
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(9, 121);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(0, 13);
this.label3.TabIndex = 11;
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(9, 174);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(0, 13);
this.label4.TabIndex = 13;
//
// txtCoefficient
//
this.txtCoefficient.Location = new System.Drawing.Point(12, 139);
this.txtCoefficient.Name = "txtCoefficient";
this.txtCoefficient.Size = new System.Drawing.Size(318, 20);
this.txtCoefficient.TabIndex = 14;
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(9, 224);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(0, 13);
this.label5.TabIndex = 15;
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(9, 273);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(0, 13);
this.label6.TabIndex = 17;
this.label6.Click += new System.EventHandler(this.label6_Click);
//
// label7
//
this.label7.AutoSize = true;
this.label7.Location = new System.Drawing.Point(9, 322);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(0, 13);
this.label7.TabIndex = 19;
//
// label8
//
this.label8.AutoSize = true;
this.label8.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label8.Location = new System.Drawing.Point(12, 71);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(57, 15);
this.label8.TabIndex = 20;
this.label8.Text = "Название";
//
// label9
//
this.label9.AutoSize = true;
this.label9.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label9.Location = new System.Drawing.Point(12, 121);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(83, 15);
this.label9.TabIndex = 21;
this.label9.Text = "Коэффициент";
//
// btnSave
//
this.btnSave.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(84)))), ((int)(((byte)(111)))), ((int)(((byte)(148)))));
this.btnSave.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.btnSave.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.btnSave.Location = new System.Drawing.Point(71, 192);
this.btnSave.Name = "btnSave";
this.btnSave.Size = new System.Drawing.Size(173, 23);
this.btnSave.TabIndex = 22;
this.btnSave.Text = "Добавить";
this.btnSave.UseVisualStyleBackColor = false;
this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
//
// btnCancel
//
this.btnCancel.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.btnCancel.Location = new System.Drawing.Point(12, 219);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(67, 23);
this.btnCancel.TabIndex = 23;
this.btnCancel.Text = "Назад";
this.btnCancel.UseVisualStyleBackColor = true;
//
// AddInf
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(207)))), ((int)(((byte)(206)))));
this.ClientSize = new System.Drawing.Size(336, 251);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnSave);
this.Controls.Add(this.label9);
this.Controls.Add(this.label8);
this.Controls.Add(this.label7);
this.Controls.Add(this.label6);
this.Controls.Add(this.label5);
this.Controls.Add(this.txtCoefficient);
this.Controls.Add(this.label4);
this.Controls.Add(this.label3);
this.Controls.Add(this.txtName);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.Name = "AddInf";
this.Text = "AddInf";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox txtName;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox txtCoefficient;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.Button btnSave;
private System.Windows.Forms.Button btnCancel;
}
}

View File

@ -0,0 +1,85 @@
using MySql.Data.MySqlClient;
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;
namespace NeshinaDem3
{
public partial class AddInf : Form
{
public AddInf()
{
InitializeComponent();
}
private void label2_Click(object sender, EventArgs e)
{
}
private void txtName_TextChanged(object sender, EventArgs e)
{
}
private void label6_Click(object sender, EventArgs e)
{
}
private void btnSave_Click(object sender, EventArgs e) //СОХРАНИТЬ ПО КНОПКЕ
{
if (string.IsNullOrWhiteSpace(txtName.Text))
{
MessageBox.Show("Поле 'Название' обязательно для заполнения.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
if (!double.TryParse(txtCoefficient.Text, out double coefficient) || coefficient < 0)
{
MessageBox.Show("Поле 'Коэффициент' должно быть числом ≥ 0.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
var conn = DB.GetInstance().GetConnection();
if (conn.State == ConnectionState.Closed)
conn.Open();
string insertQuery = @"
INSERT INTO TypeProduction (Name, Coefficient)
VALUES (@name, @coefficient)";
using (var cmd = new MySqlCommand(insertQuery, conn))
{
cmd.Parameters.AddWithValue("@name", txtName.Text.Trim());
cmd.Parameters.AddWithValue("@coefficient", coefficient);
try
{
int rowsAffected = cmd.ExecuteNonQuery();
if (rowsAffected > 0)
{
MessageBox.Show("Запись успешно добавлена!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.DialogResult = DialogResult.OK;
this.Close();
}
else
{
MessageBox.Show("Не удалось добавить запись.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
catch (Exception ex)
{
MessageBox.Show($"Ошибка при добавлении: {ex.Message}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
}

View File

@ -0,0 +1,337 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
</root>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
</configuration>

View File

@ -0,0 +1,41 @@
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
namespace NeshinaDem3
{
internal class DB
{
private static DB instance;
private MySqlConnection connection;
//ПОДКЧЛЮЧЕНИЕ
private readonly string connectionString =
"server=192.168.201.207;port=3306;username=ISP41_Neshina;password=ISP41_Neshina;database=ISP41_Neshina_dem2;SslMode=none;Charset=utf8mb4";
private DB()
{
connection = new MySqlConnection(connectionString);
OpenConnection();
}
public static DB GetInstance()
{
if (instance == null)
instance = new DB();
return instance;
}
public void OpenConnection()
{
if (connection.State == ConnectionState.Closed)
connection.Open();
}
public MySqlConnection GetConnection() => connection;
}
}

261
NeshinaDem3/NeshinaDem3/Edit.Designer.cs generated Normal file
View File

@ -0,0 +1,261 @@
namespace NeshinaDem3
{
partial class Edit
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Edit));
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this.label7 = new System.Windows.Forms.Label();
this.label8 = new System.Windows.Forms.Label();
this.txtName = new System.Windows.Forms.TextBox();
this.cmbType = new System.Windows.Forms.ComboBox();
this.txtPrice = new System.Windows.Forms.TextBox();
this.txtQuantity = new System.Windows.Forms.TextBox();
this.txtMinQuantity = new System.Windows.Forms.TextBox();
this.txtStockQuantity = new System.Windows.Forms.TextBox();
this.cmbUnit = new System.Windows.Forms.ComboBox();
this.label1 = new System.Windows.Forms.Label();
this.btnSave = new System.Windows.Forms.Button();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// label2
//
this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label2.Location = new System.Drawing.Point(9, 64);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(57, 15);
this.label2.TabIndex = 9;
this.label2.Text = "Название";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label3.Location = new System.Drawing.Point(9, 115);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(28, 15);
this.label3.TabIndex = 10;
this.label3.Text = "Тип";
//
// label4
//
this.label4.AutoSize = true;
this.label4.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label4.Location = new System.Drawing.Point(9, 168);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(34, 15);
this.label4.TabIndex = 11;
this.label4.Text = "Цена";
//
// label5
//
this.label5.AutoSize = true;
this.label5.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label5.Location = new System.Drawing.Point(9, 221);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(71, 15);
this.label5.TabIndex = 12;
this.label5.Text = "Количество";
//
// label6
//
this.label6.AutoSize = true;
this.label6.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label6.Location = new System.Drawing.Point(9, 275);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(147, 15);
this.label6.TabIndex = 13;
this.label6.Text = "Минимальное количество";
//
// label7
//
this.label7.AutoSize = true;
this.label7.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label7.Location = new System.Drawing.Point(9, 329);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(126, 15);
this.label7.TabIndex = 14;
this.label7.Text = "Количество на складе";
//
// label8
//
this.label8.AutoSize = true;
this.label8.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label8.Location = new System.Drawing.Point(9, 382);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(114, 15);
this.label8.TabIndex = 15;
this.label8.Text = "Единица измерения";
//
// txtName
//
this.txtName.Location = new System.Drawing.Point(12, 80);
this.txtName.Name = "txtName";
this.txtName.Size = new System.Drawing.Size(320, 20);
this.txtName.TabIndex = 16;
//
// cmbType
//
this.cmbType.FormattingEnabled = true;
this.cmbType.Location = new System.Drawing.Point(12, 131);
this.cmbType.Name = "cmbType";
this.cmbType.Size = new System.Drawing.Size(320, 21);
this.cmbType.TabIndex = 17;
//
// txtPrice
//
this.txtPrice.Location = new System.Drawing.Point(12, 184);
this.txtPrice.Name = "txtPrice";
this.txtPrice.Size = new System.Drawing.Size(320, 20);
this.txtPrice.TabIndex = 18;
//
// txtQuantity
//
this.txtQuantity.Location = new System.Drawing.Point(12, 238);
this.txtQuantity.Name = "txtQuantity";
this.txtQuantity.Size = new System.Drawing.Size(320, 20);
this.txtQuantity.TabIndex = 19;
//
// txtMinQuantity
//
this.txtMinQuantity.Location = new System.Drawing.Point(12, 292);
this.txtMinQuantity.Name = "txtMinQuantity";
this.txtMinQuantity.Size = new System.Drawing.Size(320, 20);
this.txtMinQuantity.TabIndex = 20;
//
// txtStockQuantity
//
this.txtStockQuantity.Location = new System.Drawing.Point(12, 345);
this.txtStockQuantity.Name = "txtStockQuantity";
this.txtStockQuantity.Size = new System.Drawing.Size(320, 20);
this.txtStockQuantity.TabIndex = 21;
//
// cmbUnit
//
this.cmbUnit.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbUnit.FormattingEnabled = true;
this.cmbUnit.Location = new System.Drawing.Point(12, 399);
this.cmbUnit.Name = "cmbUnit";
this.cmbUnit.Size = new System.Drawing.Size(320, 21);
this.cmbUnit.TabIndex = 22;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("Comic Sans MS", 24F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label1.Location = new System.Drawing.Point(40, 9);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(269, 45);
this.label1.TabIndex = 23;
this.label1.Text = "Редактирование";
//
// btnSave
//
this.btnSave.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(84)))), ((int)(((byte)(111)))), ((int)(((byte)(148)))));
this.btnSave.Font = new System.Drawing.Font("Comic Sans MS", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.btnSave.ForeColor = System.Drawing.SystemColors.ButtonHighlight;
this.btnSave.Location = new System.Drawing.Point(81, 447);
this.btnSave.Name = "btnSave";
this.btnSave.Size = new System.Drawing.Size(184, 64);
this.btnSave.TabIndex = 24;
this.btnSave.Text = "Сохранить изменения";
this.btnSave.UseVisualStyleBackColor = false;
this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
//
// button1
//
this.button1.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.button1.Location = new System.Drawing.Point(12, 488);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(63, 23);
this.button1.TabIndex = 25;
this.button1.Text = "Назад";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Edit
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(207)))), ((int)(((byte)(206)))));
this.ClientSize = new System.Drawing.Size(344, 523);
this.Controls.Add(this.button1);
this.Controls.Add(this.btnSave);
this.Controls.Add(this.label1);
this.Controls.Add(this.cmbUnit);
this.Controls.Add(this.txtStockQuantity);
this.Controls.Add(this.txtMinQuantity);
this.Controls.Add(this.txtQuantity);
this.Controls.Add(this.txtPrice);
this.Controls.Add(this.cmbType);
this.Controls.Add(this.txtName);
this.Controls.Add(this.label8);
this.Controls.Add(this.label7);
this.Controls.Add(this.label6);
this.Controls.Add(this.label5);
this.Controls.Add(this.label4);
this.Controls.Add(this.label3);
this.Controls.Add(this.label2);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.Name = "Edit";
this.Text = "Edit";
this.Load += new System.EventHandler(this.Edit_Load_1);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.TextBox txtName;
private System.Windows.Forms.ComboBox cmbType;
private System.Windows.Forms.TextBox txtPrice;
private System.Windows.Forms.TextBox txtMinQuantity;
private System.Windows.Forms.TextBox txtStockQuantity;
private System.Windows.Forms.ComboBox cmbUnit;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button btnSave;
private System.Windows.Forms.TextBox txtQuantity;
private System.Windows.Forms.Button button1;
}
}

View File

@ -0,0 +1,261 @@
using MySql.Data.MySqlClient;
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 static NeshinaDem3.Add;
namespace NeshinaDem3
{
public partial class Edit : Form
{
public Edit()
{
InitializeComponent();
}
public int MaterialId { get; set; }
private void btnSave_Click(object sender, EventArgs e) //СОХРАНЕНИЕ С ПРОВЕРКАМИ
{
if (string.IsNullOrWhiteSpace(txtName.Text))
{
MessageBox.Show("Введите название материала.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtName.Focus();
return;
}
if (cmbType.SelectedItem == null)
{
MessageBox.Show("Выберите тип материала.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
cmbType.Focus();
return;
}
if (!decimal.TryParse(txtPrice.Text, out decimal price) || price < 0)
{
MessageBox.Show("Введите корректную цену (неотрицательное число).", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtPrice.Focus();
return;
}
if (!int.TryParse(txtQuantity.Text, out int quantity) || quantity < 0)
{
MessageBox.Show("Введите корректное количество (неотрицательное целое число).", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtQuantity.Focus();
return;
}
if (!int.TryParse(txtMinQuantity.Text, out int minQty) || minQty < 0)
{
MessageBox.Show("Введите корректное минимальное количество.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtMinQuantity.Focus();
return;
}
if (!int.TryParse(txtStockQuantity.Text, out int stockQty) || stockQty < 0)
{
MessageBox.Show("Введите корректное количество на складе.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtStockQuantity.Focus();
return;
}
if (cmbUnit.SelectedItem == null)
{
MessageBox.Show("Выберите единицу измерения.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
cmbUnit.Focus();
return;
}
var typeItem = (ComboItem)cmbType.SelectedItem;
var unitItem = (ComboItem)cmbUnit.SelectedItem;
//ОБНОВЛЕНИЕ
string updateQuery = @"
UPDATE Materials
SET
Name = @name,
Type = @type,
Price = @price,
Quantity = @quantity,
MinQuantity = @minQty,
QuantityPack = @stockQty,
Unit = @unit
WHERE idMaterials = @id";
var conn = DB.GetInstance().GetConnection();
if (conn.State == ConnectionState.Closed)
conn.Open();
using (var cmd = new MySqlCommand(updateQuery, conn))
{
cmd.Parameters.AddWithValue("@name", txtName.Text.Trim());
cmd.Parameters.AddWithValue("@type", typeItem.Id);
cmd.Parameters.AddWithValue("@price", price);
cmd.Parameters.AddWithValue("@quantity", quantity);
cmd.Parameters.AddWithValue("@minQty", minQty);
cmd.Parameters.AddWithValue("@stockQty", stockQty);
cmd.Parameters.AddWithValue("@unit", unitItem.Id);
cmd.Parameters.AddWithValue("@id", MaterialId);
try
{
int rowsAffected = cmd.ExecuteNonQuery();
if (rowsAffected > 0)
{
MessageBox.Show("Материал успешно обновлён!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.DialogResult = DialogResult.OK;
this.Close();
}
else
{
MessageBox.Show("Не удалось обновить материал. Возможно, он был удалён.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
this.DialogResult = DialogResult.Cancel;
this.Close();
}
}
catch (Exception ex)
{
MessageBox.Show($"Ошибка при обновлении: {ex.Message}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void LoadMaterialData() //ЗАГРУЗКА МАТЕРИАЛОВ
{
if (MaterialId <= 0)
{
MessageBox.Show("Некорректный ID материала.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
this.DialogResult = DialogResult.Cancel;
this.Close();
return;
}
LoadTypes();
LoadUnits();
string query = @"
SELECT
m.Name,
m.Type,
m.Price,
m.Quantity,
m.MinQuantity,
m.QuantityPack,
m.Unit
FROM Materials m
WHERE m.idMaterials = @id";
var conn = DB.GetInstance().GetConnection();
if (conn.State == ConnectionState.Closed)
conn.Open();
using (var cmd = new MySqlCommand(query, conn))
{
cmd.Parameters.AddWithValue("@id", MaterialId);
using (var reader = cmd.ExecuteReader())
{
if (reader.Read())
{
txtName.Text = reader.GetString("Name");
decimal price = reader.GetDecimal("Price");
txtPrice.Text = price.ToString();
int quantity = reader.GetInt32("Quantity");
txtQuantity.Text = quantity.ToString();
int minQty = reader.GetInt32("MinQuantity");
txtMinQuantity.Text = minQty.ToString();
int stockQty = reader.GetInt32("QuantityPack");
txtStockQuantity.Text = stockQty.ToString();
SelectComboBoxItem(cmbType, reader.GetInt32("Type"));
SelectComboBoxItem(cmbUnit, reader.GetInt32("Unit"));
}
else
{
MessageBox.Show("Материал не найден. Возможно, он был удалён.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
this.DialogResult = DialogResult.Cancel;
this.Close();
}
}
}
}
private void SelectComboBoxItem(ComboBox comboBox, int id)
{
foreach (ComboItem item in comboBox.Items)
{
if (item.Id == id)
{
comboBox.SelectedItem = item;
break;
}
}
}
private void LoadTypes() //ЗАГРУЗКА ТИПОВ МАТЕРИАЛОВ
{
string query = "SELECT idTypeMaterial, Name FROM TypeMaterial";
var conn = DB.GetInstance().GetConnection();
if (conn.State == ConnectionState.Closed)
conn.Open();
using (var cmd = new MySqlCommand(query, conn))
{
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
cmbType.Items.Add(new ComboItem
{
Id = reader.GetInt32("idTypeMaterial"),
Name = reader.GetString("Name")
});
}
}
}
}
private void LoadUnits() //ЗАГРУЗКА ЕДИНИЦ
{
string query = "SELECT idUnit, Name FROM Unit";
var conn = DB.GetInstance().GetConnection();
if (conn.State == ConnectionState.Closed)
conn.Open();
using (var cmd = new MySqlCommand(query, conn))
{
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
cmbUnit.Items.Add(new ComboItem
{
Id = reader.GetInt32("idUnit"),
Name = reader.GetString("Name")
});
}
}
}
}
private void Edit_Load_1(object sender, EventArgs e)
{
LoadMaterialData();
}
private void button1_Click(object sender, EventArgs e)
{
this.Hide();
}
}
}

View File

@ -0,0 +1,337 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
</root>

View File

@ -0,0 +1,143 @@
namespace NeshinaDem3
{
partial class EditInf
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditInf));
this.label8 = new System.Windows.Forms.Label();
this.txtName = new System.Windows.Forms.TextBox();
this.label9 = new System.Windows.Forms.Label();
this.txtCoefficient = new System.Windows.Forms.TextBox();
this.btnSave = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.btnCancel = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// label8
//
this.label8.AutoSize = true;
this.label8.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label8.Location = new System.Drawing.Point(6, 81);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(57, 15);
this.label8.TabIndex = 21;
this.label8.Text = "Название";
//
// txtName
//
this.txtName.Location = new System.Drawing.Point(9, 97);
this.txtName.Name = "txtName";
this.txtName.Size = new System.Drawing.Size(318, 20);
this.txtName.TabIndex = 22;
//
// label9
//
this.label9.AutoSize = true;
this.label9.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label9.Location = new System.Drawing.Point(6, 137);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(83, 15);
this.label9.TabIndex = 23;
this.label9.Text = "Коэффициент";
//
// txtCoefficient
//
this.txtCoefficient.Location = new System.Drawing.Point(6, 153);
this.txtCoefficient.Name = "txtCoefficient";
this.txtCoefficient.Size = new System.Drawing.Size(318, 20);
this.txtCoefficient.TabIndex = 24;
//
// btnSave
//
this.btnSave.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(84)))), ((int)(((byte)(111)))), ((int)(((byte)(148)))));
this.btnSave.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.btnSave.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.btnSave.Location = new System.Drawing.Point(74, 192);
this.btnSave.Name = "btnSave";
this.btnSave.Size = new System.Drawing.Size(173, 23);
this.btnSave.TabIndex = 25;
this.btnSave.Text = "Редактировать";
this.btnSave.UseVisualStyleBackColor = false;
this.btnSave.Click += new System.EventHandler(this.button1_Click);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("Comic Sans MS", 24F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label1.Location = new System.Drawing.Point(40, 27);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(244, 45);
this.label1.TabIndex = 26;
this.label1.Text = "Редактировать";
//
// btnCancel
//
this.btnCancel.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.btnCancel.Location = new System.Drawing.Point(6, 216);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(62, 23);
this.btnCancel.TabIndex = 27;
this.btnCancel.Text = "Назад";
this.btnCancel.UseVisualStyleBackColor = true;
this.btnCancel.Click += new System.EventHandler(this.button2_Click);
//
// EditInf
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(207)))), ((int)(((byte)(206)))));
this.ClientSize = new System.Drawing.Size(336, 251);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.label1);
this.Controls.Add(this.btnSave);
this.Controls.Add(this.txtCoefficient);
this.Controls.Add(this.label9);
this.Controls.Add(this.txtName);
this.Controls.Add(this.label8);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.Name = "EditInf";
this.Text = "EditInf";
this.Load += new System.EventHandler(this.EditInf_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label8;
private System.Windows.Forms.TextBox txtName;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.TextBox txtCoefficient;
private System.Windows.Forms.Button btnSave;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button btnCancel;
}
}

View File

@ -0,0 +1,114 @@
using MySql.Data.MySqlClient;
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;
namespace NeshinaDem3
{
public partial class EditInf : Form
{
public EditInf()
{
InitializeComponent();
}
public int TypeProductionId { get; set; }
private void button1_Click(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(txtName.Text))
{
MessageBox.Show("Поле 'Название' обязательно для заполнения.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
if (!double.TryParse(txtCoefficient.Text, out double coefficient) || coefficient < 0)
{
MessageBox.Show("Поле 'Коэффициент' должно быть числом ≥ 0.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
var conn = DB.GetInstance().GetConnection();
if (conn.State == ConnectionState.Closed)
conn.Open();
string updateQuery = @"
UPDATE TypeProduction
SET Name = @name, Coefficient = @coefficient
WHERE idTypeProduction = @id";
using (var cmd = new MySqlCommand(updateQuery, conn))
{
cmd.Parameters.AddWithValue("@name", txtName.Text.Trim());
cmd.Parameters.AddWithValue("@coefficient", coefficient);
cmd.Parameters.AddWithValue("@id", TypeProductionId);
try
{
int rowsAffected = cmd.ExecuteNonQuery();
if (rowsAffected > 0)
{
MessageBox.Show("Запись успешно обновлена!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.DialogResult = DialogResult.OK;
this.Close();
}
else
{
MessageBox.Show("Не удалось обновить запись. Возможно, она была удалена.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
catch (Exception ex)
{
MessageBox.Show($"Ошибка при сохранении: {ex.Message}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void button2_Click(object sender, EventArgs e)
{
this.Hide();
}
private void EditInf_Load(object sender, EventArgs e)
{
if (TypeProductionId <= 0)
{
MessageBox.Show("Не указан ID записи для редактирования.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
this.DialogResult = DialogResult.Cancel;
this.Close();
return;
}
var conn = DB.GetInstance().GetConnection();
if (conn.State == ConnectionState.Closed)
conn.Open();
string query = "SELECT Name, Coefficient FROM TypeProduction WHERE idTypeProduction = @id";
using (var cmd = new MySqlCommand(query, conn))
{
cmd.Parameters.AddWithValue("@id", TypeProductionId);
using (var reader = cmd.ExecuteReader())
{
if (reader.Read())
{
txtName.Text = reader["Name"].ToString();
txtCoefficient.Text = reader["Coefficient"].ToString();
}
else
{
MessageBox.Show("Запись не найдена.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
this.DialogResult = DialogResult.Cancel;
this.Close();
}
}
}
}
}
}

View File

@ -0,0 +1,337 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
</root>

213
NeshinaDem3/NeshinaDem3/Form1.Designer.cs generated Normal file
View File

@ -0,0 +1,213 @@
namespace NeshinaDem3
{
partial class MainForm
{
/// <summary>
/// Обязательная переменная конструктора.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Код, автоматически созданный конструктором форм Windows
/// <summary>
/// Требуемый метод для поддержки конструктора — не изменяйте
/// содержимое этого метода с помощью редактора кода.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
this.dgvAll = new System.Windows.Forms.DataGridView();
this.btnAdd = new System.Windows.Forms.Button();
this.btnEdit = new System.Windows.Forms.Button();
this.btnDelete = new System.Windows.Forms.Button();
this.btnCalculate = new System.Windows.Forms.Button();
this.menu = new System.Windows.Forms.MenuStrip();
this.поставщикиToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.материалыToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.дополнительнаяИнформацияToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.panel1 = new System.Windows.Forms.Panel();
this.label1 = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.dgvAll)).BeginInit();
this.menu.SuspendLayout();
this.SuspendLayout();
//
// dgvAll
//
this.dgvAll.AllowUserToAddRows = false;
this.dgvAll.AllowUserToDeleteRows = false;
this.dgvAll.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
this.dgvAll.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;
this.dgvAll.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(207)))), ((int)(((byte)(206)))));
this.dgvAll.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dgvAll.Location = new System.Drawing.Point(12, 36);
this.dgvAll.Name = "dgvAll";
this.dgvAll.ReadOnly = true;
this.dgvAll.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dgvAll.Size = new System.Drawing.Size(487, 281);
this.dgvAll.TabIndex = 0;
this.dgvAll.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellContentClick);
//
// btnAdd
//
this.btnAdd.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(84)))), ((int)(((byte)(111)))), ((int)(((byte)(148)))));
this.btnAdd.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.btnAdd.ForeColor = System.Drawing.SystemColors.ButtonFace;
this.btnAdd.Location = new System.Drawing.Point(525, 36);
this.btnAdd.Name = "btnAdd";
this.btnAdd.Size = new System.Drawing.Size(263, 23);
this.btnAdd.TabIndex = 1;
this.btnAdd.Text = "Добавить";
this.btnAdd.UseVisualStyleBackColor = false;
this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
//
// btnEdit
//
this.btnEdit.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(84)))), ((int)(((byte)(111)))), ((int)(((byte)(148)))));
this.btnEdit.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.btnEdit.ForeColor = System.Drawing.SystemColors.Control;
this.btnEdit.Location = new System.Drawing.Point(525, 75);
this.btnEdit.Name = "btnEdit";
this.btnEdit.Size = new System.Drawing.Size(263, 23);
this.btnEdit.TabIndex = 2;
this.btnEdit.Text = "Редактировать";
this.btnEdit.UseVisualStyleBackColor = false;
this.btnEdit.Click += new System.EventHandler(this.btnEdit_Click);
//
// btnDelete
//
this.btnDelete.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(84)))), ((int)(((byte)(111)))), ((int)(((byte)(148)))));
this.btnDelete.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.btnDelete.ForeColor = System.Drawing.SystemColors.Control;
this.btnDelete.Location = new System.Drawing.Point(525, 117);
this.btnDelete.Name = "btnDelete";
this.btnDelete.Size = new System.Drawing.Size(263, 23);
this.btnDelete.TabIndex = 3;
this.btnDelete.Text = "Удалить";
this.btnDelete.UseVisualStyleBackColor = false;
this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click);
//
// btnCalculate
//
this.btnCalculate.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(84)))), ((int)(((byte)(111)))), ((int)(((byte)(148)))));
this.btnCalculate.Font = new System.Drawing.Font("Comic Sans MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.btnCalculate.ForeColor = System.Drawing.SystemColors.Control;
this.btnCalculate.Location = new System.Drawing.Point(293, 323);
this.btnCalculate.Name = "btnCalculate";
this.btnCalculate.Size = new System.Drawing.Size(206, 23);
this.btnCalculate.TabIndex = 5;
this.btnCalculate.Text = "Можно произвести";
this.btnCalculate.UseVisualStyleBackColor = false;
this.btnCalculate.Click += new System.EventHandler(this.btnCalculate_Click);
//
// menu
//
this.menu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.поставщикиToolStripMenuItem,
this.материалыToolStripMenuItem,
this.дополнительнаяИнформацияToolStripMenuItem});
this.menu.Location = new System.Drawing.Point(0, 0);
this.menu.Name = "menu";
this.menu.Size = new System.Drawing.Size(800, 25);
this.menu.TabIndex = 8;
this.menu.Text = "menuStrip1";
//
// поставщикиToolStripMenuItem
//
this.поставщикиToolStripMenuItem.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.поставщикиToolStripMenuItem.Name = "поставщикиToolStripMenuItem";
this.поставщикиToolStripMenuItem.Size = new System.Drawing.Size(94, 21);
this.поставщикиToolStripMenuItem.Text = "Поставщики";
this.поставщикиToolStripMenuItem.Click += new System.EventHandler(this.поставщикиToolStripMenuItem_Click);
//
// материалыToolStripMenuItem
//
this.материалыToolStripMenuItem.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.материалыToolStripMenuItem.Name = атериалыToolStripMenuItem";
this.материалыToolStripMenuItem.Size = new System.Drawing.Size(85, 21);
this.материалыToolStripMenuItem.Text = "Материалы";
this.материалыToolStripMenuItem.Click += new System.EventHandler(this.материалыToolStripMenuItem_Click);
//
// дополнительнаяИнформацияToolStripMenuItem
//
this.дополнительнаяИнформацияToolStripMenuItem.Font = new System.Drawing.Font("Comic Sans MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.дополнительнаяИнформацияToolStripMenuItem.Name = ополнительнаяИнформацияToolStripMenuItem";
this.дополнительнаяИнформацияToolStripMenuItem.Size = new System.Drawing.Size(197, 21);
this.дополнительнаяИнформацияToolStripMenuItem.Text = "Дополнительная информация";
this.дополнительнаяИнформацияToolStripMenuItem.Click += new System.EventHandler(this.дополнительнаяИнформацияToolStripMenuItem_Click);
//
// panel1
//
this.panel1.BackgroundImage = global::NeshinaDem3.Properties.Resources.Мозаика;
this.panel1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
this.panel1.Location = new System.Drawing.Point(741, 393);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(47, 45);
this.panel1.TabIndex = 9;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("Comic Sans MS", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label1.Location = new System.Drawing.Point(641, 403);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(91, 27);
this.label1.TabIndex = 10;
this.label1.Text = "Мозаика";
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.White;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.label1);
this.Controls.Add(this.panel1);
this.Controls.Add(this.menu);
this.Controls.Add(this.btnCalculate);
this.Controls.Add(this.btnDelete);
this.Controls.Add(this.btnEdit);
this.Controls.Add(this.btnAdd);
this.Controls.Add(this.dgvAll);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MainMenuStrip = this.menu;
this.MaximizeBox = false;
this.Name = "MainForm";
this.Text = "Main";
((System.ComponentModel.ISupportInitialize)(this.dgvAll)).EndInit();
this.menu.ResumeLayout(false);
this.menu.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.DataGridView dgvAll;
private System.Windows.Forms.Button btnAdd;
private System.Windows.Forms.Button btnEdit;
private System.Windows.Forms.Button btnDelete;
private System.Windows.Forms.Button btnCalculate;
private System.Windows.Forms.MenuStrip menu;
private System.Windows.Forms.ToolStripMenuItem поставщикиToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem материалыToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem дополнительнаяИнформацияToolStripMenuItem;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Label label1;
}
}

View File

@ -0,0 +1,497 @@
using MySql.Data.MySqlClient;
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;
namespace NeshinaDem3
{
public partial class MainForm : Form
{
public enum ViewMode
{
Materials,
Suppliers,
TypeProduction
}
private ViewMode currentMode = ViewMode.Materials;
public int CalculateProductOutput(
int productTypeId,
int materialTypeId,
int rawMaterialAmount,
double param1,
double param2)
{
if (productTypeId <= 0 ||
materialTypeId <= 0 ||
rawMaterialAmount <= 0 ||
param1 <= 0 ||
param2 <= 0)
{
return -1;
}
double productCoeff = 0;
double lossPercent = 0;
var conn = DB.GetInstance().GetConnection();
if (conn.State == ConnectionState.Closed)
conn.Open();
string productQuery = "SELECT Coefficient FROM TypeProduction WHERE idTypeProduction = @productId";
using (var cmd = new MySqlCommand(productQuery, conn))
{
cmd.Parameters.AddWithValue("@productId", productTypeId);
var result = cmd.ExecuteScalar();
if (result == null || result == DBNull.Value)
{
return -1; // Тип продукции не найден
}
productCoeff = Convert.ToDouble(result);
}
string materialQuery = "SELECT Procent FROM TypeWithProcent WHERE idTypeWithProcent = @materialId";
using (var cmd = new MySqlCommand(materialQuery, conn))
{
cmd.Parameters.AddWithValue("@materialId", materialTypeId);
var result = cmd.ExecuteScalar();
if (result == null || result == DBNull.Value)
{
return -1; // Тип материала не найден
}
lossPercent = Convert.ToDouble(result);
}
if (lossPercent < 0 || lossPercent >= 100)
{
return -1; // Невозможные потери
}
double baseMaterialPerUnit = param1 * param2 * productCoeff;
if (baseMaterialPerUnit <= 0)
{
return -1; // Некорректный расчёт
}
double effectiveMaterialPerUnit = baseMaterialPerUnit / (1.0 - lossPercent / 100.0);
if (effectiveMaterialPerUnit > rawMaterialAmount)
{
return 0; // Сырья не хватает даже на 1 шт.
}
int maxUnits = (int)Math.Floor((double)rawMaterialAmount / effectiveMaterialPerUnit);
return Math.Max(0, maxUnits);
}
public MainForm()
{
InitializeComponent();
btnAdd.Visible = true;
btnEdit.Visible = true;
btnDelete.Visible = true;
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void LoadMaterials() //ЗАГРУЗКА МАТЕРИАЛОВ
{
string query = @"
SELECT
m.idMaterials,
m.Name,
t.Name AS TypeName,
m.Price,
m.Quantity,
m.MinQuantity,
m.QuantityPack,
u.Name AS UnitName
FROM Materials m
LEFT JOIN TypeMaterial t ON m.Type = t.idTypeMaterial
LEFT JOIN Unit u ON m.Unit = u.idUnit";
var conn = DB.GetInstance().GetConnection();
if (conn.State == ConnectionState.Closed)
conn.Open();
DataTable dt;
using (var cmd = new MySqlCommand(query, conn))
{
var adapter = new MySqlDataAdapter(cmd);
dt = new DataTable();
adapter.Fill(dt);
}
dgvAll.DataSource = dt;
if (dgvAll.Columns.Contains("idMaterials"))
dgvAll.Columns["idMaterials"].Visible = false;
dgvAll.Columns["Name"].HeaderText = "Наименование";
dgvAll.Columns["TypeName"].HeaderText = "Тип";
dgvAll.Columns["Price"].HeaderText = "Цена";
dgvAll.Columns["Quantity"].HeaderText = "Кол-во на складе";
dgvAll.Columns["MinQuantity"].HeaderText = "Мин. кол-во";
dgvAll.Columns["QuantityPack"].HeaderText = "Кол-во в упаковке";
dgvAll.Columns["UnitName"].HeaderText = "Ед. изм.";
if(dgvAll.Columns.Contains("MinPartyCost"))
dgvAll.Columns.Remove("MinPartyCost");
var minPartyCostCol = new DataGridViewTextBoxColumn
{
Name = "MinPartyCost",
HeaderText = "Стоимость минимальной партии",
ReadOnly = true,
DefaultCellStyle = { Format = "C2" }
};
dgvAll.Columns.Add(minPartyCostCol);
foreach (DataGridViewRow row in dgvAll.Rows)
{
if (row.IsNewRow) continue;
try
{
if (row.Cells["MinQuantity"].Value == null ||
row.Cells["Quantity"].Value == null ||
row.Cells["QuantityPack"].Value == null ||
row.Cells["Price"].Value == null)
{
row.Cells["MinPartyCost"].Value = 0m;
continue;
}
int minQty = Convert.ToInt32(row.Cells["MinQuantity"].Value);
int stockQty = Convert.ToInt32(row.Cells["Quantity"].Value);
int packQty = Convert.ToInt32(row.Cells["QuantityPack"].Value);
decimal price = Convert.ToDecimal(row.Cells["Price"].Value);
decimal cost = 0m;
if (stockQty < minQty)
{
int deficit = minQty - stockQty;
if (packQty > 0) // Защита от деления на ноль
{
int packsNeeded = (int)Math.Ceiling((double)deficit / packQty);
int orderVolume = packsNeeded * packQty;
cost = orderVolume * price;
}
}
cost = Math.Max(0m, Math.Round(cost, 2));
row.Cells["MinPartyCost"].Value = cost;
}
catch (Exception ex)
{
row.Cells["MinPartyCost"].Value = 0m;
}
currentMode = ViewMode.Materials;
btnAdd.Visible = true;
btnEdit.Visible = true;
btnDelete.Visible = true;
this.Text = "Управление материалами";
}
}
private void LoadSuppliers() //ЗАГРУЗКА ПОСТАВЩИКОВ
{
string query = @"SELECT
m.Name,
y.Name,
m.INN,
m.Rating,
m.Date FROM Supplier m
left join TypeSupplier y on m.Type = y.idTypeSupplier";
var conn = DB.GetInstance().GetConnection();
if (conn.State == ConnectionState.Closed)
conn.Open();
using (var cmd = new MySqlCommand(query, conn))
{
var adapter = new MySqlDataAdapter(cmd);
var dt = new DataTable();
adapter.Fill(dt);
dgvAll.DataSource = dt;
if (dgvAll.Columns.Contains("TotalCost"))
dgvAll.Columns.Remove("TotalCost");
}
currentMode = ViewMode.Suppliers;
btnAdd.Visible = false; // или true, если у вас будет AddSupplier
btnEdit.Visible = false;
btnDelete.Visible = false;
this.Text = "Поставщики";
}
private bool isShowingSuppliers = false;
private void btnAdd_Click(object sender, EventArgs e)
{
switch (currentMode)
{
case ViewMode.Materials:
var addForm = new Add();
if (addForm.ShowDialog() == DialogResult.OK)
{
LoadMaterials();
}
break;
case ViewMode.TypeProduction:
var addInfForm = new AddInf();
if (addInfForm.ShowDialog() == DialogResult.OK)
{
Information(); // перезагружаем данные
}
break;
}
}
private void btnEdit_Click(object sender, EventArgs e) //РЕДАКТИРОВАНИЕ
{
if (dgvAll.SelectedRows.Count == 0)
{
MessageBox.Show("Выберите строку для редактирования.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
var selectedRow = dgvAll.SelectedRows[0];
switch (currentMode)
{
case ViewMode.Materials:
if (selectedRow.Cells["idMaterials"].Value == null)
{
MessageBox.Show("Не удалось получить ID материала.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
int materialId = Convert.ToInt32(selectedRow.Cells["idMaterials"].Value);
var editForm = new Edit { MaterialId = materialId };
if (editForm.ShowDialog() == DialogResult.OK)
{
LoadMaterials();
}
break;
case ViewMode.TypeProduction:
if (selectedRow.Cells["idTypeProduction"].Value == null)
{
MessageBox.Show("Не удалось получить ID записи.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
int typeId = Convert.ToInt32(selectedRow.Cells["idTypeProduction"].Value);
var editInfForm = new EditInf { TypeProductionId = typeId };
if (editInfForm.ShowDialog() == DialogResult.OK)
{
Information();
}
break;
}
}
private void btnDelete_Click(object sender, EventArgs e) //УДАЛЕНИЕ
{
if (dgvAll.SelectedRows.Count == 0)
{
MessageBox.Show("Выберите строку для удаления.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
var selectedRow = dgvAll.SelectedRows[0];
switch (currentMode)
{
case ViewMode.Materials:
if (selectedRow.Cells["idMaterials"].Value == null)
{
MessageBox.Show("Не удалось получить ID материала.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
int materialId = Convert.ToInt32(selectedRow.Cells["idMaterials"].Value);
string materialName = selectedRow.Cells["Name"]?.Value?.ToString() ?? "неизвестный";
var result = MessageBox.Show(
$"Вы уверены, что хотите удалить материал:\n\n«{materialName}»?\n\nЭто действие нельзя отменить.",
"Подтверждение удаления",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning
);
if (result == DialogResult.No)
return;
string deleteQuery = "DELETE FROM Materials WHERE idMaterials = @id";
var conn = DB.GetInstance().GetConnection();
if (conn.State == ConnectionState.Closed)
conn.Open();
using (var cmd = new MySqlCommand(deleteQuery, conn))
{
cmd.Parameters.AddWithValue("@id", materialId);
try
{
int rowsAffected = cmd.ExecuteNonQuery();
if (rowsAffected > 0)
{
MessageBox.Show("Материал успешно удалён!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
LoadMaterials();
}
else
{
MessageBox.Show("Не удалось удалить материал. Возможно, он уже был удалён.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
catch (Exception ex)
{
MessageBox.Show($"Ошибка при удалении: {ex.Message}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
break;
case ViewMode.TypeProduction:
if (selectedRow.Cells["idTypeProduction"].Value == null)
{
MessageBox.Show("Не удалось получить ID записи.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
int typeId = Convert.ToInt32(selectedRow.Cells["idTypeProduction"].Value);
string typeName = selectedRow.Cells["Name"]?.Value?.ToString() ?? "неизвестный";
var confirmResult = MessageBox.Show(
$"Вы уверены, что хотите удалить запись:\n\n«{typeName}»?",
"Подтверждение удаления",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning
);
if (confirmResult == DialogResult.No)
return;
string deleteTypeQuery = "DELETE FROM TypeProduction WHERE idTypeProduction = @id";
var typeConn = DB.GetInstance().GetConnection();
if (typeConn.State == ConnectionState.Closed)
typeConn.Open();
using (var cmd = new MySqlCommand(deleteTypeQuery, typeConn))
{
cmd.Parameters.AddWithValue("@id", typeId);
try
{
int rowsAffected = cmd.ExecuteNonQuery();
if (rowsAffected > 0)
{
MessageBox.Show("Запись успешно удалена!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
Information(); // перезагружаем таблицу TypeProduction
}
else
{
MessageBox.Show("Запись не найдена или уже удалена.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
catch (Exception ex)
{
MessageBox.Show($"Ошибка при удалении: {ex.Message}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
break;
default:
MessageBox.Show("Удаление не поддерживается для текущего режима.", "Информация", MessageBoxButtons.OK, MessageBoxIcon.Information);
break;
}
}
private void btnCalculate_Click(object sender, EventArgs e) //ЧЁТ СЧИТАЕТ
{
int output = CalculateProductOutput(
productTypeId: 1,
materialTypeId: 2,
rawMaterialAmount: 1000,
param1: 1.5,
param2: 2.0
);
if (output == -1)
{
MessageBox.Show("Ошибка: неверные параметры или типы не найдены.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
MessageBox.Show($"Можно произвести: {output} единиц продукции.", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void поставщикиToolStripMenuItem_Click(object sender, EventArgs e) //ЗАГРУЗКА ПОСТАВЩИКОВ ЧЕРЕЗ МЕНЮ И СКРЫТИЕ КНОПОК
{
if (isShowingSuppliers)
{
LoadMaterials();
btnAdd.Visible = true;
btnEdit.Visible = true;
btnDelete.Visible = true;
}
else
{
LoadSuppliers();
btnAdd.Visible = false;
btnEdit.Visible = false;
btnDelete.Visible = false;
}
isShowingSuppliers = !isShowingSuppliers;
}
private void материалыToolStripMenuItem_Click(object sender, EventArgs e)
{
LoadMaterials();
}
private void дополнительнаяИнформацияToolStripMenuItem_Click(object sender, EventArgs e)
{
Information();
}
private void Information()
{
string query = "SELECT * FROM TypeProduction";
var conn = DB.GetInstance().GetConnection();
if (conn.State == ConnectionState.Closed)
conn.Open();
DataTable dt;
using (var cmd = new MySqlCommand(query, conn))
{
var adapter = new MySqlDataAdapter(cmd);
dt = new DataTable();
adapter.Fill(dt);
}
dgvAll.DataSource = dt;
currentMode = ViewMode.TypeProduction;
// Показываем кнопки для TypeProduction
btnAdd.Visible = true;
btnEdit.Visible = true;
btnDelete.Visible = true;
// Опционально: обновить заголовок формы
this.Text = "Дополнительная информация — Типы продукции";
}
}
}

View File

@ -0,0 +1,340 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="menu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>4, 18</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
</root>

View File

@ -0,0 +1,127 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{E6B40B3D-4197-489D-AD89-F7FDABAF4249}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>NeshinaDem3</RootNamespace>
<AssemblyName>NeshinaDem3</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="MySql.Data">
<HintPath>..\..\..\Users\Student\Desktop\MySql.Data.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Add.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Add.Designer.cs">
<DependentUpon>Add.cs</DependentUpon>
</Compile>
<Compile Include="AddInf.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="AddInf.Designer.cs">
<DependentUpon>AddInf.cs</DependentUpon>
</Compile>
<Compile Include="DB.cs" />
<Compile Include="Edit.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Edit.Designer.cs">
<DependentUpon>Edit.cs</DependentUpon>
</Compile>
<Compile Include="EditInf.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="EditInf.Designer.cs">
<DependentUpon>EditInf.cs</DependentUpon>
</Compile>
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Add.resx">
<DependentUpon>Add.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="AddInf.resx">
<DependentUpon>AddInf.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Edit.resx">
<DependentUpon>Edit.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="EditInf.resx">
<DependentUpon>EditInf.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\Мозаика.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace NeshinaDem3
{
internal static class Program
{
/// <summary>
/// Главная точка входа для приложения.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
}

View File

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Общие сведения об этой сборке предоставляются следующим набором
// набора атрибутов. Измените значения этих атрибутов для изменения сведений,
// связанных со сборкой.
[assembly: AssemblyTitle("NeshinaDem3")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("NeshinaDem3")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми
// для компонентов COM. Если необходимо обратиться к типу в этой сборке через
// COM, следует установить атрибут ComVisible в TRUE для этого типа.
[assembly: ComVisible(false)]
// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
[assembly: Guid("e6b40b3d-4197-489d-ad89-f7fdabaf4249")]
// Сведения о версии сборки состоят из указанных ниже четырех значений:
//
// Основной номер версии
// Дополнительный номер версии
// Номер сборки
// Редакция
//
// Можно задать все значения или принять номера сборки и редакции по умолчанию
// используя "*", как показано ниже:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -0,0 +1,73 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Этот код создан программой.
// Исполняемая версия:4.0.30319.42000
//
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// </auto-generated>
//------------------------------------------------------------------------------
namespace NeshinaDem3.Properties {
using System;
/// <summary>
/// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
/// </summary>
// Этот класс создан автоматически классом StronglyTypedResourceBuilder
// с помощью такого средства, как ResGen или Visual Studio.
// Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
// с параметром /str или перестройте свой проект VS.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NeshinaDem3.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Перезаписывает свойство CurrentUICulture текущего потока для всех
/// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Мозаика {
get {
object obj = ResourceManager.GetObject("Мозаика", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="Мозаика" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Мозаика.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View File

@ -0,0 +1,30 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace NeshinaDem3.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}

View File

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
</configuration>

Binary file not shown.

View File

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]

View File

@ -0,0 +1 @@
900084b4915286c93bad341ccfaac782f71e1668c51fbab658605202469ce726

View File

@ -0,0 +1,16 @@
C:\NeshinaPolina1811\NeshinaDem3\NeshinaDem3\bin\Debug\NeshinaDem3.exe.config
C:\NeshinaPolina1811\NeshinaDem3\NeshinaDem3\bin\Debug\NeshinaDem3.exe
C:\NeshinaPolina1811\NeshinaDem3\NeshinaDem3\bin\Debug\NeshinaDem3.pdb
C:\NeshinaPolina1811\NeshinaDem3\NeshinaDem3\bin\Debug\MySql.Data.dll
C:\NeshinaPolina1811\NeshinaDem3\NeshinaDem3\obj\Debug\NeshinaDem3.csproj.AssemblyReference.cache
C:\NeshinaPolina1811\NeshinaDem3\NeshinaDem3\obj\Debug\NeshinaDem3.Add.resources
C:\NeshinaPolina1811\NeshinaDem3\NeshinaDem3\obj\Debug\NeshinaDem3.Edit.resources
C:\NeshinaPolina1811\NeshinaDem3\NeshinaDem3\obj\Debug\NeshinaDem3.Properties.Resources.resources
C:\NeshinaPolina1811\NeshinaDem3\NeshinaDem3\obj\Debug\NeshinaDem3.csproj.GenerateResource.cache
C:\NeshinaPolina1811\NeshinaDem3\NeshinaDem3\obj\Debug\NeshinaDem3.csproj.CoreCompileInputs.cache
C:\NeshinaPolina1811\NeshinaDem3\NeshinaDem3\obj\Debug\NeshinaDem3.csproj.CopyComplete
C:\NeshinaPolina1811\NeshinaDem3\NeshinaDem3\obj\Debug\NeshinaDem3.exe
C:\NeshinaPolina1811\NeshinaDem3\NeshinaDem3\obj\Debug\NeshinaDem3.pdb
C:\NeshinaPolina1811\NeshinaDem3\NeshinaDem3\obj\Debug\NeshinaDem3.AddInf.resources
C:\NeshinaPolina1811\NeshinaDem3\NeshinaDem3\obj\Debug\NeshinaDem3.EditInf.resources
C:\NeshinaPolina1811\NeshinaDem3\NeshinaDem3\obj\Debug\NeshinaDem3.MainForm.resources

Binary file not shown.

Binary file not shown.

BIN
PDF/PDF_Neshina.pdf Normal file

Binary file not shown.