Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 23.02.2010
Сообщений: 14

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

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

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

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

Так же дан образец решения подобной задачи...
В принципе в основном мне нужно разобратся с выборками, т.е. как из файла получить информацию и найти там необходимые записи.
Вложения
Тип файла: doc Задание.doc (25.5 Кб, 35 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.02.2010, 20:16
Ответы с готовыми решениями:

Вывод массива данных с одного листа на другой по заданным критериям (формулами)
Имеем базу данных студентов с заголовками столбцов: Фамилия, Имя, Номер, Адрес, Дата поступления. Нужен вывод строк на новый лист по...

Работа с Microsoft Query, Получение данных по нескольким критериям
Всем Здраствуйте! Это запрос MQ на поставщиков 1 уровня, теперь Я хочу вытащить из этого результата в 1-ом запросе из той же базы данные...

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

11
0 / 0 / 0
Регистрация: 23.02.2010
Сообщений: 14
25.02.2010, 20:06  [ТС]
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
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
26.02.2010, 03:53
регистр не должен меняться
Pacient и pacient - два разных типа

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

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

C++
1
st=(pacient*)malloc(n*sizeof(school));
school не существует
1
0 / 0 / 0
Регистрация: 23.02.2010
Сообщений: 14
26.02.2010, 09:29  [ТС]
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
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
26.02.2010, 09:43
fread
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
0 / 0 / 0
Регистрация: 23.02.2010
Сообщений: 14
26.02.2010, 09:54  [ТС]
Спасибо за инфу, поправил...теперь правильно??
C++
1
2
3
case 3:
pf=fopen("my_f.dat","r");//открытие файла
fread(st,sizeof(pacient),n,pf);//чтение данных из файла
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
26.02.2010, 10:15
синтаксически - да
а логически, если это выборка, нужно по одной записи читать и проверять её на критерий
1
0 / 0 / 0
Регистрация: 23.02.2010
Сообщений: 14
26.02.2010, 12:11  [ТС]
Теперь выборка...т.е. нужно перебрать все элементы массива и найти нужные... как будет правильно ее сделать???
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
159 / 156 / 47
Регистрация: 29.04.2009
Сообщений: 636
26.02.2010, 13:01
Выборка:
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
0 / 0 / 0
Регистрация: 23.02.2010
Сообщений: 14
26.02.2010, 13:44  [ТС]
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
159 / 156 / 47
Регистрация: 29.04.2009
Сообщений: 636
26.02.2010, 14:05
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
0 / 0 / 0
Регистрация: 23.02.2010
Сообщений: 14
26.02.2010, 14:15  [ТС]
Sekt,
Спасибо вам огромное...очень сильно меня выручили!!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.02.2010, 14:15
Помогаю со студенческими работами здесь

Получение данных из таблицы на основе ранее совершенной выборки
Всем привет. В общем систуация такова. СУБД - MySql Работаю с базой через windows-приложение .net. Делается выборка из первой...

Добавление в базу данных выборки из XML
Данная версия программы распечатывает выборку из XML файла: Private Sub Page_Load(ByVal sender As System.Object, ByVal e As...

Реализовать ввод данных из файла, просмотр входных и выходных данных
помогите пожалуйста с вот этой программой создать программный комплекс, реализующий ввод данных из файла, просмотр входных и выходных...

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

Вывод исходных данных из файла, добавление данных в файл
Помогите связать следующую запись с файлами. Следующая задача:Разработать программу записи подготовленных данных во внешний файл, вывод...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru