4 лаба

This commit is contained in:
Татьяна Артамонова 2023-05-17 03:35:13 +04:00
parent c983d6aa31
commit 67cf4fa5b4
11 changed files with 285 additions and 79 deletions

View File

@ -36,6 +36,7 @@
this.dataGridView = new System.Windows.Forms.DataGridView(); this.dataGridView = new System.Windows.Forms.DataGridView();
this.buttonCreateVisit = new System.Windows.Forms.Button(); this.buttonCreateVisit = new System.Windows.Forms.Button();
this.buttonRef = new System.Windows.Forms.Button(); this.buttonRef = new System.Windows.Forms.Button();
this.тестToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.menuStrip1.SuspendLayout(); this.menuStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
this.SuspendLayout(); this.SuspendLayout();
@ -43,7 +44,8 @@
// menuStrip1 // menuStrip1
// //
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.справочникиToolStripMenuItem}); this.справочникиToolStripMenuItem,
this.тестToolStripMenuItem});
this.menuStrip1.Location = new System.Drawing.Point(0, 0); this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.Name = "menuStrip1"; this.menuStrip1.Name = "menuStrip1";
this.menuStrip1.Size = new System.Drawing.Size(1078, 24); this.menuStrip1.Size = new System.Drawing.Size(1078, 24);
@ -110,6 +112,13 @@
this.buttonRef.UseVisualStyleBackColor = true; this.buttonRef.UseVisualStyleBackColor = true;
this.buttonRef.Click += new System.EventHandler(this.ButtonRef_Click); this.buttonRef.Click += new System.EventHandler(this.ButtonRef_Click);
// //
// тестToolStripMenuItem
//
this.тестToolStripMenuItem.Name = естToolStripMenuItem";
this.тестToolStripMenuItem.Size = new System.Drawing.Size(42, 20);
this.тестToolStripMenuItem.Text = "Тест";
this.тестToolStripMenuItem.Click += new System.EventHandler(this.ТестToolStripMenuItem_Click);
//
// FormMain // FormMain
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
@ -141,5 +150,6 @@
private DataGridView dataGridView; private DataGridView dataGridView;
private Button buttonCreateVisit; private Button buttonCreateVisit;
private Button buttonRef; private Button buttonRef;
private ToolStripMenuItem тестToolStripMenuItem;
} }
} }

View File

@ -85,5 +85,14 @@ namespace BeautySalon
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
private void ТестToolStripMenuItem_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormTests));
if (service is FormTests form)
{
form.ShowDialog();
}
}
} }
} }

View File

@ -28,12 +28,141 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
this.components = new System.ComponentModel.Container(); this.buttonInsertTest = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.textBoxInsertTime = new System.Windows.Forms.TextBox();
this.buttonReadTest = new System.Windows.Forms.Button();
this.textBoxReadTime = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.numericUpDownInsert = new System.Windows.Forms.NumericUpDown();
this.numericUpDownRead = new System.Windows.Forms.NumericUpDown();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownInsert)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownRead)).BeginInit();
this.SuspendLayout();
//
// buttonInsertTest
//
this.buttonInsertTest.Location = new System.Drawing.Point(12, 12);
this.buttonInsertTest.Name = "buttonInsertTest";
this.buttonInsertTest.Size = new System.Drawing.Size(86, 61);
this.buttonInsertTest.TabIndex = 0;
this.buttonInsertTest.Text = "Тест вставки";
this.buttonInsertTest.UseVisualStyleBackColor = true;
this.buttonInsertTest.Click += new System.EventHandler(this.ButtonInsertTest_Click);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(104, 12);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(156, 15);
this.label1.TabIndex = 1;
this.label1.Text = "Введите кол-во элементов:";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(104, 53);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(146, 15);
this.label2.TabIndex = 3;
this.label2.Text = "Итоговое время запроса:";
//
// textBoxInsertTime
//
this.textBoxInsertTime.Location = new System.Drawing.Point(266, 50);
this.textBoxInsertTime.Name = "textBoxInsertTime";
this.textBoxInsertTime.ReadOnly = true;
this.textBoxInsertTime.Size = new System.Drawing.Size(100, 23);
this.textBoxInsertTime.TabIndex = 4;
//
// buttonReadTest
//
this.buttonReadTest.Location = new System.Drawing.Point(12, 106);
this.buttonReadTest.Name = "buttonReadTest";
this.buttonReadTest.Size = new System.Drawing.Size(86, 56);
this.buttonReadTest.TabIndex = 5;
this.buttonReadTest.Text = "Тест чтения";
this.buttonReadTest.UseVisualStyleBackColor = true;
this.buttonReadTest.Click += new System.EventHandler(this.ButtonReadTest_Click);
//
// textBoxReadTime
//
this.textBoxReadTime.Location = new System.Drawing.Point(266, 144);
this.textBoxReadTime.Name = "textBoxReadTime";
this.textBoxReadTime.ReadOnly = true;
this.textBoxReadTime.Size = new System.Drawing.Size(100, 23);
this.textBoxReadTime.TabIndex = 9;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(104, 147);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(146, 15);
this.label3.TabIndex = 8;
this.label3.Text = "Итоговое время запроса:";
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(104, 106);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(156, 15);
this.label4.TabIndex = 6;
this.label4.Text = "Введите кол-во элементов:";
//
// numericUpDownInsert
//
this.numericUpDownInsert.Location = new System.Drawing.Point(266, 10);
this.numericUpDownInsert.Name = "numericUpDownInsert";
this.numericUpDownInsert.Size = new System.Drawing.Size(100, 23);
this.numericUpDownInsert.TabIndex = 10;
//
// numericUpDownRead
//
this.numericUpDownRead.Location = new System.Drawing.Point(266, 104);
this.numericUpDownRead.Name = "numericUpDownRead";
this.numericUpDownRead.Size = new System.Drawing.Size(100, 23);
this.numericUpDownRead.TabIndex = 11;
//
// FormTests
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450); this.ClientSize = new System.Drawing.Size(383, 182);
this.Text = "FormTests"; this.Controls.Add(this.numericUpDownRead);
this.Controls.Add(this.numericUpDownInsert);
this.Controls.Add(this.textBoxReadTime);
this.Controls.Add(this.label3);
this.Controls.Add(this.label4);
this.Controls.Add(this.buttonReadTest);
this.Controls.Add(this.textBoxInsertTime);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.buttonInsertTest);
this.Name = "FormTests";
this.Text = "Тесты запросов к бд";
((System.ComponentModel.ISupportInitialize)(this.numericUpDownInsert)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.numericUpDownRead)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
} }
#endregion #endregion
private Button buttonInsertTest;
private Label label1;
private Label label2;
private TextBox textBoxInsertTime;
private Button buttonReadTest;
private TextBox textBoxReadTime;
private Label label3;
private Label label4;
private NumericUpDown numericUpDownInsert;
private NumericUpDown numericUpDownRead;
} }
} }

View File

@ -1,20 +1,45 @@
using System; using BeautySalonContracts.BusinessLogicsContracts;
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 BeautySalon namespace BeautySalon
{ {
public partial class FormTests : Form public partial class FormTests : Form
{ {
public FormTests() private readonly IMasterLogic _masterLogic;
public FormTests(IMasterLogic masterLogic)
{ {
InitializeComponent(); InitializeComponent();
_masterLogic = masterLogic;
numericUpDownInsert.Minimum = 1;
numericUpDownInsert.Maximum = 1000000;
numericUpDownRead.Minimum = 1;
numericUpDownRead.Maximum = 1000000;
}
private void ButtonInsertTest_Click(object sender, EventArgs e)
{
try
{
var result = _masterLogic.TestInsertList(Convert.ToInt32(numericUpDownInsert.Value));
textBoxInsertTime.Text = result;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonReadTest_Click(object sender, EventArgs e)
{
try
{
var result = _masterLogic.TestReadList(Convert.ToInt32(numericUpDownRead.Value));
textBoxReadTime.Text = result;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
} }
} }
} }

View File

@ -1,64 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <root>
<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: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:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true"> <xsd:element name="root" msdata:IsDataSet="true">

View File

@ -47,7 +47,8 @@ namespace BeautySalon
services.AddTransient<FormMasters>(); services.AddTransient<FormMasters>();
services.AddTransient<FormClient>(); services.AddTransient<FormClient>();
services.AddTransient<FormClients>(); services.AddTransient<FormClients>();
services.AddTransient<FormMasterService>(); services.AddTransient<FormMasterService>();
services.AddTransient<FormTests>();
} }
} }
} }

View File

@ -4,6 +4,7 @@ using BeautySalonContracts.SearchModels;
using BeautySalonContracts.StoragesContracts; using BeautySalonContracts.StoragesContracts;
using BeautySalonContracts.ViewModels; using BeautySalonContracts.ViewModels;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using System;
namespace BeautySalonBusinessLogic.BusinessLogics namespace BeautySalonBusinessLogic.BusinessLogics
{ {
@ -103,5 +104,15 @@ namespace BeautySalonBusinessLogic.BusinessLogics
throw new InvalidOperationException("Мастер с таким ФИО уже есть"); throw new InvalidOperationException("Мастер с таким ФИО уже есть");
} }
} }
public string TestInsertList(int v)
{
return _masterStorage.TestInsertList(v);
}
public string TestReadList(int v)
{
return _masterStorage.TestReadList(v);
}
} }
} }

View File

@ -5,6 +5,9 @@ using BeautySalonContracts.ViewModels;
using BeautySalonDatabaseImplement; using BeautySalonDatabaseImplement;
using BeautySalonDatabaseImplement.Models; using BeautySalonDatabaseImplement.Models;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using System.Diagnostics;
using System;
using BeautySalonDataModels.Models;
namespace BeautySalonDatabaseImplement.Implements namespace BeautySalonDatabaseImplement.Implements
{ {
@ -101,5 +104,81 @@ namespace BeautySalonDatabaseImplement.Implements
} }
return null; return null;
} }
public string TestInsertList(int v)
{
var context = new BeautySalonDatabase();
Stopwatch servicewatch = new();
Random rnd = new Random();
long[] res = new long[v * 2];
for (int i = 0; i < v; ++i)
{
int rndId = rnd.Next();
var model = new ServiceBindingModel
{
Id = rndId,
ServiceName = "Service" + rndId.ToString(),
Cost = rnd.Next(),
};
context.Services.Add(Service.Create(model));
servicewatch.Start();
context.SaveChanges();
servicewatch.Stop();
res[i] = servicewatch.ElapsedMilliseconds;
}
for (int i = 0; i < v; ++i)
{
int rndId = rnd.Next();
var model = new MasterBindingModel
{
Id = rndId,
MasterFIO = "Master" + rndId.ToString(),
Wage = rnd.Next(),
};
context.Masters.Add(Master.Create(context, model));
servicewatch.Start();
context.SaveChanges();
servicewatch.Stop();
res[i] = servicewatch.ElapsedMilliseconds;
}
long sum = 0;
for (int i = 0; i < v; i++)
{
sum += res[i];
}
int result = Convert.ToInt32(sum / v);
return result.ToString();
}
public string TestReadList(int v)
{
var context = new BeautySalonDatabase();
Stopwatch servicewatch = new();
long[] res = new long[v];
for (int i = 0; i < v; i++)
{
servicewatch.Start();
List<MasterViewModel> list = context.Masters
.Include(x => x.Services)
.ThenInclude(x => x.Service).ToList()
.Select(x => x.GetViewModel).ToList();
servicewatch.Stop();
res[i] = servicewatch.ElapsedMilliseconds;
}
long sum = 0;
for (int i = 0; i < v; i++)
{
sum += res[i];
}
int result = Convert.ToInt32(sum / v);
return result.ToString();
}
} }
} }

View File

@ -2,9 +2,7 @@
using BeautySalonContracts.SearchModels; using BeautySalonContracts.SearchModels;
using BeautySalonContracts.StoragesContracts; using BeautySalonContracts.StoragesContracts;
using BeautySalonContracts.ViewModels; using BeautySalonContracts.ViewModels;
using BeautySalonDatabaseImplement;
using BeautySalonDatabaseImplement.Models; using BeautySalonDatabaseImplement.Models;
using System.ServiceModel;
namespace BeautySalonDatabaseImplement.Implements namespace BeautySalonDatabaseImplement.Implements
{ {
@ -78,6 +76,6 @@ namespace BeautySalonDatabaseImplement.Implements
return element.GetViewModel; return element.GetViewModel;
} }
return null; return null;
} }
} }
} }

View File

@ -11,5 +11,7 @@ namespace BeautySalonContracts.BusinessLogicsContracts
bool Create(MasterBindingModel model); bool Create(MasterBindingModel model);
bool Update(MasterBindingModel model); bool Update(MasterBindingModel model);
bool Delete(MasterBindingModel model); bool Delete(MasterBindingModel model);
string TestInsertList(int v);
string TestReadList(int v);
} }
} }

View File

@ -12,5 +12,7 @@ namespace BeautySalonContracts.StoragesContracts
MasterViewModel? Insert(MasterBindingModel model); MasterViewModel? Insert(MasterBindingModel model);
MasterViewModel? Update(MasterBindingModel model); MasterViewModel? Update(MasterBindingModel model);
MasterViewModel? Delete(MasterBindingModel model); MasterViewModel? Delete(MasterBindingModel model);
string TestInsertList(int v);
string TestReadList(int v);
} }
} }