핫돌의 잡 지식 놓는 곳

언젠가 사용할지도 모르는 JSP 학생관리프로그램

핫돌 2024. 6. 26. 22:52
728x90
반응형

메뉴구현

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);//JOptionPaneimport하셔야 애러가 없습니다.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()){//executeQueryResultSet셋을 받아오는데 최소한 한번 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();

}

 

}

 

소스코드 결과값.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

************* 컴퓨터 공학부가 모두 잘 되는 날이 왔으면 좋겠습니다. *************
*************틀린 부분이 있다면 말씀해주신다면. 정정 하도록 노력겠습니다. *************

728x90
반응형