Смекни!
smekni.com

Разработка программы для преобразования денежных сумм в чековой книжке из формата чисел в словесный формат (стр. 2 из 2)

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.

ПриложениеВ

( рекомендательное )

Результаты тестирования программы