Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2014, 12:36   #31
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Надеюсь, что вы возьмёте на вооружение какие-то решения из кода ниже

Вот такой сеанс пользователя:
Цитата:
Choose an action:
1)Enter information;
2)Show information;
3)Write information to a file;
4)Read information from a file;
5)Exit;

> 1

Enter the name: Ivan
Enter the surname: Enzhaev
Enter the age of the person: 27

Choose an action:
1)Enter information;
2)Show information;
3)Write information to a file;
4)Read information from a file;
5)Exit;

> 1

Enter the name: Igor
Enter the surname: Petrov
Enter the age of the person: 28

Choose an action:
1)Enter information;
2)Show information;
3)Write information to a file;
4)Read information from a file;
5)Exit;

> 3

There is a record of 2 men!

Choose an action:
1)Enter information;
2)Show information;
3)Write information to a file;
4)Read information from a file;
5)Exit;

> 4

There is reading of the 2 man!

Choose an action:
1)Enter information;
2)Show information;
3)Write information to a file;
4)Read information from a file;
5)Exit;

> 2

Name: Ivan
Surname: Enzhaev
Age: 27

Name: Igor
Surname: Petrov
Age: 28

Choose an action:
1)Enter information;
2)Show information;
3)Write information to a file;
4)Read information from a file;
5)Exit;
Код:

#include <string>
#include <iostream>
#include <fstream>
#include <vector>

class Person
{
public:
    std::string name;
    std::string surname;
    int age;
};

Person getPerson();
void showPersons( const std::vector<Person> &persons );
std::vector<Person> diskOut();
void diskIn( const std::vector<Person> &persons );

int main()
{
    std::vector<Person> arrayOfPersons;

    while ( true ) {
        std::cout << "\nChoose an action: \n1)Enter information;\n"
                  << "2)Show information;\n"
                  << "3)Write information to a file;\n"
                  << "4)Read information from a file;\n"
                  << "5)Exit;\n";

        int ch;
        std::cout << "\n> "; std::cin >> ch;
        switch ( ch ) {
        case 1: {
            Person person;
            person = getPerson();
            arrayOfPersons.push_back( person );
            break;
        }
        case 2: {
            showPersons( arrayOfPersons );
            break;
        }
        case 3: {
            diskIn( arrayOfPersons );
            break;
        }
        case 4: {
            arrayOfPersons = diskOut();
            break;
        }
        case 5:
            exit ( 0 );
        }
    }

    return 0;
}

Person getPerson()
{
    Person person;

    std::cout << "\nEnter the name: "; std::cin >> person.name;
    std::cout << "Enter the surname: "; std::cin >> person.surname;
    std::cout << "Enter the age of the person: "; std::cin >> person.age;

    return person;
}

void showPersons( const std::vector<Person> &persons )
{
    for ( int i = 0; i < persons.size(); i++ ) {
        std::cout << "\nName: " << persons[i].name;
        std::cout << "\nSurname: " << persons[i].surname;
        std::cout << "\nAge: " << persons[i].age << "\n";
    }
}

std::vector<Person> diskOut()
{
    std::ifstream ifile;
    ifile.open( "EX.TXT" );

    if ( !ifile ) {
        std::cout << "\nThe file can not be opened!";
        return std::vector<Person>();
    }

    std::vector<Person> arrayOfPersons;
    Person person;

    while ( ifile ) {
        ifile >> person.name;
        ifile >> person.surname;
        ifile >> person.age;

        if ( ifile.good() ) {
            arrayOfPersons.push_back( person );
        }
    }

    std::cout << "\nThere is reading of the "
              << arrayOfPersons.size() << " man!\n";

    return arrayOfPersons;
}

void diskIn( const std::vector<Person> &persons )
{
    std::ofstream ofile;
    ofile.open( "EX.TXT", std::ios::trunc );
    if ( !ofile ) {
        std::cout << "\nThe file can not be opened!";
        return;
    }

    std::cout << "\nThere is a record of " << persons.size() << " men!\n";

    for ( int i = 0; i < persons.size(); i++ ) {
        ofile << persons[i].name << std::endl;
        ofile << persons[i].surname << std::endl;
        ofile << persons[i].age << std::endl;
        ofile << std::endl;
    }
}
8Observer8 вне форума Ответить с цитированием
Старый 08.10.2014, 12:37   #32
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Мне ещё интересно вашу программу с часами посмотреть. У вас код изменился?
8Observer8 вне форума Ответить с цитированием
Старый 08.10.2014, 12:55   #33
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Код:
ofile.close();
Закрывать файл необязательно, так как при выходе из функции он сам закроется

Код:
std::cout << "\nThere is reading of the "
              << n << " man!\n";
Здесь надо заменить: "man" -> "men"

И ещё замечание. Привыкайте к многофайловым проектам. Это значительно облегчает жизнь

В файле "main.cpp" оставляем минимальный код:

main.cpp
Код:

#include <iostream>
#include <vector>
#include "Person.h"

int main( )
{
    std::vector<Person> arrayOfPersons;

    while ( true ) {
        std::cout << "\nChoose an action: \n1)Enter information;\n"
                  << "2)Show information;\n"
                  << "3)Write information to a file;\n"
                  << "4)Read information from a file;\n"
                  << "5)Exit;\n";

        int ch;
        std::cout << "\n> ";
        std::cin >> ch;
        switch ( ch ) {
            case 1:
            {
                Person person;
                person = getPerson( );
                arrayOfPersons.push_back( person );
                break;
            }
            case 2:
            {
                showPersons( arrayOfPersons );
                break;
            }
            case 3:
            {
                diskIn( arrayOfPersons );
                break;
            }
            case 4:
            {
                arrayOfPersons = diskOut( );
                break;
            }
            case 5:
            {
                exit( 0 );
            }
        }
    }

    return 0;
}
Person.h
Код:
#ifndef PERSON_H
#define PERSON_H

#include <string>
#include <vector>

class Person;

Person getPerson( );
void showPersons( const std::vector<Person> &persons );
std::vector<Person> diskOut( );
void diskIn( const std::vector<Person> &persons );

class Person
{
public:
    std::string name;
    std::string surname;
    int age;
};

#endif // PERSON_H
Person.cpp
Код:

#include <iostream>
#include <fstream>
#include "Person.h"

Person getPerson( )
{
    Person person;

    std::cout << "\nEnter the name: ";
    std::cin >> person.name;
    std::cout << "Enter the surname: ";
    std::cin >> person.surname;
    std::cout << "Enter the age of the person: ";
    std::cin >> person.age;

    return person;
}

void showPersons( const std::vector<Person> &persons )
{
    for ( std::size_t i = 0; i < persons.size( ); i++ ) {
        std::cout << "\nName: " << persons[i].name;
        std::cout << "\nSurname: " << persons[i].surname;
        std::cout << "\nAge: " << persons[i].age << "\n";
    }
}

std::vector<Person> diskOut( )
{
    std::ifstream ifile;
    ifile.open( "EX.TXT" );

    if ( !ifile ) {
        std::cout << "\nThe file can not be opened!";
        return std::vector<Person>();
    }

    std::vector<Person> arrayOfPersons;
    Person person;

    while ( ifile ) {
        ifile >> person.name;
        ifile >> person.surname;
        ifile >> person.age;

        if ( ifile.good( ) ) {
            arrayOfPersons.push_back( person );
        }
    }

    std::cout << "\nThere is reading of the "
              << arrayOfPersons.size( ) << " men!\n";

    return arrayOfPersons;
}

void diskIn( const std::vector<Person> &persons )
{
    std::ofstream ofile;
    ofile.open( "EX.TXT", std::ios::trunc );
    if ( !ofile ) {
        std::cout << "\nThe file can not be opened!";
        return;
    }

    std::cout << "\nThere is a record of " << persons.size( ) << " men!\n";

    for ( std::size_t i = 0; i < persons.size( ); i++ ) {
        ofile << persons[i].name << std::endl;
        ofile << persons[i].surname << std::endl;
        ofile << persons[i].age << std::endl;
        ofile << std::endl;
    }
}

Последний раз редактировалось 8Observer8; 08.10.2014 в 12:57.
8Observer8 вне форума Ответить с цитированием
Старый 08.10.2014, 13:04   #34
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Вы не думайте, что это профессиональная программа! Она всё ещё на начальном уровне. Чтобы её дотянуть хотя бы до среднего уровня надо добавить контроль ошибок. К примеру, пользователь введёт вместо возраста, какое-нибудь слово, что тогда программе делать?
8Observer8 вне форума Ответить с цитированием
Старый 08.10.2014, 13:11   #35
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

Сколько еды для мозгов Если можно, я напишу Вам в личку! Дабы не сорить на форуме ибо офтопов уже многовато...
igoreshka3333 вне форума Ответить с цитированием
Старый 08.10.2014, 14:07   #36
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

А где же тут офтопы то? Пока их не было. Это нормальный рабочий процесс развития программы, а вместе с ней и знаний, умений, навыков. Была бы задача интересная. Так мы ещё "Часы" не разобрали. У вас там куча ошибок. Тема то называется "Проверка на ошибки". Выкладывайте текущий код часов

И ещё не думайте, что вы написали программу и если она работает, значит о ней можно забыть. Заставить программу работать с минимальным функционалом - это всего лишь самый первый этап. Дальше программа развивается, улучшается, некоторые участки кода переписываются. Вместе с программой развиваетесь и вы. Такой практический подход с постоянных улучшением написанных программ - это и есть наилучший путь развития вас как "создавальщика" программного обеспечения

Про теорию тоже нельзя забывать. Но помните, что "теория без практики - это глупо, а практика без теории - это опасно" Самые лучшие книги по C++:
- Professional C++
- Эффективное использование C++

P.S. Обратите внимание, что в рецензии второй книги написано: "Издание ориентировано на программистов, знакомых с основами C++ и имеющих навыки его практического применения." А первая книга - это супер! как и вторая

Последний раз редактировалось Stilet; 18.10.2014 в 11:24.
8Observer8 вне форума Ответить с цитированием
Старый 08.10.2014, 14:53   #37
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

За код огромное СПАСИБО!
Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Жаль, что на английском...
Цитата:
Эффективное использование C++
Мейерс у меня в библиотеке присутствует)
А что насчет Страуструпа
http://rutracker.org/forum/viewtopic.php?t=2226992

И Саттера забыли добавить)

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
И Дальше программа развивается, улучшается, некоторые участки кода переписываются.
Я прохожу сейчас Лафоре (ООП). Автор дает задачи, которой с каждой новой главой постоянно модифицируются, переписываются. Та же задачка со временем раз 6 уже мною переписывалась...
http://www.ozon.ru/context/detail/id...__utmzi__1__=1

Я думаю, может стоит в рамках темы все делать, что бы последовательно знания усваивать... А так буду метаться из угла в угол. Может я ошибаюсь. К примеру, многофайловые программы, в том числе и векторы будут в следующей теме уже! И вопросов у меня будет море... Мозги и Вам конкретно вынесу :b

Цитата:
std::cout << "\nThere is a record of " << persons.size( ) << " men!\n";
Вот эта строка немного не ясна! size() вычисляет размер обьекта и таким образом выводит на экран количество обьектов?

Вот время (правда не отфарматировано английским)
Код:
#include <iostream>
using namespace std;

class Time
{
private:
    int hour;
    int min;
    int sec;
    
public:
    void get_time ();
    
    void show_time ()
    {cout <<"\n" << hour  << " : " << min  << " : " << sec;}
    bool isHour (){ return (hour> 0 && hour<23);   }
    bool isMinSec (){return (min>=0 && min <=59);}
};
//----------------------------------------------------
void Time::get_time ()
{
    while (true)
    {
        cout << "\nVvedite chasy: ";
        cin >> hour;
        if (isHour () && cin.good() )
        { break; }
        cin.clear(); cin.ignore(10, '\n');
        cout << "Nevernyi format!!!";
    }
    while (true)
    {
        cout << "Vvedite minuty: ";
        cin >> min;
        if (isMinSec()&& cin.good())
        {  break; }
        cin.clear(); cin.ignore(10, '\n');
        cout << "\nNe pravil'nyi format vremeni!";
    }
    while (true)
    {
        cout << "Vvedite Sec: ";
        cin >> sec;
        if (isMinSec()&& cin.good())
        {  break; }
        cin.clear(); cin.ignore(10, '\n');
        cout << "\nNe pravil'nyi format vremeni!";
    }
}
//-----------------------------------------------------

int main()
{
    Time *t=new Time();
    t->get_time();
    t->show_time();
    delete t;
    cout << endl;
    cin.get();
    system ("pause");
    return 0;
}

Последний раз редактировалось Stilet; 18.10.2014 в 11:24.
igoreshka3333 вне форума Ответить с цитированием
Старый 08.10.2014, 16:39   #38
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от igoreshka3333 Посмотреть сообщение
Вот эта строка немного не ясна! size() вычисляет размер обьекта и таким образом выводит на экран количество обьектов?
Этот объект представляет из себя хранилище для других объектов. Лучший способ понять эту строку:

1. size() - это метод класса std::vector. Значит надо посмотреть какие у этого класса есть методы, найти и прочитать, что делает этот метод
2. В гугле набираете: std::vector
3. В самом топе будет эта ссылка: http://www.cplusplus.com/reference/vector/vector/
4. Переходим по ссылке выше и прокручиваем вниз в поиске метода size()
5. Кликаем на size() и переходим на страницу, где читаем:
Цитата:
Returns the number of elements in the vector.
Если с английским проблема, то открываем https://translate.google.com/ Он переведёт так "Возвращает количество элементов в векторе."
6. Смотрим пример под описанием. Примеры даже ценнее, чем описание
7. Радуемся, что узнали что-то новое и сделали очередной шаг к вершине

Ту книжку на английском лучше всего читать через https://translate.google.com/ Через месяц\два будете всё меньше обращаться к переводчику

Действительно не пытайтесь охватить всё. Главное берите хорошие вещи сразу на вооружение и отрабатывайте их на практике, чтобы они стали частью вас. И постарайтесь избавляться от страхов и неуверенности. Если что-то неясно, то пишите маленький пример и на практике смотрите, что получается

Цитата:
Сообщение от igoreshka3333 Посмотреть сообщение
Я прохожу сейчас Лафоре (ООП). Автор дает задачи, которой с каждой новой главой постоянно модифицируются, переписываются. Та же задачка со временем раз 6 уже мною переписывалась...
http://www.ozon.ru/context/detail/id...__utmzi__1__=1
Спасибо! Посмотрю. Регулярное решение задач держит в форме и развивает!

Цитата:
Сообщение от igoreshka3333 Посмотреть сообщение
Вот время (правда не отфарматировано английским)
Код:
#include <iostream>
using namespace std;

class Time
{
private:
    int hour;
    int min;
    int sec;
    
public:
    void get_time ();
    
    void show_time ()
    {cout <<"\n" << hour  << " : " << min  << " : " << sec;}
    bool isHour (){ return (hour> 0 && hour<23);   }
    bool isMinSec (){return (min>=0 && min <=59);}
};
//----------------------------------------------------
void Time::get_time ()
{
    while (true)
    {
        cout << "\nVvedite chasy: ";
        cin >> hour;
        if (isHour () && cin.good() )
        { break; }
        cin.clear(); cin.ignore(10, '\n');
        cout << "Nevernyi format!!!";
    }
    while (true)
    {
        cout << "Vvedite minuty: ";
        cin >> min;
        if (isMinSec()&& cin.good())
        {  break; }
        cin.clear(); cin.ignore(10, '\n');
        cout << "\nNe pravil'nyi format vremeni!";
    }
    while (true)
    {
        cout << "Vvedite Sec: ";
        cin >> sec;
        if (isMinSec()&& cin.good())
        {  break; }
        cin.clear(); cin.ignore(10, '\n');
        cout << "\nNe pravil'nyi format vremeni!";
    }
}
//-----------------------------------------------------

int main()
{
    Time *t=new Time();
    t->get_time();
    t->show_time();
    delete t;
    cout << endl;
    cin.get();
    system ("pause");
    return 0;
}
Этот пример как раз демонстрирует контроль ошибок

Я запустил её и мне не нравится поведение программы. Халтурите! До конца не доводите! Не развивайте такую привычку! Привыкайте любить свою работу и относиться к программистам и пользователям с уважением! А не так: тяп-ляп, выбросил, забыл
Изображения
Тип файла: png 390.png (38.3 Кб, 56 просмотров)

Последний раз редактировалось Stilet; 18.10.2014 в 11:25.
8Observer8 вне форума Ответить с цитированием
Старый 08.10.2014, 19:02   #39
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

Есть такое дело Но мне всегда очень хочется побыстрей решить задачу, что бы идти дальше
igoreshka3333 вне форума Ответить с цитированием
Старый 08.10.2014, 19:52   #40
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Вот я про это и пишу, что у вас может привычка плохая появиться. Надо сразу стараться делать на 4-5. Иначе будете халтурить от проекта к проекту. Каждая задача - это маленький проект. У решения проекта есть разные ступени готовности. Проект с часами - слабая троечка. Обидно, потому что вы смазали торопливостью хорошее решение. Чуть-чуть не хватило на твёрдую 4

Самый сок задачи в анализе её решения, спустя некоторое время. Психологически немного тяжеловато возвращаться к старой задаче. Но тут как раз надо проявить волю и мужество. Награда не заставить себя ждать! Смотрите на решение глазами пользователя. И не только того пользователя, который будет использовать ваше решение, но и пользователя-программиста, который возьмёт ваш класс для своего проекта. Нужно с самого начал иметь эти установки, а то потеряете кучу времени на изучение ради изучения (это быстро забывается и наступает таптание на месте). А когда вы стараетесь делать хорошо, то и вам легче будет читать ваш старый код, рефакторить его (улучшать), и что очень важно - повторно его использовать
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
описать класс в с# volkodinocka Помощь студентам 0 09.11.2013 22:05
Описать класс С# NeoX_2011 Помощь студентам 1 19.03.2012 00:10
C# исправление ошибки. Описать класс, реализующий шестнадцатеричный счетчик PROkaZZZniK Помощь студентам 7 09.02.2012 16:29
Описать класс-родитель и класс-потомок. Delphi 7 Andrew_M Помощь студентам 0 15.01.2011 14:42
Описать класс. Telec Общие вопросы C/C++ 1 30.04.2010 18:43