二人目以降の出席率計算がおかしい

このQ&Aのポイント
  • 二人目以降から出席率計算が正しくできない問題について相談です。
  • 現在、出席管理システムを開発していますが、二人目以降の出席率計算がうまくいきません。
  • 具体的には、13人分の出席状況データを処理し、出席率を計算して表示しているのですが、6人目から正しい値が出力されなくなってしまいます。
回答を見る
  • ベストアンサー

二人目以降から計算がおかしくなってしまうんです。

質問失礼します。出席管理みたいなものを作っているのですが下記のように13回ループさせて出席した場合はカウントが入りそこから$percent = $count / 13.0 * 100;という計算方法で出席率を出しているのです。 一人目は正常に出てくるのですが、二人目以降から計算がおかしくなってしまいます。 my $gs,$name,$s[1],$s[2],$s[3],$s[4],$s[5],$s[6],$s[7],$s[8],$s[9],$s[10],$s[11],$s[12],$s[13],$sr; open(READ,"2.csv"); #ファイルを読み込む @lines = <READ>; close(READ); #ファイルを閉じる foreach $line ( @lines ){ # @s に 添え字の1から13までに、出席の状態が入る。 ($gs,$name,$s[1],$s[2],$s[3],$s[4],$s[5],$s[6],$s[7],$s[8],$s[9],$s[10],$s[11],$s[12],$s[13],$sr)=split(/,/,$line); print "<tr><td>$gs</td><td>$name</td>"; for($i=1;$i<=13;$i++){ $str = "$gs" . "_" . "$i"; if( $s[$i] eq "1"){ print "<td><input type=\"checkbox\" name=\"$str\" value=\"1\" checked></td>\n"; $count ++; }else{ print "<td><input type=\"checkbox\" name=\"$str\" value=\"1\"></td>\n"; } } $percent = $count / 13.0 * 100; $percent_2 = sprintf "%3.0f",$percent; print "<td>$percent_2%</td></tr>"; } 6人目になると100%が上限なのですが300%などいってしまいます。説明が下手で申し訳ないですが、ご助言いただけないでしょうか?

  • Perl
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • ymasan
  • ベストアンサー率45% (16/35)
回答No.2

すみません、ちょっと補足です。 $count=0; を入れるのは、for文の前です。 もしくは for($count=0, $i=1;$i<=13;$i++){ でもOKなはずです。

terunosuke
質問者

お礼

迅速な回答ありがとうございます。解決しました。

その他の回答 (1)

  • ymasan
  • ベストアンサー率45% (16/35)
回答No.1

$countを初期化してないせいだと思います。 ループの最初で$count=0としてください。

関連するQ&A

  • チェックボックスを使用してのAND検索

    宜しくお願いします。 検索データベース2という、CGI-GARAGE さんのCGIを使って、データベースの検索プログラムを作ってみているのですが、初期の仕様でチェックボックスでの検索が、or検索になっています。 これを、AND検索できるように変えたいのですが、どなたかお力を貸していただけませんでしょうか? チェックボックスに関係ありそうな部分は2箇所あったのですが 補足が必要であれば言ってください。宜しくお願いします。 $print .= "<TD><input type=checkbox name=\"$count\" value=\"$sobicount\">$p[1]</TD>\n"; if($tcount >= 5 && ($tcount % 5) eq 0){ $print .= "</TR>\n"; ---------------------------------------------------- my $pp = $tcount - 1; $print .= "<TD><input type=checkbox name=\"$count\" value=\"$pp\">$p  </TD>\n"; if($tcount >= 5 && ($tcount % 5) eq 0){ $print .= "</TR>\n"; }

    • 締切済み
    • CGI
  • 検索結果の表示形式を表形式にしてだしたいのですが・・・

    CGI初心者です。データベース検索のCGIをフリーからカスタマイズをかけて利用を試みています。今の状態では、検索結果が、 print "<LI><a href=\"$script?mode=view&no=$no\">$sub</a>\n"; 状態で表示されます。 が、これをメンテするときの一覧状態にしたいのです。 メンテ時の表示プログラムは、 # 管理画面を表示 &header; $count = @lines; print "<center>\n"; print "<form action=\"$script\" method=\"$method\">\n"; print "<input type=hidden name=pass value=\"$in{'pass'}\">\n"; print "<input type=hidden name=mode value=\"admin\">\n"; print "<input type=hidden name=action value=\"delete\">\n"; print "<table border=1 cellspacing=1><tr>\n"; print "<th>削除<th>料理名<th>食種<th>食材<th>調理法<th>コメント</tr>\n"; foreach $line (@lines) { local($no,$sub,$com,$p1,$p2,$p3) = split(/<>/, $line); $com =~ s/<br>/ /g; $com =~ s/</&lt;/g; $com =~ s/>/&gt;/g; if (length($com) > 60) { $com = substr($com,0,58); $com = "$com" . '..'; } print "<tr><th><input type=checkbox name=del value=\"$no\"></th>"; print "<td><b><a href=\"$script?mode=mente&no=$no\">$sub</a></b></td>"; print "<td>$part1[$p1]</td><td>$part2[$p2]</td><td>$part3[$p3]</td>"; print "<td><small>$com</small></td></tr>\n"; } print "</table><P>\n"; です。どうしたら、メンテ時のような一覧の表形式で表示できるのでしょうか? あと、あまりに言語がわからないので、なにか良い参考書及びHPがあれば教えてください。

    • 締切済み
    • CGI
  • チェックボックスを利用してデータの更新をしたいのですが

    どうもです!またまた質問失礼します。出席管理の作成をしているのですが、番号と名前を追加することができまして、この後チェックボックスをクリックしてデータ更新ボタンを押しそのチェックしたところを残したいのですが詰まってしまって困っています。 # 学籍番号と出席の入ったファイルからすべて読み出す。 # 学籍番号と名前を保存しておく。 # @gs(学籍番号) , @name(名前); my $gs,$name,$s[1],$s[2],$s[3],$s[4],$s[5],$s[6],$s[7],$s[8],$s[9],$s[10],$s[11],$s[12],$s[13],$sr; open(READ,"3.csv");#ファイルを読み込む @lines = <READ>; close(READ);#ファイルを閉じる # 学籍番号分の繰返し { # 出席回数分の繰返し { # if文を使い、1 or 0を確認して、保持する(配列に入れる)。 まず『学籍番号と名前を保存しておく。』この二つだけを保存するのが???です。そして、このあと学籍番号と出席回数分の繰返しをやるわけですが。この前はforeachを使うのでしょうか? 説明不足の文かと思いますがご助言お願い致します。

  • チェックボックス設定の方法教えてください

    チェックボックスの設定方法を教えてください。 項目1.大分類にチェックすると中分類と小分類にもチェックが入る。 項目2.中分類にチェックすると小分類にもチェックが入る。 項目2の設定はわかりますが、項目1の設定がどうしてもできません。 <script language=javascript> function allCheck(obj){ f=obj.form num=obj.name.replace("b","") for(var i=0;i<f.length;i++){ if(f[i].name=="s"+num) f[i].checked=obj.checked; } } </script> <FORM> <TABLE border=0> <TBODY> <TR> <TD class=color_1 rowSpan=4><INPUT onclick=allCheck(this) type=checkbox name=b1>大分類</TD> <TD class=color_1 rowSpan=4><INPUT onclick=allCheck(this) type=checkbox name=b1>中分類</TD> <TD class=color_1><INPUT type=checkbox name=s1>小分類</TD></TR> <TR> <TD class=color_2><INPUT type=checkbox name=s1>小分類</TD></TR> <TR> <TD class=color_1><INPUT type=checkbox name=s1>小分類</TD></TR> <TR> <TD class=color_2><INPUT type=checkbox name=s1>小分類</TD></TR> <TR> <TD class=color_1 rowSpan=3><INPUT onclick=allCheck(this) type=checkbox name=b2>中分類 <P></P></TD> <TD class=color_1><INPUT type=checkbox name=s2>小分類</TD></TR> <TR> <TD class=color_2><INPUT type=checkbox name=s2>小分類</TD></TR> <TR> <TD class=color_2><INPUT type=checkbox name=s2>小分類</TD></TR></TBODY></TABLE></FORM> すいませんが、教えて下さい。

  • 関数の実行ができません

    function printData($str) { print("alert($str)"); return true; } print("<td><a href=\"#\" onClick=\"alert($i);return false\">$i</a></td>\n"); 上記を参考に関数(printdata)の呼び出しをおこなったの ですがうまく呼び出しできません。 print("<td><a href=\"#\" onClick=\"new Function($this->printdata($i))\";return false\">$i</a></td>\n"); どなたかご存知でしたら教えてください。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHPでの単語の出現回数表示

    単語 回数  I   1 am 1 a 4 boy 2 . 4 This 1 is 3 pen 1 That 1 desk 1 He 1         ↑ ずれてしまいますが回数と同じ行です。 と上のように出したいのですが何をすればいいのかがわかりません参考書等を見てforeachを使うことがわかったのですが使い方がいまいちよくわかりませんどうかお願いします! 自分なりにやってみたのが下です <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <?php $str ="I am a boy.This is a pen.That is a desk.He is a boy."; $data = split(" ",$str); foreach($data as $tango) $count[tango]++; foreach($count as $tango => $value){ print "<tr><td align='center'>$tango</td>"; print "<td align='right'>$value</td></tr>"; ?> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • セレクトメニューでファイルの一部分を表示させたい

    こんばんは、初めまして。初心者です。 今回、セレクトメニューの部分にファイル(allcategory)の中の Ccategoryという値を入れたいのですが、 さっぱり分からなくって。 他の部分は、別のファイル(allpage)のファイルの値が入ります。 また、for($i=0;$lines[$i];$i++) の部分で カテゴリー名が入らないのです。 どうやってもうまくいかないので教えてください。 よろしくお願いします。 (たくさんスクリプトを入れてすみません。) function contents() { $id = $_GET[id]; $lines = @file($this->allpage); $lines = @file($this->allcategory); for($i=0;$lines[$i];$i++) { list($Pid,$Ptitle,$Psetsu) = explode("<>",$lines[$i]); if($Pid == $id) { $ePid = $Pid; $ePtitle = $Ptitle; $ePsetsu = $Psetsu;} for($i=0;$lines[$i];$i++) { list($Cid,$Ccategory) = explode("<>",$lines[$i]); if($Pid == $id) { $eCid = $Cid; $eCcategory = $Ccategory; } if($lines[0]) { $contents .= "<tr bgcolor=\"#cccccc\"><td>カテゴリー名</td><td>ID</td><td>ページ名</td><td>簡易説明</td><td>処理</td></tr>\n"; $contents .= "</table>\n"; } $contents .= "<br />\n"; $contents .= "<br />\n"; if($id) { $pt1 = "編集"; $e_lines = file("$this->pagedir$ePid.cgi"); for($e=0;$e_lines[$e];$e++) { $ev .= "$e_lines[$e]"; } $ev = str_replace("&","&amp;",$ev); $e_lines = file("$this->allcategory"); for($e=0;$e_lines[$e];$e++) { $cv .= "$e_category[$e]"; } $cv = str_replace("&","&amp;",$ev); $contents .= "<tr bgcolor=\"#cccccc\"><td width=\"15%\">カテゴリーの選択</td><td bgcolor=\"#ffffff\"><SELECT name=\"Ccategory\">\n"; for($i=0;$i<count($lines);$i++){ $contents .= "<OPTION value=\"$i\">\"$Ccategory[$i]\"</OPTION>}\n"; $contents .= "</SELECT></td></tr>\n";

    • ベストアンサー
    • PHP
  • PHPで以下のようなコードでエラーが出て原因が分かりません

    function hoge($name){ $cb_list=""; for($i=1;$i<count($this->$name);$i++){ $cb_list .= $this->$name[$i+1]; } } としています。 $this->$nameの部分はクラスの中で設定した配列ですがその要素を取得できません。 どのようにしたら良いでしょうか? 関数内で print_r($this->$name); は表示されます。 教えてください。

    • ベストアンサー
    • PHP
  • phpで名簿データを出力

    名簿データを開き、一枠に番号・名前・住所・電話・メールを書き出し一列に4名分のデータを並べます。 CGIだと以下の様なイメージかと思いますが、今回はPHPで書くように指示されました。 勉強不足で月曜迄に出来る気がしません。どのように書けば良いかご教示よろしくお願いします。 open (IN,"meibo.txt"); @abc = <IN>; close (IN); print = "<table border=1><tr>\n"; foreach (@abc) {($id,$name,$address,$tel,$mail) = split(/<>/); print <<HTML; <td>$id<br>$name<br>$address<br>$tel<br>$mail</td> HTML $count++; if ($count > 4){print = "</tr><tr>\n"; $count = 0;} } print = "</tr></table>\n";

    • ベストアンサー
    • PHP
  • 不明の「1」が出る。

    CGIファイルを実行させると必ずといっていいほど、最後に「1」が表れます。 これは一体何なのでしょうか? なぜ出てくるのでしょうか? 現在以下のようなものを作成したのですが、 if条件であってたばあい、表示されたときに、1が複数出てしまって見栄えが悪いです。 これを消す方法を教えてください。 print "<TABLE CELLSPACING=1>\n"; print "<TR>\n"; print "<TD CLASS=TD1 WIDTH=100>名前</TD>\n"; print "<TD CLASS=TD1 WIDTH=100>ふりがな</TD>\n"; print "<TD CLASS=TD1 WIDTH=100>内線番号</TD>\n"; print "</TR>\n"; for ($i=0;$i<$gyou;$i++){ @log = split(/&/,$FILES[$i]); foreach(@log){ ($key,$value) = split(/=/,$_); $FORM{$key} = $value; $FORM{'SYOZOKU'} =~ s/\n$//g; } if ($searchkey eq $FORM{'SYOZOKU'}){ print &ok;} } sub ok{ print "<TR>\n"; print "<TD CLASS=TD1 HEIGHT=20>$FORM{'NAME'}</TD>\n"; print "<TD CLASS=TD1 HEIGHT=20>$FORM{'KANA'}</TD>\n"; print "<TD CLASS=TD1 HEIGHT=20>$FORM{'BANGOU'}</TD>\n"; print "</TR>\n"; } print "</TABLE>\n"; print "</BODY>\n"; print "</HTML>\n";

    • ベストアンサー
    • CGI