From dcfd7c6e7088fcc81867beb1236c64170d5f439a Mon Sep 17 00:00:00 2001 From: RomaZhopka Date: Fri, 29 Mar 2024 18:14:12 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D1=8C=D1=82?= =?UTF-8?q?=D0=B5=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B5=D0=BA=D1=82=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.idea.calculator/.idea/.gitignore | 13 + .idea/.idea.calculator/.idea/.name | 1 + .idea/.idea.calculator/.idea/encodings.xml | 4 + .idea/.idea.calculator/.idea/indexLayout.xml | 8 + 8cc9f128-5008-40be-a6a7-0cf2658ed379.jfif | Bin 0 -> 80403 bytes Controller/CaculatorController.cs | 134 +++ Form1.Designer.cs | 948 +++++++++++++++++++ Form1.cs | 133 +++ Form1.resx | 306 ++++++ GlobalUsings.cs | 3 + Model/CaculatorData.cs | 10 + Program.cs | 26 + Properties/Resources.Designer.cs | 63 ++ Properties/Resources.resx | 120 +++ Services/Caculyator.cs | 60 ++ Services/ICaculator.cs | 7 + Services/IInputService.cs | 7 + Services/InputService.cs | 23 + View/ICaculatorView.cs | 11 + calculator.csproj | 26 + calculator.sln | 25 + 21 files changed, 1928 insertions(+) create mode 100644 .idea/.idea.calculator/.idea/.gitignore create mode 100644 .idea/.idea.calculator/.idea/.name create mode 100644 .idea/.idea.calculator/.idea/encodings.xml create mode 100644 .idea/.idea.calculator/.idea/indexLayout.xml create mode 100644 8cc9f128-5008-40be-a6a7-0cf2658ed379.jfif create mode 100644 Controller/CaculatorController.cs create mode 100644 Form1.Designer.cs create mode 100644 Form1.cs create mode 100644 Form1.resx create mode 100644 GlobalUsings.cs create mode 100644 Model/CaculatorData.cs create mode 100644 Program.cs create mode 100644 Properties/Resources.Designer.cs create mode 100644 Properties/Resources.resx create mode 100644 Services/Caculyator.cs create mode 100644 Services/ICaculator.cs create mode 100644 Services/IInputService.cs create mode 100644 Services/InputService.cs create mode 100644 View/ICaculatorView.cs create mode 100644 calculator.csproj create mode 100644 calculator.sln diff --git a/.idea/.idea.calculator/.idea/.gitignore b/.idea/.idea.calculator/.idea/.gitignore new file mode 100644 index 0000000..ba2741c --- /dev/null +++ b/.idea/.idea.calculator/.idea/.gitignore @@ -0,0 +1,13 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Rider ignored files +/modules.xml +/contentModel.xml +/projectSettingsUpdater.xml +/.idea.calculator.iml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/.idea.calculator/.idea/.name b/.idea/.idea.calculator/.idea/.name new file mode 100644 index 0000000..afa6020 --- /dev/null +++ b/.idea/.idea.calculator/.idea/.name @@ -0,0 +1 @@ +calculator \ No newline at end of file diff --git a/.idea/.idea.calculator/.idea/encodings.xml b/.idea/.idea.calculator/.idea/encodings.xml new file mode 100644 index 0000000..df87cf9 --- /dev/null +++ b/.idea/.idea.calculator/.idea/encodings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/.idea.calculator/.idea/indexLayout.xml b/.idea/.idea.calculator/.idea/indexLayout.xml new file mode 100644 index 0000000..7b08163 --- /dev/null +++ b/.idea/.idea.calculator/.idea/indexLayout.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/8cc9f128-5008-40be-a6a7-0cf2658ed379.jfif b/8cc9f128-5008-40be-a6a7-0cf2658ed379.jfif new file mode 100644 index 0000000000000000000000000000000000000000..d6c0a4501c8761cca374caeed7d237779c7f1a7c GIT binary patch literal 80403 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 literal 0 HcmV?d00001 diff --git a/Controller/CaculatorController.cs b/Controller/CaculatorController.cs new file mode 100644 index 0000000..8cd7ca1 --- /dev/null +++ b/Controller/CaculatorController.cs @@ -0,0 +1,134 @@ +using calculator.Model; +using calculator.Services; +using calculator.View; + +namespace calculator.Controller; + +public class CaculatorController +{ + private readonly ICaculator _caculator; + private readonly IInputService _inputService; + private readonly ICaculatorView _view; + private readonly CaculatorData _data; + + public CaculatorController(ICaculator caculator, IInputService inputService, ICaculatorView view, + CaculatorData data) + { + _caculator = caculator; + _inputService = inputService; + _view = view; + _data = data; + + _view.OperandPressed += OnOperandPressed; + _view.OperatorPressed += OnOperatorPressed; + _view.ClearPressed += OnFullClearPressed; + _view.CalculatePressed += OnCalculatePressed; + _view.SingleOperatorPressed += OnSingleOperationPressed; + OnFullClearPressed(); + } + + private void OnSingleOperationPressed(string obj) + { + _data.Operation = null; + if (_data.Operands.Count == 2 && _data.Caculated == false) + { + OnCalculatePressed(); + } + + _data.Caculated = true; + _data.SingleOperation = obj; + var operand = _data.Operands.Pop(); + _data.Operands.Push(_caculator.SingleOperation(operand, obj)); + _view.UpdateView(_data.Operands.Peek()); + } + + private void OnFullClearPressed() + { + Clear(); + } + + private void OnCalculatePressed() + { + if (_data.Operation is null) + return; + + if (_data.SingleOperation is not null) + { + var singleOperand = _data.Operands.Pop(); + _data.Operands.Push(_caculator.SingleOperation(singleOperand, _data.SingleOperation)); + _view.UpdateView(_data.Operands.Peek()); + return; + } + + if (_data.Operands.Count < 2) + { + var (lastOperand, lastOperation) = (_data.LastOperand, _data.Operation); + if (lastOperand is not null && lastOperation is not null) + { + Calculate(_data.Operands.Pop(), lastOperand, lastOperation); + } + return; + } + + var operand = _data.Operands.Pop(); + var operand2 = _data.Operands.Pop(); + Calculate(operand2, operand, _data.Operation); + } + + private void Calculate(string operand1, string operand2, string operation) + { + _data.Caculated = true; + _data.LastOperand = operand2; + _data.Operands.Push(_caculator.Calculate(operand1, operand2, operation)); + _view.UpdateView(_data.Operands.Peek()); + } + + private void Clear(string value = "0", bool full = true) + { + if (full) + { + _data.Operands.Clear(); + _data.Operation = null; + _data.SingleOperation = null; + } + else + { + _data.Operands.TryPop(out _); + } + + _data.Caculated = false; + _data.LastOperand = null; + _data.Operands.Push(value); + _view.UpdateView(_data.Operands.Peek()); + } + + private void OnOperatorPressed(string operation) + { + _data.SingleOperation = null; + if (_data.LastOperand is not null && _data.Caculated == false) + { + OnCalculatePressed(); + } + + _data.Operation = operation; + } + + private void OnOperandPressed(char obj) + { + + if (_data is { Operands.Count: 1, Operation: not null }) + { + _data.Operands.Push("0"); + } + else if (_data is { Caculated: true }) + { + Clear(); + } + + var operand = _data.Operands.Pop(); + + + _data.Operands.Push(_inputService.TryInput(operand + obj)); + _view.UpdateView(_data.Operands.Peek()); + } +} \ No newline at end of file diff --git a/Form1.Designer.cs b/Form1.Designer.cs new file mode 100644 index 0000000..f106db9 --- /dev/null +++ b/Form1.Designer.cs @@ -0,0 +1,948 @@ +namespace calculator +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + panel1=new Panel(); + button49=new Button(); + button50=new Button(); + button51=new Button(); + button52=new Button(); + button53=new Button(); + button44=new Button(); + button45=new Button(); + button46=new Button(); + button47=new Button(); + button48=new Button(); + button39=new Button(); + button40=new Button(); + button41=new Button(); + button42=new Button(); + button43=new Button(); + button34=new Button(); + button35=new Button(); + button36=new Button(); + button37=new Button(); + button38=new Button(); + button23=new Button(); + button30=new Button(); + button31=new Button(); + button32=new Button(); + button33=new Button(); + InverseButton=new Button(); + MultButton=new Button(); + SixButton=new Button(); + FiveButton=new Button(); + FourButton=new Button(); + EqualButton=new Button(); + PlusButton=new Button(); + DotButton=new Button(); + ZeroButton=new Button(); + MinusButton=new Button(); + ThreeButton=new Button(); + TwoButton=new Button(); + OneButton=new Button(); + PercentButton=new Button(); + DivideButton=new Button(); + NineButton=new Button(); + EightButton=new Button(); + SevenButton=new Button(); + SqrtButton=new Button(); + NegativeButton=new Button(); + button8=new Button(); + CE_button=new Button(); + button10=new Button(); + button5=new Button(); + button4=new Button(); + button3=new Button(); + button2=new Button(); + button1=new Button(); + groupBox1=new GroupBox(); + radioButton3=new RadioButton(); + radioButton2=new RadioButton(); + radioButton1=new RadioButton(); + textBox1=new TextBox(); + linkLabel1=new LinkLabel(); + linkLabel2=new LinkLabel(); + linkLabel3=new LinkLabel(); + panel1.SuspendLayout(); + groupBox1.SuspendLayout(); + SuspendLayout(); + // + // panel1 + // + panel1.BackColor=Color.MediumSlateBlue; + panel1.Controls.Add(button49); + panel1.Controls.Add(button50); + panel1.Controls.Add(button51); + panel1.Controls.Add(button52); + panel1.Controls.Add(button53); + panel1.Controls.Add(button44); + panel1.Controls.Add(button45); + panel1.Controls.Add(button46); + panel1.Controls.Add(button47); + panel1.Controls.Add(button48); + panel1.Controls.Add(button39); + panel1.Controls.Add(button40); + panel1.Controls.Add(button41); + panel1.Controls.Add(button42); + panel1.Controls.Add(button43); + panel1.Controls.Add(button34); + panel1.Controls.Add(button35); + panel1.Controls.Add(button36); + panel1.Controls.Add(button37); + panel1.Controls.Add(button38); + panel1.Controls.Add(button23); + panel1.Controls.Add(button30); + panel1.Controls.Add(button31); + panel1.Controls.Add(button32); + panel1.Controls.Add(button33); + panel1.Controls.Add(InverseButton); + panel1.Controls.Add(MultButton); + panel1.Controls.Add(SixButton); + panel1.Controls.Add(FiveButton); + panel1.Controls.Add(FourButton); + panel1.Controls.Add(EqualButton); + panel1.Controls.Add(PlusButton); + panel1.Controls.Add(DotButton); + panel1.Controls.Add(ZeroButton); + panel1.Controls.Add(MinusButton); + panel1.Controls.Add(ThreeButton); + panel1.Controls.Add(TwoButton); + panel1.Controls.Add(OneButton); + panel1.Controls.Add(PercentButton); + panel1.Controls.Add(DivideButton); + panel1.Controls.Add(NineButton); + panel1.Controls.Add(EightButton); + panel1.Controls.Add(SevenButton); + panel1.Controls.Add(SqrtButton); + panel1.Controls.Add(NegativeButton); + panel1.Controls.Add(button8); + panel1.Controls.Add(CE_button); + panel1.Controls.Add(button10); + panel1.Controls.Add(button5); + panel1.Controls.Add(button4); + panel1.Controls.Add(button3); + panel1.Controls.Add(button2); + panel1.Controls.Add(button1); + panel1.Controls.Add(groupBox1); + panel1.Controls.Add(textBox1); + panel1.Location=new Point(16, 28); + panel1.Name="panel1"; + panel1.Size=new Size(573, 338); + panel1.TabIndex=0; + // + // button49 + // + button49.FlatStyle=FlatStyle.Flat; + button49.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button49.Location=new Point(232, 296); + button49.Name="button49"; + button49.Size=new Size(51, 37); + button49.TabIndex=55; + button49.Text="10ᵜ"; + button49.UseVisualStyleBackColor=true; + // + // button50 + // + button50.FlatStyle=FlatStyle.Flat; + button50.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button50.Location=new Point(175, 296); + button50.Name="button50"; + button50.Size=new Size(51, 37); + button50.TabIndex=54; + button50.Text="log"; + button50.UseVisualStyleBackColor=true; + // + // button51 + // + button51.FlatStyle=FlatStyle.Flat; + button51.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button51.Location=new Point(118, 296); + button51.Name="button51"; + button51.Size=new Size(51, 37); + button51.TabIndex=53; + button51.Text="Mod"; + button51.UseVisualStyleBackColor=true; + // + // button52 + // + button52.FlatStyle=FlatStyle.Flat; + button52.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button52.Location=new Point(61, 296); + button52.Name="button52"; + button52.Size=new Size(51, 37); + button52.TabIndex=52; + button52.Text="Exp"; + button52.UseVisualStyleBackColor=true; + // + // button53 + // + button53.FlatStyle=FlatStyle.Flat; + button53.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button53.Location=new Point(4, 296); + button53.Name="button53"; + button53.Size=new Size(51, 37); + button53.TabIndex=51; + button53.Text="F-E"; + button53.UseVisualStyleBackColor=true; + // + // button44 + // + button44.FlatStyle=FlatStyle.Flat; + button44.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button44.Location=new Point(232, 253); + button44.Name="button44"; + button44.Size=new Size(51, 37); + button44.TabIndex=50; + button44.Text="∛x"; + button44.UseVisualStyleBackColor=true; + // + // button45 + // + button45.FlatStyle=FlatStyle.Flat; + button45.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button45.Location=new Point(175, 253); + button45.Name="button45"; + button45.Size=new Size(51, 37); + button45.TabIndex=49; + button45.Text="x³"; + button45.UseVisualStyleBackColor=true; + // + // button46 + // + button46.FlatStyle=FlatStyle.Flat; + button46.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button46.Location=new Point(118, 253); + button46.Name="button46"; + button46.Size=new Size(51, 37); + button46.TabIndex=48; + button46.Text="tan"; + button46.UseVisualStyleBackColor=true; + // + // button47 + // + button47.FlatStyle=FlatStyle.Flat; + button47.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button47.Location=new Point(61, 253); + button47.Name="button47"; + button47.Size=new Size(51, 37); + button47.TabIndex=47; + button47.Text="tanh"; + button47.UseVisualStyleBackColor=true; + // + // button48 + // + button48.FlatStyle=FlatStyle.Flat; + button48.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button48.Location=new Point(4, 253); + button48.Name="button48"; + button48.Size=new Size(51, 37); + button48.TabIndex=46; + button48.Text="π"; + button48.UseVisualStyleBackColor=true; + // + // button39 + // + button39.FlatStyle=FlatStyle.Flat; + button39.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button39.Location=new Point(232, 210); + button39.Name="button39"; + button39.Size=new Size(51, 37); + button39.TabIndex=45; + button39.Text="y√x"; + button39.UseVisualStyleBackColor=true; + button39.Click+=button39_Click; + // + // button40 + // + button40.FlatStyle=FlatStyle.Flat; + button40.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button40.Location=new Point(175, 210); + button40.Name="button40"; + button40.Size=new Size(51, 37); + button40.TabIndex=44; + button40.Text="xᵜ"; + button40.UseVisualStyleBackColor=true; + // + // button41 + // + button41.FlatStyle=FlatStyle.Flat; + button41.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button41.Location=new Point(118, 210); + button41.Name="button41"; + button41.Size=new Size(51, 37); + button41.TabIndex=43; + button41.Text="cos"; + button41.UseVisualStyleBackColor=true; + // + // button42 + // + button42.FlatStyle=FlatStyle.Flat; + button42.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button42.Location=new Point(61, 210); + button42.Name="button42"; + button42.Size=new Size(51, 37); + button42.TabIndex=42; + button42.Text="cosh"; + button42.UseVisualStyleBackColor=true; + // + // button43 + // + button43.FlatStyle=FlatStyle.Flat; + button43.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button43.Location=new Point(4, 210); + button43.Name="button43"; + button43.Size=new Size(51, 37); + button43.TabIndex=41; + button43.Text="dms"; + button43.UseVisualStyleBackColor=true; + // + // button34 + // + button34.FlatStyle=FlatStyle.Flat; + button34.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button34.Location=new Point(232, 167); + button34.Name="button34"; + button34.Size=new Size(51, 37); + button34.TabIndex=40; + button34.Text="n!"; + button34.UseVisualStyleBackColor=true; + // + // button35 + // + button35.FlatStyle=FlatStyle.Flat; + button35.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button35.Location=new Point(175, 167); + button35.Name="button35"; + button35.Size=new Size(51, 37); + button35.TabIndex=39; + button35.Text="Х²"; + button35.UseVisualStyleBackColor=true; + // + // button36 + // + button36.FlatStyle=FlatStyle.Flat; + button36.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button36.Location=new Point(118, 167); + button36.Name="button36"; + button36.Size=new Size(51, 37); + button36.TabIndex=38; + button36.Text="sin"; + button36.UseVisualStyleBackColor=true; + // + // button37 + // + button37.FlatStyle=FlatStyle.Flat; + button37.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button37.Location=new Point(61, 167); + button37.Name="button37"; + button37.Size=new Size(51, 37); + button37.TabIndex=37; + button37.Text="sinh"; + button37.UseVisualStyleBackColor=true; + // + // button38 + // + button38.FlatStyle=FlatStyle.Flat; + button38.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button38.Location=new Point(4, 167); + button38.Name="button38"; + button38.Size=new Size(51, 37); + button38.TabIndex=36; + button38.Text="Int"; + button38.UseVisualStyleBackColor=true; + // + // button23 + // + button23.FlatStyle=FlatStyle.Flat; + button23.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button23.Location=new Point(232, 124); + button23.Name="button23"; + button23.Size=new Size(51, 37); + button23.TabIndex=35; + button23.Text=")"; + button23.UseVisualStyleBackColor=true; + // + // button30 + // + button30.FlatStyle=FlatStyle.Flat; + button30.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button30.Location=new Point(175, 124); + button30.Name="button30"; + button30.Size=new Size(51, 37); + button30.TabIndex=34; + button30.Text="("; + button30.UseVisualStyleBackColor=true; + // + // button31 + // + button31.FlatStyle=FlatStyle.Flat; + button31.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button31.Location=new Point(118, 124); + button31.Name="button31"; + button31.Size=new Size(51, 37); + button31.TabIndex=33; + button31.Text="In"; + button31.UseVisualStyleBackColor=true; + // + // button32 + // + button32.FlatStyle=FlatStyle.Flat; + button32.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button32.Location=new Point(61, 124); + button32.Name="button32"; + button32.Size=new Size(51, 37); + button32.TabIndex=32; + button32.Text="Inv"; + button32.UseVisualStyleBackColor=true; + // + // button33 + // + button33.BackColor=Color.SlateBlue; + button33.BackgroundImageLayout=ImageLayout.None; + button33.Cursor=Cursors.No; + button33.Enabled=false; + button33.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button33.Location=new Point(4, 124); + button33.Name="button33"; + button33.Size=new Size(51, 37); + button33.TabIndex=31; + button33.UseVisualStyleBackColor=false; + // + // InverseButton + // + InverseButton.FlatStyle=FlatStyle.Flat; + InverseButton.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + InverseButton.Location=new Point(517, 210); + InverseButton.Name="InverseButton"; + InverseButton.Size=new Size(51, 37); + InverseButton.TabIndex=30; + InverseButton.Text="1/x"; + InverseButton.UseVisualStyleBackColor=true; + InverseButton.Click+=OnInverseButtonClick; + // + // MultButton + // + MultButton.FlatStyle=FlatStyle.Flat; + MultButton.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + MultButton.Location=new Point(460, 210); + MultButton.Name="MultButton"; + MultButton.Size=new Size(51, 37); + MultButton.TabIndex=29; + MultButton.Text="*"; + MultButton.UseVisualStyleBackColor=true; + MultButton.Click+=OnMultButtonClick; + // + // SixButton + // + SixButton.FlatStyle=FlatStyle.Flat; + SixButton.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + SixButton.Location=new Point(403, 210); + SixButton.Name="SixButton"; + SixButton.Size=new Size(51, 37); + SixButton.TabIndex=28; + SixButton.Text="6"; + SixButton.UseVisualStyleBackColor=true; + SixButton.Click+=OnSixButtonClick; + // + // FiveButton + // + FiveButton.FlatStyle=FlatStyle.Flat; + FiveButton.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + FiveButton.Location=new Point(346, 210); + FiveButton.Name="FiveButton"; + FiveButton.Size=new Size(51, 37); + FiveButton.TabIndex=27; + FiveButton.Text="5"; + FiveButton.UseVisualStyleBackColor=true; + FiveButton.Click+=OnFiveButtonClick; + // + // FourButton + // + FourButton.FlatStyle=FlatStyle.Flat; + FourButton.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + FourButton.Location=new Point(289, 210); + FourButton.Name="FourButton"; + FourButton.Size=new Size(51, 37); + FourButton.TabIndex=26; + FourButton.Text="4"; + FourButton.UseVisualStyleBackColor=true; + FourButton.Click+=OnFourButtonClick; + // + // EqualButton + // + EqualButton.FlatStyle=FlatStyle.Flat; + EqualButton.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + EqualButton.Location=new Point(517, 253); + EqualButton.Name="EqualButton"; + EqualButton.Size=new Size(51, 80); + EqualButton.TabIndex=25; + EqualButton.Text="="; + EqualButton.UseVisualStyleBackColor=true; + EqualButton.Click+=OnEqualButtonClick; + // + // PlusButton + // + PlusButton.FlatStyle=FlatStyle.Flat; + PlusButton.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + PlusButton.Location=new Point(460, 296); + PlusButton.Name="PlusButton"; + PlusButton.Size=new Size(51, 37); + PlusButton.TabIndex=24; + PlusButton.Text="+"; + PlusButton.UseVisualStyleBackColor=true; + PlusButton.Click+=OnPlusButtonClick; + // + // DotButton + // + DotButton.FlatStyle=FlatStyle.Flat; + DotButton.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + DotButton.Location=new Point(403, 296); + DotButton.Name="DotButton"; + DotButton.Size=new Size(51, 37); + DotButton.TabIndex=23; + DotButton.Text=","; + DotButton.UseVisualStyleBackColor=true; + DotButton.Click+=OnDotButtonClick; + // + // ZeroButton + // + ZeroButton.FlatStyle=FlatStyle.Flat; + ZeroButton.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + ZeroButton.Location=new Point(289, 296); + ZeroButton.Name="ZeroButton"; + ZeroButton.Size=new Size(108, 37); + ZeroButton.TabIndex=22; + ZeroButton.Text="0"; + ZeroButton.UseVisualStyleBackColor=true; + ZeroButton.Click+=OnZeroButtonClick; + // + // MinusButton + // + MinusButton.FlatStyle=FlatStyle.Flat; + MinusButton.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + MinusButton.Location=new Point(460, 253); + MinusButton.Name="MinusButton"; + MinusButton.Size=new Size(51, 37); + MinusButton.TabIndex=20; + MinusButton.Text="-"; + MinusButton.UseVisualStyleBackColor=true; + MinusButton.Click+=OnMinusButtonClick; + // + // ThreeButton + // + ThreeButton.FlatStyle=FlatStyle.Flat; + ThreeButton.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + ThreeButton.Location=new Point(403, 253); + ThreeButton.Name="ThreeButton"; + ThreeButton.Size=new Size(51, 37); + ThreeButton.TabIndex=19; + ThreeButton.Text="3"; + ThreeButton.UseVisualStyleBackColor=true; + ThreeButton.Click+=OnThreeButtonClick; + // + // TwoButton + // + TwoButton.FlatStyle=FlatStyle.Flat; + TwoButton.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + TwoButton.Location=new Point(346, 253); + TwoButton.Name="TwoButton"; + TwoButton.Size=new Size(51, 37); + TwoButton.TabIndex=18; + TwoButton.Text="2"; + TwoButton.UseVisualStyleBackColor=true; + TwoButton.Click+=OnTwoButtonClick; + // + // OneButton + // + OneButton.FlatStyle=FlatStyle.Flat; + OneButton.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + OneButton.Location=new Point(289, 253); + OneButton.Name="OneButton"; + OneButton.Size=new Size(51, 37); + OneButton.TabIndex=17; + OneButton.Text="1"; + OneButton.UseVisualStyleBackColor=true; + OneButton.Click+=OnOneButtonClick; + // + // PercentButton + // + PercentButton.FlatStyle=FlatStyle.Flat; + PercentButton.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + PercentButton.Location=new Point(517, 167); + PercentButton.Name="PercentButton"; + PercentButton.Size=new Size(51, 37); + PercentButton.TabIndex=16; + PercentButton.Text="%"; + PercentButton.UseVisualStyleBackColor=true; + PercentButton.Click+=OnPercentButtonClick; + // + // DivideButton + // + DivideButton.FlatStyle=FlatStyle.Flat; + DivideButton.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + DivideButton.Location=new Point(460, 167); + DivideButton.Name="DivideButton"; + DivideButton.Size=new Size(51, 37); + DivideButton.TabIndex=15; + DivideButton.Text="/"; + DivideButton.UseVisualStyleBackColor=true; + DivideButton.Click+=OnDivideButtonClick; + // + // NineButton + // + NineButton.FlatStyle=FlatStyle.Flat; + NineButton.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + NineButton.Location=new Point(403, 167); + NineButton.Name="NineButton"; + NineButton.Size=new Size(51, 37); + NineButton.TabIndex=14; + NineButton.Text="9"; + NineButton.UseVisualStyleBackColor=true; + NineButton.Click+=OnNineButtonClick; + // + // EightButton + // + EightButton.FlatStyle=FlatStyle.Flat; + EightButton.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + EightButton.Location=new Point(346, 167); + EightButton.Name="EightButton"; + EightButton.Size=new Size(51, 37); + EightButton.TabIndex=13; + EightButton.Text="8"; + EightButton.UseVisualStyleBackColor=true; + EightButton.Click+=OnEightButtonClick; + // + // SevenButton + // + SevenButton.FlatStyle=FlatStyle.Flat; + SevenButton.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + SevenButton.Location=new Point(289, 167); + SevenButton.Name="SevenButton"; + SevenButton.Size=new Size(51, 37); + SevenButton.TabIndex=12; + SevenButton.Text="7"; + SevenButton.UseVisualStyleBackColor=true; + SevenButton.Click+=OnSevenButtonClick; + // + // SqrtButton + // + SqrtButton.FlatStyle=FlatStyle.Flat; + SqrtButton.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + SqrtButton.Location=new Point(517, 124); + SqrtButton.Name="SqrtButton"; + SqrtButton.Size=new Size(51, 37); + SqrtButton.TabIndex=11; + SqrtButton.Text="√"; + SqrtButton.UseVisualStyleBackColor=true; + SqrtButton.Click+=OnSqrtButtonClick; + // + // NegativeButton + // + NegativeButton.FlatStyle=FlatStyle.Flat; + NegativeButton.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + NegativeButton.Location=new Point(460, 124); + NegativeButton.Name="NegativeButton"; + NegativeButton.Size=new Size(51, 37); + NegativeButton.TabIndex=10; + NegativeButton.Text="±"; + NegativeButton.UseVisualStyleBackColor=true; + NegativeButton.Click+=OnNegativeButtonClick; + // + // button8 + // + button8.FlatStyle=FlatStyle.Flat; + button8.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button8.Location=new Point(403, 124); + button8.Name="button8"; + button8.Size=new Size(51, 37); + button8.TabIndex=9; + button8.Text="C"; + button8.UseVisualStyleBackColor=true; + // + // CE_button + // + CE_button.FlatStyle=FlatStyle.Flat; + CE_button.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + CE_button.Location=new Point(346, 124); + CE_button.Name="CE_button"; + CE_button.Size=new Size(51, 37); + CE_button.TabIndex=8; + CE_button.Text="CE"; + CE_button.UseVisualStyleBackColor=true; + CE_button.Click+=OnCEButtonClick; + // + // button10 + // + button10.FlatStyle=FlatStyle.Flat; + button10.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button10.Location=new Point(289, 124); + button10.Name="button10"; + button10.Size=new Size(51, 37); + button10.TabIndex=7; + button10.Text="←"; + button10.UseVisualStyleBackColor=true; + // + // button5 + // + button5.FlatStyle=FlatStyle.Flat; + button5.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button5.Location=new Point(517, 81); + button5.Name="button5"; + button5.Size=new Size(51, 37); + button5.TabIndex=6; + button5.Text="M-"; + button5.UseVisualStyleBackColor=true; + // + // button4 + // + button4.FlatStyle=FlatStyle.Flat; + button4.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button4.Location=new Point(460, 81); + button4.Name="button4"; + button4.Size=new Size(51, 37); + button4.TabIndex=5; + button4.Text="M+"; + button4.UseVisualStyleBackColor=true; + // + // button3 + // + button3.FlatStyle=FlatStyle.Flat; + button3.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button3.Location=new Point(403, 81); + button3.Name="button3"; + button3.Size=new Size(51, 37); + button3.TabIndex=4; + button3.Text="MS"; + button3.UseVisualStyleBackColor=true; + // + // button2 + // + button2.FlatStyle=FlatStyle.Flat; + button2.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button2.Location=new Point(346, 81); + button2.Name="button2"; + button2.Size=new Size(51, 37); + button2.TabIndex=3; + button2.Text="MR"; + button2.UseVisualStyleBackColor=true; + // + // button1 + // + button1.FlatStyle=FlatStyle.Flat; + button1.Font=new Font("Segoe UI", 9.75F, FontStyle.Bold, GraphicsUnit.Point); + button1.Location=new Point(289, 81); + button1.Name="button1"; + button1.Size=new Size(51, 37); + button1.TabIndex=2; + button1.Text="MC"; + button1.UseVisualStyleBackColor=true; + // + // groupBox1 + // + groupBox1.Controls.Add(radioButton3); + groupBox1.Controls.Add(radioButton2); + groupBox1.Controls.Add(radioButton1); + groupBox1.Location=new Point(4, 75); + groupBox1.Name="groupBox1"; + groupBox1.Size=new Size(279, 43); + groupBox1.TabIndex=1; + groupBox1.TabStop=false; + // + // radioButton3 + // + radioButton3.AutoSize=true; + radioButton3.Font=new Font("Roboto", 11.25F, FontStyle.Bold|FontStyle.Italic, GraphicsUnit.Point); + radioButton3.ForeColor=Color.FromArgb(255, 192, 255); + radioButton3.Location=new Point(197, 13); + radioButton3.Name="radioButton3"; + radioButton3.Size=new Size(74, 22); + radioButton3.TabIndex=2; + radioButton3.TabStop=true; + radioButton3.Text="Грады"; + radioButton3.UseVisualStyleBackColor=true; + // + // radioButton2 + // + radioButton2.AutoSize=true; + radioButton2.Font=new Font("Roboto", 11.25F, FontStyle.Bold|FontStyle.Italic, GraphicsUnit.Point); + radioButton2.ForeColor=Color.FromArgb(255, 192, 255); + radioButton2.Location=new Point(98, 13); + radioButton2.Name="radioButton2"; + radioButton2.Size=new Size(97, 22); + radioButton2.TabIndex=1; + radioButton2.TabStop=true; + radioButton2.Text="Радианы"; + radioButton2.UseVisualStyleBackColor=true; + // + // radioButton1 + // + radioButton1.AutoSize=true; + radioButton1.Font=new Font("Roboto", 11.25F, FontStyle.Bold|FontStyle.Italic, GraphicsUnit.Point); + radioButton1.ForeColor=Color.FromArgb(255, 192, 255); + radioButton1.Location=new Point(6, 13); + radioButton1.Name="radioButton1"; + radioButton1.Size=new Size(91, 22); + radioButton1.TabIndex=0; + radioButton1.TabStop=true; + radioButton1.Text="Градусы"; + radioButton1.UseVisualStyleBackColor=true; + // + // textBox1 + // + textBox1.BackColor=Color.FromArgb(192, 192, 255); + textBox1.Cursor=Cursors.No; + textBox1.Enabled=false; + textBox1.Font=new Font("Myanmar Text", 27.75F, FontStyle.Bold, GraphicsUnit.Point); + textBox1.ForeColor=Color.FromArgb(255, 192, 255); + textBox1.Location=new Point(3, 3); + textBox1.Multiline=true; + textBox1.Name="textBox1"; + textBox1.Size=new Size(567, 72); + textBox1.TabIndex=0; + // + // linkLabel1 + // + linkLabel1.AutoSize=true; + linkLabel1.LinkColor=Color.FromArgb(255, 192, 255); + linkLabel1.Location=new Point(16, 6); + linkLabel1.Name="linkLabel1"; + linkLabel1.Size=new Size(27, 15); + linkLabel1.TabIndex=1; + linkLabel1.TabStop=true; + linkLabel1.Text="Вид"; + // + // linkLabel2 + // + linkLabel2.AutoSize=true; + linkLabel2.LinkColor=Color.FromArgb(255, 192, 255); + linkLabel2.Location=new Point(49, 6); + linkLabel2.Name="linkLabel2"; + linkLabel2.Size=new Size(47, 15); + linkLabel2.TabIndex=2; + linkLabel2.TabStop=true; + linkLabel2.Text="Правка"; + // + // linkLabel3 + // + linkLabel3.AutoSize=true; + linkLabel3.LinkColor=Color.FromArgb(255, 192, 255); + linkLabel3.Location=new Point(102, 6); + linkLabel3.Name="linkLabel3"; + linkLabel3.Size=new Size(53, 15); + linkLabel3.TabIndex=3; + linkLabel3.TabStop=true; + linkLabel3.Text="Справка"; + // + // Form1 + // + AutoScaleDimensions=new SizeF(7F, 15F); + AutoScaleMode=AutoScaleMode.Font; + BackColor=Color.Indigo; + ClientSize=new Size(607, 378); + Controls.Add(linkLabel3); + Controls.Add(linkLabel2); + Controls.Add(linkLabel1); + Controls.Add(panel1); + Name="Form1"; + Text="Form1"; + panel1.ResumeLayout(false); + panel1.PerformLayout(); + groupBox1.ResumeLayout(false); + groupBox1.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private Panel panel1; + private Button button5; + private Button button4; + private Button button3; + private Button button2; + private Button button1; + private GroupBox groupBox1; + private RadioButton radioButton3; + private RadioButton radioButton2; + private RadioButton radioButton1; + private TextBox textBox1; + private LinkLabel linkLabel1; + private LinkLabel linkLabel2; + private LinkLabel linkLabel3; + private Button button49; + private Button button50; + private Button button51; + private Button button52; + private Button button53; + private Button button44; + private Button button45; + private Button button46; + private Button button47; + private Button button48; + private Button button39; + private Button button40; + private Button button41; + private Button button42; + private Button button43; + private Button button34; + private Button button35; + private Button button36; + private Button button37; + private Button button38; + private Button button23; + private Button button30; + private Button button31; + private Button button32; + private Button button33; + private Button InverseButton; + private Button MultButton; + private Button SixButton; + private Button FiveButton; + private Button FourButton; + private Button EqualButton; + private Button PlusButton; + private Button DotButton; + private Button ZeroButton; + private Button MinusButton; + private Button ThreeButton; + private Button TwoButton; + private Button OneButton; + private Button PercentButton; + private Button DivideButton; + private Button NineButton; + private Button EightButton; + private Button SevenButton; + private Button SqrtButton; + private Button NegativeButton; + private Button button8; + private Button CE_button; + private Button button10; + } +} \ No newline at end of file diff --git a/Form1.cs b/Form1.cs new file mode 100644 index 0000000..33a3211 --- /dev/null +++ b/Form1.cs @@ -0,0 +1,133 @@ +using calculator.View; + +namespace calculator +{ + public partial class Form1 : Form, ICaculatorView + { + public Form1() + { + InitializeComponent(); + } + + public event Action? OperandPressed; + public event Action? OperatorPressed; + public event Action? SingleOperatorPressed; + public event Action? ClearPressed; + public event Action? CalculatePressed; + + public void UpdateView(string input) + { + textBox1.Text = input; + } + + private void OnCEButtonClick(object sender, EventArgs e) + { + ClearPressed?.Invoke(); + } + + private void OnZeroButtonClick(object sender, EventArgs e) + { + OperandPressed?.Invoke('0'); + } + + private void OnOneButtonClick(object sender, EventArgs e) + { + OperandPressed?.Invoke('1'); + } + + private void OnTwoButtonClick(object sender, EventArgs e) + { + OperandPressed?.Invoke('2'); + } + + private void OnThreeButtonClick(object sender, EventArgs e) + { + OperandPressed?.Invoke('3'); + } + + private void OnFourButtonClick(object sender, EventArgs e) + { + OperandPressed?.Invoke('4'); + } + + private void OnFiveButtonClick(object sender, EventArgs e) + { + OperandPressed?.Invoke('5'); + } + + private void OnSixButtonClick(object sender, EventArgs e) + { + OperandPressed?.Invoke('6'); + } + + private void OnSevenButtonClick(object sender, EventArgs e) + { + OperandPressed?.Invoke('7'); + } + + private void OnEightButtonClick(object sender, EventArgs e) + { + OperandPressed?.Invoke('8'); + } + + private void OnNineButtonClick(object sender, EventArgs e) + { + OperandPressed?.Invoke('9'); + } + + private void OnDotButtonClick(object sender, EventArgs e) + { + OperandPressed?.Invoke('.'); + } + + private void OnNegativeButtonClick(object sender, EventArgs e) + { + SingleOperatorPressed?.Invoke("-1"); + } + + private void OnPlusButtonClick(object sender, EventArgs e) + { + OperatorPressed?.Invoke("+"); + } + + private void OnMinusButtonClick(object sender, EventArgs e) + { + OperatorPressed?.Invoke("-"); + } + + private void OnMultButtonClick(object sender, EventArgs e) + { + OperatorPressed?.Invoke("*"); + } + + private void OnDivideButtonClick(object sender, EventArgs e) + { + OperatorPressed?.Invoke("/"); + } + + private void OnSqrtButtonClick(object sender, EventArgs e) + { + SingleOperatorPressed?.Invoke("√"); + } + + private void OnPercentButtonClick(object sender, EventArgs e) + { + SingleOperatorPressed?.Invoke("%"); + } + + private void OnInverseButtonClick(object sender, EventArgs e) + { + SingleOperatorPressed?.Invoke("1/"); + } + + private void OnEqualButtonClick(object sender, EventArgs e) + { + CalculatePressed?.Invoke(); + } + + private void button39_Click(object sender, EventArgs e) + { + + } + } +} \ No newline at end of file diff --git a/Form1.resx b/Form1.resx new file mode 100644 index 0000000..2a5f517 --- /dev/null +++ b/Form1.resx @@ -0,0 +1,306 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/GlobalUsings.cs b/GlobalUsings.cs new file mode 100644 index 0000000..933204c --- /dev/null +++ b/GlobalUsings.cs @@ -0,0 +1,3 @@ +// Global using directives + +global using System.Collections.Generic; \ No newline at end of file diff --git a/Model/CaculatorData.cs b/Model/CaculatorData.cs new file mode 100644 index 0000000..4f6480a --- /dev/null +++ b/Model/CaculatorData.cs @@ -0,0 +1,10 @@ +namespace calculator.Model; + +public class CaculatorData +{ + public Stack Operands { get; set; } = new(); + public string? Operation { get; set; } + public string? SingleOperation { get; set; } + public bool Caculated { get; set; } + public string? LastOperand { get; set; } +} \ No newline at end of file diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..a1e82ce --- /dev/null +++ b/Program.cs @@ -0,0 +1,26 @@ +using calculator.Controller; +using calculator.Model; +using calculator.Services; + +namespace calculator +{ + internal static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + // To customize application configuration such as set high DPI settings or default font, + // see https://aka.ms/applicationconfiguration. + var inputService = new InputService(); + var caculator = new Caculyator(); + ApplicationConfiguration.Initialize(); + var data = new CaculatorData(); + var view = new Form1(); + var controller = new CaculatorController(caculator, inputService, view, data); + Application.Run(view); + } + } +} \ No newline at end of file diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs new file mode 100644 index 0000000..23bb63b --- /dev/null +++ b/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.42000 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace calculator.Properties { + using System; + + + /// + /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. + /// + // Этот класс создан автоматически классом 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() { + } + + /// + /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. + /// + [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("calculator.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Перезаписывает свойство CurrentUICulture текущего потока для всех + /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/Properties/Resources.resx b/Properties/Resources.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Properties/Resources.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Services/Caculyator.cs b/Services/Caculyator.cs new file mode 100644 index 0000000..499eda5 --- /dev/null +++ b/Services/Caculyator.cs @@ -0,0 +1,60 @@ +using System.Globalization; + +namespace calculator.Services +{ + internal class Caculyator : ICaculator + { + public string Calculate(string n, string m, string operation) + { + if (double.TryParse(n, out var numberone) == false) + return string.Empty; + if (double.TryParse(m, out var numbertwo) == false) + return string.Empty; + + return ApplyOperator(operation, numberone, numbertwo).ToString("0.#####"); + } + + public string SingleOperation(string operand, string operation) + { + if (double.TryParse(operand, out var numberone) == false) + return string.Empty; + return ApplyOperator(operation, numberone).ToString("0.#####"); + } + + private static double ApplyOperator(string token, double operand1, double operand2) + { + switch (token) + { + case "+": + return operand1 + operand2; + case "-": + return operand1 - operand2; + case "*": + return operand1 * operand2; + case "/": + return operand1 / operand2; + case "^": + return Math.Pow(operand1, operand2); + default: + throw new ArgumentException($"Invalid operator: {token}"); + } + } + + private static double ApplyOperator(string token, double operand1) + { + switch (token) + { + case "1/": + return 1 / operand1; + case "√": + return Math.Sqrt(operand1); + case "%": + return operand1 / 100; + case "-1": + return operand1 * -1; + default: + throw new ArgumentException($"Invalid operator: {token}"); + } + } + } +} \ No newline at end of file diff --git a/Services/ICaculator.cs b/Services/ICaculator.cs new file mode 100644 index 0000000..8353f64 --- /dev/null +++ b/Services/ICaculator.cs @@ -0,0 +1,7 @@ +namespace calculator.Services; + +public interface ICaculator +{ + string Calculate(string op1, string op2, string operation); + string SingleOperation(string operand, string operation); +} \ No newline at end of file diff --git a/Services/IInputService.cs b/Services/IInputService.cs new file mode 100644 index 0000000..72fefb8 --- /dev/null +++ b/Services/IInputService.cs @@ -0,0 +1,7 @@ +namespace calculator.Services +{ + public interface IInputService + { + public string TryInput(string input); + } +} diff --git a/Services/InputService.cs b/Services/InputService.cs new file mode 100644 index 0000000..0d7dbf4 --- /dev/null +++ b/Services/InputService.cs @@ -0,0 +1,23 @@ +namespace calculator.Services +{ + internal class InputService : IInputService + { + public string TryInput(string input) + { + //если есть знак "бесконечность" - не даёт писать цифры после него + if (input.Contains('∞')) + { + input = input[..^1]; + } + + //ситуация: слева ноль, а после него НЕ запятая, тогда ноль можно удалить + if (input[0] == '0' && (input.IndexOf(".", StringComparison.Ordinal) != 1)) + { + input = input.Remove(0, 1); + } + + return input; + } + + } +} diff --git a/View/ICaculatorView.cs b/View/ICaculatorView.cs new file mode 100644 index 0000000..44cc442 --- /dev/null +++ b/View/ICaculatorView.cs @@ -0,0 +1,11 @@ +namespace calculator.View; + +public interface ICaculatorView +{ + public event Action OperandPressed; + public event Action OperatorPressed; + public event Action SingleOperatorPressed; + public event Action ClearPressed; + public event Action CalculatePressed; + public void UpdateView(string input); +} \ No newline at end of file diff --git a/calculator.csproj b/calculator.csproj new file mode 100644 index 0000000..13ee123 --- /dev/null +++ b/calculator.csproj @@ -0,0 +1,26 @@ + + + + WinExe + net6.0-windows + enable + true + enable + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + \ No newline at end of file diff --git a/calculator.sln b/calculator.sln new file mode 100644 index 0000000..2215a32 --- /dev/null +++ b/calculator.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.33516.290 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "calculator", "calculator.csproj", "{FC5416F2-1AED-4C75-A82D-60774657A984}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FC5416F2-1AED-4C75-A82D-60774657A984}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FC5416F2-1AED-4C75-A82D-60774657A984}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FC5416F2-1AED-4C75-A82D-60774657A984}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FC5416F2-1AED-4C75-A82D-60774657A984}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {4631776A-E30A-4C14-947E-859DF03FE2B7} + EndGlobalSection +EndGlobal