ВОПРОС · Q&A

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

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

структура


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

структура
Нужна именно просто структура или можно из нее класс сделать?
 
Пиши, сделаю без проблем
[контактные данные удалены]
 
2 ксешенька, сегодня сделаю...
Но может у тебя уже есть какие то наработки? Может начала уже что то делать???
 
начали делать, а преподователь сказал, что неправильно.
мы массив передали через константу. сказали, что бред
надо проще
// 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");
}

то что подчеркнуто сказали надо в мэйн, и сайзоф тогда не будет работать.
сказали еще указатели нужны
 
мы массив передали через константу. сказали, что бред
надо проще
Конечно бред ;-)))) Но идея хорошая... [+] только за эту часть
C++:
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}
};
 
Пока что очень занят... Вот держи пока начало...
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
    56,2 КБ · Просмотры: 1 033
Вот конечная реализация :
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
    102,3 КБ · Просмотры: 993
  • stgost2.jpg
    stgost2.jpg
    38,4 КБ · Просмотры: 803
  • stgost3.jpg
    stgost3.jpg
    41,5 КБ · Просмотры: 996
  • stgost4.jpg
    stgost4.jpg
    41,8 КБ · Просмотры: 1 057
  • stgost5.jpg
    stgost5.jpg
    42,2 КБ · Просмотры: 1 026