Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 08.11.2010
Сообщений: 26
1

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

07.03.2011, 18:26. Показов 2651. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как сделать,чтобы во всех полях которые у меня объявлены как 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;  
     }}
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.03.2011, 18:26
Ответы с готовыми решениями:

Структурированные типы данных
Даны две структуры: struct point {int x, y;} p1, p2; struct rect {struct point pt1, pt2;}; и...

Структурированные типы данных. Массивы С++
В двумерном массиве найти суммы S отрицательных элементов каждого столбца. Добавлено через 20...

Создать файл и записать в него структурированные данные
Помогите,пожалуйста, решить задачу: Используя ввод-вывод в стиле С создать файл и записать в него...

Создать файл и записать в него структурированные данные
Кто знает,помогите,пожалуйста, решить задачу: Используя ввод-вывод в стиле С создать файл и...

11
22 / 20 / 5
Регистрация: 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;
    
}
0
0 / 0 / 1
Регистрация: 08.11.2010
Сообщений: 26
07.03.2011, 19:11  [ТС] 3
не не проходит.
все равно подвисает.


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

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

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


кстати возник еще один вопрос.
В функции void_udalenie() как мне сделать так, чтобы я мог удалить данные по полю KOD товара???(т.е. я введу KOD товара который есть в моем файле,и он удалил эту строку.)
0
22 / 20 / 5
Регистрация: 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;
               }
          }
     }
}
не проверял, отлаживай сам)
0
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 201
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 чтобы если что-то случилось сразу о этом оповестить
1
0 / 0 / 1
Регистрация: 08.11.2010
Сообщений: 26
10.03.2011, 18:56  [ТС] 12
не знал.очень благодарен за поправку.
0
10.03.2011, 18:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.03.2011, 18:56
Помогаю со студенческими работами здесь

Структурированные типы данных: смена записей местами
В данной программе создается что-то вроде базы данных в которой записаны ФИО сотрудников, далее кто...

Используя ввод-вывод в стиле С++ создать файл и записать в него структурированные данные
1. Используя ввод-вывод в стиле С++ создать файл и записать в него структурированные данные. ...

Используя ввод-вывод в стиле С создать файл и записать в него структурированные данные
Помогите очень нужна ваша помощь. Cтруктура &quot;Стадион&quot;: - название; - год постройки;...

Что такое "Структурированные типы данных. Объекты"
Что такое? Структурированные типы данных. Объекты. Разобрался.


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru