Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
And555
0 / 0 / 0
Регистрация: 10.04.2012
Сообщений: 3
#1

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

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

!!! Пишу в 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2012, 21:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с файлами и структурами. Создать "меню" (C++):

Лабораторная "Работа с файлами и структурами данных" - обсуждение - C++
Здравствуйте, Есть такое задание: Составить программу со следующими свойствами: 1)вводится неограниченное количество строк...

Работа со структурами: ошибка "Declaration terminated incorrectly" - C++
прога набрана но при запуске вылетает ошибка : E2040 Declaration terminated incorrectly вот сама программа : #include &lt;stdio.h&gt; ...

Работа со структурами, "Двойной список" - C++
Написать программу для создания динамической конструкции из элементов структуры двух типов (&quot;Двойной список&quot;). Элементы первого типа...

Работа с файлами (вывести в текстовый файл "g.txt" любую цифру из исходного файла "f.txt" с сохранением строгого порядка) - C++
Помогите с задачей. Надо вывести в текстовый файл &quot;g.txt&quot; любую цифру из исходного файла &quot;f.txt&quot; с сохранением строгого...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс" - C++
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об издании, а также определить является ли данное...

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" - C++
Помогите с кодом написания задачи, не понимаю как написать классы в классе. Нужно создать класс &quot;вентилятор&quot; содержащий в себе классы:...

1
Avazart
Эксперт С++
7247 / 5419 / 297
Регистрация: 10.12.2010
Сообщений: 24,055
Записей в блоге: 17
11.04.2012, 02:15 #2
Ошибка в программе для вывода меню

Добавлено через 11 минут
Шаблон класса.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2012, 02:15
Привет! Вот еще темы с ответами:

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания" - C++
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько лет книге и количество дней прошедших...

Создать иерархию классов "Фирма", "Бухгалтер", "Сотрудник", "Зарплата" - C++
Само по себе понятие &quot;зарплата&quot; не особенно конкретное: оно включает и почасовую, и ставочную зарплату, и комиссионные, и процент с продаж....

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Создать класс комплексных чисел и ввести операции: "+", "-", "*", "/". - C++
пожалуйста-помогите написатьпрограмму!!! сижу на экзамене!!! вот само задание: создать класс комплексных чисел и ввести операции: &quot;+&quot;,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru