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

Ввести массив структур (реализовать меню) - C++

Восстановить пароль Регистрация
 
Vonka
 Аватар для Vonka
1 / 1 / 0
Регистрация: 13.09.2013
Сообщений: 90
16.12.2013, 04:32     Ввести массив структур (реализовать меню) #1
Нужно переделать данный ниже пример под задание, помогите пожалуйста:
Структура «Человек»: фамилия, имя, отчество; домашний адрес; номер телефона; возраст.
Задание
Ввести массив структур. Рассортировать массив в алфавитном порядке по первому полю, входящему в структуру. В программе реализовать меню:
1) Ввод массива структур;
2) Сортировка массива структур;
3) Поиск в массиве структур по заданному параметру;
4) Изменение заданной структуры;
5) Удаление структуры из массива;
6) Вывод на экран массива структур;
7) Выход.
Образец
Задание примера
Определить структурированный тип, набор функций (в виде меню) для работы с массивом структур. Структура «Склад»: наименование, единица измерения, цена единицы, количество, дата последнего прихода/расхода, тип накладной (приход или отгрузка).
В перечень обязательных функций входят:
- ввод элементов (полей) структуры с клавиатуры;
- вывод элементов (полей) структуры;
- поиск в массиве структуры с заданным значением поля;
- удаление заданного элемента;
- изменение (редактирование) заданного элемента.
Интерфейс пользователя осуществить в виде командного процессора:
1 - загрузить данные
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
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
208
209
210
211
212
213
214
215
216
#include <iostream>                   
#include <stdio.h>                      
#include <string.h>
#include <windows.h>
using namespace std;
 
struct sklad  //объявляем шаблон структуры
{char name[30];    // фамилия, имя, отчество
 char ed[5];         // домашний адрес 
 float cena;         // номер телефона
 int kol;            // возраст
 int date;           //Дата последнего завоза
 int type;           //тип накладной (приход или отгрузка)
};
 
struct sklad mas[30]; //объвляем глобальный массив структур
struct sklad tmp; //объявляем временую переменную структурного типа
int sch=0;        //Счетчик полных записей
int er;            //Переключатель
 
void enter_new();
int menu();
void out();
void del(); 
void change();
void find();
 
int main()
{
    setlocale(LC_ALL,"Russian");
    while(1)
    {   switch(menu())
        {  case 1:del();break;
               case 2:enter_new();break;
               case 3:change();break;
               case 4:out();break;
               case 5:find();break;
               case 6: return 0;
               default: cout<<"Не верный выбор/n";
        }
     }
}
 
void enter_new()                         // ф-ция ввода новой структуры
{ 
    if(sch<30) //вводим новую запись только, если счетчик полных записей меньше максимального количества записей
    {
        cout<<"Запись номер"<<sch+1; //выводим номер записи
        cout<<"\nВыберите тип накладной (1 - приход, 2 - отгрузка)\n";
        cin>>mas[sch].type;
        cout<<"\nВведите наименование\n";
        cin>>mas[sch].name;
        cout<<"Введите ед.измерения \n";
        cin>>mas[sch].ed;
        cout<<"Введите цену\n";
        cin>>mas[sch].cena;
        cout<<"Введите кол-во\n";
        cin>>mas[sch].kol;
        cout<<"Введите дату последнего поступления\n";
        cin>>mas[sch].date;
        sch++; //увеличиваем счетчик полных записей на единицу
    }
    else cout<<"Введено максимальное кол-во записей";
}
 
 
int menu()
{
    int er;
    cout<<"Введите:\n";
    cout<<"1-для удаления записи\n";
    cout<<"2-для ввода новой записи\n";
    cout<<"3-для изменения записи\n";
    cout<<"4-для вывода записи(ей)\n";
    cout<<"5-для поиска \n";
    cout<<"6-для выхода\n";
    cin>>er;
    return er;
}
 
void out()    //ф-ция вывода записей
{
   int sw;   // переключатель для выбора выводить все записи или одну
   int k;    //номер структуры, кот. надо вывести
   if (sch==0) //если счетсик количества структур равен 0, то выводим, что нет записей
      cout<<"\nНет запичей: \n";
   else
   {
   cout<<"\nВведите: \n";
   cout<<"1-если хотите вывести какую-либо запсь\n";
   cout<<"2-если хотите вывести все записи\n";
   cin>>sw;
   if(sw==1)
   {
       cout<<"Введите номер записи, которую нужно вывести\n";
       cin>>k;
       cout<<endl;
       if (mas[k-1].type==1)
        cout<<"Приход"<<endl;
       else
        cout<<"Отгрузка"<<endl;
       cout<<"Наименование:"<<mas[k-1].name<<endl;
       cout<<"Ед.измер.:"<<mas[k-1].ed<<endl;
       cout<<"Цена:"<<mas[k-1].cena<<endl;
       cout<<"Кол-во:"<<mas[k-1].kol<<endl;
       cout<<"Дата:"<<mas[k-1].date<<endl;
       cout<<"____________"<<endl;
 
   }
   if(sw==2)
   {  for(int i=0;i<sch;i++) //выводим в цикле все записи
      {if (mas[i].type==1)
        cout<<"Приход"<<endl;
       else
        cout<<"Отгрузка"<<endl;
        cout<<"Наименование:"<<mas[i].name<<endl;//выводим на экран значение name i-ой структуры из массива структур mas
        cout<<"Ед.измер.:"<<mas[i].ed<<endl;
        cout<<"Цена:"<<mas[i].cena<<endl;
        cout<<"Кол-во:"<<mas[i].kol<<endl;
        cout<<"Дата:"<<mas[i].date<<endl;
        cout<<"____________"<<endl;
      }
   }
   }
}
 
void del()        //ф-ция удаления записи
{   int d;        //номер записи, которую нужно удалить
    cout<<"\nВведите номер записи, которую необходимо удалить\n";
    cout<<"Если необходимо удалить все записи,нажмите '99'\n";
    cin>>d;
    if (d!=99)
    { for (int i=(d-1);i<sch;i++) //цикл для удаления заданной записи, начинаем цикл с удаляемой записи
          mas[i]=mas[i+1]; //замещаем текущую запись следующей за ней
      sch=sch-1; //уменяьшаем счетчик полных записей на 1
    }
    if (d==99)
    {    for(int i=0;i<30;i++)//цикл по все записям от первой до 30-ой
           mas[i]=tmp; //замещаем каждую структуру в массиве пустой структурой
        sch=0; //счетчик структур обнуляем, т.к. все записи удалены
    }
}
 
void change() //функция для изменения записи
{   int c;                                              //номер записи, которую нужно изменить
    int per;
    cout<<"\nВведите номер записи\n";
    cin>> c;
    do
   {cout<<"Введите: \n";
    cout<<"1-для изменения типа накладной\n";
    cout<<"2-для изменения наименования\n";
    cout<<"3-для изменения ед.измерения\n";
    cout<<"4-для изменения цены\n";
    cout<<"5-для изменения количества\n";
    cout<<"6-для изменения даты\n";
    cout<<"7-для прекращения\n";
    cin>>per;
    switch (per)
    {   case 1: cout<<"\nВведите новый тип накладной (1 - приход, 2 - отгрузка)\n";
        cin>>mas[c-1].type;
        break;
        case 2: 
        cout<<"\nВведите новое наименование\n";
        cin>>mas[c-1].name;
        break;
        case 3:
        cout<<"Введите новые ед.измерения \n";
        cin>>mas[c-1].ed;
        break;
        case 4:
        cout<<"Введите новую цену\n";
        cin>>mas[c-1].cena;
        break;
        case 5:
        cout<<"Введите новое кол-во\n";
        cin>>mas[c-1].kol;
        break;
        case 6:
        cout<<"Введите новую дату последнего поступления\n";
        cin>>mas[c-1].date;
        break;
        case 7: return;
    }
 
    }while(1);
 
}
 
void find()   //ф-ция поиска записей
{
   int sw;     // переключатель
   if (sch==0)
      cout<<"\nНет запичей: \n";
   else
   {
   cout<<"\nВведите: \n";
   cout<<"1-все накладные прихода\n";
   cout<<"2-все накладные отгрузки\n";
   cin>>sw;
   for(int i=0;i<sch;i++) //в цикле просматриваем все структуры из массива структур
    if (mas[i].type==sw) 
    {
       if (mas[i].type==1)
        cout<<"Приход"<<endl;
       else
        cout<<"Отгрузка"<<endl;
        cout<<"Наименование:"<<mas[i].name<<endl;
        cout<<"Ед.измер.:"<<mas[i].ed<<endl;
        cout<<"Цена:"<<mas[i].cena<<endl;
        cout<<"Кол-во:"<<mas[i].kol<<endl;
        cout<<"Дата:"<<mas[i].date<<endl;
        cout<<"____________"<<endl;
    }   
   }
}


Добавлено через 21 час 18 минут
В чем здесь ошибка? Помогите пожалуйста.
Код
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
208
209
210
211
212
213
214
215
216
217
218
#include <iostream>
#include <cstring>
#include <windows.h>
#include <fstream>
#include <iomanip>
#include <cstdlib>
#include <cstring>
 
 
using namespace std;
 
char* Rus(const char* text);
 
char way[80];
char *file;
double x;
int p;
 
struct student
{
        char fio[50];
        char adr[50];
        int nom;
        double rat;
        void input();
};
 
void tabl()
{
        int z;
    for (z=0; z<80; z++)
    cout<<'-';
}
 
void print(student *s, int n)
{
            int i;
                tabl();
                cout.setf(ios::left);
                cout<<'|'<<' '<<setw(22)<<Rus("ФИО");
                cout<<'|'<<' '<<setw(34)<<Rus("Домашний адрес");
                cout<<'|'<<' '<<setw(7)<<Rus("Номер телефона");
                cout<<'|'<<' '<<setw(8)<<Rus("Возраст");
                cout<<'|';
                tabl();
                for (i=0; i<n; i++)
                {
                        cout.setf(ios::left);
                cout<<'|'<<' '<<setw(22)<<s[i].fio<<'|';
                    cout<<' '<<setw(34)<<s[i].adr<<'|';
                    cout<<' '<<setw(7)<<s[i].nom<<'|';
                    cout<<' '<<setw(8)<<s[i].rat;
                        cout<<'|';
                        tabl();
                }
}
 
void student::input()
{       
    cout<<Rus("Введите фамилию, имя, отчество человека -> ");
                cin.clear();
                _flushall();
                cin.getline(fio, 79);
                cout<<Rus("Введите домашний адрес -> ");
                cin.clear();
                _flushall();
                cin.getline(adr, 79);
                cout<<Rus("Введите номер телефона -> ");
                cin>>nom;
                cout<<Rus("Введите возраст -> ");
                cin>>rat;
}       
 
int main()
{
        student *s;
        int n, i, o=-1;
        for (; o ;)
        {
        cout<<Rus("1.Ввод с клавиатуры в консольном режиме\n2.Вывод на экран в консольном режиме\n3.Создать файл и записать в него структурированные данные\n");
        cout<<Rus("4.Вывести созданный файл на экран\n5.Удалить всех людей с заданным возрастом\n");
        cout<<Rus("6.Добавить элемент после заданного номера\n7.Выход\n");
        cout<<Rus("\nВыберите нужный вам пункт -> ");
        cin>>o;
        cout<<"\n";
        if(o==1)
        {
                cout<<Rus("Введите количество человек -> ");
                cin>>n;
            s=new student[n];
            for (i=0; i<n; i++)
                {
                        s[i].input();
                }
        }
        if(o==2)
        {
                cout<<Rus("\nВведенные данные:\n");
                print(s, n);
        }
        if(o==3)
        {
                cout<<Rus("Введите путь к файлу или название файла для записи в него данных -> \n");
                cin.clear();
                _flushall();
                cin.getline(way,80);
                ofstream output(way , ios::out | ios::trunc);
                output.setf(ios::left);
                if (!output.is_open())
                {
                        cout<<Rus("/nОшибка!\n");
                        return 0;
                }
                for (i=0;i<n;i++)
                {
                        output.setf(ios::left);
                        output<<setw(22)<<s[i].fio;
                    output<<setw(34)<<s[i].adr;
                    output<<setw(7)<<s[i].nom;
                    output<<setw(8)<<s[i].rat<<"\n";
                }
                output.close();
        }
        if(o==4)
        {
        cout<<Rus("Введите путь к файлу или название файла для чтения из него данных -> \n");
        cin.clear();
        _flushall();
        cin.getline(way,80);
        ifstream input(way, ios::in);
        const int buffer = 4096; 
        file=new char[buffer];
        if (!input.is_open())
        {
                cout<<Rus("Ошибка\n");
                return 0;
        }
        cout<<Rus("\nПрочитанные данные из файла:\n");
        tabl();
        while(input.peek()!=EOF)
        {
                input.getline(file, buffer);
                cout<<file<<"\n";
        }
        tabl();
        input.close();
        }
        if(o==5)
        {
                cout<<Rus("Введите путь к файлу или название файла для чтения из него данных\n");
                cin.clear();
                _flushall();
                cin.getline(way,80);
                ofstream output(way , ios::out | ios::trunc);
                if (!output.is_open())
                {
                        cout<<Rus("Ошибка\n");
                        return 0;
                }
                cout<<Rus("Удалить из файла людей с возрастом -> ");
                cin>>x;
                for (i=0; i<n; i++)
                {
                        if (x != s[i].rat)
                        {
                                output.setf(ios::left);
                                output<<setw(22)<<s[i].fio;
                                output<<setw(34)<<s[i].adr;
                                output<<setw(7)<<s[i].nom;
                                output<<setw(8)<<s[i].rat;
                                output.put(13);
                                output.put(10);
                        }
                }
        }
        if (o==6)
        {
                cout<<Rus("Введите путь к файлу или название файла для чтения из него данных\n");
                cin.clear();
                _flushall();
                cin.getline(way,80);
                ofstream output(way, ios::app);
                if (!output.is_open())
                {
                        cout<<Rus("Ошибка\n");
                        return 0;
                }
                cout<<Rus("Введите номер элемента, после которого следует добавить -> ");
                cin>>p;
                p=+1;
                student *r;
                r=new student[n];
                cout<<Rus("Введите фамилию, имя, отчество человека -> ");
                cin.clear();
                _flushall();
                cin.getline(r[p].fio, 79);
                cout<<Rus("Введите домашний адрес -> ");
                cin.clear();
                _flushall();
                cin.getline(r[p].adr, 79);
                cout<<Rus("Введите номер телефона -> ");
                cin>>r[p].nom;
                cout<<Rus("Введите возраст -> ");
                cin>>r[p].rat;
                output.seekp(p * sizeof(s[0]), ios::beg);
                output.setf(ios::left);
                                output<<setw(22)<<r[p].fio;
                                output<<setw(34)<<r[p].adr;
                                output<<setw(7)<<r[p].nom;
                                output<<setw(8)<<r[p].rat;
                delete []r;
        }
        if(o==7)
                return 0;
        }
        delete[]s;
        };
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2013, 04:32     Ввести массив структур (реализовать меню)
Посмотрите здесь:

C++ Как ввести данные в динамический массив структур?
C++ Реализовать один из вариантов динамических структур
Калькулятор. Ввести возможность определения и использования структур (записей) C++
Массив структур, сохранение начала каждой из структур C++
Ввести несколько структур типа «Зачетка студента» C++
Ввести массив структур; рассортировать массив в алфавитном порядке C++
C++ Блочная сортировка структур (Отсортировать массив структур по фамилии)
Ввести несколько структур типа «Зачетка студента» с полями. Скомпилировать код C++

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

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

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