📄 address_list.pl
字号:
#!/usr/bin/perl -w
use strict;
my $choose;
my $flag=0;
my @number;
my %data;
my $open_filename = "d:/test/friends.txt";
my $save_filename;
while ( 1)
{ mainmenu();
print "\n\n Please input option(0~4): " ;
chomp ($choose=<STDIN>);
if ($choose eq '1')
{ print "\n\nInput the path name file to open.e.g.:d:/test/friends.txt\n";
print "press enter key to open default file.\n\n";
openfile(); next;
}
if ($choose eq '2')
{ print "\n\nInput the path name file to save.e.g.:d:/test/friends.txt\n";
print "press enter key to save opened file.\n\n";
savefile(); next; }
if ($choose eq '3')
{ editmenu(); next; }
if ($choose eq '4')
{ findmenu(); next; }
if ($choose eq '0')
{ exit; }
else { print "\nError.\nPress enter key to continue...";
<STDIN>; next; }
}
sub mainmenu
{ system "cls";
print "\n\n\n\n";
print "\nOpened file:$open_filename \n\n" if ($flag==1);
print " |*******Address List Management System******|\n " ;
print " |-------------------------------------------|\n " ;
print " | Please input option(0~6:) |\n " ;
print " |-------------------------------------------|\n " ;
print " | 1——Open file |\n " ;
print " | 2——Save file |\n " ;
print " | 3——Edit |\n " ;
print " | 4——View |\n " ;
print " | 0——Exit |\n " ;
print " |-------------------------------------------|\n " ;
}
sub editmenu
{ my $choose;
while ( 1)
{ system "cls" ;
print "\n\n\n\n";
print "\nOpened file:$open_filename \n\n" if ($flag==1);
print " |*******Address List Management System******|\n";
print " |-------------------------------------------|\n";
print " | Please input option(0~3:) |\n";
print " |-------------------------------------------|\n";
print " | 1——Add record |\n";
print " | 2——Del recond |\n";
print " | 3——Modify recond |\n";
print " | 0——Return mainmenu |\n";
print " |-------------------------------------------|\n";
print " Please input option(0~4): " ;
chomp ($choose=<STDIN>);
if ($choose eq '1')
{ myadd(); next; }
if ($choose eq '2')
{ mydelete_by_number(); next; }
if ($choose eq '3')
{ mymodify(); next; }
if ($choose eq '0')
{ last; }
else { print "Error.\nPress enter key to continue...";
<STDIN>; next; }
}
}
sub findmenu
{ my $choose;
while ( 1)
{ system "cls";
print "\n\n\n\n";
print "\nOpened file:$open_filename \n\n" if ($flag==1);
print " |*******Address List Management System******|\n";
print " |-------------------------------------------|\n";
print " | Please input option(0~3:) |\n";
print " |-------------------------------------------|\n";
print " | 1——View record by number |\n";
print " | 2——View record by name |\n";
print " | 0——Return mainmenu |\n";
print " |-------------------------------------------|\n";
chomp ($choose=<STDIN>) ;
if ($choose eq '1')
{ myview_by_number(); next; }
if ($choose eq '2')
{ myview_by_name(); next; }
if ($choose eq '0')
{ last; }
else { print "Error.\nPress enter key to continue...";
<STDIN>; next; }
}
}
### press enter key to open default file d:/test/friends.txt
sub openfile
{ my %hash ;
while ( 1)
{ print "Press 'q' key to return mainmenu.\n";
print "open_filename:";
chomp ($open_filename=<STDIN>); return(1) if ( $open_filename=~/^q$/i);
$open_filename = "d:/test/friends.txt" if ($open_filename =~ /\s*/);
if ( open( PH,"<$open_filename") ) { last; }
else { print "Cannot open $open_filename:maybe donnot exist or it's a forbidden file!\n"; next; }
}
while( <PH>)
{ chomp;
my $t=( split( /\s+/,$_))[2];
$hash{$t}=$_;
}
close PH;
@number = keys (%hash);
%data = %hash;
print "Read complete!\n"; $flag=1;
print "Press enter key to continue...";<STDIN>;
}
### press enter key to save opened file.
sub savefile
{ while ( 1)
{ print "Press 'q' key to return mainmenu.\n";
print "save_filename:";
chomp ($save_filename=<STDIN>);
return(1) if ( $save_filename=~/^q$/i);
$save_filename = $open_filename if ($save_filename =~ /\s*/);
if ( open( PH,"+>$save_filename") ) { last; }
else { print "Fail save!:maybe it's a forbidden file!\n"; next; }
}
foreach ( sort(@number))
{ print PH "$data{$_}\n"; }
close PH;
print "Save complete!\n";
print "Press enter key to continue...";<STDIN>;
}
### write to screen.
sub write_to_atdout
{ my $af = shift;
my $hf = shift;
my @number = @$af;
my %data = %$hf;
print "---------------------------------------------------------------\n";
print "NAME SEX NUMBER EMAIL ADDRESS\n";
print "---------------------------------------------------------------\n";
foreach $_ (@number)
{ last if (/\s/);
print "$data{$_}\n";
}
print "---------------------------------------------------------------\n";
}
#add
sub myadd
{
my ($name,$sex,$number,$email,$address);
my (%add_data);
my (@add_number);
while ( 1)
{ system "cls" ;
print "\n\n\n\n";
print "\nOpened file:$open_filename \n\n" if ($flag==1);
my $f1=0;
print "\nAdd list ...";
print "\nType 'q' to exit!\n";
#begin
print "---------------------------------------------------------------\n";
print "\nInput the number:";
chomp($number=<STDIN>); last if ( $number=~/^q$/i);
foreach ( @number)
{ if ( $_ eq $number)
{ print "The number has been exist!\nPress any key to continue...\n";
$f1 = 1; ###must before "last"
last if (<STDIN>);
}
}
next if ($f1 == 1 or !$number);
print "Input the sex (B=Boy/G=Girl):";
chomp($sex=<STDIN>); last if ($sex=~/^q$/i); $sex="<null>" if (!$sex);
print "Input the name:";
chomp($name=<STDIN>);
$name=~ tr/A-Z/a-z/; last if ($name=~/^q$/i); $name="<null>" if (!$name);
print "Input the email:";
chomp($email=<STDIN>); last if ($email=~/^q$/i); $email="<null>" if (!$email);
print "Input the address:";
chomp($address=<STDIN>); last if ($address=~ /^q$/i); $address="<null>" if (!$address);
print "\nSuccess!\n";
push (@number,$number); ##updat @number
#end
#write new added number to add file
open( ADDF,"+>>d:/test/add_friends.txt") || die "$!\n";
write ADDF;
close ADDF;
#read add file
open( ADDF,"<d:/test/add_friends.txt") || die "$!\n";
@add_number=();
while( <ADDF>)
{ chomp;
my $t=( split( /\s+/,$_))[2];
$add_data{$t}=$_;
}
close ADDF;
@add_number = keys (%add_data);
%data = (%data,%add_data); ##updata %data
#write(@add_number);
write_to_atdout(\@add_number,\%add_data);
print "Press enter key to continue...\n"; (<STDIN>);
}
unlink "d:/test/add_friends.txt";
print "\nAll done.\n";
format ADDF=
@<<<<<<<< @<<<<< @<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<
$name, $sex, $number, $email, $address
.
##define for myadd sub_function
}##end sub
###效率较低,每次都要读写文件操作,但这个文件较小!
sub mymodify
{
my ($name,$sex,$number,$email,$address);
my (@modify_number);
while ( 1)
{ system "cls" ;
print "\n\n\n\n";
print "\nOpened file:$open_filename \n\n" if ($flag==1);
my $flag = 0;
print "\nModify guest by inputed number...\n";
print "Type 'q' to exit!\n";
#begin
print "---------------------------------------------------------------\n";
print "\nModify the number:";
chomp($number=<STDIN>);
foreach $_ (@number)
{ if ( /^$number$/)
{ $flag = 1;
push (@modify_number,$_);
next;
}
}
#flow control
last if ( $number=~/^q$/i);
if ($flag != 1 or !$number)
{ print "The number donnot exist!\nPress enter key to continue...\n";
next if (<STDIN>);
}
write_to_atdout(\@modify_number,\%data);
#end
print "\nInput the sex (B=Boy/G=Girl):";
chomp($sex=<STDIN>); last if ($sex=~/^q$/i); $sex="<null>" if (!$sex);
print "Input the name:";
chomp($name=<STDIN>);
$name=~ tr/A-Z/a-z/; last if ($name=~/^q$/i); $name="<null>" if (!$name);
print "Input the email:";
chomp($email=<STDIN>); last if ($email=~/^q$/i); $email="<null>" if (!$email);
print "Input the address:";
chomp($address=<STDIN>); last if ($address=~ /^q$/i); $address="<null>" if (!$address);
#write modified number to modify file
open( MODF,"+>>d:/test/modify_friends.txt") || die "$!\n";
write MODF;
close MODF;
#read add file
open( MODF,"<d:/test/modify_friends.txt") || die "$!\n";
while( <MODF>)
{ chomp;
my $t=( split( /\s+/,$_))[2];
$data{$t}=$_; ##re_write by form,complete modify
}
close MODF;
#display modified number
write_to_atdout(\@modify_number,\%data);
print "Press enter key to continue...\n"; (<STDIN>);
}
unlink "d:/test/modify_friends.txt";
print "\nAll done.\n";
format MODF=
@<<<<<<<< @<<<<< @<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<
$name, $sex, $number, $email, $address
.
##define for mymodify sub_function
}##end sub
###效率较低,每次都要读写文件操作,但这个文件较小!
#delete
sub mydelete_by_number
{ my ($number);
my @dele_number = ();
while ( 1)
{ system "cls" ;
print "\n\n\n\n";
print "\nOpened file:$open_filename \n\n" if ($flag==1);
my @t_number =();
my $flag = 0;
print "\nDelete guest by inputed number...\n";
print "Type 'q' to exit!\n";
#begin
print "---------------------------------------------------------------\n";
print "\nDelete the number:";
chomp($number=<STDIN>);
foreach $_ (@number)
{ if ( /^$number$/)
{ $flag = 1;
push (@dele_number,$_); ##careful! never updata $data
next;
}
push (@t_number,$_);
}
@number = @t_number; ##careful! updata @old_number
#flow control
last if ( $number=~/^q$/i);
if ($flag != 1 or !$number)
{ print "The number donnot exist!\nPress enter key to continue...\n";
next if (<STDIN>);
}
print "\nSuccess!\n";
#end
#write(@dele_number);
write_to_atdout(\@dele_number,\%data);
print "Press enter key to continue...\n"; (<STDIN>);
}
print "\nAll done.\n";
}##end sub
#display by number
sub myview_by_number
{
my ($number);
my (@find_number);
while( 1)
{ system "cls";
print "\n\n\n\n";
print "\nOpened file:$open_filename \n\n" if ($flag==1);
my $f1 = 0;
print "Type 'q' to exit\n";
print "Find ...\n";
#begin
print "Input the number to find:";
chomp($number=<STDIN>); last if ( $number=~/^q$/i);
foreach (@number)
{ if ( /^$number$/)
{ push @find_number,$_;
$f1=1;
}
}
if ($f1 != 1 or !$number)
{ print "The number donnot exist!\nPress enter key to continue...\n";
next if (<STDIN>);
}
print "\nSuccess!\n" ;
#end
#write(@find_number);
write_to_atdout(\@find_number,\%data);
print "Press enter key to continue...\n"; (<STDIN>);
}
print "\nAll done.\n";
} #end sub
##存在一个问题,那就是如两次输入查询相同的号码,会重复显示
#display by name.
sub myview_by_name
{
my (@name);
my ($name,$number);
@number =();###chear @number! keep in step with name(synchronous)
while ( ($number,$_) = each (%data) )
{ $name=( split( /\s+/,$_))[0];
$data{$number}=$_;
push (@name,$name);
push (@number,$number);
}
while( 1)
{ system "cls";
print "\n\n\n\n";
print "\nOpened file:$open_filename \n\n" if ($flag==1);
my $flag=0;
print "Type 'q' to exit\n";
print "Find by inputed name ...\n";
print "\nNAME :";
chomp($name=<STDIN>);
$name=~ tr/A-Z/a-z/;
next if ( !$name );
last if ( ($name eq 'q'));
#display by name,keep step with number.
print "---------------------------------------------------------------\n";
print "NAME SEX NUMBER EMAIL ADDRESS\n";
print "---------------------------------------------------------------\n";
my $i;
for($i=0;$i<=$#name;$i++)
{ $_=$name[$i];
if ( /^$name$/ and $name)
{ print "$data{$number[$i]}\n";
$flag=1;
}
}
print "---------------------------------------------------------------\n";
#cannot find this name
if ($flag==0)
{ print "Customer record not found.\n" ;
}
else { print "Success!\n";}
print "Press enter key to continue...\n"; (<STDIN>);
}
print "\nAll done.\n";
}##end sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -