Разработка программы для преобразования денежных сумм в чековой книжке из формата чисел в словесный формат
Пояснительная записка к заданию на вычислительную практику по дисциплине “Основы алгоритмизации и языки программирования”
Выполнил : студент гр. 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.
Приложение В
( рекомендательное )
Результаты тестирования программы
Список литературы
Для подготовки данной работы были использованы материалы с сайта http://kurslab.chat.ru/