Форум программистов, компьютерный форум CyberForum.ru

программа на структуры. (немного доделать фильтрацию) - C++

Восстановить пароль Регистрация
 
Sashko
Сообщений: n/a
27.12.2009, 22:06     программа на структуры. (немного доделать фильтрацию) #1
В общем нужно создать файл данных заданной структуры
”СТУДЕНТ”: ФИО,Город проживания, Институт, Группа,Число сессий, Средний балл
А) Получить список студентов из одного города.
Б) Получить список студентов,обучающихся в одном вузе, сдавших сессии на «4» и «5».

Немного написал. Не получается правильно сделать фильтрацию, подскажите:
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h" 
#include "iostream.h" 
#include "iomanip.h"
typedef struct 
{
        char  fio[30];
    char gorod[15];
           char institut[10];
    char gruppa[7];
    char sesiya[2];
    char bal[2];
 
} stud; 
int main()
{
stud *st;
FILE *pf;
int var, i,j;  
long int n;
var=-1;
while(var!=0)
{
cout<<"0-vyhod; 1-zapis`; " 
        <<"2-dobavlenie;"
        <<"3-pervoe zadanie;"
        <<"4-vtoroe zadanie: vybor=";
cin>>var;
switch(var)
{
case 1:
cout<<"kolichestvo="; cin>>n;
st=(stud*)malloc(n*sizeof(stud));
//заполнение массива структур
for(i=0;i<=n-1;i++)
{
cout<<"fio="; cin>>((st+i)->fio);
cout<<"gorod prozivaniya="; cin>>((st+i)->gorod);
cout<<"institut="; cin>>((st+i)->institut);
cout<<"gruppa=";cin>>((st+i)->gruppa);
cout<<"kol-vo sessii="; cin>>((st+i)->sesiya);
cout<<"srednii bal="; cin>>((st+i)->bal);
}
//файл открывается для записи
if((pf=fopen("my_f.dat","w"))==NULL)
{
    printf("файл не открыт\n"); break;
}
//запись в файл
fwrite(st, sizeof(stud), n, pf);
fclose(pf);
free(st);
break;
case 2:
cout<<"kolichestvo"; 
cin>>n;
st=(stud*)malloc(n*sizeof(stud));
//заполнение массива структур
for(i=0;i<=n-1;i++)
{
cout<<"fio="; cin>>((st+i)->fio);
cout<<"gorod prozivaniya="; cin>>((st+i)->gorod);
cout<<"institut="; cin>>((st+i)->institut);
cout<<"gruppa=";cin>>((st+i)->gruppa);
cout<<"kol-vo sessii="; cin>>((st+i)->sesiya);
cout<<"srednii bal="; cin>>((st+i)->bal);
}
//файл открывается для добавления
if((pf=fopen("my_f.dat","a"))==NULL)
{
    printf("файл не открыт\n"); break;
}
//дозапись в файл
fwrite(st, sizeof(stud), n, pf);
fclose(pf);
free(st);
break;
case 3:
//файл открывается для чтения
if((pf=fopen("my_f.dat","r"))==NULL)
{
    printf("файл не открыт\n"); break;
}
//Г®определение длины файла в байтах
fseek(pf, 0, SEEK_END);
n=ftell(pf);
//n - количество записей в файле
n=n/sizeof(stud);
st=(stud*)malloc(n*sizeof(stud));
rewind(pf);
//заполненение массива структур
fread(st, sizeof(stud), n, pf);
char s[15];
cout<<"vvedite gorod "; 
cin>>s;
for(i=0;i<=n;i++)
if (st[i].gorod[i]==s[i])
{
    cout<<"iz etogo goroda " <<st[i].fio<<endl;
 
}
free(st);
break;
case 4:
 
if((pf=fopen("my_f.dat","r"))==NULL)
{
    printf("файл не открыт\n"); break;
}
 
fseek(pf, 0, SEEK_END);
n=ftell(pf);
n=n/sizeof(stud);
st=(stud*)malloc(n*sizeof(stud));
rewind(pf);
fread(st, sizeof(stud), n, pf);
char v[10];
cout<<"vvedite institut ";
cin>>v;
for(i=0;i<=n-1;i++)
    for (j=0;j<=(strlen(v));j++)
    {{
    if (st[i].institut[j]==v[j])
     cout<<"iz etogo vuza sdali na 4 ili 5 " <<st[i].fio<<endl;
    }
}
fclose(pf);
free(st);
break;
}
}return 1;
}
Добавлено через 1 час 54 минуты
Сейчас переделал, всё работает кроме
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
char v[10];
char ocenka4[]="4";
char ocenka5[]="5";
cout <<ocenka4<<endl;
cout <<ocenka5<<endl;
cout<<"vvedite institut ";
cin>>v;
for(i=0;i<=n-1;i++)
    {
 
   if ((strcmp(v,st[i].institut))==0 &&
      (strcmp(ocenka4,st[i].bal))==0 ||
       strcmp(ocenka5,st[i].bal)==0)
 
    
     cout<<"iz etogo vuza sdali na 4 ili 5 " <<st[i].fio<<endl;
    
}
fclose(pf);
free(st);
break;
}
неверно выводит фамилии, почему то всех у кого балл =4 или 5, независимо от института.
Может кто знает в чем ошибка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2009, 22:06     программа на структуры. (немного доделать фильтрацию)
Посмотрите здесь:

C++ Программа циклической структуры
C++ Программа на структуры
C++ Программа на структуры
программа которая переводит введенные числа в буквенную начертанию (надо немного исправить) C++
Структуры(совсем немного переделать) C++
C++ Строки и структуры (Помогите доделать программу учета товаров на складе)
нужно доделать игру немного)(кому не сложно) C++
Нужно немного доделать программу C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 20:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru