MVC模块

MVC就是把代码按照不同的用放到不同包里,即分类归放。

          m -- model          数据模型层(实体类)
          v -- view            视图层(和用户的交互视图)
          c -- controller          控制层(业务逻辑)

在一个java工程里面创建四个包,并导入驱动包。 

controller包下包括StudentController.java和UserController.java。

package controller;

import java.sql.ResultSet;
import java.sql.SQLException;

import tools.JDBCTool;

public class StudentController {
	//查找所有学生,返回二维数组,包括多行多列
	public static String[][] selectStudents() {
		//查询有多少条数据,返回的只是一个int类型数据
		try {
			//自定义函数查询接收数据条数
			int length = getCounts(); 
			//创建二维数组接收所有学生数据,包括多位学生的多条信息
			String[][] students = new String[length][5];
			String sql = "select * from student";
			ResultSet set1 = JDBCTool.select(sql);
			for(int i=0;i<length;i++){
				 //每完成一次循环都要移动到下一行
				 set1.next();
				 //getString()可以获取任何类型的数据
				 students[i][0]=set1.getString("Sid");
				 students[i][1]=set1.getString("Sname");
				 students[i][2]=set1.getString("Sage");
				 students[i][3]=set1.getString("Ssex");
				 students[i][4]=set1.getString("Szhuanye");
			 }
			 return students; //返回二维数组
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			JDBCTool.close(); //一定要关闭资源
		}
		return null;
	}
	//查询有多少条数据
	public static int getCounts(){
		String sql="select count(*) from student";
		ResultSet set1 = JDBCTool.select(sql);
		try {
			set1.next();
			return set1.getInt(1);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			JDBCTool.close();
		}
		return 0;
	}
}
package controller;

import java.sql.ResultSet;
import java.sql.SQLException;

import model.User;
import tools.JDBCTool;

//做数据库查询
public class UserController {
	//返回User对象,即可得到所有信息
	public static User login(User user) {
		//获取sql语句
		String  sql="select * from users where Username=? and Passwords=?";
		ResultSet set = JDBCTool.select(sql,user.getUserName(),user.getPassword());
		try {
			if(set.next()) {
				return new User(set.getInt("Uid"), set.getString("Uname"),  set.getString("Username"),  set.getString("Passwords"));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			JDBCTool.close();
		}
		return null;
	}
}

建表

在model包下创建User类

利用系统自动构造函数

 Getters和Setters方法

警告 

点击Add unimplemented methods后会自定实现接口方法,此时方法上方出现@Override注解,这是一个标识注解,表示当前方法覆盖了父类的方法。

抛出异常

在类方法名括号后面会自动加上throws SQLException,但是最好不要轻易抛出异常。因为后续程序使用该类方法时也会要求抛出异常。

package model;

public class User {
	private int id;
    private String name;
    private String userName;
    private String password;
	public User(int id, String name, String userName, String password) {
		super();
		this.id = id;
		this.name = name;
		this.userName = userName;
		this.password = password;
	}
	public User(String userName, String password) {
		super();
		this.userName = userName;
		this.password = password;
	}
	public User() {
		super();
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}    
}

tool包直接使用之前的程序JDBCTool.java和JDBCTest.java。

view包下包括IndexView.java、LoginView.java、MainView.java、MyLabel.java。

package view;
/**
 * 主界面
 * @author 86171
 *
 */
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
import javax.swing.table.JTableHeader;

import controller.StudentController;

public class IndexView extends JFrame{
	private MyLabel label;
	private JButton changePassword;
	private JButton exitLogin;
	private JTabbedPane tabbed; //选项卡容器
	private JTable table; //表格
	private JTableHeader header; //表头
	private JFrame i; //框架(容器)当前的界面
	
	public IndexView(){
		i = this;
		this.setTitle("学生管理系统");
			
		this.setLayout(null);//空布局
		this.setSize(800, 750);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		label = new MyLabel("管理员:admin");
		label.setBounds(150, 50, 100, 30);
		this.add(label);
			
		changePassword=new JButton("修改密码");
		changePassword.setBounds(290, 50, 100, 30);
		this.add(changePassword);

		exitLogin = new JButton("退出登录");
		exitLogin.setBounds(420, 50, 100, 30);
		exitLogin.addActionListener(new ActionListener() {
			@Override
			/* @Override注解是一个标识注解
			 * 表示当前方法覆盖了父类的方法
			 */
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				//让当前窗体不可见,从而实现界面跳转
				i.setVisible(false); 
				//重新又new一个登录窗体
				@SuppressWarnings("unused")
				LoginView login = new LoginView();
			}
		});
			
		this.add(exitLogin);
		
		tabbed=new JTabbedPane(JTabbedPane.TOP);
		//设置选项卡的坐标,将其设置在头部
		tabbed.setBounds(0, 100, 800, 650);
		
		//加入面板容器JPanel
		JPanel panel1=new JPanel();
		//给面板设置布局
		panel1.setLayout(new FlowLayout());
		JLabel labe = new JLabel("abc");
		panel1.add(labe);
		JPanel panel2=new JPanel();
		panel2.setLayout(new FlowLayout());
		JLabel labe1=new JLabel("123");
		panel2.add(labe1);
		JPanel panel3=new JPanel();
		JPanel panel4=new JPanel();
		
		//加入选项卡,第一个是名字,第二个是对象
		tabbed.add("班级管理", panel1);
		tabbed.add("教师管理", panel2);
		tabbed.add("班主任管理",panel3);
		tabbed.add("学生管理", panel4);
		
		//空布局,加入的组件必须设置大小和位置
		panel4.setLayout(null);
		//设置表头,全为字符串类型
		String []titles={"学号","姓名","年龄","性别","专业"};
		//设置表数据,为二维数组。调用自定义的类方法,到数据库中查询所有学生
		String[][] data = StudentController.selectStudents();
		table = new JTable(data,titles); //数据在前,表头在后
		table.setBounds(0, 30, 800, 620);
		header = table.getTableHeader(); //利用表格的类方法获取表头
		header.setBounds(0, 0, 800, 30);
		//将表格和表头加入到面板4中
		panel4.add(header); //先加表头
		panel4.add(table); //再加表格
		
		this.add(tabbed); //自带边框
		this.setVisible(true); //让窗体可见
	}
}
package view;
/**
 * 登录界面
 * @author 86171
 *
 */
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

import controller.UserController;
import model.User;

public class LoginView extends JFrame{
	private static final long serialVersionUID = 1L;
	private JLabel label;
	private MyLabel userNameLabel; //账号
	private MyLabel passwordLabel; //密码
	private JTextField userName; //用户名输入框
	private JTextField password; //密码输入框
	private JButton login; //登录按钮
	private JButton exit; //退出按钮
	private JFrame i; //框架(容器)
	
	public LoginView(){
		i = this;
		this.setTitle("登录");
	
		this.setLayout(null);
		//空布局,放置组件时必须设置位置和大小
		this.setSize(450, 350);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//在关闭窗体的时候自动结束程序
		label = new JLabel("欢迎进入学生管理系统");
		label.setBounds(70,40,300,30);
		//依次设置x轴、y轴、宽度、高度
		label.setFont(new Font("黑体", 30, 30));
		//依次设置字体、粗细、大小
		this.add(label);
		
		userNameLabel = new MyLabel("账号:");
		userNameLabel.setBounds(75, 90, 50, 30);
		this.add(userNameLabel);
		
		passwordLabel = new MyLabel("密码:");
		passwordLabel.setBounds(75, 140, 50, 30);
		this.add(passwordLabel);

		userName = new JTextField();
		userName.setBounds(125, 90, 230, 30);
		this.add(userName);
		
		password = new JTextField();
		password.setBounds(125, 140, 230, 30);
		this.add(password);
		
		login = new JButton("登录");
		login.setBounds(135, 190, 70, 30);
		
		//获取登录界面的账号和密码
		login.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				//将用户名和密码封装成对象,到时候方便做数据传递
				String user = userName.getText();
				String pwd = password.getText();
				
				//用户登录
				User u = new User(user, pwd);
				//到数据库中查询是否有该账号密码
				u = UserController.login(u);
				if(u!=null){
					System.out.println(u.getName()+"登录成功");
					//登录完成,关闭登录界面,即使登录窗体不可见
					i.setVisible(false); 
					@SuppressWarnings("unused")
					IndexView view = new IndexView();
				}else{
					System.out.println("登录失败");
				}
			}
		});
		
		this.add(login);
		
		exit = new JButton("退出");
		exit.setBounds(265, 190, 70, 30);
		this.add(exit);

		//让上面程序设置的窗体可见
		this.setVisible(true);
	}
}
package view;
/**
 * 程序入口
 * @author 86171
 *
 */
public class MainView {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		@SuppressWarnings("unused")
		LoginView login=new LoginView();
	}
}
package view;

import java.awt.Font;

import javax.swing.JLabel;

public class MyLabel extends JLabel{
	private static final long serialVersionUID = 1L;
	public MyLabel(String text){
		super(text); //调用父类的带参构造
		this.setFont(new Font("黑体", Font.PLAIN,16));
	}
}

展示效果

登录界面

主界面(包括选项卡)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值