- •ВВЕДЕНИЕ
- •1. ТЕМАТИКА КУРСОВЫХ РАБОТ
- •2. ЗАДАНИЕ НА ТИПОВУЮ КУРСОВУЮ РАБОТУ
- •3. СОДЕРЖАНИЕ ПОЯСНИТЕЛЬНОЙ ЗАПИСКИ
- •3.1 Перечень основных разделов
- •4. ВСПОМОГАТЕЛЬНЫЙ МАТЕРИАЛ
- •4.1 Перечень вопросов, подлежащих изучению
- •4.2. Создание и обработка файлов
- •4.3. Ввод/вывод для типов, определенных пользователем
- •Литература
- •Приложение 2 Пример текста программы с минимальным набором функций
- •Содержание
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 |
|
|
|
|
|