Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use DBI;
- use DBD::Pg;
- use Digest::MD5 qw (md5_hex);
- #Цеплям базу, пока ток постгрес, лень мне муську крутить, хотя запросы одинаковые будут
- {
- my $day;
- my $month;
- my $year;
- my $hours;
- my $minutes;
- my $seconds;
- ( $seconds, $minutes, $hours, $day, $month, $year )
- = ( localtime ) [ 0,1,2,3,4,5 ];
- $month+=1;
- $year+=1900;
- $hours=$hours+1;
- print "Сегодня $day-$month-$year\n";
- print "Сейчас $hours:$minutes:$seconds\n";
- }
- my @InfoShowAll;
- my $dbname=bd;
- my $host=localhost;
- my $port=5432;
- my $username=postgres;
- my $pass=1;
- my $dbh = DBI->connect("dbi:Pg:dbname=$dbname;host=$host;port=$port",
- $username,
- $pass,
- {PrintError => 0}
- ) or die " \n\n\n\nОшибка соединения... $DBI::errstr\n";
- print "Connect OK\n\n\n";
- while($result!=1)
- {
- print"Логин:";
- $login=<STDIN>;
- chomp($login);
- print "\n";
- print "Пароль:";
- $pas=<STDIN>;
- chomp($pas);
- $pas=md5_hex($pas);
- $req = "SELECT * FROM users WHERE login='$login' AND pass='$pas';";
- $result = $dbh->do($req);
- if ($result!=1)
- {
- print "Пароль неверный, попробуйте еще раз!";
- print "\n";
- } else { print "Добро пожаловать.\n\n";}
- }
- sub passchange
- {
- while($res!=1)
- {
- print"Логин:";
- $loginw=<STDIN>;
- chomp($login);
- print "\n";
- print "Пароль:";
- $pas=<STDIN>;
- chomp($pas);
- $pas=md5_hex($pas);
- $req = "SELECT * FROM users WHERE login='$login' AND pass='$pas';";
- $res = $dbh->do($req);
- if ($res!=1)
- {
- print "Пароль неверный, попробуйте еще раз!";
- print "\n";
- } else { print "Вводи новый пароль.\n\n";}}
- $pasw=<STDIN>;
- chomp($pas);
- $pasw=md5_hex($pasw);
- $req = "UPDATE users SET pass='$pasw' WHERE login='$login';";
- $result = $dbh->do($req);
- }
- sub user_add
- {
- print "Логин нового пользователя:";
- chomp($login=<STDIN>);
- while($bol!=1) {
- print "\nУровень доcтупа (1:администратор, 0:юзер):";
- chomp($acces=<STDIN>);
- if ($acces==0 or $acces==1) {$bol=1}
- }
- $bol=0;
- while ($bol!=1) {
- print "\nПароль:";
- chomp($pas=<STDIN>);
- print "\nПовторите пароль:" ;
- chomp($repas=<STDIN>);
- if ($pas==$repas){
- $pas=md5_hex($pas);
- $bol=1;
- }
- }
- $req="INSERT INTO users VALUES ('$login','$pas','$acces')";
- $rv=$dbh->do($req);
- print "Done!\n";
- }
- sub user_del
- {
- print "Логин удаляемого пользователя:";
- chomp($login=<STDIN>);
- print "\nУверен? 1/0\n";
- chomp($yes=<STDIN>);
- if ($yes==1 or $yes==0)
- {
- if ($yes==1)
- {
- $req="DELETE FROM ONLY users WHERE users.login='$login'";
- $rv=$dbh->do($req);
- if ($rv!=1) {
- print "Нету такого пацана \n";} else
- {
- print "\n Done. $login deleted."}}
- elsif ($yes==0) {
- print "\n Ну нет, так нет.";
- }
- }
- }
- sub baseadministration
- {
- print "Осторожно! Только для крутых парней. Может иметь необратимые последствия.\n";
- print "Вводи свой запрос. (для выхода Q) :";
- chomp($req=<STDIN>);
- if ( $req eq 'q' ) {
- return(0) }
- $rv=$dbh->do($req);
- print "done";
- }
- sub add
- {
- my $a;
- my $j;
- my @info;
- print "\n";
- print " ";
- print " <Будьте внимательны при вводе>\n";
- print " ";
- print " <Для смены языка используйте Caps Lock>\n";
- print " ";
- print " <В случае ошибочного ввода нажмите Q \n";
- print " ";
- print " для выхода в главное меню>";
- print "\n\n";
- print "Введите фамилию, имя и отчество (через пробел):\n";
- @info = split (/\s+/, <STDIN>);
- chomp $info[ 2 ]; # первые три элемента массива введем
- # через пробел, последующие - отдельно
- # с запросом ввода для каждого.
- print "Введите должность: ";
- $info[ 3 ] = <STDIN>;
- chomp $info[ 3 ];
- if ( $info[ 3 ] eq 'q' ) # организуем цикл, c помощью которого
- # можно завершить ввод данных без записи
- # в файл нажатием клавиши q.
- {
- return( 0 );
- }
- print "Введите год принятия на работу: ";
- $info[ 4 ] = <STDIN>;
- chomp $info[ 4 ];
- if ( $info[ 4 ] eq 'q' )
- {
- return( 0 );
- }
- print "Введите стаж работы: ";
- $info[ 5 ] = <STDIN>;
- chomp $info[ 5 ];
- if ( $info[ 5 ] eq 'q' )
- {
- return( 0 );
- }
- print "Введите оклад: ";
- $info[ 6 ] = <STDIN>;
- chomp $info[ 6 ];
- if ( $info[ 6 ] eq 'q' )
- {
- return( 0 );
- }
- print "Введите пол: ";
- $info[ 7 ] = <STDIN>;
- chomp $info[ 7 ];
- if ( $info[ 7 ] eq 'q' )
- {
- return( 0 );
- }
- print "Введите год рождения: ";
- $info[ 8 ] = <STDIN>;
- chomp $info[ 8 ];
- if ( $info[ 8 ] eq 'q' )
- {
- return( 0 );
- }
- print "Введите серию и номер паспорта ( разделять знаком _ ): ";
- $info[ 9 ] = <STDIN>;
- chomp $info[ 9 ];
- if ( $info[ 9 ] eq 'q' )
- {
- return( 0 );
- }
- print "Введите улицу: ";
- $info[ 10 ] = <STDIN>;
- chomp $info[ 10 ];
- if ( $info[ 10 ] eq 'q' )
- {
- return( 0 );
- }
- print "Введите номер дома: ";
- $info[ 11 ] = <STDIN>;
- chomp $info[ 11 ];
- if ( $info[ 11 ] eq 'q' )
- {
- return( 0 );
- }
- print "Введите номер квартиры: ";
- $info[ 12 ] = <STDIN>;
- chomp $info[ 12 ];
- if ( $info[ 12 ] eq 'q' )
- {
- return( 0 );
- }
- print "Введите номер телефона: ";
- $info[ 13 ] = <STDIN>;
- chomp $info[ 13 ];
- if ( $info[ 13 ] eq 'q' )
- {
- return( 0 );
- }
- $j = 14;
- # организуем цикл do while для ввода информации об образовании.
- # Цикл совершается, затем следует запрос пользователя,
- # продолжать ли цикл или остановиться.
- do
- {
- print "Введите образование (используйте _ вместо пробела): ";
- $info[ $j ] = <STDIN>;
- chomp $info[ $j ];
- if ( $info[ $j ] eq 'q' )
- {
- return( 0 );
- }
- $j++;
- print "Введите учебное заведение (используйте _ вместо пробела): ";
- $info[ $j ] = <STDIN>;
- chomp $info[ $j ];
- if ( $info[ $j ] eq 'q' )
- {
- return( 0 );
- }
- $j++;
- print "Введите год окончания обучения: ";
- $info[ $j ] = <STDIN>;
- chomp $info[ $j ];
- if ( $info[ $j ] eq 'q' )
- {
- return( 0 );
- }
- $j++;
- print "Введите специальность: ";
- $info[ $j ] = <STDIN>;
- chomp $info[ $j ];
- if ( $info[ $j ] eq 'q' )
- {
- return( 0 );
- }
- $j++;
- print " Если есть еще одно образование, нажмите 1, если нет,\n";
- print " нажмите 0 для завершения ввода:\n";
- $a = <STDIN>;
- chomp $a;
- }
- while ($a);
- my $hurma;
- for ($i=14; $i<$j; $i++){
- $info[$i].=' ';
- $hurma.=$info[$i];
- }
- $req="INSERT INTO data VALUES ('$info[0]','$info[1]','$info[2]','$info[3]','$info[4]','$info[5]','$info[6]','$info[7]','$info[8]','$info[9]','$info[10]','$info[11]','$info[12]','$info[13]','$hurma')";
- $rv=$dbh->do($req);
- print "\n\n\nDONE\n";
- print $rv;
- if (!defined $rv) {
- print "При выполнении запроса возникла ошибка: " . $dbh->errstr . "\n";
- }
- }
- sub magick
- {
- $query = "SELECT * FROM data";
- $sth = $dbh->prepare($query);
- $rv = $sth->execute();
- open (COUT, ">cout");
- while (@array = $sth->fetchrow_array()) {
- print ( COUT "@array \n" );
- }
- close (COUT)
- }
- sub magick2
- {
- $query = "SELECT * FROM users";
- $sth = $dbh->prepare($query);
- $rv = $sth->execute();
- open (COUT, ">cout");
- while ($ref = $sth->fetchrow_hashref()) {
- ($login, $lvl) = ($ref->{'login'}, $ref->{'acceslevel'});
- print (COUT "$login\t$lvl\n");
- }
- close (COUT)
- }
- sub admin_see
- {
- magick2();
- open (READ, 'cout' );
- while ( <READ> )
- { $i=0;
- @data = split (/\s+/, $_);
- print "$data[$i]\n";
- $i++;}
- }
- sub output_all
- {
- my $n = 1;
- my $a;
- my $b;
- my $j;
- my $k;
- my @info;
- my @data;
- magick();
- {
- open ( COUT, "cout" ) ;
- @info = <COUT>;
- close ( COUT );
- unlink(cout); # закроем файл
- for ( $j = 0; $j <= $#info; $j++ ) # организуем перебор массива @info
- {
- @data = split (/\s+/, $info[ $j ]); # массив @data разделен
- # функцией split на элементы.
- # /\s+/ - разделитель (пробел). (регулярк)
- $a = $data[ 0 ];
- $b = $j;
- for ( $k = $j+1; $k <= $#info; $k++ )
- {
- @data = split (/\s+/, $info[ $k ]);
- if ($a gt $data[ 0 ]) # gt - оператор сравнения строк,
- # истинен, если левый операнд > правого.
- {
- $a = $data[ 0 ];
- $b = $k;
- }
- }
- ( $info[$j], $info [$b] ) = ( $info [$b], $info[$j] );
- }
- @InfoShowAll = @info;
- for ( $j = 0; $j <= $#info; $j++ ) # вывод
- {
- @data = split (/\s+/, $info[ $j ]);
- print "$n) $data[0] $data[ 1 ] $data[ 2 ]. Должность - $data[ 3 ]\n";
- print " Работает с $data[ 4 ] года. Стаж работы - $data[ 5 ] лет. ";
- print "Оклад $data[ 6 ] т.р.\n";
- print " Пол - $data[ 7 ]. $data[ 8 ] года рождения. ";
- print "Пасп. данные - $data[ 9 ]\n";
- print " Улица $data[ 10 ], д. $data[ 11 ], кв. $data[ 12 ]. ";
- print "Телефон - $data[ 13 ]\n";
- $n++;
- for ( $k = 14; $k < $#data; $k++ )
- {
- print " Образование - $data[ $k ], окончил $data[ ++$k ] в ";
- print "$data[ ++$k ] году. \n";
- print " Специальность - $data[ ++$k ].\n";
- }
- print "\n";
- }
- print "\n ";
- print " !!!Для пролистывания экрана нажмите клавишу Scroll Lock!!!\n\n";
- }
- }
- sub output_educ
- {
- my $n = 1;
- my $a;
- my $b;
- my $j;
- my $k;
- my @info;
- my @data;
- magick();
- {
- open ( COUT, "cout" ) ;
- @info = <COUT>;
- close ( COUT );
- unlink(cout); # закроем файл
- for ( $j = 0; $j <= $#info; $j++ )
- {
- @data = split (/\s+/, $info[ $j ]);
- $a = $data[ 0 ];
- $b = $j;
- for ( $k = $j+1; $k <= $#info; $k++ )
- {
- @data = split (/\s+/, $info[ $k ]);
- if ($a gt $data[ 0 ])
- {
- $a = $data[ 0 ];
- $b = $k;
- }
- }
- ( $info[$j], $info [$b] ) = ( $info [$b], $info[$j] );
- }
- @InfoShowAll = @info;
- for ( $j = 0; $j <= $#info; $j++ )
- {
- @data = split (/\s+/, $info[$j]);
- print "$n) $data[0] $data[ 1 ] $data[ 2 ]. ";
- $n++;
- for ( $k = 14; $k <= $#data; $k++ )
- {
- print "Образование - $data[ $k ].\n";
- print " Окончил $data[ ++$k ] в ";
- print "$data[ ++$k ] году. Специальность - $data[ ++$k ].\n";
- }
- print "\n";
- }
- print "\n ";
- print " !!!Для пролистывания экрана нажмите клавишу Scroll Lock!!!";
- print "\n\n";
- }
- }
- sub output_private
- {
- my $n = 1;
- my $a;
- my $b;
- my $j;
- my $k;
- my @info;
- my @data;
- magick();
- {
- open ( COUT, "cout" ) ;
- @info = <COUT>;
- close ( COUT );
- unlink(cout);
- for ( $j = 0; $j <= $#info; $j++ )
- {
- @data = split (/\s+/, $info[ $j ]);
- $a = $data[ 0 ];
- $b = $j;
- for ( $k = $j+1; $k <= $#info; $k++ )
- {
- @data = split (/\s+/, $info[ $k ]);
- if ($a gt $data[ 0 ])
- {
- $a = $data[ 0 ];
- $b = $k;
- }
- }
- ( $info[$j], $info [$b] ) = ( $info [$b], $info[$j] );
- }
- @InfoShowAll = @info;
- for ( $j = 0; $j <= $#info; $j++ )
- {
- @data = split (/\s+/, $info[$j]);
- print "$n) $data[0] $data[ 1 ] $data[ 2 ], $data[ 8 ] года рождения.\n";
- print " Пасп. данные - $data[ 9 ]. ";
- print "Улица $data[ 10 ], д. $data[ 11 ], кв. $data[ 12 ].\n";
- print " Телефон - $data[ 13 ]";
- $n++;
- print "\n";
- }
- print "\n ";
- print " !!!Для пролистывания экрана нажмите клавишу Scroll Lock!!!";
- print "\n\n";
- }
- }
- sub output_work
- {
- my $n = 1;
- my $a;
- my $b;
- my $j;
- my $k;
- my @info;
- my @data;
- {
- open ( COUT, "cout" ) ;
- @info = <COUT>;
- close ( COUT );
- unlink(cout);
- for ( $j = 0; $j <= $#info; $j++ )
- {
- @data = split (/\s+/, $info[ $j ]);
- $a = $data[ 0 ];
- $b = $j;
- for ( $k = $j+1; $k <= $#info; $k++ )
- {
- @data = split (/\s+/, $info[ $k ]);
- if ($a gt $data[ 0 ])
- {
- $a = $data[ 0 ];
- $b = $k;
- }
- }
- ( $info[$j], $info [$b] ) = ( $info [$b], $info[$j] );
- }
- @InfoShowAll = @info;
- for ( $j = 0; $j <= $#info; $j++ )
- {
- @data = split (/\s+/, $info[$j]);
- print "$n) $data[0] $data[ 1 ] $data[ 2 ], должность - $data[ 3 ]\n";
- print " Работает с $data[ 4 ]. Стаж работы - $data[ 5 ] лет. ";
- print "Оклад - $data[ 6 ] тысяч рублей.\n";
- $n++;
- print "\n";
- }
- }
- }
- sub search
- {
- my $i = 1;
- my $k = 0;
- my $a;
- my $b;
- my @info;
- my @data;
- magick();
- print "\n Вы выбрали меню поиска.\n";
- print " Выберите нужный пункт:\n\n";
- print " (1) Поиск по фамилии\n";
- print " (2) Поиск по должности\n";
- print " (3) Поиск по образованию\n";
- print " (4) Поиск по улице проживания\n";
- print " (0) Вернуться в главное меню\n";
- $i = <STDIN>;
- if ( $i == 0 )
- {
- unlink(cout);
- return( 0 );
- }
- elsif ( $i == 1 )
- {
- print "Введите фамилию работника: ";
- $a = <STDIN>;
- chomp $a;
- open ( READ, "cout" );
- while ( <READ> )
- {
- @data = split (/\s+/, $_);
- if ( $a eq $data[ 0 ] )
- {
- $info[ $k ] = $_;
- $k++;
- }
- }
- close ( READ );
- unlink(cout);
- for ( $j = 0; $j <= $#info; $j++ )
- {
- @data = split (/\s+/, $info[ $j ]);
- print " Были найдены следующие работники с фамилией $a:\n\n";
- print " $data[ 0 ] $data[ 1 ] $data[ 2 ]. Должность - $data[ 3 ]\n";
- print " Работает с $data[ 4 ] года. Стаж работы - $data[ 5 ] лет. ";
- print "Оклад $data[ 6 ] т.р.\n";
- print " Пол - $data[ 7 ]. $data[ 8 ] года рождения. ";
- print "Пасп. данные - $data[ 9 ]\n";
- print " Улица $data[ 10 ], д. $data[ 11 ], кв. $data[ 12 ]. ";
- print "Телефон - $data[ 13 ]\n";
- $n++;
- for ( $k = 14; $k < $#data; $k++ )
- {
- print " Образование - $data[ $k ], окончил $data[ ++$k ] в ";
- print "$data[ ++$k ] году.\n";
- print " Специальность - $data[ ++$k ].\n";
- }
- print "\n";
- }
- return( 0 );
- }
- elsif ( $i == 2 )
- {
- print "Введите должность работника: ";
- $a = <STDIN>;
- chomp $a;
- open ( READ, "cout" );
- while ( <READ> )
- {
- @data = split (/\s+/, $_);
- if ( $a eq $data[ 3 ] )
- {
- $info[ $k ] = $_;
- $k++;
- }
- }
- close ( READ );
- unlink(cout);
- for ( $j = 0; $j <= $#info; $j++ )
- {
- @data = split (/\s+/, $info[ $j ]);
- print " Должность $a у следующих работников:\n\n";
- print " $data[ 0 ] $data[ 1 ] $data[ 2 ]. Должность - $data[ 3 ]\n";
- print " Работает с $data[ 4 ] года. Стаж работы - $data[ 5 ] лет. ";
- print "Оклад $data[ 6 ] т.р.\n";
- print " Пол - $data[ 7 ]. $data[ 8 ] года рождения. ";
- print "Пасп. данные - $data[ 9 ]\n";
- print " Улица $data[ 10 ], д. $data[ 11 ], кв. $data[ 12 ]. ";
- print "Телефон - $data[ 13 ]\n";
- $n++;
- for ( $k = 14; $k < $#data; $k++ )
- {
- print " Образование - $data[ $k ], окончил $data[ ++$k ] в ";
- print "$data[ ++$k ] году.\n";
- print " Специальность - $data[ ++$k ].\n";
- }
- print "\n";
- }
- return( 0 );
- }
- elsif ( $i == 3 )
- {
- print "Введите образование работника: ";
- $a = <STDIN>;
- chomp $a;
- open ( READ, "cout" );
- while ( <READ> )
- {
- @data = split (/\s+/, $_);
- if ( $a eq $data[ 14 ] || $data[ 18 ] )
- {
- $info[ $k ] = $_;
- $k++;
- }
- }
- close ( READ );
- unlink(cout);
- for ( $j = 0; $j <= $#info; $j++ )
- {
- @data = split (/\s+/, $info[ $j ]);
- print " $a образование имеют следующие работники:\n\n";
- print " $data[ 0 ] $data[ 1 ] $data[ 2 ]. Должность - $data[ 3 ]\n";
- print " Работает с $data[ 4 ] года. Стаж работы - $data[ 5 ] лет. ";
- print "Оклад $data[ 6 ] т.р.\n";
- print " Пол - $data[ 7 ]. $data[ 8 ] года рождения. ";
- print "Пасп. данные - $data[ 9 ]\n";
- print " Улица $data[ 10 ], д. $data[ 11 ], кв. $data[ 12 ]. ";
- print "Телефон - $data[ 13 ]\n";
- $n++;
- for ( $k = 14; $k < $#data; $k++ )
- {
- print " Образование - $data[ $k ], окончил $data[ ++$k ] в ";
- print "$data[ ++$k ] году.\n";
- print " Специальность - $data[ ++$k ].\n";
- }
- print "\n";
- }
- return( 0 );
- }
- elsif ( $i == 4 )
- {
- print "Введите улицу: ";
- $a = <STDIN>;
- chomp $a;
- open ( READ, "cout" );
- while ( <READ> )
- {
- @data = split (/\s+/, $_);
- if ( $a eq $data[ 10 ] )
- {
- $info[ $k ] = $_;
- $k++;
- }
- }
- close ( READ );
- unlink(cout);
- for ( $j = 0; $j <= $#info; $j++ )
- {
- @data = split (/\s+/, $info[ $j ]);
- print " На улице $a проживают следующие работники:\n\n";
- print " $data[ 0 ] $data[ 1 ] $data[ 2 ]. Должность - $data[ 3 ]\n";
- print " Работает с $data[ 4 ] года. Стаж работы - $data[ 5 ] лет. ";
- print "Оклад $data[ 6 ] т.р.\n";
- print " Пол - $data[ 7 ]. $data[ 8 ] года рождения. ";
- print "Пасп. данные - $data[ 9 ]\n";
- print " Улица $data[ 10 ], д. $data[ 11 ], кв. $data[ 12 ]. ";
- print "Телефон - $data[ 13 ]\n";
- for ( $k = 14; $k < $#data; $k++ )
- {
- print " Образование - $data[ $k ], окончил $data[ ++$k ] в ";
- print "$data[ ++$k ] году.\n";
- print " Специальность - $data[ ++$k ].\n";
- }
- print "\n";
- }
- }
- else
- {
- unlink(cout);
- return( 0 );
- }
- }
- sub del
- {
- print "Введите фамилию и должность сотрудника:\n";
- print "Фамилия:";
- $fam=<STDIN>;
- chomp($fam);
- print"\nДолжность:";
- $job=<STDIN>;
- chomp ($job);
- print "\nВы хотите удалить $fam $job, уверены? 1/0\n";
- $yes=<STDIN>;
- if ($yes==1 or $yes==0)
- {
- if ($yes==1)
- {
- $req="DELETE FROM ONLY data WHERE fam='$fam' AND func='$job'";
- $rv=$dbh->do($req);
- if ($rv!=1) {
- print "Нету такого пацана \n";} else
- {
- print "\n Done. Deleted."}}
- elsif ($yes==0) {
- print "\n Ну нет, так нет.";
- }
- }
- }
- sub about
- {
- open ( READ, "inf" )
- || die "Не могу открыть файл inf: $!\n";
- while ( <READ> )
- {
- print $_;
- }
- }
- sub user_menu
- {
- my $i = 1;
- my $choice = 0;
- while ( $i == 1 )
- {
- print " (1) Вывод информации из базы данных на экран\n";
- print " (2) Добавление работника в базу данных\n";
- print " (3) Удаление работника из базы данных\n";
- print " (4) Редактирование работника в базе данных\n";
- print " (5) Поиск по базе данных\n";
- print " (6) Смена пароля\n";
- print " (9) О программе\n";
- print " (0) Выход из программы\n";
- SWITCH:
- $choice = <STDIN>;
- if ( $choice == 0 )
- {
- print " Вы завершили работу с программой. ";
- print "Благодарим за использование нашей продукции!\n";
- exit ( 0 );
- }
- elsif ( $choice == 1 )
- {
- output ();
- }
- elsif ( $choice == 2 )
- {
- add ();
- }
- elsif ( $choice == 3 )
- {
- del ();
- }
- elsif ( $choice == 4 )
- {
- edit ();
- }
- elsif ( $choice == 5 )
- {
- search ();
- }
- elsif ( $choice == 6 )
- {
- edit_password ();
- }
- elsif ( $choice == 9 )
- {
- about ();
- }
- else
- {
- print "\n";
- print " Некорректный ввод! Вводите цифры 1,2,3,4,5,6,9 или 0!\n\n";
- }
- }
- }
Add Comment
Please, Sign In to add comment