Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 1
1

Исправление ввода месяца

04.05.2016, 09:07. Показов 909. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, форумчане! Вот небольшая программа, в целом работает, но нужно исправить код так, чтобы была возможность ввода и вывода месяца в формате mm (01, 02, 03 и т.д.). Можно ли это сделать, не сильно меняя структуру? Подскажите, пожалуйста, как.
Суть программы такова: записать в файл фамилии, имена, даты рождения, оформить в виде элементов списка, список сохранять в файл, сделать возможность поиска по дате рождения.

C++ (Qt)
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <iostream>
#include <fstream>
#include <string>   
#include <windows.h>
using namespace std;
 
struct TSpis {      // список структур 
    string fam;     // фамилия
    string im;      // имя
    int den;        // день рождения
    int mes;        // месяц рождения
    int god;        // год рождения
 
    TSpis *Next;
};
 
//----------------- добавить элемент в список -------------------------------------
TSpis* PushSpis(TSpis *Sp, string fam, string im, int den, int mes, int god) {
    TSpis *Spis = new TSpis;
    Spis->fam = fam;
    Spis->im = im;
    Spis->den = den;
    Spis->mes = mes;
    Spis->god = god;
    Spis->Next = Sp;
    return Spis; // Адрес новой вершины
}
 
//----------------- ввод данных в файл  ---------------------------------------------
void CreateSpis() {
    ofstream  f("file.txt");//открываем файл для записи
    int kol = 0, den, mes, god;
    string fam, im;
    char ch;
    while (1) {
        cout << ("Введите через пробел: Фамилия Имя День Месяц Год Рождения: ") << endl;
        SetConsoleCP(1251);     // русский язык в потоке ввода и вывода
        SetConsoleOutputCP(1251);
        cin >> fam >> im >> den >> mes >> god;
        f << fam << " " << im << " " << den << " " << mes << " " << god;
        if (den>31, mes>12, god>2016) 
        system("Pause");
        cout << ("Вы ввели неправильную дату!")<< endl;
        break; 
        kol++;
        cout << ("Вводим еще (y \ n)? ");
        cin >> ch;
        if (ch == 'n') 
            break; 
        else 
            f << endl;
        bool f1 =false; 
 
    }
    cout << "Вы ввели " << kol << " записей в файл" << endl;
    f.close();
    system("Pause");
}
 
//----------- чтение из файла и вывод списка на экран ------------------------------
TSpis* OutputSpis(TSpis *Sp) {
    ifstream f("file.txt"); //открываем файл для чтения
    int kol = 0, den, mes, god;
    string fam, im;
    char ch;
    SetConsoleCP(1251);     // русский язык в потоке ввода и вывода
    SetConsoleOutputCP(1251);
    while (!f.eof()) {
        f >> fam >> im >> den >> mes >> god; // считываем данные из файла
        Sp = PushSpis(Sp, fam, im, den, mes, god); // заносим в список
    }
    cout << "Фамилия Имя День Месяц Год: " << endl;
    TSpis *Dop = NULL;
    Dop = Sp;
    while (Dop) {
        cout << Dop->fam << " " << Dop->im << " " << Dop->den << " " << Dop->mes << " " << Dop->god << " " << endl;
        Dop = Dop->Next;
    }
    f.close();
    return Sp;
}
 
 
//----------- поиск в списке по дате рождения ----------------------------------
void SearchSpis(TSpis *Sp) {
    TSpis *Dop = Sp;
    int kol = 0, den, mes, god, den1, mes1, god1;
    string fam, im;
    cout << "Искомые День Месяц Год Рождения: ";
    cin >> den1 >> mes1 >> god1;
    bool flag = false;
    while (Dop) {
        if (Dop->den == den1 && Dop->mes == mes1 && Dop->god == god1) {
            flag = true;
            cout << Dop->fam << " " << Dop->im << endl;
        }
        Dop = Dop->Next;
    }
    if (!flag) cout << "Таких нет" << endl;
}
 
 
 
int main()
{
    SetConsoleCP(1251);     // русский язык в потоке ввода и вывода
    SetConsoleOutputCP(1251);
    TSpis *Sp = NULL;   // задание пустого списка
                        //SetConsoleOutputCP(1251); 
                        //SetConsoleCP(1251);  
    char ch;
    do {
        cout << ("\nВыберите действие:\n1. Ввести данные и записать в файл\n2. Прочитать список из файла и вывести на экран\n");
        cout << ("3. Найти по дате рождения\n4. Выход\n");
        cin >> ch;
        fflush(stdin);
        switch (ch) {
        case '1':
            CreateSpis();
            break;
        case '2':
            Sp = OutputSpis(Sp);
            break;
        case '3':
            SearchSpis(Sp);
            break;
        case '4':
            return 0;
        default:
            cout << "Ошибка ввода" << endl;
            system("Pause");
            break;
        }
    } while (ch != '4');
    system("Pause");
    return 0;
 
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2016, 09:07
Ответы с готовыми решениями:

Исправление ошибок ввода
Хочу исправить возможность ошибочного ввода меню состоит из цифр поэтому сделал int,если нажать на...

Проверить правильность ввода названия месяца
1. Составить программу.проверяющая правильность ввода названия месяца.(пусть названия месяца будет...

Проверить правильность ввода название месяца
Составить программу, проверяющая правильность ввода название месяца.

Определить правильность ввода числа месяца
По дате регистрации посетителя определить правильность ввода числа месяца.

1
68 / 67 / 59
Регистрация: 14.07.2013
Сообщений: 251
04.05.2016, 09:30 2
Лучший ответ Сообщение было отмечено mandarinqa как решение

Решение

На считывание данных ничего менять не надо, т.к введя 07 например в int все равно запишется 7.
А при работе с потоками ввода вывода в/из файла, просто пишите
C++
1
2
3
4
5
if (mes < 10){
    cout << Dop->fam << " " << Dop->im << " " << Dop->den << " 0" << Dop->mes << " " << Dop->god << " " << endl;
} else {
     cout << Dop->fam << " " << Dop->im << " " << Dop->den << " " << Dop->mes << " " << Dop->god << " " << endl;
}
Добавлено через 1 минуту
И еще раставляйте фигурные скобки у вас про неправильную дату всегда выводится будет, так как не попадает под if
C++
1
2
3
if (den>31, mes>12, god>2016) 
        system("Pause");
        cout << ("Вы ввели неправильную дату!")<< endl;
0
04.05.2016, 09:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.05.2016, 09:30
Помогаю со студенческими работами здесь

Ввод дня, месяца и года с проверкой корректности ввода
Нужно ввести день, месяц, год ввод поэлементно. С проверкой на коректность ввода(при вводе цифр при...

(Исправление/добавление) текста в textBox. Курсор ввода уходит в конец текста
Добрый день! Написал текст в textBox, хочу исправить один или два символа в середине текста или...

Написать программу, которая ждет ввода первой буквы названия месяца. В зависимости от этого определяет время года
Я не понимаю как это сделать и что ещё важнее как учесть то, что август и апрель начинаются с одной...

При вводе порядкового номера месяца вывести название этого месяца
Написать программу, которая при вводе порядкового номера месяца (1, 2, 3 и тд) выводит название...

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

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru