Программа "Калькулятор двоичных и шестнадцатеричных систем счисления"

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Содержание

Введение

1. Внешнее описание

1.1 Определение требований к программному средству

1.2 Спецификация качества программного обеспечения

1.3 Функциональная спецификация

2. Проектирование

2.1 Проектирование графического интерфейса

3. Программирование

3.1 Спецификация классов

3.2 Описание алгоритма на естественном языке

4. Аттестация

4.1 Тестирование

4.2 Руководство администратора

4.3 Руководство пользователя

Заключение

Приложение А. Листинг программы

Введение

В данной пояснительной записке рассматривается описание программы «Калькулятора двоичных и шестнадцатеричных систем счисления».

Данная программа предназначена для выполнения функций калькулятора. Со стороны пользователя программа очень проста в использовании и имеет простой и интуитивно-понятный интерфейс.

В качестве основного инструмента разработки применяется Delphi 7. Язык программирования Object Pascal.

1. Внешнее описание

1.1 Определение требований к программному средству

Программа должна позволять выполнять простейшие математические функции.

1.2 Спецификация качества программного обеспечения

Функциональность: программа должна являться полностью завершенным программным продуктом, не требующим каких-либо дополнительных специальных компонентов.

Надёжность: программа должна быть автономной.

Эффективность: программа должна функционировать без наличия привода CD/DVD-дисков, должна предъявлять минимальные требования к аппаратному обеспечению, требования к аппаратным ресурсам должны быть намного ниже, чем для самой ОС. Программа должна иметь интуитивно понятный пользовательский графический интерфейс.

1.3 Функциональная спецификация

Минимальные технические характеристики компьютера, на котором гарантируется стабильная работа программы:

— компьютер/процессор: компьютер с процессором класса Pentium II 450 МГц;

— память: 64 МБОЗУ;

— монитор: монитор Super VGA с разрешением 800×600 точек или более высоким, поддерживающий 256 цветов;

— операционная система: операционная система Windows 2000, необходимо наличие Microsoft. NET FrameworkRuntime v2. 0;

— наличие свободного дискового пространства на жёстком диске (порядка 1 мегабайта).

Внешние функции:

— программа должна выполнять все функции за конечное количество времени;

Критические случаи:

— завершение работы Windows. В этом случае программа должна завершать свою работу.

2. Проектирование

2.1 Проектирование графического интерфейса

Главная форма содержит основные элементы интерфейса и даёт доступ ко всем функциям

Рисунок 1 — главная форма программы

Форма Form1 содержит следующие элементы управления:

— поле для просмотра введенных и вычисленных значений;

— цифровые, арифметические и клавиши управления: для ввода цифр, арифметических операций и функций очистки и вычисления данных;

3. Программирование

3.1 Спецификация классов

Подсистема расчета реализована функцией:

— procedureTForm1. Button17Click (Sender: TObject) — производит арифметические операции над введенными числами;

Подсистема интерфейса — объединяет все остальные подсистемы. Здесь реализован весь пользовательский интерфейс.

Основные методы:

— procedure TForm1. Button1Click (Sender: TObject) вводцифровыхзначений 0−9, `A'-`F';

— procedure TForm1. Button16Click (Sender: TObject);

procedure TForm1. Button12Click (Sender: TObject);

procedure TForm1. Button11Click (Sender: TObject);

procedure TForm1. Button4Click (Sender: TObject); - ввод арифметической операции.

— procedure TForm1. Button24Click (Sender: TObject) — сброс значений и операций

— procedure TForm1. FormKeyDown (Sender: TObject; var Key: Word;

Shift: TShiftState) — удаление последнего символа во введенном числе клавишей BackSpace.

?functionTForm1. BinToInt (Value: integer): double; - функция перевода числа из двоичной системы счисления в десятичную систему счисления.

???functionTForm1. Bin (x: Integer): string; - функция перевода числа из десятичной в двоичную систему счисления.

???functionTForm1. HEX (a:integer):string; - функция перевода числа из десятичной в шестнадцатеричную систему счисления.

???functionTForm1. HexToInt (HexNum: string): LongInt; - функция перевода числа из шестнадцатеричной в десятичную систему счисления.

3.2 Описание алгоритма на естественном языке

Работу программы можно разбить на несколько независимых алгоритмов. Каждый алгоритм запускается соответствующим событием.

Алгоритм арифметической операции. В данном алгоритме происходит проверка условным оператором (if):

ComboBox на индекс =0 (на форме «двоичная»), вызов функции BinToInt для преобразования двух чисел двоичной системы счисления в десятичную систему счисления, арифметические операции `+','-','*','/' над введенными числами и перевод результата из десятичной в двоичную систему счисления функцией IntToBin.

ComboBox на индекс =1 (на форме «шестнадцатеричная»), вызов функции HexToInt для преобразования двух чисел шестнадцатеричной системы счисления в десятичную систему счисления, арифметические операции `+','-','*','/' над введенными числами и перевод результата из десятичной в шестнадцатеричную систему счисления функцией IntToBin.

4. Аттестация

4.1 Тестирование

Для тестирования программы производились различные манипуляции с данными, искусственно создавались всевозможные критические ситуации.

Тест 1. Ввод цифровых данных.

При вводе цифровых данных ошибок не возникает.

Тест 2. Ввод арифметических операций.

При вводе арифметических операций может возникнуть ошибка. Деления на 0 или ввод не ддопустимо большого значения числа.

4.2 Руководство администратора

Программа поставляется в виде исполнимого файла «Calc. exe» размером 14 КБ не требует установки и дополнительной настройки.

Программа не разделяет полномочия на пользовательские и администраторские, вследствие чего руководство администратора будет идентично руководству пользователя.

4.3 Руководство пользователя

программа калькулятор интерфейс алгоритм

Программа предназначена для произведения элементарных арифметических операций над двоичными и шестнадцатеричными числами.

Для ввода числовых, знаковых и арифметических значений используются соответствующие клавиши на форме.

Для очистки и удаления введенного значения используются клавиши Сброс.

Заключение

В рамках курсовой работы была разработана программа калькулятор над двоичными и шестнадцатеричными числами производящая не сложные арифметические действия.

При разработке данного программного средства применялся язык программирования ObjectPascal.

Приложение А. Листинг модуляForm1

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class (TForm)

Edit1: TEdit;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Button5: TButton;

Button6: TButton;

Button7: TButton;

Button8: TButton;

Button9: TButton;

Button10: TButton;

Button11: TButton;

Button12: TButton;

Button13: TButton;

Button16: TButton;

Button17: TButton;

ComboBox1: TComboBox;

Button18: TButton;

Button19: TButton;

Button20: TButton;

Button21: TButton;

Button22: TButton;

Button23: TButton;

Button24: TButton;

procedure Button1Click (Sender: TObject);

procedure Button2Click (Sender: TObject);

procedure Button3Click (Sender: TObject);

procedure Button5Click (Sender: TObject);

procedure Button6Click (Sender: TObject);

procedure Button10Click (Sender: TObject);

procedure Button7Click (Sender: TObject);

procedure Button8Click (Sender: TObject);

procedure Button9Click (Sender: TObject);

procedure Button13Click (Sender: TObject);

procedure FormKeyDown (Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure FormShow (Sender: TObject);

procedure Button17Click (Sender: TObject);

procedure Button16Click (Sender: TObject);

procedure Button12Click (Sender: TObject);

procedure Button11Click (Sender: TObject);

procedure Button4Click (Sender: TObject);

procedure Button23Click (Sender: TObject);

procedure Button18Click (Sender: TObject);

procedure Button19Click (Sender: TObject);

procedure Button20Click (Sender: TObject);

procedure Button21Click (Sender: TObject);

procedure Button22Click (Sender: TObject);

procedure Button24Click (Sender: TObject);

private

{ Private declarations }

OneVod: Integer; One: integer;

Oper: Byte;

Valuel1: String;

function BinToInt (Value: integer): double; //обьявляемздесьнашифункции.

function IntToBin (x: Integer): string;

function IntToHex (a: integer):string;

function HexToInt (HexNum: string): LongInt;

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *. dfm}

function TForm1. BinToInt (Value: integer): double; //функцияпереводаиздвоичнойсистемывдесятичную.

var i, x, g, h, u, kol: integer; f, k: double;

begin

kol: =0;

u: =Value;

while u>0 do //выполняемпокапер. u большенуля.

begin

u: =u div 10; // считаем в счетчик Kol сколько раз наше число u сможет поделиться на (10).

kol: =kol + 1;

end;

begin

f: =0; x: =0;

for i: =1 to kol do // запускаем For выполняет пока i не будет равно kol.

Begin

g: =Value mod 10; // делим наше число на 10 и присваиваем g остаток деления.

h: =Value div 10; // делим наше число на 10 и присваиваем h целую часть после деления.

Value: =h;

k: =g*exp (x*ln (2)); // умножаем g на 2 в степени x.

f: =f+k; // суммируем все значения.

x: =x+1; // счетчик степени x.

end;

end;

BinToInt: =f; // присваиваем конечное значение функции BinToInt.

end;

function TForm1. IntToBin (x: Integer): string; // Функция перевода из десятичного числа в двоичную систему счисления.

const t: array[0. 1] of char = ('0','1'); // Массив с 2 уже заполнеными ячейками 1 и 0, когда мы будем делить наше число mod 2 в переменную res будет + записывать 0 либо 1.

var res: string;

d: integer;

begin

res: ='';

d: =0;

while (x< >0) do // выполняем пока наше число x неравно 0.

begin

d: =x mod 2; // делим наше число x на 2, и присваимваем остаток после деления пер. d.

res: =t[d]+res; // присваиваем строковому типо res 1 или 0.

x: =x div 2; // берем целую часть после деления на 2.

end;

IntToBin: =res; // присваиваем конечное значение функции Bin.

end;

function TForm1. IntToHex (a:integer):string; // функция перевода из десятичной в шестнадцатиричную систему счисления.

const figures: array[1. 15] of char = ('1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'); // Описываем массив и заполняем его значениями шестнадцатиричной системы счисления.

begin

result: ='';

while a>0 do // выполняется пока наше значение a больше нуля.

begin

result: =figures[a mod 16] + result; // делим на 16 наше значение, А в массиве, и в массиве остается (по правилу переводу из десят. в шестнад. систему счисления) нужное нам значение.

a: =a div 16; // берем целую часть после деления A.

end;

end;

function TForm1. HexToInt (HexNum: string): LongInt; // Фукция перевода из шестнадцатеричной в десятичную систему счисления.

begin //Delphi позволяет использовать шестнадцатиричные выражения (используя префикс $).

Result: =StrToInt ('$' + HexNum); // Переводим StrToInt из string (строкового вида) в integer, и присваиваем полученное значение нашей функции.

end;

procedure TForm1. Button1Click (Sender: TObject);

begin

if Edit1. Text='0' then Edit1. Text:=''; // Описываем OnClick кнопокнаформе. Если Edit1 равен 0 то убираем 0 и оставляем пустое окно ввода.

Edit1. Text:=Edit1. Text+'7'; // Прибавляем к уже имеющимся цифрам или просто выводим значение в Edit1. Такжесделаемсостальнымикнопками 0−9,'A'-'F'

end;

procedure TForm1. Button2Click (Sender: TObject);

begin

if Edit1. Text='0' then Edit1. Text:='';

Edit1. Text:=Edit1. Text+'8';

end;

procedure TForm1. Button3Click (Sender: TObject);

begin

if Edit1. Text='0' then Edit1. Text:='';

Edit1. Text:=Edit1. Text+'9';

end;

procedure TForm1. Button5Click (Sender: TObject);

begin

if Edit1. Text='0' then Edit1. Text:='';

Edit1. Text:=Edit1. Text+'4';

end;

procedure TForm1. Button6Click (Sender: TObject);

begin

if Edit1. Text='0' then Edit1. Text:='';

Edit1. Text:=Edit1. Text+'5';

end;

procedure TForm1. Button10Click (Sender: TObject);

begin

if Edit1. Text='0' then Edit1. Text:='';

Edit1. Text:=Edit1. Text+'6';

end;

procedure TForm1. Button7Click (Sender: TObject);

begin

if Edit1. Text='0' then Edit1. Text:='';

Edit1. Text:=Edit1. Text+'1';

end;

procedure TForm1. Button8Click (Sender: TObject);

begin

if Edit1. Text='0' then Edit1. Text:='';

Edit1. Text:=Edit1. Text+'2';

end;

procedure TForm1. Button9Click (Sender: TObject);

begin

if Edit1. Text='0' then Edit1. Text:='';

Edit1. Text:=Edit1. Text+'3';

end;

procedure TForm1. Button13Click (Sender: TObject);

begin

if Edit1. Text='0' then Edit1. Text:='';

Edit1. Text:=Edit1. Text+'0';

end;

procedure TForm1. FormKeyDown (Sender: TObject; var Key: Word;

Shift: TShiftState);

var s: String;

begin

s: =Edit1. Text;

if Key=VK_BACK then Delete (s, Length (s), 1);

if (s='-') or (s='') or (StrToFloat (s)=0) then s: ='0';

Edit1. Text:=s;

end;

procedure TForm1. FormShow (Sender: TObject);

begin

OneVod: =0;

Valuel1: ='';

Oper: =0;

end;

procedure TForm1. Button17Click (Sender: TObject);

var FoVod, Znach2, Otvet: Integer; Znac1, Znac2,Result: double; Fo: string;

begin

If ComboBox1. ItemIndex=0 then // Если ComboBox=0 (или на форме двоичная) то переводим двоичн. значения в десятичную и производим с ними арифметические действия, результат переводим из десят. в двоичную систему счисления.

begin

FoVod: =StrToInt (Edit1. Text); // FoVod типа integer- Присваивает 2 значение которое пользователь введет на форме в Edit после нажатия на кнопку с '='. StrToInt- перевод из string в integer.

Znac1: =BinToInt (OneVod); // Znac1 — вызываем функцию BinToInt (перевода из двоичн. в десятичную.) и отправляем значение OneVod (с первого ввода числа пользователем).

Znac2: =BinToInt (FoVod); // Znac2 — вызываем функцию BinToInt (перевода из двоичн. в десятичную.) и отправляем значение FoVod (с второго ввода числа пользователем).

case Oper of // Case определяет Oper какое арифметическое действие выбрал пользователь и осуществляет его записывая результат в Result.

1: Result: =Znac1+Znac2; // Сумма

2: Result: =Znac1-Znac2; // Разность

3: Result: =Znac1*Znac2; // Произведение

4: Result: =Znac1/Znac2; // Частное

else

Result: =Znac2; //

end;

Edit1. Text:=IntToBin (Trunc (Result)); // Вызываемфункцию (перевода из десят. в двоичную систему счисления, округлив Result (Trunc) и выводим результат в Edit1.

end

else

begin

Fo: =Edit1. Text; // Fo типа string — Присваивает 2 значение которое пользователь введет на форме в Edit после нажатия на кнопку с '='.

Znach2: =HexToInt (Fo); // Znach2 типа double — вызываем функцию HexToInt (перевод из шестнадцатеричной в десят. систему счисления) значение Fo.

case Oper of //Case определяет Oper какое арифметическое действие выбрал пользователь и осуществляет его записывая результат в Result.

1: Result: =One+Znach2; // Сумма

2: Result: =One-Znach2; //Разность

3: Result: =One*Znach2; //Произведение

4: Result: =One/Znach2; //Частное

else

Result: =Znach2; //

end;

Edit1. Text:=IntToHex (Trunc (Result)); // Вызываемфункцию (перевода из десят. в шестнад. систему счисления) и выводим результат в Edit1.

end;

Valuel1: =''; // обнуляем переменные

OneVod: =0; // обнуляем переменные

Oper: =0; // обнуляемпеременные

end;

procedure TForm1. Button16Click (Sender: TObject);

begin

Button17. Click;

if ComboBox1. ItemIndex=0 then // Проверяем ComboBox1 если позиция 0 (или на форме двоичная) то выполняем считывание данных с Edit1 в переменную OneVod типа (integer) преобразовавеё StrToInt.

begin

OneVod: =StrToInt (Edit1. Text);

Oper: =1; // Присваиваем Oper =1 (сумма) для Case.

end

else // Или ComboBox1 позиция 1 (или на форме шестнадцатеричная) то то выполняем считывание данных с Edit1 в переменную One типа (string).

begin

One: =HexToInt (Edit1. Text);

Oper: =1; // Присваиваем Oper =1 (сумма) для Case.

end;

Edit1. Text:='0'; // Убираем все значения с поля ввода Edit1 и оставляем 0 ноль.

end;

procedure TForm1. Button12Click (Sender: TObject);

begin

Button17. Click;

if ComboBox1. ItemIndex=0 then

begin

OneVod: =StrToInt (Edit1. Text);

Oper: =2; // Присваиваем Oper =2 (разность) для Case.

end

else

begin

One: =HexToInt (Edit1. Text);

Oper: =2; // Присваиваем Oper =2 (разность) для Case.

end;

Edit1. Text:='0';

end;

procedure TForm1. Button11Click (Sender: TObject);

begin

Button17. Click;

if ComboBox1. ItemIndex=0 then

begin

OneVod: =StrToInt (Edit1. Text);

Oper: =3; // Присваиваем Oper =3 (произведение) для Case.

end

else

begin

One: =HexToInt (Edit1. Text);

Oper: =3; // Присваиваем Oper =3 (произведение) для Case.

end;

Edit1. Text:='0';

end;

procedure TForm1. Button4Click (Sender: TObject);

begin

Button17. Click;

if ComboBox1. ItemIndex=0 then

begin

OneVod: =StrToInt (Edit1. Text);

Oper: =4; // Присваиваем Oper 4 (Частное) для Case.

end

else

begin

One: =HexToInt (Edit1. Text);

Oper: =4; // Присваиваем Oper 4 (Частное) для Case.

end;

Edit1. Text:='0';

end;

procedure TForm1. Button23Click (Sender: TObject);

begin

if Edit1. Text='0' then Edit1. Text:='';

Edit1. Text:=Edit1. Text+'A';

end;

procedure TForm1. Button18Click (Sender: TObject);

begin

if Edit1. Text='0' then Edit1. Text:='';

Edit1. Text:=Edit1. Text+'B';

end;

procedure TForm1. Button19Click (Sender: TObject);

begin

if Edit1. Text='0' then Edit1. Text:='';

Edit1. Text:=Edit1. Text+'C';

end;

procedure TForm1. Button20Click (Sender: TObject);

begin

if Edit1. Text='0' then Edit1. Text:='';

Edit1. Text:=Edit1. Text+'D';

end;

procedure TForm1. Button21Click (Sender: TObject);

begin

if Edit1. Text='0' then Edit1. Text:='';

Edit1. Text:=Edit1. Text+'E';

end;

procedure TForm1. Button22Click (Sender: TObject);

begin

if Edit1. Text='0' then Edit1. Text:='';

Edit1. Text:=Edit1. Text+'F';

end;

procedure TForm1. Button24Click (Sender: TObject); // Сброс (обнуляем все переменные и готовы к новым арифметическим дествиям).

begin

Valuel1: ='';

OneVod: =0;

One: =0;

Edit1. Text:='0';

end;

end.

ПоказатьСвернуть
Заполнить форму текущей работой