|
タイピングプログラム作成1
|
プログラムの作成を始めていきたいと思います。ここではまず、タイピングを行う際に必要な設定を登録する画面を作成します。 |
まず、タイピングの設定画面を作ります。
設定画面では、タイピングをするための設定を行えるようにします。
まず大きくテストを行う場合と練習をする場合に分かれます。テストの際には、ワープロ検定のタイピング速度を計る時間である10分間を基準とします。
これは強制的に10分間の時間で終了させるので、画面上では他の設定はしないつもりなのですが、練習の場合には、時間、出題数、レベルなどを組み合わせて実行できるようにと考えています。 |
タイピングを行う設定を具体的に考えていきます。
試験区分 |
テスト |
練習 |
出題数 |
指定なし |
10問 |
30問 |
50問(初期値) |
100問 |
200問 |
300問 |
400問 |
500問 |
時間 |
指定なし |
1分 |
3分 |
5分 |
10分(初期値) |
20分 |
30分 |
40分 |
50分 |
60分 |
レベル |
指定なし |
1 |
2 |
3 |
4 |
5以上 |
試験区分はテストか練習かを判断します。
出題数、時間、レベルは試験区分が練習の場合のみ有効とします。
出題数は実行する問題の数を設定します。
初期値は50で、指定なしと言うのは時間で練習する場合に指定します。
時間はタイピングを行う時間を設定します。
初期値は10分で、指定なしは出題数で練習する場合に指定します。
レベルは、問題のレベルを設定します。
レベルは5文字単位でアップしていきます。
レベル1は5文字までのデータでタイピングを行い、レベル2は10文字までの
データでタイピングを行います。
指定なしだとすべてのデータを対象とします。
タイピングの設定を行うページは下記のとおりです。
<FORM action="typest" method="POST">
<TABLE border="1">
<TBODY>
<TR>
<TD>タイピング種類</TD>
<TD>
<SELECT name="type">
<OPTION value="0" selected>テスト</OPTION>
<OPTION value="1">練習</OPTION>
</SELECT>
</TD>
</TR>
<TR>
<TD>出題数</TD>
<TD>
<SELECT name="number">
<OPTION value="0">指定無し</OPTION>
<OPTION value="10">10</OPTION>
<OPTION value="30">30</OPTION>
<OPTION value="50" selected>50</OPTION>
<OPTION value="100">100</OPTION>
<OPTION value="200">200</OPTION>
<OPTION value="300">300</OPTION>
<OPTION value="400">400</OPTION>
<OPTION value="500">500</OPTION>
</SELECT>
</TD>
</TR>
<TR>
<TD>時間(分)</TD>
<TD>
<SELECT name="time">
<OPTION value="0">指定なし</OPTION>
<OPTION value="1">1</OPTION>
<OPTION value="3">3</OPTION>
<OPTION value="5">5</OPTION>
<OPTION value="10" selected>10</OPTION>
<OPTION value="20">20</OPTION>
<OPTION value="30">30</OPTION>
<OPTION value="40">40</OPTION>
<OPTION value="50">50</OPTION>
<OPTION value="60">60</OPTION>
</SELECT>
</TD>
</TR>
<TR>
<TD>レベル</TD>
<TD>
<SELECT name="level">
<OPTION value="0" selected>指定なし</OPTION>
<OPTION value="1">1</OPTION>
<OPTION value="2">2</OPTION>
<OPTION value="3">3</OPTION>
<OPTION value="4">4</OPTION>
<OPTION value="5">5以上</OPTION>
</SELECT>
</TD>
</TR>
<TR>
<TD colspan="2" align="right">
<INPUT type="submit" name="typest" value="タイピングスタート">
</TD>
</TR>
</TBODY>
</TABLE>
|
|
殺風景な画面ですが、ページのレイアウトなどは、後から変更できることなので、ある程度形が整ってから、レイアウト等は考えていきたいと思います。
設定画面が出来たら、この設定を元にタイピングを始めるためのサーブレットを作っていきたいと思います。 |
「TypeStServ.java」というファイルを作り、この中にタイピングの実行に必要な設定を登録するプログラムをコーディングしていきます。
まず、最初に先ほどのページで設定されたパラメータの値を取得します。
String wtype = req.getParameter("type");
String wnumber = req.getParameter("number");
String wtime = req.getParameter("time");
String wlevel = req.getParameter("level"); |
上から、試験区分、出題数、時間、レベルと4つの値をワークエリアに取り込みました。
続けて、開始時刻を取得したいと思います。
Calendar cal = Calendar.getInstance();
int wyear = cal.get(Calendar.YEAR);
int wmonth = cal.get(Calendar.MONTH) + 1;
int wdate = cal.get(Calendar.DATE);
int whour = cal.get(Calendar.HOUR);
int wminute = cal.get(Calendar.MINUTE);
int wsecond = cal.get(Calendar.SECOND);
int wap = cal.get(Calendar.AM_PM);
if (wap == Calendar.PM){
//24時間表示に変更
whour = whour + 12;
} |
日時の取得はCalendarクラスを使います。
上から、年、月、日、時、分、秒を取得しています。
int wap = cal.get(Calendar.AM_PM);
は午前か午後かを取得しています。
時間については、12時間表示のため、午前か午後かを取得し、午後の時には時に12を足し、24時間単位に変更します。
次に、終了時刻を求めます。終了時刻は試験区分がテストの時には、10分後、練習の時には練習で設定した時間を足した時刻を求めます。
int end_hour = 0;
int end_minute = 0;
int itime = 0;
//終了時刻の設定
if (wtype.equals("0")){
itime = 10;
}else{
itime = Integer.parseInt(wtime);
}
cal.add(Calendar.MINUTE,itime);
end_hour = cal.get(Calendar.HOUR);
end_minute = cal.get(Calendar.MINUTE);
if (wap == Calendar.PM){
//24時間表示に変更
end_hour = end_hour + 12;
} |
試験区分がテストかどうかを比較し、テストの場合は設定時間を10分にし、テストでない場合には、パラメータの値を設定時間にします。
itime = Integer.parseInt(wtime);
パラメータの値は文字列なので、int型に変換する必要があるので、Integer.parseInt(wtime)で変更しています。
終了時刻を求めるには、addメソッドを使って求めます。
cal.add(Calendar.MINUTE,itime);
Calendar.MINUTEが分を表していて、itimeの値を足します。
足した後、時、分を改めて取り出して終了時刻を取り出します。
開始時刻と同じように、24時間単位に変更しておきます。
|
データ登録に必要な情報がそろったら、データベースへの登録を行っていきます。
新しくタイピング履歴テーブルを作成しました。
変数名 |
データ型 |
内容 |
id |
int unsigned |
id |
student_id |
int unsigned |
生徒テーブルのID |
test_cd |
int unsigned |
タイピング種別 |
set_time |
tinyint unsigned |
設定時間 |
set_number |
tinyint unsigned |
出題数 |
set_level |
tinyint unsigned |
設定レベル |
type_cnt |
int unsigned |
タイピング実行回数 |
type_date |
date |
タイピング実行日 |
st_time |
time |
タイピング開始時刻 |
end_time |
time |
タイピング終了時刻 |
type_speed |
int unsigned |
タイピング速度 |
type_score |
int unsigned |
得点 |
このテーブルに設定項目を登録しておきます。
sql = "insert into typehis_table(student_id,test_cd,set_time,set_number,set_level,type_cnt,type_date,st_time,end_time)";
sql = sql + " values(" + uid + "," + wtype + "," + wtime + "," + wnumber + "," + wlevel + "," + wcnt;
sql = sql + ",'" + wyear + "/" + wmonth + "/" + wdate + "','" + whour + ":" + wminute + ":" + wsecond + "'";
sql = sql + ",'" + end_hour + ":" + end_minute + ":" + wsecond + "'";
sql = sql + ")" ;
statement.executeUpdate(sql); |
|
データの登録が出来たら、タイピングを開始するための情報を取得します。
タイピングテーブルから、タイピングの問題を取り出し、画面上に表示させる必要があります。
sql = "SELECT * FROM type_table ";
if (wtype.equals("1")){
if (wlevel.equals("0")){
}else{
sql = sql + "where level <= " + wlevel;
}
}
sql = sql + "order by rand()" ;
// クエリーの実行
result
= statement.executeQuery(sql); |
タイピングテーブルから、タイピングデータを取得するのですが、レベルの設定によって、検索条件を変えています。
後、問題をランダムに取得するために「order by rand()」を設定しています。
データの取得が出来たら、画面に表示させます。
req.setAttribute("type",wk_type);
req.setAttribute("kana",wk_kana); |
タイピングデータと、ふりがなのデータを設定して、WEBに渡します。
<%= request.getAttribute("type") %>
<br>
<br>
<%= request.getAttribute("kana") %>
<br>
<br> <INPUT type="text" size="150" name="ansbox"><br>
<INPUT type="submit" name="login" value="送信"> |
type.jspファイルの内容を表示させたのが下記の画面です。
上に問題、下によみがなを表示させています。
INPUTエリアに文字を入力して、タイピングを行っていきます。 |
これでタイピング処理を始める所までできました。
次回は、実際にタイピングを行って集計まで完成させたいと思います。 |
タイピングデータ作成 UP タイピングプログラム作成2 |
  |
|