练习Perl单文件实现图书管理功能
最近不小心翻到了买的很多年的《perl语言入门》,于是写了一个小脚本熟悉一下。写得可能有些冗余,但尽量规范(用了strict)。里面主要用到数组、hash、子程序,可能对初学者练习有帮助就贴出来了,这个程序目前没有落地的功能,所有操作都存在内存,退出程序就还原了。比较初级有大牛可以绕道,也可以随意吐槽。
#!/usr/bin/perl-w#版本:1.0.1#时间:2017-09-13#作者:刘远#邮箱:centos@126.comuseutf8;use5.010;usestrict;binmode(STDIN,':encoding(utf8)');binmode(STDOUT,':encoding(utf8)');#解决linux退格的问题,windows下可能会不兼容`sttyerase^H`;#初始定义一些书和一些会员名my@books=('第一本Docker书','Perl语言入门','HeadPython','Linux企业应用案例精解');my@vips=('鬼魂儿','牛头','马面');my@books2=('图书列表','图书添加','图书删除','图书查找');my@vips2=('会员列表','会员添加','会员删除','会员查找');my@index=('图书管理','会员管理','借还书管理','保存退出');my@bo_re=('借书','还书','借还书查找');my@bo_re2=('按图书','按会员');my%book_vip;my$us;subbook_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";}subbook2_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;}subvip_list{for(0..$#vips){say$_+1,".$vips[$_]";}say"总共会员:",scalar@vips,"人";say"---------------------\n";}subvip2_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;}subbo_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;}subbo_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"}}}subindex_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"}}}subinput_num{my$user_select='';while($user_select!~/^\s*\d+\s*$/){print"\e[1m请输入对应数字:\e[0m";$user_select=<STDIN>;redoif$user_select!~/^\s*\d+\s*$/;}$us=$user_select;}subdelete_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";}}subadd_book{print"\e[1m输入添加的图书名称:\e[0m";chomp(my$new_book=<STDIN>);push@books,$new_book;say"\e[32;1m已经添加图书《${new_book}》!!!\e[0m";}subsearch_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"}}subdelete_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";}}subadd_vip{print"\e[1m输入添加的会员姓名:\e[0m";chomp(my$new_vip=<STDIN>);push@vips,$new_vip;say"\e[32;1m已经添加会员【$new_vip】!!!\e[0m";}subsearch_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"}}subbo_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";}}subre_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"}}subvip_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($ineq$bobook&&$_[0]eq"book"){say"\e[33;1m《$in》由${bovip}借出\e[0m"}if($ineq$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
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。