C++

Рамка на титул

Напишите программу, запрашивающую имя, фамилия, отчество и номер группы студента и выводящую введённые данные в следующем виде:
/* ********************************
   * Лабораторная работа № 1      *
   * Выполнил(а): ст. гр. ЗИ-123  *
   * Иванов Андрей Петрович       *
   ******************************** */

Необходимо, чтобы программа сама определяла нужную длину рамки. Сама же длинна рамки зависит от длинны наибольшей строки внутри рамки. Используя циклы for легко можно выровнять стороны рамки.

Очень необычное задание, такую рамку часто задают в ВУЗ-ах в качестве титульного листа. Программу написать не сложно для частного случая, но вот, если сделать универсальную рамку, нужно немного потрудиться.

// title.cpp: определяет точку входа для консольного приложения.
 
#include "stdafx.h"
#include <iostream>
#include <Windows.h> // прототипы функций SetConsoleCP() и SetConsoleOutputCP()
using namespace std;
 
int main(int argc, char* argv[])
{
    // Кириллица в консоли
    SetConsoleCP(1251); // функция устанавливает кодовую таблицу(win-cp 1251) для работы с потоком ввода
    SetConsoleOutputCP(1251); // функция устанавливает кодовую таблицу(win-cp 1251) для работы с потоком вывода
 
    char name[20] = "\0"; // строка для хранения имени,
    cout << "Введите имя студента: ";
    cin >> name;
 
    char surname[30] = "\0"; // строка для хранения фамилии студента
    cout << "Введите фамилию студента: ";
    cin >> surname;
 
    char patronymic[30] = "\0"; // строка для хранения отчества
    cout << "Введите отчество студента: ";
    cin >> patronymic;
 
    char group_number[10] = "\0"; // строка для хранения номера группы
    cout << "Введите номер группы студента: ";
    cin >> group_number;
 
    int len = 31; // минимальная длинна рамки
    int len_str1 = 25 + strlen(group_number); // длинна второй строки в рамке
    int len_str2 = strlen(name) + strlen(surname) + strlen(patronymic) + 6; // длинна третьей строки
 
    // в операторе if определяем длинну рамки? причём минимальная длинна должна быть - 31 символ
    if ( len_str1 >= len_str2 && len_str1 > 31 )
        len = len_str1;
    else
        if (len_str2 > 31)
        len = len_str2;
 
    cout << "\n\t\t\t"; // выравнивание по центру
    for (int counter = 0; counter < len; counter++ )
        cout << "*";
 
    cout << "\n\t\t\t* Лабораторная работа №1";
    for (int counter = 0; counter < len - 25; counter++ )
        cout << " ";
 
    cout << "*\n\t\t\t* Выполнил(а): ст. гр. " << group_number;
    for (int counter = 0; counter <= (len - len_str1); counter++ )
        cout << " ";
 
    cout  << "*\n\t\t\t* " << surname << " " << name << " " << patronymic;
    for (int counter = 0; counter <= (len - len_str2); counter++ )
        cout << " ";
    cout << "*";
 
    cout << "\n\t\t\t"; // выравнивание по центру
    for (int counter = 0; counter < len; counter++ )
        cout << "*";
    cout << endl;
 
    system("pause");
    return 0;
}

В строках 14 — 28 организуется ввод информации в программу. Минимальная длинна рамки — 31 символ, в случае если ФИО или группа студента не будет помещаться внктри рамки, длинна рамки увеличится на нужное количество символов. В строках 46 — 47, 50-51, 54-55 циклы for перемещают курсор, методом вывода символа пробела. После чего ставится символ ‘*’ граница рамки.
Теги:
Рамка
Добавлено: 11 Апреля 2018 09:42:30 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...