калькулятор windows исходный код
Калькулятор windows исходный код
The Windows Calculator app is a modern Windows app written in C++ and C# that ships pre-installed with Windows. The app provides standard, scientific, and programmer calculator functionality, as well as a set of converters between various units of measurement and currencies.
Calculator ships regularly with new features and bug fixes. You can get the latest version of Calculator in the Microsoft Store.
Your computer must be running Windows 10, version 1803 or newer.
Install the latest version of Visual Studio (the free community edition is sufficient).
Install the XAML Styler Visual Studio extension.
Open src\Calculator.sln in Visual Studio to build and run the Calculator app.
For a general description of the Calculator project architecture see ApplicationArchitecture.md.
To run the UI Tests, you need to make sure that Windows Application Driver (WinAppDriver) is installed.
Want to contribute? The team encourages community feedback and contributions. Please follow our contributing guidelines.
If Calculator is not working properly, please file a report in the Feedback Hub. We also welcome issues submitted on GitHub.
For information regarding Windows Calculator plans and release schedule, please see the Windows Calculator Roadmap.
Adding graphing calculator functionality is on the project roadmap and we hope that this project can create a great end-user experience around graphing. To that end, the UI from the official in-box Windows Calculator is currently part of this repository, although the proprietary Microsoft-built graphing engine, which also drives graphing in Microsoft Mathematics and OneNote, is not. Community members can still be involved in the creation of the UI, however developer builds will not have graphing functionality due to the use of a mock implementation of the engine built on top of a common graphing API.
This project collects usage data and sends it to Microsoft to help improve our products and services. Read our privacy statement to learn more. Diagnostic data is disabled in development builds by default, and can be enabled with the SEND_DIAGNOSTICS build flag.
Windows Calculator includes a currency converter feature that uses mock data in developer builds. The data that Microsoft uses for the currency converter feature (e.g., in the retail version of the application) is not licensed for your use. The mock data will be clearly identifiable as it references planets instead of countries, and remains static regardless of selected inputs.
Reporting Security Issues
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the MIT License.
About
Windows Calculator: A simple yet powerful calculator that ships with Windows
Windows калькулятор теперь Open-Source
Мы рады рассказать, что на прошлой неделе наш Windows Calculator стал OpenSource. Сейчас он доступен на GitHub по лицензии MIT. Это включает в себя исходный код, структуру сборки, модульные тесты и структуру продукта. Наша цель — создать еще лучший продукт в партнерстве с сообществом. Мы поощряем ваши свежие идеи и активное участие в определении будущего Windows Calculator.
Как разработчики, если вы хотите узнать, как работают различные части приложения «Калькулятор», легко интегрировать логику или пользовательский интерфейс «Калькулятор» в свои собственные приложения или внести непосредственный вклад во что-то, что есть в Windows, теперь вы можете это сделать. Калькулятор будет продолжать проходить все обычные процессы тестирования, проверки соответствия, безопасности, качества и проверки внутренних данных, как это происходит со всем остальными приложениями. Вы можете узнать больше об этом в документации на GitHub.
Совместная разработка
Помимо повторного использования и адаптации кода в ваших собственных приложениях, каждый может принять участие в разработке калькулятора Windows. Вовлечься просто. Проект “clone-and-go”, и его развитие будет осуществляться в соответствии со стандартным процессом GitHub. На всех этапах разработчики могут внести свой вклад:
Обучение
Изучение кода калькулятора — отличный способ узнать о новейших технологиях Microsoft, таких как универсальная платформа Windows, XAML и Azure Pipelines. Благодаря этому проекту разработчики могут извлечь уроки из полного цикла разработки Microsoft, а также повторно использовать код для создания собственных продуктов. Это также отличный пример создания Fluent app design. Чтобы сделать это еще проще, мы будем предоставлять пользовательские элементы управления и расширения API, которые мы используем в калькуляторе и других приложениях, для таких проектов, как Windows Community Toolkit и Windows UI Library.
Мы рады пригласить всех вас в команду Windows Calculator! Чтобы начать, заходите в проект Windows Calculator на GitHub.
Подсчитаем баги в калькуляторе Windows
Введение
Калькулятор Windows наверняка знаком каждому пользователю этой операционной системы и не требует особого представления. Теперь же любой пользователь может изучить исходный код калькулятора на GitHub и предложить свои улучшения.
Общественность, например, уже обратила внимание на такую функцию:
которая логирует текст из буфера обмена и, возможно, отправляет его на серверы Microsoft. Но эта заметка не об этом. Хотя подозрительных примеров кода будет много.
Мы проверили исходный код калькулятора с помощью статического анализатора PVS-Studio. Так как код написан на нестандартном C++, многие постоянные читатели блога анализатора усомнились в возможности анализа, но это оказалось возможным. C++/CLI и C++/CX поддерживаются анализатором. Некоторые диагностики выдали ложные предупреждения из-за этого, но ничего критичного не произошло, что помешало бы воспользоваться этим инструментом.
Возможно, вы пропустили новости и о других возможностях PVS-Studio, поэтому хочу напомнить, что кроме проектов на языках C и C++, можно проанализировать код и на языках C# и Java.
Про неправильное сравнение строк
V547 Expression ‘m_resolvedName == L«en-US»’ is always false. To compare strings you should use wcscmp() function. Calculator LocalizationSettings.h 180
Я просматриваю отчёты анализатора, сортируя их по возрастанию номеров диагностик, и предупреждение на этот код было самым первым в списке, и очень удачным.
Дело в том, что здесь неправильно сравниваются строки. Получилось сравнение указателей вместо значений строк. Сравнивается адрес массива символов с адресом строкового литерала. Указатели всегда неравны, поэтому условие всегда ложно. Для правильного сравнения строк следует использовать, например, функцию wcscmp.
Кстати, пока я пишу эту статью, в заголовочном файле массив символов m_resolvedName превратился в полноценную строку типа std::wstring. И теперь сравнение работает правильно. К моменту, когда вы будете читать эту статью, скорее всего, многие другие ошибки тоже будут исправлены благодаря энтузиастам и таким исследованиям, как это.
Утечка памяти в нативном коде
V773 The function was exited without releasing the ‘temp’ pointer. A memory leak is possible. CalcViewModel StandardCalculatorViewModel.cpp 529
Мы видим указатель temp, ссылающийся на массив из 100 элементов, под который выделена динамическая память. К сожалению, память освобождается всего в одном месте функции, во всех остальных местах возникает утечка памяти. Она не очень большая, но это всё равно ошибка для C++ кода.
Неуловимое исключение
V702 Classes should always be derived from std::exception (and alike) as ‘public’ (no keyword was specified, so compiler defaults it to ‘private’). CalcManager CalcException.h 4
Анализатор обнаружил класс, унаследованный от класса std::exception через модификатор private (модификатор по умолчанию, если ничего не указано). Проблема такого кода заключается в том, что при попытке поймать общее исключение std::exception исключение типа CalcException будет пропущено. Такое поведение возникает потому, что приватное наследование исключает неявное преобразование типов.
Пропущенный день
V719 The switch statement does not cover all values of the ‘DateUnit’ enum: Day. CalcViewModel DateCalculator.cpp 279
Подозрительно, что в switch не рассмотрен случай с DateUnit::Day. Из-за этого в календарь (переменная m_calendar) не добавляется значение, связанное с днём, хотя метод AddDays у календаря присутствует.
Подозрительные сравнение вещественных чисел
Избыточность
Переменная op уже сравнивалась со значением NumbersAndOperatorsEnum::None и дублирующую проверку можно удалить.
Это гигантское условное выражение изначально имело ширину 218 символов, но я разбил его на несколько строк для демонстрации предупреждения. А переписать код можно до такого короткого и, главное, читабельного варианта:
V524 It is odd that the body of ‘ConvertBack’ function is fully equivalent to the body of ‘Convert’ function. Calculator BooleanNegationConverter.cpp 24
Анализатор обнаружил две функции, которые реализованы одинаково. По названиям функций Convert и ConvertBack можно предположить, что они должны выполнять разные действия, но разработчикам виднее.
Заключение
Наверное, каждый открытый проект от Microsoft давал нам возможность показать важность применения методологии статического анализа. Даже на таких маленьких проектах, как калькулятор. В таких крупных компаниях, как Microsoft, Google, Amazon и других, работает много талантливых программистов, но они такие же люди, которые делают ошибки в коде. Применение инструментов статического анализа кода — один из хороших способов повысить качество программ в любых командах разработчиков.
Проверь свой «Калькулятор», скачав PVS-Studio и попробовав на своём проекте. 🙂
Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Svyatoslav Razmyslov. Counting Bugs in Windows Calculator
Программирование на C, C# и Java
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode
Простенький калькулятор Windows Forms на C#
Создаем исходный код программы-калькулятора в Windows Forms на языке программирования C#.
Также имеется разбор более усовершенствованного калькулятора здесь и простой консольный калькулятор вот здесь.
Для начала нам надо расположить все нужные элементы на форме. Нам понадобятся три TextBox’a и 6 кнопок-Button. Устанавливаем их вот таким образом и переименовываем кнопки в свойствах:
Наш калькулятор основан на взаимодействии двух чисел, поэтому математические операции будут следующие:
Итак, после того, как с графическим оформлением закончено, приступаем к самому коду.
Для всех вышеописанных операций мы создадим отдельные функции. Функции – это, так сказать, подпрограммы в самой программе, выполняющие отдельные задачи. Они помогают сократить и облегчить код.
Вот так у нас будет выглядеть функция сложения:
Разберем этот код по частям:
Для начала мы объявляем программе, что создаем функцию (пишем public static), затем определяем тип функции(double – числовой тип повышенной точности с плавающей запятой, лучший вариант), после даём имя функции(sum) и в скобках записываем то, что, так сказать, получает функция от программы( double a и double b – первое и второе числа, которые мы запишем в первые два TextBox’a). Выражение return возвращает в функцию результат сложения a и b. То есть наша функция получает два числа от пользователя, который введет их в форме и, при помощи return’a, в неё же заносится результат вычисления.
Точно так же создаём функции остальных математических выражений:
Функции созданы, сталось лишь привязать их к кнопкам в форме. Дважды щёлкаем мышью в форме на первую кнопку. Нас переносит в часть кода, которая отвечает за событие, которое произойдет, когда пользователь кликнет на данную кнопку. В теле этого события мы пишем:
Разбор кода начнём, как ни странно, с конца. Мы помним, что при объявлении функции мы писали вот такую часть кода: sum(double a, double b). То есть функция может получить только значения типа double. Также мы помним, что эти значения мы получаем от пользователя, который, в свою очередь, вводит их в первый и второй TextBox’ы. Однако проблема в том, что значения из TextBox’ов воспринимаются программой как строки, то есть типом string. Поэтому их надо конвертировать в нужный нам double, что мы и делаем: sum(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox2.Text))
Значения переведены, сумма посчитана. Осталось вывести её в TextBox3. Однако, у нас опять проблемы с типами. Наша посчитанная сумма принадлежит типу double, а TextBox принимает только string. Конвертируем sum в string и записываем её в TextBox3 как строку.
То же самое проделываем с остальными кнопками и функциями:
Калькулятор Windows получит графический режим
Не так давно на Хабре публиковалась новость о раскрытии кода Калькулятора Windows, одной из наиболее известных программ в мире. Исходный код этого ПО выложен на GitHub.
Тогда же говорилось о том, что разработчики программы предлагают всем желающим вносить свои пожелания и идеи относительно функциональности программы. Из большого числа на данный момент выбрана пока одна. Автор ее предлагает добавить в калькулятор графический режим.
Собственно, здесь все понятно — графический режим даст возможность визуализировать уравнения и функции, примерно то же, что делает Plotting Mode в Matlab. Функция была предложена инженером корпорации Microsoft Дейвом Грочоски (Dave Grochocki). По его словам, графический режим не будет слишком уж продвинутым. Он позволит учащимся строить графики по алгебраическим уравнениям.
«Алгебра — путь в высокие сферы математики и связанные с ней дисциплины. Тем не менее, это один из наиболее сложных для учащихся предметов, очень многие получают по алгебре плохие оценки», — говорит Грочоски. Разработчик считает, что если в калькулятор добавить графический режим, то ученикам и учителям станет проще понимать друг друга на занятиях.
«Графические калькуляторы могут быть весьма дорогими, программные решения требуют лицензирования, онлайн-сервисы не всегда являются оптимальным решением», — продолжает свою мысль Грочоски.
По словам представителей Microsoft, именно графический режим является одним из наиболее часто запрашиваемых возможностей в приложении Feedback Hub, куда пользователи программных продуктов корпорации сбрасывают свои предложения.
Сейчас разработчики Калькулятора пытаются показать, что с течением времени программа совершенствуется. Она появилась на свет в качестве элементарного помощника для выполнения арифметических действий. Сейчас же это надежный научный калькулятор, который может использоваться широким кругом пользователей для решения весьма серьезных задач. В дальнейшем ПО будут улучшать и дальше.
Что касается открытия исходного кода, то это сделано для того, чтобы любой желающий мог ознакомиться с такими технологиями Microsoft как Fluent, Universal Windows Platform, Azure Pipelines и другими. Благодаря этому проекту разработчики могут больше узнать о том, как выполняется работа по созданию тех либо иных проектов в Microsoft. С подробным анализом исходного кода Калькулятора Windows можно ознакомиться здесь, прямо на Хабре.
Программа написана на С++ и содержит более 35000 строк кода. Для компиляции проекта пользователям необходима Windows 10 1803 (или более новая) и последняя версия Visual Studio. Со всеми требованиями можно ознакомиться на GitHub.