Разработка решений по информационному обеспечению ИС
Принципы организации информационного обеспечения ИС
Для организации хранения данных в информационной системе используются три структуры:
Структура «Список гостей»
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] с.