С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
Montana
0 / 0 / 0
Регистрация: 23.02.2010
Сообщений: 14
#1

Ввод данных, добавление данных, получение информации из файла по заданным критериям выборки - C++

23.02.2010, 20:16. Просмотров 2234. Ответов 11
Метки нет (Все метки)

Все привет!!!Обращаюсь к вам за помощью...никак не получается решить задачку...
Суть такая....Написать на языке программирования С++, конкретной темы нет...просто дали задачу, а предмет ПИЭ (Прикладная информатика в экономике) называется
Само задание:
Создать файл данных заданной структуры. Организовать управление в режиме текстового меню по следующим пунктам: ввод данных, добавление данных, получение информации из файла по заданным критериям выборки.

Задание: «Пациент».
Пункты: ФИО, Год рождения, Номер телефона, Домашний Адрес, Номер Медкарты, Группа Крови, Диагноз
А. Получить список пациентов имеющих одну и ту же группу крови.
Б. Получить список пациентов, родившихся в период с 1940 по 1970г. с одинаковым диагнозом, фамилли которых начинаются на «С».

Так же дан образец решения подобной задачи...
В принципе в основном мне нужно разобратся с выборками, т.е. как из файла получить информацию и найти там необходимые записи.
0
Вложения
Тип файла: doc Задание.doc (25.5 Кб, 29 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2010, 20:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ввод данных, добавление данных, получение информации из файла по заданным критериям выборки (C++):

ввод структурированных данных в файл и вывод данных из этого файла на экран (сделать хра-нилище данных в файле). - C++
Здравствуйте) помогите написать программу, осуществляющую ввод структурированных данных в файл и вывод данных из этого файла на экран...

Реализовать ввод данных в структуру и поиск информации в ней - C++
1. Описать класс ORDER, реализующий однонаправленный линейный список для работы со следующими данными: • фамилия налогоплательщика; ...

Получение данных из файла - C++
Задача№6. Постройте программу, которая отслеживает пожертвования в Общество Защиты Влиятельных Лиц. Она должна запрашивать у пользователя...

Получение данных из файла в Спортивном программировании - C++
Здавствуйте! Решая задачи по спортивному программированию, столкнулся с тем, что в 95% нужно использовать чтение из файла. Допусти...

Ввод данных из файла - C++
Всем доброго времени суток! Написала программку: расчет формулы, в которой 6 переменных, данные вводила с клавиатуры. Но нужно чтобы данные...

Ввод данных из файла - C++
Проблема такая, есть файл исходных данных там в форме таблички приведены числа и текст (коментарий) Надо используя С++ из указанного...

11
Montana
0 / 0 / 0
Регистрация: 23.02.2010
Сообщений: 14
25.02.2010, 20:06  [ТС] #2
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
#include "stdio.h"
#include "stdlib.h"
#include "iostream.h"
#include "iomanip.h"
 
typedef struct
{ 
char FIO [30]
int nomer_telefona
char adres [30]
int nomer_medkarti
int gruppa_krovi
int diagnoz
} Pacient;
 
int main()
{Pacient *st;
FILE *pf;
int var,i,count_1;
long int n
var=-1
while(var!=0)
{
        cout<<"0-exit;\n1-write;\n"
            <<"2-dobavlenie;\n"
            <<"3-xarakteristiki:\nvar=";
        cin>>var;
        switch(var)
        {
        case 1:
                cout<<"n=";cin>>n;
                st=(pacient*)malloc(n*sizeof(school));
        for(i=0;i<=n-1;i++)
        {
                cout<<"FIO=";cin>>((st+i)->FIO);
                cout<<"nomer_telefona="cin>>((st=i)->nomer_telefona);
                cout<<"adres="cin>>(st=i)->adres);
                cout<<"nomer_medkarti="cin>>(st=i)->nomer_medkarti);
                cout<<"gruppa_krovi="cin>>(st=i)->gruppa_krovi);
                cout<<"diaznoz="cin>>(st=i)->diagnoz);
        }
        if((pf=open("my_f.dat","w"))==NULL)
        {       
                printf("fail no open\n");break;
        }
        fwrite(st,sizeof(pacient),n,pf);
        fclose(pf)
        free(st)
        break;
        case 2:
                cout<<"n=";cin>>n;
                st=(pacient*)malloc(n*sizeof(school));
        for(i=0;i<=n-1;i++)
        {
                cout<<"FIO=";cin>>((st+i)->FIO);
                cout<<"nomer_telefona="cin>>((st=i)->nomer_telefona);
                cout<<"adres="cin>>(st=i)->adres);
                cout<<"nomer_medkarti="cin>>(st=i)->nomer_medkarti);
                cout<<"gruppa_krovi="cin>>(st=i)->gruppa_krovi);
                cout<<"diaznoz="cin>>(st=i)->diagnoz);
        }
        if((pf=open("my_f.dat","w"))==NULL)
        {
                printf("fail no open\n");break;
        }
        fwrite(st,sizeof(pacient),n,pf);
        fclose(pf);
        free(st)
        break:
        case 3:
Вот вроде реализовал ввод и добавление данных в файл...проверьте пжста, все ли правильно???
теперь никак не получается сделать выборку

Добавлено через 22 часа 56 минут
Люди, ну помоги плиз, завтра уже сдавать
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
26.02.2010, 03:53 #3
регистр не должен меняться
Pacient и pacient - два разных типа

функция для открытия файла fopen

в структуре раздели поля через ;

C++
1
st=(pacient*)malloc(n*sizeof(school));
school не существует
1
Montana
0 / 0 / 0
Регистрация: 23.02.2010
Сообщений: 14
26.02.2010, 09:29  [ТС] #4
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
#include "stdio.h"
#include "stdlib.h"
#include "iostream.h"
#include "iomanip.h"
 
typedef struct
{ 
char FIO [30];
int nomer_telefona;
char adres [30];
int nomer_medkarti;
int gruppa_krovi;
int diagnoz;
} pacient;
 
int main()
{
pacient *st;
FILE *pf;
int var,i,count_1;
long int n;
var=-1;
while(var!=0)
{
                cout<<"0-exit;\n1-write;\n"
                        <<"2-dobavlenie;\n"
                        <<"3-xarakteristiki:\nvar=";
                cin>>var;
                switch(var)
                {
                case 1:
                                cout<<"n=";cin>>n;
                                st=(pacient*)malloc(n*sizeof(pacient));
                for(i=0;i<=n-1;i++)
                {
                                cout<<"FIO=";cin>>((st+i)->FIO);
                                cout<<"nomer_telefona="cin>>((st=i)->nomer_telefona);
                                cout<<"adres="cin>>(st=i)->adres);
                                cout<<"nomer_medkarti="cin>>(st=i)->nomer_medkarti);
                                cout<<"gruppa_krovi="cin>>(st=i)->gruppa_krovi);
                                cout<<"diaznoz="cin>>(st=i)->diagnoz);
                }
                if((pf=fopen("my_f.dat","w"))==NULL)
                {               
                                printf("fail no open\n");break;
                }
                fwrite(st,sizeof(pacient),n,pf);
                fclose(pf);
                free(st);
                break;
                
                case 2:
                                cout<<"n=";cin>>n;
                                st=(pacient*)malloc(n*sizeof(pacient));
                for(i=0;i<=n-1;i++)
                {
                                cout<<"FIO=";cin>>((st+i)->FIO);
                                cout<<"nomer_telefona="cin>>((st=i)->nomer_telefona);
                                cout<<"adres="cin>>(st=i)->adres);
                                cout<<"nomer_medkarti="cin>>(st=i)->nomer_medkarti);
                                cout<<"gruppa_krovi="cin>>(st=i)->gruppa_krovi);
                                cout<<"diaznoz="cin>>(st=i)->diagnoz);
                }
                if((pf=fopen("my_f.dat","w"))==NULL)
                {
                                printf("fail no open\n");break;
                }
                fwrite(st,sizeof(pacient),n,pf);
                fclose(pf);
                free(st);
                break;
                case 3:
функция для открытия файла fopen
т.е. получится...
C++
1
2
3
case 3:
pf=fopen("my_f.dat","r");//открытие файла
fread(pf);//чтение данных из файла
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
26.02.2010, 09:43 #5
fread
Код
4.9.8.1 The fread function

Synopsis

         #include <stdio.h>
         size_t fread(void *ptr, size_t size, size_t nmemb,
                  FILE *stream);

Description

   The fread function reads, into the array pointed to by ptr , up to
nmemb members whose size is specified by size , from the stream
pointed to by stream .  The file position indicator for the stream (if
defined) is advanced by the number of characters successfully read.
If an error occurs, the resulting value of the file position indicator
for the stream is indeterminate.  If a partial member is read, its
value is indeterminate.

Returns

   The fread function returns the number of members successfully read,
which may be less than nmemb if a read error or end-of-file is
encountered.  If size or nmemb is zero, fread returns zero and the
contents of the array and the state of the stream remain unchanged.
1
Montana
0 / 0 / 0
Регистрация: 23.02.2010
Сообщений: 14
26.02.2010, 09:54  [ТС] #6
Спасибо за инфу, поправил...теперь правильно??
C++
1
2
3
case 3:
pf=fopen("my_f.dat","r");//открытие файла
fread(st,sizeof(pacient),n,pf);//чтение данных из файла
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
26.02.2010, 10:15 #7
синтаксически - да
а логически, если это выборка, нужно по одной записи читать и проверять её на критерий
1
Montana
0 / 0 / 0
Регистрация: 23.02.2010
Сообщений: 14
26.02.2010, 12:11  [ТС] #8
Теперь выборка...т.е. нужно перебрать все элементы массива и найти нужные... как будет правильно ее сделать???
C++
1
2
3
4
5
6
7
8
9
10
11
12
case 3:
if((pf=fopen("my_f.dat","r"))==NULL) //открытие файла
{               
        printf("fail no open\n");break;
}
fseek(pf,0,SEEK_SET);
n=ftell(pf); 
fread(st,sizeof(pacient),n,pf);// чтение данных из файла
count_1=0
for(i=0;i<n-1;i++)//перебор элементов массива
{
       if((st+i)->
0
Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
26.02.2010, 13:01 #9
Выборка:
C
1
2
3
4
5
fseek(pf,0,SEEK_END);
cin>>pos;
fseek(pf,0,SEEK_SET);
fread(st,sizeof(pacient)*pos-1,1,pf);
cout<<st[i].name;// ;
1
Montana
0 / 0 / 0
Регистрация: 23.02.2010
Сообщений: 14
26.02.2010, 13:44  [ТС] #10
Sekt,
Спасибо большое...
Только вот маленько не ясны вот эти строчки..

Цитата Сообщение от Sekt Посмотреть сообщение
cin>>pos;
Цитата Сообщение от Sekt Посмотреть сообщение
cout<<st[i].name;// ;
Добавлено через 3 минуты
Что получается..
Реализованы:
1. Ввод данных в файл
2. Добавление данных в файл
3. А. Получить список пациентов имеющих одну и ту же группу крови.

Осталось: Б. Получить список пациентов, родившихся в период с 1940 по 1970г. с одинаковым диагнозом, фамилли которых начинаются на «С».



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
#include "stdio.h"
#include "stdlib.h"
#include "iostream.h"
#include "iomanip.h"
 
typedef struct
{ 
char FIO [30];
int nomer_telefona;
char adres [30];
int nomer_medkarti;
int gruppa_krovi;
int diagnoz;
} pacient;
 
int main()
{
pacient *st;
FILE *pf;
int var,i,count_1;
long int n;
var=-1;
while(var!=0)
{
                cout<<"0-exit;\n1-write;\n"
                        <<"2-dobavlenie;\n"
                        <<"3-xarakteristiki:\nvar=";
                cin>>var;
                switch(var)
                {
                case 1:
                                cout<<"n=";cin>>n;
                                st=(pacient*)malloc(n*sizeof(pacient));
                for(i=0;i<=n-1;i++)
                {
                                cout<<"FIO=";cin>>((st+i)->FIO);
                                cout<<"nomer_telefona="cin>>((st+i)->nomer_telefona);
                                cout<<"adres="cin>>(st+i)->adres);
                                cout<<"nomer_medkarti="cin>>(st+i)->nomer_medkarti);
                                cout<<"gruppa_krovi="cin>>(st+i)->gruppa_krovi);
                                cout<<"diaznoz="cin>>(st+)->diagnoz);
                }
                if((pf=fopen("my_f.dat","w"))==NULL)
                {               
                                printf("fail no open\n");break;
                }
                fwrite(st,sizeof(pacient),n,pf);
                fclose(pf);
                free(st);
                break;
                
                case 2:
                                cout<<"n=";cin>>n;
                                st=(pacient*)malloc(n*sizeof(pacient));
                for(i=0;i<=n-1;i++)
                {
                                cout<<"FIO=";cin>>((st+i)->FIO);
                                cout<<"nomer_telefona="cin>>((st+i)->nomer_telefona);
                                cout<<"adres="cin>>(st+i)->adres);
                                cout<<"nomer_medkarti="cin>>(st+i)->nomer_medkarti);
                                cout<<"gruppa_krovi="cin>>(st+i)->gruppa_krovi);
                                cout<<"diaznoz="cin>>(st+i)->diagnoz);
                }
                if((pf=fopen("my_f.dat","w"))==NULL)
                {
                                printf("fail no open\n");break;
                }
                fwrite(st,sizeof(pacient),n,pf);
                fclose(pf);
                free(st);
                break;
                
                case 3:
                if((pf=fopen("my_f.dat","r"))==NULL)
                {
                                printf("fail no open\n");break;
                }
                fseek(pf,0,SEEK_END);
                cin>>pos;
                fseek(pf,0,SEEK_SET);
                fread(st,sizeof(pacient)*pos-1,1,pf);
                cout<<st[i].name;// ;
0
Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
26.02.2010, 14:05 #11
C
1
2
3
pos// позиция в файле.
std::cout<<st.name
// вывод нужных вам данных [i] - не требуется пусть fread читает только указанную часть данных.
;
Получить список пациентов, родившихся в период с 1940 по 1970г. с одинаковым диагнозом, фамилли которых начинаются на «С»
цикл по всему файлу и потом
C
1
2
if(1940<st[i].year<1970 && st[i].name[0]=='C')
std::cout<<st[i].name;
1
Montana
0 / 0 / 0
Регистрация: 23.02.2010
Сообщений: 14
26.02.2010, 14:15  [ТС] #12
Sekt,
Спасибо вам огромное...очень сильно меня выручили!!!!
0
26.02.2010, 14:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2010, 14:15
Привет! Вот еще темы с ответами:

Ввод данных из файла - C++
Здравствуйте, не откажите пожалуйста в помощи, вот программа: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; #include...

Ввод данных с файла - C++
struct mec { string name; double sum; }; cout &lt;&lt; &quot;Число меценатов с файла: &quot;; int n; ifstream ReadOn; ...

Ввод данных в структуру из файла - C++
Народ, помогите разобраться. В общем есть структура следующего вида: struct Employees { char Surname; char Name; char...

Ввод/вывод данных в/из файла - C++
Ребят, такая проблемка, когда ввожу строки , в файле они отображаются иероглифами(не все, почему то только те строки, у которых длинна 3...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.