Отчет по информатике
на тему
«Работа с базами данных»
ученицы 11 «б» класса
лицея ТМОЛ при ТРТУ
Шаповаловой Юлии
Таганрог, 2001 г.
Содержание.
Содержание…………………………………………2
Цель работы…………………………………………3
О языках программирования.…………………3
Работа с файлами…………………………………4
Работа со строками.………………………………5
Основные проблемы………………………………5
Несущественные замечания……………………6
Приложение…………………………………………7
Цель работы:
написать на языке Turbo Pascal программу, создающую базу данных – список некоторой конкретной группы людей (в данном случае) с указанием их имени, фамилии, пола и краткой характеристики, а затем программу, извлекающую эти сведения из списка путем ввода какой-то конкретной характеристики нужного человека (нескольких людей).
Немного о языках программирования.
Все современные языки делятся на две группы: интерпретирующие и компилирующие. В основе работы языков первого типа лежит построчный перевод в биты – интерпретация. В результате программа существует только в виде текстового файла. Компилирующие языки считаются в настоящее время более перспективными. Сначала исходный текст обрабатывается компилятором, в результате чего появляется объектный файл, обрабатываемый в последствии программой-компоновщиком, после чего появляется исполняемый файл – конечный продукт работы. К компилирующим языкам относят и Pascal.
Собственно, программа.
Программа, как уже сказано представляет собой список некоторого количества людей, который можно обновлять, а также из которого можно извлекать данные на какого-либо человека, задав предварительно одну из его характеристик (фамилию, имя или пол). Так, например, при помощи этой программы можно получить список всех особ мужского или женского (по выбору) пола, с полной характеристикой каждого, данные на человека с заданной фамилией и т. д.
Работа с файлами
.
Для работы с файлами мною были использованы следующие функции:
- Assign – функция, ассоциирующая имя файла с некоторой переменной, с которой и идет последующая работа.
- Reset – функция, открывающая уже существующий файл для чтения из него.
- Rewrite – функция, создающая новый файл, или перезаписывающая старый.
- Readln – чтение из указанного файла строки с переходом на следующую строку.
- Writeln – запись в указанный файл строки с переходом на следующую строку.
Вообще, файл рассматривается не просто как несколько строк, а как запись (record), что значительно упрощает работу с файлами.
Работа со строками
.
Для работы со строками в файле я использовала две основные функции: pos и copy. Функция pos предназначена для поиска какого-либо элемента в заданной строке, я ее использовала для поиска спецсимволов, которыми разделены данные на человека. Функция copy копирует из одной строки в другую некоторое заданное количество символов. При помощи функции pos я ищу знак, которым заканчивается определенный параметр, при помощи функции copy копирую в вспомогательную строку все символы до этого знака, а затем сравниваю с введенным критерием.
Проблемы, с которыми я столкнулась при написании программы.
- Разделение параметров при хранении данных в файле.
Столкнувшись с этой проблемой, я пошла по пути наименьшего сопротивления, и просто принудительно разделила параметры специальными символами (*, &, $). Это позволило легко организовывать проверку окончания раздела. Само собой, этот способ неэффективен при большом количестве разделов и большом объеме информации, хранящейся в них, но в данном случае вполне сойдет. Есть, правда, еще один недостаток: пользователь может случайно ввести эти спецсимволы в процессе использования программы, не подозревая о том, что это как-то скажется на работе программы. Но я посчитала эти недостатки несущественными. Был еще вариант: располагать параметры каждый раз с новой строки. У этого способа есть свои достоинства (например, упрощается процесс считывания и записи в базу данных), но есть и недостатки: значительно усложняется проверка перехода от одного параметра к другому.
- Расположение данных в файлах.
Вообще, решений у этой проблемы великое множество. Одно из них заключается в том, чтобы записывать данные на каждого человека записываются в отдельный файл, а в файле записывать параметры каждый с новой строки. Достоинства этого
Есть еще вариант: каждый параметр на все элементы списка хранится в одном файле. Достоинства: небольшое количество файлов и упрощение процесса поиска. Недостатки: запись в файлы нового досье становится достаточно трудоемким занятием.
Оба эти способа я посчитала громоздкими, поэтому все данные на всех людей хранятся у меня в одном файле, разделенные, как уже говорилось соответствующими символами. Достоинства: во многом упрощается работа с файлами (не нужно мучится с их открытием и закрытием). Правда, файл может получиться слишком большим. Других недостатков у своего пути я не вижу.
Несущественные замечания
.
Хочу повиниться перед проверяющим: вопреки настоятельной просьбе нашего учителя информатики вместо одной программы я написала две: первая заносит данные в файл, вторая извлекает их оттуда. Не считаю это серьезным недостатком своей работы, так как при желании эти две программы всегда можно объединить. Также хочу заметить, что данная программа далеко несовершенна в отношении оформления, но так как передо мной не стояла задача рисовать красивые картинки, я и не стала этого делать.
Результатом моей работы явились две программы, которые я и привожу в заключение.
Приложение
.
Program shit;
uses crt;
var a,s,d:string;
f:text;
n,e,y,q:integer;
begin
assign(f,'iz.txt');
{$I-}
reset(f);
if IOResult>0 then
begin
writeln('Файл не найден');
readln;
halt;
end;
{$I+}
(Эта вставка предназначена на тот случай, если файла со списком нет на диске. Тогда программа выдаст сообщение и завершит свою работу, а не просто вылетит.)
writeln('Введите критерий');
readln(a);
writeln('Если это фамилия, введите 1,
имя - 2, пол - 3');
readln(e);
if e=1 then
begin
repeat
readln(f,s);
n:=pos('*',s);
d:=copy(s,1,n-1);
if d=a then
begin
y:=1;
w:=pos('*',s);
r:=pos('&',s);
t:=pos('$',s);
s:=copy(s,1,w-1)+' '+copy(s,w+1,r-w-1)+'пол '+s[r+1]+
' '+copy(s,t+1,length(s)-t-1);
(Этот блок и все последующие блоки такого типа служат для удаления спецсимволов при выводе на экран строки из файла. Вместо спецсимволов на экран выводятся пробелы и некоторые пояснения.)
writeln(s);
end;
until eof(f);
end;
if e=2 then
begin
repeat
readln(f,s);
n:=pos('*',s);
q:=pos('&',s);
d:=copy(s,n+1,q-n-1);
if d=a then
begin
y:=1;
w:=pos('*',s);
r:=pos('&',s);
t:=pos('$',s);
s:=copy(s,1,w-1)+' '+copy(s,w+1,r-w-1)+' '+s[r+1]+
' '+copy(s,t+1,length(s)-t-1);
writeln(s);
end;
until eof(f);
end;
if e=3 then
begin
if not ((a='м') or (a='ж')) then
begin
writeln('Не выделывайся. Я, конечно знаю парочку гермафродитов,');
writeln('но их нет этом списке. Сто пудов!!!!');
y:=1;
(Проверка на случай не очень умного пользователя.)
end
else
repeat
readln(f,s);
n:=pos('&',s);
if s[n+1]=a[1] then
begin
y:=1;
{ writeln(s);}
w:=pos('*',s);
r:=pos('&',s);
t:=pos('$',s);
s:=copy(s,1,w-1)+' '+copy(s,w+1,r-w-1)+' '+s[r+1]+' '+copy(s,t+1,length(s)-t-1);
writeln(s);
end;
until eof(f);
if not ((e=1) or (e=2) or (e=3)) then
begin
writeln('Слушай, делать нечего, вали из моей программы');
y:=2;
(Проверка на случай не очень умного пользователя)
end;
if not (y=1) or (y=2) then
writeln('Таких здесь нет, и, по-моему никогда не было');
end;
readln
end.