JAVA JDBC mysql结合制作日语单词小程序

  1. 实现界面
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

2.项目结构
在这里插入图片描述3. 数据库

在这里插入图片描述4. 实现代码
1)接口

package memorywords.dao;


public interface MemoryWords {
	/*
	 * 顺便复习下接口相关的知识:
	 * 1. 接口中的方法全部是public抽象方法(就算不写abstract,public,它也是public抽象方法)
	 * 2. 接口中的变量只可以用static final 来修饰
	 * 3. 接口不可以有构造方法,因为接口不可以被实例化,也就是不可以创建对象
	 * 4. 接口可以继承其他接口
	 * 5. 一个类可以实现多个接口
	 */
		//1. 录入单词
		void AddWords(String ch,String jp);
		//2. 修改单词
		void ReviseWords(String id,String jp);
		//3. 删除单词
		void DeleteWords(String ch );
		//4. 记忆单词,随机出现中文单词,要写出对应的日语,
		void RemenberWords();
		//5. 查询所有
		String FindAll();
		
}

2)实现方法

package memorywords.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

import memorywords.util.JDBC_util;
import memorywords.dao.MemoryWords;

public class MemoryWordsImplement implements MemoryWords {
	//实现添加方法
	@Override
	public void AddWords(String ch, String jp) {
		Connection conn = null;
		PreparedStatement ps = null;	
		try {
			String sql="insert into JapaneseDate values(null,?,?,0,0,0)";
			conn = JDBC_util.getConn();
			ps = conn.prepareStatement(sql);
			ps.setString(1, ch);
			ps.setString(2, jp);
			int rs = ps.executeUpdate();
			if(rs>0){
				System.out.println("添加成功!");			
			}else{
				System.out.println("添加失败!");
			}
		} catch (Exception e) {			
			e.printStackTrace();
		}finally{
			JDBC_util.release(ps, conn);
		}		
	}	
	// 实现修改方法
	@Override
	public void ReviseWords(String id, String jp) {
		Connection conn = null;
		PreparedStatement ps = null;
		try {
			String sql="update JapaneseDate set Japanese=? where id=?";
			conn = JDBC_util.getConn();
			ps = conn.prepareStatement(sql);
			ps.setString(1, jp);
			ps.setString(2, id);
			int rs = ps.executeUpdate();
			if(rs>0){
				System.out.println("修改成功!");			
			}else{
				System.out.println("修改失败!");
			}
		} catch (Exception e) {			
			e.printStackTrace();
		}finally{
			JDBC_util.release(ps, conn);
		}		
		
	}
	
	// 实现删除方法
	@Override
	public void DeleteWords(String ch) {
		Connection conn = null;
		PreparedStatement ps = null;
		try {
			String sql="delete from JapaneseDate where Chinese=?";
			conn = JDBC_util.getConn();
			ps = conn.prepareStatement(sql);
			ps.setString(1, ch);
			int rs = ps.executeUpdate();
			if(rs>0){
				System.out.println("删除成功!");			
			}else{
				System.out.println("删除失败!");
			}
		} catch (Exception e) {			
			e.printStackTrace();
		}finally{
			JDBC_util.release(ps, conn);
		}				
	}
	
	private Boolean toContinue(Scanner sc){
		System.out.println("请选择:1.退出请输入‘1’;2.继续请按任意键");
		String opt = sc.nextLine().trim();
		Boolean flag = true;
		if(opt.equals("1")){
			flag = false;
			return flag;
		}else{
			return flag;
		}
		
	}
	// 实现背单词方法
	@Override
	public void RemenberWords () {
		Connection conn = null;
		PreparedStatement ps = null;
		Statement st = null;
		ResultSet rs = null;
		ResultSet rs0 = null;
		Scanner sc = new Scanner(System.in);
		ArrayList<String> idArray = new ArrayList<String>();
		Random rdid = new Random();
		Boolean flag = null;
	try {
		conn = JDBC_util.getConn();
		String sql0 = "select id from JapaneseDate";
		st = conn.createStatement();
		rs0 = st.executeQuery(sql0);
		while(rs0.next()){
			String no = rs0.getString("id");
			idArray.add(no);
		}
		while(true){		
			int idx = rdid.nextInt(idArray.size());
			String id = idArray.get(idx);
			String sql = "select * from JapaneseDate where id=?";
			ps = conn.prepareStatement(sql);
			ps.setString(1, id);
			rs = ps.executeQuery();
			if(rs.next()){
				String chn = rs.getString("Chinese");
				String jap = rs.getString("Japanese").trim();
				System.out.println(chn);
				System.out.println("请输入对应的日文:");
				String answer = sc.nextLine().trim();
				if(answer.equals(jap)){
					System.out.println("回答正确!");
					System.out.println("答案是:");
					System.out.println(chn+"\t\t"+jap);
					flag = toContinue(sc);
					if(flag==false){
						break;
					}
				}else{
					System.out.println("回答错误!");
					System.out.println("正确答案应该是:");
					System.out.println(chn+"\t\t"+jap);
					flag = toContinue(sc);
					if(flag==false){
						break;
					}
				}
			}else{
				System.out.println("代码有误。。。");
			}
			
		}
		System.out.println("欢迎再来。。。");
		sc.close();
	} catch (Exception e) {
		e.printStackTrace();
	}finally{
		JDBC_util.release(st,rs,rs0, ps, conn);
	}		
	}
	
	// 实现查询所有方法
	@Override
	public String FindAll() {
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;
		String allinfo = "";
	try {
		conn = JDBC_util.getConn();
		st = conn.createStatement();
		String sql = "select * from JapaneseDate";
		rs = st.executeQuery(sql);			
		while(rs.next()){
			String no1 = rs.getString("id");
			String chn1 = rs.getString("Chinese");
			String jap1 = rs.getString("Japanese");
			String apeartime1 = rs.getString("AppearTimes");
			String righttime1 = rs.getString("RightTimes");
			String wrongtime1 = rs.getString("WrongTimes");
			
			String no = String.format("%-5s", no1);
			String chn = String.format("%-10s", chn1);
			String jap = String.format("%-10s", jap1);
			String apeartime = String.format("%-5s", apeartime1);
			String righttime = String.format("%-5s", righttime1);
			String wrongtime = String.format("%-5s",  wrongtime1);
			
			String eachline = no+"\t"+chn+"\t"+jap+"\t"+apeartime+"\t"+righttime+"\t"+wrongtime+"\n";
			allinfo += eachline;
			System.out.println(no+"\t\t"+chn+"\t\t"+jap);		
		}
	} catch (Exception e) {
		e.printStackTrace();
	}finally{			
		JDBC_util.release(rs,st,conn);
		
	}
	return allinfo;			
	}
	//处理错误和正确两栏;
	public void RightOrWrong(ArrayList<String> contentArray, Boolean flag){
		Connection conn = null;
		PreparedStatement ps = null;
		PreparedStatement ps1 = null;
		PreparedStatement ps2 = null;
		ResultSet rs = null;
		int rttime=0 ;
		int wrtime=0 ;		
		try {			
			conn = JDBC_util.getConn();
			String sql = "select * from JapaneseDate where Chinese=?";
			ps = conn.prepareStatement(sql);
			String chn = contentArray.get(0);
			ps.setString(1, chn);
			rs = ps.executeQuery();
			if(rs.next()){
				rttime = rs.getInt("RightTimes");
				wrtime = rs.getInt("WrongTimes");				
			}else{
				System.out.println("代码有误。。。");
			}
			//System.out.println(rttime);
			if(flag==true){
				rttime += 1;
				String sqlrt = "Update JapaneseDate set RightTimes=? where Chinese=?";
				ps1 = conn.prepareStatement(sqlrt);
				ps1.setInt(1, rttime);
				ps1.setString(2, chn);
				ps1.executeUpdate();
				System.out.println(rttime);
			}else{
				wrtime +=1;
				String sqlwr = "Update JapaneseDate set WrongTimes=? where Chinese=?";
				ps2 = conn.prepareStatement(sqlwr);
				ps2.setInt(1, wrtime);
				ps2.setString(2, chn);
				ps2.executeUpdate();
			}
			
		} catch (SQLException e) {
			
			e.printStackTrace();
		}finally{
			JDBC_util.release(rs,ps, ps1,ps2, conn);
		}
		
	}
	// 与GUI文件关联(关联“下一条”按钮)
	public ArrayList<String> Nextbtn(ArrayList<String> idArray){
		Connection conn = null;
		PreparedStatement ps = null;
		PreparedStatement ps1 = null;
		ResultSet rs = null;
		ArrayList<String> contentArray = new ArrayList<String>();
		Random rdid = new Random();
		int aprt=0;
		//String new_aprt = null;
	try {
		conn = JDBC_util.getConn();
		int idx = rdid.nextInt(idArray.size());
		String id = idArray.get(idx);
		String sql = "select * from JapaneseDate where id=?";
		ps = conn.prepareStatement(sql);
		ps.setString(1, id);
		rs = ps.executeQuery();
		
		if(rs.next()){
			String chn = rs.getString("Chinese");
			String jap = rs.getString("Japanese").trim();
			String aprtime = rs. getString("AppearTimes").trim();
			aprt = Integer.parseInt(aprtime);
			aprt +=1;
			contentArray.add(chn);
			contentArray.add(jap);
		}else{
			System.out.println("代码有误。。。");
		}	
		String sqlresetnum = "update JapaneseDate set AppearTimes = ? where id = ?";
		ps1 = conn.prepareStatement(sqlresetnum);
		ps1.setInt(1,aprt);
		ps1.setString(2,id);
		ps1.executeUpdate();
	} catch (Exception e) {
		e.printStackTrace();
	}finally{
		JDBC_util.release(rs,ps, ps1, conn);
	}		
		return contentArray;
	}
	
	
	//与GUI文件关联(关联“开始练习”按钮)
	public ArrayList<String> StartBtn(){
		Connection conn = null;
		//PreparedStatement ps = null;
		Statement st = null;
		//ResultSet rs = null;
		ResultSet rs0 = null;
		ArrayList<String> idArray = new ArrayList<String>();
		//Boolean flag = null;		
		conn = JDBC_util.getConn();
		String sql0 = "select id from JapaneseDate";
		try {
			st = conn.createStatement();
			rs0 = st.executeQuery(sql0);
			while(rs0.next()){
				String no = rs0.getString("id");
				idArray.add(no);
				}
		} catch (SQLException e) {			
			e.printStackTrace();
		}finally {
			JDBC_util.release(rs0,st, conn);			
		}
		return idArray;
}
	
	
/*	public String RememeberWordsGui() {
		Connection conn = null;
		PreparedStatement ps = null;
		Statement st = null;
		ResultSet rs = null;
		ResultSet rs0 = null;
		Scanner sc = new Scanner(System.in);
		ArrayList<String> idArray = new ArrayList<String>();
		Random rdid = new Random();
		Boolean flag = null;
	try {
		conn = JDBC_util.getConn();
		String sql0 = "select id from JapaneseDate";
		st = conn.createStatement();
		rs0 = st.executeQuery(sql0);
		while(rs0.next()){
			String no = rs0.getString("id");
			idArray.add(no);
		}

		int idx = rdid.nextInt(idArray.size());
		String id = idArray.get(idx);
		String sql = "select * from JapaneseDate where id=?";
		ps = conn.prepareStatement(sql);
		ps.setString(1, id);
		rs = ps.executeQuery();
		if(rs.next()){
			String chn = rs.getString("Chinese");
			String jap = rs.getString("Japanese").trim();
			System.out.println(chn);
			System.out.println("请输入对应的日文:");
			String answer = sc.nextLine().trim();
			if(answer.equals(jap)){
				System.out.println("回答正确!");
				System.out.println("答案是:");
				System.out.println(chn+"\t\t"+jap);
			}else{
				System.out.println("回答错误!");
				System.out.println("正确答案应该是:");
				System.out.println(chn+"\t\t"+jap);
			}
		}else{
			System.out.println("代码有误。。。");
		}
		
		System.out.println("欢迎再来。。。");
		sc.close();
	} catch (Exception e) {
		e.printStackTrace();
	}finally{
		JDBC_util.release(st,rs,rs0, ps, conn);
	}		
		return null;
	}*/
}

3)测试方法

package memorywords.dao.impl.test;

import java.util.ArrayList;

import org.junit.Test;

import memorywords.dao.MemoryWords;
import memorywords.dao.impl.MemoryWordsImplement;

public class MemoryWordsTest {
     //写入相关的测试方法 
	@Test
	public void AddWordsTest(){
		MemoryWords mw = new MemoryWordsImplement();//测试重写的方法:将实现类对象指向接口
		mw.AddWords("10分","じゅっぷん");
	}
	
	@Test
	public void FindAllTest(){
		MemoryWords mw = new MemoryWordsImplement();
		mw.FindAll();
	}
	
	@Test
	public void ReviseWordsTest(){
		MemoryWords mw = new MemoryWordsImplement();
		mw.ReviseWords("19","じゅうくにち");
	}
	
	@Test
	public void RememberTest(){
		MemoryWords mw = new MemoryWordsImplement();
		mw.RemenberWords();
	}
	
	@Test
	public void StartBtnTest(){
		MemoryWordsImplement mw = new MemoryWordsImplement();//测试实现类中的普通方法
		ArrayList<String> idArray = mw.StartBtn();
		System.out.println(idArray.get(1));
	}
	
	@Test
	public void NextbtnTest(){
		MemoryWordsImplement mw = new MemoryWordsImplement();
		ArrayList<String> idArray = mw.StartBtn();
		ArrayList<String> contentArray = mw.Nextbtn(idArray);
		System.out.println(contentArray.get(1));
	}
}

4)工具类

package memorywords.util;

import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JDBC_util {
		static String driverClass = null;
		static String url = null;
		static String username = null;
		static String password = null;
		// static 中的代码是导入时自动加载的
		static{
			try {
				Properties pt = new Properties();
				InputStream is = new FileInputStream("jdbc.properties");
				//InputStream is = Close.class.getClassLoader().getResourceAsStream("jdbc.properties");
				pt.load(is);
				driverClass = pt.getProperty("driverClass");
				url = pt.getProperty("url");
				username = pt.getProperty("username");
				password = pt.getProperty("password");
			} catch (Exception e) {
				e.printStackTrace();
			}
			
		}
	
		// 建立连接
		public static Connection getConn(){		
			Connection conn = null;
			try {
				//Class.forName(driverClass);
				 conn = DriverManager.getConnection(url,username,password);
				
			} catch (Exception e) {
				e.printStackTrace();
			}
			 return conn;		
		}
		
		//释放资源JDBC_util.release(rs,ps, ps1, conn);
		public static void release(ResultSet rs,Statement ps,Statement ps1,Connection conn){
			
			closeRs(rs);
			closeSt(ps);
			closeSt(ps1);
			closeConn(conn);
			
		}
		//JDBC_util.release(rs,ps, ps1,ps2, conn);
		public static void release(ResultSet rs,Statement ps,Statement ps1,Statement ps2,Connection conn){		
			closeRs(rs);
			closeSt(ps);
			closeSt(ps1);
			closeSt(ps2);
			closeConn(conn);
			
		}
		
		public static void release(ResultSet rs,Statement st,Connection conn){
			closeRs(rs);
			closeSt(st);
			closeConn(conn);
		}
		
		public static void release(Statement st,Connection conn){
			closeSt(st);
			closeConn(conn);
		}
		
		public static void release(Connection conn){
			closeConn(conn);
		}
		
		public static void release(Statement st,ResultSet rs,ResultSet rs0,Statement ps,Connection conn){
			closeSt(st);
			closeRs(rs);
			closeRs(rs0);
			closeSt(ps);
			closeConn(conn);
			
		}
		

		
		private static void closeRs(ResultSet rs){
			try {
				if(rs != null){
					rs.close();
				}							
			} catch (SQLException e) {
				e.printStackTrace();
			}finally{
				rs =null;
			}			
		}
		
		private static void closeSt(Statement st){
			try {
				if(st != null){
					st.close();
				}							
			} catch (SQLException e) {
				e.printStackTrace();
			}finally{
				st = null;
			}
			
		}
		
		private static void closeConn(Connection conn){
			try {
				if(conn != null){
					conn.close();
				}							
			} catch (SQLException e) {
				e.printStackTrace();
			}finally{
				conn = null;
			}
			
		}
	}



5)Gui程序(界面运行)

package memorywords.gui;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;

import memorywords.dao.MemoryWords;
import memorywords.dao.impl.MemoryWordsImplement;

public class MemoryWordsGui {
	private Frame f;// 声明窗口
	private Button btn_start,btn_next,btn_end,btn_showall,btn_check;//声明所有按钮
	private TextField tf_chn,tf_jap;//声明所有文本框
	private TextArea ta;//声明多行文本框
	private Label l,l0;//声明标签
	private String allinfo; //声明数据库内容字符串
	private ArrayList<String> idArray,contentArray;//声明所有的数组

	public MemoryWordsGui(){
		init();
	}
	
	private void init() {
		f = new Frame("日文日期记忆助手");
		f.setLayout(new FlowLayout());
		f.setBounds(300,100,500,600);
		f.setVisible(true);
		l = new Label("中文");
		l0 = new Label("日文");
		tf_chn = new TextField("",55);
		tf_jap = new TextField("",55);
		btn_start = new Button("开始练习");
		btn_check = new Button("正确/错误 ");
		//btn_check.setLabel("正确");
		btn_next = new Button("下一条");
		btn_end = new Button("结束练习");
		btn_showall = new Button("查看所有词条");
		ta = new TextArea("",28,56);		
		tf_jap.setText("");
	
		String howtouse = "          *********记忆助手使用步骤**********\n1.点击“开始练习”按钮,中文部分文本框会随机出现一个单词,\n在日文文本框中输入对应的日语。\n2.点击“正确/错误”按钮,验证输入内容是否正确,如果输入\n正确,“正确/错误”按钮上面的文字会变成“正确”,如果输\n入错误,“正确/错误”按钮上面的文字会变成“错误”,验证\n的同时下方的文本框会给出正确答案。\n3.点击“下一条”按钮,出现一个新的中文单词,后面按照步\n骤2中的步骤重复。\n4.点击“结束练习”按钮,所有的文本框会清空。\n5.点击“查看所有”按钮,下方的多行文本框会列出数据库中\n收录的所有词条。\n";
		ta.setText(howtouse);
		f.addWindowListener(new WindowAdapter(){
			@Override
			public void windowClosing(WindowEvent e) {
				System.out.println("exiting...");
				System.exit(0);
			}			
		});
		// 设置开始,下一条,查看收录的事件监听
		//tf_jap.setText("");
		
		btn_start.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				MemoryWordsImplement mw = new MemoryWordsImplement();
				idArray = mw.StartBtn();
				 contentArray = mw.Nextbtn(idArray);
				String chn = contentArray.get(0);
				tf_chn.setText(chn);
			}
		
		});
		
		btn_next.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				MemoryWordsImplement mw = new MemoryWordsImplement();
				contentArray = null;
				//idArray = mw.StartBtn();
				try {
						contentArray = mw.Nextbtn(idArray);
						String chn = contentArray.get(0);
						tf_chn.setText(chn);
						btn_check.setLabel("正确/错误");//设置按钮文字
						
						String jap = tf_jap.getText();//获取文本框内容
						//System.out.println(chn+jap);
						tf_jap.setText("");
						//System.out.println(chn+jap);
						
				} catch (Exception e1) {
					e1.printStackTrace();
				}
				
			}
		
		});
		
		btn_check.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				MemoryWordsImplement mw = new MemoryWordsImplement();
				Boolean flag = true;
				try {
					if(contentArray.size()!= 0){
						//ArrayList<String> contentArray = mw.Nextbtn(idArray);
						String jap = contentArray.get(1);
						String answer = tf_jap.getText().trim(); //用trim()方法出去字符串首尾的空格,因为录入或填写答案时会不自知的按下空格,导致判断结果出错
						String cort = "正确答案:"+contentArray.get(0)+"\t\t"+jap;
						if(answer.equals(jap)){
							btn_check.setLabel("正确");							
							ta.setText(cort);				
						}else{
							btn_check.setLabel("错误");
							ta.setText(cort);
							flag = false;
						}
						System.out.println("flag="+flag);
						mw.RightOrWrong(contentArray, flag);
						
					}
				} catch (Exception e1) {
					e1.printStackTrace();
				}
				
			}		
		});
		// 设置结束按钮监听事件,清空界面所有数据
		btn_end.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				idArray = null;
				contentArray = null;
				tf_chn.setText("");
				tf_jap.setText("");
				ta.setText("");
				btn_check.setLabel("正确/错误");
			}
		
		});
		//与 memorywords.dao.impl.MemoryWordsImplement。java中的FindAll()方法关联;
		btn_showall.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				MemoryWords mw = new MemoryWordsImplement();
				//用String。format格式化文本内容,是文本内容更整齐,下面是统一左对齐
				String no = String.format("%-5s", "编号");
				String chn = String.format("%-10s", "中文");
				String jap = String.format("%-10s", "日文");
				String apeartime = String.format("%-5s", "出现");
				String righttime = String.format("%-5s", "答对");
				String wrongtime = String.format("%-5s",  "答错");
				String title = no+"\t"+chn+"\t"+jap+"\t"+apeartime+"\t"+righttime+"\t"+wrongtime+"\n";;
				allinfo = mw.FindAll();
				ta.setText(title+allinfo);
			   
				
			}
		
		});
		//将所有的窗体部件全部添加到窗体中
		f.add(l);
		f.add(tf_chn);
		f.add(l0);
		f.add(tf_jap);
		f.add(btn_start);
		f.add(btn_check);
		f.add(btn_next);
		f.add(btn_end);
		f.add(btn_showall);
		f.add(ta);
		System.out.println("ok...");
		
	}
	
	public static void main(String[] args){
		new MemoryWordsGui();
	}
}

发布了55 篇原创文章 · 获赞 0 · 访问量 2068

猜你喜欢

转载自blog.csdn.net/KathyLJQ/article/details/104146371
今日推荐