Java第六次实训

Java服务接口实现类

在上次实训时建立了四个对应的服务接口,并且创建了学校类的服务接口实现类,在本次实训时,我们继续建立服务接口实现类

1. 创建状态服务接口实现类StatusServiceImpl

在service的子包impl中建立该实现类:
在这里插入图片描述
详细代码为:
在这里插入图片描述

对StatusServiceImpl进行单元测试

在test包中创建测试类:
在这里插入图片描述

(1)编写测试方法testFindStatusById()

在这里插入图片描述
代码如下:
在这里插入图片描述
运行结果为:
在这里插入图片描述

(2)编写测试方法testUpdateStatus()

在这里插入图片描述
运行结果为:
在这里插入图片描述

2.创建学生服务接口实现类

在这里插入图片描述
详细代码为:

package net.lyq.student.service.impl;


import net.lyq.student.bean.Student;
import net.lyq.student.dao.StudentDao;
import net.lyq.student.dao.impl.StudentDaoImpl;
import net.lyq.student.service.StudentService;

import java.util.List;
import java.util.Vector;


public class StudentServiceImpl implements StudentService {
    private StudentDao studentDao = new StudentDaoImpl();

    @Override
    public int addStudent(Student student) {
        return studentDao.insert(student);
    }

    @Override
    public int deleteStudentById(String id) {
        return studentDao.deleteById(id);
    }

    @Override
    public int deleteStudentsByClass(String clazz) {
        return studentDao.deleteByClass(clazz);
    }

    @Override
    public int deleteStudentsByDepartment(String department) {
        return studentDao.deleteByDepartment(department);
    }

    @Override
    public int updateStudent(Student student) {
        return studentDao.update(student);
    }

    @Override
    public Student findStudentById(String id) {
        return studentDao.findById(id);
    }

    @Override
    public List<Student> findStudentByName(String name) {
        return studentDao.findByName(name);
    }

    @Override
    public List<Student> findStudentsByClass(String clazz) {
        return studentDao.findByClass(clazz);
    }

    @Override
    public List<Student> findStudentsByDepartment(String department) {
        return studentDao.findByDepartment(department);
    }

    @Override
    public List<Student> findAllStudents() {
        return studentDao.findAll();
    }

    @Override
    public Vector findRowsBySex() {
        return studentDao.findRowsBySex();
    }

    @Override
    public Vector findRowsByClass() {
        return studentDao.findRowsByClass();
    }

    @Override
    public Vector findRowsByDepartment() {
        return studentDao.findRowsByDepartment();
    }
}

对StudentServiceImpl进行单元测试

在这里插入图片描述

(1)编写测试方法testFindStudentsByName()

在这里插入图片描述

(2)编写测试方法testAddStudent()

在这里插入图片描述
运行结果:
在这里插入图片描述

(3)编写测试方法testDeleteStudentById()

在这里插入图片描述
运行结果:
在这里插入图片描述
数据表:
在这里插入图片描述
在这里插入图片描述

(4)编写测试方法testDeleteStudentsByClass()

在这里插入图片描述

(5)编写测试方法testDeleteStudentsByDepartment()

在这里插入图片描述

(6)编写测试方法testUpdateStudent()

在这里插入图片描述

(7)编写测试方法testFindStudentById()

在这里插入图片描述

(8)编写测试方法testFindAllStudents()

在这里插入图片描述

(9)编写测试方法testFindStudentsByClass()

在这里插入图片描述

(10)编写测试方法testFindStudentsByDepartment()

在这里插入图片描述

(11)编写测试方法testFindRowsBySex()

在这里插入图片描述

(12)编写测试方法testFindRowsByClass()

在这里插入图片描述

(13)编写测试方法testFindRowsByDepartment()

在这里插入图片描述

3.创建用户服务接口实现类

在这里插入图片描述

package net.lyq.student.service.impl;

import net.lyq.student.bean.User;
import net.lyq.student.dao.UserDao;
import net.lyq.student.dao.impl.UserDaoImpl;
import net.lyq.student.service.UserService;

import java.util.List;

public class UserServiceImpl implements UserService {
    /**
     * 声明用户数据访问对象
     */
    private UserDao userDao = new UserDaoImpl();

    @Override
    public int addUser(User user) {
        return userDao.insert(user);
    }

    @Override
    public int deleteUserById(int id) {
        return userDao.deleteById(id);
    }

    @Override
    public List<User> findAllUsers() {
        return userDao.findAll();
    }

    @Override
    public User findUserById(int id) {
        return userDao.findById(id);
    }

    @Override
    public User login(String username, String password) {
        return userDao.login(username, password);
    }

    @Override
    public int updateUser(User user) {
        return userDao.update(user);
    }

    @Override
    public boolean isUsernameExisted(String username) {
        return userDao.isUsernameExisted(username);
    }
}

对UserServiceImpl进行单元测试

在这里插入图片描述

(1)编写测试方法testLogin()

在这里插入图片描述
运行结果:
在这里插入图片描述

(2)编写测试方法testIsUsernameExisted()

在这里插入图片描述
运行结果:
在这里插入图片描述
修改用户名即可改变运行结果

(3)编写测试方法testAddUser()

在这里插入图片描述
运行结果:
在这里插入图片描述

(4)编写测试方法testDeleteUserById()

在这里插入图片描述
运行结果:
在这里插入图片描述

(5)编写测试方法testUpdateUser()

在这里插入图片描述
运行结果:
在这里插入图片描述

(6)编写测试方法testFindUserById()

在这里插入图片描述
运行结果:
在这里插入图片描述

(7)编写测试方法testFindAllUsers()

在这里插入图片描述
运行结果:
在这里插入图片描述
以上为所有服务接口类的所有测试类

创建应用程序类

在net.lyq.student包里创建app子包,并创建Application类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在类中编写如图所示代码,发生错误,是由于该三个窗口为还未进行创建
创建gui包用来存放三个窗口类
在这里插入图片描述
创建结束以后,再次查看Application
在这里插入图片描述

创建窗口界面

在这里插入图片描述
上文提到,创建如图所示的三个窗口,接下来就可以进行窗口类的编写

1、创建主界面窗口MainFrame

package net.lyq.student.gui;

import net.lyq.student.app.Application;
import net.lyq.student.bean.Status;
import net.lyq.student.service.StatusService;
import net.lyq.student.service.impl.StatusServiceImpl;

import javax.swing.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class MainFrame extends JFrame {
    /**
     * 构造方法
     * @param title
     */
    public MainFrame(String title){
        super(title);
        initGUI();
    }
    private Status status;//状态对象
    private StatusService statusService;//状态服务对象
    /**
     * 初始化图形界面
     */
    public void initGUI(){
        //创建状态服务对象
        statusService = new StatusServiceImpl();
        //获取状态对象
        status = statusService.findStatusById(1);

        //设置窗口尺寸
        setSize(800,640);
        //设置窗口可见
        setVisible(true);
        setLocationRelativeTo(null);
        //设置窗口标题
        setTitle("学生信息管理系统"+status.getVersion());
        //设置窗口默认关闭方式
//        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //注册窗口监听器,创建窗口适配器,编写事件处理代码
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                exitSystem();
            }
        });
    }

    /**
     * 退出系统,询问用户是否退出
     */
    private void exitSystem() {
        int choice = JOptionPane.showConfirmDialog(this,"您是否要退出系统",
                "学生信息管理系统",JOptionPane.YES_NO_OPTION);
        if (choice == JOptionPane.YES_NO_OPTION){
            System.exit(0);
        }else{
            //卸载当前窗口
            dispose();
            //重新显示主窗口
            Application.mainFrame = new MainFrame("学生信息管理系统"+status.getVersion());
        }
    }

    public static void main(String[] args) {
        Application.mainFrame = new MainFrame("");
    }
}

2.创建用户登录窗口LoginFrame

package net.lyq.student.gui;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

import net.lyq.student.app.Application;
import net.lyq.student.bean.Status;
import net.lyq.student.bean.User;
import net.lyq.student.service.StatusService;
import net.lyq.student.service.UserService;
import net.lyq.student.service.impl.StatusServiceImpl;
import net.lyq.student.service.impl.UserServiceImpl;

public class LoginFrame extends JFrame{
	private String username;
	private String password;
	
	private JLabel lblUsername;
	private JLabel lblPassword;
	private JTextField txtUsername;
	private JPasswordField txtPassword;
	
	private JButton btnOK;
	private JButton btnCancel;
	private JButton btnRegister;
	
	private JPanel panel,panel1,panel2,panel3;

	public LoginFrame(String title) {
		super(title);
		initGUI();
	}
	
	private void initGUI() {

		panel = (JPanel) getContentPane();
		panel1 = new JPanel();
		panel2 = new JPanel();
		panel3 = new JPanel();
		
		lblUsername = new JLabel("用户名:");
		lblPassword = new JLabel("密码:");
		txtUsername = new JTextField(15);
		txtPassword = new JPasswordField(15);
		btnOK = new JButton("确定");
		btnCancel = new JButton("取消");
		btnRegister = new JButton("注册");
		

		panel1.add(lblUsername);
		panel1.add(txtUsername);
		panel2.add(lblPassword);
		panel2.add(txtPassword);
		panel3.add(btnOK);
		panel3.add(btnCancel);
		panel3.add(btnRegister);
		

		panel.setLayout(new GridLayout(3,1));

		panel.add(panel1);
		panel.add(panel2);
		panel.add(panel3);
		

		btnOK.setMnemonic(KeyEvent.VK_O);
		btnCancel.setMnemonic(KeyEvent.VK_C);
		btnRegister.setMnemonic(KeyEvent.VK_R);

		txtPassword.setEchoChar('*');
		

		setSize(250, 200);

		setLocationRelativeTo(null);

		setResizable(false);

		pack();

		setVisible(true);

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		

		btnOK.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				login();
			}
		});

		btnOK.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e) {
				if (e.getKeyCode() == KeyEvent.VK_ENTER) {
					login();
				}
			}
		});

		txtUsername.addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent e) {
				if (e.getKeyCode() == KeyEvent.VK_ENTER)
					txtUsername.requestFocus();
			}
		});

		txtPassword.addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent e) {
				if (e.getKeyCode() == KeyEvent.VK_ENTER)
					txtPassword.requestFocus();
			}
		});

		btnCancel.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				System.exit(0);
			}
		});

		btnRegister.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub

				Application.loginFrame.setVisible(false);

				Application.registerFrame = new RegisterFrame("用户注册");
			}
		});
	}
	
	private void login() {

		username = txtUsername.getText().trim();

		password = new String(txtPassword.getPassword());

		UserService userService = new UserServiceImpl();

		User user = userService.login(username, password);
		

		if (user != null) {

			Application.loginFrame.setVisible(false);

			StatusService statusService = new StatusServiceImpl();

			Status status = statusService.findStatusById(1);

			Application.id = user.getId();
			Application.username = user.getUsername();
			Application.password = user.getPassword();

			JOptionPane.showMessageDialog(null, "欢迎使用学生信息管理系统" + status.getVersion(),"用户登录",JOptionPane.INFORMATION_MESSAGE);

			Application.mainFrame = new MainFrame("");

			Application.loginFrame.dispose();
		}else {

			Application.loginFrame.setVisible(false);

			JOptionPane.showMessageDialog(null, "用户名或密码错误,请重新输入","用户登录",JOptionPane.ERROR_MESSAGE);

			Application.loginFrame.setVisible(true);

			txtUsername.selectAll();

			txtPassword.selectAll();

			txtUsername.requestFocus();
		}
	}
	
	public static void main(String[] args) {
		Application.loginFrame = new LoginFrame("用户登录");
	}
}

该代码中,RegisterFrame会出现错误,需要对该类进行修改

猜你喜欢

转载自blog.csdn.net/weixin_46705517/article/details/107242177