Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <locale.h>
#include <Windows.h>
#define DATA struct data
#define MARK "---------------------------------------------------------------------"
DATA
{
char name[40];
int numf;
int numk;
};
DATA a,b;
void Purpose(FILE *f)
{
fseek(f,0,SEEK_END);
int er=0,i=0,end=ftell(f);
int fil;
printf("\nВведите количество филиалов: ");
do
{
if((scanf("%d",&fil))!=1)
{
printf("Используйте символы для ввода 0-9\n");
er=1;
}
}
while(er);
printf("\n\t\tБанки с числом филиалов больше %d",fil);
printf("\n%s\n|\tНаименование\t\t| Число филиалов | Капитал(млн.руб) |\n%s\n",MARK,MARK);
while(i<end)
{
fseek(f,i,SEEK_SET);
fread(a.name,sizeof(a.name),1,f);
fread(&a.numf,sizeof(a.numf),1,f);
fread(&a.numk,sizeof(a.numk),1,f);
if(a.numf>fil)
{
printf("| %-30s|\t%-9d|\t %-10d|\n%s\n",a.name,a.numf,a.numk,MARK);
}
i+=sizeof(a.name)+sizeof(a.numf)+sizeof(a.numk);
}
}
void display(FILE *f)
{
fseek(f,0,SEEK_END);
int i=0,end=ftell(f);
printf("\n%s\n|\tНаименование\t\t| Число филиалов | Капитал(млн.руб) |\n%s\n",MARK,MARK);
while(i<end)
{
fseek(f,i,SEEK_SET);
fread(a.name,sizeof(a.name),1,f);
fread(&a.numf,sizeof(a.numf),1,f);
fread(&a.numk,sizeof(a.numk),1,f);
printf("| %-30s|\t%-9d|\t %-10d|\n%s\n",a.name,a.numf,a.numk,MARK);
i+=sizeof(a.name)+sizeof(a.numf)+sizeof(a.numk);
}
}
void Addfile_and_Deal(FILE *f,FILE *fr)
{
char c=' ';
int er;
f=fopen("output.txt","w");
fr=fopen("deal.txt","w");
fseek(f,0,SEEK_SET);
fseek(fr,0,SEEK_SET);
do
{
er=0;
printf("Введите название банка: ");
scanf("%s",a.name);
fwrite(a.name,sizeof(a.name),1,f);
fflush(stdin);
printf("Количество филиалов: ");
if((scanf("%d",&a.numf))!=1)
{
printf("Используйте символы для ввода 0-9\n");
er=1;
}
fwrite(&a.numf,sizeof(a.numf),1,f);
printf("Капитал: ");
if((scanf("%d",&a.numk))!=1)
{
printf("Используйте символы для ввода 0-9\n");
er=1;
}
fwrite(&a.numk,sizeof(a.numk),1,f);
fflush(stdin);
if(a.numk<70)
{
fwrite(a.name,sizeof(a.name),1,fr);
fwrite(&a.numf,sizeof(a.numf),1,fr);
fwrite(&a.numk,sizeof(a.numk),1,fr);
}
printf("Для продолжения введите + : ");
scanf("%c",&c);
fflush(stdin);
}
while((c=='+')||(er==1));
fclose(f);
fclose(fr);
}
int main()
{
setlocale(LC_ALL, "rus");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
system("color F0");
setlocale(0,"");
FILE *f,*fr;
printf("Данные:\n");
Addfile_and_Deal(f,fr);
system("cls");
printf("\t\tПоказатели развития банков России к 1914г.");
if((f=fopen("output.txt","rb"))==NULL)
{
printf("Не удалось открыть файл!");
return 0;
}
display(f);
Purpose(f);
fclose(f);
if((fr=fopen("deal.txt","rb+"))==NULL)
{
printf("Не удалось открыть файл!");
return 0;
}
fseek(fr,0,SEEK_END);
int end=ftell(fr);
int pos,j,i=0;
while(i<(end-sizeof(a.name)-sizeof(a.numf)-sizeof(a.numk)))
{
fseek(fr,i,SEEK_SET);
fread(a.name,sizeof(a.name),1,fr);
fread(&a.numf,sizeof(a.numf),1,fr);
fread(&a.numk,sizeof(a.numk),1,fr);
j=i+sizeof(a.name)+sizeof(a.numf)+sizeof(a.numk);
while(j<end)
{
fseek(fr,j,SEEK_SET);
fread(b.name,sizeof(b.name),1,fr);
fread(&b.numf,sizeof(b.numf),1,fr);
fread(&b.numk,sizeof(b.numk),1,fr);
if(strcmp(a.name,b.name)<0)
{
pos=i;
fseek(fr,pos,SEEK_SET);
fwrite(b.name,sizeof(b.name),1,fr);
fwrite(&b.numf,sizeof(b.numf),1,fr);
fwrite(&b.numk,sizeof(b.numk),1,fr);
pos=j;
fseek(fr,pos,SEEK_SET);
fwrite(a.name,sizeof(a.name),1,fr);
fwrite(&a.numf,sizeof(a.numf),1,fr);
fwrite(&a.numk,sizeof(a.numk),1,fr);
a.numf=b.numf;
a.numk=b.numk;
strcpy(a.name,b.name);
}
j+=sizeof(a.name)+sizeof(a.numf)+sizeof(a.numk);
}
i+=sizeof(a.name)+sizeof(a.numf)+sizeof(a.numk);
}
getch();
printf("\n\t\tБанки с капиталом меньше 70 млн");
display(fr);
fclose(fr);
return 0;
}