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

Разработать структуру Сотрудник - C++

Восстановить пароль Регистрация
 
Laicus
1 / 1 / 0
Регистрация: 30.05.2013
Сообщений: 29
20.05.2014, 09:20     Разработать структуру Сотрудник #1
Разработайте структуру, используя объединение: Сотрудник (ФИО, пол, образование, специальность, вуз, должность, стаж). Сотрудник может не иметь высшего образования. Введите информацию о трех сотрудниках и распечатайте в виде таблицы.

Не совсем разбираюсь с памятью компьютера и всей многоуровневой архитектурой, поэтому когда дело доходит до использования указателей и объединения, пиши пропало. И да, не знаю как сделал ровную таблицу, пытался с пробелами, но как-то что-то...
Что есть:
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
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
 
using namespace std;
 
int main()
{
setlocale(LC_ALL, "Russian");
 
union workmanData {
    char fullName[100];
    char sex[20];
    char edu[8];
    char speciality[100];
    char vuz[100];
    char whoareyou[100];
    char howmuchyouwork[3];
};
struct workman
{
    workmanData fullName;
    workmanData sex;
    workmanData edu;
    workmanData speciality;
    workmanData vuz;
    workmanData whoareyou;
    workmanData howmuchyouwork;
};
 
int width[7];
for(int i = 0; i < 7; i++) width[i] = 0;
char no[100] = "нет";
workman *table = new workman[3];
for(int i = 0; i < 3; i++)
    {
        cout << "Введите ФИО: ";
        cin.getline(table[i].fullName.fullName, 100);
        cout << "Введите пол: ";
        cin.getline(table[i].sex.sex, 20);
        cout << "Высшее образование (да / нет): ";
        cin.getline(table[i].edu.edu, 8);
        if (!(strcmp(table[i].edu.edu, "да")) || !(strcmp(table[i].edu.edu, "Да"))) {
            cout << "Введите название специальности: ";
            cin.getline(table[i].speciality.speciality, 100);
            cout << "Введите название ВУЗ'а: ";
            cin.getline(table[i].vuz.vuz, 100);
        } else {
            strcpy(table[i].speciality.speciality, no);
             strcpy(table[i].vuz.vuz, no);
        }
        cout << "Введите название должности: ";
        cin.getline(table[i].whoareyou.whoareyou, 100);
        cout << "Стаж: ";
        cin.getline(table[i].howmuchyouwork.howmuchyouwork, 100);
        cout << endl << endl;
    }
 
    for(unsigned int j = 0; j < 3; j++) {
         if(width[0] < strlen(table[j].fullName.fullName)) width[0] = strlen(table[j].fullName.fullName);
         if(width[1] < strlen(table[j].sex.sex)) width[1] = strlen(table[j].sex.sex);
         if(width[2] < strlen(table[j].edu.edu)) width[2] = strlen(table[j].edu.edu);
         if(width[3] < strlen(table[j].speciality.speciality)) width[3] = strlen(table[j].speciality.speciality);
         if(width[4] < strlen(table[j].vuz.vuz)) width[4] = strlen(table[j].vuz.vuz);
         if(width[5] < strlen(table[j].whoareyou.whoareyou)) width[5] = strlen(table[j].whoareyou.whoareyou);
         if(width[6] < strlen(table[j].howmuchyouwork.howmuchyouwork)) width[6] = strlen(table[j].howmuchyouwork.howmuchyouwork);
 
    }
int temp = 0;
cout << "| ФИО";
if(width[0] < 3) temp = 0; else temp = width[0] - 3; 
for(int i = 0; i < temp; i++) cout << " ";
cout << "| Пол";
if(width[1] < 3) width[1] = 0;
for(int i = 0; i < width[1] - 3 ; i++) cout << " ";
cout << "| Высш. обр. ";
if(width[2] < 13) width[2] = 13;
for(int i = 0; i < (width[2] - 13); i++) cout << " ";
cout << "| Спец-сть ";
if(width[3] < 10) width[3] = 10;
for(int i = 0; i < (width[3] - 10); i++) cout << " ";
cout << "| ВУЗ ";
if(width[4] < 6) width[4] = 6;
for(int i = 0; i < (width[4] - 6 ); i++) cout << " ";
cout << "| До-сть ";
if(width[5] < 9) width[5] = 9;
for(int i = 0; i < (width[5] - 9); i++) cout << " ";
cout << "| Стаж ";
if(width[6] < 7) width[6] = 7;
for(int i = 0; i < (width[6] - 7 ); i++) cout << " ";
cout << "|" << endl;
 
int a = strlen(table[0].edu.edu);
 
for(unsigned int i = 0; i < 3; i++){
    cout << "| " << table[i].fullName.fullName;
            for(int j = 0; j < width[0] - strlen(table[i].fullName.fullName); j++) cout << "  ";
    cout << "| " << table[i].sex.sex;
            for(int j = 0; j < width[1]-strlen(table[i].sex.sex); j++) cout << " ";
    cout << "| " << table[i].edu.edu;
            for(int j = 0; j < (width[2]-strlen(table[i].edu.edu)); j++) cout << " ";
    cout << "| " << table[i].speciality.speciality;
            for(int j = 0; j < (width[3]-strlen(table[i].speciality.speciality)); j++) cout << " ";
    cout << "| " << table[i].vuz.vuz;
            for(int j = 0; j < (width[4]-strlen(table[i].vuz.vuz)); j++) cout << " ";
    cout << "| " << table[i].whoareyou.whoareyou;
            for(int j = 0; j < (width[5]-strlen(table[i].whoareyou.whoareyou)); j++) cout << " ";
    cout << "| " << table[i].howmuchyouwork.howmuchyouwork;
            for(int j = 0; j < (width[6]-strlen(table[i].howmuchyouwork.howmuchyouwork)); j++) cout << " ";
    cout << a << endl;
}
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2014, 09:20     Разработать структуру Сотрудник
Посмотрите здесь:

C++ Создать структуру Сотрудник
разработать структуру C++
Разработать структуру с именем NOTE C++
C++ Разработать структуру с именем POINT
Разработать структуру с именем TRAIN на С++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4278 / 3709 / 1246
Регистрация: 14.04.2014
Сообщений: 14,503
20.05.2014, 10:29     Разработать структуру Сотрудник #2
А зачем структура workman? Ты же в workmanData всё описал, это и есть Сотрудник.
Laicus
1 / 1 / 0
Регистрация: 30.05.2013
Сообщений: 29
20.05.2014, 12:03  [ТС]     Разработать структуру Сотрудник #3
Цитата Сообщение от nmcf Посмотреть сообщение
А зачем структура workman? Ты же в workmanData всё описал, это и есть Сотрудник.
Иначе в union все данные сотрутся. Разве нет? Принцип существования объединения в том, что там, как я понял, для всего используется одна единственная область памяти. И каждый раз, когда, независимо от переменной, мы вводим значение, оно перезаписывается.

P.S. Код в некоторых местах может казаться непонятным. Не обращайте внимания. Это проверки.
nmcf
4278 / 3709 / 1246
Регистрация: 14.04.2014
Сообщений: 14,503
20.05.2014, 12:23     Разработать структуру Сотрудник #4
Тебе не нужен вообще union, объяви workmanData как struct.
Laicus
1 / 1 / 0
Регистрация: 30.05.2013
Сообщений: 29
20.05.2014, 12:25  [ТС]     Разработать структуру Сотрудник #5
Цитата Сообщение от nmcf Посмотреть сообщение
Тебе не нужен вообще union, объяви workmanData как struct.
Вы задачу сверху видели? Процитирую нужный отрезок: "разработайте структуру, используя объединение".
Структура здесь понимается как структура данных, а не как struct. Объединение ка union.
nmcf
4278 / 3709 / 1246
Регистрация: 14.04.2014
Сообщений: 14,503
20.05.2014, 12:30     Разработать структуру Сотрудник #6
А, ну да, я как-то больше о здравом смысле думал.
Laicus
1 / 1 / 0
Регистрация: 30.05.2013
Сообщений: 29
20.05.2014, 12:37  [ТС]     Разработать структуру Сотрудник #7
Цитата Сообщение от nmcf Посмотреть сообщение
А, ну да, я как-то больше о здравом смысле думал.
Надеюсь это не камень в мой огород. Задачу не я придумывал. И если бы не такое условие, то я помощи бы не просил.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2014, 15:22     Разработать структуру Сотрудник
Еще ссылки по теме:

Разработать структуру с именем NOTE C++
Разработать структуру с именем TRAIN C++
C++ Описать структуру "Сотрудник"

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

Или воспользуйтесь поиском по форуму:
nmcf
4278 / 3709 / 1246
Регистрация: 14.04.2014
Сообщений: 14,503
20.05.2014, 15:22     Разработать структуру Сотрудник #8
Вот, без вычисления ширины. На весь экран.
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
#include "stdafx.h"
#include <iostream>
#include <iomanip>
 
using namespace std;
 
union workmanData {
    char fullName[23 + 1];
    char sex[1 + 1];
    char edu[1 + 1];
    char speciality[15 + 1];
    char vuz[10 + 1];
    char whoareyou[15 + 1];
    int howmuchyouwork;
};
 
struct workman
{
    workmanData fullName;
    workmanData sex;
    workmanData edu;
    workmanData speciality;
    workmanData vuz;
    workmanData whoareyou;
    workmanData howmuchyouwork;
};
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    workman *table = new workman[3];
 
    for(int i = 0; i < 3; i++)
    {
        cout << "Введите ФИО: ";
        cin.getline(table[i].fullName.fullName, 24);
        cout << "Введите пол: ";
        cin.getline(table[i].sex.sex, 2);
        cout << "Высшее образование (y/n): ";
        cin.getline(table[i].edu.edu, 2);
        if(table[i].edu.edu[0] == 'y' || table[i].edu.edu[0] == 'Y')
        {
            cout << "Введите название специальности: ";
            cin.getline(table[i].speciality.speciality, 16);
            cout << "Введите название ВУЗ'а: ";
            cin.getline(table[i].vuz.vuz, 11);
        }
        else
        {
            strcpy(table[i].speciality.speciality, "-");
            strcpy(table[i].vuz.vuz, "-");
        }
        cout << "Введите название должности: ";
        cin.getline(table[i].whoareyou.whoareyou, 16);
        cout << "Стаж: ";
        cin >> table[i].howmuchyouwork.howmuchyouwork;
        cout << endl << endl;
        cin.ignore();
    }
 
    cout << "|-----------------------|---|--|---------------|----------|---------------|----|";
    cout << "|ФИО                    |Пол|ВО|Специальность  |ВУЗ       |Должность      |Стаж|";
    cout << "|-----------------------|---|--|---------------|----------|---------------|----|";
 
    for(int i = 0; i < 3; i++)
    {
        cout << "|" << setw(23) << table[i].fullName.fullName;
        cout << "|" << setw(3) << table[i].sex.sex;
        cout << "|" << setw(2) << table[i].edu.edu;
        cout << "|" << setw(15) << table[i].speciality.speciality;
        cout << "|" << setw(10) << table[i].vuz.vuz;
        cout << "|" << setw(15) << table[i].whoareyou.whoareyou;
        cout << "|" << setw(4) << table[i].howmuchyouwork.howmuchyouwork << "|";
    }
 
    cout << "|-----------------------|---|--|---------------|----------|---------------|----|";
 
    delete[] table;
 
    system("pause");
    return 0;
}
Yandex
Объявления
20.05.2014, 15:22     Разработать структуру Сотрудник
Ответ Создать тему
Опции темы

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