Назад | Начало урока | Вперед
Содержание

Глава 4

Задача 4.13 "Резервирование комнаты. "

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

Решение

В этой программе в класс Room добавим две новых переменных - булевую и имя клиента
String clientName;
boolean bul = true; //rezerved or free

Булевая переменная будет сигнализировать нам о том, занят или свободен номер.

Соответственно перепишем входной файл data.txt. Так, что можно из него инициализировать все переменные объекта класса Room.

1 2 20
nothing
true
2 2 22
nothing
true
3 2 21
nothing
true
4 3 24
nothing
true
...

На месте имени клиента написано слово nothing, и оно написано отдельной строкой. Это для того, чтобы имя клиента могло быть записано и считано как имя из нескольких слов. Далее идет булевая переменная.

Код программы:



import java.io.*;
import javagently.*;

class HotelRooms {

Room first = new Room(2,3,10,"Nothing",true);

HotelRooms() throws IOException {

Display d = new Display ("Hotel information");
d.prompt("Value of peoples",1);
d.prompt("Enter the name", "Peter Brown");

Stream in = new Stream(System.in);
// default the file to the keyboard
Stream fin = new Stream(System.in);
for (; ;) {

d.ready("\nPress ready when peoples entered");
int pip = d.getInt("Value of peoples");
String name = d.getString("Enter the name");
Stream fout = new Stream ("data.out",Stream.WRITE);
try {
fin = Filer.open("data.txt");
}
catch (FileNotFoundException e) {
System.out.println("Five tries up");
System.out.println("Connecting to keyboard by default");
}

int num;
int piple;
int area;
String clientName;
boolean b;
try {
for (;;) {
String temp;
// считаем из файла в переменные
num = fin.readInt();
piple = fin.readInt();
area = fin.readInt();
clientName = fin.readLine();
temp = fin.readLine();

b = temp.equals("true");

// инициализируем поля объекта
first.number = num;
first.piples = piple;
first.area = area;
first.clientName = clientName;
first.bul = b;

if(first.piples==pip & first.bul == true){

d.println("Dear "+ name + "! Your room is: ");
d.println("number: "+ first.number + ";"+
" for: "+ first.piples + " peoples;"+
" area: "+ first.area + " square meter;");

first.clientName = name;
first.bul = false;

fout.println(first.number + " "+ first.piples + " "

+ first.area + "\n" + first.clientName + "\n" + first.bul);

pip = 0;
b = true;
continue;

}
if(first.piples > pip & first.bul == true & pip != 0){
d.println("Dear "+ name + "! Sorry! 1-place room is absence. ");
d.println("Your room is number: "+ first.number + ";"+
" for: "+ first.piples + " peoples;"+"\n"+
" area: "+ first.area + " square meter;");

first.clientName = name;
first.bul = false;

fout.println(first.number + " "+ first.piples + " " + first.area + "\n" +

first.clientName + "\n" + first.bul);

pip = 0;
b = true;
continue;

}

fout.print(first.number +" " + first.piples +" " + first.area
+"\n" + first.clientName +"\n" + first.bul + "\n");

}
}
catch (EOFException e) {
System.out.println(" All data is reading ");
}
fin.close();
fout.close();
} //end for

}//end constructor

public static void main (String [ ] args)throws IOException {

new HotelRooms ();
}
}
class Room{
int number;//number of room
int piples;//volume to piples
int area;// area of room
String clientName;
boolean bul = true; //rezerved or free
Room(int n,int pip,int ar, String name, boolean b){
number = n;
piples = pip;
area = ar;
clientName = name;
bul = b ;
}
void write () {
System.out.println("number: "+ number + ";"+
" piples: "+ piples + ";"+
" area: "+ area + " square meter;"
+ " clientName: " + clientName + " Room is free? - " + bul);
}
}


Результат :

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

Подсказка

Подсказка

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

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


Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz