메뉴구현
1.학생 등록하기
2.학생 검색하기
3.점수 순으로 조회
4.이름 순으로 조회
5.학생 삭제하기
6.학생 수정하기
7.종료하기
Package 생성 Name: com.goodjobedu.main
Class 생성 Name:StudentMain
실행버튼을 누른 뒤 해당 번호를 누르거나 다른 말을 했을 때 생기는 화면.
소스코드.
package com.goodjobedu.main;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.JOptionPane;
public class StudentMain {
StudentMain(){
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String id = "myJsp";
String password ="jsppassword";
Connection con = null; //import를 선언해야함
PreparedStatement ps = null; //import를 선언해야함
ResultSet rs = null; //import를 선언해야함
String menu = "1.학생등록\n"
+ "2.학생수정\n"
+ "3.학생삭제\n"
+ "4.학생검색\n"
+ "4.학생검색\n"
+ "5.이름 순 조회\n"
+ "6.점수 순 조회\n"
+ "7.종료하기\n";
String select;//메뉴 선택용 변수
String name;//이름입력용
String tel;
String skr,sen,sma;//국영수 입력용
int kr,en,ma;//국영수 입력용(int)
double avg; //평균계산용
String sql;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
con =DriverManager.getConnection(url,id,password);
while(true) {
select = JOptionPane.showInputDialog(menu);//JOptionPane는 import하셔야 애러가 없습니다.showInputDialog는 실수든 정수든 String값으로 인식한다.
if(select.equals("1")) {
}else if(select.equals("2")) {
}else if(select.equals("3")) {
}else if(select.equals("4")) {
}else if(select.equals("5")) {
}else if(select.equals("6")) {
}else if(select.equals("7")) {
JOptionPane.showInputDialog(null, "프로그램을 종료합니다.");
break;//반복을 진행하지 않도록 하는 명령어.
}else {
JOptionPane.showInputDialog(null,"잘못입력했습니다.\n다시 입력하세요.");
}
}
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(rs != null) {rs.close();}//지역변수에 null을 넣어 초기화를 해야 애러가 없음
if(rs != null) {ps.close();}//지역변수에 null을 넣어 초기화를 해야 애러가 없음
if(con != null) {con.close();}//지역변수에 null을 넣어 초기화를 해야 애러가 없음
}catch(Exception e){
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new StudentMain();
}
}
이미지가 나오는지 확인.
추가된 소스코드. 및 소스코드 전부.
package com.goodjobedu.main;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.JOptionPane;
public class StudentMain {
StudentMain(){
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String id = "myJsp";
String password ="jsppassword";
Connection con = null; //import를 선언해야함
PreparedStatement ps = null; //import를 선언해야함
ResultSet rs = null; //import를 선언해야함
String menu = "1.학생등록\n"
+ "2.학생수정\n"
+ "3.학생삭제\n"
+ "4.학생검색\n"
+ "5.이름 순 조회\n"
+ "6.점수 순 조회\n"
+ "7.종료하기\n";
String select;//메뉴 선택용 변수
String name;//이름입력용
String tel;
String skr,sen,sma;//국영수 입력용
int kr,en,ma;//국영수 입력용(int)
double avg; //평균계산용
String sql;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
con =DriverManager.getConnection(url,id,password);
while(true) {
select = JOptionPane.showInputDialog(menu);//JOptionPane는 import하셔야 애러가 없습니다.showInputDialog는 실수든 정수든 String값으로 인식한다.
if(select.equals("1")) {
sql ="INSERT INTO student VALUES(st_seq.NEXTVAL, ?, ?, ?, ?, ?, ?,SYSDATE)";
name = JOptionPane.showInputDialog("새 학생 이름");
tel = JOptionPane.showInputDialog("새 학생 연락처");
skr = JOptionPane.showInputDialog(name + "의 국어점수");
sen = JOptionPane.showInputDialog(name + "의 영어점수");
sma = JOptionPane.showInputDialog(name + "의 수학점수");
kr = Integer.parseInt(skr);//String로 항상 받기 때문에 정수형 데이터로 변환한다.
en = Integer.parseInt(sen);//String로 항상 받기 때문에 정수형 데이터로 변환한다.
ma = Integer.parseInt(sma);//String로 항상 받기 때문에 정수형 데이터로 변환한다.
avg =(kr+en+ma)/3.0;
ps = con.prepareStatement(sql);
ps.setString(1, name);
ps.setString(2, tel);
ps.setInt(3, kr);
ps.setInt(4, en);
ps.setInt(5, ma);
ps.setDouble(6,avg);
if(ps.executeUpdate() > 0){ //if 를 사용하여 확인 진행 왜냐하면 executeupdate만 쓰면 제대로 실행이 되었는지 안되었는지 확인을 할 수가 없다.
JOptionPane.showMessageDialog(null, "등록 완료", sql, ma, null);
}else {
JOptionPane.showInputDialog("등록 실패");
}
ps.close();
//이름
//연락처
//국영수
//평균계산
//sql실행
//결과보여줌
}else if(select.equals("2")) {
String oldName;
sql = "UPDATE student SET "
+ "st_name = ?, st_tel = ?, st_kr = ?,st_en = ?, st_ma = ?,st_avg=(st_kr+st_en+st_ma)/3.0"
+ "WHERE st_name =?";
oldName = JOptionPane.showInputDialog("수정할 학생의 이름");
name = JOptionPane.showInputDialog(oldName +"의 새 이름");
tel = JOptionPane.showInputDialog(name +"의 연락처");
skr = JOptionPane.showInputDialog(name +"의 국어점수");
sen = JOptionPane.showInputDialog(name +"의 영어점수");
sma = JOptionPane.showInputDialog(name +"의 수학점수");
kr =Integer.parseInt(skr);
en =Integer.parseInt(sen);
ma =Integer.parseInt(sma);
ps = con.prepareStatement(sql);
ps.setString(1,name);
ps.setString(2,tel);
ps.setInt(3,kr);
ps.setInt(4,en);
ps.setInt(5,ma);
ps.setString(6,oldName);
if(ps.executeUpdate() > 0){
JOptionPane.showMessageDialog(null, "학생수정완료");
}else {
JOptionPane.showMessageDialog(null, "수정할 학생이 없습니다.");
}
ps.close();
}else if(select.equals("3")) {
sql ="DELETE FROM student WHERE st_name = ?";
name = JOptionPane.showInputDialog("삭제할 학생의 이름");
ps = con.prepareStatement(sql);
ps.setString(1, name);
if(ps.executeUpdate() > 0) {
JOptionPane.showMessageDialog(null, "학생삭제완료");
}else {
JOptionPane.showMessageDialog(null, "삭제할 학생이 없습니다.");
}
ps.close();
}else if(select.equals("4")) {
sql ="SELECT *FROM student WHERE st_name = ?";
name = JOptionPane.showInputDialog("검색할 학생의 이름");
ps = con.prepareStatement(sql);
ps.setString(1,name);
rs = ps.executeQuery(); //ResultSet이 도착하여 ResultSet에 결과를 받는 것이고 Query를 하는이유는 SELECT 타입때문이다.
if(rs.next()){//executeQuery는 ResultSet셋을 받아오는데 최소한 한번 next한 줄이 실행되어야 한번 데이터 커서가 첫번째로 넘어오면서 보인다.
name = rs.getString("st_name");
tel = rs.getString("st_tel");
kr = rs.getInt("st_kr");
en = rs.getInt("st_en");
ma = rs.getInt("st_ma");
avg = rs.getDouble("st_avg");
int no = rs.getInt("st_no");
String regdate = rs.getString("st_regdate");
String message = "이름:"+name + "\n"
+ "국/영/수:" + kr +"," + en +","+ ma +"\n"
+ "평균:"+ avg +"\n"
+ "학번:"+no+"\n"
+ "등록일자:"+regdate+"\n"
+ "연락처:"+tel;
JOptionPane.showMessageDialog(null, message);
}else {
JOptionPane.showMessageDialog(null, "미등록 학생.");
}
}else if(select.equals("5")) {
sql ="SELECT * FROM student ORDER BY st_name ASC";//ORDER BY 를 사용해서 이름을 정렬하고 ASC를 사용하여 내림차순으로 정리합니다.
String message = "---------이름순 조회----------\n";
ps = con.prepareStatement(sql);//첫번째로 sql을 실행시킵니다.
rs = ps.executeQuery();
while(rs.next()) {
name = rs.getString("st_name");
tel = rs.getString("st_tel");
kr = rs.getInt("st_kr");
en = rs.getInt("st_en");
ma = rs.getInt("st_ma");
avg = rs.getDouble("st_avg");
int no = rs.getInt("st_no");
String regdate = rs.getString("st_regdate");
message += "이름:"+name + "\n"
+ "국/영/수:" + kr +"," + en +","+ ma +"\n"
+ "평균:"+ avg +"\n"
+ "학번:"+no+"\n"
+ "등록일자:"+regdate+"\n"
+ "연락처:"+tel+"\n"
+ "------------------------\n";
}//위에 4번과 똑같은 부분은 복사해왔음
JOptionPane.showMessageDialog(null, message);
}else if(select.equals("6")) {
sql = "SELECT * FROM student ORDER BY st_avg DESC";
ps = con.prepareStatement(sql);//첫번째로 sql을 실행시킵니다.
rs = ps.executeQuery();
int n = 1;
String message = "---------점수 순 조회----------\n";
while(rs.next()) {
name = rs.getString("st_name");
tel = rs.getString("st_tel");
kr = rs.getInt("st_kr");
en = rs.getInt("st_en");
ma = rs.getInt("st_ma");
avg = rs.getDouble("st_avg");
int no = rs.getInt("st_no");
String regdate = rs.getString("st_regdate");
message += "-----------------"+ n +"등----------------\n"
+ "이름:"+name + "\n"
+ "국/영/수:" + kr +"," + en +","+ ma +"\n"
+ "평균:"+ avg +"\n"
+ "학번:"+no+"\n"
+ "등록일자:"+regdate+"\n"
+ "연락처:"+tel+"\n";
n++;//등수를 증가시킴
}//위에 5번과 똑같은 부분은 복사해왔음
JOptionPane.showMessageDialog(null, message);
}else if(select.equals("7")) {
JOptionPane.showMessageDialog(null, "프로그램을 종료합니다.");
break;//반복을 진행하지 않도록 하는 명령어.
}else {
JOptionPane.showInputDialog(null,"잘못입력했습니다.\n다시 입력하세요.");
}
}
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(rs != null) {rs.close();}//지역변수에 null을 넣어 초기화를 해야 애러가 없음
if(rs != null) {ps.close();}//지역변수에 null을 넣어 초기화를 해야 애러가 없음
if(con != null) {con.close();}//지역변수에 null을 넣어 초기화를 해야 애러가 없음
}catch(Exception e){
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new StudentMain();
}
}
소스코드 결과값.
************* 컴퓨터 공학부가 모두 잘 되는 날이 왔으면 좋겠습니다. *************
*************틀린 부분이 있다면 말씀해주신다면. 정정 하도록 노력겠습니다. *************
'핫돌의 잡 지식 놓는 곳' 카테고리의 다른 글
언젠가 사용할지도 모르는 JSP 회원가입 페이지 구현 (0) | 2024.06.27 |
---|---|
언젠가 사용할지도 모르는 JSP 톰캣 설치 및 Eclipse 연동 (0) | 2024.06.26 |
언젠가 사용할지도 모르는 JSP ResultSet (0) | 2024.06.26 |
언젠가 사용할지도 모르는 JSP PreparedStatement (0) | 2024.06.26 |
언젠가 사용할지도 모르는 JSP 이클립스 설정하기. (0) | 2024.06.26 |