мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Это старая версия документа!


Образец задания к уроку 2

#!/usr/bin/perl

%account = qw(
vova   123 
vasya  456
admin  admin
);

$account{'guest'} ='';

open (VISITLIST, 'visit.txt') || die "cannot open file visit.txt ",$!;

foreach $i (sort keys(%account))
{
  chomp($visit{$i} = <VISITLIST>);
};

close(VISITLIST);

open (DATELIST, 'date.txt') || die "can't open file date.txt ", $!;

foreach $i (sort keys(%account))
{
  chomp($date{$i} = <DATELIST>);
};

close(DATELIST);

system "clear";
print "\n Hi! Anytime you can type 'exit' to escape!";
print "\nLogin:";
chomp ($login = <STDIN>);

if ($login eq 'help') { help(); exit };

unless ( exists($account{$login}) )   
{
  print "\nSorry, no such login\n";
  exit;
};


do
{
  print "\Password:";
  chomp ($password = <STDIN>);  
  if ( $password eq 'exit' ) 
  {
    print "\n Ok. You may exit";
    exit;
  };
}
while ( $account{$login} ne $password );


# increase number of visit counter
$visit{$login}++;

open(VISITLIST, '>visit.txt') || die "I can't write in file visit.txt! $!";
foreach $i (sort keys(%account))
{
  print VISITLIST "$visit{$i}\n";
};

close(VISITLIST);

# set current date
$date{$login} = time();

open(DATELIST, '>date.txt') || die "I can't wirte in file visit.txt! $!";
foreach $i (sort keys(%account))
{
  print DATELIST "$date{$i}\n";
};

close(DATELIST);


########################################

########################################

system("clear");
print "\nYou're in system now."; 

do
{

print "\nType about, list, date, visit (to show date of last visit or numbers of visits).".
"\nType exit to escape:";

chomp ($i = <STDIN>);

if ( $i eq 'list' )
  { help(); }
elsif ( $i eq 'visit' )
  { visit(); }
elsif ( $i eq 'date' )
  { visit_date(); }
elsif ( $i eq 'exit' )
  { print "\nGoodbay!\n"; exit; }
elsif ( $i eq 'about' )
  { about()};
}
while  (1);



#########################################
# S U B s
#########################################

sub help
{
  my($login, $password);
  system("clear");
  print "\nALL logins:";
  while( ($login, $password) = each(%account) )
  {
    print "\n$login\t$password";
  }; 
};

sub visit
{
  my($login, $number, $i);
  my @sorted_logins = sort by_visited keys (%visit);
  system("clear");
  print "\nSorted by visits";
  foreach $i (@sorted_logins)
  {
    print "\n $i\t$visit{$i}";
  };
};

sub by_visited
{
  ($visit{$a} <=> $visit{$b}) || ($a cmp $b);
};

sub visit_date
{
  my($i);
  my @sorted_logins = sort by_time keys (%date);
  system("clear");
  print "\nSorted by time of visits";
  foreach $i (@sorted_logins)
  {
    print "\n $i\t".localtime($date{$i});
  };
  
};

sub by_time
{
  ($date{$a} <=> $date{$b}) || ($a cmp $b);
};

sub about
{
 system("clear");
 print <<END_of_lines

 Задание No 1. PERL. Эмуляция "логина"
 1. Эмуляция входа с логином и паролем. Возможность серии попыток
    набора пароля при правильном имени.
 2. На каждом этапе есть возможность корректно выйти.
 3. При запуске системы -- есть меню команд статистики:
    лист всех логинов, список визитов, время и дата последнего логина.
 4. Список визитов упорядочен по числу визитов (при одинаковом числе -- 
    по имени). Список дата упорядочен по датам (при совпадении дат -- также
    по имени).     

END_of_lines
};