4.6 Входные данные
Входными данными является денежная сумма в числовом формате , вводимая пользователем с клавиатуры.
4.7 Выходные данные
Выходными данными является денежная сумма в словесном формате, отображается программой на экране.
5. Программа и методика испытаний5.1 Цель испытаний
Испытания имеют целью убедиться в правильности работы программы преобразования денежных сумм в чековой книжке из формата чисел в словесный формат.
5.2 Средства и порядок испытаний
Для проведения испытаний необходим персональный компьютер типа IBM - PC стандартной конфигурации , файл программы - currency.exe , файлы библиотеки ТТТ. Для проверки правильности работы программы необходимо вызвать на выполнение файл currency.exe. Затем необходимо ввести все возможные варианты денежных сумм , проверить реакцию на ввод нечисловых данных.
5.3 Результаты испытания
При запуске программы и проверки её работоспособности были получены следующие результаты:
При вводе числа 1 - Сумма прописью : один рубль
При вводе числа 12 - Сумма прописью : двенадцать рублей
При вводе числа 123 - Сумма прописью : сто двадцать три рубля
При вводе числа 1234 - Сумма прописью : одна тысяча двести тридцать четыре рубля
При вводе числа 12345 - Сумма прописью : двенадцать тысяч триста сорок пять рублей
При вводе числа 123456 - Сумма прописью : сто двадцать три тысячи четыреста пятьдесят шесть рублей
При вводе числа 1234567 - Сумма прописью : один миллион двести тридцать четыре тысячи пятьсот шестьдесят семь рублей
При вводе числа 12345678 - Сумма прописью : двенадцать миллионов триста сорок пять тысяч шестьсот семьдесят восемь рублей
При вводе числа 123456789 - Сумма прописью : сто двадцать три миллиона четыреста пятьдесят шесть тысяч семьсот восемьдесят девять рублей.
При вводе нечислового символа - буквы "a" программа выдала звуковой сигнал.
6 Описание применения
Программа запускается обычным образом с клавиатуры персонального компьютера. Запускаемый файл называется currency.exe.
Программа currency.exe запускается из опереционной системы MS-DOS или из оболочки Norton Commander.
После запуска программы на экране появляется окно для ввода денежной суммы в числовом формате.
Диапазон входной информации равен от 0 до 999999999 рублей.
Окончанием ввода денежной суммы служит нажатие пользователем клавиши Enter.
В качестве результата программа выводит на экран словесный эквивалент введённой пользователем денежной суммы.
Заключение
В результате проделанной работы была разработана программа преобразования денежных сумм в чековой книжке из формата чисел в словесный формат. Данная программа может выполнять задачу узкого профиля и обладает удобным интерфейсом.
Разработка предоставляет возможность пользователю за короткое время получить словесный эквивалент от исходной денежной суммы.
Применённая при разработке программы библиотека ТТТ упростила работу программиста , увеличила простоту и надёжность работы программы.
Применение этой программы возможно на IBM - совместимых компьютерах , где установлена система MS - DOS и оснащённых любым видеоадаптером , поддерживающем текстовый режим 80х25 символов.
Список литературы
1. Шахов Э.К. Разработка и документирование программ. Методические ука зания к курсовой работе по программированию. -Пенза : Изд-во Пенз.гос.техн.ун-та,1994. - 59 с.,ил. 8 , табл. 6., библиогр.8 назв.
2. Сергиевский М.В., Шалашов А.В. Турбо Паскаль 7.0 язык, среда программирования. -М: Машиностроение.-1994,-254 с.ил.
Листинг программы
{Преобразование денежных сумм из числового формата в словесный}
Program Currency
Uses Strings, Crt, FastTTT5, StrnTTT5, ReadTTT5, WinTTT5
Const
{Денежныеединицы}
strUnit1 : String='рубль'
strUnit2 : String='рубля'
strUnitM : String='рублей'
{Род денежной единицы
М : мужской
Ж : женский}
strSex : Char='М'
var
ch : Char
Sum : LongInt
{Сумма в числовом формате}
Str1, Str2, Prop : String
{сумма в словесном формате}
Index : Byte
{для разбиения 'Prop' на две строки,
если 'Prop' длиннее 60 символов}
{Переводит денежную сумму из числового формата в словесный}
FUNCTION ValToStr(nSumNum:LongInt):String
var
Tmp_Prop :String
str1,str10,str100 : Char
{единицы, десятки, сотни}
nNum : String
{сумма в виде String}
nLenNum : Integer
{длина nNum}
{временные строки}
str99,strMld,strHun,strNOne,strTh,strNTh,strMln,strN_Mln : String
{*************** служебные функции ****************}
{перевод единиц,
n9 : число в символьном виде}
FUNCTION STR0_9(n9,strS:Char):String
begin
CASE n9 of
'1':IF strS='М' then str0_9:='один'
ELSE str0_9:='одна'
'2':IF strS='М' then str0_9:='два'
ELSE str0_9:='две'
'3': str0_9:='три'
'4': str0_9:='четыре'
'5': str0_9:='пять'
'6': str0_9:='шесть'
'7': str0_9:='семь'
'8': str0_9:='восемь'
'9': str0_9:='девять'
END
end
{str0_9}
{перевод второго десятка,
n19 : число в символьном виде}
FUNCTION STR10_19(n19:Char):String
begin
str10_19:=''
CASE n19 of
'0': str10_19:='десять'
'1': str10_19:='одиннадцать'
'2': str10_19:='двенадцать'
'3': str10_19:='тринадцать'
'4': str10_19:='четырнадцать'
'5': str10_19:='пятнадцать'
'6': str10_19:='шестнадцать'
'7': str10_19:='семнадцать'
'8': str10_19:='восемнадцать'
'9': str10_19:='девятнадцать'
END
end
{str10_19}
{перевод десятков,
n99 : число в символьном виде}
FUNCTION STR20_90(n99:Char):String
begin
str20_90:=''
CASE n99 of
'2': str20_90:='двадцать'
'3': str20_90:='тридцать'
'4': str20_90:='сорок'
'5': str20_90:='пятьдесят'
'6': str20_90:='шестьдесят'
'7': str20_90:='семьдесят'
'8': str20_90:='восемьдесят'
'9': str20_90:='девяносто'
END
end
{str20_90}
{перевод сотен,
nHund : число в символьном виде}
FUNCTION STR_Hund(nHund:Char):String
begin
str_Hund:=''
CASE nHund of
'1': str_Hund:='сто'
'2': str_Hund:='двести'
'3': str_Hund:='триста'
'4': str_Hund:='четыреста'
'5': str_Hund:='пятьсот'
'6': str_Hund:='шестьсот'
'7': str_Hund:='семьсот'
'8': str_Hund:='восемьсот'
'9': str_Hund:='девятьсот'
END
end
{str_Hund}
{составление строки из единиц, десятков и сотен}
FUNCTION Str0_999(strP_100,strP_10,strP_1,strSex:Char):String
var
Str100: String
begin
IF ((strP_100=' ') OR (strP_100='0')) then
str100:=''
ELSE
str100:=Str_Hund(strP_100)
IF ((strP_10=' ') OR (strP_10='0')) then
str99:=Str0_9(strP_1,'М')
ELSE
IF strP_10='1' then
str99:=Str10_19(strP_1)
ELSE
str99:=Str20_90(strP_10)+' '+str0_9(strP_1,'M')
str100:=Strip('B',' ',str100)
IF length(str100)>0 then
str100:=str100+' '
Str0_999:=Strip('B',' ',str100+str99)
end
{***************** ValToStr *********************************}
Begin
{функцияиз StrnTTT5-переводитцелоечисловстроку}
nNum:=Int_To_Str(nSumNum)
{функция из StrnTTT5-удаляет из строки символы,
(откуда удалять, что удалять, строка)}
nNum:=Strip('B',' ',nNum)
nLenNum:=length(nNum)
{вычисляемдлину}
strHun:=''
strTh:=''
strMln:=''
{если сумма меньше 100}
IF nLenNum<3 then
begin
{функция из StrnTTT5-добавляем слева несколько пробелов}
nNum:=Squeeze('L',' ',3-nLenNum)+nNum
nLenNum:=Length(nNum)
end
{выделяем единицы, десятки и сотни}
str1:=nNum[nLenNum]
str10:=nNum[nLenNum-1]
str100:=nNum[nLenNum-2]
IF NOT ((str1='0') AND (str10='0') AND (str100='0')) then
begin
{переводим в словесный формат сотни}
strHun:=str0_999(str100,str10,str1,strSex)
{выбираем 'рубль', 'рубля' или 'рублей'}
IF (str1='1') AND (str10<>'1') then
strNOne:=strUnit1
ELSE
IF (str1 in ['1'..'4']) AND (str10<>'1') then
strNOne:=strUnit2
ELSE
strNOne:=strUnitM
strHun:=strHun+' '+strNOne
end
ELSE
strHun:=strUnitM
{********}
{еслибольше 999}
IF nLenNum>3 then
begin
{еслименьше 999999}
IF nLenNum<6 then
begin
{добавляем недостающие пробелы}
nNum:=Squeeze('L',' ',6-nLenNum)+nNum
nLenNum:=Length(nNum)
end
{выделям тысячи, десятки и сотни тысяч}
str1:=nNum[nLenNum-3]
str10:=nNum[nLenNum-4]
str100:=nNum[nLenNum-5]
IF NOT ((str1='0') AND (str10='0') AND (str100='0')) then
begin
strTh:=str0_999(str100,str10,str1,'Ж')
{выбираемпадежслова 'тысяча'}
IF (str1='1') AND (str10<>'1') then
strNTh:='тысяча'
ELSE
IF (str1 in ['1'..'4']) AND (str10<>'1') then
strNTh:='тысячи'
ELSE
strNTh:='тысяч'
strTh:=strTh+' '+strNTh
end
END
{********}
{если больше больше 999.999}
IF nLenNum>6 then
begin
{еслименьше 999.999.999}
IF nLenNum<9 then
begin
{добавляемпробелы}
nNum:=Squeeze('L',' ',9-nLenNum)+nNum
nLenNum:=Length(nNum)
END
{выделяем миллионы, десятки и сотни миллионов}
str1:=nNum[nLenNum-6]
str10:=nNum[nLenNum-7]
str100:=nNum[nLenNum-8]
IF NOT ((str1='0') AND (str10='0') AND (str100='0')) then
begin
{выбираем падеж слова миллион}
strMln:=str0_999(str100,str10,str1,'M')
IF (str1='1') AND (str10<>'1') then
strN_Mln:='миллион'
ELSE
IF (str1 in ['1'..'5']) AND (str10<>'1') then
strN_Mln:='миллиона'
ELSE
strN_Mln:='миллионов'
strMln:=strMln+' '+strN_Mln
END
END
{********}
{удаляем пробелы из строки миллионов}
strMln:=Strip('B',' ',strMln)
IF Length(strMln)>0 then
strMln:=strMln+' '
{добавляем справа один пробел}
{удаляем пробелы из строки тысяч}
strTh:=Strip('B',' ',strTh)
IF Length(strTh)>0 then
strTh:=strTh+' '
{добавляем справа один пробел}
{удаляем пробелы из строки сотен}
strHun:=Strip('B',' ',strHun)
{складываем строки миллионов, тысяч и сотен в одну строку}
Tmp_Prop:=strMln+strTh+strHun
{переводим первый символ полученной строки в верхний регистр}
Tmp_Prop[1]:=UpCase(Tmp_Prop[1])
{возвращаем итоговую строку}
ValToStr:=Tmp_Prop
end
{ValToStr}
{*********** MAIN ***********}
Begin
Str1:=''
Str2:=''
clrscr
{функция из WinTTT5-очищаем экран от текста}
ClearText(1,1,80,25,White,Blue)
{функция из ReadTTT5-считываем длинное целое, допустимые значения 0-999999999
(столбец, строка, длина поля ввода, приглашение, тип рамки,
минимальное значение, максимальное значение)}
Read_LongInt(25,10,9,'Введите число : ',4,Sum,0,999999999)
{переводим из числового формата в символьный}
Prop:=ValToStr(sum)
{функция из WinTTT5-отключаем курсор}
OffCursor
Index:=61
{максимальная длина строки для вывода на экран}
{функция из FastTTT5-выводим текст в нужном месте
(столбец, строка, цвет текста, фон, текст)}
WriteAt(2,14,Yellow,Blue,'Суммапрописью : ')
{если символьная строка длиннее 60 символов}
if Length(Prop)>60 then
begin
{ищем слева от 60-го символа первый пробел}
repeat
dec(Index)
until Prop[Index]=' '
{выделяем левую часть символьной строки (до 60-го символа)}
Str1:=Squeeze('L',Prop,Index)
{выделяем правую часть символьной строки (после 60-го символа)}
Str2:=Squeeze('R',Prop,Length(Prop)-Index+1)
{выводимлевуючасть}
WriteAt(19,14,White,Blue,Str1)
{выводимправуючасть}
WriteAt(19,15,White,Blue,Str2)
end
else {выводимсимвольнуюстрокуполностью}
WriteAt(19,14,White,Blue,Prop)
{ждемнажатияклавиши}
ch:=readkey
{функция из WinTTT5-восстанавливаем исходный режим экрана}
Reset_StartUp_Mode
end.
ПриложениеВ
( рекомендательное )
Результаты тестирования программы