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

Программа, которая будет работать с персональными данными 5 сотрудников малого предприятия - C++

Восстановить пароль Регистрация
 
Valeryi19
0 / 0 / 0
Регистрация: 09.06.2014
Сообщений: 4
09.06.2014, 00:57     Программа, которая будет работать с персональными данными 5 сотрудников малого предприятия #1
Добрый вечер!
Я изучать С++ начал, дошел до массивов и попалась задача вот такого содержания:
"Программа, которая будет работать с персональными данными 5 сотрудников малого предприятия. Программа должна для каждого сотрудника хранить следующую информацию:
• Фамилия
• Имя
• Отчество
• Пол
• Год рождения
• Должность
• Заработная плата
Информация о сотрудниках вводится с клавиатуры. Хранение данных осуществите в массиве.
После ввода всех данных необходимо вывести краткую информацию обо всех сотрудниках
(одна строка на каждого сотрудника) в формате:
Иванов И.И., 1967 г.р., инженер-программист, 20 000 р."
Стал разбираться и понял, что просто не знаю, как ввести строковые данные в массив с клавиатуры. Ну т.е. как объявить и задать численный массив я понял, думаю что-то вроде такого
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
 
        char A[5];
        for (char i=0; i < 4; i++)
    {
 
        cout << "Vvedite element №" << i+1 << ": ";
        cin >> A[i];
 
    }
    _getch();
    return 0;
}
Не могли бы вы подсказать, хотя бы на каком-нибудь простейшем примере, как вводить такие вот строки, как в задании? Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2014, 00:57     Программа, которая будет работать с персональными данными 5 сотрудников малого предприятия
Посмотрите здесь:

C++ С++ нужна программа которая будет вращать планеты
C++ Будет программа, написанная через Windows Form Application работать на других ОС?
C++ Программа диагностики рентабельности предприятия
C++ Программа, которая по паролю будет определять уровень доступа сотрудника к секретной информации в базе данных
Нарисовать окошко в котором в углу будет "пушка" которая типа будет стрелять C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ev_Hyper
 Аватар для Ev_Hyper
1805 / 1626 / 435
Регистрация: 15.12.2013
Сообщений: 5,775
09.06.2014, 01:11     Программа, которая будет работать с персональными данными 5 сотрудников малого предприятия #2
Valeryi19, например:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
#include <string>
#include<locale>
#include <windows.h>
using namespace std;
 
int main()
{
     SetConsoleCP(1251);
     SetConsoleOutputCP(1251);
    setlocale(LC_ALL,"");
    string str;
 
    cout<<"Введите Фамилию"<<endl;
    cin>>str;
    cout<<str<<endl;
    char txt[1000];
    cout<<"Введите Имя"<<endl;
    cin>>txt;
    cout<<txt<<endl;
    return 0;
}
Код
Введите Фамилию
Иванов
Иванов
Введите Имя
Иван
Иван
Для продолжения нажмите любую клавишу . . .
Шрифт в консоле - Lucida Console
Valeryi19
0 / 0 / 0
Регистрация: 09.06.2014
Сообщений: 4
09.06.2014, 01:40  [ТС]     Программа, которая будет работать с персональными данными 5 сотрудников малого предприятия #3
Ev_Hyper, спасибо! Но я имел в виду именно массивы. Просто если я пробую ставить тип string в
C++ (Qt)
1
for (char i=0; i < 4; i++)
то у меня получается ошибка. а во всех остальных случаях можно корректно ввести только цифры. Хотя, возможно, я понимаю что-то не так?
Ev_Hyper
 Аватар для Ev_Hyper
1805 / 1626 / 435
Регистрация: 15.12.2013
Сообщений: 5,775
09.06.2014, 01:46     Программа, которая будет работать с персональными данными 5 сотрудников малого предприятия #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Именно поэтому я привел два вариант: string и char.
string это тоже массив, только с ним удобнее работать.
Valeryi19, ваша ошибка заключается в том, что обычно цикл for использую для перебора значений по индексам (то есть используют тип 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
#include<iostream>
#include <string>
#include<locale>
#include <windows.h>
using namespace std;
 
int main()
{
     SetConsoleCP(1251);
     SetConsoleOutputCP(1251);
    setlocale(LC_ALL,"");
    string str;
 
    cout<<"Введите Фамилию"<<endl;
    cin>>str;
    for(int i=0;i<str.length();i++)
        cout<<str[i];
    cout<<endl;
    
    char txt[1000];
    cout<<"Введите Имя"<<endl;
    cin>>txt;
    for(int i=0;i<4;i++)
    cout<<txt[i];
    cout<<endl;
    return 0;
}
Код
Введите Фамилию
Иванов
Иванов
Введите Имя
Александр
Алек
Для продолжения нажмите любую клавишу . . .
Вывело только 4 символа, так как в цикле вывода поставили условие: i<4.
freemanc
 Аватар для freemanc
12 / 12 / 1
Регистрация: 27.11.2012
Сообщений: 140
09.06.2014, 01:59     Программа, которая будет работать с персональными данными 5 сотрудников малого предприятия #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Я не совсем понял каким образом данные хранятся, по этому предложу 2 варианта:
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
#include <iostream.h>
#include <conio.h>
#include<locale>
#include <windows.h>
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(LC_ALL,"");
    //объявляем массив на 5 человек, описание каждого человека составляет не более 1000 символов:
    char A[5][1000];
    //ввод информации о 5 сотрудников
    //занесение данных о сотрудниках в массив:
    for(int i = 0; i < 5; i++)
    {
        cout<<"Введите информацию о человеке: ";
        cin>>A[i];
    }
    //выводим данные из массива:
    for(int i = 0; i < 5; i++)
    {
        cout<<"Человек №"<<i+1<<" : "<<A[i]<<endl;
    }
    _getch();
}
2) информация о человеке представляет собой набор атрибутов(строк):
Человек 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
#include <iostream.h>
#include <conio.h>
#include<locale>
#include <windows.h>
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(LC_ALL,"");
    //объявляем массив на 5 человек, у которых 7 атрибутов, длина каждого атрибута  - 256 символов:
    char A[5][7][256];
    //ввод информации о 5 сотрудников
    //занесение данных о сотрудниках в массив:
    for(int i = 0; i < 5; i++)
    {
        cout<<"Введите имя: ";
        cin>>A[i][0];
        cout<<"Введите фамилию: ";
        cin>>A[i][1];
        cout<<"Введите отчество: ";
        cin>>A[i][2];
        cout<<"Введите пол: ";
        cin>>A[i][3];
        cout<<"Введите год рождения: ";
        cin>>A[i][4];
        cout<<"Введите должность: ";
        cin>>A[i][5];
        cout<<"Введите размер зарплаты: ";
        cin>>A[i][6];
    }
    //выводим данные из массива:
    for(int i = 0; i < 5; i++)
    {
        cout<<A[i][0]<<" "<<A[i][1]<<" "<<A[i][2]<<", "<<A[i][3]<<", "<<A[i][4]<<", "<<A[i][5]<<", "<<A[i][6]<<endl;
    }
    _getch();
}
Для второго случая идеально использовать структуры данных, но если речь идет про массивы, то можно и так.
Valeryi19
0 / 0 / 0
Регистрация: 09.06.2014
Сообщений: 4
09.06.2014, 03:00  [ТС]     Программа, которая будет работать с персональными данными 5 сотрудников малого предприятия #6
Ev_Hyper, спасибо большое, понял.
freemanc, оба Ваших варианта действительно подходят для решения, спасибо! В особенности именно за варианты, благодаря Вам я получил весьма приличное представление о решении подобных задач.
Еще один вопрос. К задаче есть доп. условие, ну, помеченное звездочкой. "Эти строки для сотрудников, чьи зарплаты превышают среднюю по организации, должны выводиться в файл". Думаю, это как раз под второй случай подходит? Можно ли как-то сравнить параметр "зарплата" ( A[i][6]) с некой константой?
freemanc
 Аватар для freemanc
12 / 12 / 1
Регистрация: 27.11.2012
Сообщений: 140
09.06.2014, 03:55     Программа, которая будет работать с персональными данными 5 сотрудников малого предприятия #7
Valeryi19,
Цитата Сообщение от Valeryi19 Посмотреть сообщение
Можно ли как-то сравнить параметр "зарплата" ( A[i][6]) с некой константой?
Да, конечно. В данном случае, массив весь состоит из строк. Вам нужно преобразовать строку в число, для того чтобы вычислить среднюю зарплату и сравнивать с другими. В этом вам поможет функция atof (<строка>) - преобразует массив символов в число с плавающей точкой (подробней: http://www.cplusplus.com/reference/c.../atof/?kw=atof). У этой функции есть собрат - atoi, которая делает тоже самое, только превращает строку в целое число.
Но так как у вас будет определяться среднее арифметическое, нужно учитывать и дробную часть.
C++
1
2
//преобразование строки в число
float value = atof(A[i][6]);
С записью в файл:
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
#include <iostream.h>
#include <conio.h>
#include<locale>
#include <windows.h>
#include <stdlib.h>  //подключаем atof
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(LC_ALL,"");
    //объявляем массив на 5 человек, у которых 7 атрибутов, длина каждого атрибута  - 256 символов:
    char A[5][7][256];
    //ввод информации о 5 сотрудников
    //занесение данных о сотрудниках в массив:
    for(int i = 0; i < 5; i++)
    {
        cout<<"Введите имя: ";
        cin>>A[i][0];
        cout<<"Введите фамилию: ";
        cin>>A[i][1];
        cout<<"Введите отчество: ";
        cin>>A[i][2];
        cout<<"Введите пол: ";
        cin>>A[i][3];
        cout<<"Введите год рождения: ";
        cin>>A[i][4];
        cout<<"Введите должность: ";
        cin>>A[i][5];
        cout<<"Введите размер зарплаты: ";
        cin>>A[i][6];
    }
    //создаем указатель на файл
    FILE* f;
    char path[256];     //путь к файлу
    cout<<"Введите путь к файлу: ";
    cin>>path;
    f = fopen(path, "w");             //открываем файл на запись ( "w" означает, что файл создастся, если его не сущ., либо перезапишется)
    float sum = 0;                    //объявляем наше среднее арифметическое зарплат сотрудников, и инициализируем 0-м
    //Определям среднюю зарплату
    for(int i = 0; i < 5; i++)
        sum += atof(A[i][6]) / 5;
    //Проверяем зарплату каждого человека с средней зарплатой
    for(int i = 0; i < 5; i++)
        if(atof(A[i][6]) > sum)        //если текущая больше средней
        {
            for(int j = 0; j < 7; j++) //записываем в файл все атрибуты человека
            {
                fputs(A[i][j], f);  //пишем j-ый атрибут
                fputs(" ", f);      //разделяем их пробелами чтобы не сливались
            }
            fputs("\n", f);   //переходим на новую строчку в файле
        }
    fclose(f);     //закрываем файл
 
    //выводим данные из массива:
    for(int i = 0; i < 5; i++)
    {
        cout<<A[i][0]<<" "<<A[i][1]<<" "<<A[i][2]<<", "<<A[i][3]<<", "<<A[i][4]<<", "<<A[i][5]<<", "<<A[i][6]<<endl;
    }
    _getch();
}

Не по теме:

Быстрее знакомьтесь со структурами данных, там такого типа вопросы гораздо проще и удобней решаются

Valeryi19
0 / 0 / 0
Регистрация: 09.06.2014
Сообщений: 4
09.06.2014, 05:12  [ТС]     Программа, которая будет работать с персональными данными 5 сотрудников малого предприятия #8
freemanc, спасибо огромное за разъяснения и, в особенности, за комментарии по коду! Очень просто получилось разобраться с задачей благодаря Вам!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2014, 14:47     Программа, которая будет работать с персональными данными 5 сотрудников малого предприятия
Еще ссылки по теме:

C++ Программа, которая будет добавлять структуры заказчиков в стек и удалять из стека, представленного объявлением класса Stack
C++ Программа которая будет считывать информацию с монитора
Программа, которая будет сортировать студентов по дате рождения (убывание) C++

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

Или воспользуйтесь поиском по форуму:
freemanc
 Аватар для freemanc
12 / 12 / 1
Регистрация: 27.11.2012
Сообщений: 140
09.06.2014, 14:47     Программа, которая будет работать с персональными данными 5 сотрудников малого предприятия #9
Valeryi19, на здоровье)
Yandex
Объявления
09.06.2014, 14:47     Программа, которая будет работать с персональными данными 5 сотрудников малого предприятия
Ответ Создать тему
Опции темы

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