Java初心者が2ヶ月で作れたアプリ【Java/初心者・勉強】

プログラミング

Javaを勉強し始めて2ヶ月ほど経ちました。

ある程度Javaの基礎は理解できたので、何かWebアプリを作ってみようと思い、今回のアプリを作ってみることにしました。

作ったものは「野菜を選択すると、その野菜の色の割合を計算してくれる」というものです。例えば、にんじん(赤)、ピーマン(緑)、キャベツ(緑)を入力すると、赤:33% 緑:66%と計算してくれます。

1から自分でアプリを作ることは無理だったので、大枠はこの方のYouTubeを参考にしました。サーブレット、jsp、Tomcatなどを同時に学べ、とてもわかりやすかったです。

どのようなアプリになったかは後に書きます。

なぜこのアプリを作ろうと思ったのか

画像に alt 属性が指定されていません。ファイル名: japanese-food-993046_1280.jpg

大人になると、健康に気をつかってご飯を作るときや食べるときに食材の色を気にする人も多いでしょう。

子供はカレー、唐揚げ、ハンバーグなど茶色の食べ物ばかりを好みますが、大人になるにつれてだんだんと健康のために野菜を積極的に食べるようになってきます。

ホテルのバイキングで大人と子供のとってきたプレートを見ると一目瞭然です。多くの子供が取ってくるものは健康をほとんど考えていないような偏った色の料理ばかりです。

私自身もそうでした。子供の頃はバイキングに行くとサラダではなく、唐揚げや肉ばかりを選んでいました。しかし、大人になると、健康のためにサラダを取るようになりました。それも、ただ緑の野菜だけではなく、赤や黄などいろいろな色の野菜をバランスよく食べようとするようになりました。

一般的には野菜の健康効果は色ごとにあるとされており、例えば赤や紫の野菜は強い抗酸化作用や殺菌作用を持つものが多いです。これはその赤や紫の野菜に含まれるリコピンアントシアニンがそういう効果を持っているからです。(こちらを参考にしています)

そのため、色のバランスがとれた食事によって、さまざまな健康効果を取り入れることができます(反対に、偏った食事ではいくつかの健康効果しか得られなくなる)。健康のためにはさまざまな色の食材をとるべきなのです。

そこで、自分の食べた食材の色の割合が具体的にわかるこのアプリを作れば、健康を気にする人にとっては使いたいアプリになるのではないかと思いました。また、他にもいくつか案はあった中で、これのアプリが一番難しすぎず、簡単すぎずつくれると思ったからです。

アプリはこんな感じです

ログイン画面

まず、ログイン画面です。

ユーザIDとパスワードがあり、この2つを入力した後、ログインボタンを押すとセレクト画面へ遷移します。

ユーザIDには何を入力してもよいですが、パスワードは「pass」と入力しなければなりません。

パスワードを間違えるとユーザIDまたはパスワードに誤りがあります。と表示されます。

このログイン画面は必要ではありませんが、参考にしたWebアプリの方でついていたのでそのまま残しています。

食材選択画面

続いて、食材を選択する画面に移ります。

ここでは、食材名(五十音順)、旬の時期、色の情報を表示しています。

自分の選択したい食材の選択ボタンを押すとカートに食材情報が送信されます

食材の色は私の独断で決定し、細かい色分けまでは行っていません。

※本当は、わかりやすいようにCSSを使って、各行ごとにその野菜の色を表示したいのですが、できませんでした。改善点です。

カート画面

選択画面で食材を選択すると、今度はカート画面へと遷移します。もっと追加したい場合は、ヘッダーナビ(商品選択|カート内一覧|ログアウトのところです)の商品選択(食材選択という名前に変えるのを忘れいます)を押して再び食材選択画面へ戻ります。

そして、選択し終わったら精算ボタンを押します。

精算画面

精算ボタンを押すと、精算画面へと遷移します。ここでは、自分の選択した食材の各色の割合を表示してくれます。自分が食べた料理の配色の割合を知ることができ、健康に役立つかもしれません。(役立たないかもしれません)

※割合を整数で出したかったのですが、なぜかint型にするとエラーが起きてしまったので、double型の少数が出てくる仕様になったいます。いつか改善したいです。

ログアウト

最後に、ログアウトです。

ヘッダーナビのログアウトボタンを押すと、ログイン画面へ遷移します。

※これも本当は必要ないですが、つけています。

ソースコード

ソースコードはこちらです。

割合の計算のところが煩雑になってしまい、色を追加するごとにかなりのところを書き換えないといけないため、もっとスマートなコードにしたいです。しかし、今の実力ではできませんでした。

もっとクラスを分けて書いたり、for文などを使ってうまく修正にも対応できるようになりたいです。

↓パッケージやクラスはこんな感じです。

jsp

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ログイン</title>
<link rel="stylesheet" href="style.css">
</head>
<body>

	<h2>ログイン</h2>

	<form action="login-servlet" method="post">
		ユーザID: <input type="text" name="userId" required><br>
		パスワード: <input type="password" name="password" required><br><br>
		<input type="submit" value="ログイン">
	</form>

	<% 
		String errorMsg = (String)request.getAttribute("errorMsg");
		if (errorMsg != null) {
	%>
			<p class="error-msg"><%= errorMsg %></p>
	<%
		} 
	%>

</body>
</html>

select.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="model.Store" %>
<%@ page import="model.Product" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>商品選択</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
	<%@include file = "header-navi.jsp"%>

	<%
		List<Product> listProd;
		Store store = (Store) session.getAttribute("store");
		if (store == null) {
			listProd = new ArrayList<Product>();
		} else {
			listProd = store.getListProd();
		}
		if (listProd.size() > 0) {
	%>

			<h2>食材選択</h2>

			<table class="select-list">
			<tr>
				<th></th><th>食材(五十音順)</th><th>季節</th><th>色</th>
			</tr>
				
	<%
			for (int idx = 0; idx < listProd.size(); idx++) {
				Product prod = listProd.get(idx);
	%>
				<tr>
					<td>
						<form action="add-prod-servlet" method="POST">
							<input type="hidden" name="idx" value="<%=idx%>">
							<input type="submit" value="選択">
						</form>
					</td>
					<td><%=prod.getName() %></td>
					<td><%=prod.getSeason() %></td>
					<td><%=prod.getColor() %></td>
				</tr>			
	<%
			}
	%>
			</table>

	<%
		}
	%>

</body>
</html>

cart.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="model.Cart" %>
<%@ page import="model.Product" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>カート内一覧</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
	<%@include file = "header-navi.jsp"%>


	<h2>カート内一覧</h2>

	<%
	List<Product> listProd;
			Cart cart = (Cart) session.getAttribute("cart");
			if (cart == null) {
		listProd = new ArrayList<Product>();
			} else {
		listProd = cart.getListProd();
			}
			if (listProd.size() > 0) {
	%>
			<table class="cart-list">
			<tr>
				<th></th><th>食材</th><th>季節</th><th>色</th>
			</tr>
	<%
			for (int idx = 0; idx < listProd.size(); idx++) {
				Product prod = listProd.get(idx);
	%>
				<tr>
					<td>
						<form action="remove-prod-servlet" method="POST">
							<input type="hidden" name="idx" value="<%=idx%>">
							<input type="submit" value="削除">
						</form>
					</td>
					<td><%=prod.getName() %></td>
					<td><%=prod.getSeason() %></td>
					<td><%=prod.getColor() %></td>
				</tr>			
	<%
			}
	%>
			</table>
			<br>
			<form action="pay-servlet" method="post">
				<input type="submit" value="精算"><br>
			</form>
				
	<%
		} else {
	%>
			<p>カートの中は空です。</p>
	<%
		}
	%>

</body>
</html>

pay.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="model.Cart" %>
<%@ page import="model.Product" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>精算完了</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
	<%@include file = "header-navi.jsp"%>

	<h2>精算完了</h2>

	<p>お買い上げ ありがとうございました。</p>

	<%
	List<Product> listProd;
			Cart payData = (Cart) session.getAttribute("pay");
			if (payData == null) {
		listProd = new ArrayList<Product>();
			} else {
		listProd = payData.getListProd();
			}
			if (listProd.size() > 0) {
	%>
			<table class="pay-list">
			<tr>
				<th>食材</th><th>季節</th><th>色</th>
			</tr>
	<%
			for (Product prod : listProd) {
	%>
				<tr>
					<td><%=prod.getName() %></td>
					<td><%=prod.getSeason() %></td>
					<td><%=prod.getColor() %></td>
				</tr>			
	<%
			}
	%>
			</table>
	<%
	        payData.totalCountOccurrences();
	%>
			<br>
			<p>赤:<%=payData.getRedPercent() %> %     黄:<%=payData.getYellowPercent() %> %</p>
			<br>
			<p>白:<%=payData.getWhitePercent() %> %      茶:<%=payData.getBrownPercent() %> %</p>			
			<br>
			<p>緑:<%=payData.getGreenPercent() %> %       紫:<%=payData.getPurplePercent() %> %</p>
			<br>
			<p>黒:<%=payData.getBlackPercent() %> %</p>
			

	<%
			session.removeAttribute("pay");			// 精算済情報の削除
		} 
	%>

</body>
</html>

header-navi.jsp

<%@ page pageEncoding="UTF-8"%>
<%@ page import="model.Cart" %>
<%@ page import="model.Store" %>

	<%-- 店舗名・ユーザIDの表示 --%>
	<%
	Store storeHdr = (Store) session.getAttribute("store");
			Cart cartHdr = (Cart) session.getAttribute("cart");
			if ((storeHdr == null) || cartHdr == null) {
		request.setAttribute("errorMsg", "再ログインをお願いします。");	
		request.getRequestDispatcher("login.jsp").forward(request, response);
			} else {
	%>
			<h1><%=storeHdr.getName() %></h1>
			<hr>
			ユーザID:<%=cartHdr.getUserId() %>
			<hr>

			<%-- ナビ表示 --%>
			|<a href="select.jsp">商品選択</a>
			|<a href="cart.jsp">カート内一覧</a>
			|<a href="logout-servlet">ログアウト</a>|
			<hr>
	<%
		}
	%>

css

@charset "UTF-8";

body {
	font-family: BIZ UDPゴシック;
	background-color: #98fb98;
	text-align: center;
}

h1 {
	font-size: 32px;
    color: green
}

h2 {
	font-size: 28px;
    background-color: green;
    color: white
}

hr {
	border: 0;
	border-top: 1px solid #8fbc8f;
}

.error-msg {
    color: red;
}

table {
	border: 1px solid #5e696c;
	margin-left: auto;
	margin-right: auto;
	width: 80%; 					/* テーブル横幅 */
	border-collapse:  collapse; 	/* 境界線を共有 */
}

th {
	border: 1px solid #5e696c;
    text-align:center;
    background-color: #3cb371;
    height: 32px;
}

td {
	border: 1px solid #5e696c;
	text-align: center;
	height: 24px;
}

.select-list {
    background-color: #eee8aa;
}

.cart-list {
    background-color: #afeeee;
}

.pay-list {
    background-color: #ffe4e1;
}

control(サーブレット)

LoginServlet.java

package control;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import model.Operation;

/**
 * ログイン処理を行うサーブレット
 * @author M.Takahashi
 */
@WebServlet("/login-servlet")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// リクエストパラメータの取得
		request.setCharacterEncoding("UTF-8");
		String userId = request.getParameter("userId");
		String password = request.getParameter("password");

		// ログイン処理
		HttpSession session = request.getSession();	// セッションオブジェクト取得
		Operation op = new Operation();
		boolean result = op.loginProc(userId, password, session);

		// 転送先設定
		String url = "select.jsp";
		if (!result) {					// エラーの場合にはログイン画面に戻す
			request.setAttribute("errorMsg", "ユーザID または パスワードに 誤りがあります。");	
			url = "login.jsp";
		}
		
		// 転送
		RequestDispatcher dispatcher = request.getRequestDispatcher(url);
		dispatcher.forward(request, response);
	}
}

LogoutServlet.java

package control;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import model.Operation;

/**
 * ログアウト処理を行うサーブレット
 * @author M.Takahashi
 */
@WebServlet("/logout-servlet")
public class LogoutServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// セッションオブジェクト取得
		HttpSession session = request.getSession();

		// ログアウト処理
		Operation op = new Operation();
		op.logoutProc(session);
		
		// 転送先設定
		String url = "login.jsp";
		
		// 転送
		RequestDispatcher dispatcher = request.getRequestDispatcher(url);
		dispatcher.forward(request, response);
	}

}

AddProdServlet.java

package control;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import model.Operation;

/**
 * カートに商品を追加するサーブレット
 * @author M.Takahashi
 */
@WebServlet("/add-prod-servlet")
public class AddProdServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// パラメータ取得
		request.setCharacterEncoding("UTF-8");
		int idx = Integer.parseInt(request.getParameter("idx"));

		// セッションオブジェクト取得
		HttpSession session = request.getSession();
		
		// カートへの商品追加処理
		Operation op = new Operation();
		op.addProd(idx, session);

		// 転送先設定
		String url = "cart.jsp";
		
		// 転送
		RequestDispatcher rd = request.getRequestDispatcher(url);
		rd.forward(request, response);
	}
}

RemoveProdServlet.java

package control;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import model.Operation;

/**
 * カートから商品を削除するサーブレット
 * @author M.Takahashi
 */
@WebServlet("/remove-prod-servlet")
public class RemoveProdServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// パラメータの取得
		request.setCharacterEncoding("UTF-8");
		int idx = Integer.parseInt(request.getParameter("idx"));

		// セッションオブジェクト取得
		HttpSession session = request.getSession();

		// カートからの商品削除処理
		Operation op = new Operation();
		op.removeProd(idx, session);
		
		// 転送先設定
		String url = "cart.jsp";
		
		// 転送
		RequestDispatcher rd = request.getRequestDispatcher(url);
		rd.forward(request, response);
	}

}

PayServlet.java

package control;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import model.Operation;

/**
 * 精算するサーブレット
 * @author M.Takahashi
 */
@WebServlet("/pay-servlet")
public class PayServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// セッションオブジェクト取得
		HttpSession session = request.getSession();

		// 精算処理
		Operation op = new Operation();
		op.pay(session);
		
		// 転送先設定
		String url = "pay.jsp";
		
		// 転送
		RequestDispatcher rd = request.getRequestDispatcher(url);
		rd.forward(request, response);
	}

}

model(Javaクラス)

Product.java

package model;
/**
 * 商品クラス
 * @author M.Takahashi
 */
public class Product {
	/******** フィールド ******************************************/
	/**
	 * 商品ID
	 */
	private String name;
	
	/**
	 * 商品名
	 */
	private String season;
	
	/**
	 * 価格
	 */
	private String color;
	

	/******** コンストラクタ **************************************/
	/**
	 * フィールド初期化コンストラクタ
	 * @param id
	 * @param name
	 * @param price
	 */
	public Product(String name, String season, String color) {
		this.name = name;
		this.season = season;
		this.color = color;
	}
	

	/******** メソッド ******************************************/
	/*--------------------getter/setter--------------------*/
	/**
	 * @return id
	 */
	public String getName() {
		return name;
	}

	/**
	 * @return name
	 */
	public String getSeason() {
		return season;
	}

	/**
	 * @return price
	 */
	public String getColor() {
		return color;
	}
	


}

Cart.java

package model;

import java.util.List;

/**
 * カート情報を表すクラス
 * @author M.Takahashi
 */
public class Cart {
	/******** フィールド ******************************************/
	/**
	 * ユーザーID
	 */
	private String userId;

	/**
	 * カート内の商品リスト
	 */
	private List<Product> listProd;
	
//	数えたい文字
	private String redChar = "赤";
	private String whiteChar = "白";
	private String greenChar ="緑";
	private String yellowChar ="黄";
	private String brownChar ="茶";
	private String purpleChar ="紫";
	private String blackChar ="黒";
//	各色が何回入力されたかのカウント
	 private double redCount;
     private double whiteCount;
     private double greenCount;
     private double yellowCount;
     private double brownCount;
     private double purpleCount;
     private double blackCount;
     private double totalCount;

	/******** コンストラクタ **************************************/
	/**
	 * フィールド初期化コンストラクタ
	 * @param userId
	 * @param listProd
	 */
	public Cart(String userId, List<Product> listProd) {
		this.userId = userId;
		this.listProd = listProd;
	}
	
	public Cart(List<Product> listProd) {
		this.listProd = listProd;
	}

	/******** メソッド ******************************************/
	/*--------------------getter/setter--------------------*/
	/**
	 * @return userId
	 */
	public String getUserId() {
		return userId;
	}

	/**
	 * @return listItem
	 */
	public List<Product> getListProd() {
		return listProd;
	}

	/*--------------------通常メソッド--------------------*/
	/**
	 * カートに商品を追加する
	 * @param prod 追加する商品
	 */
	public void add(Product prod) {
		listProd.add(prod);
	}

	/**
	 * カート内の特定の商品を除去する
	 * @param index 削除する商品のリスト内のインデックス
	 */
	public void remove(int index) {
		listProd.remove(index);
	}
	
	/**
	 * カート内の全ての商品を除去する
	 */
	public void clear() {
		listProd.clear();
	}
	
//  赤の数を数える	
	public double redCountOccurrences(String redChar) {
		redCount = countOccurrences(redChar);
		return redCount;
	}
	
//	白の数を数える
	public double whiteCountOccurrences(String whiteChar) {
		whiteCount = countOccurrences(whiteChar);
		return whiteCount;
	}
	
//	緑の数を数える
	public double greenCountOccurrences(String greenChar) {
		greenCount = countOccurrences(greenChar);
		return greenCount;
	}
	
//	黄の数を数える
	public double yellowCountOccurrences(String yellowChar) {
		yellowCount = countOccurrences(yellowChar);
		return yellowCount;
	}
	
//	茶の数を数える
	public double brownCountOccurrences(String brownChar) {
		brownCount = countOccurrences(brownChar);
		return brownCount;
	}
	
//	紫の数を数える
	public double purpleCountOccurrences(String purpleChar) {
		purpleCount = countOccurrences(purpleChar);
		return purpleCount;
	}
	
//	黒の数を数える
	public double blackCountOccurrences(String blackChar) {
		blackCount = countOccurrences(blackChar);
		return blackCount;
	}
	
//	すべての色の数を数える	
	public double totalCountOccurrences() {
		totalCount = redCountOccurrences(redChar) + whiteCountOccurrences(whiteChar) + greenCountOccurrences(greenChar) + yellowCountOccurrences(yellowChar) + brownCountOccurrences(brownChar) + purpleCountOccurrences(purpleChar) +blackCountOccurrences(blackChar);
		return totalCount;
	}
	
	
	private double countOccurrences(String targetChar) {
		return listProd.stream().filter(product -> targetChar.equals(product.getColor())).count();
		
	}
	
//	赤の割合を計算
	public double getRedPercent() {
		double redPercent = redCount / totalCount * 100;
		return redPercent;
	}
	
//	白の割合を計算
	public double getWhitePercent() {
		double whitePercent = whiteCount / totalCount * 100;
		return whitePercent;
	}
	
//	緑の割合を計算
	public double getGreenPercent() {
		double greenPercent = greenCount / totalCount * 100;
		return greenPercent;
	}
	
//	黄の割合を計算
	public double getYellowPercent() {
		double yellowPercent = yellowCount / totalCount * 100;
		return yellowPercent;
	}
//	茶の割合を計算
	public double getBrownPercent() {
		double brownPercent = brownCount / totalCount * 100;
		return brownPercent;
	}
	
//	紫の割合を計算
	public double getPurplePercent() {
		double purplePercent = purpleCount / totalCount * 100;
		return purplePercent;
	}
	
//	黒の割合を計算
	public double getBlackPercent() {
		double blackPercent = blackCount / totalCount * 100;
		return blackPercent;
	}
	

}

Store.java

package model;

import java.util.List;

/**
 * 店舗情報を表すクラス
 * @author M.Takahashi
 */
public class Store {
	/******** フィールド ******************************************/
	/**
	 * 店舗名
	 */
	private String name;

	/**
	 * 商品リスト
	 */
	private List<Product> listProd;

	/******** コンストラクタ **************************************/
	/**
	 * フィールド初期化コンストラクタ
	 * @param name
	 * @param listProd
	 */
	public Store(String name, List<Product> listProd) {
		this.name = name;
		this.listProd = listProd;
	}

	/******** メソッド ******************************************/
	/*--------------------getter/setter--------------------*/
	/**
	 * @return listProd
	 */
	public List<Product> getListProd() {
		return listProd;
	}

	/**
	 * @return name
	 */
	public String getName() {
		return name;
	}

	/*--------------------通常メソッド--------------------*/
	/**
	 * 商品を追加する
	 * @param prod 追加する商品
	 */
	public void add(Product prod) {
		listProd.add(prod);
	}

	/**
	 * 特定の商品を除去する
	 * @param index 削除する商品のリスト内のインデックス
	 */
	public void remove(int index) {
		listProd.remove(index);
	}
	
	/**
	 * 全ての商品を除去する
	 */
	public void clear() {
		listProd.clear();
	}

}

Operation.java

package model;

import java.util.ArrayList;

import javax.servlet.http.HttpSession;

/**
 * 店内オペレーションクラス
 * @author M.Takahashi
 */
public class Operation {
	/**
	 * ログイン時の処理
	 * @param userId リクエストパラメータ
	 * @param password リクエストパラメータ
	 * @param session セッションオブジェクト
	 * @return true .. 正常、false .. ID/パスワード誤り
	 */
	public boolean loginProc(String userId, String password, HttpSession session) {

		// ログイン認証
		boolean result = authenticate(userId, password);

		if (result) {
			// 店舗データの作成⇒セッションに格納
			Store store = makeStore();
			session.setAttribute("store", store);
			
			// カート情報の作成(userId設定・商品リストは空)⇒セッションに格納
			Cart cart = new Cart(userId, new ArrayList<Product>());
			session.setAttribute("cart", cart);
		}

		return result;
	}

	/**
	 * 認証する
	 * @param userId ユーザID
	 * @param password パスワード
	 * @return 結果 (true / false)
	 */
	private boolean authenticate(String userId, String password) {

		// ★ここでは password = "pass" であれば true とする
		boolean result = password.equals("pass");

		return result;
	}
	
	/**
	 * 店舗情報(店舗名+選択データ(リスト))を作成する
	 * @return 店舗情報
	 */
	private Store makeStore() {

		// 店舗情報作成
		Store store = new Store("速水PC販売", new ArrayList<Product>());
		
		// 商品追加
		store.add(new Product("アスパラガス", "春", "緑"));
		store.add(new Product("枝豆", "夏〜秋", "緑"));
		store.add(new Product("大葉", "春〜夏", "緑"));
		store.add(new Product("オクラ", "夏", "緑"));
		store.add(new Product("カブ", "夏", "白"));
		store.add(new Product("かぼちゃ", "夏", "黄"));
		store.add(new Product("カリフラワー", "夏", "白"));
		store.add(new Product("キャベツ", "春", "緑"));
		store.add(new Product("きゅうり", "夏", "緑"));
		store.add(new Product("ごぼう", "秋", "茶"));
		store.add(new Product("小松菜", "秋〜冬", "緑"));
		store.add(new Product("ゴーヤ", "夏", "緑"));
		store.add(new Product("こんにゃく", "年中", "黒"));
		store.add(new Product("こんにゃく", "年中", "白"));
		store.add(new Product("さつまいも", "秋", "紫"));
		store.add(new Product("里芋", "秋", "白"));
		store.add(new Product("ジャガイモ", "秋", "茶"));
		store.add(new Product("ズッキーニ", "夏", "緑"));
		store.add(new Product("セロリ", "夏〜秋", "緑"));
		store.add(new Product("大根", "冬", "白"));
		store.add(new Product("玉ねぎ", "秋・冬", "白"));
		store.add(new Product("たけのこ", "春", "白"));
		store.add(new Product("とうもろこし", "夏", "黄"));
		store.add(new Product("トマト", "夏", "赤"));
		store.add(new Product("なす", "夏", "紫"));
		store.add(new Product("ニラ", "春・秋", "緑"));
		store.add(new Product("にんじん", "秋", "赤"));
		store.add(new Product("ねぎ(白)", "春・秋", "白"));
		store.add(new Product("ねぎ(緑)", "春・秋", "緑"));
		store.add(new Product("白菜", "冬", "緑"));
		store.add(new Product("赤パプリカ", "夏〜秋", "赤"));
		store.add(new Product("黄パプリカ", "夏〜秋", "黄"));
		store.add(new Product("緑パプリカ", "夏〜秋", "緑"));
		store.add(new Product("ブロッコリー", "冬", "緑"));
		store.add(new Product("ほうれん草", "春・秋", "緑"));
		store.add(new Product("水菜", "春・秋", "緑"));
		store.add(new Product("レタス", "春", "緑"));
		store.add(new Product("れんこん", "秋", "緑"));
		
		return store;
	}
	
	/**
	 * ログアウト時の処理
	 * @param session
	 */
	public void logoutProc(HttpSession session) {

		session.invalidate();
		
	}

	/**
	 * 商品追加処理
	 * @param idx 商品一覧の選択した商品のidx (セッション:store内)
	 * @param session セッションオブジェクト
	 */
	public void addProd(int idx, HttpSession session) {
		
		// 店舗情報・カート情報の取得(セッションより)
		Store store = (Store) session.getAttribute("store");
		Cart cart = (Cart) session.getAttribute("cart");

		if ((store != null) && (cart != null)) {
			// カートに指定の商品を追加
			cart.add(store.getListProd().get(idx));

			// セッションに再度格納
			session.setAttribute("cart", cart);
		}

	}

	/**
	 * カートから商品削除処理
	 * 
	 * @param idx カートの中の選択した商品のidx
	 * @param session セッションオブジェクト
	 */
	public void removeProd(int idx, HttpSession session) {
	
		// カート内商品情報の取得(セッションより)
		Cart cart = (Cart) session.getAttribute("cart");
	
		if (cart != null) {
			// カートから指定の商品を削除
			cart.remove(idx);

			// セッションに書き戻す
			session.setAttribute("cart", cart);
		}
			
	}
	
	/**
	 * 精算処理
	 * @param session セッションオブジェクト
	 */
	public void pay(HttpSession session) {

		// カート内商品情報の取得
		Cart cart = (Cart) session.getAttribute("cart");

		if (cart != null) {
			// セッションに格納(精算済みデータ)
			session.setAttribute("pay", cart);

			// カート情報の新規作成⇒セッションに格納
			Cart newCart = new Cart(cart.getUserId(), new ArrayList<Product>());
			session.setAttribute("cart", newCart);
		}

	}

}

まとめ

本当は、グラフを割合を使って表示したかったのですが、グラフを作れるというJFreeChartを使いこなせませんでした。

そのため、これくらい「自分で計算できるだろ」と思われるかもしれませんが、なんとなく機械化している感じがするので自分としては満足しています。ご容赦ください。

このWebアプリ作成にあたっては、インプット時とは段違いで自分で考えないといけないことが多かったので、かなり勉強になりました(わからないことは調べるという習慣もつきました)。

これでJavaを習得したとは全く思っていませんが、Javaの基本的なことは使えるようになったので、次はフレームワークなどを勉強していきたいです。

コメント

タイトルとURLをコピーしました