Разработка решений по информационному обеспечению ИС

Принципы организации информационного обеспечения ИС

Для организации хранения данных в информационной системе используются три структуры:

Структура «Список гостей»

structguest

{

string fam;//фамилия

string name;//имя

stringotc; //отчество

passport p; //паспортные данные серия и номер из отдельной структуры

tmarrival;//дата приезда

tmdepart; //дата отъезда

intnom; //номер в гостинице

};

Структура «Паспортные данные»

structpassport

{

intseria;// серия паспорт

intnumb;//номер паспорта

};

Структура «Список номеров»

structnomer

{

intnum; //номер апартамента

stringklass; //класс номера: Standart, Suite(сьют, повышенной комфортности), Lux

intplace; //количество мест в номере

doublecost;//стоимость за сутки

intflag;//признак занят-1, свободен-0

};

В массиве структур guest и nomerпредусмотрено хранение до 1000 элементов.

guestmas[1000]; //массив структур "Гость"

nomernm[1000]; //массив структур "Номер"

Массивы структур хранятся в файлах “Guest.txt” и “Nomer.txt”.

Разработка решений по техническому обеспечению ИС

Для функционирования информационной системы «Администратор гостиницы» предъявляются следующие требования к аппаратному обеспечению компьютера:

Операционная система:

· Windows 10 версии 1507 или выше: Домашняя, Профессиональная, для образовательных учреждений и Корпоративная (выпуски с долгосрочным обслуживанием и S не поддерживаются).

· Windows 8.1 (собновлением 2919355): Core, Профессиональная и Корпоративная.

· Windows Server 2012 R2 (с обновлением 2919355): Essentials, Standard, Datacenter.

· Windows 7 спакетомобновления 1 (споследнимиобновлениями Windows): Домашняярасширенная, Профессиональная, Корпоративная, Максимальная.

Оборудование:

· Процессор с тактовой частотой не ниже 1,8 ГГц. Рекомендуется использовать как минимум двухъядерный процессор.

· 2 ГБ ОЗУ; рекомендуется 4 ГБ ОЗУ (минимум 2,5 ГБ при выполнении на виртуальной машине).

· Место на жестком диске: до 130 ГБ свободного места в зависимости от установленных компонентов VisualStudio 2017, обычно для установки требуется от 20 до 50 ГБ свободного места.

· Скорость жесткого диска: для повышения производительности установите Windows и VisualStudio на твердотельный накопитель (SSD).

· Видеоадаптер с минимальным разрешением 720p (1280 на 720 пикселей); для оптимальной работы VisualStudio рекомендуется разрешение WXGA (1366 на 768 пикселей) или более высокое.

Средаразработки:

Microsoft Visual Studio Community 2017.

Разработка решений по программному обеспечению

1) Функцияintfile_in_guest(guestmas[]) осуществляет считывание из файла “Guest.txt” данных о госте в массив структур mas. Возвращаемое значение функции – количество гостей в файле.

2) Функция intfile_in_nomer(nomernm[]) осуществляет считывание из файла “Nomer.txt” информации о номерах гостиницы. Возвращаемое значение функции – количество номеров в файле.

3) Функцияvoidfile_out_guest(guestmas[], intn)осуществляетзапись в файл массива структур с информацией о гостях.

4) Функцияvoidfile_out_nomer(nomernm[], intm)осуществляет запись в файл массива структур с информацией о номерах.

5) Функцияintdif(guestmas[], int n) возвращает количество дней между двумя датами.

7) Функцияvoidschet(guestmas[], nomernm[], intn)записываетвфайл “Schet”+”ФИО гостя”+”.txt” информацию о клиенте, о занятом номере, стоимость проживания.

ПРИЛОЖЕНИЯ

Приложение 1

«Руководство оператора»

1. Выполнить запуск программы. ВMicrosoft VisualStudioCommunity 2017 это можно выполнить клавишей F5.

2. Выбратьпунктменюизспискапредложенных (рис. 2.2).

3. Пункт меню 1 - «Регистрация гостей» (рис. 2.3). Необходимо заполнить следующие данные:

· Фамилия.

· Имя.

· Отчество.

· Серия паспорта.

· Номер паспорта.

· Дата прибытия выставляется автоматически (текущая дата).

· Дату отъезда вводим сначала день (без нулей впереди, если день от 1 до 9), на новой строке месяц (число от 1 до 12), и на новой строке год (например, 2017).

· Далее появляется список всех свободных номеров.

· Указываем номер номера.

· Затем программа предлагает оформить квитанцию, 1 – да, 2 – нет.

· Нажимаем 1, в этот момент в файл (в той же папке, где “Guest.txt” и “Nomer.txt”) с именем ФИО гостя сохраняются все данные.

4. Пункт меню 2 - «Выбор постояльцев, отъезжающих сегодня» (рис. 2.5).

Для демонстрации работы этого пункта необходимо в файле гостей изменить день отъезда на текущий. На экран выведутся те гости, у которых дата отъезда совпадает с текущей. Далее программа предлагает выбрать одно из двух действий.

5. Выбор пункта 5 – «Освобождение мест». В этом случае все гости, отъезжающие сегодня будут удалены из файла и у номеров гостиницы flag станет равен 0, то есть номер освободится.

6. Выбор пункта 6 – «Оформление задержки с выпиской дополнительной квитанции» (рис. 2.6). Требуется снова ввести ФИО гостя для оформления задержки. Введите новую дату отъезда. Программа предложит оформить новую квитанцию.

7. Выбор пункта меню 3 – «Досрочный отъезд с перерасчетом». На экран выводится список гостей. Затем нужно ввести ФИО гостя для оформления досрочного отъезда. Отъезд может быть не в текущий день, поэтому сразу не оформляем выселение. Если гость хочет уехать сегодня, ставим текущую дату, а затем через пункт меню 2 оформляем его отъезд.

8. Выбор пункта меню 4 – «Поиск гостя». Поиск гостя ведется по ФИО. Если гостя с указанными данными нет, то программа выдаст сообщение об этом.

9. Выбор пункта меню 0 – «Выход». Из программы можно выйти,выбрав пункт меню 0.

Приложение2

«ЛистингисходногокодаИС»

#include<iostream>

#include<string>

#include<ctime>

#include<fstream>

#include <iomanip>

#include <time.h>

#include "Windows.h"

using namespace std;

//Структура "Список номеров"

structnomer

{

intnum; //номер апартамента

stringklass; //класс номера: Standart, Suite(сьют, повышенной комфортности), Lux

intplace; //количество мест в номере

doublecost;//стоимость за сутки

intflag;//признак занят-1, свободен-0

};

//Паспортные данные

structpassport

{

intseria;// серия паспорт

intnumb;//номер паспорта

};

//Структура "Список гостей"

struct guest

{

string fam;//фамилия

string name;//имя

stringotc; //отчество

passport p; //паспортные данные Номер, серия паспорта из отдельной структуры

tmarrival;//дата приезда

tmdepart; //дата отъезда

intnom; //номер в гостинице

};

intfile_in_guest(guest mas[])

{

ifstream fin("Guest.txt");

int i = 0;//счетчик гостей в файле

//считываем циклом while данные из файла

while (fin >> mas[i].fam >> mas[i].name >> mas[i].otc>> mas[i].p.seria>> mas[i].p.numb>> mas[i].arrival.tm_mday>> mas[i].arrival.tm_mon>> mas[i].arrival.tm_year>> mas[i].depart.tm_mday>> mas[i].depart.tm_mon>> mas[i].depart.tm_year>> mas[i].nom)

i++; //увеличиваем количество товаров

int n = i;//сохраняем в n количество товаров в файле

fin.close();//после считывания файл закрываем

return n;

}

intfile_in_nomer(nomer nm[])

{

ifstreamin("Nomer.txt");

int i = 0;//счетчик гостей в файле

//считываем циклом while данные из файла

while (in >> nm[i].num>> nm[i].klass>> nm[i].place >> nm[i].cost >> nm[i].flag)

i++; //увеличиваем количество товаров

int m = i;//сохраняем в n количество товаров в файле

in.close();//после считывания файл закрываем

return m;

}

//запись в файл гостей

voidfile_out_guest(guest mas[], int n)

{

ofstreamfout("Guest.txt");

for (inti = 0; i< n; i++)

fout<< mas[i].fam << ' ' << mas[i].name << ' ' << mas[i].otc<< ' ' << mas[i].p.seria<< ' ' << mas[i].p.numb<< ' ' << mas[i].arrival.tm_mday<< ' ' << mas[i].arrival.tm_mon<< ' ' << mas[i].arrival.tm_year<< ' ' << mas[i].depart.tm_mday<< ' ' << mas[i].depart.tm_mon<< ' ' << mas[i].depart.tm_year<< ' ' << mas[i].nom <<endl;

fout.close();

}

//запись в файл номеров

voidfile_out_nomer(nomer nm[], int m)

{

ofstreamnout("Nomer.txt");

for (inti = 0; i<m; i++)

nout<< nm[i].num<< ' ' << nm[i].klass<< ' ' << nm[i].place << ' ' << nm[i].cost << ' ' << nm[i].flag <<endl;

nout.close();

}

//Функция, определяющая разницу во времени

intdif(guest mas[], int n)

{

struct tm dateBeg, dateEnd;

time_t time1, time2, daysDifference;

dateBeg.tm_sec = 0;

dateBeg.tm_min = 0;

dateBeg.tm_hour = 0;

dateBeg.tm_mday = mas[n].arrival.tm_mday;

dateBeg.tm_mon = mas[n].arrival.tm_mon-1;

dateBeg.tm_year = mas[n].arrival.tm_year-1900;

dateBeg.tm_wday = 0;

dateBeg.tm_yday = 0;

dateBeg.tm_isdst = 0;

dateEnd.tm_sec = 0;

dateEnd.tm_min = 0;

dateEnd.tm_hour = 0;

dateEnd.tm_mday = mas[n].depart.tm_mday;

dateEnd.tm_mon = mas[n].depart.tm_mon-1;

dateEnd.tm_year = mas[n].depart.tm_year-1900;

dateEnd.tm_wday = 0;

dateEnd.tm_yday = 0;

dateEnd.tm_isdst = 0;

time1 = mktime(&dateBeg);

time2 = mktime(&dateEnd);

daysDifference = ((time1 > time2) ? time1 - time2 : time2 - time1) / 86400;

returndaysDifference;

}

voidschet(guest mas[], nomer nm[], int n)

{

doublesc=nm[mas[n].nom - 1].cost*dif(mas, n);

ofstreamfout("Schet "+mas[n].fam+' '+mas[n].name+' '+mas[n].otc+".txt");

fout<<setw(40) << "СЧЁТ" <<endl;

fout<< "Фамилия, имя , отчествогостя:" << mas[n].fam << ' ' << mas[n].name << ' ' << mas[n].otc<<endl;

fout<< "Паспортныеданные:" << mas[n].p.seria<< ' ' << mas[n].p.numb<<endl;

fout<< "Датаприбытия:" << mas[n].arrival.tm_mday<< '.' <<mas[n].arrival.tm_mon<< '.' <<mas[n].arrival.tm_year<<endl;

fout<<"Датаотъезда:"<< mas[n].depart.tm_mday<< '.' <<mas[n].depart.tm_mon<< '.' <<mas[n].depart.tm_year<<endl;

fout<< "Количестводнейпребываниявгостинице:" <<dif(mas, n)<<endl;

fout<< "Стоимость номера(в сутки):" <<nm[mas[n].nom - 1].cost<<endl;

fout<< "Стоимость:" <<sc<<endl;

}

int main()

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

guest mas[1000]; //массивструктур "Гость"

nomernm[1000]; //массив структур "Номер"

inti, n,m;

n = file_in_guest(mas);//считываемгостей

m = file_in_nomer(nm); //считываем номера

cout<<setw(60)<<"ВАС ПРИВЕТСТВУЕТ ПРОГРАММА АДМИНИСТРАТОР ГОСТИНИЦЫ" <<endl;

menu://МЕТКА

cout<< "Выберите требуемый пункт меню, укажите номер" <<endl;

cout<< "1. Регистрация гостей" <<endl;

cout<< "2. Выбор постояльцев, отъезжающих сегодня"<<endl;

cout<< "3. Досрочный отъезд с перерасчетом" <<endl;

cout<< "4. Поиск гостя" <<endl;

cout<< "0. Выход" <<endl;

intkomand;//пункт меню

cin>>komand;

switch (komand)

{

case0: //Выход из меню и программы

{

return 0;

}

case 1:

{

n++;

cout<< "Для регистрации заполните следующие поля:" <<endl;

cout<< "Фамилия:";

cin>> mas[n - 1].fam;

cout<< "Имя:";

cin>> mas[n - 1].name;

cout<< "Отчество:";

cin>> mas[n - 1].otc;

cout<< "Серия паспорта:";

cin>>mas[n - 1].p.seria;

cout<< "Номер паспорта:";

cin>> mas[n - 1].p.numb;

cout<< "Датаприбытия:";

struct tm *tim;

time_ttt = time(NULL);

tim = localtime(&tt);

mas[n - 1].arrival.tm_mday = tim->tm_mday;

mas[n - 1].arrival.tm_mon = tim->tm_mon + 1;

mas[n - 1].arrival.tm_year = tim->tm_year + 1900;

cout<< mas[n - 1].arrival.tm_mday<< '.' <<mas[n - 1].arrival.tm_mon<< '.' <<mas[n - 1].arrival.tm_year;

cout<<endl<< "Датаотъезда:";

cout<< "День:";

cin>> mas[n - 1].depart.tm_mday;

cout<< "Месяц:";

cin>> mas[n - 1].depart.tm_mon;

cout<< "Год:";

cin>> mas[n - 1].depart.tm_year;

cout<< "Свободныеномера:" <<endl;

cout<<setw(7) << "Номер" <<setw(20) << "Класс" <<setw(20) << "Количествомест" <<setw(20) << "Стоимость" <<endl;

for (i = 0; i< m; i++)

if (nm[i].flag == 0)

cout<<setw(7) << nm[i].num<<setw(20) << nm[i].klass<<setw(20) << nm[i].place <<setw(20) << nm[i].cost <<endl;

cout<< " Введитеномер:" <<endl;

cin>> mas[n - 1].nom;

nm[mas[n - 1].nom - 1].flag = 1;

file_out_nomer(nm, m);//запись в файл изменений в номерах

file_out_guest(mas, n);

cout<< "Оформить квитанцию?(yes-нажмите 1, no-нажмите 2)";

int command;

cin>> command;

if (command == 1)

schet(mas, nm, n - 1);

goto menu;

break;

}

case 2:

{

struct tm *today;

time_t t = time(NULL);

today = localtime(&t);

int day = today->tm_mday;

int month = today->tm_mon + 1;

int year = today->tm_year + 1900;

cout<< "Постояльцы, отъезжающие сегодня:" <<endl;

guest mas1[1000];

int j = 0;

for (i = 0; i< n; i++)

if (mas[i].depart.tm_mday == day && mas[i].depart.tm_mon == month && mas[i].depart.tm_year)

cout<<i + 1 << ' ' << mas[i].fam << ' ' << mas[i].name << ' ' << mas[i].otc<< ' ' << mas[i].p.seria<< ' ' << mas[i].p.numb<< ' ' << mas[i].arrival.tm_mday<< '.' <<mas[i].arrival.tm_mon<< '.' <<mas[i].arrival.tm_year<< ' ' << mas[i].depart.tm_mday<< '.' <<mas[i].depart.tm_mon<< '.' <<mas[i].depart.tm_year<< ' ' << mas[i].nom <<endl;

cout<< "Выберите дальнейшее действие:" <<endl;

cout<< "5. Освобождение мест" <<endl;

cout<< "6. Оформление задержки с выпиской дополнительной квитанции" <<endl;

intcom;

cin>>com;

//Освобождение номеров, удаление гостей

if (com == 5)

{

for (i = 0; i< n; i++)

{

if (mas[i].depart.tm_mday == day && mas[i].depart.tm_mon == month && mas[i].depart.tm_year==year)

nm[mas[i].nom - 1].flag = 0;

else

{

mas1[j].fam = mas[i].fam;

mas1[j].name = mas[i].name;

mas1[j].otc = mas[i].otc;

mas1[j].p.seria = mas[i].p.seria;

mas1[j].p.numb = mas[i].p.numb;

mas1[j].arrival.tm_mday = mas[i].arrival.tm_mday;

mas1[j].arrival.tm_mon = mas[i].arrival.tm_mon;

mas1[j].arrival.tm_year = mas[i].arrival.tm_year;

mas1[j].depart.tm_mday = mas[i].depart.tm_mday;

mas1[j].depart.tm_mon = mas[i].depart.tm_mon;

mas1[j].depart.tm_year = mas[i].depart.tm_year;

mas1[j].nom = mas[i].nom;

j++;

}

}

n = j;

file_out_guest(mas1, n);

file_out_nomer(nm, m);

gotomenu;

}

//Оформление задержки

if (com == 6)

{

cout<< "Введите фамилию, имя, отчество гостя для оформления задержки:"<<endl;

strings_fam, s_name, s_otc;

intind;

cin>>s_fam>>s_name>>s_otc;

for (i = 0; i< n; i++)

{

if (mas[i].fam == s_fam&& mas[i].name == s_name&& mas[i].otc == s_otc)

ind = i;

}

cout<< "Данные гостя для оформления задержки:" <<endl;

cout<< ind+1 << ' ' << mas[ind].fam << ' ' << mas[ind].name << ' ' << mas[ind].otc<< ' ' << mas[ind].p.seria<< ' ' << mas[ind].p.numb<< ' ' << mas[ind].arrival.tm_mday<< '.' <<mas[ind].arrival.tm_mon<< '.' <<mas[ind].arrival.tm_year<< ' ' << mas[ind].depart.tm_mday<< '.' <<mas[ind].depart.tm_mon<< '.' <<mas[ind].depart.tm_year<< ' ' << mas[ind].nom <<endl;

cout<< "Введите новую дату отъезда:" <<endl;

cout<< "День:";

cin>> mas[ind].depart.tm_mday;

cout<< "Месяц:";

cin>> mas[ind].depart.tm_mon;

cout<< "Год:";

cin>> mas[ind].depart.tm_year;

file_out_guest(mas, n);

cout<< "Оформить новую квитанцию?(yes-нажмите 1, no-нажмите 2)";

int command;

cin>> command;

if (command == 1)

schet(mas, nm, ind);

}

goto menu;

break;

}

case 3:

{

cout<< "Информация обо всех гостях:" <<endl;

cout<<setw(5) << "№" <<setw(15) << "Фамилия" <<setw(15) << "Имя"<<setw(15) << "Отчество" <<setw(10) << "Серия" <<setw(15) << "№ паспорта " <<setw(15) << "Дата прибытия:" <<setw(15) << "Дата отъезда:" <<setw(10) << "Номер" <<endl;

for (i = 0; i< n; i++)

cout<<setw(5) <<i + 1 <<setw(15) << mas[i].fam <<setw(15) << mas[i].name <<setw(15) << mas[i].otc<<setw(10) << mas[i].p.seria<<setw(13) << mas[i].p.numb<<setw(5) << mas[i].arrival.tm_mday<< '.' <<mas[i].arrival.tm_mon<< '.' <<mas[i].arrival.tm_year<<setw(8) << mas[i].depart.tm_mday<< '.' <<mas[i].depart.tm_mon<< '.' <<mas[i].depart.tm_year<<setw(10) << mas[i].nom <<endl;

cout<< "Введите фамилию, имя, отчество гостя для оформления досрочного отъезда:" <<endl;

strings_fam, s_name, s_otc;

intind;

cin>>s_fam>>s_name>>s_otc;

for (i = 0; i< n; i++)

{

if (mas[i].fam == s_fam&& mas[i].name == s_name&& mas[i].otc == s_otc)

ind = i;

}

cout<< "Данные гостя для оформления досрочного отъезда:" <<endl;

cout<<ind + 1 << ' ' << mas[ind].fam << ' ' << mas[ind].name << ' ' << mas[ind].otc<< ' ' << mas[ind].p.seria<< ' ' << mas[ind].p.numb<< ' ' << mas[ind].arrival.tm_mday<< '.' <<mas[ind].arrival.tm_mon<< '.' <<mas[ind].arrival.tm_year<< ' ' << mas[ind].depart.tm_mday<< '.' <<mas[ind].depart.tm_mon<< '.' <<mas[ind].depart.tm_year<< ' ' << mas[ind].nom <<endl;

cout<< "Введите новую дату отъезда:" <<endl;

cout<< "День:";

cin>> mas[ind].depart.tm_mday;

cout<< "Месяц:";

cin>> mas[ind].depart.tm_mon;

cout<< "Год:";

cin>> mas[ind].depart.tm_year;

file_out_guest(mas, n);

cout<< "Оформить новую квитанцию?(yes-нажмите 1, no-нажмите 2)";

int command;

cin>> command;

if (command == 1)

schet(mas, nm, ind);

goto menu;

cout<<endl;

break;

}

case 4:

{

cout<< "Введитефамилию, имя, отчествогостядляпоиска:" <<endl;

strings_fam, s_name, s_otc;

intind=-1;

cin>>s_fam>>s_name>>s_otc;

for (i = 0; i< n; i++)

{

if (mas[i].fam == s_fam&& mas[i].name == s_name&& mas[i].otc == s_otc)

ind = i;

}

if (ind == -1)

{

cout<< "В базе нет гостя с такими данными"<<endl<<endl;

gotomenu;

}

else

{

cout<< "Данные гостя:" <<endl;

cout<<setw(5) << "№" <<setw(15) << "Фамилия" <<setw(15) << "Имя" <<setw(15) << "Отчество" <<setw(10) << "Серия" <<setw(15) << "№ паспорта " <<setw(15) << "Дата прибытия:" <<setw(15) << "Дата отъезда:" <<setw(10) << "Номер" <<endl;

cout<<setw(5) <<ind + 1 <<setw(15) << mas[ind].fam <<setw(15) << mas[ind].name <<setw(15) << mas[ind].otc<<setw(10) << mas[ind].p.seria<<setw(13) << mas[ind].p.numb<<setw(5) << mas[ind].arrival.tm_mday<< '.' <<mas[ind].arrival.tm_mon<< '.' <<mas[ind].arrival.tm_year<<setw(8) << mas[ind].depart.tm_mday<< '.' <<mas[ind].depart.tm_mon<< '.' <<mas[ind].depart.tm_year<<setw(10) << mas[ind].nom <<endl;

cout<<endl;

}

goto menu;

break;

}

}

system("pause");

return 0;

}

Библиографический список

1. ЗаймовичМахир. Методологический сборник задач для изучения С++ / МахирЗаймович. – Травник: Университет Витез, 2012. – 123 с.

2. Иванова Г.С. Технология программирования: учебник для студ. Вузов / Г.С. Иванова. – М.: Кнорус, 2011. – 333, [3] с.

3. Кислицкая И.С. Основы алгоритмизации и программирования: структурный подход: учебно-методическое пособие / И.С. Кислицкая – Липецк: ЛГПУ, 2011. – 37, [1] с.

4. Кононова З.А. Методика подготовки и оформления курсового проекта по дисциплине «Программирование» (для студентов 3 курса, специальность 030100 «Информатика»): Учебное пособие / З.А. Кононова, С.О. Алтухова – Липецк: ЛГПУ, 2009. – 16 с.

5. Лаптев В.В. С++. Объектно-ориентированное программирование: учеб. Пособие / В.В. Лаптев. -СПб.: Питер, 2008. - 457, [7] с.

6. Морозов М.А. Информационные технологии в социально-культурном сервисе и туризме. Оргтехника / М.А. Морозова, Н.С. Морозова – М.: Издательский центр «Академия», 2005. – 240 с.

7. Романов Е.Л.Практикум по программированию на С++ / Е.Л. Романов. - СПб.: «БХВ-Петербург», 2004. - 426, [6] с.

Наши рекомендации