Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Пример программы. //Программа работы с базой данных Экскурсии






 

//Программа работы с базой данных " Экскурсии"

//Создание базы

//Просмотр базы

//Поиск по названию страны с созданием файла выборки

//Сортировка по наименованию экскурсии в алфавитном порядке

//Сортировка в порядке возрастания стоимости путевки

#include < stdio.h>

#include < stdlib.h>

#include < conio.h>

#include < string.h>

#include < iostream.h>;

#define FNAME1 " A: \\bd1.dat" //имя файла с исходной базой

#define FNAME2 " A: \\bd2.dat" //имя файла с результатами поиска

void wind(int x1, int y1, int x2, int y2, int colf, int colb);

void dobavka();

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);

struct trip{unsigned char name[15]; //наименование экскурсии

unsigned char country[15]; //страна

unsigned int cena; //стоимость путевки

unsigned int time; //продолжительность

unsigned char trans[10]; //транспорт

};

FILE *baza1;

trip excur;

char otv;

 

int main()

{int var;

textbackground(BLACK);

clrscr();

wind(1, 1, 80, 25, 1, 15);

if((baza1 = fopen(FNAME1, " r+"))! = NULL)

{printf(" База данных экскурсий была создана раньше.\n");

printf(" Добавлять новые записи в базу зкскурсий? [Y/N]");

while(otv = getchar() == '\n');

if(otv == 'Y' || otv == 'y' || otv == 'Н' || otv == 'н')

if((baza1 = fopen(FNAME1, " a")) == NULL)

{printf(" \n Ошибка открытия базы данных для добавления\n");

abort();

}

else{printf(" \n Добавляем новые записи\n");

dobavka();

fclose(baza1);

}

}

else if((baza1 = fopen(FNAME1, " w+")) == NULL)

{printf(" \n Ошибка открытия пустой базы данных для чтения и записи\n");

abort();

}

else{printf(" Создаем новую базу\n");

dobavka();

fclose(baza1);

}

if((baza1 = fopen(FNAME1, " r+")) == NULL)

{printf(" \n Ошибка открытия базы данных для чтения и записи\n");

abort();

}

else printf(" \n База данных успешно создана\n");

printf(" \n Для продолжения нажмите Enter-> ");

getchar();

 

for(;;) //меню программы

{wind(1, 1, 80, 25, 0, 15);

wind(20, 1, 60, 9, 1, 15);

//Выбор вида действия

cprintf(" \n Вид действия: \n\r");

cprintf(" 1 - сортировка по наименованию\n\r");

cprintf(" 2 - сортировка по цене путевки\n\r");

cprintf(" 3 - поиск по стране\n\r");

cprintf(" 4 - просмотр базы данных\n\r");

cprintf(" 5 - просмотр базы данных поиска\n\r");

cprintf(" 6 - завершение задачи\n\r");

cprintf(" Введите вид действия -> ");

cin > > var;

if(var == 6) break;

switch(var)

{case 1: wind(1, 10, 80, 15, 4, 15);

sort_name(FNAME1);

printf(" \n Сортировка закончена.");

printf(" \n Для продолжения нажмите Enter-> ");

getchar();

break;

case 2: wind(1, 10, 80, 15, 2, 15);

sort_voz_cena(FNAME1);

printf(" \n Сортировка закончена.");

printf(" \n Для продолжения нажмите Enter-> ");

getchar();

break;

case 3: wind(1, 10, 80, 25, 2, 15);

poiskcountry(FNAME1, FNAME2);

printf(" \n Поиск по стране закончен.");

printf(" \n Для продолжения нажмите Enter-> ");

getchar();

break;

case 4: wind(1, 10, 80, 25, 2, 15);

prosmotrbd1(FNAME1);

printf(" \n Для продолжения нажмите Enter-> ");

getchar();

break;

case 5: wind(1, 10, 80, 25, 2, 15);

prosmotrbd2(FNAME2);

printf(" \n Для продолжения нажмите Enter-> ");

getchar();

}

}

return 0;

}

 

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

void wind(int x1, int y1, int x2, int y2, int colf, int colb)

{window(x1, y1, x2, y2);

textbackground(colf);

textcolor(colb);

clrscr();

}

 

 

//Добавление новых элементов в базу данных

void dobavka()

{do

{printf(" \nНаименование экскурсии? ");

scanf(" %s", & excur.name);

 

printf(" \nСтрана? ");

scanf(" %s", & excur.country);

 

printf(" \nСтоимость путевки? ");

scanf(" %u", & excur.cena);

 

printf(" \nПродолжительность? ");

scanf(" %u", & excur.time);

 

printf(" \nТранспорт? ");

scanf(" %s", & excur.trans);

 

fwrite(& excur, sizeof(excur), 1, baza1);

 

printf(" \nПродолжать? [Y/N]");

while((otv = getchar()) == '\n');

}

while(otv == 'Y' || otv == 'y' || otv == 'Н' || otv == 'н');

}

 

//Вывод заголовка при просмотре исходного файла

void zag1()

{int i;

printf(" \n");

for(i = 1; i < = 65; i++)

printf(" -");

printf(" \n|%15s|%15s|%10s|%10s|%10s\n",

" Наименование", " Страна", " Стоимость", " Продолжит.", " Транспорт");

for(i = 1; i < = 65; i++)

printf(" -");

}

 

//Вывод заголовка при просмотре файла поиска

void zag2()

{int i;

printf(" \n");

for(i = 1; i < = 65; i++)

printf(" -");

printf(" \n|%15s|%15s|%10s|%10s|%10s\n",

" Страна", " Наименование", " Стоимость", " Продолжит.", " Транспорт");

for(i = 1; i < = 65; i++)

printf(" -");

}

 

//Просмотр базы данных экскурсий

void prosmotrbd1(char *fname)

{int i;

FILE *baza1;

if((baza1 = fopen(fname, " r+")) == NULL)

{printf(" \n Ошибка открытия базы данных\n");

abort();

}

printf(" \n База данных экскурсий");

zag1();

rewind(baza1);

while(fread(& excur, sizeof(excur), 1, baza1) > 0)

{printf(" \n|%15s|%15s|%10u|%10u|%10s",

excur.name, excur.country, excur.cena, excur.time, excur.trans);

}

printf(" \n");

for(i = 1; i < = 65; i++)

printf(" -");

}

 

//Просмотр базы данных поиска экскурсий по стране пребывания

void prosmotrbd2(char *fname)

{int i;

FILE *baza2;

if((baza2 = fopen(fname, " r+")) == NULL)

{printf(" \n Ошибка открытия базы данных\n");

abort();

}

printf(" \n База данных поиска экскурсий по стране");

zag2();

rewind(baza2);

while(fread(& excur, sizeof(excur), 1, baza2) > 0)

{printf(" \n|%15s|%15s|%10u|%10u|%10s",

excur.country, excur.name, excur.cena, excur.time, excur.trans);

}

printf(" \n");

for(i = 1; i < = 65; i++)

printf(" -");

}

 

//Поиск по стране пребывания

void poiskcountry(char *fname1, char *fname2)

{unsigned char country[15];

FILE *baza1,

*baza2;

if((baza2=fopen(fname2, " w+")) == NULL)

{printf(" \n Ошибка открытия пустой базы данных для записи\n");

abort();

}

if((baza1 = fopen(fname1, " r+")) == NULL)

{printf(" \n Ошибка открытия базы данных для чтения и записи\n");

abort();

}

 

printf(" \n Название страны для поиска? ");

scanf(" %s", & country);

rewind(baza1);

while(fread(& excur, sizeof(excur), 1, baza1) > 0)

if(strncmp(excur.country, country, 15) == 0)

{fwrite(& excur, sizeof(excur), 1, baza2);

}

fclose(baza2);

fclose(baza1);

getchar();

}

 

//Сортировка по наименованию экскурсии по алфавиту

void sort_name(char *fname)

{int i;

int fl;

trip ppp;

FILE *baza1;

 

if((baza1 = fopen(fname, " r+")) == NULL)

{printf(" \n Ошибка открытия базы данных для чтения и записи\n");

abort();

}

fl=0;

do{rewind(baza1);

fl=0;

for(i=0; fread(& excur, sizeof(excur), 1, baza1) > 0; i += sizeof(excur),

fseek(baza1, i, SEEK_SET)) //позиция i от НАЧАЛА файла

{if(fread(& ppp, sizeof(excur), 1, baza1) > 0)

{if(strncmp(excur.name, ppp.name, 15) > 0)

{fseek(baza1, i, SEEK_SET); //позиция i от НАЧАЛА файла

fwrite(& ppp, sizeof(excur), 1, baza1);

fwrite(& excur, sizeof(excur), 1, baza1);

 

fl = 1;

}

}

}

}

while(fl);

fclose(baza1);

}

 

//Сортировка по убыванию стоимости путевки

void sort_voz_cena(char *fname)

{int i;

int fl;

trip ppp;

FILE *baza1;

 

if((baza1 = fopen(fname, " r+")) == NULL)

{printf(" \n Ошибка открытия базы данных для чтения и записи\n");

abort();

}

fl = 0;

do{rewind(baza1);

fl = 0;

for(i=0; fread(& excur, sizeof(excur), 1, baza1) > 0; i += sizeof(excur),

fseek(baza1, i, SEEK_SET))

{if(fread(& ppp, sizeof(excur), 1, baza1) > 0)

{if(excur.cena > ppp.cena)

{fseek(baza1, i, SEEK_SET); //позиция i от НАЧАЛА файла

fwrite(& ppp, sizeof(excur), 1, baza1);

fwrite(& excur, sizeof(excur), 1, baza1);

fl = 1;

}

}

}

}

while(fl);

fclose(baza1);

}

 



Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.021 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал