- 日志
- 好友
- 卖家信用

- 买家信用

- 注册时间
- 2008-7-13
- 在线时间
- 小时
|
发表于 2009-7-15 14:16:56
|
显示全部楼层
//レポートボックスを格納、管理するリスト(java言語の基本クラスではないのでimportする必要有)
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
public class Main {
/**
* レポートを自分の課題名と同じレポートボックスに提出する処理
* (課題名不一致で提出できなかったレポートは未提出レポートリストに保存する)
* @param rpt : 提出するレポート
* @param lstRptBox: レポートボックスを格納リスト
* @param lstBadRpt: 未提出レポート格納リスト
*/
private static void addReportToOwnReportBox(Report rpt,List lstRptBox,List lstBadRpt){
int iLoop;
boolean bSubmited = false; //提出済みフラグ(true:提出済み;false:未提出)
//提出レポートと同じ課題名のレポートボックスを探し、あったらレポートを提出する
for(iLoop=0;iLoop<lstRptBox.size();iLoop++){
ReportBox rb = (ReportBox)lstRptBox.get(iLoop);
if(rb.getSubject().equals(rpt.getSubject())){ //レポートの課題名と同じ課題名のレポートボックスの場合
rb.add(rpt); //レポートを提出する
bSubmited = true; //提出済みに
}//end if
}//end for
if(!bSubmited) //未提出の場合
lstBadRpt.add(rpt); //同じ課題名のレポートボックスがないということで、未提出リストに追加する
}
public static void main(String[] args) {
/* 元のソースは削除
ReportBox rbx = new ReportBox(100);
Report r1 = Report.make("Matsuura", "p00000", "オブジェクト指向プログラミングI", "継承とは、既存のクラスの性質を受け継いで新たなクラスを定義することである。");
Report r2 = Report.make("Matsuura", "p00000", "オブジェクト指向プログラミングI", "***");
Report r3 = Report.make("Yamada", "p10000", "オブジェクト指向プログラミングI", "***");
System.out.println("作成時: " + r1);
System.out.println("作成時: " + r2);
System.out.println("作成時: " + r3);
System.out.println("=========================================");
r2.setContents("継承において親クラスをスーパークラスとも呼ぶ。");
r3.setSubject("OOPI 演習第2 回");
r3.setContents("class ReportBox{ ... }");
rbx.add(r1);
rbx.add(r2);
rbx.add(r3);
System.out.println("提出時: " + rbx);
r1.setMark(90);
r2.setMark(80);
r3.setMark(67);
System.out.println("=========================================");
System.out.println("採点後: " + rbx);
*/
//レポートボックスを格納 5対応
List lstReportBox = new ArrayList();
//課題名が不一致で提出できなかったレポート格納 5対応(未提出レポートの一覧を表示する ために保存)
List lstBadReport = new ArrayList();
//問題: 2つ以上のレポートボックスに対して、適切に課題レポートを提出できる。>>>>>>>>>>>>>>>>>>>>>>>>>>
//とりあえず、3つのレポートボックスを生成する
ReportBox rb = new ReportBox("課題名1",100);
lstReportBox.add(rb);
rb = new ReportBox("課題名2",100);
lstReportBox.add(rb);
rb = new ReportBox("課題名3",100);
lstReportBox.add(rb);
Report rpt;
//課題1のレポートを3つ生成
rpt = Report.make("遠藤", "P0001", "課題名1", "なんでもかんけいね");
rpt.setMark(90); //採点 この部分は前の知識もあるし、任せる
addReportToOwnReportBox(rpt,lstReportBox,lstBadReport); //課題名が一致するレポートボックスに提出する
rpt = Report.make("田代", "P0002", "課題名1", "お久しぶり");
rpt.setMark(80); //採点
addReportToOwnReportBox(rpt,lstReportBox,lstBadReport); //課題名が一致するレポートボックスに提出する
rpt = Report.make("近藤", "P0003", "課題名1", "だれや");
rpt.setMark(70); //採点
addReportToOwnReportBox(rpt,lstReportBox,lstBadReport); //課題名が一致するレポートボックスに提出する
//課題2のレポートを3つ生成
rpt = Report.make("西岡", "P0004", "課題名2", "ドM");
rpt.setMark(87); //採点
addReportToOwnReportBox(rpt,lstReportBox,lstBadReport); //課題名が一致するレポートボックスに提出する
rpt = Report.make("西川", "P0005", "課題名2", "先輩");
rpt.setMark(76); //採点
addReportToOwnReportBox(rpt,lstReportBox,lstBadReport); //課題名が一致するレポートボックスに提出する
rpt = Report.make("柳原", "P0006", "課題名2", "かわいいブサイク");
rpt.setMark(73); //採点
addReportToOwnReportBox(rpt,lstReportBox,lstBadReport); //課題名が一致するレポートボックスに提出する
//課題3のレポートを3つ生成
rpt = Report.make("小島", "P0007", "課題名3", "そんなのかんけいね");
rpt.setMark(33); //採点
addReportToOwnReportBox(rpt,lstReportBox,lstBadReport); //課題名が一致するレポートボックスに提出する
rpt = Report.make("菊池", "P0008", "課題名3", "東大卒業");
rpt.setMark(95); //採点
addReportToOwnReportBox(rpt,lstReportBox,lstBadReport); //課題名が一致するレポートボックスに提出する
rpt = Report.make("北村", "P0009", "課題名3", "弁護士やで");
rpt.setMark(90); //採点
addReportToOwnReportBox(rpt,lstReportBox,lstBadReport); //課題名が一致するレポートボックスに提出する
//課題名が一致しないレポートをいくつか生成(未提出レポート一覧表示用)
rpt = Report.make("ノーネーム氏", "P0010", "IT民工", "javaソース1行あたり1円から");
rpt.setMark(10); //採点
addReportToOwnReportBox(rpt,lstReportBox,lstBadReport); //課題名が一致するレポートボックスに提出する
rpt = Report.make("ジンバブエ", "P0011", "面白い国", "旅行地1番やで ははは 行ってみよう");
rpt.setMark(10); //採点
addReportToOwnReportBox(rpt,lstReportBox,lstBadReport); //課題名が一致するレポートボックスに提出する
rpt = Report.make("だれでもいいや", "P0011", "人", "Never old to learnだって");
rpt.setMark(10); //採点
addReportToOwnReportBox(rpt,lstReportBox,lstBadReport); //課題名が一致するレポートボックスに提出する
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
int iLoop;
DecimalFormat sf = new DecimalFormat("0.00");
//提出済みの課題を課題名毎に表示
System.out.println("\n★★★提出済みの課題一覧★★★★★★★★★★★★★★★★★★★★★");
for(iLoop=0;iLoop<lstReportBox.size();iLoop++){
ReportBox rbTmp = (ReportBox)lstReportBox.get(iLoop);
//最低点、最高点、平均点を計算する
rbTmp.calcMinMaxAvgMark();
System.out.println("■■■■■■■■■■■■");
System.out.println("レポートボックスの課題名:" + rbTmp.getSubject());
System.out.println("この課題の最低点=" + rbTmp.getMinMark()
+ "、最高点=" + rbTmp.getMaxMark()
+ "、平均点=" + sf.format(rbTmp.getAvgMark()));
System.out.println("--------レポート詳細------------------------");
System.out.println(rbTmp.toString());
}//end for
//未提出レポート一覧
System.out.println("\n★★★未提出レポート一覧★★★★★★★★★★★★★★★★★★★★★");
for(iLoop=0;iLoop<lstBadReport.size();iLoop++){
Report rptTmp = (Report)lstBadReport.get(iLoop);
System.out.println(rptTmp.toString() + "\n");
}//end for
}
}
public class Report {
String name;
String number;
String subject;
String contents;
int mark;
Report(String name, String number) {
this.name = name;
this.number = number;
}
void setSubject(String subject) {
this.subject = subject;
}
void setContents(String contents) {
this.contents = contents;
}
void setMark(int mark) {
this.mark = mark;
}
static Report make(String name, String number, String subject, String contents) {
Report r = new Report(name, number);
r.setSubject(subject);
r.setContents(contents);
return r;
}
public String toString() {
return ("学番: " + this.number + ",名前: " + this.name + "\n 課題: " + this.subject + "\n 内容: "
+ this.contents + "\n 点数: " + this.mark);
}
/**
* レポートの課題名を返す
* @return
*/
public String getSubject(){
return this.subject;
}
/**
* このレポートの点数を返す 2,4対応
* @return
*/
public int getMark(){
return this.mark;
}
}
public class ReportBox {
String strSubject = ""; //レポートボックスの課題名 1対応
Report[] box;
int totalNumber;
//本レポートボックスに格納されてあるレポート群の最低点、最高点、平均点数 2,4対応
int iMinMark = 0, iMaxMark = 0;
float iAvgMark = 0f;
/**
* レポートボックスコンストラクタ
* @param subject 課題名
* @param size 格納するレポートの最大個数
*/
ReportBox(String subject,int size) {
this.strSubject = subject; //レポートボックスの課題名を記憶 1対応
this.box = new Report[size];
this.totalNumber = 0;
}
void add(Report aReport) {
box[totalNumber] = aReport;
totalNumber++;
}
public String toString() {
String list = "レポートボックス:\n";
for (int i = 0; i < this.totalNumber; i++) {
list += box[i] + "\n";
}
return list;
}
/**
* レポートボックスの課題名を返す
* @return
*/
public String getSubject(){
return this.strSubject;
}
/**
* 最低点を返す
* @return
*/
public int getMinMark(){
return this.iMinMark;
}
/**
* 最高点を返す
* @return
*/
public int getMaxMark(){
return this.iMaxMark;
}
/**
* 平均点を返す
* @return
*/
public float getAvgMark(){
return this.iAvgMark;
}
/**
* 最低点、最高点、平均点数を計算する 2,4対応
*/
public void calcMinMaxAvgMark(){
int iLoop;
float fSum = 0;
int iCnt = 0;
for(iLoop=0;iLoop<this.totalNumber;iLoop++){
int iTmp = box[iLoop].getMark(); //レポートの点数を取得
if(iLoop==0)
iMinMark = iTmp;
//最低点、最高点判定
if(iTmp<iMinMark)
iMinMark = iTmp;
else if(iTmp>iMaxMark)
iMaxMark = iTmp;
fSum += iTmp; //点数を累計(後で平均値を計算するため)
iCnt++;
}//end for
if(iCnt>0)
iAvgMark = fSum / iCnt;
}
} |
|