Разработка и тестирование программного модуля

Разработка программного модуля для отслеживания стоимости междугородних телефонных переговоров с целью облегчения работы администратора гостиницы. Описание данных, используемых при решении задачи. Код программы и ее тестирование. Руководство программиста.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 16.06.2014
Размер файла 2,9 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Содержание

Введение

1 Проектирование программного модуля

1.1 Постановка задачи

1.2 Математическое (логическое) описание задачи

1.3 Описание данных, используемых при решении задачи

2 Разработка программного модуля

2.1 Структура программного модуля

2.2 Описание разработанной программы

3 Тестирование программного модуля

4 Руководство программиста

Заключение

Список использованных источников

Приложения

Приложение А. Код программы

Введение

В современном мире компьютерные технологии играют важную роль во всех отраслях. Компьютеры используются повсеместно - в банках, научных организациях, финансовых учреждениях, машиностроительных предприятиях, домах, гостиницах и отелях. Они используются для различных целей - от проведения простых вычислений, игр и формального набора текстовых документов до проектирования различных задач, моделирования, работы со сложнейшей графикой.

Компьютеры в своей работе используют инженеры, конструкторы, администраторы, писатели, художники, композиторы и музыканты. На базе компьютеров созданы самые совершенные медицинские приборы. Без компьютеров сегодня невозможно создание промышленных роботов, автоматических линий. Положено начало применению персональных компьютеров в обучении.

Компьютерные технологии - одна из самых молодых наук и, возможно, самая быстроразвивающаяся. Буквально за 20 лет компьютеры стали неотъемлемой частью практически любой сферы деятельности человека. Они быстро эволюционировали из громоздких, дорогих, ненадежных, медленно работающих машин в компактные недорогие и, что самое главное, быстрые и надежные устройства. Современный персональный компьютер в десятки раз мощнее первых ПК, не говоря уже вообще о первых компьютерах. Современный ПК позволяет проводить сложнейшие расчеты, работать с графикой, выполнять моделирование и просто послушать музыку или посмотреть фильмы.

В настоящее время для ПК разработано огромное количество программ, позволяющих выполнять различные функции с минимальным участием пользователя. Одним из достоинств программ является полная ориентация на пользователя. Максимальная функциональность и удобство интерфейса программы - вот основные требования, предъявляемые к разработчикам программных продуктов. Начинающему работу за компьютером человеку должно быть понятно, как обращаться с программой и ее основными функциями. Чтобы дать разработчикам программ возможность разрабатывать такое программное обеспечение, необходимо создавать соответствующие языки программирования.

Языки программирования развивались параллельно с компьютерами. Первым языком программирования был машинный код, который использовался для пробивания перфокарт к первым компьютерам, но он требовал огромных познаний в области организации компьютеров. Затем был придуман Assembler, который очень сильно облегчил работу программистам. Однако и он оставался машинно-ориентированным языком. На смену ему пришли более простые Pascal и С, а затем Basic, C++, Delphi, С++ Builder. На сегодняшний день наиболее популярен язык программирования С++ Builder, основанный на языке С. Этот язык наиболее прост и понятен. С++Builder называют объектно-ориентированным языком программирования. Большинство современных приложений разрабатывается именно на этом языке.

1 Проектирование программного модуля

1.1 Постановка задачи

программный модуль тестирование

Задачей является отслеживание стоимости междугородних телефонных переговоров.

Абонентами компании являются юридические лица. Имеющие телефонную точку, ИНН, расчетный счет в банке. Стоимость переговоров зависит от города, в который осуществляется звонок, и времени суток (день, ночь). Каждый звонок абонента автоматически фиксируется в базе данных. При этом запоминаются город, дата, длительность разговора и время суток.

Классы объектов:

Абоненты (Номер телефона, ИНН, Адрес).

Города (Название, Тариф дневной, тариф ночной).

Переговоры (Абонент, Город, Дата, Количество минут, Время суток).

Ввести систему скидок. Стоимость минуты уменьшается в зависимости от длительности разговора. Размер скидки для каждого города разный.

Программное обеспечение разработано для функционирования в операционной системе Windows, в связи с её популярностью и востребованностью на рынке.

Для разработки программного модуля использовалась объектно-ориентированная система визуального программирования C++Builder, Microsoft Visual C# и Microsoft Visual C++.

Целью разработки является написание программы облегчающей работу администратора гостиницы. Которая позволяет без значительных усилий производить учет приезда и отъезда гостей в номера, производить мониторинг номеров, составлять чеки. При использовании компьютерных средств значительно уменьшается время обработки информации, а так же повышается надёжность хранения данных.

При решении задачи необходимо выполнить следующие требования к программному продукту, программа должна быть: удобной в использовании, функциональной, удовлетворять ГОСТам, иметь понятный и удобный интерфейс.

Программный продукт должен соответствовать требованиям заказчика, а именно: содержать список номеров и гостей, производить поселение и регистрацию гостей с оформлением чеков, осуществлять очистку номеров и выселение гостей. Программа должна содержать главное меню, контекстное меню, справочную систему и иметь простой и интуитивно понятный интерфейс.

1.2 Математическое (логическое) описание задачи

Для корректного функционирования разрабатываемого программного обеспечения оно должно состоять из двух структур данных: о гостях, о номерах. Структура данных о номерах должна включать следующие поля: номер, класс номера, количество мест, стоимость проживания, занятость. В свою очередь структура данных о гостях имеет следующие поля: фамилия, имя, отчество, дата прибытия, дата отъезда, номер.

Описание полей структуры данных о гостях:

- «фамилия» - в данном поле необходимо хранить фамилию гостя;

- «имя» - в данном поле необходимо хранить имя гостя;

- «отчество» - в данном поле необходимо хранить отчество гостя;

- «дата прибытия» - хранит дату прибытия гостя в номер;

- «дата отъезда» - хранит дату освобождения номера гостем;

- «номер» - хранит информацию о том, в какой номер будет поселён гость;

Описание полей структуры данных о номерах:

- «номер» - храниться информация о названии номера в гостинице;

- «количество мест» - храниться информация о количестве мест в номере;

- «стоимость проживания» - в данном поле необходимо хранить информацию о стоимости проживания в номере за сутки;

- «класс номера» - хранит информацию о принадлежности номера к определённому классу комфорта;

- «занятость» - содержит информацию о занятости номера каким либо гостем, если номер не занят то данное поле содержит значение «free»;

Так же необходимо наличие бинарного файла, который должен находиться в папке с программой. Возможность обращения к файлу является основным условием для выполнения, данного программного продукта.

1.3 Описание данных, используемых при решении задачи

Данное программное обеспечение предоставляет возможность ввода данных с клавиатуры. Информация, поступающая таким образом, записывается в поля структур данных, а затем в файл. Для корректности ввода, для всех полей определён тип char и bool:

1) Фамилия (Fam) - поле типа char[].

2) Имя (Name) - поле типа char[].

3) Отчество (Otch) - поле типа char[].

4) Дата прибытия (DataPr) - поле типа char[].

5) Дата отъезда (DataOt) - поле типа char[].

6) Номер (Nomer) - поле типа char[].

7) Класс номера (Class) - поле типа char[].

8) Количество мест в номере (KolMest) - поле типа char[].

9) Стоимость проживания в номере (Stoim) - поле типа char[].

10) Гость, проживающий в номере (Guest) - поле типа char[].

11) Отметка о том, что гость уехал (Del) - поле типа bool.

Вывод информации программой разделён на два раздела: вывод информации о гостях и вывод информации о номерах.

В разработанном приложении «Отдел кадров» используются следующие типы данных:

- GuestC - данный тип является пользовательским и является структурой данных; содержит 7 полей типа char[] и поле типа bool. В данном типе хранятся все данные гостях гостиницы;

- NomerC - данный тип является пользовательским и является структурой данных; содержит 5 полей типа char[]. В данном типе хранятся все данные номерах гостиницы;

- char[] - массив из элементов типа char, позволяет хранить текстовые данные. В программе данный тип служит для хранения одного из полей данных сотрудника;

- bool - логический тип данных, который может принимать одно из двух значений true или false. Данный тип в программе используется для создания флагов и меток на удаление.

2 Разработка программного модуля

2.1 Структура программного модуля

В программном продукте «Администратор гостиницы» исходными данными являются сведения о сотрудниках предприятия. Данные извлекаются из файла, затем заносятся в поля соответствующих структур и при необходимости выводятся на экран.

В приложении, написанном на языке программирования C++Builder, данные отображаются в сетке StringGrid. Ввод данных осуществляется посредствам компонентов Edit и ComboBox.

Конечным результатом выполнения программы являются сохраненные в бинарном файле данные, а так же текстовые файлы, содержащие ведомости и чеки.

После загрузки программы, на экране отображается главная форма (либо меню консольного приложения). Программа выполняется до тех пор пока не будет закрыта пользователем. Постоянное функционирование программы достигается путём реализации бесконечного повторения цикла, отображающего главное меню и ожидающего действий пользователя.

Приложение выполняет следующие функции: отображение данных; добавление данных; удаление данных; хранение данных в файле.

Алгоритм отображения данных:

- Данные извлекаются из файлов в соответствующие поля массива структур данных.

- Данные из массивов структур отображаются в сетке StringGrid (В консольных вариантах, данные выводятся списком).

Добавление данных организовано в соответствии со следующим алгоритмом:

- Ввод пользователем данных в соответствующие поля.

- Проверка корректности введённых данных.

- Добавление данных, при условии корректного ввода.

Удаление данных реализовано по следующему алгоритму:

- Определение формата удаления.

- Ввод данных на увольнение.

- Проверка наличия данных в таблице.

- Удаление данных, при условии совпадения вводимых и текущих данных

Сохранение данных в файле выполняется по следующему алгоритму:

- Создание либо открытие бинарного файла на перезапись.

- Извлечение данных из массивов структур данных в файл, путем бинарной записи.

- Запись считаных данных в файл блоками определённого размера.

- Закрытие файла.

Схема алгоритма главной программы

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

Схема алгоритма главной программы

Схема алгоритма загрузки данных из файлов

Схема алгоритма отображения данных предоставлена в соответствии с рисунком

Размещено на http://www.allbest.ru/

Схема алгоритма отображения данных

Схема алгоритма добавления данных предоставлена в соответствии с рисунком

Размещено на http://www.allbest.ru/

Схема алгоритма добавления данных

Схема алгоритма сохранения данных предоставлена в соответствии с рисунком

Размещено на http://www.allbest.ru/

Схема алгоритма сохранения данных

Схема алгоритма удаления данных.

2.2 Описание разработанной программы

Данная программа была разработана на трех языках программирования: Microsoft Visual C++ (консольное приложение), С++ Builder, Microsoft Visual C#(консольное приложение) для реализации возможности автоматизированного ввода информации по сотрудникам предприятия, с целью последующего хранения данной информации, её обработки, а так же для оперативного доступа к уже имеющейся в базе данных информации.

Общий интерфейс программы достаточно прост, пользователю знакомому с Windows, не составит большого труда научиться работать с ней.

Для того чтобы выполнить какую-либо операцию необходимо нажать соответствующую кнопку.

Программы, в соответствии с поставленными задачами, работают при помощи обработки файлов содержащих структуру данных. Обработка данных содержит следующие пункты: добавление записи, удаление записи, вывод информации пользователю.

Особенность выполнения консольного приложения написанного в Microsoft Visual C++ и Visual C#, заключается в том, что диалог пользователя и программного обеспечения происходит посредством ввода в строку консоли необходимых значений в соответствии с рисунком.

Консольное приложение Microsoft Visual C++

Программа реализованная в среде С++ Builder, имеет отличие от аналогичных программ реализованных на языках С++ и С# лишь в том, что она имеет графический интерфейс, а так же ввод и вывод происходит посредствам графических компонентов в соответствии с рисунком 2.

Приложение написанное в С++Builder.

3 Тестирование программного модуля

Тестирование программы можно произвести в три этапа.

1. Тестирование устойчивости. Проверялась реакция программы на некорректный ввод данных, значения которых выходят за допустимый диапазон.

Программа «Администратор гостиницы» реализована таким образом, что пользователю не предоставляется возможности ввода некорректных данных в поля ввода информации. Данная особенность реализована при помощи использования компонентов ComboBox со свойством style равным DropDownList, которое предотвращает ввод данных. Так же активно используется компонент DataTimePicker который так же не позволяет производить ввод данных, возможен лишь выбор из существующих значений. В полях Edit существует проверка ввода данных, что не позволяет вводить данные из недопустимого диапазона. Результаты тестирования устойчивости представлены в приложении В.

2. Тестирование функциональности. Выполнялась проверка правильности предоставленной информации. Данные во всех случаях успешно проверены.

3. Тестирование применимости. Выполнялась проверка удовлетворения способов использования требованиям задания (время реакции приложения на команды пользователя, понятность интерфейса, устойчивость вычислительного процесса).

Таблица 1 Отчёт выполнения тестирования

П/п

Этап тестирования

Ошибки

Отметка выполнения

1

Тестирование устойчивости

Нет

Выполнено

2

Тестирование функциональности

Нет

Выполнено

3

Тестирование применимости

Нет

Выполнено

Тестирование программы осуществлялось на персональном компьютере

со следующими техническими характеристиками:

- Процессор - Intel Pentium Dual CPU T2390 1.86GHz 1,87GHz;

- Оперативная память - DDR2 2.00 ГБ;

- Видеокарта - Mobile Intel 965 Express Chipset Family;

- Операционная система - Windows 7 Максимальная Service Pack 1;

При тестировании программы нарушений в работе программы не наблюдалось. Ввод и вывод данных выполняется корректно. Вычислительный процесс устойчив.

4 Руководство программиста

Программа «Администратор гостиницы» применяется для учета гостей в гостиницах. Область применения ограничена гостиницами, отелями и другими учреждениями подобного типа.

Программный модуль реализован на языках программирования C++, C++ Bulder и C#. Все данные используемые в процессе выполнения программы данные хранятся в бинарных файлах. Поля массива структур данных о гостях Guests заносятся в файл guest.dat, логическое имя данного файла в коде программы GUEST. Поля массива структур данных о номерах Nomers заносятся в файл nomer.dat, логическое имя данного файла в коде программы NOMER. Так же используются файлы хранящие величины равные количеству гостей и номеров, для учета количества гостей используется файл kolg, для учета количества номеров используется файл koln, в процессе программы данные их этих файлов заносятся в переменные типа int KolG и KolN соответственно. В начале программы данные извлекаются из файла в переменные и поля массивов структур, далее производиться работа только с переменными и полями массивов структур. При завершении работы программы пользователю предлагается произвести сохранение изменений в файл. При положительном ответе файлы хранящие данные перезаписываются, и хранят уже измененные данные.

Ограничениями в области использования программ могут выступать системные требования, связанные с операционной системой, данный продукт разработан под операционную систему Windows, и не имеет возможности запуска на MacOS, Unix, Linux и иных операционных системах.

Руководство пользователя

Пользователю предлагается удобное в использовании программное обеспечение, имеющее простой, и интуитивно понятный интерфейс. Для запуска программы необходимо запустить файл Hotel.exe находящийся в корневой директории программы.

При открытии файла Hotel.exe приложения разработанного в среде Microsoft Visual C++ появляется окно консоли в соответствии с рисунком

Приложение, написанное в Microsoft Visual C++

Для добавления информации в структуры необходимо выбрать соответствующие пункты меню, т.е. «2» либо «5», в зависимости от потребности пользователя. После чего появится диалог ввода данных выбранного пункта меню в соответствии с рисунком 11 и рисунком 12.

Меню добавления нового сотрудника

Меню добавления нового номера

Для отображения информации о гостях, необходимо выбрать пункт меню «1» и нажать клавишу enter. На экране в строку отобразится информация о гостях в соответствии с рисунком 13.

Отображение списка гостей

Для отображения информации о номерах, необходимо выбрать пункт меню «5» и нажать клавишу enter. На экране в строку отобразится информация о номерах в соответствии с рисунком

Отображение списка номеров

Для произведения удаления гостя из номера необходимо нажать выбрать пункт меню «3», либо «6» в зависимости от потребности пользователя, и нажать клавишу enter. После чего появится диалог ввода данных выбранного пункта меню в соответствии с рисунком 15 и рисунком 16, а затем будут отображены сообщения, свидетельствующие об успешном удалении гостя в соответствии с рисунком 17 и рисунком 18.

Отображение меню удаления гостя по фамилии

Отображение меню очистки номера

Отображение сообщения об успешном удалении

Отображение сообщения об успешном удалении

Нажатие клавиши «7» и последующее нажатие клавиши enter приведёт к вызову меню «Выход из программы», в котором пользователю будет предоставлен выбор о сохранении изменённых данных в состоявшейся сессии в соответствии с рисунком и независимо от выбора пользователя прилажение будет закрыто.

Отображение пункта меню «выход из программы"

Для запуска приложения реализованного в среде C++Builder, необходимо запустить файл Hotel.exe, находящийся в корневой директории программы.

После открытия файла Hotel.exe, откроется главная форма программы, представленная в соответствии с рисунком

Главная форма приложения «Администратор гостиницы»

Для добавления нового номера, необходимо нажать на кнопку «Добавить номер», либо «Номера - Добавить номер», после чего следует внести данные в текстовые поля, и нажать кнопку «Ок» в соответствии с рисунком.

Для поселения поступившего гостя в номер необходимо выбрать пункт меню «Приехал гость», либо «Гости - Приехал гость». После чего следует внести данные в текстовые поля и нажать клавишу «Ок», в соответствии с рисунком 22, далее автоматически отобразиться панель формирования чека, в соответствии с рисунком 23. После нажатия кнопки «Ок» программа автоматически создаст текстовый файл с чеком в корневой директории программы.

Меню «Добавить номер»

Меню «Приехал гость»

Меню «Формирование чека»

Для удаления гостя следует выбрать пункт меню «Очистить номер», либо «Уехал гость» расположенные на основной форме программы. Так же можно использовать пункты меню «Номера - Очистить номер», либо «Гости - Уехал гость» расположенные в главном меню программы. После выполнения этих действий будет отображена форма удаления, в соответствии с рисунком. Заполнение текстовых полей и нажатие кнопки «Ок» приведёт к удалению гостя из гостиницы.

Меню «Очистка номера», «Уехал гость»

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

Отображение таблиц данных.

Для сохранения ведомости, необходимо выбрать пункт меню «Файл - Сохранить в виде ведомости». После чего программа автоматически создаст текстовый файл в корневой директории программы.

Для сохранения изменений внесённый при работе программы необходимо выбрать пункт меню «Файл - Сохранить изменения».

Выбор пункта меню «Справка - О разработчике» приведёт к отображению панели отображающей информацию о разработчике данной программы, в соответствии с рисунком.

Отображение информации о разработчике

Заключение

В результате выполнения курсового проекта была разработана программа для упрощения работы администратора гостиницы: «Учет телефонных разговоров».

Кроме этого были расширены некоторые знания из данной предметной области и укреплены знания объектно-ориентированных языков программирования C/C++, C++Builder, C#. При реализации проекта были пройдены этапы описания и постановки задачи, кодирования программы на алгоритмический язык и тестирования полученного приложения.

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

Список использованных источников

1 Бен Ватсон C# на примерах.: «БХВ-Петербург», 20011 г. - 608 с.

2 ГОСТ 19.402-2000 ЕСПД. Описание программы.

3 ГОСТ 19.404-79 ЕСПД. Пояснительная записка. Требования к содержанию и оформлению.

4 ГОСТ 19.504-79 ЕСПД. Руководство программиста. Требования к содержанию и оформлению.

5 ГОСТ 19.505-79 ЕСПД. Руководство оператора. Требования к содержанию и оформлению.

6 Дж. Коплиен. Программирование в C++ «Бином - Пресс», 2008 г. - 480 с.

7 Культин, Н. Б. С/С++ в задачах и примерах / Н. Б. Культин. - СПб.:

БХВ-Петербург, 2002. - 592 с.

8 Методические рекомендации для учащихся по выполнению курсового

проекта по дисциплине "Конструирование программ и языки програмирования", 2012.

9 Мэтью Мак-Дональд Silverlight 3 с примерами на C# для профессионалов: Вильямс, 2010 г.- 656 с.

10 Павловская, Т. А. С/С++. Программирование на языке высокого

уровня: учебник / Т. А.Павловская. - СПб.: Питер, 2006. - 461 с.

11 Пономарев В Программирование на C++/C# в Visual Studio .NET 2003:«БХВ-Петербург», 2004 г. - 352 с.

Приложение А

Код программы реализованной на языке C++ (Консольное )

#include "stdafx.h"

#include <iostream>

#include <stdio.h>

#include <windows.h>

#include <string.h>

#include <conio.h>

#include <locale.h>

using namespace std;

class NomerC

{

public:

char Nomer[7];

char Class[10];

char KolMest[5];

char Stoim[10];

char Guest[30];

};

class GuestC

{

public:

char Fam[30];

char Name[20];

char Otch[20];

char DataPr[15];

char DataOt[15];

char Nomer[7];

bool Del;

};

int menu()

{

char ch;

int m=0;

cout<<"\n------------------------------------------------\nМЕНЮ ПРОГРАММЫ:\t\t\t\t\t|\n 1-Гости\t\t4-Номера\t\t| \n 2-Приехал гость\t5-Добавить номер\t| \n 3-Уехал гость\t\t6-Очистить номер\t| \n 7-Выход\t\t\t\t\t|\n------------------------------------------------"<<endl;

cin>>ch;

m=(int)ch;

if((m==49)||(m==50)||(m==51)||(m==52)||(m==53)||(m==54)||(m==55))

return m;

else

{

system("cls");

cout<<"Такого пункта меню не существует, введите другой пункт\n";

m=menu();

}

}

int main()

{

setlocale(LC_ALL,"Russian");

class GuestC Guests[50];

class NomerC Nomers[50];

FILE *GUEST; FILE *NOMER; FILE *KOLG; FILE *KOLN;

int m=0,KolG=0,KolN=0,i=0;

char BufNomer[7];

char free[30];

strcpy(free,"free");

//ЗАГРРУЗКА КОЛИЧЕСТВА ГОСТЕЙ

if(fopen("kolg.dat","rb")!=0)

{

KOLG=fopen("kolg.dat","rb");

fread(&KolG,sizeof(KolG),1,KOLG);

fclose(KOLG);

//cout<<"\nНа данный момент в гостинице: "<<KolG<<" гостей";

}

else

{

KOLG=fopen("kolg.dat","ab");

fclose(KOLG);

}

//ЗАГРРУЗКА КОЛИЧЕСТВА НОМЕРОВ

if(fopen("koln.dat","rb")!=0)

{

KOLN=fopen("koln.dat","rb");

fread(&KolN,sizeof(KolN),1,KOLN);

fclose(KOLN);

//cout<<"\nНа данный момент в гостинице: "<<KolN<<" номеров";

}

else

{

KOLN=fopen("koln.dat","ab");

fclose(KOLN);

}

//ЗАГРУЗКА СТРУКТУРЫ ГОСТИ!

if(fopen("guest.dat","rb")!=0)

{

GUEST=fopen("guest.dat","rb");

fread(&Guests, sizeof(Guests), 1, GUEST);

fclose(GUEST);

}

//ЗАГРУЗКА СТРУКТУРЫ НОМЕРА!

if(fopen("nomer.dat","rb")!=0)

{

NOMER=fopen("nomer.dat","rb");

fread(&Nomers, sizeof(Nomers), 1, NOMER);

fclose(NOMER);

}

//`````````````````````````````````````````````````````````````НАЧАЛО ПРОГРАММЫ

//system("cls");

cout<<"\nПрограмма готова к работе, выберите пункт меню";

m=menu();

while(true)

{

if(m==49) //Отображение структуры ГОСТИ

{

system("cls"); //

cout<<"ГОСТИ:\n";

cout<<"\n________________________________________________________________________________\n";

for(i=1;i<=KolG;i++)

{

if(Guests[i].Del==false)

{

cout<<"ФИО: " <<Guests[i].Fam<<" "<<Guests[i].Name<<" "<<Guests[i].Otch;

cout<<"\nДата прибытия: " <<Guests[i].DataPr;

cout<<"\tДата отправки: " <<Guests[i].DataOt;

cout<<"\tНомер: " <<Guests[i].Nomer;

cout<<"\n________________________________________________________________________________\n";

}

}

m=menu();

}

else if(m==52)//Отображение структуры НОМЕРА

{

system("cls");

cout<<"НОМЕРА:\n";

cout<<"\n________________________________________________________________________________\n";

for(i=1;i<=KolN;i++)

{

cout<<"Номер: "<<Nomers[i].Nomer;

cout<<"\tКласс: "<<Nomers[i].Class;

cout<<"\tМест: "<<Nomers[i].KolMest;

cout<<"\tСтоимость: "<<Nomers[i].Stoim;

cout<<"\tЗанятость: "<<Nomers[i].Guest;

cout<<"\n________________________________________________________________________________\n";

}

m=menu();

}

else if(m==50)//Добавить гостя

{

bool flag=false;

char FamB[30];char NameB[20];char OtchB[20];char DataPrB[10];char DataOtB[10];char NomerB[7];

system("cls");

cout<<"Добавление нового гостя.";

KolG++;

cout<<"\nФамилия: "; cin>>FamB;

cout<<"\nИмя: "; cin>>NameB;

cout<<"\nОтчество: "; cin>>OtchB;

cout<<"\nДата прибытия: "; cin>>DataPrB;

cout<<"\nДата отправки "; cin>>DataOtB;

cout<<"\nНомер: "; cin>>NomerB;

//проверка свободен ли номер

for(i=1;i<=KolN;i++)

{

if(strcmp(Nomers[i].Nomer,NomerB)==0) //Если есть такой номер

{

if(strcmp(Nomers[i].Guest,free)==0)

{

flag=true;

strcpy(Nomers[i].Guest,FamB); //добавить в структуру "номер" поле ФАМИЛИЯ из гостя

break;

}

else

{

flag=false;

}

}

else

{

flag=false;

}

}

if(flag)

{

strcpy(Guests[KolG].Fam,FamB);

strcpy(Guests[KolG].Name,NameB);

strcpy(Guests[KolG].Otch,OtchB);

strcpy(Guests[KolG].DataPr,DataPrB);

strcpy(Guests[KolG].DataOt,DataOtB);

strcpy(Guests[KolG].Nomer,NomerB);

Guests[KolG].Del=false;

}

else

{

KolG--;

cout<<"Такого номера не существует либо он занят другим гостем";

}

//system("cls");

m=menu();

}

else if(m==53) //Добавить номер

{

system("cls");

bool sovpad=false;

KolN++;

cout<<"Добавление нового номера.";

cout<<"\nНомер: "; cin>>BufNomer;

sovpad=false;

for(i=1;i<=KolN;i++)

{

if(strcmp(Nomers[i].Nomer,BufNomer)==0)

{

cout<<"Номер с таким названием уже существует!";

KolN--;

sovpad=true;

break;

}

}

if(!sovpad)

{

strcpy(Nomers[KolN].Nomer,BufNomer);

cout<<"\nКласс: "; cin>>Nomers[KolN].Class;

cout<<"\nМест: "; cin>>Nomers[KolN].KolMest;

cout<<"\nСтоимость: "; cin>>Nomers[KolN].Stoim;

strcat(Nomers[KolN].Stoim," p.");

strcpy(Nomers[KolN].Guest,free);

system("cls");

}

m=menu();

}

else if(m==51) //Гость уехал

{

bool flag=false;

char FamDel[30];

int ipaste=0;

system("cls");

cout<<"Введите фамилию для удаления:\n";

cin>>FamDel;

for(i=1;i<=KolG;i++)

{

if(strcmp(Guests[i].Fam,FamDel)==0)

{

system("cls");

ipaste=i;

Guests[i].Del=true;

flag=false;

break;

}

else

{

flag=true;

}

}

if (flag)

{

system("cls");

cout<<"Гостя с такой фамилией нет в гостинице";

}

for(i=1;i<=KolN;i++)

{

if(strcmp(Nomers[i].Guest,FamDel)==0)

{

cout<<"Гость с фамилией "<<FamDel<<" покинул номер "<<Guests[ipaste].Nomer;

strcpy(Nomers[i].Guest,free);

break;

}

}

m=menu();

}

else if(m==54) //ОЧИСТИТЬ НОМЕР

{

system("cls");

bool flag=false;

char NomerDel[7];

int ipaste=0;

system("cls");

cout<<"Введите номер который нужно очистить:\n";

cin>>NomerDel;

for(i=1;i<=KolN;i++)

{

if(strcmp(Nomers[i].Nomer,NomerDel)==0)

{

system("cls");

ipaste=i;

strcpy(Nomers[i].Guest,free);

flag=false;

break;

}

else

{

flag=true;

}

}

if (flag)

{

system("cls");

cout<<"Такого номера не существует, либо он свободен.";

}

for(i=1;i<=KolG;i++)

{

if(strcmp(Guests[i].Nomer,NomerDel)==0)

{

cout<<"Номер "<<NomerDel<<" свободен. Прежде в нем находился гость "<<Guests[i].Fam;

Guests[i].Del=true;

}

}

m=menu();

}

else if(m==55) //ВЫХОД

{

int yn=1;

system("cls");

cout<<"Сохранить внесённые изменения в БД?\n1-ДА \t0-НЕТ\n"; cin>>yn;

if (yn!=0)

{

GUEST=fopen("guest.dat","wb");

fwrite(&Guests, sizeof(Guests), KolG, GUEST);

fclose(GUEST);

NOMER=fopen("nomer.dat","wb");

fwrite(&Nomers, sizeof(Nomers), KolN, NOMER);

fclose(NOMER);

KOLG=fopen("kolg.dat","wb");

fwrite(&KolG,sizeof(KolG),1,KOLG);

fclose(KOLG);

KOLN=fopen("koln.dat","wb");

fwrite(&KolN,sizeof(KolN),1,KOLN);

fclose(KOLN);

}

exit(0);

}

}

}

Код программы реализованной на языке C# (Консольное )

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Runtime.Serialization.Formatters.Binary;

using System.Runtime.Serialization;

using System.IO;

namespace Hotel_Console

{

class Program

{

[Serializable]

public struct NomerC

{

public String Nomer;

public String Class;

public String KolMest;

public String Stoim;

public String Guest;

};

[Serializable]

public struct GuestC

{

public String Fam;

public String Name;

public String Otch;

public String DataPr;

public String DataOt;

public String Nomer;

public bool Del;

};

public static void SerializeNomer(NomerC [] Nomers)

{

FileStream fs = new FileStream("nomer.dat", FileMode.Create, FileAccess.Write);

BinaryFormatter formatter = new BinaryFormatter();

try

{

formatter.Serialize(fs, Nomers);

}

catch (SerializationException e)

{

Console.WriteLine("Failed to serialize. Reason: " + e.Message);

throw;

}

finally

{

fs.Close();

}

}

public static void DeserializeNomer(ref NomerC[] Nomers)

{

Nomers = null;

FileStream fs = new FileStream("nomer.dat", FileMode.Open, FileAccess.Read);

try

{

BinaryFormatter formatter = new BinaryFormatter();

Nomers = (NomerC[])formatter.Deserialize(fs);

}

catch (SerializationException e)

{

Console.WriteLine("Ошибка открытия файла, причина: " + e.Message);

throw;

}

finally

{

fs.Close();

}

}

public static void SerializeGuest(GuestC[] Guests)

{

FileStream fs = new FileStream("guest.dat", FileMode.Create, FileAccess.Write);

BinaryFormatter formatter = new BinaryFormatter();

try

{

formatter.Serialize(fs, Guests);

}

catch (SerializationException e)

{

Console.WriteLine("Failed to serialize. Reason: " + e.Message);

throw;

}

finally

{

fs.Close();

}

}

public static void DeserializeGuest(ref GuestC[] Guests)

{

Guests = null;

FileStream fs = new FileStream("guest.dat", FileMode.Open, FileAccess.Read);

try

{

BinaryFormatter formatter = new BinaryFormatter();

Guests = (GuestC[])formatter.Deserialize(fs);

}

catch (SerializationException e)

{

Console.WriteLine("Ошибка открытия файла, причина: " + e.Message);

throw;

}

finally

{

fs.Close();

}

}

[STAThread]

static void Main(string[] args)

{

NomerC [] Nomers=new NomerC[50];

GuestC [] Guests=new GuestC[50];

int m=0,KolG=0,KolN=0,i=0;

String BufNomer;

if (File.Exists("nomer.dat") && File.Exists("guest.dat"))

{

DeserializeNomer(ref Nomers);

DeserializeGuest(ref Guests);

}

if (File.Exists("koln.dat") && File.Exists("kolg.dat"))

{

FileStream KolNRead = new FileStream("koln.dat", FileMode.Open, FileAccess.Read);

BinaryFormatter stream3 = new BinaryFormatter();

KolN = (int)stream3.Deserialize(KolNRead);

FileStream KolGRead = new FileStream("kolg.dat", FileMode.Open, FileAccess.Read);

BinaryFormatter stream4 = new BinaryFormatter();

KolG = (int)stream4.Deserialize(KolGRead);

}

//>>>>> Меню

Console.WriteLine("\n------------------------------------------------\nМЕНЮ ПРОГРАММЫ:\t\t\t\t\t|\n 1-Гости\t\t4-Номера\t\t| \n 2-Приехал гость\t5-Добавить номер\t| \n 3-Уехал гость\t\t6-Очистить номер\t| \n 7-Выход\t\t\t\t\t|\n------------------------------------------------");

m = Convert.ToInt32(Convert.ToChar(Console.ReadLine()));

//>>>>>>Выбор пункта меню.

metka:

switch (m)

{

case '1'://Отобразить гостей

{

Console.Clear();

Console.WriteLine("ГОСТИ:\n");

Console.WriteLine("\n________________________________________________________________________________\n");

for (i = 1; i <= KolG; i++)

{

if (Guests[i].Del == false)

{

Console.Write("ФИО:{0} {1} {2}",Guests[i].Fam ,Guests[i].Name,Guests[i].Otch);

Console.Write("\nДата прибытия: " + Guests[i].DataPr);

Console.Write("\tДата отправки: " + Guests[i].DataOt);

Console.Write("\tНомер: " + Guests[i].Nomer);

Console.Write("\n________________________________________________________________________________\n");

}

}

Console.WriteLine("\n------------------------------------------------\nМЕНЮ ПРОГРАММЫ:\t\t\t\t\t|\n 1-Гости\t\t4-Номера\t\t| \n 2-Приехал гость\t5-Добавить номер\t| \n 3-Уехал гость\t\t6-Очистить номер\t| \n 7-Выход\t\t\t\t\t|\n------------------------------------------------");

m = Convert.ToInt32(Convert.ToChar(Console.ReadLine()));

goto metka;

}

case '4'://Отобразить номера

{

Console.Clear();

Console.WriteLine("НОМЕРА:\n");

Console.WriteLine("\n________________________________________________________________________________\n");

for (i = 1; i <= KolN; i++)

{

Console.Write("Номер: " + Nomers[i].Nomer);

Console.Write("\tКласс: " + Nomers[i].Class);

Console.Write("\tМест: " + Nomers[i].KolMest);

Console.Write("\tСтоимость: " + Nomers[i].Stoim);

Console.Write("\tЗанятость: " + Nomers[i].Guest);

Console.Write("\n________________________________________________________________________________\n");

}

Console.WriteLine("\n------------------------------------------------\nМЕНЮ ПРОГРАММЫ:\t\t\t\t\t|\n 1-Гости\t\t4-Номера\t\t| \n 2-Приехал гость\t5-Добавить номер\t| \n 3-Уехал гость\t\t6-Очистить номер\t| \n 7-Выход\t\t\t\t\t|\n------------------------------------------------");

m = Convert.ToInt32(Convert.ToChar(Console.ReadLine()));

goto metka;

}

case '2'://Добавить гостя

{

Console.Clear();

KolG++;

bool flag=false;

string FamB;

string NameB;

string OtchB;

string DataPrB;

string DataOtB;

string NomerB;

Console.Write("Добавление нового гостя.");

Console.Write("\nФамилия: "); FamB=Console.ReadLine();

Console.Write("\nИмя: "); NameB=Console.ReadLine();

Console.Write("\nОтчество: "); OtchB = Console.ReadLine();

Console.Write("\nДата прибытия: "); DataPrB = Console.ReadLine();

Console.Write("\nДата отправки "); DataOtB = Console.ReadLine();

Console.Write("\nНомер: "); NomerB = Console.ReadLine();

//проверка свободен ли номер

for (i = 1; i <= KolN; i++)

{

if (String.Compare(Nomers[i].Nomer, NomerB) == 0) //Если есть такой номер

{

if (String.Compare(Nomers[i].Guest,"free") == 0)

{

flag = true;

Nomers[i].Guest=String.Copy(FamB); //добавить в структуру "номер" поле ФАМИЛИЯ из гостя

break;

}

else

flag = false;

else

flag = false;

if (flag)

{

Guests[KolG].Fam=String.Copy(FamB);

Guests[KolG].Name=String.Copy(NameB);

Guests[KolG].Otch=String.Copy(OtchB);

Guests[KolG].DataPr=String.Copy(DataPrB);

Guests[KolG].DataOt=String.Copy(DataOtB);

Guests[KolG].Nomer = String.Copy(NomerB);

Guests[KolG].Del = false;

}

else

{

KolG--;

Console.Write("Такого номера не существует либо он занят другим гостем");

}

Console.WriteLine("\n------------------------------------------------\nМЕНЮ ПРОГРАММЫ:\t\t\t\t\t|\n 1-Гости\t\t4-Номера\t\t| \n 2-Приехал гость\t5-Добавить номер\t| \n 3-Уехал гость\t\t6-Очистить номер\t| \n 7-Выход\t\t\t\t\t|\n------------------------------------------------");

m = Convert.ToInt32(Convert.ToChar(Console.ReadLine()));

goto metka;

}

case '5'://Добавить номер

{

Console.Clear();

KolN++;

bool sovpad=false;

Console.WriteLine("Добавление нового номера.\n");

Console.Write("Номер:");

BufNomer= Console.ReadLine();

sovpad = false;

for (i = 1; i <= KolN; i++)

{

if (String.Compare(Nomers[i].Nomer, BufNomer) == 0)

Console.WriteLine("Номер с таким названием уже существует!");

KolN--;

sovpad = true;

break;

}

}

if (!sovpad)

{

Nomers[KolN].Nomer=String.Copy(BufNomer);

Console.Write("Класс: "); Nomers[KolN].Class = Console.ReadLine();

Console.Write("Мест: "); Nomers[KolN].KolMest = Console.ReadLine();

Console.Write("Стоимость: "); Nomers[KolN].Stoim = Console.ReadLine();

String.Concat(Nomers[KolN].Stoim, " p.");

Nomers[KolN].Guest=String.Copy("free");

Console.Clear();

}

Console.WriteLine("\n------------------------------------------------\nМЕНЮ ПРОГРАММЫ:\t\t\t\t\t|\n 1-Гости\t\t4-Номера\t\t| \n 2-Приехал гость\t5-Добавить номер\t| \n 3-Уехал гость\t\t6-Очистить номер\t| \n 7-Выход\t\t\t\t\t|\n------------------------------------------------");

m = Convert.ToInt32(Convert.ToChar(Console.ReadLine()));

goto metka;

}

case '3'://Удалить гостя по фамилии

{

Console.Clear();

bool flag=false;

string FamDel;

int ipaste=0;

Console.WriteLine("Введите фамилию для удаления:");

FamDel=Console.ReadLine();

for(i=1;i<=KolG;i++)

{

if (String.Compare(Guests[i].Fam, FamDel) == 0)

{

Console.Clear();

ipaste=i;

Guests[i].Del=true;

flag=false;

break;

}

else

flag=true;

}

if (flag)

{

Console.Clear();

Console.WriteLine("Гостя с такой фамилией нет в гостинице");

}

for(i=1;i<=KolN;i++)

{

if(String.Compare(Nomers[i].Guest,FamDel)==0)

{

Console.WriteLine("Гость с фамилией "+FamDel+" покинул номер "+Guests[ipaste].Nomer);

Nomers[i].Guest=String.Copy("free");

break;

}

}

Console.WriteLine("\n------------------------------------------------\nМЕНЮ ПРОГРАММЫ:\t\t\t\t\t|\n 1-Гости\t\t4-Номера\t\t| \n 2-Приехал гость\t5-Добавить номер\t| \n 3-Уехал гость\t\t6-Очистить номер\t| \n 7-Выход\t\t\t\t\t|\n------------------------------------------------");

m = Convert.ToInt32(Convert.ToChar(Console.ReadLine()));

goto metka;

}

case '6'://Удалить гостя по номеру

{

Console.Clear();

bool flag=false;

string NomerDel;

int ipaste=0;

Console.WriteLine("Введите номер который нужно очистить:");

NomerDel=Console.ReadLine();

for(i=1;i<=KolN;i++)

{

if(String.Compare(Nomers[i].Nomer,NomerDel)==0)

{

Console.Clear();

ipaste=i;

Nomers[i].Guest=String.Copy("free");

flag=false;

break;

}

else

{

flag=true;

}

}

if (flag)

{

Console.Clear();

Console.WriteLine("Такого номера не существует, либо он свободен.");

}

for(i=1;i<=KolG;i++)

{

if(String.Compare(Guests[i].Nomer,NomerDel)==0)

{

Console.WriteLine("Номер "+NomerDel+" свободен. Прежде в нем находился гость "+Guests[i].Fam);

Guests[i].Del=true;

}

}

Console.WriteLine("\n------------------------------------------------\nМЕНЮ ПРОГРАММЫ:\t\t\t\t\t|\n 1-Гости\t\t4-Номера\t\t| \n 2-Приехал гость\t5-Добавить номер\t| \n 3-Уехал гость\t\t6-Очистить номер\t| \n 7-Выход\t\t\t\t\t|\n------------------------------------------------");

m = Convert.ToInt32(Convert.ToChar(Console.ReadLine()));

goto metka;

}

case '7': //ВЫХОД и СЕРИАЛИЗАЦИЯ

{

int yn=1;

Console.Clear();

Console.WriteLine("Сохранить внесённые изменения в БД?\n1-ДА \t0-НЕТ\n");

yn = Convert.ToInt32(Console.ReadLine());

if (yn!=0)

{

FileStream KolGWrite = new FileStream("kolg.dat", FileMode.Create, FileAccess.Write);

BinaryFormatter bf1 = new BinaryFormatter();

bf1.Serialize(KolGWrite, KolG);

FileStream KolNWrite = new FileStream("koln.dat", FileMode.Create, FileAccess.Write);

BinaryFormatter bf2 = new BinaryFormatter();

bf2.Serialize(KolNWrite, KolN);

SerializeNomer(Nomers);

SerializeGuest(Guests);

}

return;

}

}

}

}

}

Код программы реализованной на языке C++ (Консольное )

//---------------------------------------------------------------------------

#ifndef Unit1H

#define Unit1H

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ComCtrls.hpp>

#include <ExtCtrls.hpp>

#include <Grids.hpp>

#include <Menus.hpp>

#include <jpeg.hpp>

#include "SHDocVw_OCX.h"

#include <OleCtrls.hpp>

//---------------------------------------------------------------------------

class TForm1 : public TForm

{

__published: // IDE-managed Components

TPanel *Panel1;

TStringGrid *StringGrid1;

TRadioButton *RadioButton1;

TRadioButton *RadioButton2;

TMainMenu *MainMenu1;

TMenuItem *N1;

TMenuItem *N2;

TMenuItem *N3;

TMenuItem *N4;

TMenuItem *N5;

TMenuItem *N6;

TMenuItem *N7;

TMenuItem *N8;

TMenuItem *N9;

TMenuItem *N10;

TMenuItem *N12;

TMenuItem *N13;

TMenuItem *N14;

TMenuItem *N15;

TMenuItem *N16;

TMenuItem *N17;

TMenuItem *N18;

TMenuItem *N19;

TButton *Button1;

TButton *Button2;

TButton *Button3;

TButton *Button4;

TPanel *Panel2;

TEdit *Edit1;

TEdit *Edit4;

TLabel *Label1;

TLabel *Label2;

TLabel *Label3;

TLabel *Label4;

TButton *Button5;

TPanel *Panel3;

TRadioGroup *RG1;

TRadioButton *RadioButton3;

TRadioButton *RadioButton4;

TEdit *Edit5;

TLabel *Label5;

TLabel *Label6;

TEdit *Edit6;

TButton *Button6;

TLabel *Label7;

TPanel *Panel4;

TLabel *Label8;

TLabel *Label9;

TEdit *Edit7;

TEdit *Edit8;

TEdit *Edit9;

TLabel *Label10;

TLabel *Label11;

TLabel *Label12;

TDateTimePicker *DateTimePicker1;

TDateTimePicker *DateTimePicker2;

TLabel *Label13;

TLabel *Label15;

TButton *Button7;

TComboBox *ComboBox1;

TComboBox *ComboBox2;

TPanel *Panel5;

TComboBox *ComboBox3;

TPanel *Panel6;

TGroupBox *GroupBox1;

TButton *Button8;

TButton *Button9;

TMemo *Memo1;

TImage *Image1;

TMemo *Memo2;

TButton *Button10;

TPanel *PanelAutor;

TMenuItem *N11;

TImage *Image2;

TLabel *Label14;

TTimer *Timer1;

TImage *Image3;

TPanel *Panel7;

TCppWebBrowser *CppWebBrowser1;

TButton *Button11;

void __fastcall Button1Click(TObject *Sender);

void __fastcall RadioButton3Click(TObject *Sender);

void __fastcall RadioButton4Click(TObject *Sender);

void __fastcall Button2Click(TObject *Sender);

void __fastcall Button4Click(TObject *Sender);

void __fastcall Button3Click(TObject *Sender);

void __fastcall FormCreate(TObject *Sender);

void __fastcall Button5Click(TObject *Sender);

void __fastcall Button7Click(TObject *Sender);

void __fastcall ComboBox3Click(TObject *Sender);

void __fastcall N2Click(TObject *Sender);

void __fastcall RadioButton1Click(TObject *Sender);

void __fastcall RadioButton2Click(TObject *Sender);

void __fastcall Button6Click(TObject *Sender);

void __fastcall Button8Click(TObject *Sender);

void __fastcall N3Click(TObject *Sender);

void __fastcall Button10Click(TObject *Sender);

void __fastcall N19Click(TObject *Sender);

void __fastcall N4Click(TObject *Sender);

void __fastcall Button9Click(TObject *Sender);

void __fastcall Edit4KeyPress(TObject *Sender, char &Key);

void __fastcall Timer1Timer(TObject *Sender);

void __fastcall Button11Click(TObject *Sender);

void __fastcall N18Click(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

struct NomerStruct

{

char Nomer[7];

char Class[20];

char KolMest[15];

char Stoim[15];

char Guest[30];

};

struct GuestStruct

{

char Fam[25];

char Name[15];

char Otch[20];

char DataPr[20];

char DataOt[20];

char Nomer[7];

bool Del;

};

GuestStruct Guests[50];

NomerStruct Nomers[50];

int KolG, KolN;

};

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif

//---------------------------------------------------------------------------

#include <vcl.h>

#include <iostream>

#include <stdio.h>

#include <windows.h>

#include <string.h>

#include <conio.h>

#include <locale.h>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "SHDocVw_OCX"

#pragma resource "*.dfm"

TForm1 *Form1;

FILE *GUEST; FILE *NOMER; FILE *KOLG; FILE *KOLN;

void SGCLEAR(TStringGrid *StringGrid1)

{

for(int i=1;i<StringGrid1->RowCount;i++)

{

StringGrid1->Cells[0][i]="";

StringGrid1->Cells[1][i]="";

StringGrid1->Cells[2][i]="";

StringGrid1->Cells[3][i]="";

StringGrid1->Cells[4][i]="";

}

StringGrid1->RowCount=2;

}

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

KolN=0; KolG=0;

//ЗАГРРУЗКА КОЛИЧЕСТВА ГОСТЕЙ

if(fopen("kolg.dat","rb")!=0)

{

KOLG=fopen("kolg.dat","rb");

fread(&KolG,sizeof(KolG),1,KOLG);

fclose(KOLG);

//cout<<"\nНа данный момент в гостинице: "<<KolG<<" гостей";

}

else

{

KOLG=fopen("kolg.dat","ab");

fclose(KOLG);

}

//ЗАГРРУЗКА КОЛИЧЕСТВА НОМЕРОВ

if(fopen("koln.dat","rb")!=0)

{

KOLN=fopen("koln.dat","rb");

fread(&KolN,sizeof(KolN),1,KOLN);

fclose(KOLN);

//cout<<"\nНа данный момент в гостинице: "<<KolN<<" номеров";

}

else

{

KOLN=fopen("koln.dat","ab");

fclose(KOLN);

}

//ЗАГРУЗКА СТРУКТУРЫ ГОСТИ!

if(fopen("guest.dat","rb")!=0)

{

GUEST=fopen("guest.dat","rb");

fread(&Guests, sizeof(Guests), 1, GUEST);

fclose(GUEST);

}

//ЗАГРУЗКА СТРУКТУРЫ НОМЕРА!

if(fopen("nomer.dat","rb")!=0)

{

NOMER=fopen("nomer.dat","rb");

fread(&Nomers, sizeof(Nomers), 1, NOMER);

fclose(NOMER);

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Panel2->Visible=true;

Panel3->Visible=false;

Panel4->Visible=false;

Panel5->Visible=false;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton3Click(TObject *Sender)

{

Label6->Visible=true;

Edit6->Visible=true;

Label5->Visible=false;

Edit5->Visible=false;

Edit5->Text="";

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton4Click(TObject *Sender)

{

Label5->Visible=true;

Edit5->Visible=true;

Label6->Visible=false;

Edit6->Visible=false; Edit6->Text="";

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Panel3->Visible=true;

Panel2->Visible=false;

Panel4->Visible=false;

Panel5->Visible=false;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)

{

Panel3->Visible=true;

Panel2->Visible=false;

Panel4->Visible=false;

Panel5->Visible=false;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{

Panel4->Visible=true;

Panel2->Visible=false;

Panel3->Visible=false;

Panel5->Visible=false;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

DateTimePicker1->Date=Now();

DateTimePicker2->Date=Now();

Label14->Caption =Now();

ComboBox1->Items->Add("Эконом класс");

ComboBox1->Items->Add("Стандарт") ;

ComboBox1->Items->Add("Бизнесс-класс");

ComboBox1->Items->Add("Люкс");

ComboBox1->Items->Add("Первый класс");

ComboBox2->Sorted = true;

ComboBox2->Items->Add("Одноместный");

ComboBox2->Items->Add("Двухместный") ;

ComboBox2->Items->Add("Трехместный");

///////////

int j=0;

if(RadioButton2->Checked)

{

SGCLEAR(StringGrid1);

StringGrid1->RowCount=KolG+2;

StringGrid1->ColCount=4;

StringGrid1->ColWidths[0]=200;

StringGrid1->ColWidths[1]=100;

StringGrid1->ColWidths[2]=100;

StringGrid1->ColWidths[3]=50;

StringGrid1->Cells[0][0]="ФИО";

StringGrid1->Cells[1][0]="Дата прибытия";

StringGrid1->Cells[2][0]="Дата отъезда";

StringGrid1->Cells[3][0]="Номер";

for(int i=1;i<=KolG;i++)

{

if(Guests[i].Del==false)

{

j++;

StringGrid1->Cells[0][j]=Guests[i].Fam;

StringGrid1->Cells[1][j]=Guests[i].DataPr;

StringGrid1->Cells[2][j]=Guests[i].DataOt;

StringGrid1->Cells[3][j]=Guests[i].Nomer;

}

}

}

else if(RadioButton1->Checked)

{

SGCLEAR(StringGrid1);

StringGrid1->RowCount=KolN+2;

StringGrid1->ColWidths[0]=50;

StringGrid1->ColWidths[1]=100;

StringGrid1->ColWidths[2]=100;

StringGrid1->ColWidths[3]=70;

StringGrid1->ColCount=5;

StringGrid1->Cells[0][0]="Номер";

StringGrid1->Cells[1][0]="Класс";

StringGrid1->Cells[2][0]="Кол-во мест";

StringGrid1->Cells[3][0]="Стоимость";

StringGrid1->Cells[4][0]="Занятость";

for(int i=1;i<=KolN;i++)

{

j++;

StringGrid1->Cells[0][j]=Nomers[i].Nomer;

StringGrid1->Cells[1][j]=Nomers[i].Class;

StringGrid1->Cells[2][j]=Nomers[i].KolMest;

StringGrid1->Cells[3][j]=Nomers[i].Stoim;

StringGrid1->Cells[4][j]=Nomers[i].Guest;

}

}

//////////////

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)

{

bool sovpad=false;

if(Edit1->Text=="") {ShowMessage("Введи фамилию"); Edit1->SetFocus();}

else if(ComboBox2->Text=="") {ShowMessage("Введи имя"); ComboBox2->SetFocus();}

else if(ComboBox1->Text=="") {ShowMessage("Введи отчество"); ComboBox2->SetFocus();}

else

{

KolN++;

for(int i=1;i<=KolN;i++)

{

if(strcmp(Nomers[i].Nomer,Edit1->Text.c_str())==0)

{

ShowMessage("Номер с таким названием уже существует!");

KolN--;

sovpad=true;

break;

}

}

///---

if(!sovpad)

{

StringGrid1->RowCount++;

strcpy(Nomers[KolN].Nomer,Edit1->Text.c_str());

strcpy(Nomers[KolN].Class,ComboBox1->Text.c_str());

strcpy(Nomers[KolN].KolMest,ComboBox2->Text.c_str());

strcpy(Nomers[KolN].Stoim,Edit4->Text.c_str());

strcpy(Nomers[KolN].Guest,"free");

}

}

///////////

int j=0;

if(RadioButton2->Checked)

{

SGCLEAR(StringGrid1);

StringGrid1->RowCount=KolG+2;

StringGrid1->ColCount=4;

StringGrid1->ColWidths[0]=200;

StringGrid1->ColWidths[1]=100;

StringGrid1->ColWidths[2]=100;

StringGrid1->ColWidths[3]=50;

StringGrid1->Cells[0][0]="ФИО";

StringGrid1->Cells[1][0]="Дата прибытия";

StringGrid1->Cells[2][0]="Дата отъезда";

StringGrid1->Cells[3][0]="Номер";

for(int i=1;i<=KolG;i++)

{

if(Guests[i].Del==false)

{

j++;

StringGrid1->Cells[0][j]=Guests[i].Fam;

StringGrid1->Cells[1][j]=Guests[i].DataPr;

StringGrid1->Cells[2][j]=Guests[i].DataOt;

StringGrid1->Cells[3][j]=Guests[i].Nomer;

}

}

}

else if(RadioButton1->Checked)

{

SGCLEAR(StringGrid1);

StringGrid1->RowCount=KolN+2;

StringGrid1->ColWidths[0]=50;

StringGrid1->ColWidths[1]=100;

StringGrid1->ColWidths[2]=100;

StringGrid1->ColWidths[3]=70;

StringGrid1->ColCount=5;

StringGrid1->Cells[0][0]="Номер";

StringGrid1->Cells[1][0]="Класс";

StringGrid1->Cells[2][0]="Кол-во мест";

StringGrid1->Cells[3][0]="Стоимость";

StringGrid1->Cells[4][0]="Занятость";

for(int i=1;i<=KolN;i++)

{

j++;

StringGrid1->Cells[0][j]=Nomers[i].Nomer;

StringGrid1->Cells[1][j]=Nomers[i].Class;

StringGrid1->Cells[2][j]=Nomers[i].KolMest;

StringGrid1->Cells[3][j]=Nomers[i].Stoim;

StringGrid1->Cells[4][j]=Nomers[i].Guest;

}

}

//////////////

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button7Click(TObject *Sender)

{

int paste=0;...


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.