シンボルテーブル
教科 |
$ |
単語 |
$ |
日本語 |
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}
}