Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
метод_к_курс_раб.pdf
Скачиваний:
20
Добавлен:
18.03.2015
Размер:
621.71 Кб
Скачать

20

Приложение 2 Пример текста программы с минимальным набором функций

#include <iostream.h> #include <fstream.h> #include <string.h> #include <conio.h> #include <iomanip.h> #include <stdlib.h> #include <io.h> #define FIO 20 #define NAME 26 #define GOD 6 #define IZD 12 #define KOL 6

ofstream fprot; // для протокола работы программы

struct BOOK

 

 

{

 

 

char fio[FIO];

//

Ф.И.О. автора

char name[NAME];

//

наименование книги

char god[GOD];

//

Год издания

char izd[IZD];

//

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

char tirag[KOL];

//

Тираж

};

 

 

// прототипы функций

 

 

void begtabl();

 

 

void endtabl();

 

 

void sozdanie(char);

 

 

void prosmotr();

 

 

void vibor();

 

 

void del();

 

 

21

// Опеpация-функция ввода в стpуктуpу с клавиатуpы istream &operator >> (istream &in, BOOK &x)

{

int v;

cout << "\nФамилия автора:"; in.seekg(0,ios::end); in.get(x.fio,FIO-1,'\n');

cout << "\nНазвание книги:"; in.seekg(0,ios::end); in.get(x.name,NAME-1,'\n'); cout<<"\nГод издания:"; in.seekg(0,ios::end);

in >> v;

itoa(v,x.god,10); // преобразование целого числа в строку cout<<"\nИздательство:";

in.seekg(0,ios::end); in.get(x.izd,IZD-1,'\n'); cout<<"\nТираж:"; in.seekg(0,ios::end); in >> v; itoa(v,x.tirag,10); return in;

}

// Опеpация-функция вывода стpуктуpы на дисплей ostream &operator << (ostream &out, BOOK x)

{

out.setf(ios::left);

out << "¦" << setw(FIO) << x.fio << "¦" << setw(NAME)

<<x.name << "¦" << setw(4) << x.god << "¦"

<<setw(IZD) << x.izd << "¦" << setw(5) << x.tirag << "¦\n"; fprot.setf(ios::left);

fprot << "¦" << setw(FIO) << x.fio << "¦" << setw(NAME)

<<x.name << "¦" << setw(4) << x.god << "¦"

<<setw(IZD) << x.izd << "¦" << setw(5) << x.tirag << "¦\n"; return out;

}

22

//Опеpация-функция ввода стpуктуpы c МД ifstream &operator >> (ifstream &in, BOOK &x)

{

in.getline(x.fio,FIO,'\n');

in.getline(x.name,NAME,'\n');

in.getline(x.god,GOD,'\n');

in.getline(x.izd,IZD,'\n');

in.getline(x.tirag,KOL,'\n'); return in;

}

//Опеpация-функция вывода стpуктуpы на МД ofstream &operator << (ofstream &out, BOOK &x)

{

out << x.fio << '\n'; out << x.name << '\n'; out << x.god << '\n'; out << x.izd << '\n'; out << x.tirag << '\n'; return out;

}

void main()

{

char c;

// ofstream fprot; textbackground(BLUE); textcolor(15);

fprot.open("protokol.txt"); // открытие файла для записи протокола if (!fprot)

{

cerr << "Не удалось открыть файл для записи протокола\n"; return;

}

23

while (1)

{

clrscr();

gotoxy(25,7);

cout << " ╔═════════════════════════╗\n"; gotoxy(25,8);

cout << "

ГЛАВНОЕ МЕНЮ

║\n";

gotoxy(25,9);

 

 

cout << "

 

║\n";

gotoxy(25,10);

 

 

cout << "

║ 1.

Создание картотеки книг

║\n";

gotoxy(25,11);

 

 

cout << "

║ 2.

Добавление в картотеку

║\n";

gotoxy(25,12);

 

 

cout << "

║ 3.

Просмотр картотеки книг

║\n";

gotoxy(25,13);

 

 

cout << " ║ 4.

Выборка информации

║\n";

gotoxy(25,14);

 

 

cout << "

║5. Удаление

║\n";

gotoxy(25,15);

 

 

cout << " ║6. Выход

║ \n";

gotoxy(25,16);

 

 

cout << " ╚═════════════════════════╝\n"; gotoxy(25,18);

cout << "Ваш выбор -> "; cin.seekg(0,ios::end);

c = cin.get();

switch(c)

{

case '1': case '2':

sozdanie(c);

break;

case '3': prosmotr(); break;

24

case '4': vibor(); break;

case '5': del(); break;

case '6':

fprot.close(); // закрыли файл с протоколом работы return;

default:

cout << "Вводите только цифры от 1 до 4" << endl; cout << "Продолжение - клавиша Enter\n"; cin.seekg(0,ios::end);

cin.get();

}

}

}

// функция создания и добавления информации в файл void sozdanie(char reg)

{

char c;

// поток ff для вывода файла book.txt ofstream ff;

BOOK s;

if ( reg == '1')

{ // открываем файл для создания ff.open("book.txt", ios::binary );

fprot << "СОЗДАНИЕ НОВОГО ФАЙЛА\n\n";

}

else

{ // открываем файл для пополнения ff.open("book.txt", ios::app | ios::binary );

fprot << "ДОБАВЛЕНИЕ ИНФОРМАЦИИ В ФАЙЛ\n\n";

}

25

if (!ff)

{

cerr << "Не удалось открыть файл book.txt для записи\n"; return;

}

// Цикл записи элементов в файл do

{

clrscr();

if ( reg == '1')

cout << "СОЗДАНИЕ НОВОГО ФАЙЛА\n\n"; else

cout << "ДОБАВЛЕНИЕ ИНФОРМАЦИИ В ФАЙЛ\n\n";

cin >> s;

// ввод с клавиатуpы

ff << s;

// вывод в файл

cout<<"\nПpодолжить ввод?(Y/N или Д/H)"; cin.seekg(0,ios::end);

cin.get(c);

}

while (c =='y' || c=='Y' || c=='д' || c=='Д');

ff.close();

// закpытие файла

}

 

// функция просмотра содержимого картотеки книг в табличной форме void prosmotr()

{

ifstream finp; BOOK s;

// поток fi для ввода из файла kniga.txt finp.open("book.txt", ios::binary);

if (!finp)

{

cerr << "Не удалось открыть файл book.txt для чтения\n"; return;

}

26

clrscr();

gotoxy(30,1);

cout<<"Просмотр информации\n"; fprot<< "\n\n\nПросмотр информации\n"; begtabl();

while ( !finp.eof() ) // пока не конец файла

{

finp >> s ; // чтение из файла if ( strlen(s.fio) == 0 )

break;

 

cout << s;

// вывод на дисплей

}

finp.close(); // закpытие файла endtabl();

cout << "Продолжение - любая клавиша"; cin.seekg(0,ios::end);

cin.get();

}

// функция поиска информации по различным полям void vibor()

{

char c,fio[FIO], nazv[NAME], izd[IZD]; int god;

ifstream fi; BOOK z; long l;

fi.open("book.txt", ios::binary); if (!fi)

{

cerr << "Не удалось открыть файл book.txt для чтения\n"; return;

}

27

while (1)

{

clrscr();

gotoxy(25,7);

cout << "╔═════════════════════╗\n"; gotoxy(25,8);

cout << "║ ПОИСК ИНФОРМАЦИИ

║\n";

gotoxy(25,9);

 

cout << "║

║\n";

gotoxy(25,10);

 

cout << "║ 1. Ф.И.О. автора

║\n";

gotoxy(25,11);

 

cout << "║ 2. Названию книги

║\n";

gotoxy(25,12);

 

cout << "║3. Издательству

║\n";

gotoxy(25,13);

 

cout << "║4. Году издания

║\n";

gotoxy(25,14);

 

cout << "║5. Возврат в главное меню

║\n";

gotoxy(25,15);

 

cout << "╚═════════════════════╝\n"; gotoxy(25,18);

fi.seekg(0L); //,ios::beg);

fi.clear( !ios::eofbit); // сброс флага достижения конца файла cout << "Ваш выбор -> ";

cin.seekg(0,ios::end);

cin.get(c);

clrscr();

cout << "Поиск информации\n "; fprot << "\n\nПоиск информации\n "; switch(c)

{

case '5': return;

28

case '1':

cout << " Введите Ф.И.О автора:"; cin.seekg(0,ios::end); cin.get(fio,FIO-1,'\n');

fprot << " Фамилия:" << fio << endl; break;

case '2':

cout << " Введите название книги:"; cin.seekg(0,ios::end); cin.get(nazv,NAME-1,'\n');

fprot << " Название книги:" << nazv << endl; break;

case '3':

cout << " Введите издательство:"; cin.seekg(0,ios::end); cin.get(izd,IZD-1,'\n');

fprot << " Издательство:" << izd << endl; break;

case '4':

cout << " Введите год издания:"; cin.seekg(0,ios::end);

cin >> god;

fprot << " Год издания:" << god << endl; break;

}

begtabl(); while ( fi )

{

fi >> z;

if ( (c=='1' && strcmp(fio,z.fio) == 0 ) || (c=='2' && strcmp(nazv,z.name) == 0 ) || (c=='3' && strcmp(izd,z.izd) == 0 ) ||

(c=='4' && atoi(z.god)==god)

)

cout << z;

// вывод на экран

 

}

29

endtabl();

cout << "Продолжение - любая клавиша\n"; cin.seekg(0,ios::end);

cin.get();

}

}

// функция удаления информации из файла void del()

{

ofstream fo; // вспомогательный файл ifstream fi;

char fam[FIO]; int flag = 0; BOOK z;

long dl; clrscr();

cout << "Удаление информации по фамилии автора\n"; fprot << "\n\nУдаление информации по фамилии автора\n"; cout << "\nВведите фамилию автора для удаления"; cin.seekg(0,ios::end);

cin.get(fam,FIO,'\n');

fprot << "\nФамилию автора для удаления " << fam << endl ;

fi.open("book.txt", ios::binary ); if (!fi)

{

cerr << "Ошибка открытия файла для чтения"; exit(1);

}

fi.seekg(0,ios::beg); fo.open("tmp.txt", ios::binary);

if (!fo)

{

cerr << "Ошибка открытия файла для записи"; exit(1);

}

30

fo.seekp(0,ios::beg);

while ( !fi.eof() )

{

fi >> z;

if (strlen(z.fio) == 0 ) break;

if (strcmp(z.fio, fam ) == 0)

{

flag = 1;

cout << "\nИнформация удалена\n"; fprot << "Информация удалена\n"; cout << " Продолжение - Enter\n"; cin.seekg(0,ios::end);

cin.get();

}

else

fo << z; // если информация не подлежит удалению // запись в вспомогательный файл

}

fi.close();

fo.close();

if (flag == 0)

{

cout << "Нет информации для удаления" << endl; fprot << "Нет информации для удаления" << endl;

}

else

{

remove("book.txt");

rename("tmp.txt","book.txt");

}

return;

}

31

// вывод шапки таблицы на экран и в файл протокола void begtabl()

{

// вывод на экран

cout << "╔═════════╤═════════════════╤═══╤"

<< "═════════╤═════╗\n";

 

cout << "║ Ф.И.О. автора │

Название книги

│ Год │"

<< " Издательство │ Тираж ║\n";

 

cout << "╟──────────┼────────────────┼───┼ "

<<"──────────┼─────╢\n";

//вывод в файл протокола

fprot << "╔═════════╤═════════════════╤═══╤"

<< "═════════╤═════╗\n";

 

fprot << "║ Ф.И.О. автора │

Название книги

│ Год │"

<< " Издательство │ Тираж ║\n";

 

fprot << "╟──────────┼────────────────┼───┼ " << "──────────┼─────╢\n";

return;

}

// вывод окончания таблицы на экран и в файл протокола void endtabl()

{

cout << "╚═════════╧═════════════════╧═══╧" << "═════════╧═════╣\n";

fprot << "╚═════════╧═════════════════╧═══╧" << "═════════╧═════╣\n";

return;

}

32

Приложение 3

Пример протокола работы программы

СОЗДАНИЕ НОВОГО ФАЙЛА

Просмотр информации

Ф.И.О. автора

Название книги

Год

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

Тираж

Шилдт Г.

Самоучитель С++

1998

BHV

5000

Касаткин А.И.

Программирование

1990

Минск

1000

Подбельский В.В.

Язык С++

1999

Финансы

3000

Брябрин В.М.

ПО ПЭВМ

1988

Наука

1000

Кормен Т.

Алгоритмы

2000

Москва

2000

Хансен Г.

Базы данных

1998

Бином

3000

Нейбауэр

Программирование

1998

BHV

4000

 

 

 

 

 

ДОБАВЛЕНИЕ ИНФОРМАЦИИ В ФАЙЛ

Просмотр информации

Ф.И.О. автора

 

Название книги

Год

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

Тираж

Шилдт Г.

 

Самоучитель С++

1998

BHV

5000

Касаткин А.И.

 

Программирование

1990

Минск

1000

Подбельский В.В.

 

Язык С++

1999

Финансы

3000

Брябрин В.М.

 

ПО ПЭВМ

1988

Наука

1000

Кормен Т.

 

Алгоритмы

2000

Москва

2000

Хансен Г.

 

Базы данных

1998

Бином

3000

Нейбауэр

 

Программирование

1998

BHV

4000

Шилдт Г.

 

Программирование

1996

BHV

5000

 

 

 

 

 

Поиск информации

 

 

 

 

Название книги:Программирование

 

 

 

Ф.И.О. автора

 

Название книги

Год

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

Тираж

Касаткин А.И.

 

Программирование

1990

Минск

1000

Нейбауэр

 

Программирование

1998

BHV

4000

Шилдт Г.

 

Программирование

1996

BHV

5000

 

 

 

 

 

 

33

Поиск информации Введите Ф.И.О автора: Фамилия:Шилдт Г.

Ф.И.О. автора

 

Название книги

Год

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

Тираж

Шилдт Г.

 

Самоучитель С++

1998

BHV

5000

Шилдт Г.

 

Программирование

1996

BHV

5000

 

 

 

 

 

Поиск информации

 

 

 

 

Введите Ф.И.О автора: Фамилия:Касаткин

 

 

Ф.И.О. автора

 

Название книги

Год

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

Тираж

 

 

 

 

 

 

Поиск информации

Просмотр информации

Ф.И.О. автора

Название книги

Год

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

Тираж

Шилдт Г.

Самоучитель С++

1998

BHV

5000

Касаткин А.И.

Программирование

1990

Минск

1000

Подбельский В.В.

Язык С++

1999

Финансы

3000

Брябрин В.М.

ПО ПЭВМ

1988

Наука

1000

Кормен Т.

Алгоритмы

2000

Москва

2000

Хансен Г.

Базы данных

1998

Бином

3000

Нейбауэр

Программирование

1998

BHV

4000

Шилдт Г.

Программирование

1996

BHV

5000

 

 

 

 

 

Удаление информации по фамилии автора

Фамилия автора для удаления Кормен Т. Информация удалена

34

Просмотр информации

Ф.И.О. автора

Название книги

Год

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

Тираж

Шилдт Г.

Самоучитель С++

1998

BHV

5000

Касаткин А.И.

Программирование

1990

Минск

1000

Подбельский В.В.

Язык С++

1999

Финансы

3000

Брябрин В.М.

ПО ПЭВМ

1988

Наука

1000

Хансен Г.

Базы данных

1998

Бином

3000

Нейбауэр

Программирование

1998

BHV

4000

Шилдт Г.

Программирование

1996

BHV

5000