Студопедия

КАТЕГОРИИ:

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


Пример программы. //Программа работы с файлом структур "Экскурсии"




 

//Программа работы с файлом структур "Экскурсии"

//Создание файла

//Просмотр файла

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

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

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

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

}

 



Поделиться:

Дата добавления: 2015-04-04; просмотров: 150; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты