JAVA - 18

48050 ワード

JAVA - 18


総合例


商品検索セクションの追加


まずは商品をよく見ると前に作ったpdaosearchメソッドを使用して、ユーザーが検索したキーワードをユーザーに渡し、結果を出力します.
商品をよく見るにはどうすればいいですか?
商品ビューでは、私たちが望む文字列に従ってStringを出力します.formatを使用してデータを出力します.
同様に、私たちが望む情報を出力するために、新しい方法を作成する必要があるかもしれません.ユーザーが商品番号を選択せずに商品番号を選択した場合、「営業担当者の連絡先の表示」機能を追加したい場合はどうすればいいですか?
いずれにしても、商品検索という選択肢に多くの機能を加えたいと思います.
また,ユーザにより多くの選択を要求する.
したがって、別のクラスが作成され、ユーザーに選択を要求し、選択に適した結果値を出力します.
case 5:
		//상품 검색
		System.out.println("검색어를 입력하세요 : ");
		sc = new Scanner(System.in);
		String keyword = sc.nextLine();
		System.out.println(pdao.search(keyword));
	//아래와 같이 새로운 클래스를 정의해보자.
		new ProductInfoView();

new ProductInfoView();


このクラスの機能は、ユーザが詳細に表示する商品番号を受信し、対応する番号の商品詳細説明を出力することである.
そこで、詳細を出力する機能を追加してみましょう.
package view;

import java.util.Scanner;

import dao.ProductDAO;
import dao.UserDAO;

public class ProductInfoView {
	public ProductInfoView() {
    //사용자로부터 입력받은 값을 가지기 위해 스캐너를 이용,
		Scanner sc = new Scanner(System.in);
     //우리는 상품 데이터를 활용해야 된다. 따라서 상품 데이터를 통신하는 클래스인 
     //ProductDAO를 객체화한다.
		ProductDAO pdao = new ProductDAO();
     // 자세히 볼 상품번호를 입력 받는다. 
		System.out.println("자세히 볼 상품번호 : ");
      //변수로 번호를 입력받는다. 
     	int prodnum = sc.nextInt();
//		번호를 입력하면 해당되는 product를 자세히 보여주는 메소드를 실행한다.
		pdao.search(prodnum);
	}
}
pdao.searchメソッドを実装します.既存のメソッド名と同じメソッドがありますが、パラメータのタイプをintタイプとして受け入れ、オーバーロードします.
また、使いやすい方法の場合はすぐに出力します.

ProductDAOでの検索方法の定義

//의도한데로 매개변수를 int타입으로 받는다.
public void search(int prodnum) {
//데이터 베이스 통신을 해야한다. 데이터베이스와 통신하는 conn변수와 select메소드를 이용한다.
//상품번호는 0번째에 있고 해당 번호를 String타입으로 넘겨주면 
//HashSet에 데이터베이스 한줄이 들어가게 된다. 
		HashSet<String> hi = conn.select(0, prodnum+"");
        //우리가 원하는 정보를 담을 수 있는 result변수를 만든다.
		String result = "";
        //물론 선택하는 번호는 중복되는 경우는 없지만 HashSet 타입의 정보를 
        //쉽게 가져올 수 있는 foreach문을 사용했다. 
		for (String line : hi) {
        //datas 배열에 데이터 한줄에 대한 정보를 넣었다.
			String[] datas = line.split("\t");
            //우리가 원하는 상세 내용은 datas의 4번방에 있다. 
				result += String.format("상세 내용 : %s", datas[4]);
		}
		//result에 누적연산자를 이용해 값을 넣었고 그 값을 그대로 출력한다.
		System.out.println(result);
	}
ProductInfoViewに戻ります.
今ではその商品に対してスポンサーと売り手の連絡先を実施すれば、リターン機能が可能になります.
まず、ユーザーは
1.いいですね
2.売手連絡先
3.戻る
上の形で展示しましょう.
System.out.println("1. 좋아요\n2. 판매자 연락처\n3. 돌아가기");
次に、ユーザーが選択した値を変数に割り当てます.
int choice = sc.nextInt();
ここで考えてもいいですが、「いいね」をクリックして売り手の連絡先をクリックすると、前の画面に戻りますか?あるいは「いいね」をクリックしても売り手の連絡先がわかりますか?
そこで、while文でこの問題を繰り返し説明しましょう.
while(true) {
	System.out.println("1. 좋아요\n2. 판매자 연락처\n3. 돌아가기");
	int choice = sc.nextInt();
}
switch文を使用して、ユーザーが入力した値に応じてcaseごとに異なる機能を実現します.
また、以下のような事故を防止するため、break;whileの脱出を防ぐためにはtrueではなくチェックポイントが必要です.
case 3の場合にのみflag変数にtrueを指定し、case 3でflagにfalseを指定して終了させます.
// while문안에서 작성하면 무한반복임. 
boolean flag = true;
while(true) {
	System.out.println("1. 좋아요\n2. 판매자 연락처\n3. 돌아가기");
	int choice = sc.nextInt();
		switch(choice) {
			case 1:
				//좋아요
				break;
			case 2:
				//판매자 연락처
				break;
			case 3 :
       //돌아가는 메시지와 함께 flag를 fasle로 만들어 while문을 탈출시킨다.
				System.out.println("돌아갑니다.");
				flag = false;
				break;
			default:
           		//다시 선택하도록 유도 
				System.out.println("번호를 다시 선택해주세요");
				break;
		 }
}
さあ、今からいいことをしましょう.
ユーザーは1番を押すと、実際のデータベースに保存されている商品情報も修正する必要があります.
どの商品を修正するかを知るには、商品番号を知る必要があります.
whileドアに詳細を表示するために、ユーザーから対応する商品番号を受け取りました.このように受信した商品情報はprodnum変数に割り当てられ,それを利用する.
商品データベースにアクセスするには、pdaoを使用し、pdaoでlikecntメソッドを再定義する必要があります.
switch(choice) {
	case 1:
    //	likecnt메소드는 위에서 받아온 변수를 매개변수로 할당하고 있다. 
		pdao.likecnt(prodnum);
		break;
        ...생략

ProductDAOでのlikecntメソッドの定義

//	prodnum은 사용자로부터 int타입으로 매개변수를 받는다.
	public boolean likecnt(int prodnum) {
//		search 메소드와 동일하게 conn.select를 이용하여 HashSet타입으로 만든다.
		HashSet<String> hi = conn.select(0, prodnum+"");
//		그 결과를 result에 담을 것이다.
		String result = "";
//		기존에 좋아요 갯수를 가져와서 그 좋아요 갯수에서 1개를 추가하는 방식으로 만들 것이다.
//		기존의 좋아요를 가지고 오기위해 아래와 같이 만든다. 
//		편의상 방식은 search와 동일하게 가져왔다. 
		for (String line : hi) {
			String[] datas = line.split("\t");
//			좋아요는 5번방에 들어있다. 
				result += String.format("%s", datas[5]);
		}
//		result는 문자열 타입으로 정수타입으로 형변환시키고 1을 더한 값을 likecnt에 할당한다.
		int likecnt = Integer.parseInt(result) + 1;
//		상품을 수정하기 위해 update메소드를 이용했다.
//		수정되는 상품번호는 prodnum이고 수정할 자리는 좋아요 자리인 5번이다.
//		좋아요가 추가된 likecnt를 newData매개변수 자리에 두면 된다.
		return conn.update(prodnum+"", 5, (likecnt+""));
	}
賛が成功したかどうかを確認するために、ブール型と宣言した.
ProductInfoViewに戻り、case 1を変更します.

ProductInfoView

boolean flag = true;
while(true) {
	System.out.println("1. 좋아요\n2. 판매자 연락처\n3. 돌아가기");
	int choice = sc.nextInt();
		switch(choice) {
			case 1:
				//좋아요
                if(pdao.likecnt(prodnum)) {
                // 성공 시 다음과 같은 메시지 출력
					System.out.println("좋아요 감사");
				}else {
                //실패 시 다음과 같은 메시지 출력
					System.out.println("알 수 없는 오류");
				}
				break;
			case 2:
				//판매자 연락처
				break;
			case 3 :
       //돌아가는 메시지와 함께 flag를 fasle로 만들어 while문을 탈출시킨다.
				System.out.println("돌아갑니다.");
				flag = false;
				break;
			default:
           		//다시 선택하도록 유도 
				System.out.println("번호를 다시 선택해주세요");
				break;
		 }
}
売り手の電話番号を印刷する機能を実現しましょう.
まずこの商品の情報を見てみましょう
商品のデータがアクセスされると、以下の情報がわかります.
{商品番号、商品名、価格、在庫、詳細説明、はい、売り手id}
また、ユーザー・データにアクセスすることで、次の情報が得られます.
{id,pw,氏名,年齢,電話番号,住所}
上記の情報を利用して、売り手の電話番号を調べてください.
まず特定商品の商品番号を知ることができます.
商品番号を利用して売り手idを取得し,売り手idを利用して電話番号にアクセスすると,問題を解決しやすい.
ユーザーデータベースにアクセスできるようになりました.ユーザーDAOもオブジェクト化して使用できます.
package view;

import java.util.Scanner;

import dao.ProductDAO;
import dao.UserDAO;

public class ProductInfoView {
	public ProductInfoView() {
		Scanner sc = new Scanner(System.in);
		ProductDAO pdao = new ProductDAO();
        // 유저정보에 접근해서 전화번호를 알아낼 것이다.
		UserDAO udao = new UserDAO();
		System.out.println("자세히 볼 상품번호 : ");
//		sc = new Scanner(System.in);
		int prodnum = sc.nextInt();
//		번호를 입력하면 해당되는 product를 자세히 보여줌 
		pdao.search(prodnum);
		boolean flag = true;
		while(flag) {
			System.out.println("1. 좋아요\n2. 판매자 연락처\n3. 돌아가기");
			int choice = sc.nextInt();
			switch(choice) {
			case 1:
				if(pdao.likecnt(prodnum)) {
					System.out.println("좋아요 감사");
				}else {
					System.out.println("알 수 없는 오류");
				}
				break;
			case 2:
            	// 먼저 특정 상품에 해당되는 유저id를 알아내는 메소드를 만들자 
                //이 메소드는 pdao에서 알 수 있다.
                //또한 우리는 prodnum 변수에 특정 상품의 상품번호를 알고있다.
                //따라서 메소드의 매개변수로 넘겨주자
				 pdao.searchPhone(prodnum);
				break;
			case 3 :
				System.out.println("돌아갑니다.");
				flag = false;
				break;
			default:
				System.out.println("번호를 다시 선택해주세요");
				break;
		  }
		}
	}
}

productDAO


ここでは、該当商品番号のユーザ情報を取得する方法を定義する.
// 상품번호를 받는 메소드임.
	public String searchPhone(int prodnum) {
//		상품 정보를 가져오는 코드는 동일함.
		HashSet<String> hi = conn.select(0, prodnum+"");
//		해당 사용자id를 result에 담을 것임.
		String result = "";
//		상품에 대한 정보를 가져온다.(search와 동일)
		for (String line : hi) {
			String[] datas = line.split("\t");
//			사용자 id는 6번방에 있다. 
				result += String.format("%s", datas[6]);
		}
//		사용자 id를 return 시킨다. String타입 메소드로 변경함.
		return result;
	}

ProductInfoView


ProductInfoViewにユーザー情報を割り当てる
変数に割り当てられたuseridをudaoに再送信し、その売り手の電話番号を取得します.
...생략
case 2:
// 메소드로 가져온 판매자 id를 userid 변수에 할당함.
	String userid = pdao.searchPhone(prodnum);
    // 해당 userid를 다시 udao에 넘겨주어 메소드를 통해 전화번호를 알아낸다.
	udao.contactSeller(userid);
	break;
...

UserDAO


電話番号の取得方法の定義
//	외부로부터 사용자 id를 전달받는 메소드 
	public void contactSeller(String userid) {
//		conn.select에 userid를 넘겨주어 해당되는 정보를 HashSet타입으로 받는다.
		HashSet<String> rs = conn.select(0, userid);
//		마찬가지로 해당 전화번호를 result로 받을 것이다. 
		String result = "";
//		해당 유저 정보도 1개에 불과하지만 HashSet으로 받았기에 foreach로 정보를 가져왔다.
		for (String line : rs) {
//			datas 배열에 유저 정보를 담고
			String[] datas = line.split("\t");
//			전화번호가 있는 배열방을 result에 담는다.
			result += "연락처 : "+datas[4]+"\n"; 
		}
//		해당 정보를 바로 출력했다. 
		System.out.println(result);
	}
ProductInfoViewフルコード
package view;
import java.util.Scanner;
import dao.ProductDAO;
import dao.UserDAO;
public class ProductInfoView {
	public ProductInfoView() {
		Scanner sc = new Scanner(System.in);
		ProductDAO pdao = new ProductDAO();
		UserDAO udao = new UserDAO();
		System.out.println("자세히 볼 상품번호 : ");
//		sc = new Scanner(System.in);
		int prodnum = sc.nextInt();
//		번호를 입력하면 해당되는 product를 자세히 보여줌 
		pdao.search(prodnum);
		boolean flag = true;
		while(flag) {
			System.out.println("1. 좋아요\n2. 판매자 연락처\n3. 돌아가기");
			int choice = sc.nextInt();
			switch(choice) {
			case 1:
				if(pdao.likecnt(prodnum)) {
					System.out.println("좋아요 감사");
				}else {
					System.out.println("알 수 없는 오류");
				}
				break;
			case 2:
				String userid = pdao.searchPhone(prodnum);
				udao.contactSeller(userid);
				break;
			case 3 :
				System.out.println("돌아갑니다.");
				flag = false;
				break;
			default:
				System.out.println("번호를 다시 선택해주세요");
				break;
		  }
		}
	}
}

改善

  • 反復コード
  • 非常用変数
  • ユーザ入力エラーの数が
  • 未満である.