0 / 0 / 0
Регистрация: 10.04.2012
Сообщений: 3
1

Работа с файлами и структурами. Создать "меню"

10.04.2012, 21:46. Показов 2589. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
!!! Пишу в Microsoft Visual Studio ->Win32 Console application ->C++. !!!

Условие: Создайте записную книгу в виде динамического массива структур “Абонент”. Каждый абонент является структурой, содержащей следующие поля: имя, фамилия, дата рождения (структура “Дата”), возраст (рассчитывается по дате рождения), телефон. Изначально книга пуста. Предусмотрите функции по добавлению, удалению абонентов из книги, печати всей книги на экран, а также записи книги в файл и чтения из файла. Желаемое действие выбирайте с помощью меню.

Помогите сделать меню!

Решение (за полностью предоставленную программ большое спасибо "borisbn"):
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
#include <iostream>
#include <iterator>
#include <vector>
#include <string>
#include <string.h>
#include <algorithm>
#include <fstream>
#include <time.h>
struct Date {
    int day;
    int month;
    int year;
};
const int MAX_FIRSTNAME = 100;
const int MAX_LASTNAME = 200;
const int MAX_PHONE = 20;
struct Abonent {
    char firstName[ MAX_FIRSTNAME ];
    char lastName[ MAX_LASTNAME ];
    Date birthDay;
    int age;
    char phone[ MAX_PHONE ];
};
void countAge( Abonent & abonent ) {
    time_t rawtime;
    time ( &rawtime );
    tm current = *(localtime( &rawtime ));
    abonent.age = current.tm_year - abonent.birthDay.year;
}
bool operator==( const Abonent & left, const Abonent & right ) {
    return std::string( left.firstName ) == std::string( right.firstName ) &&
           std::string( left.lastName ) == std::string( right.lastName );
}
std::ostream & operator<<( std::ostream & os, const Abonent & abonent ) {
    Abonent abonentForAge = abonent;
    countAge( abonentForAge );
    os << abonent.firstName << " " << abonent.lastName << ":" << std::endl;
    os << "    birthDay : " << abonent.birthDay.day << "." << abonent.birthDay.month << "." << abonent.birthDay.year << std::endl;
    os << "    age : " << abonentForAge.age << std::endl;
    os << "    phone : " << abonent.phone << std::endl;
    return os;
}
typedef std::vector< Abonent > AddressBook;
void addAbonent( AddressBook & addressBook, const Abonent & abonent ) {
    Abonent abonentToAdd = abonent;
    countAge( abonentToAdd );
    addressBook.push_back( abonentToAdd );
}
void addAbonent( AddressBook & addressBook, const char * firstName, const char * lastName, int day, int month, int year, const char * phone ) {
    Abonent abonent;
    strcpy( abonent.firstName, firstName );
    strcpy( abonent.lastName, lastName );
    abonent.birthDay.day = day;
    abonent.birthDay.month = month;
    abonent.birthDay.year = year;
    strcpy( abonent.phone, phone );
    addAbonent( addressBook, abonent );
}
void deleteAbonent( AddressBook & addressBook, const Abonent & abonent ) {
    AddressBook::iterator found = std::find( addressBook.begin(), addressBook.end(), abonent );
    if ( found != addressBook.end() ) {
        addressBook.erase( found );
    }
}
void printAddressBook( const AddressBook & addressBook ) {
    std::copy( addressBook.begin(), addressBook.end(), std::ostream_iterator< Abonent >( std::cout, "\n" ) );
}
void saveAddressBookToFile( const AddressBook & addressBook, const char * fileName ) {
    std::ofstream file( fileName, std::ofstream::binary );
    if ( ! file ) {
        return;
    }
    for ( AddressBook::const_iterator it = addressBook.begin(), end = addressBook.end(); it != end; ++it ) {
        file.write( (char*)&(*it), sizeof( *it ) );
    }
}
void loadAddressBookFromFile( AddressBook & addressBook, const char * fileName ) {
    std::ifstream file( fileName, std::ofstream::binary );
    if ( ! file ) {
        return;
    }
    Abonent abonent;
    while ( ! file.eof() ) {
        file.read( (char*)&abonent, sizeof( abonent ) );
        if ( ! file.fail() ) {
            addAbonent( addressBook, abonent );
        }
    }
}
int main()
{
    AddressBook book;
    addAbonent( book, "Freddy", "Kruger", 1, 11, 1980, "911" );
    addAbonent( book, "Arnold", "Schwartz(enough...)", 2, 6, 1960, "+009876543210" );
    
    printAddressBook( book );
    Abonent freddy;
    strcpy( freddy.firstName, "Freddy" );
    strcpy( freddy.lastName, "Kruger" );
    deleteAbonent( book, freddy );
    
    std::cout << "freddy deleted:" << std::endl;
    printAddressBook( book );
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.04.2012, 21:46
Ответы с готовыми решениями:

Работа со структурами(файлами)
Помогите написать прогу с помощью библиотеке iostream Цедь работы: ознакомление и приобретение навыков использования средств ...

Работа с файлами и структурами.
Поля записи: код животного, название, количество еды в день (кг). Операция: найти название животного, которое ест больше всего. ...

Работа со структурами и файлами
Написать 2 программы. Первая формирует файл записей, содержащий следующие сведения: фамилия, телефон, адрес. Вторая программа...

1
Эксперт С++
 Аватар для Avazart
8483 / 6150 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.04.2012, 02:15 2
Ошибка в программе для вывода меню

Добавлено через 11 минут
Шаблон класса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.04.2012, 02:15
Помогаю со студенческими работами здесь

Работа со структурами и файлами
вот у меня есть код, где я записываю транзисторы. Как мне сделать, чтобы оно искало и выдавало все комплементарные пары транзисторов (у...

Работа с файлами и структурами
Помогите разобраться, как в структуру считать данные из файла и как должен выглядеть сам файл. Пропустил эту тему и сейчас не могу...

Работа с структурами и файлами
Условие задачи: Создать структру &quot;работники фирмы&quot; с полями &quot;имя&quot; &quot;фамилия&quot; &quot;отчество&quot; &quot;оклад&quot; &quot;стаж&quot; и...

Работа со структурами и файлами (2 в 1)
всем привет дали такое задание организовать запись, добавление, поиск, удаление, чтение из файла в основе лежат структуры ...

Работа со структурами и файлами
Всем привет. Нужна небольшая помощь по поводу данной задачи. Вся программа ясна кроме способа записи/извлечения данных из файла: как...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

Новые блоги и статьи
Next.js для разработки React: преимущества серверного рендеринга
Reangularity 20.03.2025
Next. js решает классическую проблему React-приложений: медленную первоначальную загрузку и плохую индексацию поисковиками. Вместо того чтобы заставлять браузер пользователя выполнять всю работу по. . .
JUnit или TestNG: Выбираем Java-фреймворк для тестирования
Javaican 20.03.2025
История тестовых фреймворков в Java началась в конце 90-х, когда Кент Бек и Эрих Гамма разработали JUnit - инструмент, который перевернул представление разработчиков о модульном тестировании. JUnit. . .
Разбиваем монолит на два микросервиса и реализуем CI/CD
ArchitectMsa 20.03.2025
Когда команда растет, а функциональность монолита расширяется, поддерживать и развивать такую систему становится все труднее. Разработчики начинают тратить много времени на разбор сложных. . .
Python и PDF: Создание и редактирование файлов
py-thonny 20.03.2025
Работа с PDF-документами – одна из популярных задач в современной разработке. Python предлагает несколько инструментов для создания, чтения и редактирования PDF-файлов, среди которых особенно. . .
Корутины в Unity и производительно­сть WaitForSeconds
GameUnited 20.03.2025
Разработчики игр на Unity часто сталкиваются с вопросом: как выполнять действия через определённые промежутки времени, не блокируя основной поток игры? Тут как раз и приходят на помощь корутины —. . .
Криптография в PHP
Jason-Webb 20.03.2025
PHP предоставляет много криптографических возможностей: от встроенных функций хеширования до полноценных библиотек шифрования — арсенал средств довольно обширен. Но всё это бесполезно без понимания. . .
Lineedge (Semi-Alpha) 0.75@20: Что мы потеряли
Etyuhibosecyu 20.03.2025
С каждым новым стандартом Lineedge обретает новые возможности — это ясно, как божий день. Однако есть и другая сторона — избавление от устаревших и проблемных элементов. Обычно удаление. . .
Реализация перечислений в Go
golander 19.03.2025
Если вы перешли на Go с других языков программирования (как я), таких как C#, Java или Python, вы наверняка заметили, что Go не имеет встроенной поддержки перечислений (enumerations). Это может стать. . .
Шаблон API Gateway в микросервисной архитектуре
MatrixArchitect 19.03.2025
API Gateway — один из основных компонентов микросервисной архитектуры. Фактически, API Gateway представляет собой сервис, который располагается между клиентскими приложениями и бэкенд-микросервисами,. . .
C++26: Что мы потеряли
bytestream 19.03.2025
С каждым новым стандартом C++ обретает новые возможности — это ясно, как божий день. Однако есть и другая сторона — избавление от устаревших и проблемных элементов. Обычно удаление функциональности. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru