Программа управления базой данных, содержащей информацию о читателях, книгах и работниках библиотеки

Проектирование программы на языке Turbo Pascal, позволяющей просматривать информацию, осуществлять поиск по определённым параметрам, позволять редактировать данные, а также удалять ненужные записи и добавлять новые. Алгоритм и листинг программы.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 26.08.2012
Размер файла 46,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Содержание

Введение

1. Постановка задачи

2. Анализ современных систем программирования

3. Требование к техническим средствам

4. Анализ входных и выходных данных

5. Модель задачи

6. Алгоритм решения

6.1 Обобщенный алгоритм основной программы

6.2 Алгоритм процедуры newkniga

7. Листинг программы

8. Описание работы программы

Заключение

Введение

На данный момент процесс автоматизации уже вовсю используется во всем мире. Автоматизация информационных процессов, увеличивает скорость обработки информации, качество, и наконец удобство использования.

Использование различных программных средств повсеместно, говорит об удобстве и простоте работы с ними. Для создания подобных программ используются современные языки программирования высокого уровня. Примером таких языков являются Delphi, Pascal, C, C++ и многие другие.

Целью моей задачи является достижение наиболее упрощённой работы пользователя с базами данных. Основная задача состоит в учёте книг в библиотеке, а также читателей данной библиотеки. В связи с распространенными и различными свойствами базы данных библиотек, я нашёл наиболее средние данные.

1. Постановка задачи

Разработать на языке Turbo Pascal программу управления базой данных, содержащую информацию о читателях, книгах и работниках библиотеки. Программа должна позволять просматривать информацию, также осуществлять поиск по определённым параметрам, позволять редактировать данные, а также удалять ненужные записи и добавлять новые. Реализовать возможность поиска читателей задерживающих книгу.

Производить выбор читателя (для редактирования/выдачи книг) по его фамилии, если читателей с введённой фамилией несколько, искать нужную запись путём перебора пользователем.

Программа должна иметь удобный для пользователя интерфейс, позволяющий воспользоваться любыми функциями заложенными в программу.

Заполнить базы данных экспериментальной информацией для тестирования, а также начала работы с программой.

Каждая книга характеризуется параметрами:

Уникальный номер (Шифр)

Название

Автор

Издательство

Год издания

Жанр

Количество страниц

Есть в наличии (Два варианта: Да, Нет)

Если книг в наличии нет появляются два новых поля

- Уникальный номер читателя

- Срок сдачи

Читатели характеризуется:

Уникальный номер читателя

ФИО

Домашний телефон

Домашний адрес

Возраст

Библиотекари характеризуется:

ФИО

Должность

2. Анализ современных систем программирования

Существует множество инструментов для создания программ, в частности баз данных. Это и Pascal, C++, Java и многие другие. Это языки высокого уровня, для написания программы используются алгоритмические конструкции, которые описываются не машинными командами, а языком максимально приближенном к человеческому пониманию. Все они позволяют работать как с графикой, так и с мощным математическим аппаратом.

Ниже я рассмотрел краткие характеристики основных языков программирования:

Си

Главный инструмент системного программиста на сегодняшний день. Си имеет очень приятный набор операторов и неудачный конструктор типов. Серьезный недостаток (для языка системного программирования) - почти полное отсутствие механизмов раздельной компиляции. Поскольку Си доминирует на американском рынке средств разработки ПО, ему гарантирована долгая жизнь, несмотря на многочисленные попытки модернизировать его (например, такие, как С++ или Java).

С++

Наиболее популярный клон С, в котором реализован наиболее полный механизм объектно-ориентированного программирования. При создании языка делались так же попытки модернизировать С, введя в его состав такие современные конструкции, как скалярный тип (enum), передача параметра по ссылке (&) или логический тип (bool). К сожалению, последовательными эти попытки назвать нельзя. Получился очень объемный и очень несистемный язык программирования, где наряду с суперсовременными понятиями класса соседствует адресная арифметика, доставшаяся в наследство от С.

Java

Самый “молодой” из включенных в анализ языков программирования и основной инструмент программирования для Internet. Создатели Java безжалостно удалили из С все несовременные конструкции, и в то же время сумели удержаться от излишнего “раздувания” языка включением в него новых теоретических разработок. В результате получился не очень объемный, но стройный, “крепко сбитый” язык программирования с ярко выраженной идеологией. К сожалению, ориентация на Internet не дает возможности использовать Java как язык системного программирования, однако это хороший пример реформы С. Клоном С он является только внешне. Идеологически это хороший пример европейской языковой школы (к которой можно отнести клоны Pascal).

PASCAL.

В языке реализован классический набор операторов и идеальный конструктор типов. Языку очень вредит отсутствие стандартных механизмов раздельной компиляции. В отличие от своего сверстника и конкурента С, PASCAL создавался одномоментно, что и предопределило его малые размеры и идеологическую стройность. С появлением различных модификаций, созданных на его основе, Pascal можно считать устаревшим языком, однако консервативность программного обеспечения, а также простота его освоения не позволяет считать такой вывод окончательным.

ВЫВОД.

Главный вывод, который можно сделать на основе изложенного материала - несомненное сходство языков программирования в основных компонентах, таких, как набор операторов, конструктор типов, механизм процедур и Объектно-Ориентированного Программирования. Различия проявляются только в деталях, семантически современные языки программирования практически идентичны.

Свой выбор языка программирования я объясняю некоторыми знаниями этого языка и его относительную простоту.

3. Требование к техническим средствам

Минимальные:

- Intel 2x86 процессор

- 1 mb ОЗУ

- Операционная система Dos

Рекомендуемые:

- Celeron 400 Mhz и выше

- 8 mb ОЗУ и выше

- Операционная системы поколения Windows любой версии

4. Анализ входных и выходных данных

Входные данные: Для решения задачи необходимо создать 4 файла: файл содержащий данные по всем книгам, файл с данными выдаче книг, файл с данными о библиотекарях и файл с данными о читателях. Файлы организуются как файлы с записями.

Файл “данные по книгам” имеет следующие поля:

- Уникальный номер

- Название

- Автор

- Издательство

- Год издания

- Жанр

- Есть в наличии

Если нет ->

- Срок возврата (день, месяц, год)

- Уникальный номер читателя взявшего книгу

Файл “Читатели” имеет следующие поля:

- Уникальный номер читателя

- Имя

- Фамилия

- Отчество

- Место жительства

- Домашний телефон

- Возраст

Файл “библиотекари ” имеет следующие поля:

- Имя

- Фамилия

- Отчество

- Должность

Кроме исходных файлов используется переменная ch типа char для считывания с клавиатуры данных, введённых пользователем для выполнения запросов.

Выходные данные: Результатом решения задачи, являются данные полученные из исходных файлов. Результатом запроса является список всех книг/читателей, соответствующих параметрам запроса и качественно оформленных.

Промежуточные данные: В ходе решения задачи использовались целочисленные переменные i,j,k,l,m,n и другие в качестве счётчиков для определения длины циклов, для операций выбора и других операций.

5. Модель задачи

Математическое описание: Математические функции используются только для вычисления суммы и счетчиков операций в запросах.

При поиске задержанных книг используются операции сравнения.

6. Алгоритм решения

6.1 Обобщенный алгоритм основной программы

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

6.2 Алгоритм процедуры newkniga

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

7. Листинг программы

Program biblioqw; {Курсовая работа: «Библиотека: Книги, Читатели, Библиотекари}

{Автор: Зыков Николай }

uses crt;

const

norm=$7; {Цвет невыделенного пункта}

sel=$2; {Цвет выделенного пункта }

k=20; {Количество команд меню}

Type knigi=record {Запись с данными о книгах}

nomk,god,kol,nomch,godsv: integer;

naz,auth,izd,zhanr,nal: string;

densv:1..31;

messv:1..12;

end;

type reader=record {Запись с данными о читателях}

name,lname,fname,tel,adress,naruk:string;

nomch,nomk,voz,godsv:integer;

densv:1..31;

messv:1..12;

end;

type biblio=record {Запись с данными о библиотекарях}

name,lname,fname,dolzh:string;

end;

var spknig: file of knigi;

spreader: file of reader;

spbiblio: file of biblio;

i:integer;

menu: array [1..k] of string[35]; {Массив с перечнем команд меню}

punkt:integer; {Переменные для управления меню }

ch:char;

x,y:integer;

{------------------------Рисование линии------------------------------}

procedure ris(a:integer);

var i:integer;

Begin

For i:=1 to a do Write('-');

end;

{------------------------Добавление книги -----------------------------}

procedure newkniga;

var st:knigi;

k:char;

begin

assign(spknig,'knigi.txt');

reset(spknig);

seek(spknig,filesize(spknig)); {Переходим в конец файла для добавления записи }

repeat

clrscr;

ris(35);write('Новая книга');ris(34);

writeln(' Заполните данные о новой книге ');

write('Уникальный номер: '); readln(st.nomk);

write('Название: '); readln(st.naz);

write('Автор: ' ); readln(st.auth);

write('Издательство: '); readln(st.izd);

write('Год издания: '); readln(st.god);

write('Жанр: '); readln(st.zhanr);

write('Количество страниц: '); readln(st.kol);

st.nal:='Да';

write(spknig,st);

ris(80);writeln('');

write('Хотите добавить ещё одну книгу? (Д\Н)');readln(k);

writeln;

until(k='н') or (k='Н');

close(spknig);

end;

{--------------------------------Удаление книги --------------------------}

procedure Clearkn;

var st:knigi;

udal: integer;

fo: file of knigi;

otv:char;

tt: integer;

begin

assign(spknig,'knigi.txt');

reset(spknig);

assign(fo,'newfile.txt');

rewrite(fo);

clrscr;

otv:='g';

ris(33);write('Удаление книги');ris(32);writeln('');

writeln('Введите уникальный номер книги, которую вы хотите удалить из базы:'); поиск программа информация данные

readln(udal);

tt:=0;

while not EoF(spknig) do

Begin

read(spknig,st);

if st.nomk=udal then tt:=1;

end;

If tt<>1 then begin writeln(`Книги с таким номером нет!');readln;end else

Begin

close(spknig);reset(spknig);

Writeln('Вы точно хотите удалить книгу с номером ',udal,' (Д\Н)');

readln(otv);

If (otv='д')or(otv='Д') then

begin

while not eof(spknig) do

begin

read(spknig,st);

if st.nomk<>udal then write(fo,st);

end;

close(spknig);

close(fo);

erase(spknig);

rename(fo,'knigi.txt');

end;

end;

end;

{---------------------------------Просмотр списка книг---------------------}

procedure seekknigi;

var st:knigi;

otv:char;

begin

assign(spknig,'knigi.txt');

reset(spknig);

repeat

read(spknig,st);

clrscr;

ris(34);write('Просмотр списка книг');ris(26); writeln('');

writeln(' Уникальный номер: ',st.nomk);

writeln(' Название: ',st.naz);

writeln(' Автор: ',st.auth);

writeln(' Издательство: ',st.izd);

writeln(' Год издания: ',st.god);

writeln(' Жанр: ',st.zhanr);

writeln(' Количество страниц: ',st.kol);

writeln(' Есть в наличии: ',st.nal);

If (st.nal='Нет') then

Begin

writeln(' Уникальный номер читателя взявшего книгу: ',st.nomch);

writeln(' Срок возврата: ',st.densv,' ',st.messv,' ',st.godsv);

end;

ris(80);

writeln(' Введите "Esc" для окончания ');

otv:=readkey;

Until (EoF(spknig)) or (otv=#27);

close(spknig);

end;

{---------------------------------Взятие возврат книг---------------------}

procedure vvkniga;

var

st:knigi;

str:integer;

nomk2,god2,kol2,nomch2,godsv2: integer;

naz2,auth2,izd2,zhanr2,nal2: string;

name2,lname2,fname2,tel2,adress2,naruk2:string;

voz:integer;

densv2:1..31;

messv2:1..12;

sk:reader;

qw,nomchh,x,n:integer;

famchh:string;

qwe:char;

begin

assign(spknig,'knigi.txt');

reset(spknig);

clrscr;

x:=0;

n:=0;

ris(30);write('Взятие, возврат книг'); ris(30);writeln('');

with st do

begin write('Введите уникальный номер книги, данные о которой вы хотели бы изменить: ');readln(str);

while not eof(spknig) do

Begin

read(spknig,st);

If str=st.nomk then x:=1;

end;

If x=0 then begin writeln('Книги с таким номером нет!'); readln; end

else

begin

write('Фамилия читателя берущего\возвращающего книгу: '); readln(famchh);

assign(spreader,'read.txt');

reset(spreader);

x:=0;

while not eof(spreader) do

Begin

read(spreader,sk);

If famchh=sk.lname then x:=x+1;

end;

If x=0 then begin writeln('Читателя с такой фамилией нет!'); readln; end

else

Begin

close(spreader);reset(spreader);

close(spknig);reset(spknig);

x:=0;

qwe:='q';

while (x<>200) do

Begin

read(spreader,sk);

If famchh=sk.lname then

Begin

If x=1 then begin nomchh:=sk.nomch; x:=200;end else

Begin

writeln('Имя: ',sk.name);

writeln('Фамилия: ',sk.lname);

writeln('Отчество: ',sk.fname);

Writeln('Это данный читатель?(Д\Н)?');

readln(qwe);

end;

end;

If (qwe='Д')or(qwe='д') then begin nomchh:=sk.nomch; x:=200;end;

end;

close(spreader);reset(spreader);

while not eof(spknig) do

begin

read(spknig,st);

if st.nomk=str then

begin

write('Введите 1, если хотите выдать книгу, или 2, если читатель вернул книгу: ');readln(qw);

If (qw<>1) and (qw<>2)

then

Begin

Repeat

writeln('Вы ввели неверное значение ');

write(''Введите 1, если хотите выдать книгу, или 2, если читатель вернул книгу:: ');readln(qw);

Until (qw=1) or (qw=2)

end;

If qw=1 then st.nal:='Нет' else st.nal:='Да';

If (st.nal='Нет')

then

Begin

st.nomch:=nomchh;

write('`Срок возврата (Пример: 01 04 2008): '); readln(st.densv,st.messv,st.godsv);

with st do

x:=0;

while not eof(spreader) do

begin

read(spreader,sk);

if sk.nomch=st.nomch then

Begin

sk.naruk:='Да';

sk.densv:=st.densv;

sk.messv:=st.messv;

sk.godsv:=st.godsv;

sk.nomk:=st.nomk;

name2:=sk.name;

lname2:=sk.lname;

fname2:=sk.fname;

tel2:=sk.tel;

adress2:=sk.adress;

seek(spreader,filepos(spreader)-1);

write(spreader,sk);

end;

end;

end

else

Begin

assign(spreader,'read.txt');

reset(spreader);

with st do

while not eof(spreader) do

begin

read(spreader,sk);

if sk.nomch=st.nomch then

Begin

sk.naruk:='Нет';

name2:=sk.name;

lname2:=sk.lname;

fname2:=sk.fname;

tel2:=sk.tel;

adress2:=sk.adress;

seek(spreader,filepos(spreader)-1);

write(spreader,sk);

end;

end;

close(spreader);

end;

end;

nomk2:=nomk; god2:=god; kol2:=kol; nomch2:=nomch;

godsv2:=godsv; naz2:=naz; auth2:=auth; izd2:=izd;

zhanr2:=zhanr; nal2:=nal; densv2:=densv; messv2:=messv;

seek(spknig,filepos(spknig)-1);

write(spknig,st); x:=1;

end; end; end; end;

close(spknig);

end;

{------------------------------Поиск книги по жанру -------------------------}

procedure poiskknigizh;

var st:knigi;

pp:string;

k:char;

r:integer;

begin

assign(spknig,'knigi.txt');

reset(spknig);

clrscr;

ris(30);write('Поиск книги по жанру'); ris(30);writeln('');

Write('Введите критерий поиска : ');

readln(pp);

r:=0;

k:='0';

repeat

read(spknig,st);

If st.zhanr=pp then

Begin

clrscr;

r:=1;

ris(33);write('Поиск по жанру'); ris(33);writeln('');

writeln('Уникальный номер: ',st.nomk);

writeln('Название: ',st.naz);

writeln('Автор: ',st.auth);

writeln('Издательство: ',st.izd);

writeln('Год издания: ',st.god);

writeln('Жанр: ',st.zhanr);

writeln('Количество страниц: ',st.kol);

writeln('Есть в наличии: ',st.nal);

If (st.nal='Нет')

then

Begin

writeln('Уникальный номер читателя: ',st.nomch);

writeln('Срок возврата: ',st.densv,' ',st.messv,' ',st.godsv);

end;

ris(80);

writeln(' Введите "Esc" для окончания ');

k:=readkey;

end;

until (EoF(spknig)) or (k=#27);

If r=0 then begin writeln('Книги такого жанра нет в библиотеке');readln;end;

close(spknig);

end;

{------------------------------Поиск книги по автору-------------------------}

procedure poiskknigiau;

var st:knigi;

pp:string;

k:char;

r:integer;

begin

assign(spknig,'knigi.txt');

reset(spknig);

clrscr;

ris(30);write('Поиск книги по автору');ris(30);writeln('');

Write('Введите критерий поиска : ');

readln(pp);

r:=0;

repeat

read(spknig,st);

If st.auth=pp then

Begin

clrscr;

r:=1;

ris(33);write('Поиск по автору'); ris(33);writeln('');

writeln('Уникальный номер: ',st.nomk);

writeln('Название: ',st.naz);

writeln('Автор: ',st.auth);

writeln('Издательство: ',st.izd);

writeln('Год издания: ',st.god);

writeln('Жанр: ',st.zhanr);

writeln('Количество страниц: ',st.kol);

writeln('Есть в наличии: ',st.nal);

If (st.nal='Нет')

then

Begin

writeln('Уникальный номер читателя: ',st.nomch);

writeln('Срок возврата: ',st.densv,' ',st.messv,' ',st.godsv);

end;

ris(80);

writeln(' Введите "Esc" для окончания ');

k:=readkey;

end;

until (EoF(spknig)) or (k=#27);

If r=0 then begin writeln('Книги такого автора нет в библиотеке');readln;end;

close(spknig);

end;

{------------------------------Поиск книги по названию---------------------}

procedure poiskkniginaz;

var st:knigi;

pp:string;

k:char;

r:integer;

begin

assign(spknig,'knigi.txt');

reset(spknig);

clrscr;

ris(29); write('Поиск книги по названию'); ris(29);writeln('');

Write('Введите критерий поиска : ');

readln(pp);

r:=0;

repeat

read(spknig,st);

If st.naz=pp then

Begin

clrscr;

r:=1;

ris(33);write('Поиск по названию'); ris(33);writeln('');

writeln('Уникальный номер: ',st.nomk);

writeln('Название: ',st.naz);

writeln('Автор: ',st.auth);

writeln('Издательство: ',st.izd);

writeln('Год издания: ',st.god);

writeln('Жанр: ',st.zhanr);

writeln('Количество страниц: ',st.kol);

writeln('Есть в наличии: ',st.nal);

If (st.nal='Нет')

then

Begin

writeln('Уникальный номер читателя: ',st.nomch);

writeln('Срок возврата: ',st.densv,' ',st.messv,' ',st.godsv);

end;

ris(80);

writeln(' Введите "Esc" для окончания ');

k:=readkey;

end;

until (EoF(spknig)) or (k=#27);

If r=0 then begin writeln('Книги с таким названием нет в библиотеке');readln;end;

close(spknig);

end;

{--------------------Поиск книги по году издания--------------------------}

procedure novknigi;

var st:knigi;

k:char;

r:integer;

pp:integer;

begin

assign(spknig,'knigi.txt');

reset(spknig);

clrscr;

ris(27);write('Вывод списка книг за год'); ris(29);Writeln('');

Write('Введите год издания: ');Readln(pp);

r:=0;

repeat

read(spknig,st);

If st.god=pp

then

Begin

clrscr;

r:=1;

ris(33);write('Вывод списка книг за',k,' год'); ris(33);writeln('');

writeln('Уникальный номер: ',st.nomk);

writeln('Название: ',st.naz);

writeln('Автор: ',st.auth);

writeln('Издательство: ',st.izd);

writeln('Год издания: ',st.god);

writeln('Жанр: ',st.zhanr);

writeln('Количество страниц: ',st.kol);

writeln('Есть в наличии: ',st.nal);

If (st.nal='Нет')

then

Begin

writeln('Уникальный номер читателя: ',st.nomch);

writeln('Срок возврата: ',st.densv,' ',st.messv,' ',st.godsv);

end;

ris(80);

writeln(' Введите "Esc" для окончания ');

k:=readkey;

end;

until (EoF(spknig)) or (k=#27);

If r=0 then begin writeln('В библиотеке нет книг с данным годом издания');readln;end;

close(spknig);

end;

{--------------------Вывод читателей задерживающих книгу--------------------}

procedure zadreader;

var sk:reader;

datas:1..31;

mess:1..12;

gods:integer;

k:char;

begin

assign(spreader,'read.txt');

reset(spreader);

clrscr;

ris(19);write('Вывод списка читателей задерживающих книгу');ris(19);writeln('');;

Write('Введите сегодняшнюю дату (Пример: 01 01 2008): ');

readln(datas,mess,gods);

clrscr;

while not eof(spreader) do

begin

read(spreader,sk);

If (sk.naruk='Да') or (sk.naruk='дА') or (sk.naruk='ДА') or (sk.naruk='да')

then

If (gods<sk.godsv) then

{этот день ещё не прошёл}

else

Begin

If gods=sk.godsv then

Begin

If mess<sk.messv then

{этот день ещё не прошёл}

else

Begin

if mess=sk.messv then

begin

if datas<sk.densv then

{этот день ещё не прошёл}

else

if datas=sk.densv then

{этот день сегодня}

else

{Этот день прошёл, год, месяц одинаковые, но день больше}

Begin

clrscr;

ris(26);write('Вывод читателей задерживающих книгу');ris(26);writeln('');

writeln('Уникальный номер: ',sk.nomch);

writeln(`Имя: ',sk.name);

writeln('Фамилия: ',sk.lname);

writeln('Отчество: ',sk.fname);

writeln('Домашний телефон: ',sk.tel);

writeln('Домашний адрес: ',sk.adress);

writeln('Возраст: ',sk.voz);

writeln('Уникальный номер книги на руках: ',sk.nomk);

writeln('Когда должен был вернуть книгу: ',sk.densv,' ',sk.messv,' ',sk.godsv);

writeln('Для продолжения нажмите <Enter>');

readln;

end;

end

else

{этот день прошёл, текущий год равен, но месяц больше}

Begin

clrscr;

ris(26);write('Вывод читателей задерживающих книгу');ris(26);writeln('');

writeln('Уникальный номер: ',sk.nomch);

writeln(`Имя: ',sk.name);

writeln('Фамилия: ',sk.lname);

writeln('Отчество: ',sk.fname);

writeln('Домашний телефон: ',sk.tel);

writeln('Домашний адрес: ',sk.adress);

writeln('Возраст: ',sk.voz);

writeln('Уникальный номер книги на руках: ',sk.nomk);

writeln('Когда должен был вернуть книгу: ',sk.densv,' ',sk.messv,' ',sk.godsv);

writeln('Для продолжения нажмите <Enter>');

readln;

end;

end;

end

else

{Этот день прошёл, текущий год больше}

Begin

clrscr;

ris(26);write('Вывод читателей задерживающих книгу');ris(26);writeln('');

writeln('Уникальный номер: ',sk.nomch);

writeln(`Имя: ',sk.name);

writeln('Фамилия: ',sk.lname);

writeln('Отчество: ',sk.fname);

writeln('Домашний телефон: ',sk.tel);

writeln('Домашний адрес: ',sk.adress);

writeln('Возраст: ',sk.voz);

writeln('Уникальный номер книги на руках: ',sk.nomk);

writeln('Когда должен был вернуть книгу: ',sk.densv,' ',sk.messv,' ',sk.godsv);

writeln('Для продолжения нажмите <Enter>');

readln;

end;

end;

end;

close(spreader);

end;

{---------------------------------Добавить нового читателя-----------------}

procedure newreader;

var sk:reader;

k:char;

begin

assign(spreader,'read.txt');

reset(spreader);

seek(spreader,filesize(spreader));

repeat

clrscr;

ris(31);write('Добавление читателя'); ris(30);writeln('');

writeln('Заполните данные о новом читателе: ');

write('Уникальный номер: '); readln(sk.nomch);

write('Имя: '); readln(sk.name);

write('Фамилия: '); readln(sk.lname);

write('Отчество: '); readln(sk.fname);

write('Домашний телефон: '); readln(sk.tel);

write('Домашний адрес: '); readln(sk.adress);

write('Возраст: '); readln(sk.voz);

sk.naruk:='Нет';

write(spreader,sk);

write('Хотите добавить ещё одного читателя? (Д\Н)');readln(k);

writeln;

until(k='н') or(k='Н');

close(spreader);

end;

{--------------------------------Удаление читателя-------------------------}

procedure Clearreader;

var sk:reader;

udal: string;

fo: file of reader;

x,n,nomchh:integer;

qwe:char;

otv:char;

begin

assign(spreader,'read.txt');

reset(spreader);

assign(fo,'newfile.txt');

rewrite(fo);

clrscr;

ris(31);write('Удаление читателя'); ris(31);writeln('');

writeln('Введите фамилию читателя, которого вы хотите удалить из базы:');

readln(udal);

x:=0;

while not eof(spreader) do

Begin

read(spreader,sk);

If udal=sk.lname then x:=1;

end;

If x=0 then begin writeln('Читателя с такой фамилией нет!'); readln; end

else

Begin

close(spreader);reset(spreader);

x:=0;

qwe:='q';

while (x<>2) do

Begin

read(spreader,sk);

If udal=sk.lname then

Begin

writeln('Имя: ',sk.name);

writeln('Фамилия: ',sk.lname);

writeln('Отчество: ',sk.fname);

Writeln('Это данный читатель (Д\Н)?');

readln(qwe);

end;

If (qwe='д')or(qwe='Д') then begin nomchh:=sk.nomch; x:=2;end;

end;

close(spreader);reset(spreader);

x:=0;

otv:='q';

writeln('Вы точно хотите удалить читателя с фамилией ',udal,' (Д\Н)');

readln(otv);

If (otv='Д') or (otv='д') then

Begin

while not eof(spreader) do

begin

read(spreader,sk);

if sk.nomch<>nomchh then write(fo,sk);

end;

close(spreader);

close(fo);

erase(spreader);

rename(fo,'read.txt');

end;end;

end;

{---------------------------------Просмотр списка читателей----------------}

procedure seekreader;

var sk:reader;

k:char;

begin

assign(spreader,'read.txt');

reset(spreader);

repeat

read(spreader,sk);

clrscr;

ris(28);write(Просмотр списка читателей''); ris(27);writeln('');

writeln('Уникальный номер читателя: ',sk.nomch);

writeln('Имя: ',sk.name);

writeln('Фамилия: ',sk.lname);

writeln('Отчество: ',sk.fname);

writeln('Домашний телефон: ',sk.tel);

writeln('Домашний адрес: ',sk.adress);

writeln('Возраст: ',sk.voz);

If (sk.naruk='Да') or (sk.naruk='ДА') or (sk.naruk='дА') or (sk.naruk='да')

then

Begin

writeln('Уникальный номер книги на руках ',sk.nomk);

writeln('`Срок возврата: ',sk.densv,' ',sk.messv,' ',sk.godsv);

end;

ris(80);

writeln(' Нажмите "Esc" для окончания ');

k:=readkey;

Until (EoF(spreader)) or (k=#27);

close(spreader);

end;

{--------------------------Редактирование данных о читателе----------------}

procedure redreader;

var

sk:reader;

str:integer;

name2,lname2,fname2,tel2,adress2,naruk2:string;

nomch2,nomk2,voz2,godsv2:integer;

densv2:1..31;

messv2:1..12;

x:integer;

famchh:string;

qwe:char;

nomchh:integer;

begin

assign(spreader,'read.txt');

reset(spreader);

clrscr;

ris(24);write('Редактирование данных о читателе');ris(24);writeln('');

with sk do

begin

writeln('Введите фамилию читателя данные о котором вы хотите изменить:');

readln(famchh);

x:=0;

while not eof(spreader) do

Begin

read(spreader,sk);

If famchh=sk.lname then x:=1;

end;

If x=0 then begin writeln('Читателя с такой фамилией нет!'); readln; end

else

Begin

close(spreader);reset(spreader);

x:=0;

qwe:='q';

while (x<>2) do

Begin

read(spreader,sk);

If famchh=sk.lname then

Begin

writeln('Имя: ',sk.name);

writeln('Фамилия: ',sk.lname);

writeln('Отчество: ',sk.fname);

Writeln('Это данный читатель (Д\Н)?');

readln(qwe);

end;

If (qwe='д')or(qwe='Д') then begin nomchh:=sk.nomch; x:=2;end;

end;

close(spreader);reset(spreader);

while not eof(spreader) do

begin

read(spreader,sk);

if sk.nomch=nomchh then

begin

writeln('Заполните данные для изменения: ');

write('Имя: '); readln(sk.name);

write('Фамилия: '); readln(sk.lname);

write('Отчество: '); readln(sk.fname);

write('Домашний телефон: '); readln(sk.tel);

write('Домашний адрес: '); readln(sk.adress);

write('Возраст: '); readln(sk.voz);

name2:=name;

lname2:=lname;

fname2:=fname;

tel2:=tel;

adress2:=adress;

naruk2:=naruk;

nomch2:=nomch;

nomk2:=nomk;

voz2:=voz;

godsv2:=godsv;

densv2:=densv;

messv2:=messv;

seek(spreader,filepos(spreader)-1);

write(spreader,sk);

end; end; end;

close(spreader);

end;

end;

{---------------------------------Добавление нового библиотекаря-----------------}

procedure newbibl;

var sb:biblio;

k:char;

begin

assign(spbiblio,'bibl.txt');

reset(spbiblio);

seek(spbiblio,filesize(spbiblio));

repeat

clrscr;

ris(24);write('Добавление нового библиотекаря');ris(24);writeln('');

writeln('Заполните данные о новом библиотекаре: ');

write('Имя: '); readln(sb.name);

write('Фамилия: '); readln(sb.lname);

write('Отчество: '); readln(sb.fname);

write('Должность: '); readln(sb.dolzh);

write(spbiblio,sb);

write('Хотите добавить ещё одного библиотекаря? (Д\Н)>');readln(k);

writeln;

until(k='н') or (k='Н');

close(spbiblio);

end;

{--------------------------------Удаление библиотекаря----------------------}

procedure Clearbibl;

var sb:biblio;

udal: string;

fo: file of biblio;

x,n,nomchh:integer;

qwe:char;

otv:char;

begin

assign(spbiblio,'bibl.txt');

reset(spbiblio);

assign(fo,'newfile.txt');

rewrite(fo);

clrscr;

ris(24);write('Удаление данных о библиотекаре');ris(24);writeln('');

writeln('Введите фамилию библиотекаря данные о котором вы хотите удалить:');

readln(udal);

x:=0;

while not eof(spbiblio) do

Begin

read(spbiblio,sb);

If udal=sb.lname then x:=1;

end;

If x=0 then begin writeln('Библиотекаря с такой фамилией нет!'); readln; end

else

Begin

close(spbiblio);reset(spbiblio);

writeln('Вы точно хотите удалить библиотекаря по фамилии ',udal,'(Д\Н)');

readln(otv);

If (otv='Д') or (otv='д') then

Begin

while not eof(spbiblio) do

begin

read(spbiblio,sb);

if sb.lname<>udal then write(fo,sb);

end;

close(spbiblio);

close(fo);

erase(spbiblio);

rename(fo,'bibl.txt');

end;end;

end;

{---------------------------------Просмотр списка библиотекарей----------------}

procedure seekbibl;

var sb:biblio;

k:char;

begin

assign(spbiblio,'bibl.txt');

reset(spbiblio);

repeat

read(spbiblio,sb);

clrscr;

ris(25);write('Просмотр списка библиотекарей');ris(25);writeln('');

writeln('Имя: ',sb.name);

writeln('Фамилия: ',sb.lname);

writeln('Отчество: ',sb.fname);

writeln('Должность: ',sb.dolzh);

ris(80);

writeln(' Для выхода нажмите <Esc>');

k:=readkey;

Until (EoF(spbiblio)) or(k=#27);

close(spbiblio);

end;

{---------------------------------Меню-------------------------------------}

procedure MenuToScr;

var i:integer;

Begin

clrscr;

for i:=1 to k do

begin

GotoXY(x,y+i-1);

if i=1 then begin gotoXY(2,y-1);writeln(' МЕНЮ'); gotoXY(x,y+i-1);end;

write(menu[i]);

end;

TextAttr:=sel;

GotoXY(x,y+punkt-1);

write(menu[punkt]);

TextAttr:=norm;

end;

{---------------------------------Основная программа-----------------------}

Begin

assign(spknig,'knigi.txt');

assign(spreader,'read.txt');

assign(spbiblio,'bibl.txt'); {Проверка файлов на существование}

{$I-}

reset(spknig);

{$I+}

If IOResult<>0 then begin rewrite(spknig);reset(spknig);end;

close(spknig);

{$I-}

reset(spreader);

{$I+}

If IOResult<>0 then begin rewrite(spreader);reset(spreader);end;

close(spreader);

{$I-}

reset(spbiblio);

{$I+}

If IOResult<>0 then begin rewrite(spbiblio);reset(spbiblio);end;

close(spbiblio);

menu[1]:='Работа со списком книг:';

menu[2]:=' - Просмотр списка ';

menu[3]:=' - Добавление новой';

menu[4]:=' - Учёт выдачи\приёма ';

menu[5]:=' - Удаление';

menu[6]:=' - Поиск по писателю';

menu[7]:=' - Поиск по названию';

menu[8]:=' - Поиск по жанру';

menu[9]:=' - Поиск по году издания';

menu[10]:='Работа со списком читателей:';

menu[11]:=' - Просмотр списка ';

menu[12]:=' - Добавление нового';

menu[13]:=' - Удаление';

menu[14]:=' - Просмотр списка должников';

menu[15]:=' - Редактирование данных';

menu[16]:='Работа со списком библиотекарей:';

menu[17]:=' - Просмотр списка ';

menu[18]:=' - Добавление нового';

menu[19]:=' - Удаление';

menu[20]:=' - Выход (Esc)';

punkt:=2;

X:=3;y:=3;

TextAttr:=norm;

menutoscr;

Repeat

ch:=readkey;

if ch=char(0)

then

begin

ch:=readkey;

case ch of

chr(80):

if punkt<k then

begin

GotoXY(x,y+punkt-1);

write(menu[punkt]);

punkt:=punkt+1;

If (punkt=1) or (punkt=10) or (punkt=16) then punkt:=punkt+1;

TextAttr:=sel;

GotoXY(x,y+punkt-1);

write(menu[punkt]);

TextAttr:=norm;

end;

chr(72):

if punkt>1 then

begin

GotoXY(x,y+punkt-1);

write(menu[punkt]);

punkt:=punkt-1;

If (punkt=10) or (punkt=16) then punkt:=punkt-1;

If punkt=1 then punkt:=2;

TextAttr:=sel;

GotoXY(x,y+punkt-1);

write(menu[punkt]);

TextAttr:=norm;

end;

end;

end

else

if ch=chr(13)

then

begin

case punkt of

2: seekknigi;

3: newkniga;

4: vvkniga;

5: Clearkn;

6: poiskknigiau;

7: poiskkniginaz;

8: poiskknigizh;

9: novknigi;

11: seekreader;

12: newreader;

13: Clearreader;

14: zadreader;

15: redreader;

17: seekbibl;

18: newbibl;

19: Clearbibl;

20: ch:=chr(27);

end;

MenuToScr;

end;

Until ch=chr(27);

end.

8. Описание работы программы

Основная программа реализована в виде условных операторов, которые позволяют выполнить один из предложенных пунктов. Для многократного выполнения тело программы заключено в оператор цикла REPEAT.

Заполнение файлов с данными:

Newkniga - книги;

Newreader - читатели;

Newbibl - работники.

Просмотр содержимого файлов с данными:

Seekknigi - книги;

Seekreader - читатели;

Seekbibl - работники.

Выполнение запросов, указанных в задании, выполняется с помощью процедур:

Vvkniga - выдача/возврат книг;

Clearkn - удаление книги;

Poiskknigiau - поиск книги по автору;

Poiskkniginaz - поиск книги по названию;

Poiskknigizh - поиск книги по жанру;

Novknigi - поиск книги по году издания;

Clearreader - удаление книги;

Redreader - редактирование записи о читателе;

Clearbibl - удаление записи о библиотекаре.

Все процедуры работают по однотипным алгоритмам, содержат стандартные операции обработки файлов. Переход на процедуры выполняется с помощью перемещения курсора клавишами вниз и вверх и нажатием клавиши Enter.

Имена файлов на диске: knigi.txt, read.txt и bibl.txt.

Заключение

Была поставлена задача: Разработать программу для работы со списками читателей, книг и работников библиотеки. Я смог практически в полном объеме решить эту задачу, используя язык высокого уровня Turbo Pascal 7.0. Программа обладает удобным интерфейсом, и во всём соответствует начальным требованиям. В программе задействована функция чтения и записи в файл, а так же добавление новых записей.

Входные данные получены из исходных файлов.

Работа выполнена в соответствии с основными правилами составления и реализации алгоритмов.

1. Размещено на www.allbest.ru


Подобные документы

  • Требования к функциональным характеристикам программы, составу и параметрам технических средств, программной совместимости. Особенности программирования в среде Access. Описание интерфейса программы, ввод и редактирование данных, добавление новых книг.

    курсовая работа [1,5 M], добавлен 17.11.2010

  • Создание файла со списком студентов. Реализация программы для работы с "базой данных", которая позволяет добавить, удалить, редактировать, сохранять информацию о студентах. Упорядочивание списка студентов методом прямого слияния и поиск по базе.

    курсовая работа [299,8 K], добавлен 27.06.2014

  • Характеристика программы на языке VBA, которая вводит исходные данные, выполняет расчеты и выводит результаты на экран. Описание переменных в программе, ее блок-схема и алгоритм работы. Листинг программы. Описание входных данных и результат вычислений.

    курсовая работа [721,4 K], добавлен 10.11.2010

  • Разработка программы на языке VBA, которая вводит исходные данные, выполняет расчеты и выводит на экран заданную информацию. Типы блок-схем и их использование при написании программы. Описание входных данных и результат вычислений, листинг программы.

    курсовая работа [680,3 K], добавлен 03.08.2009

  • Создание программы для обработки структуры данных. Возможность ввода и записи данных на персональном компьютере. Прикладное программирование на языке Turbo Pascal. Свободное редактирование записанных данных с помощью программы, написанной на Turbo Pascal.

    лабораторная работа [11,4 K], добавлен 13.05.2011

  • Разработана программа решения двух задач на языке программирования Turbo Pascal. Спецификация задания. Описание входных и выходных данных. Математическая постановка задачи. Алгоритм ее решения. Описание и блок-схема программы. Результаты тестирования.

    курсовая работа [275,8 K], добавлен 28.06.2008

  • Анализ предметной области и требований пользователей для разработки программного средства по автоматизации работы склада строительных материалов. Описание работы с базой данных Access, позволяющей добавлять и редактировать информацию, оформлять накладную.

    курсовая работа [601,1 K], добавлен 25.01.2013

  • Разработка программы на языке Turbo Pascal, обеспечивающей работу пользователя в диалоговом режиме с возможностью выбора функций с помощью одноуровневого меню вертикального типа. Блок-схема и листинг программы, описание руководства пользователя.

    курсовая работа [1,5 M], добавлен 17.03.2014

  • Анализ эффективности методов сортировки данных в языке Turbo Pascal. Разработка эскизного и технического проекта программы. Сортировка без и с использованием дополнительной памяти, за исключением небольшого стека (массива). Сортировка связанных списков.

    курсовая работа [359,0 K], добавлен 23.05.2012

  • Разработка приложения, позволяющего вести полноценный учет оборудования, использующегося на предприятии: отслеживать движение оборудования по отелам предприятия, просматривать перечень оборудования и его цену, добавлять, удалять, редактировать записи.

    курсовая работа [4,4 M], добавлен 01.07.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.