- •2. Методические указания к выполнению лабораторных работ
- •Лабораторная работа №1 Следование
- •Варианты индивидуальных заданий Выполнить поразрядные логические операции над машинными кодами
- •Пример программы
- •Лабораторная работа №2 Операторы ветвления
- •Варианты индивидуальных заданий
- •Пример разработки математической модели и схемы алгоритма решения задачи для варианта задания вида:
- •Текст программы
- •Лабораторная работа №3 Операторы цикла
- •Варианты индивидуальных заданий
- •Пример программы
- •Лабораторная работа №4 Статические массивы
- •Варианты индивидуальных заданий
- •Пример программы на обработку одномерного массива
- •Пример программы на обработку двумерного массива (матрицы)
- •Лабораторная работа №5 Динамические массивы
- •Варианты индивидуальных заданий
- •Пример программы на обработку одномерного массива
- •Пример программы на обработку двумерного массива (матрицы)
- •Лабораторная работа №6 Методы сортировки
- •Варианты индивидуальных заданий Методы сортировки
- •Области сортировки элементов матриц
- •Примеры программ
- •Лабораторная работа №7 Передача имён функций в качестве параметров
- •Текст программы
- •Лабораторная работа №8 Строки и текстовые файлы
- •Варианты индивидуальных заданий
- •Пример программы
- •Лабораторная работа №9 Структуры и файлы структур
- •Пример программы
- •Лабораторная работа №10 Линейные списки
- •Варианты индивидуальных заданий
- •Пример программы
- •Лабораторная работа №11 Стек, дек, очередь
- •Варианты индивидуальных заданий
- •Пример программы
- •Лабораторная работа №12 Классы
- •Варианты индивидуальных заданий
- •Примеры программ
- •Литература
Пример программы
//Программа работы с базой данных "Экскурсии"
//Создание базы
//Добавление новых записей
//Просмотр базы
//Поиск по названию страны с созданием файла выборки
//Сортировка по наименованию экскурсии в алфавитном порядке
//Сортировка в порядке возрастания стоимости путевки
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <iostream.h>;
#define FNAME_I "D:\\bd1.dat" //имя файла с исходной базой
#define FNAME_R "D:\\bd2.dat" //имя файла с результатами поиска
int proverka_file(char *fname, const char *) ; //проверка наличия файла
void dobavka(char *fname) ; //добавление новых записей
void zag1() ; //вывод заголовка таблицы
void zag2() ; //вывод заголовка таблицы
void prosmotrbd1(char *fname) ; //просмотр содержимого файла
void prosmotrbd2(char *fname) ; //просмотр содержимого файла
void poiskcountry(char *fname1, char *fname2) ;//поиск по ключу
void sort_name(char *fname) ; //сортировка по строке
void sort_voz_cena(char *fname) ; //сортировка по числу
const char PR_R[] = "r" ; //признак открытия файла на чтение
const char PR_S[] = "r+" ; //признак открытия файла на чтение и запись
const char PR_W[] = "w" ; //признак открытия файла на запись
const char PR_A[] = "a" ; //признак открытия файла на добавление
typedef struct {char name[15] ; //наименование экскурсии
char country[15] ; //страна
int cena ; //стоимость путевки
int time ; //продолжительность
char trans[10] ; //транспорт
}trip ;
//main_Begin______________________________________________________________
int main()
{int var ; //вид действия с содержимым файла
char otv ; //ответ пользователя
char fname_i[20] = FNAME_I ;
char fname_r[20] = FNAME_R ;
clrscr() ;
for( ; ;)
{//Выбор вида действия с содержимым файла
clrscr() ;
cout << "\n Вид действия:" << endl ;
cout << " 1 - создание базы данных" << endl ;
cout << " 2 - добавление новых записей" << endl ;
cout << " 3 - сортировка по наименованию" << endl ;
cout << " 4 - сортировка по цене путёвки" << endl ;
cout << " 5 - поиск по стране" << endl ;
cout << " 6 - просмотр базы данных" << endl ;
cout << " 7 - просмотр базы данных поиска" << endl ;
cout << " 8 - завершение задачи" << endl ;
cout << " Введите вид действия ->" ;
cin >> var ;
switch(var)
{default:break ;
case 1: if(proverka_file(fname_i, PR_R))
{cout << " База данных экскурсий с именем "<< fname_i ;
cout << " была создана раньше." << endl ;
cout << " Создаём файл с новым именем? [Y/N] " ;
cin >> otv ;
cin.get() ; //убираем символ '\n' из потока
if(otv == 'Y' || otv == 'y' || otv == 'Н' || otv == 'н')
{cout << " Задайте имя создаваемого файла: " ;
cin >> fname_i ;
}
else break ;
}
if(!proverka_file(fname_i, PR_W))
{cout << "\n Ошибка открытия файла для записи" << endl ;
cout << " Для продолжения нажмите Enter->" ; getchar() ;
break ;
}
cout << " Создаем базу " << fname_i << endl ;
dobavka(fname_i) ;
cout << "\n Создание файла закончено." << endl ;
if(proverka_file(fname_i, PR_R))
cout << " База данных готова к работе" << endl ;
else cout << "\n база не создана" << endl ;
cout << " Для продолжения нажмите Enter->" ; getchar() ;
break ;
case 2: if(proverka_file(fname_i, PR_R))
{cout << " База данных экскурсий с именем "<< fname_i ;
cout << " была создана раньше." << endl ;
cout << " Будем добавлять новые записи в неё? [Y/N] " ;
cin >> otv ;
cin.get() ; //убираем символ '\n' из потока
if(otv == 'N' || otv == 'n' || otv == 'Т' || otv == 'т')
{cout << " Задайте имя файла другой базы: " ;
cin >> fname_i ;
if(!proverka_file(fname_i, PR_R))
{cout << " Такая база данных не создавалась" << endl ;
cout << " Для продолжения нажмите Enter->" ; getchar() ;
break ;
}
}
}
cout << " Добавляем записи в файл " << fname_i << endl ;
dobavka(fname_i) ;
cout << "\n Изменение файла закончено." ;
cout << " Для продолжения нажмите Enter->" ; getchar() ;
break ;
case 3: if(!proverka_file(fname_i, PR_S))
{cout << "\n Ошибка открытия файла для чтения и записи" << endl ;
cout << " Для продолжения нажмите Enter->" ; getchar() ;
break ;
}
sort_name(fname_i) ;
cout << "\n Сортировка закончена." ;
cout << " Для продолжения нажмите Enter->" ; getchar() ;
break ;
case 4: if(!proverka_file(fname_i, PR_S))
{cout << "\n Ошибка открытия файла для чтения и записи" << endl ;
cout << " Для продолжения нажмите Enter->" ; getchar() ;
break ;
}
sort_voz_cena(fname_i) ;
cout << "\n Сортировка закончена." ;
cout << " Для продолжения нажмите Enter->" ; getchar() ;
break ;
case 5: if(!proverka_file(fname_i, PR_R))
{cout << "\n Ошибка открытия файла для чтения" << endl ;
cout << " Для продолжения нажмите Enter->" ; getchar() ;
break ;
}
if(!proverka_file(fname_r, PR_W))
{cout << "\n Ошибка открытия файла для записи" << endl ;
cout << " Для продолжения нажмите Enter->" ; getchar() ;
break ;
}
poiskcountry(fname_i, fname_r) ;
cout << "\n Поиск по стране закончен." ;
cout << " Для продолжения нажмите Enter->" ; getchar() ;
break ;
case 6: if(!proverka_file(fname_i, PR_R))
{cout << "\n Ошибка открытия файла для чтения" << endl ;
cout << " Для продолжения нажмите Enter->" ; getchar() ;
break ;
}
prosmotrbd1(fname_i) ;
cout << "\n Для продолжения нажмите Enter->" ; getchar() ;
break ;
case 7: if(!proverka_file(fname_r, PR_R))
{cout << "\n Ошибка открытия файла для чтения" << endl ;
cout << " Для продолжения нажмите Enter->" ; getchar() ;
break ;
}
prosmotrbd2(fname_r) ;
cout << "\n Для продолжения нажмите Enter->" ; getchar() ;
break ;
case 8: return 0 ;
}
}
}
//main_End________________________________________________________________
//Dobavka_Begin___________________________________________________________
//Добавление новых элементов в базу данных
void dobavka(char *fname)
{char otv ;
trip excur ;
FILE *baza ;
baza = fopen(fname, PR_A) ;
rewind(baza) ;
do
{cout << "\n Наименование экскурсии? " ;
cin >> excur.name ;
cout << " Страна? " ;
cin >> excur.country ;
cout << " Стоимость путевки? " ;
cin >> excur.cena ;
cout << " Продолжительность? " ;
cin >> excur.time ;
cout << " Транспорт? " ;
cin >> excur.trans ;
fwrite(&excur, sizeof(excur), 1, baza) ;
cout << "\n Продолжать?[Y/N]" ;
cin >> otv ;
cin.get() ;
}
while(otv == 'Y' || otv == 'y' || otv == 'Н' || otv == 'н') ;
fclose(baza) ;
}
//Dobavka_End_____________________________________________________________
//Zag1_Begin______________________________________________________________
//Вывод заголовка при просмотре исходного файла
void zag1()
{int i ;
cout << "\n" ;
for(i = 1; i <= 65; i++)
cout << "-" ;
cout << endl ;
cout << "| Наименование |" << " Страна |" << " Стоимость|"
<< "Продолжит.|" << "Транспорт|" << endl ;
for(i = 1; i <= 65; i++)
cout << "-" ;
}
//Zag1_End________________________________________________________________
//Zag2_Begin______________________________________________________________
//Вывод заголовка при просмотре файла поиска
void zag2()
{int i ;
cout << "\n" ;
for(i = 1; i <= 65; i++)
cout << "-" ;
cout << endl ;
cout << "| Страна |" << " Наименование |" << " Стоимость|"
<< "Продолжит.|" << "Транспорт|" << endl ;
for(i = 1; i <= 65; i++)
cout << "-" ;
}
//Zag2_End________________________________________________________________
//ProsmotrBD1_Begin_______________________________________________________
//Просмотр базы данных экскурсий
void prosmotrbd1(char *fname)
{int i ;
trip excur ;
FILE *baza ;
baza = fopen(fname, PR_R) ;
cout << "\n База данных экскурсий" ;
zag1() ;
rewind(baza) ;
while(fread(&excur, sizeof(excur), 1, baza) > 0)
{cout << "\n|" ;
cout.width(15) ; cout << excur.name << "|" ;
cout.width(15) ; cout << excur.country << "|" ;
cout.width(10) ; cout << excur.cena << "|" ;
cout.width(10) ; cout << excur.time << "|" ;
cout.width(9) ; cout << excur.trans << "|" ;
}
cout << "\n" ;
for(i = 1; i <= 65; i++)
cout << "-" ;
fclose(baza) ;
}
//ProsmotrBd1_End_________________________________________________________
//ProsmotrBd2_Begin_______________________________________________________
//Просмотр базы данных поиска экскурсий по стране пребывания
void prosmotrbd2(char *fname)
{int i ;
trip excur ;
FILE *baza ;
baza = fopen(fname, PR_R) ; //открываем файл на чтение
cout << "\n База данных поиска экскурсий по стране" ;
zag2() ;
rewind(baza) ;
while(fread(&excur, sizeof(excur), 1, baza) > 0)
{cout << "\n|" ;
cout.width(15) ; cout << excur.country << "|" ;
cout.width(15) ; cout << excur.name << "|" ;
cout.width(10) ; cout << excur.cena << "|" ;
cout.width(10) ; cout << excur.time << "|" ;
cout.width(9) ; cout << excur.trans << "|" ;
}
cout << endl ;
for(i = 1; i <= 65; i++)
cout << "-" ;
fclose(baza) ;
}
//ProsmotrBd2_End_________________________________________________________
//PoiskCountry_Begin______________________________________________________
//Поиск по стране пребывания
void poiskcountry(char *fname1, char *fname2)
{unsigned char country[15] ;
trip excur ;
FILE *in, //исходный файл
*out ; //файл результатов поиска
in = fopen(fname1, PR_R) ; //открываем файл на чтение
out = fopen(fname2, PR_W) ; //открываем файл на запись
cout << "\n Название страны для поиска? " ;
cin >> country ;
rewind(in) ;
while(fread(&excur, sizeof(excur), 1, in) > 0)
if(strncmp(excur.country, country, 15) == 0)
{fwrite(&excur, sizeof(excur), 1, out) ;
}
fclose(out) ;
fclose(in) ;
}
//PoiskCountry_End________________________________________________________
//Sort_name_Begin_________________________________________________________
//Сортировка по наименованию экскурсии по алфавиту
void sort_name(char *fname)
{int i ;
int fl ;
trip ppp, excur ;
FILE *baza ;
baza = fopen(fname, PR_S) ; //открываем файл на чтение и запись
do{rewind(baza) ;
fl = 0 ;
for(i =0; fread(&excur, sizeof(excur), 1, baza) > 0; i += sizeof(excur), fseek(baza, i, SEEK_SET)) //позиция i от НАЧАЛА файла
{if(fread(&ppp, sizeof(excur), 1, baza) > 0)
{if(strncmp(excur.name, ppp.name, 15) > 0)
{fseek(baza, i, SEEK_SET) ; //позиция i от НАЧАЛА файла
fwrite(&ppp, sizeof(excur), 1, baza) ;
fwrite(&excur, sizeof(excur), 1, baza) ;
fl = 1 ;
}
}
}
}
while(fl) ;
fclose(baza) ;
}
//Sort_name_End___________________________________________________________
//Sort_cena_Begin_________________________________________________________
//Сортировка по убыванию стоимости путевки
void sort_voz_cena(char *fname)
{int i ;
int fl ;
trip ppp, excur ;
FILE *baza ;
baza = fopen(fname, PR_S) ; //открываем файл на чтение и запись
do{rewind(baza) ;
fl = 0 ;
for(i =0; fread(&excur, sizeof(excur), 1, baza) > 0; i += sizeof(excur),
fseek(baza, i, SEEK_SET))
{if(fread(&ppp, sizeof(excur), 1, baza) > 0)
{if(excur.cena > ppp.cena)
{fseek(baza, i, SEEK_SET) ; //позиция i от НАЧАЛА файла
fwrite(&ppp, sizeof(excur), 1, baza) ;
fwrite(&excur, sizeof(excur), 1, baza) ;
fl = 1 ;
}
}
}
}
while(fl) ;
fclose(baza) ;
}
//Sort_cena_End___________________________________________________________
//proverka_file_Begin_____________________________________________________
//проверка наличия физического файла
int proverka_file(char *fname, const char *pr)
{
//Открываем файл
if((fopen(fname, pr)) == NULL) //файл не существует
return(0) ;
return(1) ;
}
//proverka_file_End_______________________________________________________
