![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Пример программы. //Программа работы с базой данных Экскурсии
//Программа работы с базой данных " Экскурсии" //Создание базы //Просмотр базы //Поиск по названию страны с созданием файла выборки //Сортировка по наименованию экскурсии в алфавитном порядке //Сортировка в порядке возрастания стоимости путевки #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); }
|