Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

値保持について

現在、勤怠管理システムというものを以下の環境で作っています。

OS:WindowsXP Professional
通信環境:Apache Tomcat6.0.14
DB環境:MySQL Server 5.1
開発環境:Eclipse 3.4.2
記述言語:Java,JavaScript


各月ごとに勤務時間や、有給休暇などを入力して
その値や、差分を基に、実働時間やその他必要な時間や日数などを計算して出力後に、DBに登録するといった
システムなのですが、(登録後の修正も可)


1年分のデータ(2010/4 〜 2010/3)を登録したところ、
有給休暇の値が保持されていませんでした。。

ただ、前月分のみの値は保持されています。

例:2010/4月の勤怠データの有給取得日数→1日
  有給残日数→9日(初期値が10日のため)

  2010/5月の勤怠データの有給取得日数→0日
  有給残日数→9日


このように1ヶ月ごとなら、ロジックがあるので前月分の値が保持されているのですが、
上記の例を参照して、6月の勤怠データで、有給取得を0日にすると、
有休残日数が初期値の10日に戻ってしまいます。。
(本来は9日であってほしいのです。)
全ての月のパターンで同じことになります。


全ての月の変数、Beanのgetter,setterを用意して、
セッションで保持すればよいのでしょうか?


どのような処理をしていけばよいか、まだ思いつきませんので、皆様の知恵をお借りできないでしょうか?

よろしくお願いします。
質問慣れしていないので質問の仕方・ソースの貼り付け等、おかしいところがありましたら、申し訳ございません。


以下がソースです。↓↓


※休暇に関する箇所のみ抜粋(Beanは省略)

// 該当月が「1月」である場合
        if(Month.equals("1")) {
            
            // 年度を数値型に変換
            int Year_int = Integer.parseInt(Year);
            
            /*
             休暇日数テーブルより、有給付与日数、F休付与日数、
             代休付与日数と、前月までの有給取得日数、F休取得日数、
             代休取得日数、誕休取得日数を取得                                                                                    
            */
            try {
                // 引数:社員コード、該当年-1、前年度の12月
                List<KintaiDBInputBean> DbList = Db.Kyuka(Syainid, Year_int-1, 12);
                
                // Listの中身を取得
                for(KintaiDBInputBean Kdb : DbList) {
                
                    // 取得した各休暇付与日数と各休暇取得日数(前月)を変数に格納
    有給付与                Yukyu_D = Kdb.getYuukyu_d();
                    
     F休(フレックス休暇)付与    
     Fkyu_D = Kdb.getFkyu_d();
        
     代休付与
    Daikyu_D = Kdb.getDaikyu_d()

    順に前月の有給、F休、代休、誕休(誕生日休暇)を取得
     Yukyu_zen_R = Kdb.getYoukyu_r();
                    Fyu_zen_R = Kdb.getFkyu_r();
                    Daikyu_Zen_R = Kdb.getDaikyu_r();
                    Tankyu_Zen_R = Kdb.getTankyu_r();
                }
                
            }catch (SQLException e) {
                e.printStackTrace();
            }
        
        
        // 該当月が「4月」である場合
        }else if(Month.equals("4")) {
            
            // 年度を数値型に変換
            int Year_int = Integer.parseInt(Year);
            
            /*
             休暇日数テーブルより、有給付与日数、F休付与日数、
             代休付与日数と、当月の有給取得日数、F休取得日数、
             代休取得日数、誕休取得日数を取得                                                                            
            */
            try {
                // 引数:社員コード、該当年、4月
                List<KintaiDBInputBean> DbList = Db.Kyuka(Syainid, Year_int, 4);
                
                // Listの中身を取得
                for(KintaiDBInputBean Kdb : DbList) {
                
                    // 取得した各休暇付与日数と各休暇取得日数(前月)を変数に格納
                    Yukyu_D = Kdb.getYuukyu_d();
                    Fkyu_D = Kdb.getFkyu_d();
                    Daikyu_D = Kdb.getDaikyu_d();
                    Yukyu_zen_R = Kdb.getYoukyu_r();
                    Fyu_zen_R = Kdb.getFkyu_r();
                    Daikyu_Zen_R = Kdb.getDaikyu_r();
                    Tankyu_Zen_R = Kdb.getTankyu_r();
                }
                
            } catch (SQLException e) {
                e.printStackTrace();
            }
        
        // それ以外の月の場合
        }else {
            
            // 年度、月を数値型に変換
            int Year_int = Integer.parseInt(Year);
            int Month_int = Integer.parseInt(Month);
            
            /*
             休暇日数テーブルより、有給付与日数、F休付与日数、
             代休付与日数と、当月の有給取得日数、F休取得日数、
             代休取得日数、誕休取得日数を取得                                                                                
            */
            try {
                // 引数:社員コード、該当年、該当月-1
                List<KintaiDBInputBean> DbList = Db.Kyuka(Syainid, Year_int, Month_int-1);
                
                // Listの中身を取得
                for(KintaiDBInputBean Kdb : DbList) {
                
                    // 取得した各休暇付与日数と各休暇取得日数(前月)を変数に格納
                    Yukyu_D = Kdb.getYuukyu_d();
                    Fkyu_D = Kdb.getFkyu_d();
                    Daikyu_D = Kdb.getDaikyu_d();
                    Yukyu_zen_R = Kdb.getYoukyu_r();
                    Fyu_zen_R = Kdb.getFkyu_r();
                    Daikyu_Zen_R = Kdb.getDaikyu_r();
                    Tankyu_Zen_R = Kdb.getTankyu_r();
                }
            
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }



// 有休残日数算出のメソッド(別クラス)
(引数は有給付与日数、有給取得日数(前月)、有給取得日数(今月))
    public double Yukyuzan(double Yukyu_D, double Yukyu_zen_R, double Yukyu_R) {
        
        // 有給残日数算出        
        // 有給付与日数 - (有給取得日数(前月) + 有給取得日数(該当月))      
        double Yukyuzan_D = Yukyu_D - (Yukyu_zen_R + Yukyu_R);

        // 戻り値をreturn
        return Yukyuzan_D;
    }




// ●有休残日数(上のメソッドの戻り値を受け取る)
            
            // 勤務時間算出 (有休残日数)
            // 引数:有給付与日数、有給取得日数(前月)、有給取得日数(該当月)
            Yukyuzan_D = Kc.Yukyuzan(Yukyu_D,Yukyu_zen_R,Yukyu_R);
            
            // 戻り値を(KintaiInputBean)に格納
            Kib.setYoukyuzan_d(Yukyuzan_D);

4

回答

82704

閲覧

4件の回答

評価

0

環境を書いたのはまあ良いことだけど、肝心の質問が要約すると「分かりません、教えて」になってる。
自分で何をしてみたか、一切書いてない。

そういう質問で、かつ見づらいソースを貼り付けられても、なかなかデバッグしてあげようという気になる人はいないだろう。
しかもこれが仕事であればなおさらだ。

評価

0

>このように1ヶ月ごとなら、ロジックがあるので前月分の値が保持されているのですが、

まさに、これが原因でしょ。
年初の日数と、前月の取得日数を参照しているだけ。
前々月以前の取得日数は無視しているんだから。

評価

0

$さん
おっしゃる通りです。自分が何をしたかも書いてないのに、教えてなんて卑怯ですよね。

自分がどこまでやって、どうしたいのかを
明確にして、質問するようにします。

申し訳ございませんでした。

評価

0

不良社員さん

おっしゃる通りです。
ですので、今は、前々月以前の値を取得するロジックの実装を行っています。

掲示板マナーの悪さ・わかりづらいソースにも関らず、ご指摘ありがとうございました。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。