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

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

Пояснительная записка к заданию на вычислительную практику по дисциплине  “Основы алгоритмизации и языки программирования”

Выполнил : студент гр. 96 АЭ2  Ю. Ф. Фролкина

Пензенский государственный технический университет, Кафедра  “Информационно - вычислительные  системы”

1997

Пояснительная записка содержит 21 лист , 2 приложения , 2 источника.

Объектом работы является денежная сумма в чековой книжке.

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

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

Программа написана на языке Turbo Pascal и предназначена для эксплуотации под управлением операционной системы MS-DOS.

При разработке данной программы была использованя библиотека ТТТ , которая упростила как саму программу , так и процесс её разработки.

Введение

Сейчас, на пороге ХХI века, огромный выбор программ предназначенных для помощи человеку в различных сферах его деятельности.

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

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

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

1 Анализ требований

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

Определить целесообразность использования при проектировании данной задачи библиотеки ТТТ.

2 Техническое задание

2.1 Основание для разработки 

Основанием для разработки служит задание на вычислительную практику  по курсу "Основы алгоритмизации и языки программирования", выданное на кафедре ИВС ПГТУ , доцентом  А.В. Ерёменко , утверждённое заведующим кафедрой профессором  Э.К. Шаховым.

2.2 Назначение разработки

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

2.3 Требования к программе или программному изделию

2.3.1 Требования к функциональным характеристикам

Программа должна выполнять следующие функции:

а ) вывод на экран окна для запроса исходной числовой суммы 

б ) организация ввода данных с отображением их на экране и контролем ввода нечисловых символов , а также с возможностью удаления уже введённых числовых символов 

в ) перевод введённой суммы в словесный формат 

г ) вывод введённой суммы на экран в словесном формате.

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

Выходными данными должны быть словесное выражение, составленное в соответствии введённой пользователем денежной суммы.

2.3.2 Требования к надёжности:

Программа должна работать  без прерываний по программным ошибкам, а именно:         

а ) При вводе нечислового символа, программа должна выводить звуковой сигнал и не учитывать этот символ 

б) При заполненнии всего отведённого количества символов (9 символов) и попытке ввода следующего программа должна ввести этот символ как последний - девятый.

в ) При выводе полученного словесного выражения программа должна перенести это выражение на следующую строку экрана в том случае , если длина словесного выражения больше чем 60 символов.

2.3.3 Требования к составу и параметрам технических средств

Программа должна быть предназначена для использования на персональном компьютере типа IBM AT стандартной комплектации. 

2.3.4 Требования к информационной и программной совместимости

Программа должна быть написана на языке Турбо-Паскаль 6.0 или выше. Для  её  функционирования  на персональном  компьютере  должна быть установлена операционная система  MS-DOS . В качестве дополнительных программных средств могут использоваться стандартные модули Турбо -Паскаля. Должна быть проанализирована целесообразность использования библиотеки TTT. 

2.4 Требования к программной документации

Пояснительная  записка  должна  содержать следующие программные документы:

а ) техническое задание 

б ) описание программы 

в ) текст программы 

г ) программа и методика испытаний 

д ) описание применения 

е ) результаты тестирования.

Правила оформления и содержание этих программных документов регламентированы стандартами ЕСПД.

2.5 Порядок контроля и приёмки

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

3 Описание метода решения

Метод решения поставленной задачи заключается в последовательном просмотре введённой суммы в числовом формате , выделении в качестве строки символов и проверки каждой числовой тройки : 

1 ) единицы , десятки и сотни 

2 ) тысячи , десятки тысяч и сотни тысяч 

3 ) миллионы , десятки и сотни миллионов.

Каждая числовая тройка (если она есть) преобразуется в соответствии со своим содержимым путём просмотра каждого элемента тройки и преобразования в словесный эквивалент с учётом падежей.

Если в какой-либо из троек не достаёт количества чисел , то вместо них подставляются пробелы и анализируются.

Затем полученные строковые выражения складываются вместе и выводятся на экран с учётом переноса строки , если она целиком не умещается на экране.

4. Описание программы

4.1 Общие сведения

Разработанная программа имеет название currency.exe. Программа написана на алгоритмическом языке Тurbo Pasca v. 6.0. , её исходный текст находится в файле currency.pas . Для её нормального функционирования на персональном компьютере должна быть установлена операционная система MS-DOS версии 3.0 или выше. 

4.2 Функциональное назначение

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

4.3 Описание логической структуры

Данная программа содержит в себе необходимые процедуры и функции с использованием стандартных модулей языка Turbo Pascal :

Сrt - модуль , содержащий в себе функции , необходимые для работы с экраном в текстовом режиме 

Strings - модуль , функции которого обеспечивают работу со строковыми переменными.

Так же при разработке программы для её упрощения были использованы модули из библиотеки ТТТ: FastTTT5 , StrnTTT , ReadTTT5 , WinTTT5 , которые предазначены для упрощения процесса программирования при работе с экраном , поцессом ввода и вывода информации.

В начале программы вызывается функция модуля WinTTT5 - СlearText , которая очищает заданную область экрана и запролняет его заданным цветом.

Затем вызывается фунуция модуля ReadTTT5 - Read_Longint , которая рисует на экране рамку в заданных координатах и заданным размером , выводит приглашение и организует ввод.

После ввода вызывается функция ValToStr с параметром sum типа Longint - введённая пользователем сумма. Эта функция выполняет перевод денежной суммы из числового формата в словесный. Она содержит в себе несколько служебных функций:

Функция STR0_9(n9,strS:char):String , где n9 - денежная сумма , находящаяся в интервале значений от 0 до 9 , strS - род деннежной единицы. Функция осуществляет перевод денежной единицы из числового формата в словесный на заданном интервале значений 

Функция STR10_19(n19:char):String , где n19 - денежная сумма , находящаяся в интервале значений от 10 до 19 . Функция осуществляет перевод денежной единицы из числового формата в словесный на заданном интервале значений 

Функция STR20_90(n99:char):String , где n99 - денежная сумма , находящаяся в интервале значений от 20 до 90 . Функция осуществляет перевод денежной единицы из числового формата в словесный на заданном интервале значений 

Функция STR_Hund(nHund:char):String , где nHund - сотенная часть денежной суммы . Функция осуществляет перевод этой части денежной единицы из числового формата в словесный 

Функция STR0_999(strP_100,strP_10,strP_1,strSex:char):String , где strP_100 - сотенный элемент денежная суммы , strP_10 - элемент десятков денежная суммы , strP_1 - элемент единиц денежная суммы , strSex - род денежной единцы . Функция осуществляет соединение в одну строку полученных значений в словесном эквиваленте для части денежной суммы , находящейся в интервале от 0 до 999.

Далее в основной программе вызывается фунуция модуля WinTTT5 - OffCursor , которая отключает изображение курсора на экране.

Затем вызывается фунуция модуля FastTTT5 - WriteAT , которая осуществляет вывод заданного текста нужным цветом в заданные координаты экрана.

В конце программы вызывается фунуция модуля WinTTT5 - Reset_StartUp_Mode , которая восстанавливает исходный режим экрана.

4.4 Используемые технические средства

Данная программа предназначена для её изпользования на персональном компьютере типа IBM - PC стандартной конфигурации с минимальным объёмом оперативной памяти 640 К.

4.5 Вызов и загрузка

Для вызова программы на выполнение необходимо с помощью команд операционной системы компьютера сделать текущим каталог , в котором находится файл cyrrency.exe и вызвать его на выполнение.

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.

                     Приложение В

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

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