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

Структурированные файлы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
jUvkeE
0 / 0 / 0
Регистрация: 08.11.2010
Сообщений: 26
07.03.2011, 18:26     Структурированные файлы #1
Как сделать,чтобы во всех полях которые у меня объявлены как int в самих функциях при вводе букв она у меня обратно возвращала в меню и программа не подвисала,и я мог заново один из пунктов меню.
Сколько не пробывал все время программа возвращает в меню,но там я ничего выбрать уже не могу.
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
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
#include<iostream>
#include <fstream>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <iomanip>
#include <dos.h>
#include <io.h>
 
using namespace std;
FILE *fl;
struct noutbook
{ int KOD;
  char FIR[10];
  char MOD[10];
  int KOL;
  int ST;
  int GAR;
};
noutbook a[30];
int str=0;
char name[20];
 
int menu();  //Меню
void newf();  //Создание и запись в файл  
void openf();  //Открыть файл
void resc();  //Вывести результат на экран
void resf();  //Вывести результат в файл
void udalenie();
void poiskst();
 
 
int main()
{
    while(true)
{
    switch(menu())
    {
                  case 1:newf(); break;
                  case 2:openf(); break;
                  case 3:resc(); break;
                  case 4:resf(); break;
                  case 5:udalenie();break;
                  case 6:poiskst();break;
                  case 7:return 0;
                  default: "Не выбрана функция";
    }
cout<<endl;
puts("Для продолжения нажмите любую клавишу");
getch();
system("cls");      
}
}
int menu()
{
    cout<<"МЕНЮ:"<<endl;  
    cout<<"1.Создание файла и ввод данных в файл"<<endl;  
    cout<<"2.Считывание данных с файла на экран"<<endl;  
    cout<<"3.Поиск по модели"<<endl;  
    cout<<"4.Вывести результат в файл"<<endl;  
    cout<<"5.Удаление"<<endl; 
    cout<<"6.Стоимость товаров более введенной стоимости"<<endl; 
    cout<<"7.Выход из программы"<<endl;  
    int i;
    cin>>i;
    return i;
    
}
 
void newf() //Создание файла и ввод данных в файл
{
 cout<<"Введите имя файла"<<endl; 
 cin>>name;
     if ((fl=fopen(name,"wb"))==NULL)
     {
     cout<<"Ошибка при создании файла"<<endl;
     getch();
     }
  cout<<"Введите число ноутбуков:  ";  
  cin>>str;
  system("cls");
  for (int i=0;i<str;i++)
  {
      cout<<i+1<<".";
      cout<<"Введите код товара:  ";
      cin>>a[i].KOD; 
      cout<<"Введите фирму ноутбука:  ";
      cin>>a[i].FIR; 
      cout<<"Введите модель ноутбука:  ";
      cin>>a[i].MOD; 
      cout<<"Введите стоимость одного ноутбука:  ";
      cin>>a[i].ST; 
      cout<<"Введите количество ноутбуков:  ";
      cin>>a[i].KOL;
      cout<<"Введите продолжительность гарантии:  ";
      cin>>a[i].GAR;  
      cout<<endl;
      fprintf(fl,"%i    %s    %s    %i    %i    %i",a[i].KOD,a[i].FIR,a[i].MOD,a[i].ST,a[i].KOL,a[i].GAR);
      fprintf(fl,"\n");
  }
  cout<<"Файлы успешно записаны в файл  "<<name<<endl;;
  fclose(fl);
}
 
void openf() //Открыть файл для считывания
{
     system("cls");
     if ((fl=fopen(name,"rb"))==NULL)
     {
     cout<<"Ошибка при открытии файла"<<endl;
     getch();
     }
     else
     {
     cout<<setw(5)<<"_________________________________________________________________________"<<endl;
     cout<<setw(5)<<"| КОД ТОВАРА"<<" | "<<"ФИРМА"<<" | "<<"МОДЕЛЬ"<<" | "<<"СТОИМОСТЬ(у.е.)"<<" | "<<"КОЛ-ВО"<<" | "<<"ГАРАНТИЯ(мес.)|"<<endl;  
     cout<<setw(5)<<"|____________|_______|________|_________________|________|_______________|"<<endl;  
     for (int i=0;i<str;i++)
     {    
     fgets(name,50,fl); 
     cout<<"| "<<setw(7)<<a[i].KOD<<"    | "<<setw(4)<<a[i].FIR<<"  |"<<setw(6)<<a[i].MOD<<"  |"<<setw(11)<<a[i].ST<<"      |"<<setw(5)<<a[i].KOL<<"   |"<<setw(7)<<a[i].GAR<<"        |"<< endl;
     cout<<setw(5)<<"|____________|_______|________|_________________|________|_______________|"<<endl;  
      }}
      fclose(fl);
}
 
void resc() //Вывести результат на экран
{
     int i;
     char MOD[10];
      system("cls");
     cout<<"Введите модель ноутбука:";
     cin>>MOD;
     cout<<setw(5)<<"_________________________________________________________________________"<<endl;
     cout<<setw(5)<<"| КОД ТОВАРА"<<" | "<<"ФИРМА"<<" | "<<"МОДЕЛЬ"<<" | "<<"СТОИМОСТЬ(у.е.)"<<" | "<<"КОЛ-ВО"<<" | "<<"ГАРАНТИЯ(мес.)|"<<endl;  
     cout<<setw(5)<<"|____________|_______|________|_________________|________|_______________|"<<endl;  
     for (int i=0;i<str;i++)
     {if (!strcmp(a[i].MOD,MOD))
     { 
      cout<<"| "<<setw(7)<<a[i].KOD<<"    | "<<setw(4)<<a[i].FIR<<"  |"<<setw(6)<<a[i].MOD<<"  |"<<setw(11)<<a[i].ST<<"      |"<<setw(5)<<a[i].KOL<<"   |"<<setw(7)<<a[i].GAR<<"        |"<< endl;
      cout<<setw(5)<<"|____________|_______|________|_________________|________|_______________|"<<endl;  
     }}
}
 
 
 
 
 
void resf() //Вывести результат в файл
{
     system("cls");
     char namet[30];
     FILE *ft;
     cout<<"Введит имя файла"<<endl;
     cin>>namet;
     if ((ft=fopen(namet,"wb"))==NULL)
     {
      cout<<"Ошибка при создании файла"<<endl;      
      getch();
      }
      char s[80];
      for (int i=0;i<str;i++)
      if (a[i].KOD==2353)
      {
                           strcpy(s,a[i].FIR);
                           strcpy(s,a[i].MOD);
                           strcat(s,"\n");
                           fputs(s,ft);
      }
                           fclose(ft);
}    
void udalenie()
{
    system("cls");
    int i,c;
    cout<<"Введите строку которую хотите удалить: "<<endl;
    cin>>a[i].KOD;
    if (a[i].KOD>str) cout<<"Данная строка в БД отсутствует."<<endl;
    else
    {
        cout<<i<<".  "<<a[i-1].KOD<<a[i-1].FIR<<" "<<a[i-1].MOD<<" "<<a[i-1].KOL<<" "<<a[i-1].ST<<" "<<a[i-1].GAR<<endl;
        for (i=i;i<=str;i++)
        {
            a[i-1] = a[i];
        }
        cout<<endl<<"Stroka "<<c<<" udalena."<<endl;
        str=str-1;
    }
    return;
}          
void poiskst()         
{
     int ST;
      system("cls");
      cout<<"Стоимость товара не менее:  ";
      cin>>ST;
     cout<<setw(5)<<"_________________________________________________________________________"<<endl;
     cout<<setw(5)<<"| КОД ТОВАРА"<<" | "<<"ФИРМА"<<" | "<<"МОДЕЛЬ"<<" | "<<"СТОИМОСТЬ(у.е.)"<<" | "<<"КОЛ-ВО"<<" | "<<"ГАРАНТИЯ(мес.)|"<<endl;  
     cout<<setw(5)<<"|____________|_______|________|_________________|________|_______________|"<<endl;  
     for (int i=0;i<str;i++)
     {if (a[i].ST>ST)
     { 
      cout<<"| "<<setw(7)<<a[i].KOD<<"    | "<<setw(4)<<a[i].FIR<<"  |"<<setw(6)<<a[i].MOD<<"  |"<<setw(11)<<a[i].ST<<"      |"<<setw(5)<<a[i].KOL<<"   |"<<setw(7)<<a[i].GAR<<"        |"<< endl;
      cout<<setw(5)<<"|____________|_______|________|_________________|________|_______________|"<<endl;  
     }}
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-MefistofeL-
 Аватар для -MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
07.03.2011, 18:36     Структурированные файлы #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
int main()
{
    while(true)
{
    switch(menu())
    {
                  case 1:newf(); break;
                  case 2:openf(); break;
                  case 3:resc(); break;
                  case 4:resf(); break;
                  case 5:udalenie();break;
                  case 6:poiskst();break;
                  case 7:return 0;
                  default: "Не выбрана функция";
    }
cout<<endl;
puts("Для продолжения нажмите любую клавишу");
system("cls");      
}
}
 
int menu()
{
    cout<<"МЕНЮ:"<<endl;  
    cout<<"1.Создание файла и ввод данных в файл"<<endl;  
    cout<<"2.Считывание данных с файла на экран"<<endl;  
    cout<<"3.Поиск по модели"<<endl;  
    cout<<"4.Вывести результат в файл"<<endl;  
    cout<<"5.Удаление"<<endl; 
    cout<<"6.Стоимость товаров более введенной стоимости"<<endl; 
    cout<<"7.Выход из программы"<<endl;  
    int i;
    i = int(getch())-int('0');
    return i;
    
}
jUvkeE
0 / 0 / 0
Регистрация: 08.11.2010
Сообщений: 26
07.03.2011, 19:11  [ТС]     Структурированные файлы #3
не не проходит.
все равно подвисает.


ps мне надо чтобы при вводе в поля KOD,KOL,ST,GAR букв программа обратно возвращалась в меню и я мог работать с файлом дальше.
-MefistofeL-
 Аватар для -MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
07.03.2011, 19:20     Структурированные файлы #4
а на каком месте подвисает? после выполнения каждой процедуры? когда меню повторно выведено? или до вывода меню?
jUvkeE
0 / 0 / 0
Регистрация: 08.11.2010
Сообщений: 26
07.03.2011, 20:37  [ТС]     Структурированные файлы #5
1.запускаю программу.меню работает.
2.выбираю допустим пункт Создание файла.>>Вызывается функция создания файла
3.Там где мне надо ввести допустим код_товара,гарантия,количество или стоимость если введу буквы в каком либо из этих полей,то программа должна вернуться обратно в меню(т.к. там допустимы только числа),и я мог заново работать с ним(как и при запуске).

Сейчас если я буду вводить вместо цифр буквы,то программа выходит в меню,но меню не работает(не вызывает функций никаких).
-MefistofeL-
 Аватар для -MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
07.03.2011, 20:45     Структурированные файлы #6
то есть, если ты введешь цифры, то прога будет работать нормально?
jUvkeE
0 / 0 / 0
Регистрация: 08.11.2010
Сообщений: 26
07.03.2011, 23:23  [ТС]     Структурированные файлы #7
да,если я буду вводить цифры в полях с типом данных int,то функция выполняется далее,а если ввести в эти же поля буквы или символы,то программа вернется в меню(только чтобы оно не подвисало,как у меня выходит и я ничего не мог сделать,а чтобы меню работало,т.е. я мог вызывать функции как и при первом запуске.)

Я не знаю конечно,мб. есть команды которые в операторе IF могли бы проверить является ли данное число цифрой,либо каким либо символом(буквой).
-MefistofeL-
 Аватар для -MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
07.03.2011, 23:46     Структурированные файлы #8
аа... ну естественно. Ввод данных не того типа убивает поток инпут. принимай посимвольно и обрабатывай, чтобы не вы инпут не ложился
jUvkeE
0 / 0 / 0
Регистрация: 08.11.2010
Сообщений: 26
08.03.2011, 22:12  [ТС]     Структурированные файлы #9
а как я смогу посимвольно проверить число которое которое integer при условии что я его ввожу не по отдельности а целиком сразу.Разве так возможно проверить??


кстати возник еще один вопрос.
В функции void_udalenie() как мне сделать так, чтобы я мог удалить данные по полю KOD товара???(т.е. я введу KOD товара который есть в моем файле,и он удалил эту строку.)
-MefistofeL-
 Аватар для -MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
08.03.2011, 22:27     Структурированные файлы #10
Цитата Сообщение от jUvkeE Посмотреть сообщение
а как я смогу посимвольно проверить число которое которое integer при условии что я его ввожу не по отдельности а целиком сразу.Разве так возможно проверить??
посимвольно принимаешь, если цифра - то прибавляешь к числу и выводишь, если не цифра - пропускаешь и не выводишь. Примерно так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int safetyReadInt()
{
     char c = 0;
     int a = 0;
     while (c != (char) 13)
     {
          c = getch();
          if ((int) c > (int) '0' && (int) c < (int) '9' )
          {
               if ( (c != 0) || ( (c ==0) && (a != 0) ) )
               {
                    a = a*10 + (int)c - (int)'0';
                    cout<<c;
               }
          }
     }
}
не проверял, отлаживай сам)
sfinexer
-7 / 7 / 2
Регистрация: 22.01.2011
Сообщений: 137
08.03.2011, 23:45     Структурированные файлы #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
      cout<<i+1<<".";
      cout<<"Введите код товара:  ";
      cin>>a[i].KOD; 
      cout<<"Введите фирму ноутбука:  ";
      cin>>a[i].FIR; 
      cout<<"Введите модель ноутбука:  ";
      cin>>a[i].MOD; 
      cout<<"Введите стоимость одного ноутбука:  ";
      cin>>a[i].ST; 
      cout<<"Введите количество ноутбуков:  ";
      cin>>a[i].KOL;
      cout<<"Введите продолжительность гарантии:  ";
      cin>>a[i].GAR;  
      cout<<endl;
Так писать нельзя, не каждый компилятор это будет выполнять так как вам хочется.
cout загоняет запись в буфер, а потом когда ему захочется выводит, хотя борланд, и GCC работают с настройками по умолчанию корректно, а вот интеловский уже нет(
в вашем случае надо обязательно скидывать буфер на экран тоесть писать так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
      cout<<i+1<<".";
      cout<<"Введите код товара:  "<<endl;
      cin>>a[i].KOD; 
      cout<<"Введите фирму ноутбука:  "<<endl;
      cin>>a[i].FIR; 
      cout<<"Введите модель ноутбука:  "<<endl;
      cin>>a[i].MOD; 
      cout<<"Введите стоимость одного ноутбука:  "<<endl;
      cin>>a[i].ST; 
      cout<<"Введите количество ноутбуков:  "<<endl;
      cin>>a[i].KOL;
      cout<<"Введите продолжительность гарантии:  "<<endl;
      cin>>a[i].GAR;  
      cout<<endl;
Если лень подписывать можно вместо cout использовать cerr, это не буферизированный вывод на экран.

Правда на он и cerr чтобы если что-то случилось сразу о этом оповестить
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2011, 18:56     Структурированные файлы
Еще ссылки по теме:

Файлы.Текстовые файлы C++
Структурированные типы данных. Массивы С++ C++
Что такое "Структурированные типы данных. Объекты" C++

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

Или воспользуйтесь поиском по форуму:
jUvkeE
0 / 0 / 0
Регистрация: 08.11.2010
Сообщений: 26
10.03.2011, 18:56  [ТС]     Структурированные файлы #12
не знал.очень благодарен за поправку.
Yandex
Объявления
10.03.2011, 18:56     Структурированные файлы
Ответ Создать тему
Опции темы

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