Организовать поиск
25.06.2022, 23:52. Показов 463. Ответов 0
Нужно реализовать универсальный запрос(есть файл в котором хранятся строки (информация о жилых домах, год постройки,улица, площадь и тд)(внутри строк поля разделены пробелами)), есть форма с чекбоксами и текст боксами,человек выбирает сначала с помощью чекбокса по каким полям будет осуществляться поиск, затем вводит в текстбоксы то, что хочет найти, есть реализация этого на языке Си, но пытаясь переделать это под winform столкнулся с кучей проблем, несовместимостью char и string, и еще многими, вот код на языке Си, и попытка реализации в виндовс форм
C | 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
104
105
106
107
108
| void zapros() {
do {
int house_year,number_h,etazh,flag=0, cnt_kvart_bellow, cnt_village_upper, n,a[8] = {0},f2=0;
char st[40];
float sqr;
puts("*Выберите по какому полю будет выполнен запрос*");
printf("*по названию улицы*\n*по номеру дома*\n*по году постройки*\n*по площади*\n*по количеству этажей*\n*по количеству квартир*\n*по количеству жильцов*\n");
puts("вы хотите по названию улицы? 1 - да, 0 - нет");
do{n = scaner();}while(n<0||n>1);
if (n){
printf("Введите название улицы:");
while(getchar() != '\n');
gets(st);
a[0] = 1;
}
puts("вы хотите по номеру дома? 1 - да, 0 - нет");
do{n = scaner();}while(n<0||n>1);
if (n){
printf("Введите минимальный номер дома:");
do {
number_h = scaner();
while (getchar() != '\n');
}while(number_h < 1||number_h > 500);
a[1] = 1;
}
puts("вы хотите по году постройки? 1 - да, 0 - нет");
do{n = scaner();}while(n<0||n>1);
if (n){
printf("Введите год постройки дома:");
do {
house_year = scaner();
while (getchar() != '\n');
}while(house_year<1||house_year>2022);
a[2] = 1;
}
puts("вы хотите по площади? 1 - да, 0 - нет");
do{n = scaner();}while(n<0||n>1);
if (n){
printf("Введите минимальную площадь\n");
do{
sqr = scaner();
while (getchar() != '\n');
}while(sqr<1||sqr>99999);
a[3] = 1;
}
puts("вы хотите по кол-ву этажей? 1 - да, 0 - нет");
do{n = scaner();}while(n<0||n>1);
if(n){
printf("Введите минимальное кол-во этажей\n");
do{
etazh = scaner();
while (getchar() != '\n');
}while(etazh<1||etazh>55);
a[4] = 1;
}
puts("вы хотите по кол-ву квартир? 1 - да, 0 - нет");
do{n = scaner();}while(n<0||n>1);
if(n){
printf("Введите максимальное кол-во квартир:");
do {
cnt_kvart_bellow = scaner();
while (getchar() != '\n');
}while(cnt_kvart_bellow < 1 || cnt_kvart_bellow > 99999);
a[5] = 1;
}
puts("вы хотите по кол-ву жителей? 1 - да, 0 - нет");
do{n = scaner();}while(n<0||n>1);
if(n){
printf("Введите минимальное кол-во жильцов:");
do {
cnt_village_upper = scaner();
while (getchar() != '\n');
}while(cnt_village_upper<1||cnt_village_upper>99999);
a[6]=1;
}
for (int i = 0; i < 30; i++){
flag=0;
if (a[0] == 1 && strstr(list[i].street, st) == 0)
flag = 1;
if (a[1] == 1 && list[i].numb < number_h)
flag = 1;
if (a[2] == 1 && list[i].year != house_year)
flag = 1;
if (a[3] == 1 && list[i].square < sqr)
flag = 1;
if (a[4] == 1 && list[i].floor < etazh)
flag = 1;
if (a[5] == 1 && list[i].cnt_kvart < cnt_kvart_bellow)
flag = 1;
if (a[6] == 1 && list[i].cnt_village < cnt_village_upper)
flag = 1;
if (flag == 0) {
f2 = 1;
printf("*Улица - № Дома - Год - Площадь - кол-во этажей - кол-во кв. - кол-во жильцов\n");
printf("*%4s *%4d *%4d *%7.2f *%4d *%4d *%4d\n", list[i].street,list[i].numb, list[i].year, list[i].square, list[i].floor, list[i].cnt_kvart, list[i].cnt_village);
}
}
if (f2 == 0)
puts("Такихх строк нет");
printf("Продолжить? n - нет, любая клавиша - да\n");
}while(getchar()!='n');
} |
|
C++ | 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
| FILE* data;
FILE* r;
FILE* temp;
int a[7] = { 0 }, flag, f2 = 0;
char str[20], street_temp[20];
/*wchar_t street[1000];
array<wchar_t>^ street = street_tb->Text->ToCharArray();
wcscpy(street, static_cast<wchar_t*>(p.ToPointer()));
Marshal::FreeHGlobal(p);*/
//String^ street_tb;
int housenumb, houseyear, housesquare, housefloor, housecnt_kvart, housecnt_village;
data = fopen("prac.txt", "r");
if (checkBox1->Checked == true) {
String^ street = street_tb->Text;
StreamWriter^ myStream = gcnew StreamWriter("tmp.txt");
myStream->WriteLine(street);
myStream->Close();
a[0] = 1;
//(char)street_tb[20];
}
if (checkBox2->Checked == true) {
//int house_numb = Convert::ToInt32(house_number_tb->Text);
a[1] = 1;
}
if (checkBox3->Checked == true) {
//int year = Convert::ToInt32(year_tb->Text);
a[2] = 1;
}
if (checkBox4->Checked == true) {
//int square = Convert::ToInt32(square_tb->Text);
a[3] = 1;
}
if (checkBox5->Checked == true) {
//int cnt_floor = Convert::ToInt32(cnt_floor_tb->Text);
a[4] = 1;
}
if (checkBox6->Checked == true) {
//int cnt_kvart = Convert::ToInt32(cnt_kvart_tb->Text);
a[5] = 1;
}
if (checkBox6->Checked == true) {
//int cnt_village = Convert::ToInt32(cnt_village_tb->Text);
a[6] = 1;
}
String^ street = street_tb->Text;
//(char)street[20];
int house_numb = Convert::ToInt32(house_number_tb->Text);
int year = Convert::ToInt32(year_tb->Text);
int square = Convert::ToInt32(square_tb->Text);
int cnt_floor = Convert::ToInt32(cnt_floor_tb->Text);
int cnt_kvart = Convert::ToInt32(cnt_kvart_tb->Text);
int cnt_village = Convert::ToInt32(cnt_village_tb->Text);
temp = fopen("tmp.txt", "r");
fscanf(temp, "%s", &street_temp);
while (fscanf(data, "%s %d %d %f %d %d %d\n", &str, &housenumb, &houseyear, &housesquare, &housefloor, housecnt_kvart, housecnt_village) != EOF) {
flag = 0;
if (a[0] == 1 && strcmp(str,street_temp) != 0)
flag = 1;
if (a[1] == 1 && housenumb != house_numb)
flag = 1;
if (a[2] == 1 && houseyear != year)
flag = 1;
if (a[3] == 1 && housesquare != square)
flag = 1;
if (a[4] == 1 && housefloor != cnt_floor)
flag = 1;
if (a[5] == 1 && housecnt_kvart < cnt_kvart)
flag = 1;
if (a[6] == 1 && housecnt_village < cnt_village)
flag = 1;
if (flag == 0) {
f2 = 1;
fprintf(r, "%s %d %d %f %d %d %d\n", str, housenumb, houseyear, housesquare, housefloor, housecnt_kvart, housecnt_village); |
|
0
|