シンボルテーブル
教科 $ 単語 $ 日本語


kyoka

  
ei "英語"
su "数学"
koku "国語"
ri "理科"
sha "社会"



例:「"ei" → "英語" の関連づけ」

$ei = "英語" ;
  
print "教科名:" ;
$kyoka = <STDIN> ;
chomp $kyoka ;
  
print "$$kyoka が入力されました。" ;



シンボルテーブル
教科 $ 単語 $ 数値


kyoka

  
ei   0
su   1
koku   2
ri   3
sha   4



連鎖シンボルテーブル
教科 $ 単語 $ 数値 $ 日本語


kyoka

  
ei "00" "英語"
su "01" "数学"
koku "02" "国語"
ri "03" "理科"
sha "04" "社会"



例:「教科名と得点の表示」
  
$seito = [85, 100, 90, 65, 70] ;
$ei = "00" ;
$00 = "英語" ;
  
print "教科名:" ;
$kyoka = <STDIN> ;
chomp $kyoka ;
  
print "$$$kyoka $seito->[$$kyoka]  点" ;
  

1年1組1学期中間
番号 英語 数学 国語 理科 社会
1101   85 100   90   65   70



# 成績データの読み込み
open (F, "1年1組1学期中間.txt") ;
for (<F>)
    {
     chomp ;
     ($ban, @ten) = split /,/ ;
     $chu_1->{$ban} = [@ten]
    }
$score = {"1学期中間" => $chu_1} ;
  
print <<EOF;
1101 英語 $score->{"1学期中間"}->{1101}->[0] 点
1101 数学 $score->{"1学期中間"}->{1101}->[1] 点
1101 国語 $score->{"1学期中間"}->{1101}->[2] 点
EOF
# 名前データの読み込み
  
open (F, "1年1組名前.txt") ;
for (<F>)
    {
     chomp ;
     $name{$`} = $' if /,/  
    }
  
print <<EOF;
1101 → $name{1101}
1102 → $name{1102}
1103 → $name{1103}
EOF
  

# seiseki-2.pl
# 成績管理プログラム(2)
  
# 単語の表示
  print <<EOF;
\n (chu-1学期中間, ki-1学期期末)
\n (ei-英語, su-数学, koku-国語, ri-理科, sha-社会)
EOF
  
# シンボリック・リファレンス
  ($ei, $su, $koku, $ri, $sha) = qw (00 01 02 03 04) ;
  ($00, $01, $02, $03, $04) = qw (英語 数学 国語 理科 社会) ;
  ($chu, $ki) = qw (1学期中間 1学期期末) ;
  
# 名前のハッシュ
  open (F, "1年1組名前.txt") ;
  for (<F>)
     {
      chomp ;
      $name{$`} = $' if /,/  
     }
  open (F, "1年2組名前.txt") ;
  for (<F>)
     {
      chomp ;
      $name{$`} = $' if /,/  
     }
  
# 得点のハッシュ
  open (F, "1年1組1学期中間.txt") ;
  for (<F>)
     {
      chomp ;
      ($ban, @ten) = split /,/ ;
      $chu_1->{$ban} = [@ten]
     }
  open (F, "1年2組1学期中間.txt") ;
  for (<F>)
     {
      chomp ;
      ($ban, @ten) = split /,/ ;
      $chu_1->{$ban} = [@ten]
     }
  open (F, "1年1組1学期期末.txt") ;
  for (<F>)
     {
      chomp ;
      ($ban, @ten) = split /,/ ;
      $ki_1->{$ban} = [@ten]
     }
  open (F, "1年2組1学期期末.txt") ;
  for (<F>)
     {
      chomp ;
      ($ban, @ten) = split /,/ ;
      $ki_1->{$ban} = [@ten]
     }
  
$score = {"1学期中間" => $chu_1, "1学期期末" => $ki_1} ;
# 得点の表示
  while (1)
    {
     print "\n 表示させる得点 (例:1101-chu-ei):" ;
     $ten = <STDIN> ;
     chomp $ten ;
     ($num, $gakki, $kyoka) = split /-/, $ten ;
     $test = $score->{$$gakki}->{$num}->[$$kyoka] ;
     print "\n $num $name{$num}:$$gakki $$$kyoka $test 点 \n" ;
  
# 継続判断
     print "\n 続けますか (1.はい  他.いいえ):" ;
     $nx = <STDIN> ;
     chomp $nx ;
     unless ($nx eq "1") {last}
    }