1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
| #include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
const int l_name = 80;
struct Tv
{ char name[l_name];
char firm[l_name];
float cash;
int diagonal;
int kolvo;
};
int compare(const void *tvl, const void *tv2);
void create(void) // Создание файла
{ Tv tv; int pr; FILE *fbin;
if ((fbin =fopen("dbase.bin","wb")) == NULL)
puts("Ошибка создания файла\n ");
else
{ do
{ cout << "\n Название телевизора: ";
cin.get() ; gets (tv.name) ;
cout << "\n Фирма изготовитель: ";
cin.get() ; gets (tv.firm) ;
cout << "\n Стоимость: ";
cin >> tv.cash;
cout << "\n Размер экрана: ";
cin >> tv.diagonal;
cout << "\n Количество на складе: ";
cin >> tv.kolvo;
fwrite(&tv, sizeof(tv),1,fbin);
cout<< "\n Продолжить ввод? (1-да/0-нет)";
cin >> pr;
} while(pr == 1);
}
fclose(fbin);
}
void view(void) // Просмотр файла
{ FILE *fbin;
if ((fbin =fopen("dbase.bin","rb")) == NULL)
puts("Ошибка открытия файла\n");
else
{ fseek(fbin, 0, SEEK_END);
int n_record = ftell(fbin)/sizeof(Tv);
Tv *tv = new Tv[n_record];
fseek(fbin, 0, SEEK_SET);
fread(tv, sizeof(Tv),n_record, fbin);
fclose(fbin);
for (int i=0; i < n_record; i++)
cout << "\n" << tv[i].name << " "
<< tv[i].firm << " " << tv[i].cash
<< " " << tv[i].diagonal << " "
<< tv[i].kolvo;
cout << "\n";
}
}
// Обработка файла
void work(void)
{ FILE *fbin;
if ((fbin =fopen("dbase.bin","rb")) == NULL)
puts("Ошибка открытия файла\n");
else
{ fseek(fbin, 0, SEEK_END);
int n_record = ftell(fbin)/sizeof(Tv);
Tv *tv = new Tv[n_record];
fseek(fbin, 0, SEEK_SET);
fread(tv, sizeof(Tv),n_record, fbin);
fclose(fbin);
qsort(tv, n_record, sizeof(Tv), compare);
for (int i=0; i < n_record; i++)
{ cout << "\n" << tv[i].cash << " "
<< tv[i].name << " " << tv[i].kolvo;
} cout << "\n";
}
}
int main(void)
{ int num;
do
{ cout << "\n 1 - Создание файла";
cout << "\n 2 - Просмотр файла";
cout << "\n 3 - Обработка файла";
cout << "\n 4 - Выход";
cout << "\n Ваш выбор: ";
cin >> num;
switch(num)
{ case 1: create();break;
case 2: view();break;
case 3: work();break;
}
} while (num != 4);
}
int compare(const void *tvl, const void *tv2)
{ return strcmp(((Tv *)tvl)->name,
((Tv *)tv2)->name);
} |