Работа с текстовыми и типизированными файлами, данными типа запись

МИНИСТЕРСТВО ТРАНСПОРТА РОССИЙСКОЙ ФЕДЕРАЦИИ (МИНТРАНС РОССИИ)

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ЖЕЛЕЗНОДОРОЖНОГО ТРАНСПОРТА (РОСЖЕЛДОР)

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

СИБИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ПУТЕЙ СООБЩЕНИЯ (СГУПС)

Кафедра «Информационные технологии транспорта»

К У Р С О В О Й П Р О Е К Т

По дисциплине «Информатика»

Тема: «Работа с текстовыми и типизированными файлами,

данными типа запись»

Выполнил(а)

Проверил

________________

Подпись

Ст. гр. ИСТ-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

Работа с текстовыми и типизированными файлами, данными типа запись