![图片描述 图片描述](https://i-blog.csdnimg.cn/blog_migrate/6890450e7fcb5a71929ebd39302babf9.jpeg)
1.视图层
package net.allidea.studentoa.ui;
import java.util.List;
import java.util.Scanner;
import net.allidea.studentoa.bean.Student;
import net.allidea.studentoa.biz.StudentService;
/*
* 表示层
* 数据传递给service层实现
*/
public class IndexPage {
private StudentService service = new StudentService();
//接收用户输入,并调用
public void run() {
//1. 打印菜单 2. 获取用户输入 3. 调用对应方法
boolean flag = true;
Scanner in = new Scanner(System.in);
while (flag) {
System.out.println("------------欢迎来到学生管理系统-----------");
System.out.println("1.添加用户 2.编辑用户 3.查询用户 4.删除用户 5.退出系统");
System.out.println("请输入要操作的功能序号[1-5]:");
//接收用户的菜单选择
int op = in.nextInt();
//对选择的菜单判断,调用不同的功能
switch (op) {
case 1:
//选择添加用户,调用添加用户的方法
addStudent();
break;
case 2:
//选择修改用户,调用修改用户的方法
editStudent();
break;
case 3:
//选择删除用户,调用删除用户的方法
selectStudent();
break;
case 4:
//选择查看用户,调用查看用户的方法
deleteStudent();
break;
case 5:
System.out.println("再见!");
flag = false;
break;
default:
System.out.println("输入有误,请重新输入!");
}
}
}
private void addStudent() {
/*
* 1. 获取用户输入,封装到bean中。
* 2. 调用service的addStudent()方法完成添加功能
*/
System.out.println("选择的添加用户功能,请输入以下内容");
Scanner sc = new Scanner(System.in);
System.out.print("请输入姓名:");
String sname = sc.next();
System.out.print("请输入密码:");
String pass = sc.next();
System.out.print("请输入成绩:");
double results = sc.nextDouble();
System.out.print("请输入日期:格式XXXX-XX-XX");
String createtime = sc.next();
//将接收到的数据,调用service层的方法,传递参数
//将用户输入的所有参数,封装成Student对象
Student s = new Student(0, sname, pass, results, createtime);
service.addStudent(s);
System.out.println("添加用户成功!");
}
private void editStudent() {
//调用查询所有财务数据的功能,显示出啦
//看到所有的数据,从中选择一向,进行修改
selectAll();
System.out.println("选择的是编辑功能,请输入");
Scanner sc = new Scanner(System.in);
System.out.print("请输入ID:");
int sid = sc.nextInt();
System.out.print("请输入姓名:");
String sname = sc.next();
System.out.print("请输入密码:");
String pass = sc.next();
System.out.print("请输入成绩:");
double results = sc.nextDouble();
System.out.print("请输入日期:格式XXXX-XX-XX");
String createtime = sc.next();
//将所有用户输入的数据,封装到Student对象
Student s = new Student(sid, sname, pass, results, createtime);
//调用controller层中的方法实现编辑用户
service.editStudent(s);
System.out.println("编辑用户成功!");
}
//定义删除方法
private void deleteStudent() {
selectAll();
System.out.println("选择的是删除功能,请输入ID号即可");
Scanner in = new Scanner(System.in);
System.out.print("请输入ID:");
service.deleteStudent(in.nextInt());
System.out.println("删除用户成功!");
}
/*
* 定义方法selectStudent();
* 显示查询方式, 1.所有 2.条件
* 接收用户的选择
*/
private void selectStudent() {
System.out.println("1. 查询所有 2. 按时间查询 3. 按成绩查询");
Scanner sc = new Scanner(System.in);
int selectChooser = sc.nextInt();
//判断根据用户的选择,调用不同的功能
switch(selectChooser){
case 1:
//选择的查询所有,调用查询所有的方法
selectAll();
break;
case 2:
//选的时间条件查询,调用带有查询条件的方法
selectDate();
break;
case 3:
//选的成绩条件查询,调用带有查询条件的方法
selectResults();
break;
default:
System.out.println("输入错误!");
}
}
/*
* 定义方法,实现查询所有的用户数据
*/
private void selectAll() {
//调用控制层中的方法,查询所有的用户数据
List<Student> list = service.selectAll();
if(list.size() != 0)
print(list);
else
System.out.println("没有查询到数据");
}
//输出用户数据方法,接收list集合,遍历集合,输出表格
private void print(List<Student> list) {
//输出表头
System.out.println("ID\t\t姓名\t\t密码\t\t成绩\t\t时间");
//遍历集合,输出到控制台
for (Student s : list) {
System.out.println(s.getSid() + "\t\t"
+ s.getSname() + "\t\t"
+ s.getPass() + "\t\t"
+ s.getResults() + "\t\t"
+ s.getCreatetime());
}
}
/*
* 定义方法,调用带有查询条件的方法
* 提供用户输入日期,开始和结束日期
* 调用service方法,传递2个日期的参数,获取到service查询的结果集,打印出来
*/
private void selectDate() {
System.out.println("选择条件查询,输入日期格式XXXX-XX-XX");
Scanner in = new Scanner(System.in);
System.out.print("请输入起始时间:");
String startDate = in.next();
System.out.print("请输入结束时间:");
String endDate = in.next();
//调用service层方法,传递日期,获取查询结果集
List<Student> list = service.selectDate(startDate, endDate);
if(list.size() != 0)
print(list);
else
System.out.println("没有查询到数据");
}
private void selectResults() {
System.out.println("选择条件查询,输入成绩格式XXXX-XX-XX");
Scanner in = new Scanner(System.in);
System.out.print("请输入最小成绩:");
double mixResults = in.nextDouble();
System.out.print("请输入最大成绩:");
double maxResults = in.nextDouble();
//调用service层方法,传递日期,获取查询结果集
List<Student> list = service.selectResults(mixResults, maxResults);
if(list.size() != 0)
print(list);
else
System.out.println("没有查询到数据");
}
}
2.业务层
package net.allidea.studentoa.biz;
import java.util.List;
import net.allidea.studentoa.bean.Student;
import net.allidea.studentoa.dao.StudentDao;
/*
* 业务层类
* 接收上一层的数据
* 经过计算,传递给dao层,操作数据库
* 调用dao层中的类,类成员位置,创建Dao类的对象
*/
public class StudentService {
private StudentDao dao = new StudentDao();
//定义方法,实现删除用户功能
public void deleteStudent(int sid) {
dao.deleteStudent(sid);
}
//定义方法,实现编辑用户
public void editStudent(Student s) {
dao.editStudent(s);
}
/*
* 定义方法,添加数据功能
* 有控制层调用,传递Student类型对象
* 方法调用dao层方法,传递Student对象
*/
public void addStudent(Student s) {
dao.addStudent(s);
}
/*
* 定义方法,实现条件查询用户
* 方法由控制层调用,传递2个日期字符串
* 调用dao层的方法,传递2个日期字符串
* 获取查询结果集
*
*/
public List<Student> selectDate(String startDate,String endDate) {
return dao.selectDate(startDate, endDate);
}
/*
* 定义方法,实现查询所有用户数据
* 此方法由控制层调用,去调用dao层方法
* 返回存储Student对象的List集合
*/
public List<Student> selectAll() {
return dao.selectAll();
}
/*
* 定义方法,实现条件查询用户
* 方法由控制层调用,传递2个日期字符串
* 调用dao层的方法,传递2个日期字符串
* 获取查询结果集
*
*/
public List<Student> selectResults(double mixResults,double maxResults) {
return dao.selectResults(mixResults, maxResults);
}
}
3.数据层
package net.allidea.studentoa.dao;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import net.allidea.studentoa.bean.Student;
import net.allidea.studentoa.common.JDBCUtils;
/*
* 实现对数据表s_user数据增删改差操作
*/
public class StudentDao {
private QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
//定义方法,实现删除用户功能
public void deleteStudent(int sid) {
String sql = "delete from s_user where sid = ?";
try {
qr.update(sql, sid);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
//定义方法,实现编辑用户功能,更新数据表
public void editStudent(Student s) {
try {
String sql = "update s_user set sname = ?,pass = ?,results = ?,createtime = ? where sid = ?" ;
//创建对象数组,存储所有实际参数
Object[] params = {s.getSname(),s.getPass(),s.getResults(),s.getCreatetime(),s.getSid()};
//调用qr对象中的方法,update执行更新
qr.update(sql, params);
}catch(SQLException ex) {
System.out.println(ex);
throw new RuntimeException("用户更新失败");
}
}
/*
* 定义方法,添加数据功能
* 有业务层调用,传递Student类型对象
* 将Student对象中的数据,添加到数据表
*/
public void addStudent(Student zw) {
try {
//拼写sql语句
String sql = "insert into s_user (sname,pass,results,createtime)values(?,?,?,?)";
//创建对象数组,存储5个占位符的实际参数
//实际参数来说原始,传递过来的对象是Student
Object[] params = {zw.getSname(),zw.getPass(),zw.getResults(),zw.getCreatetime()};
//调用qr对象中的方法,update执行添加
qr.update(sql, params);
}catch(SQLException ex) {
System.out.println(ex);
throw new RuntimeException("用户添加失败");
}
}
/*
* 定义方法,查询数据库,带有条件去查询财务表
* 由业务层调用,查询结果集存储到Bean对象,存储到List集合
* 调用者传递2个日期字符串
*
*/
public List<Student> selectDate(String startDate,String endDate) {
try {
//拼写条件查询sql语句
String sql = "select * from s_user where createtime between ? and ?";
//定义对象数组,存储?占位符
Object[] params = {startDate,endDate};
//调用qr对象的方法Query查询数据表,获取结果集
return qr.query(sql, new BeanListHandler<>(Student.class),params);
}catch(SQLException ex) {
System.out.println(ex);
throw new RuntimeException("条件查询失败");
}
}
public List<Student> selectResults(double mixResults,double maxResults) {
try {
//拼写条件查询sql语句
String sql = "select * from s_user where results between ? and ?";
//定义对象数组,存储?占位符s
Object[] params = {mixResults,maxResults};
//调用qr对象的方法Query查询数据表,获取结果集
return qr.query(sql, new BeanListHandler<>(Student.class),params);
}catch(SQLException ex) {
System.out.println(ex);
throw new RuntimeException("条件查询失败");
}
}
/*
* 定义方法,查询数据库,获取所有的用户数据
* 方法,由业务层调用
* 结果集,将所有的用户数据,存储到Bean对象中,存储到集合中
*/
public List<Student> selectAll() {
try {
//查询用户数据的SQL语句
String sql = "select * from s_user";
//调用qr对象的方法,query方法,结果集BeanListHandler
List<Student> list = qr.query(sql, new BeanListHandler<>(Student.class));
return list;
}catch(SQLException ex) {
System.out.println(ex);
throw new RuntimeException("查询所有用户失败");
}
}
}
4.工具类
package net.allidea.studentoa.common;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
/*
* 获取数据库连接的工具类
* 实现连接池
*/
public class JDBCUtils {
//创建BasicDatatSource对象
private static BasicDataSource datasource = new BasicDataSource();
//静态代码块,实现必要的参数设置
static {
datasource.setDriverClassName("com.mysql.jdbc.Driver");
datasource.setUrl("jdbc:mysql://localhost:3307/student");
datasource.setUsername("root");
datasource.setPassword("allidea");
datasource.setMaxActive(10);
datasource.setMaxIdle(5);
datasource.setMinIdle(2);
datasource.setInitialSize(10);
}
public static DataSource getDataSource() {
return datasource;
}
}
5.bean
package net.allidea.studentoa.bean;
public class Student {
private int sid;
private String sname;
private String pass;
private double results;
private String createtime;
public Student() {
super();
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public double getResults() {
return results;
}
public void setResults(double results) {
this.results = results;
}
public String getCreatetime() {
return createtime;
}
public void setCreatetime(String createtime) {
this.createtime = createtime;
}
public Student(int sid, String sname, String pass, double results, String createtime) {
super();
this.sid = sid;
this.sname = sname;
this.pass = pass;
this.results = results;
this.createtime = createtime;
}
@Override
public String toString() {
return "Student [sid=" + sid + ", sname=" + sname + ", pass=" + pass + ", results=" + results + ", createtime="
+ createtime + "]";
}
}
6.主程序类
package net.allidea.studentoa.test;
import net.allidea.studentoa.ui.IndexPage;
/*
* 主程序类,作用,开启软件程序即可
*/
public class MainTest {
public static void main(String[] args) {
new IndexPage().run();
}
}
7.数据库
-- 创建数据库:
create table s_user(
sid int primary key auto_increment,
sname varchar(20),
pass varchar(50),
results double,
createtime date);
-- 添加列:
INSERT INTO s_user(sid,sname,pass,results,createtime) VALUES (1,'张三',123456,'88','2018-5-02');
INSERT INTO s_user(sid,sname,pass,results,createtime) VALUES (2,'李逵',123456,'99','2018-5-23');
INSERT INTO s_user(sid,sname,pass,results,createtime) VALUES (3,'松江',123456,'56','2018-5-02');
INSERT INTO s_user(sid,sname,pass,results,createtime) VALUES (4,'林聪',123456,'95','2018-5-14');
INSERT INTO s_user(sid,sname,pass,results,createtime) VALUES (5,'茉莉',123456,'93','2018-6-02');
INSERT INTO s_user(sid,sname,pass,results,createtime) VALUES (6,'李阳阳',123456,'79','2018-5-02');
INSERT INTO s_user(sid,sname,pass,results,createtime) VALUES (7,'黄晓明',123456,'85','2018-7-8');
INSERT INTO s_user(sid,sname,pass,results,createtime) VALUES (8,'张小米',123456,'84','2018-8-02');
INSERT INTO s_user(sid,sname,pass,results,createtime) VALUES (9,'王大治',123456,'72','2018-8-7');
INSERT INTO s_user(sid,sname,pass,results,createtime) VALUES (10,'姚明',123456,'33','2018-8-5');
INSERT INTO s_user(sid,sname,pass,results,createtime) VALUES (11,'刘士奇',123456,'100','2018-8-02');
INSERT INTO s_user(sid,sname,pass,results,createtime) VALUES (12,'秦琼',123456,'89','2018-9-02');
INSERT INTO s_user(sid,sname,pass,results,createtime) VALUES (13,'关羽',123456,'76','2018-9-1');
INSERT INTO s_user(sid,sname,pass,results,createtime) VALUES (14,'曹操',123456,'78','2018-10-11');