КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Пример программы. //Программа работы с файлом структур "Экскурсии"
//Программа работы с файлом структур "Экскурсии" //Создание файла //Просмотр файла //Поиск по названию страны с созданием файла выборки //Сортировка по наименованию экскурсии в алфавитном порядке //Сортировка в порядке возрастания стоимости путевки #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> #include <iostream.h>; #define FNAME1 "D:\\bd1.dat" //имя исходного файла #define FNAME2 "D:\\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); }
|