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