Пособие по написанию WAP-сайтов

         

Подробнее о сценарии языка Perl FlightScheduleWML.pl



Подробнее о сценарии языка Perl FlightScheduleWML.pl

Как было сказано выше, каждый раз, когда пользователь производит выбор авиакомпании и определяет номер рейса, приложение FlightSchedule.wml запускаетсценарий языка Perl, который отображает информацию о текущем состояниирейса или выдает сообщение об ошибке, если такой рейс не существует. Сценарий FlightScheduleWML.pl имеет следующий исходный код: #!/usr/bin/perl

require 'DeckUtils.pl';

%cgiVars = &AppUtils::ParseCGIVars(); $AirCode = $cgiVars{"AirCode"}; $FlightNum = $cgiVars{"FlightNum"};

if ($AirCode eq "SU") { $AirName = "Aeroflot";

if ($FlightNum eq "1") { $ArriveCity = "Moscow"; $ArriveTime = "8:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "New York"; $ArriveTime = "6:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "AC")

{ $AirName = "Air Canada";

if ($FlightNum eq "1") { $ArriveCity = "New York"; $ArriveTime = "10:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Boston"; $ArriveTime = "9:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "AF")

{ $AirName = "Air France";

if ($FlightNum eq "1") { $ArriveCity = "Paris"; $ArriveTime = "9:45 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "London"; $ArriveTime = "11:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "NZ")



{ $AirName = "Air New Zealand";

if ($FlightNum eq "1") { $ArriveCity = "Auckland"; $ArriveTime = "8:50 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Sydney"; $ArriveTime = "9:00 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "AS")

{ $AirName = "Alaska Airlines";




if ($ FlightNum eq "1") { $ArriveCity = "Portland"; $ArriveTime = "6:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Las Vegas"; $ArriveTime = "7:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "AQ")

{ $AirName = "Aloha Airlines";

if ($FlightNum eq "1") { $ArriveCity = "Hilo"; $ArriveTime = "11:15 am"; } elsif ($FlightNum eq "2") { $ArriveCity = "Los Angeles"; $ArriveTime = "9:45 pm"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "HP")

{ $AirName = "America West";

if ($FlightNum eq "1") { $ArriveCity = "Las Vegas"; $ArriveTime = "10:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "PHoenix"; $ArriveTime = "9:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "AA")

{ $AirName = "American Airlines";

if ($FlightNum eq "1") { $ArriveCity = "New York"; $ArriveTime = "8:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Phoenix"; $ArriveTime = "9:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "TZ")

{ $AirName = "American Trans Air";

if ($FlightNum eq "1") { $ArriveCity = "Chicago"; $ArriveTime = "8:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "San Francisco"; $ArriveTime = "9:30 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "CO")

{ $AirName = "Continental";

if ($FlightNum eq "1") { $ArriveCity = "Boston"; $ArriveTime = "6:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Los Angeles"; $ArriveTime = "9:30 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "DL")



{ $AirName = "Delta";

if ($ FlightNum eq "1") { $ArriveCity = "Atlanta"; $ArriveTime = "7:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Las Vegas"; $ArriveTime = "8:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "LH")

{ $AirName = "Lufthansa";

if ($FlightNum eq "1") { $ArriveCity = "Berlin"; $ArriveTime = "9:30 am"; } elsif ($FlightNum eq "2") { $ArriveCity = "Chicago"; $ArriveTime = "9:00 pm"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "JL")

{ $AirName = "Japan Airlines";

if ($FlightNum eq "1") { $ArriveCity = "Tokyo"; $ArriveTime = "9:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "New York"; $ArriveTime = "9:30 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "KL")

{ $AirName = "KLM Royal Dutch";

if ($FlightNum eq "1") { $ArriveCity = "London"; $ArriveTime = "10:00 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "New York"; $ArriveTime = "9:00 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "NW")

{ $AirName = "Northwest Airlines";

if ($FlightNum eq "1") { $ArriveCity = "Seattle"; $ArriveTime = "8:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Portland"; $ArriveTime = "7:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "QF")

{ $AirName = "Qantas Airlines";

if ($FlightNum eq "1") { $ArriveCity = "Melbourne"; $ArriveTime = "7:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Tokyo"; $ArriveTime = "9:30 am"; } else { $ArriveCity = "Unknown"; } }



elsif ($ AirCode eq "QQ")

{ $AirName = "Reno Air";

if ($FlightNum eq "1") { $ArriveCity = "Reno"; $ArriveTime = "10:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Las Vegas"; $ArriveTime = "9:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "SR")

{ $AirName = "Swiss Air";

if ($FlightNum eq "1") { $ArriveCity = "New York"; $ArriveTime = "8:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Boston"; $ArriveTime = "6:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "TW")

{ $AirName = "TWA";

if ($FlightNum eq "1") { $ArriveCity = "Chicago"; $ArriveTime = "10:00 am"; } elsif ($FlightNum eq "2") { $ArriveCity = "Los Angeles"; $ArriveTime = "9:30 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "UA")

{ $AirName = "United Airlines";

if ($FlightNum eq "1") { $ArriveCity = "Las Vegas"; $ArriveTime = "10:00 am"; } elsif ($FlightNum eq "2") { $ArriveCity = "Boston"; $ArriveTime = "11:45 pm"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "US")

{ $AirName = "USAir";

if ($FlightNum eq "1") { $ArriveCity = "New York"; $ArriveTime = "8:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Boston"; $ArriveTime = "6:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "VS")

{ $AirName = "Virgin Atlantic";

if ($FlightNum eq "1") { $ArriveCity = "London"; $ArriveTime = "10:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "New York"; $ArriveTime = "9:45 am"; } else { $ArriveCity = "Unknown"; } }



if ($ArriveCity eq "Unknown") {

$Deck = "Content-type: text/vnd.wap.wml

&lt?xml version=\"1.0\"?&gt &lt!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\"&gt

&ltwml&gt

&lthead&gt

&ltmeta http-equiv=\"Cache-Control\" content=\"max-age=0\" forua=\"true\"/&gt

&lt/head&gt

&ltcard&gt

&ltdo type=\"accept\" label=\"Done\"&gt &ltgo href=\"../FlightSchedule /FlightSchedule.wml\" /&gt &lt/do&gt

&ltp align=\"left\" mode=\"wrap\"&gt

$AirName flight $ FlightNum is not in the database. Try again.

&lt/p&gt

&lt/card&gt

&lt/wml&gt";

print $Deck; } else {

$Deck = "Content-type: text/vnd.wap.wml

&lt?xml version=\"1.0\"?&gt &lt!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\"&gt

&ltwml&gt

&lthead&gt

&ltmeta http-equiv=\"Cache-Control\" content=\"max-age=0\" forua=\"true\"/&gt

&lt/head&gt

&ltcard&gt

&ltdo type=\"accept\" label=\"Done\"&gt &ltgo href=\"../FlightSchedule /FlightSchedule.wml\" /&gt &lt/do&gt

&ltp align=\"left\" mode=\"wrap\"&gt

$AirName flight $FlightNum will arrive in $ArriveCity at $ArriveTime

&lt/p&gt

&lt/card&gt

&lt/wml&gt";

print $Deck; }

Первая строка сценария является всего лишь комментарием, сообщающим интерпретатору командной строки, где находится интерпретатор языка Perl. Втораястрока сообщает этому интерпретатору, что исходный сценарий требует другойсценарий DeckUtils.pl, который содержит функции, используемые для анализапараметров, передаваемых из деки формата WML.

Далее, код использует серию конструкций if-else для определения, в первуюочередь, введенной авиакомпании, а затем и введенного номера рейса.


Для простоты в нашем приложении код поддерживает только номер рейса 1 для всехавиалиний, в некоторых случаях и номер рейса 2. В реальном приложении сценарий должен получать номера рейсов из базы данных, которая позволит обрабатывать неограниченное число рейсов.

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

$Deck = "Content-type: text/vnd.wap.wml

&lt?xml version=\"1.0\"?&gt &lt!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\"&gt

&ltwml&gt

&lthead&gt

&ltmeta http-equiv=\"Cache-Control\" content=\"max-age=0\" forua=\"true\"/&gt

&lt/head&gt

&ltcard&gt

&ltdo type=\"accept\" label=\"Done\"&gt &ltgo href=\"../FlightSchedule /FlightSchedule.wml\" /&gt &lt/do&gt

&ltp align=\"left\" mode=\"wrap\"&gt

$AirName flight $FlightNum is not in the database. Try again.

&lt/p&gt

&lt/card&gt

&lt/wml&gt";

print $Deck;

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


Содержание раздела