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

Вроде бы банальный поиск по файлу, но - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Добавление строки в программу Hello World http://www.cyberforum.ru/cpp-beginners/thread972335.html
Помогите пожалуйста справиться с дополнительным заданием к известной программе "Hello world!", вроди бы и легко, но пытались добавлять строки и ничего не вышло(скорее всего из-за неправильного использования функции _getch). Как правильно, объясните начинающим! Задание 1. Добавьте к программе Hello World вывод ещё одной строки. Строка обязательно должна быть на английском языке (русский мы...
C++ Как узнать размер директории со всем ее содержимым? Добрый вечер. Подскажите, пожалуйста, как узнать размер директории(папки) со всеми вложенными директориями и файлами? Нашел такой код, но он не правильно считает размер(размер меньше чем должен быть): #include <iostream> #include <string> #include <boost/filesystem.hpp> #include <boost/filesystem/operations.hpp> #include <boost/algorithm/string.hpp> #include <stdio.h> http://www.cyberforum.ru/cpp-beginners/thread972331.html
C++ Не сложная задача на матрицу и еще
1)Составить элементы столбцов заданной матрицы размером 4 × 3. Результат получить в одномерном массиве размером 3. Мне на C++ пожалуйста.
Дано натуральное число n. Вычислить (1+1/1^2)+(1+1/2^2).(1+1/n^2) C++
Буду премного благодарен если напишите вместе с комментариями, я путаюсь в for :cry:
C++ Составить программу для вычисления значения функции y = f(x) http://www.cyberforum.ru/cpp-beginners/thread972325.html
для вычисления значения функции y = f(x) в зависимости от введенного с клавиатуры произвольного значения x.
C++ Составить программу. C++ Буду благодарен Действия над одномерными массивами Заменить отрицательные элементы нулями. Пишу в борланде 5.02 подробнее

Показать сообщение отдельно
Grizzz
4 / 4 / 3
Регистрация: 04.11.2012
Сообщений: 48
08.10.2013, 21:59  [ТС]     Вроде бы банальный поиск по файлу, но
Croessmah, да не разобрался
rrrFer, торопился "поиск не работал" в том смысле что прога просто вылетает после ввода нужных ФИО ,
после исправлений получаеться так что программа при вводе сущ. ФИО выдает сообщение что ее не в базе
код полной программы
Кликните здесь для просмотра всего текста
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#include <iostream>
#include <string>
#include <fstream>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
 
using namespace std;
struct lol
{
    char FIO[50];
    char diz[30];
    int  vozr;
    char pol;
} zp;
 
void input(FILE *);
void show ();
void dop  (char* n);
void search(char* n);
void statusp ();
FILE *f;
 
int main ()
{   
    system("chcp 1251");
    char c;
    int n;
    char str[50],ctr[50];
    c=' ';
    while (c!='0')
    {
        system("cls");
        cout<<"1-Создание \n";
        cout<<"2-Показать \n";
        cout<<"3-Добавить информацию\n";
        cout<<"4-Поиск \n";
        cout<<"5-Статус пациентов \n";
        cout<<"0-exit";
        c=getch();
        switch (c)
        { 
            case '1':system("cls");input(f);break;
            case '2':system("cls");show();break;
            case '3':system("cls");cout<<"Введите фамилию больного"<<endl; scanf("%c",ctr); dop(ctr);break;
            case '4':system("cls");cout<<"Введите фамилию больного"<<endl; cin>>str;search(str);break;
            case '5':system("cls"); statusp(); break;
            case '0' : return 0;
            default : cout<<" error ";return 0;
        }
    }
    system("pause");
}
 
void input (FILE *f)
{
    ifstream F;
    lol zp;
    char filename[30];
    f = fopen("base.dat","wb");
 
    printf("\nВведите имя файла с данными\n");
    scanf("%s", filename);
    F.open (filename, ios::in);
    if(!F.is_open())
    { 
        cout<<"can't open this file\n";
    }
    while (true)
    {
        F >> zp.FIO;
        if (!F) break;
        F >> zp.diz;
        F >> zp.vozr;
        F >> zp.pol;
        fwrite(&zp, sizeof(zp), 1, f);
    }
    fclose(f);
    F.close();
}
 
void show ()
{
    int i;
    f=fopen("base.dat","rb");
    i=1;
    printf("\n   ---------------------------------------\n");
    printf("   |    ФИО    |   Диагноз    |Пол|Возраст|\n");
    printf("   ------------+--------------+---+-------\n");
    
    while (fread(&zp, sizeof(zp), 1, f))// в цикле считываем данные 
        {
         printf("%3d %3s    %4s      %c    %3d", i, zp.FIO, zp.diz, zp.pol, zp.vozr);
         printf("\n   ---------------------------------------\n");//выводим их на экран
         i++;
        }
    fclose(f);
    getch();
}
 
void dop (char* n)
{  
int i,m;
i=0;
m=0;
lol z[10000];
lol tmp,tmp1,p1;
 f=fopen("base.dat","rb+");// открываем файл 
while (fread(&zp, sizeof(zp),1,f) && m!=0)
    {
    char* r =zp.FIO;
    if (strcmp(n,r)==0) m=i;
    z[i]=zp;
    i++;
    } //  информация переписывается в массив структур
if (m==0) { cout<<"Пациента с такими ФИО нет в базе"; getch();}
printf("\n Введите информацию о пациенте \n");
printf("\n ФИО: ");cin>>p1.FIO;
printf("Диагноз: ");cin>>p1.diz;
printf("Пол: ");cin>>p1.pol;
printf ("Возраст: ");cin>>p1.vozr;
tmp=p1;// вводиться информация для добавления
i++;
for (int j=m+1;j<i;j++)
    {
    tmp1=z[j];
    z[j]=tmp;
    tmp=tmp1;
    }// вставка информации
f=fopen("base.dat","wb");// переписывание файла
for (int j=0;j<i;j++)
    {
        fwrite(&z[j],sizeof(lol),1,f);
    }
fclose(f);// закрытие файла 
getch();
}
 
void search (char* k)
{
f=fopen("base.dat","rb");
int m=0,i=0;
while (!feof(f) && m!=0)
{
    fread(&zp, sizeof(zp),1,f);
    char* h =zp.FIO;
    if (strcmp(k,h)==0)
    {
      m=i;
      printf(" %s    %s   %s    %3d",zp.FIO,zp.diz,zp.pol,zp.vozr);
      printf("\n--------------------------------------------------\n");
    }
    i++;
}
if (m==0){cout<<"Пациента с такими ФИО нет в базе";}
fclose(f);
getch();
}
 
void statusp()
{
    int d=0,r=0,p=0;
    double d1,r1,p1;
    f=fopen("base.dat","rb");
    fseek(f,0,SEEK_END);
    int size=0;
    size=ftell(f);
    size=size/sizeof(zp);// узнаем количество структур в файле
    fseek(f,0,SEEK_SET);// перемещаем указатель в начало файла 
    while (fread(&zp, sizeof(zp),1,f))// в цикле вычисляем нужную информацию
    {
        if (zp.vozr<18) d++;
        else 
        { 
            if ((zp.vozr>=18) && (((zp.vozr<=55) && ((zp.pol='ж')||(zp.pol='Ж')))||((zp.vozr<=60)&&((zp.pol='м')||(zp.pol='М'))))) r++; 
                else p++;
        }
    }
   d1= (double) d/size;
   r1=(double) r/size;
   p1=(double) p/size;
   cout<<"Среди пациентов: \n";
   cout.precision(3);
   cout<<"Детей: "<<d1*100<<" % \n";
   cout<<"Рабочий класс: "<<r1*100<<" % \n";
   cout<<"Пенсионеров: "<<p1*100<<" % \n";
   fclose(f);
   getch();
}
Вложения
Тип файла: txt d.txt (419 байт, 3 просмотров)
 
Текущее время: 11:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru