Варианты индивидуальных заданий
1. | Самолеты | ||||
Наименование | Фамилия | Год | Количество | Грузо- | |
типа | конструктора | выпуска | кресел | подъёмность, т | |
2. | Расчет движения | ||||
Наименование | Тип | Количество | Налет, | Пассажирооборот, | |
воздушной линии | самолета | рейсов | тыс.км | чел. км | |
3. | Перевозки | ||||
Тип | Номер | Количество | Налет, | Налет | |
самолета | борта | рейсов | час | в тыс.км | |
4. | Расписание | ||||
Номер | Наименование | Тип | Стоимость | Протяженность | |
рейса | рейса | самолета | билета | линии | |
5 | Сооружения аэропорта | ||||
Наименование | Площадь | Этажность | Год | Стоимость, | |
сооружения | млн. руб. | ||||
6 | Ремонт аэродромных сооружений | ||||
Наименование | Шифр | Вид | Стоимость | Наименование | |
ремонта | ремонта | подрядчика | |||
7 | Кассы авиабилетов | ||||
Номер | ФИО | Количество | Суммарная | Дата | |
кассы | кассира | проданных | выручка | продажи | |
билетов | |||||
8 | Характеристики ПК | ||||
Тип | Тактовая | Емкость | Емкость | Тип | |
процессора | частота | ОП, Мбайт | ЖМД, Мбайт | монитора | |
9 | Города | ||||
Наименование | Количество | Площадь, | Год | Количество | |
жителей | кв.км | основания | школ | ||
10 | Мосты | ||||
Наименование | Высота | Ширина | Количество опор | Протяженность | |
11 | Программные продукты | ||||
Наименование | Фирма | Стоимость | Объем | Количество | |
12 | Музеи | ||||
Наименование | Назначение | Адрес | Время работы | Стоимость билета | |
13 | Поликлиника | ||||
ФИО врача | Специализация | № кабинета | Начало приёма | Окончание приёма | |
14 | Квартиры | ||||
Адрес | Площадь, | Колич. | Стоимость | Этаж | |
кв.м | комнат | 1 кв.м | |||
15 | Кинотеатры | ||||
Наименование | Стоимость | Время | Адрес | Количество | |
билета | сеансов | мест | мест | ||
16 | Магазин | ||||
Наименование товара | Фирма изготовитель | Сорт | Цена | Размер партии | |
17 | Театр | ||||
Наименование спектакля | Дата | Время | Место | Цена билета | |
18 | Железная дорога | ||||
Пункт назначения | Поезд | Вагон | Место | Стоимость проезда | |
19 | Библиотека | ||||
Название книги | Автор | Издание | Год издания | Количество экземпляров | |
20 | Автоинспекция | ||||
Марка машины | Цвет | Номер | Год выпуска | Владелец | |
21 | Метрополитен | ||||
Номер линии | Название линии | Число станций | Время стоянки | Время разворота |
|
|
|
|
Пример программы
//Программа работы с базой данных "Экскурсии"
//Создание базы
//Добавление новых записей
|
|
//Просмотр базы
//Поиск по названию страны с созданием файла выборки
//Сортировка по наименованию экскурсии в алфавитном порядке
//Сортировка в порядке возрастания стоимости путевки
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream.h>;
#include <locale.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] ; //страна
unsigned 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 ;
setlocale(LC_ALL,"Russian") ;
for( ; ;)
{//Выбор вида действия с содержимым файла
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_______________________________________________________
Лабораторная работа №14
Линейные списки
Цель лабораторной работы: изучение способов создания и принципов использования односвязных линейных списков; изучение стандартных средств языка C/C++ для работы с динамической памятью; совершенствование навыков модульного программирования на языке C/C++ при решении задач обработки линейных списков; изучение способов разработки многофайловых проектов.
Задание на программирование: используя технологию процедурного программирования разработать программу обработки односвязных линейных списков с числом элементов в списке не менее десяти в соответствии с индивидуальным заданием.
Порядок выполнения работы:
1) Получить у преподавателя индивидуальное задание.
2) Построить схему алгоритма решения задачи с использованием функций создания, просмотра, обработки списка, удаления списка из динамической памяти.
3) Составить спецификации функций.
4) Составить программу на языке C/C++.
5) Проверить и продемонстрировать преподавателю работу программы на полном наборе тестов. Обеспечить одновременный показ на экране исходного и результирующего списков.
6) Оформить отчет о лабораторной работе в составе: постановка задачи, математическая модель, схема алгоритма решения, спецификации функций, текст программы, контрольные примеры.
Дата добавления: 2018-04-05; просмотров: 748; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!