您好,登錄后才能下訂單哦!
最近不小心翻到了買的很多年的《perl語言入門》,于是寫了一個小腳本熟悉一下。寫得可能有些冗余,但盡量規范(用了strict)。里面主要用到數組、hash、子程序,可能對初學者練習有幫助就貼出來了,這個程序目前沒有落地的功能,所有操作都存在內存,退出程序就還原了。比較初級有大牛可以繞道,也可以隨意吐槽。
#!/usr/bin/perl -w #版本:1.0.1 #時間:2017-09-13 #作者:劉遠 #郵箱:centos@126.com use utf8; use 5.010; use strict; binmode(STDIN,':encoding(utf8)'); binmode(STDOUT,':encoding(utf8)'); #解決linux退格的問題,windows下可能會不兼容 `stty erase ^H`; #初始定義一些書和一些會員名 my @books=('第一本Docker書','Perl語言入門','Head Python','Linux企業應用案例精解'); my @vips=('鬼魂兒','牛頭','馬面'); my @books2=('圖書列表','圖書添加','圖書刪除','圖書查找'); my @vips2=('會員列表','會員添加','會員刪除','會員查找'); my @index=('圖書管理 ','會員管理 ','借還書管理','保存退出 '); my @bo_re=('借書','還書','借還書查找'); my @bo_re2=('按圖書','按會員'); my %book_vip; my $us; sub book_list{ say "\n---------------------"; for(0..$#books){ if($book_vip{$books[$_]}){ say "\e[31;1m",$_+1,". 《$books[$_]》($book_vip{$books[$_]})\e[0m"; }else{ say "\e[1m",$_+1,". 《$books[$_]》\e[0m"; } } say "總共書籍:",scalar @books,"本"; say "---------------------\n"; } sub book2_list{ for(0..$#books2){ say $_+1,". $books2[$_]"; } &input_num; given($us){ when(/1/) { &book_list } when(/2/) { &add_book } when(/3/) { &delete_book } when(/4/) { &search_book } default { die "【錯誤】輸入正確的數字!!\n" } } &index_list; } sub vip_list{ for(0..$#vips){ say $_+1,". $vips[$_]"; } say "總共會員:",scalar @vips,"人"; say "---------------------\n"; } sub vip2_list{ for(0..$#vips2){ say $_+1,". $vips2[$_]"; } &input_num; given($us){ when(/1/) { &vip_list } when(/2/) { &add_vip } when(/3/) { &delete_vip } when(/4/) { &search_vip } default { die "【錯誤】輸入正確的數字!!\n" } } &index_list; } sub bo_re_list{ for(0..$#bo_re){ say $_+1,". $bo_re[$_]"; } &input_num; given($us){ when(/^1$/) { &bo_book } when(/^2$/) { &re_book } when(/^3$/) { &bo_re2_list } default { die "【錯誤】輸入正確的數字!!\n" } } &index_list; } sub bo_re2_list{ for(0..$#bo_re2){ say $_+1,". $bo_re2[$_]"; } &input_num; given($us){ when(/^1$/) { &vip_book("book") } when(/^2$/) { &vip_book("vip") } default { die "【錯誤】輸入正確的數字!!\n" } } } sub index_list{ say "\e[1m=== 圖書館系統 ===\e[0m"; for(0..$#index){ say "\e[1m||\e[34m",$_+1,". $index[$_]\e[0m","\e[1m||\e[0m"; } say "\e[1m=== 圖書館系統 ===\e[0m"; &input_num; given($us){ when(/^1$/) { &book2_list } when(/^2$/) { &vip2_list } when(/^3$/) { &bo_re_list } when(/^4$/) { say "\e[33;1m保存功能尚未完成,請Ctrl+C退出腳本\e[0m";&index_list } default { die "【錯誤】輸入正確的數字!!\n" } } } sub input_num{ my $user_select=''; while($user_select !~ /^\s*\d+\s*$/){ print "\e[1m請輸入對應數字:\e[0m"; $user_select=<STDIN>; redo if $user_select !~ /^\s*\d+\s*$/; } $us=$user_select; } sub delete_book{ &book_list; &input_num; if($book_vip{$books[$us-1]}){ say "\e[31;1m《$books[$us-1]》未歸還,無法刪除!\e[0m"; return; }else{ my @remove_book=splice @books,$us-1,1; say "\e[31;1m !!! 已經刪除圖書 《@remove_book》 !!!\e[0m"; } } sub add_book{ print "\e[1m輸入添加的圖書名稱:\e[0m"; chomp(my $new_book=<STDIN>); push @books,$new_book; say "\e[32;1m已經添加圖書《${new_book}》!!!\e[0m"; } sub search_book{ print "\e[1m輸入圖書名稱:\e[0m"; chomp(my $s_book=<STDIN>); my @s_books=grep /$s_book/, @books; say "\n\e[1m查到書籍:"; if (@s_books){ for(@s_books){ say "\e[33;1m《$_》\e[0m" } }else{ say "\e[33;1m沒有查到/(ㄒoㄒ)/~~\e[0m\n" } } sub delete_vip{ &vip_list; &input_num; my $count=&vip_book("vip",$us); if($count){ say "\e[31;1m以上圖書未歸還,無法刪除!\e[0m"; return; }else{ my @remove_vip=splice @vips,$us-1,1; say "\e[31;1m !!! 已經刪除會員【@remove_vip】 !!!\e[0m"; } } sub add_vip{ print "\e[1m輸入添加的會員姓名:\e[0m"; chomp(my $new_vip=<STDIN>); push @vips,$new_vip; say "\e[32;1m已經添加會員【$new_vip】!!!\e[0m"; } sub search_vip{ print "\e[1m輸入會員姓名:\e[0m"; chomp(my $s_vip=<STDIN>); my @s_vips=grep /$s_vip/,@vips; say "\n\e[1m查到會員:"; if (@s_vips){ for(@s_vips){ say "\e[33;1m【$_】\e[0m" } }else{ say "\e[33;1m沒有查到/(ㄒoㄒ)/~~\e[0m\n" } } sub bo_book{ print "\e[1m輸入會員編號:\e[0m"; chomp(my $vip_id=<STDIN>); say "\e[1m已選擇會員:\e[33m$vips[$vip_id-1]\e[0m"; print "\e[1m輸入圖書編號:\e[0m"; chomp(my $book_id=<STDIN>); if($book_vip{$books[$book_id-1]}){ say "\e[31;1m《$books[$book_id-1]》已被$book_vip{$books[$book_id-1]}借出\e[0m"; }else{ say "\e[1m已選擇圖書:\e[33m《$books[$book_id-1]》\e[0m"; $book_vip{$books[$book_id-1]}=$vips[$vip_id-1]; say "\e[33;1m借書成功!!!\e[0m"; } } sub re_book{ print "\e[1m輸入圖書編號:\e[0m"; chomp(my $book_id=<STDIN>); if($book_vip{$books[$book_id-1]}){ my $bo_vip=$book_vip{$books[$book_id-1]}; delete $book_vip{$books[$book_id-1]}; say "\e[33;1m$bo_vip《$books[$book_id-1]》還書成功!!\e[0m"; }else{ say "\e[33;1m《$books[$book_id-1]》沒有被借出\e[0m" } } sub vip_book{ my ($in,$id); my $count=0; print "\e[1m輸入圖書編號:\e[0m" if ($_[0] eq "book") && (! $_[1]); print "\e[1m輸入會員編號:\e[0m" if $_[0] eq "vip" && (! $_[1]); chomp( $id=<STDIN>) if (! $_[1]); chomp( $id=$_[1]) if ($_[1]); $in = ($books[$id-1]) if $_[0] eq "book"; $in = ($vips[$id-1]) if $_[0] eq "vip"; say "\e[1m沒有找到該圖書\e[0m\n" if (! $in) && ($_[0] eq "book"); say "\e[1m《$in》沒有被借出\e[0m\n" if ($in) && ($_[0] eq "book") && (! $book_vip{$in}); say "\e[31;1m沒有找到該會員\e[0m\n" if (! $in) && ($_[0] eq "vip"); while(my ($bobook,$bovip)=each %book_vip){ if($in eq $bobook && $_[0] eq "book"){ say "\e[33;1m《$in》由${bovip}借出\e[0m" } if($in eq $bovip && $_[0] eq "vip"){ say "\e[33;1m【${in}】借出《$bobook》\e[0m";$count+=1 } } say "\e[33;1m${in}沒有借過書\e[0m" if ($in) && ($_[0] eq "vip") && ($count == 0); $count; } &index_list
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。