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;
}
}
}
}
改善
case 5:
//상품 검색
System.out.println("검색어를 입력하세요 : ");
sc = new Scanner(System.in);
String keyword = sc.nextLine();
System.out.println(pdao.search(keyword));
//아래와 같이 새로운 클래스를 정의해보자.
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);
}
}
//의도한데로 매개변수를 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);
}
System.out.println("1. 좋아요\n2. 판매자 연락처\n3. 돌아가기");
int choice = sc.nextInt();
while(true) {
System.out.println("1. 좋아요\n2. 판매자 연락처\n3. 돌아가기");
int choice = sc.nextInt();
}
// 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;
}
}
switch(choice) {
case 1:
// likecnt메소드는 위에서 받아온 변수를 매개변수로 할당하고 있다.
pdao.likecnt(prodnum);
break;
...생략
// 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+""));
}
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;
}
}
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;
}
}
}
}
// 상품번호를 받는 메소드임.
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;
}
...생략
case 2:
// 메소드로 가져온 판매자 id를 userid 변수에 할당함.
String userid = pdao.searchPhone(prodnum);
// 해당 userid를 다시 udao에 넘겨주어 메소드를 통해 전화번호를 알아낸다.
udao.contactSeller(userid);
break;
...
// 외부로부터 사용자 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);
}
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;
}
}
}
}
Reference
この問題について(JAVA - 18), 我々は、より多くの情報をここで見つけました https://velog.io/@km2535/JAVA-18-wi462bvbテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol