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

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

  1. Гость

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

    структура


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

    acorn PHP Developer
    Web Team

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

    AnTroNet Гость

    Репутация:
    0
    [контактные данные] пиши, сделаем
     
  4. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

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

    flashkpi Гость

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

    Репутация:
    0
    именно структура. классы только начали(
     
  7. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

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

    Репутация:
    0
    начали делать, а преподователь сказал, что неправильно.
    мы массив передали через константу. сказали, что бред
    надо проще
    // 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

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

    DarkKnight Well-Known Member
    C\C++ Team

    Репутация:
    0
    Регистрация:
    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
      Размер файла:
      97,5 КБ
      Просмотров:
      25
  11. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Репутация:
    0
    Регистрация:
    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
      Размер файла:
      181,1 КБ
      Просмотров:
      20
    • Структуры в С++
      stgost2.jpg
      Размер файла:
      65,6 КБ
      Просмотров:
      18
    • Структуры в С++
      stgost3.jpg
      Размер файла:
      71,3 КБ
      Просмотров:
      17
    • Структуры в С++
      stgost4.jpg
      Размер файла:
      72,4 КБ
      Просмотров:
      17
    • Структуры в С++
      stgost5.jpg
      Размер файла:
      72,8 КБ
      Просмотров:
      4
Загрузка...

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