Структуры в С++

Тема в разделе "C/C++/C#", создана пользователем -, 23 ноя 2010.

  1. Гость

    Дали мне задание по структурам, но ничего не обьяснили, тему эту мы не проходили( но сделать надо(
    помогите, мне хотя бы принцип сам работы, как это оформить. а то я чесно говоря хз. гугл что-то внятное выдать не может.

    структура


    Обьекты номера в гостиннице. Нужно посчитать суммарное количество мест и количество свободных мест в гостиннице, общую стоимость номеров.(Должно быть 10 обьеков. Нужны отдельные функции инициализирования объектов и вычислений. В функции main в цикле выводить меню пунктам инициализировать объект, вывести все объекты, подсчеты (в зависимости от варианта), выйти из программы). Работа с меню должна располагаться также в отдельной функции. .)
     
  2. acorn

    acorn PHP Developer
    Web Team

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
  3. AnTroNet

    AnTroNet Гость

    [контактные данные] пиши, сделаем
     
  4. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Нужна именно просто структура или можно из нее класс сделать?
     
  5. flashkpi

    flashkpi Гость

    Пиши, сделаю без проблем
    [контактные данные удалены]
     
  6. Гость

    именно структура. классы только начали(
     
  7. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    2 ксешенька, сегодня сделаю...
    Но может у тебя уже есть какие то наработки? Может начала уже что то делать???
     
  8. Гость

    начали делать, а преподователь сказал, что неправильно.
    мы массив передали через константу. сказали, что бред
    надо проще
    // LAB9.cpp: определяет точку входа для консольного приложения.
    //

    #include "stdafx.h"
    #include "stdafx.h"
    #pragma once
    #include "iostream"
    #include <Windows.h>
    #include <math.h>
    #include "stdafx.h"
    using namespace std;

    struct Otel
    {
    char nomer[40];
    int miscia;
    int vartist;
    };

    const Otel otel[]=
    {
    {"1 номер", 4, 3000},
    {"2 номер", 3, 1700},
    {"3 номер", 4, 3000},
    {"4 номер", 2, 1500},
    {"5 номер", 1, 1000},
    {"6 номер", 4, 3000},
    {"7 номер", 2, 1500},
    {"8 номер", 3, 1700},
    {"9 номер", 1, 1000},
    {"10 номер", 6, 5000}
    };


    void Print()
    {
    int wc = sizeof(otel)/sizeof(otel[0]);
    int i;
    for(int i=0; i<wc; ++i)
    {
    cout<<otel.nomer<<" , Количество номеров: "<<otel.miscia
    <<", Стоимость: "<<otel.vartist
    <<'\n';
    }
    }
    void rahunok()
    {
    int wc = sizeof(otel)/sizeof(otel[0]);
    int sumnom = 0, i;
    float sumvar = 0;
    for(int i=0; i<wc; ++i)
    {
    sumnom += otel.miscia;
    sumvar += otel.vartist;
    }
    cout<<'\n';
    cout<<"Суммарное количество номеров : "<<sumnom<<'\n';
    cout<<'\n';
    cout<<"Суммарная стоимость: "<<sumvar<<'\n';
    cout<<'\n';
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
    SetConsoleOutputCP(1251);
    //setlocale(LC_ALL, "Russian");
    Print();
    rahunok();
    system("pause");
    }

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

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Конечно бред ;-)))) Но идея хорошая... [+] только за эту часть
     
  10. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Пока что очень занят... Вот держи пока начало...
    Код (C++):
    /*
    Обьекты номера в гостиннице. Нужно посчитать суммарное количество мест и количество свободных мест в гостиннице,
    общую стоимость номеров.(Должно быть 10 обьеков. Нужны отдельные функции инициализирования объектов и вычислений.
    В функции main в цикле выводить меню пунктам инициализировать объект, вывести все объекты, подсчеты (в зависимости от варианта), выйти из программы).
    Работа с меню должна располагаться также в отдельной функции. .)
    */

    #include <iostream>
    #include <iomanip>

    using namespace std;

    //Сама структура
    struct Nomer
    {
    char Nom[10]; //Номер (тип char, т.к. номер может быть 12а, 16b, 11Vip)
    int kMest; //Кол-во мест в номере (типо Койка-Место)
    int resMest; //Текущее рарезервированное кол-во мест (койка-мест)
    int Price; //Цена 1 места
    };

    //Функция меню
    int Menu(void)
    {
    cout<< endl<< "\t\t\t МЕНЮ" << endl;
    cout<<"\t1. Инициализация номеров гостиницы" << endl;
    cout<<"\t2. Заселение в номер" << endl;
    cout<<"\t3. Выселение из номера" << endl;
    cout<<"\t4. Статистика по номерам" << endl;
    cout<<"\t5. Выход из системы" << endl;
    cout<<"Ваш выбор : ";
    int selection;
    cin>>selection;
    return selection;
    }

    //Функция заполнения информации по одному номеру
    Nomer SetInfoNomer (char* Nom, int kMest, int resMest, int Price)
    {
    Nomer Result;
    memset(Result.Nom,0,10);
    strncpy(Result.Nom,Nom,9);
    Result.kMest = kMest;
    Result.resMest = resMest;
    Result.Price = Price;
    return Result;
    }
    //Функция инициализации номеров
    void Init(Nomer *Arr, int &CountArr)
    {
    cout<<"Введите кол-во инициализируемых номеров : ";
    cin>>CountArr;
    for (int i = 0; i<CountArr; i++)
    {
    char sNom[10];
    int kMest,resMest,Price;
    getchar();
    cout<<"Введите название номера : ";
    gets(sNom);
    cout<<"Введите кол-во мест в номере : ";
    cin>>kMest;
    cout<<"Введите кол-во уже заселенных мест в номере : ";
    cin>>resMest;
    if (resMest > kMest) resMest = kMest;
    cout<<"Введите стоимость одного места в номере : ";
    cin>>Price;
    cout<<"------------------------------------------" << endl;
    Arr[i] = SetInfoNomer(sNom,kMest,resMest,Price);
    }
    }

    void ShowStatistic (Nomer *Arr, int CountArr)
    {
    cout<<endl << "\t\t\tСтатистика по номерам" << endl;
    cout<<setw(12) << "Назв. номера" << setw(12) << "Кол-во мест" << setw(18) << "Кол-во рез. мест" << setw(12) << "Цена" << endl;
    for (int i = 0; i<CountArr; i++)
    {
    cout << setw(12) << Arr[i].Nom<<setw(12) << Arr[i].kMest << setw(18) << Arr[i].resMest << setw(12) << Arr[i].Price<< endl;
    }
    cout<<"-------------------------------------------------------" << endl;


    }
    //Основная функция программы (точка входа)
    void main(void)
    {
    setlocale(LC_ALL,"Russian"); //Установим локаль в .1251 кодовую страницу
    Nomer Arr[10]; //Наш массив номеров
    int CountArr = 0; //Переменная где мы учитываем проинициализированные номера
    int Selection = 0; //Выбор меню
    while (Selection != 5)
    {
    Selection = Menu(); //Получим результат меню
    switch (Selection)
    {
    case 1:
    Init(Arr,CountArr);
    break;
    case 2:
    break;
    case 3:
    break;
    case 4:
    ShowStatistic(Arr,CountArr);
    break;
    case 5:
    break;
    default:
    Selection = 0;
    }

    }
    }
     

    Вложения:

    • gost.jpg
      gost.jpg
      Размер файла:
      97,5 КБ
      Просмотров:
      25
  11. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Вот конечная реализация :
    Код (C++):
    /*
    Обьекты номера в гостиннице. Нужно посчитать суммарное количество мест и количество свободных мест в гостиннице,
    общую стоимость номеров.(Должно быть 10 обьеков. Нужны отдельные функции инициализирования объектов и вычислений.
    В функции main в цикле выводить меню пунктам инициализировать объект, вывести все объекты, подсчеты (в зависимости от варианта), выйти из программы).
    Работа с меню должна располагаться также в отдельной функции. .)
    */

    /*
    codeby.net
    Autor: DarkKnight125
    */

    //(с)DarkKnight125: Но с классом все же было бы веселее
    #include <iostream>
    #include <iomanip>

    using namespace std;

    //Сама структура
    struct Nomer
    {
    char Nom[10]; //Номер (тип char, т.к. номер может быть 12а, 16b, 11Vip)
    int kMest; //Кол-во мест в номере (типо Койка-Место)
    int resMest; //Текущее рарезервированное кол-во мест (койка-мест)
    int Price; //Цена 1 места
    };

    //Функция меню
    int Menu(void)
    {
    cout<< endl<< "\t\t\t МЕНЮ" << endl;
    cout<<"\t1. Инициализация номеров гостиницы" << endl;
    cout<<"\t2. Заселение в номер" << endl;
    cout<<"\t3. Выселение из номера" << endl;
    cout<<"\t4. Статистика по номерам" << endl;
    cout<<"\t5. Выход из системы" << endl;
    cout<<"Ваш выбор : ";
    int selection;
    cin>>selection;
    return selection;
    }

    //Функция заполнения информации по одному номеру
    Nomer SetInfoNomer (char* Nom, int kMest, int resMest, int Price)
    {
    Nomer Result;
    memset(Result.Nom,0,10);
    strncpy(Result.Nom,Nom,9);
    Result.kMest = kMest;
    Result.resMest = resMest;
    Result.Price = Price;
    return Result;
    }
    //Функция инициализации номеров
    void Init(Nomer *Arr, int &CountArr)
    {
    cout<<"Введите кол-во инициализируемых номеров : ";
    cin>>CountArr;
    for (int i = 0; i<CountArr; i++)
    {
    char sNom[10];
    int kMest,resMest,Price;
    getchar();
    cout<<"Введите название номера : ";
    gets(sNom);
    cout<<"Введите кол-во мест в номере : ";
    cin>>kMest;
    cout<<"Введите кол-во уже заселенных мест в номере : ";
    cin>>resMest;
    if (resMest > kMest) resMest = kMest;
    cout<<"Введите стоимость одного места в номере : ";
    cin>>Price;
    cout<<"------------------------------------------" << endl;
    Arr[i] = SetInfoNomer(sNom,kMest,resMest,Price);
    }
    }

    void ShowStatistic (Nomer *Arr, int CountArr)
    {
    double SummaryPrice = 0.0; //Суммарный доход с номеров
    double SummaryNotPrice = 0.0; //Не дополученная прибыль
    int SumReserv = 0; //Кол-во заселенных номеров
    int SumNotReserv = 0; //Кол-во свободных номеров
    cout<<endl << "\t\t\tСтатистика по номерам" << endl;
    cout<<setw(12) << "Назв. номера" << setw(12) << "Кол-во мест" << setw(18) << "Кол-во рез. мест" << setw(12) << "Цена" << endl;
    for (int i = 0; i<CountArr; i++)
    {
    SummaryPrice += Arr[i].resMest * Arr[i].Price;
    SummaryNotPrice += (Arr[i].kMest - Arr[i].resMest) * Arr[i].Price;
    SumReserv += Arr[i].resMest;
    SumNotReserv += Arr[i].kMest - Arr[i].resMest;

    cout << setw(12) << Arr[i].Nom<<setw(12) << Arr[i].kMest << setw(18) << Arr[i].resMest << setw(12) << Arr[i].Price<< endl;
    }
    cout<<"-------------------------------------------------------" << endl;
    cout<<"Суммарный доход с номеров : "<< SummaryPrice << "руб." << endl;
    cout<<"Недополученная прибыль с номеров : "<< SummaryNotPrice << "руб." << endl;
    cout<<"Кол-во заселенных номеров : "<< SumReserv << " шт." << endl;
    cout<<"Кол-во свободных номеров : "<< SumNotReserv << " шт." << endl;
    cout<<"-------------------------------------------------------" << endl;
    }

    //Заселение (резервирование) номера
    void ReservNomer (Nomer *Arr, int CountArr)
    {
    cout<<endl << "\t\t\tИнформация по свободным номера" << endl;
    cout<<setw(5)<<"Код"<< setw(12) << "Назв. номера" << setw(12) << "Кол-во мест" << setw(18) << "Кол-во рез. мест" << setw(12) << "Цена" << endl;
    for (int i = 0; i<CountArr; i++)
    {
    if (Arr[i].kMest - Arr[i].resMest > 0)
    {
    cout <<setw(5)<<i<< setw(12) << Arr[i].Nom<<setw(12) << Arr[i].kMest << setw(18) << Arr[i].resMest << setw(12) << Arr[i].Price<< endl;
    }
    }
    int Selection; // Переменная выбора
    int ReservCount; //Зарезервированное кол-во
    cout<<"Введите код номера для заселения : ";
    cin >> Selection;
    cout<<"Введите кол-во мест для резерва : ";
    cin >> ReservCount;
    if (Arr[Selection].kMest - Arr[Selection].resMest - ReservCount < 0)
    {
    cout<<" Ошибка не хватает места для резерва" << endl;
    return;
    }
    Arr[Selection].resMest += ReservCount;
    cout<< "Резервированние прошло успешно : " << endl;
    cout <<"Стоимость номера в сутки : " << Arr[Selection].Price * ReservCount << endl;
    cout <<"----------------------------------------"<< endl;
    }

    //Выселение из номера
    void UnReservNomer (Nomer *Arr, int CountArr)
    {
    cout<<endl << "\t\t\tИнформация по заселенным номерам" << endl;
    cout<<setw(5)<<"Код"<< setw(12) << "Назв. номера" << setw(12) << "Кол-во мест" << setw(18) << "Кол-во рез. мест" << setw(12) << "Цена" << endl;
    for (int i = 0; i<CountArr; i++)
    {
    if (Arr[i].resMest > 0) //Если зарезервированое кол-во больше нуля то вывести номер
    {
    cout <<setw(5)<<i<< setw(12) << Arr[i].Nom<<setw(12) << Arr[i].kMest << setw(18) << Arr[i].resMest << setw(12) << Arr[i].Price<< endl;
    }
    }
    int Selection; // Переменная выбора
    int UnReservCount; //Сколько убрать из резерва
    cout<<"Введите код номера для выселения : ";
    cin >> Selection;
    cout<<"Введите кол-во мест для выселения : ";
    cin >> UnReservCount;
    if (Arr[Selection].resMest - UnReservCount < 0)
    {
    cout<<" Ошибка: Не возможно выселить больше чем заселенно" << endl;
    return;
    }
    Arr[Selection].resMest -= UnReservCount;
    cout<< "Выселение (Unreserving) прошло успешно : " << endl;
    cout <<"Потери в прибыли от номера составляют (в сутки) : " << Arr[Selection].Price * UnReservCount << endl;
    cout <<"----------------------------------------"<< endl;
    }

    //Основная функция программы (точка входа)
    void main(void)
    {
    setlocale(LC_ALL,"Russian"); //Установим локаль в .1251 кодовую страницу
    Nomer Arr[10]; //Наш массив номеров
    int CountArr = 0; //Переменная где мы учитываем проинициализированные номера
    int Selection = 0; //Выбор меню
    while (Selection != 5)
    {
    Selection = Menu(); //Получим результат меню
    switch (Selection)
    {
    case 1: //Инициализация начальных данных
    Init(Arr,CountArr);
    break;
    case 2: //Резервирование (вселение) в номер
    ReservNomer (Arr, CountArr);
    break;
    case 3: // Выселение из номера
    UnReservNomer (Arr, CountArr);
    break;
    case 4: //Вывод статистики по всем номерам
    ShowStatistic(Arr,CountArr);
    break;
    case 5: //Выход
    break;
    default: //Если не выбранно ни одного из вариантов продолжаем цикл
    Selection = 0;
    }

    }
    }
     

    Вложения:

    • stgost1.jpg
      stgost1.jpg
      Размер файла:
      181,1 КБ
      Просмотров:
      20
    • stgost2.jpg
      stgost2.jpg
      Размер файла:
      65,6 КБ
      Просмотров:
      18
    • stgost3.jpg
      stgost3.jpg
      Размер файла:
      71,3 КБ
      Просмотров:
      17
    • stgost4.jpg
      stgost4.jpg
      Размер файла:
      72,4 КБ
      Просмотров:
      17
    • stgost5.jpg
      stgost5.jpg
      Размер файла:
      72,8 КБ
      Просмотров:
      4
Загрузка...
Похожие Темы - Структуры С++
  1. TSoprano
    Ответов:
    1
    Просмотров:
    1.012
  2. ricco
    Ответов:
    3
    Просмотров:
    3.176
  3. jula939393
    Ответов:
    1
    Просмотров:
    1.357
  4. vlada
    Ответов:
    6
    Просмотров:
    1.458
  5. Anastasia18
    Ответов:
    1
    Просмотров:
    1.206

Поделиться этой страницей