⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 address_list.pl

📁 一个简单的通讯录,实现了简单的电话记录的增删改查等操作
💻 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 + -