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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Sashko
Сообщений: n/a
#1

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

27.12.2009, 22:06. Просмотров 250. Ответов 0
Метки нет (Все метки)

В общем нужно создать файл данных заданной структуры
”СТУДЕНТ”: ФИО,Город проживания, Институт, Группа,Число сессий, Средний балл
А) Получить список студентов из одного города.
Б) Получить список студентов,обучающихся в одном вузе, сдавших сессии на «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++ Программа разветвленной структуры
программа развлетленной структуры C++
Нужно немного доделать программу C++
C++ простая программа на структуры с++
C++ Вылетает программа (Структуры и функции)

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

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

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