Работа с текстовыми и типизированными файлами, данными типа запись
МИНИСТЕРСТВО ТРАНСПОРТА РОССИЙСКОЙ ФЕДЕРАЦИИ (МИНТРАНС РОССИИ)
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ЖЕЛЕЗНОДОРОЖНОГО ТРАНСПОРТА (РОСЖЕЛДОР)
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
СИБИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ПУТЕЙ СООБЩЕНИЯ (СГУПС)
Кафедра «Информационные технологии транспорта»
К У Р С О В О Й П Р О Е К Т
По дисциплине «Информатика»
Тема: «Работа с текстовыми и типизированными файлами,
данными типа запись»
Выполнил(а) |
Проверил |
|||
________________ Подпись |
Ст. гр. ИСТ-112 Павлючков Г.Е. |
________________ Подпись |
Преподаватель Нартова М.М. |
|
________________ Дата |
________________ Дата |
2007 г.
СОДЕРЖАНИЕ
1.Задание…………………………………………………………...3
2.Введение………………………………………………………....4
3.Инструкция пользования………………………………………..6
4.Исходный код…………………………………………………....8
5.Рецензия разработчика программы…………………………...16
5.Список литературы…………………………………………….17
1.Задание
Вариант 25
Ведомость на списание мебели
Инвентарный номер |
Наименование мебели |
Цена, р. |
Процент износа |
Остаточная стоимость, р. |
Заключение о списании |
1 |
2 |
3 |
4 |
5 |
6 |
… |
|||||
Итого |
|||||
В среднем |
1.Исходные данные - гр. 1-4.
Результаты гр. 5-6:
гр. 5=гр.3 - гр. 3 * гр. 4 / 100;
гр. 6= “Списать”, если гр. 4 > 80%;
2.Отсортировать таблицу по возрастанию значений данных гр.3;
3.Определить максимальное и минимальное значения гр.4.
Преподаватель М.М.Нартова___________________
Дата выдачи___________________________________
2.Введение
Программа «Pavlyuchkov» предназначена для списания инвентаря и расчета его остаточной стоимости. Она разработана в среде программирования Borland Delphi 7.
Программа включает в себя набор подпрограмм и функций:
1.Ввод данных (vvod)- с помощью этой процедуры подпрограммы пользователь вводит данные в расчетную таблицу, также в данной процедуре вычисляются расчётные данные (гр.5, гр.6).
2.Вывод на экран (vivod)- с помощью этой процедуры подпрограммы на экран выводятся Исходные данные (гр. 1-4), а также Расчетные данные (гр. 5, гр.6);
3.Сохранение данных (save)- процедура служит для сохранения данных расчетной таблицы в типизированный файл, хранящийся в каталоге программы;
assign(f,name);
{$i-}
reset(f);
{$i+}
if IOResult=0 then begin
writeln … … else
rewrite(f);
for i:=1 to n do
write(f,a[i]);
close(f);
end;
4.Чтение данных (open)- с помощью этой процедуры пользователь может открыть (считать) данные из сохраненного файла и позволяет продолжить работу с ранее сохраненными данными, если же такого файла не существует, программа сообщит об этом пользователю;
assign(f,name);
{$i-}
reset(f);
{$i+}
if ioresult<>0 then writeln(rus('Ошибка открытия'))
else begin
n:=0;
while (not eof(f)) and (n<200) do begin
inc(n);
read(f,a[n]);
end;
close(f);
end;
5.Сохранение в текстовый файл (otchet)- сохранение данных таблицы в текстовый файл;
6.Фильтрация (filtr)- процедура позволяет пользователю отфильтровать и вывести на экран данные таблицы соответствующие указанному критерию;
fl:=false;
for i:=1 to n do
if (a[i].cena>m) and (not fl) then
begin
fl:=true;
writeln… end
else
if a[i].cena>m then
begin
write…
end;
7.Сортировка (sort)- с помощью этой процедуры программа упорядочивает (сортирует) данные по начальной стоимости инвентаря;
begin
for i:=1 to n do
begin
for j:=i to n do
if a[j].cena >= a[i].cena then
begin
c:=a[i];
a[i]:=a[j];
a[j]:=c;
end;
end;
8.Поиск максимума и минимума(max_min)- с помощью этой процедуры программа может определить max и min значения гр.4;
begin
max:=0;
for i:=1 to n do
begin
if a[i].pi>max then max:=a[i].pi;
end;
…
min:=max;
for i:=1 to n do
begin
if a[i].pi<min then
min:=a[i].pi;
end;
9.Удаление (del)- процедура позволяет удалить строку с данными по номеру строки (в случае ошибки пользователя во время ввода);
begin
writeln(rus('Введите номер удаляемой строки'));
readln(m);
for i:=1 to n do
begin
if m=i then
begin
for j:=m to n do
a[j]:=a[j+1];
end; end;
n:=n-1;
Во время разработки я использовал следующие типы данных:
Запись (record) структурированный тип;
Массив (array) порядковый тип;
Word, Byte целочисленный тип;
Real, Extended вещественный тип.
type
mebel=record
inum:word;
name:string[10];
cena:real;
pi:real;
ost:extended;
zos:string[10];
end;
mas=array[1..200]of mebel;
Они были необходимы для упрощения разработки программы
Из-за не совпадения кодировочных таблиц, консольного приложения(ASCII) с кодировочной таблицей в режиме запуска программы (ANSI), программа включает в себя функцию «rus» и «rus1» (Русификатор).
3.Инструкция пользователя
Запустим файл «Pavlyuchkov.exe», появится окно:
Выберите пункт №1 и введите исходные данные, после чего с ними можно будет произвести одно из действий:
2.Вывод исходных и расчётных данных на экран;
К удобству пользователя программа имеет функцию сохранения данных в файл для последующего использования. Для сохранения выберите пункт №3, введите имя сохраняемого файла, если файл с таким именем уже существует, программа спросит вас: Дописать данные в файл? Для согласия введите “Д”, в противном случае введите “Н” и прежде хранящаяся в файле информация будет заменена новыми данными. Для загрузки ранее сохранённой информации выберите пункт №4, ведите имя нужного файла, в случае отсутствия файла с таким именем, программа сообщит об ошибке.
Пункт №5. Сохранение в текстовый файл. Версия для печати. По окончании сохранения появится сообщение “Отчёт готов”. Текстовый файл “pe4at” вы найдёте в папке с данной программой.
Пункт №6.Вывод на экран данных запрашиваемых пользователем. Эта функция позволяет пользователю отфильтровать все данные и вывести на экран только искомые. После выбора этой функции введите значение минимальной стоимости инвентаря необходимого вам.
Функция под пунктом №7 позволяет произвести сортировку гр.3 по убыванию.
Пункт №8. Функция вывода максимального и минимального значений гр.4;
Удаление строки с соответствующим порядковым номером в случае неверного ввода данных. Для этого выберите пункт №9 и укажите порядковый номер строки, которую необходимо удалить.
10.Выход из программы.
Внимание: ключевой клавишей в данной программе является «Enter»,
ее следует нажимать при каждом запросе для дальнейшей работы программы.
Внимание: при запуске программы нужно расширить таблицу, для этого нажмите правой кнопкой мыши на вкладку программы на панели пуск, выберите графу “Свойства”, закладку “Расположение ” и установите ширину окна 500.
4.Исходный код
program Pavlyuchkov;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
mebel=record
inum:word;
name:string[10];
cena:real;
pi:real;
ost:extended;
zos:string[10];
end;
mas=array[1..200]of mebel;
var
n,vsm:byte;
a:mas;
f:file of mebel;
ft:text;
function rus(a:string):string;
var i:byte;
begin
for i:=1 to length(a) do
begin
if (a[i]<='п') and (a[i]<>' ') and (a[i]<>':') and (a[i]<>'.')and (a[i]<>'"') and (a[i]<>'!') and(a[i]<>'/') then
a[i]:=chr(ord(a[i])-64);
if (a[i]>='р') and (a[i]<>' ') and (a[i]<>':') and (a[i]<>'.')and (a[i]<>'"') and (a[i]<>'!') and(a[i]<>'/') then
a[i]:=chr(ord(a[i])-16);
end;
rus:=a;
end;
function rus1(a:string):string;
var i:byte;
begin
for i:=1 to length(a) do
begin
if (a[i]<='п') and (a[i]<>' ') and (a[i]<>':') and (a[i]<>'"') and (a[i]<>'!') and(a[i]<>'/')and (a[i]<>',') then
a[i]:=chr(ord(a[i])+64);
if (a[i]>='р') and (a[i]<>' ') and (a[i]<>':') and (a[i]<>'"') and (a[i]<>'!') and(a[i]<>'/') and (a[i]<>'"') then
a[i]:=chr(ord(a[i])+16);
end;
rus1:=a;
end;
procedure vvod(var a:mas;var n:byte);
begin
inc(n);
write (rus('Введите инвентарный номер: '));
readln (a[n].inum);
write (rus('Введите наименование мебели: '));
readln (a[n].name);
write (rus('Введите стоимость: '));
readln (a[n].cena);
write (rus('Введите процент износа: '));
readln (a[n].pi);
a[n].ost:=a[n].cena-a[n].cena*a[n].pi/100;
if a[n].pi>80 then a[n].zos:= rus('Списать');
writeln; writeln;
end;
procedure vivod(a:mas;n:byte);
var i:byte;
icena:real; iost:extended;
begin
icena:=0;
iost:=0;
writeln ('+-----------+------------+----------+----------+------------+------------+');
writeln ('|',rus('Инвентарный'),'|',rus('Наименование'),'| ',rus('Цена'),' | ',rus('Процент'),' |',rus('Остаточная'),' | ',rus('Заключение'), ' |');
writeln ('| ',rus('номер'),' | ',rus('мебели'),' | ',rus('руб'),' | ',rus('износа'),' | ',rus('стоимость'),' | ',rus('о списании'), ' |');
writeln ('| ', ' | ', ' | ', ' | ', ' | ',rus('руб'),' | ', ' |');
writeln ('| ', ' | ', ' | ', ' | ', ' | ', ' | ', ' |');
writeln ('+-----------+------------+----------+----------+------------+------------+');
for i:= 1 to n do begin
write ('|',a[i].inum:10,' |');
write (a[i].name:12,'|');
write (a[i].cena:8:2,' |');
write (a[i].pi:8:2,' |');
write (a[i].ost:8:2,' |');
writeln (a[i].zos:9,' |');
icena:=icena+a[i].cena;
iost:=iost+a[i].ost;
end;
writeln ('+-----------+------------+----------+----------+------------+------------+');
writeln ('|',rus('Итого '),'| |',icena:8:2,' | ', ' |',iost:8:2,' | ', ' |');
writeln ('+-----------+------------+----------+----------+------------+------------+');
writeln ('|',rus('В среднем '),'| |',icena/n:8:2,' | ', ' |',iost/n:8:2,' | ', ' |');
writeln ('+-----------+------------+----------+----------+------------+------------+'); writeln; writeln;
end;
procedure save(a:mas;n:byte);
var i:byte; otvet:char; name:string;
begin
writeln('Введите имя файла для сохранения');
readln(name);
assign(f,name);
{$i-}
reset(f);
{$i+}
if IOResult=0 then
begin
writeln('Дописать данные в файл д/н ');
readln(otvet);
if otvet= 'д' then seek(f,filesize(f))
else rewrite(f);
end
else
rewrite(f);
for i:=1 to n do
write(f,a[i]); { запись в файл из массива}
close(f);
writeln ('Данные сохранены');
writeln;
end;
procedure open(var a:mas;var n:byte);
var name:string;
begin
writeln (rus('Введите имя сохраненного файла'));
readln(name);
assign(f,name);
{$i-}
reset(f);
{$i+}
if ioresult<>0 then writeln(rus('Ошибка открытия'))
else
begin
n:=0;
while (not eof(f)) and (n<200) do
begin
inc(n);
read(f,a[n]); { запись в массив из файла}
end;
close(f);
end;
vivod(a,n);
end;
procedure otchet(a:mas;n:byte);
var i:byte;
icena:real;
iost:extended;
begin
icena:=0;
iost:=0;
assign(ft,'pe4at.txt');
rewrite(ft);
writeln (ft,' ****************************');
writeln (ft,' Ведомость на списание мебели');
writeln (ft,' ****************************');
writeln;
writeln (ft,'+-----------+------------+----------+----------+------------+------------+');
writeln (ft,'|Инвентарный|Наименование| Цена | Процент |Остаточная | Заключение |');
writeln (ft,'| номер | мебели | руб | износа | стоимость | о списании |');
writeln (ft,'| | | | | руб | |');
writeln (ft,'| | | | | | |');
writeln (ft,'+-----------+------------+----------+----------+------------+------------+');
for i:=1 to n do begin
write (ft,'|',a[i].inum:10,' |');
write (ft,rus1(a[i].name):12,'|');
write (ft,a[i].cena:8:2,' |');
write (ft,a[i].pi:8:2,' |');
write (ft,a[i].ost:8:2,' |');
writeln (ft,rus1(a[i].zos):9,' |');
icena:=icena+a[i].cena;
iost:=iost+a[i].ost;
end;
writeln (ft,'+-----------+------------+----------+----------+------------+------------+');
writeln (ft,'|Итого | |',icena:8:2,' | |',iost:8:2,' | |');
writeln (ft,'+-----------+------------+----------+----------+------------+------------+');
writeln (ft,'|В среднем | |',icena/n:8:2,' | |',iost/n:8:2,' | |');
writeln (ft,'+-----------+------------+----------+----------+------------+------------+');
write (rus('Отчет готов')); writeln; writeln;
end;
procedure filtr(a:mas;n:byte);
var
m:word;
fl:boolean;
i:byte;
icena:real;
iost:extended;
begin
write(rus('Введите минимальную стоимость товара '));
readln (m);
fl:=false;
for i:=1 to n do
if (a[i].cena>m) and (not fl) then
begin
icena:=0;
iost:=0;
fl:=true;
writeln ('+-----------+------------+----------+----------+------------+------------+');
writeln ('|',rus('Инвентарный'),'|',rus('Наименование'),'| ',rus('Цена'),' | ',rus('Процент'),' |',rus('Остаточная'),' | ',rus('Заключение'), ' |');
writeln ('| ',rus('номер'),' | ',rus('мебели'),' | ',rus('руб'),' | ',rus('износа'),' | ',rus('стоимость'),' | ',rus('о списании'), ' |');
writeln ('| ', ' | ', ' | ', ' | ', ' | ',rus('руб'),' | ', ' |');
writeln ('| ', ' | ', ' | ', ' | ', ' | ', ' | ', ' |');
writeln ('+-----------+------------+----------+----------+------------+------------+');
write ('|',a[i].inum:10,' |');
write (a[i].name:12,'|');
write (a[i].cena:8:2,' |');
write (a[i].pi:8:2,' |');
write (a[i].ost:8:2,' |');
writeln (a[i].zos:9,' |');
icena:=icena+a[i].cena;
iost:=iost+a[i].ost;
end
else
if a[i].cena>m then
begin
write ('|',a[i].inum:10,' |');
write (a[i].name:12,'|');
write (a[i].cena:8:2,' |');
write (a[i].pi:8:2,' |');
write (a[i].ost:8:2,' |');
writeln (a[i].zos:9,' |');
icena:=icena+a[i].cena;
iost:=iost+a[i].ost;
end;
writeln ('+-----------+------------+----------+----------+------------+------------+');
writeln ('|',rus('Итого '),'| |',icena:8:2,' | ', ' |',iost:8:2,' | ', ' |');
writeln ('+-----------+------------+----------+----------+------------+------------+');
writeln ('|',rus('В среднем '),'| |',icena/n:8:2,' | ', ' |',iost/n:8:2,' | ', ' |');
writeln ('+-----------+------------+----------+----------+------------+------------+');
writeln; writeln;
end;
procedure sort (a:mas; n:byte);
var
i,j:byte; c:mebel;
begin
for i:=1 to n do
begin
for j:=i to n do
if a[j].cena >= a[i].cena then
begin
c:=a[i];
a[i]:=a[j];
a[j]:=c;
end;
end;
vivod(a,n);
end;
procedure max_min(var a:mas; n:byte);
var
max,min:real;
i:byte;
begin
max:=0;
for i:=1 to n do
begin
if a[i].pi>max then max:=a[i].pi;
end;
writeln(rus('Максимальный процент износа'),': ',max:5:2);
writeln;
min:=max;
for i:=1 to n do
begin
if a[i].pi<min then
min:=a[i].pi;
end;
writeln(rus('Минимальный процент износа'),': ',min:5:2);
writeln;
end;
procedure del(var a:mas;var n:byte);
var m,i,j:byte;
begin
writeln(rus('Введите'),' ',rus('номер'),' ',rus('удаляемой'),' ',rus('строки'));
readln(m);
for i:=1 to n do
begin
if m=i then
begin
for j:=m to n do
a[j]:=a[j+1];
end;
end;
n:=n-1;
vivod(a,n);
end;
begin
writeln ('****************************');
writeln (rus('Ведомость на списание мебели'));
writeln ('****************************');
writeln;
n:=0;
repeat
writeln(rus('Главное меню'));
writeln('1.',rus('Ввод данных'));
writeln('2.',rus('Вывод списка'));
writeln('3.',rus('Сохранить данные'));
writeln('4.',rus('Загрузить данные'));
writeln('5.',rus('Версия для печати'));
writeln('6.',rus('Поиск по критерию'));
writeln('7.',rus('Сортировка по цене'));
writeln('8.',rus('Макс'),'/',rus('мин процент износа'));
writeln('9.',rus('Удаление строки'));
writeln('10.',rus('Выход'));
write(rus('Выберите номер пункта'));write(': ');
readln (vsm);
writeln; writeln;
case vsm of
1:vvod(a,n);
2:vivod(a,n);
3:save (a,n);
4:open (a,n);
5:otchet (a,n);
6:filtr (a,n);
7:sort (a,n);
8:max_min (a,n);
9:del(a,n);
10:writeln (rus('Ура! '),'=]');
end;
until vsm=10;
readln;
end.
5.Рецензия разработчика программы
Недостатки программы.
Первый недостаток программы данного курсового проекта заключается в его интерфейсе. Т.к. для работы с программой мы в основном используем клавиатуру, что делает программу зависимой от устройств ввода (клавиатуры) и при поломке данного устройства мы не сможем использовать программу.
Второй недостаток программы заключается в том, что при сохранении в текстовый файл у нас может появиться непонятный набор символов. Это недостаток возникает из-за разной разрядности программ использованных в данном курсовом проекте.
Пример:
Допустим, что мы сохраняем наш файл в текстовый редактор word, который основан 32 разрядной системе, в том время как консольное приложение Borland DELPHI 7 основано на 16 разрядной системе, поэтому у нас в текстовом редакторе word появляется непонятный набор символов. Можно попробовать вставить в текст программы русификатор (которой используется в данном курсовом проекте), однако и он не всегда помогает решить эту проблему.
При желании можно найти множество недостатков в данной программе, но на мой взгляд я смог выделить наиболее значимые недостатки данной программы и поэтому я становлюсь на этом и переду к плюсам.
Плюсы программы.
Первый плюс программы это малый размер занимаемой памяти.
Второй плюс программы это, что программу можно постоянно дорабатывать, изменять, усовершенствовать, т.к. конструкция её проста для понимания программиста.
Третий плюс программы в том, что она написана на актуальном языке программирования Pascal с помощью Borland DELPHI 7.
6.Список литературы
1.Лекции по информатике. Нартовой М.М.
Изм
Лист.
№ докум.
Подпись
Дата
Лист.
2
Разраб
Павлючков Г.Е.
Проверил.
Нартова М.М.
Н. Контр.
Утв.
Лит.
Листов
16
СГУПС, ИСТ 112
Изм.
Лист
№ докум.
Подпись
Дата
Лист
3
Изм.
Лист
№ докум.
Подпись
Дата
Лист
4
Изм.
Лист
№ докум.
Подпись
Дата
Лист
5
Изм.
Лист
№ докум.
Подпись
Дата
Лист
6
Изм.
Лист
№ докум.
Подпись
Дата
Лист
7
Изм.
Лист
№ докум.
Подпись
Дата
Лист
8
Изм.
Лист
№ докум.
Подпись
Дата
Лист
9
Изм.
Лист
№ докум.
Подпись
Дата
Лист
10
Изм.
Лист
№ докум.
Подпись
Дата
Лист
11
Изм.
Лист
№ докум.
Подпись
Дата
Лист
12
Изм.
Лист
№ докум.
Подпись
Дата
Лист
13
Изм.
Лист
№ докум.
Подпись
Дата
Лист
14
Изм.
Лист
№ докум.
Подпись
Дата
Лист
15
Изм.
Лист
№ докум.
Подпись
Дата
Лист
16
Изм.
Лист
№ докум.
Подпись
Дата
Лист
17
Работа с текстовыми и типизированными файлами, данными типа запись