Maven + Mysql + JDBC学生信息管理系统(简单版)

Maven + Mysql + JDBC学生信息管理系统(简单版)

两个模块:
       1.管理员模块(注册、登录)
       2.学生信息管理模块(增删改查)

       

1.构建数据库信息

先创建一个数据库,然后在数据库中构建表格
Maven + Mysql + JDBC学生信息管理系统(简单版)_第1张图片
项目架构:
Maven + Mysql + JDBC学生信息管理系统(简单版)_第2张图片

2.先创建maven项目,

maven的具体配置方法可以看帖子:
链接地址:maven下载配置
Maven + Mysql + JDBC学生信息管理系统(简单版)_第3张图片

3.具体代码:

3.1      pom.xml

<dependencies>
		<!--mysql驱动包 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.35</version>
		</dependency>
		<!-- c3p0连接池 -->
		<dependency>
			<groupId>com.mchange</groupId>
			<artifactId>c3p0</artifactId>
			<version>0.9.5.2</version>
		</dependency>
		<!-- junit单元测试 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<!-- 修改默认maven的JDK版本为1.8 -->
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
		</plugins>
	</build>

3.2     c3p0.properties

#c3p0DBPool
driverClass=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/scy_stuSMS?useUnicode=true&characterEncoding=utf8&useSSL=false
user=root
password=password

3.3     JDBCUtils类

package cn.scy.utils;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import org.junit.Test;

import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 * 此类是加载C3P0的properties文件配置
 */
public class JDBCUtils {

	public static Connection conn=null;
	public static PreparedStatement ps=null;
	public static ResultSet rs=null;

	public static ComboPooledDataSource dataSource =null;

	/**
	 *利用静态代码块加载c3p0数据库连接池的配置
	 * @return
	 */
	static {
		try {
			//加载配置文件 import java.util.Properties;
			Properties props = new Properties();
			//通过输入流获取文件中的内容   反射机制
			InputStream input = 
					JDBCUtils.class
					.getClassLoader()
					.getResourceAsStream(
							"c3p0.properties");
			//通过配置文件的类获取输入流中的文件内容
			props.load(input);
			//获取文件中的每一项配置
			String dirverClass = 
					props.getProperty("dirverClass");
			String jdbcUrl = 
					props.getProperty("jdbcUrl");
			String user = 
					props.getProperty("user");
			String password = 
					props.getProperty("password");

			//创建连接池对象
			dataSource = new ComboPooledDataSource();
			//为数据库连接池设置管理值
			dataSource.setDriverClass(dirverClass);
			dataSource.setJdbcUrl(jdbcUrl);
			dataSource.setUser(user);
			dataSource.setPassword(password);

			dataSource.setInitialPoolSize(10);
			dataSource.setMaxPoolSize(100);
			dataSource.setMinPoolSize(10);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}


	//获取连接
	public static Connection getConn() {
		try {
			//获取连接池中的一个连接
			conn = dataSource.getConnection();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		//返回连接
		return conn;
	}

	//关闭连接
	//查询关闭连接
	public static void close(Connection conn,PreparedStatement ps,ResultSet rs) {
		try {
			rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			ps.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	//增删改关闭连接
	public static void close(Connection conn,PreparedStatement ps) {
		try {
			ps.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		try {
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	//	测试连接
	//@Test
	//	public void test() {
	//		Connection  con = getConn();	
	//		System.out.println(con);
	//		
	//		
	//	}

}

3.4     UserDao类

package cn.scy.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;

import cn.scy.utils.JDBCUtils;



/**
 * 管理员的CRUD
 */
public class UserDao {

	//键盘输入对象
	public static Scanner input = null;
	//数据库连接对象
	public static Connection conn =null;
	//sql执行对象
	public static PreparedStatement ps = null;
	//处理结果集对象
	public static ResultSet rs =null;

	//管理方法
	public static void manager() {
		//创建接收对象
		input = new Scanner(System.in);

		System.out.println("********登录界面********");
		System.out.println("*                     *");
		System.out.println("*     1.管理员登录     *");
		System.out.println("*     2.注册管理员     *");
		System.out.println("*     3.退出系统       *");
		System.out.println("*                     *");
		System.out.println("**********************");

		System.out.println("请选择:>>");
		//接收用户的选项
		int m = input.nextInt();
		//根据用户选项完成相应业务
		switch (m) {
		case 1:
			login();
			break;
		case 2:
			insert();
			break;
		case 3:
			System.out.println("欢迎下次使用本系统!");
			break;
		default:
			System.out.println("非法输入");
			//再次调用选项框
			manager();
			break;
		}
	}
	//管理员注册
	public static void  insert() {
		try {

			//创建接收对象
			input = new Scanner(System.in);

			System.out.println("********注册管理员********");
			System.out.println("请输入用户名:");
			String name = input.next();
			System.out.println("请输入密码:");
			String password = input.next();
			System.out.println("请输入再次密码:");
			String passwd = input.next();
			while(true) {
				/*
				 * TODO 思路: 在插入当前用户之前,去数据库查询是否有当前用户的用户
				 *存在,如果有则提示用户名被占用,然后重新接收。
				 *如果没有直接注册。
				 */
				boolean sname = selectUserByUsername(name);
				if(sname){
					System.out.println("用户名已经被占用!请重新输入!");
					System.out.println("请输入用户名:");
					name = input.next();
					//再次输入密码
					System.out.println("请输入密码:");
					password = input.next();
					System.out.println("请输入再次密码:");
					passwd = input.next();
				}else {
					break;//结束用户名验证
				}
			}

			while(true) {
				//判断两次密码是否一致
				if(password.equals(passwd)) {
					//获取连接
					conn = JDBCUtils.getConn();
					//编写sql语句
					String sql = "insert into user values(null,?,?)";
					//处理占位符
					ps = conn.prepareStatement(sql);
					//循环查询和判断用户名是否被占用以及两次密码是否一致
					ps.setString(1,name);
					ps.setString(2,password);
					//执行sql语句
					int rows = ps.executeUpdate();
					//返回值为1 插入成功
					if(rows==1) {
						System.out.println("用户:"+name+"注册成功!");
						//跳转登录业务
						login();
						break;//结束循环
					}else {
						System.out.println("注册失败!用户名或密码错误!");
					}
				}else {
					System.out.println("两次密码不一致!");
					//再次输入密码
					System.out.println("请输入密码:");
					password = input.next();
					System.out.println("请输入再次密码:");
					passwd = input.next();
				}
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			//关闭连接
			JDBCUtils.close(conn, ps);
		}
	}

	//管理员登录
	public static void login() {
		try {
			//创建接收对象
			input = new Scanner(System.in);

			System.out.println("********管理员登录********");
			System.out.println("请输入用户名:");
			String name = input.next();
			System.out.println("请输入密码:");
			String password = input.next();

			//获取连接
			conn = JDBCUtils.getConn();

			//sql语句
			String sql  =
					"select * from user where username=? and password=?";
			//处理占位符
			ps = conn.prepareStatement(sql);
			ps.setString(1,name);
			ps.setString(2,password);
			//执行sql语句
			rs = ps.executeQuery();

			if(rs.next()){
				System.out.println("用户:"+name+"登录成功");
				//TODO 跳转学生管理系统页面
				StuDao.manager();
			}else {
				System.out.println("登录失败!用户名或密码错误!");
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			//关闭连接
			JDBCUtils.close(conn, ps, rs);
		}
	}

	//根据用户名查询用户--避免出现管理员重名
	public static boolean selectUserByUsername(String name) {
		//默认没查到用户
		boolean flag = false;
		try {
			//获取连接
			conn = JDBCUtils.getConn();
			//sql语句
			String sql  =
					"select * from user where username=?";
			//处理占位符
			ps = conn.prepareStatement(sql);
			ps.setString(1,name);
			//执行sql语句
			rs = ps.executeQuery();

			if(rs.next()){
				//返回查询到的用户
				flag = true;
			}
		}catch(Exception e) {
			e.printStackTrace();
		}
		return flag;
	}
}

3.5     StuDao类

package cn.scy.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

import cn.scy.utils.JDBCUtils;

/**
 *  处理学生信息CRUD
 */
public class StuDao {

	//键盘输入对象
	public static Scanner input = null;
	//数据库连接对象
	public static Connection conn =null;
	//sql执行对象
	public static PreparedStatement ps = null;
	//处理结果集对象
	public static ResultSet rs =null;

	//管理方法
	public static void manager() {
		//创建接收对象
		input = new Scanner(System.in);

		System.out.println("********学生信息管理界面********");
		System.out.println("*       1.学生信息查询                   *");
		System.out.println("*       2.学生信息修改                   *");
		System.out.println("*       3.学生信息添加                   *");
		System.out.println("*       4.学生信息删除                   *");
		System.out.println("*       5.退出系统                           *");
		System.out.println("***************************");

		System.out.println("请选择:>>");
		//接收用户的选项
		int m = input.nextInt();
		//根据用户选项完成相应业务
		switch (m) {
		case 1://学生信息查询
			selectInfo();
			//再次跳转选项
			manager();
			break;
		case 2://学生信息修改
			updateInfo();
			//再次跳转选项
			manager();
			break;
		case 3://学生信息添加
			insertInfo();
			//再次跳转选项
			manager();
			break;
		case 4://学生信息删除
			deleteInfo();
			//再次跳转选项
			manager();
			break;
		case 5:
			System.out.println("欢迎下次使用本系统!");
			break;
		default:
			System.out.println("非法输入");
			//再次跳转选项
			manager();
			break;
		}
	}
	//删除
	private static void deleteInfo() {
		//先执行查询
		selectInfo();
		try {
			System.out.println("请输入您要删除的学生编号:");
			int stuid = input.nextInt();
			//获取连接
			conn = JDBCUtils.getConn();
			//编写sql语句
			String sql = "select * from student where id=?";
			//处理占位符
			ps = conn.prepareStatement(sql);
			ps.setInt(1,stuid);
			//执行sql语句
			rs = ps.executeQuery();
			//如果结果集的第一行数据为0
			if(!(rs.next())) {
				System.out.println("暂无学生信息!");
			}else {
				//指针上移
				rs.beforeFirst();
				System.out.println("===========学生信息===========");
				System.out.println("学号\t姓名\t性别\t年龄\t班级");
				//遍历结果集的信息
				while(rs.next()) {
					int id = rs.getInt("id");
					String name = rs.getString("name");
					String sex = rs.getString("sex");
					int age = rs.getInt("age");
					String classes = rs.getString("classes");
					System.out.println(
							id+"\t"+name+"\t"+sex+"\t"+age+"\t"+classes);
				}

				System.out.println("您确定要删除该条学生信息吗?(yes或no)");
				String str =input.next();
				if(str.equals("yes")) {
					//编写sql语句
					String sql2 ="delete from student where id=?";
					//处理占位符
					ps = conn.prepareStatement(sql2);
					ps.setInt(1,stuid);
					//执行sql语句
					int rows = ps.executeUpdate();
					if(rows!=0) {
						System.out.println("学号为:"+stuid+"的学生信息删除成功!");
						//自动跳转查询
						selectInfo();
					}else {
						System.out.println("学号为:"+stuid+"的学生信息删除失败!");
					}
				}else {
					System.out.println("学号为:"+stuid+"的学生信息删除失败!");
				}
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			JDBCUtils.close(conn, ps,rs);
		}
	}

	//添加
	private static void insertInfo() {
		//判断是否继续插入学生信息
		String str= "yes";//添加操作指令  yes   no
		try {
			//循环执行插入操作
			while(true) {
				//继续执行插入
				if(str.equals("yes")) {
					System.out.println("===========学生信息录入===========");

					System.out.println("请输入学生姓名:");
					String stuName = input.next();
					System.out.println("请输入学生年龄:");
					int stuAge = input.nextInt();
					System.out.println("请输入学生性别:");
					String stuSex = input.next();
					System.out.println("请输入学生所在班级:");
					String stuClasses = input.next();

					//获取连接
					conn = JDBCUtils.getConn();
					//编写sql语句
					String sql = "insert into student values(null,?,?,?,?)";
					//处理占位符
					ps = conn.prepareStatement(sql);
					/*
					 * TODO 思路: 在插入当前学生之前,去数据库查询是否有存在当前学生,
					 * 根据班级划分。
					 *,如果有则提示学生已经存在,然后重新接收。
					 *如果没有直接注册。
					 */
					ps.setString(1,stuName);
					ps.setString(2,stuSex);
					ps.setInt(3, stuAge);
					ps.setString(4,stuClasses);
					//调用方法执行sql语句。处理返回结果
					int rows = ps.executeUpdate();

					if(rows!=0) {
						System.out.println("学生信息添加成功!");
					}else {
						System.out.println("学生信息添加失败!");
					}

					System.out.println("是否继续插入学生信息?(yes或no)");
					str = input.next();
				}else {//no 提出插入模式
					System.out.println("学生信息添加完毕!");
					//自动跳转学生信息查询
					selectInfo();
					break;//结束循环
				}
			}
		}catch(Exception  e) {
			e.printStackTrace();
		}finally {
			JDBCUtils.close(conn, ps);
		}
	}

	//修改学生信息
	private static void updateInfo() {
		//查询学生信息
		selectInfo();
		try {
			System.out.println("请输入要修改的学生编号:");
			int id = input.nextInt();
			//获取连接
			conn = JDBCUtils.getConn();
			//创建sql语句
			String sql = "select * from student where id =?";
			//处理占位符
			ps = conn.prepareStatement(sql);
			ps.setInt(1, id);
			//执行sql语句
			rs = ps.executeQuery();
			//如果结果集的第一行数据为0
			if(!(rs.next())) {
				System.out.println("没有编号为:"+id+"的学生信息!");
			}else {
				//指针上移
				rs.beforeFirst();

				System.out.println("========学生信息========");
				System.out.println("学号\t姓名\t年龄\t性别\t班级");
				while(rs.next()) {
					int id2 = rs.getInt("id");
					String username = rs.getString("name");
					int age = rs.getInt("age");
					String sex = rs.getString("sex");
					String classes = rs.getString("classes");
					System.out.println(id2+"\t"+username+"\t"+age+"\t"+sex+"\t"+classes);
				}

				System.out.println("========修改学生信息========");
				System.out.println("请输入修改后学生姓名:");
				String stuName2 = input.next();
				System.out.println("请输入修改后学生年龄:");
				int age2 = input.nextInt();
				System.out.println("请输入修改学生性别:");
				String sex2 = input.next();
				System.out.println("请输入修改后学生所在班级:");
				String classes2 = input.next();

				System.out.println("您确认修改该条学生信息吗?(yes或no)");
				String str = input.next();
				if(str.equals("yes")) {//创建sql语句
					String sql2 = "update student set name=?,age=?,sex=?,classes=? where id=?";
					//处理占位符
					ps = conn.prepareStatement(sql2);
					ps.setString(1, stuName2);
					ps.setInt(2, age2);
					ps.setString(3, sex2);
					ps.setString(4, classes2);
					ps.setInt(5, id);

					//调用方法执行sql语句,处理返回结果
					ps.executeUpdate();
					System.out.println("学号为:"+id+"的学生信息修改成功!");
					//调用查询方法
					selectInfo();
				}else {
					System.out.println("学号为:"+id+"的学生信息修改失败!");
				}
			}
		}catch(SQLException e) {
			System.out.println("学生信息修改失败!");
			e.printStackTrace();
		}finally {
			JDBCUtils.close(conn, ps, rs);
		}
	}
	//查询
	private static void selectInfo() {

		try {
			//获取连接
			conn = JDBCUtils.getConn();
			//编写sql语句
			String sql = "select * from student";
			//预编译sql语句
			ps = conn.prepareStatement(sql);
			//执行sql语句
			rs = ps.executeQuery();
			//如果结果集的第一行数据为0
			if(!(rs.next())) {
				System.out.println("暂无学生信息!");
			}else {
				//指针上移
				rs.beforeFirst();
				System.out.println("===========学生信息===========");
				System.out.println("学号\t姓名\t性别\t年龄\t班级");
				//遍历结果集的信息
				while(rs.next()) {
					int id = rs.getInt("id");
					String name = rs.getString("name");
					String sex = rs.getString("sex");
					int age = rs.getInt("age");
					String classes = rs.getString("classes");
					System.out.println(
							id+"\t"+name+"\t"+sex+"\t"+age+"\t"+classes);
				}
			}
		}catch(Exception e) {
			e.printStackTrace();
			System.out.println("学生信息查询失败!");
		}finally {
			JDBCUtils.close(conn, ps, rs);
		}
	}

}

3.6     StuManagerSystem主界面类

package cn.scy.main;
import cn.scy.dao.UserDao;

/**
 * 系统主界面
 * @author Administrator
 *
 */
public class StuManagerSystem {

	public static void main(String[] args) {
		System.out.println("=========欢迎使用JDBC版学生信息管理系统=========");
		//管理员界面
		UserDao.manager();
	}
}

你可能感兴趣的:(maven,mysql,java,jdbc)