资讯专栏INFORMATION COLUMN

Java编程基础35——学生管理系统

mingde / 2372人阅读

摘要:视图层表示层数据传递给层实现接收用户输入并调用打印菜单获取用户输入调用对应方法欢迎来到学生管理系统添加用户编辑用户查询用户删除用户退出系统请输入要操作的功能序号接收用户的菜单选择对选择的菜单判

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 list = service.selectAll();
        if(list.size() != 0)
            print(list);
        else
            System.out.println("没有查询到数据");
    }
    //输出用户数据方法,接收list集合,遍历集合,输出表格
    private void print(List list) {
        //输出表头
        System.out.println("ID		姓名		密码		成绩		时间");
        //遍历集合,输出到控制台
        
        for (Student s : list) {
            System.out.println(s.getSid() + "		" 
                    + s.getSname() + "		"
                    + s.getPass() + "		" 
                    + s.getResults() + "		"
                    + 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 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 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 selectDate(String startDate,String endDate) {
        return dao.selectDate(startDate, endDate);
    }
    
    /*
     * 定义方法,实现查询所有用户数据
     * 此方法由控制层调用,去调用dao层方法
     * 返回存储Student对象的List集合
     */
    public List selectAll() {
        return dao.selectAll();
    }

    /*
     * 定义方法,实现条件查询用户
     * 方法由控制层调用,传递2个日期字符串
     * 调用dao层的方法,传递2个日期字符串
     * 获取查询结果集
     * 
     */
    public List 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 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 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 selectAll() {
        try {
            //查询用户数据的SQL语句
            String sql = "select * from s_user";
            //调用qr对象的方法,query方法,结果集BeanListHandler
            List 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");

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71829.html

相关文章

  • Java编程基础35——学生管理系统

    摘要:视图层表示层数据传递给层实现接收用户输入并调用打印菜单获取用户输入调用对应方法欢迎来到学生管理系统添加用户编辑用户查询用户删除用户退出系统请输入要操作的功能序号接收用户的菜单选择对选择的菜单判 showImg(https://segmentfault.com/img/bVbiXjw?w=939&h=509); 1.视图层 package net.allidea.studentoa.ui...

    chaosx110 评论0 收藏0
  • python初学——面向对象编程作业:学校选课系统

    摘要:如上海北京等管理员自己创建其他地方的学校管理员创建的课程。包含名字性别年龄等学员查询可上课程学员选课,选择学校课程,并付款。课程价格,周期课程价格,周期课程价格,周期创建讲师属于北京校区,属于上海校区。 作业需求 创建北京、上海 2 所学校 创建linux , python , go 3个课程,linuxpy在北京开, go 在上海开 课程包含,周期,价格,通过学校创建课程 通过学校...

    kbyyd24 评论0 收藏0
  • 在头条干了两年后含泪整理的职场经验,太真实....

    摘要:两年半的时间完成了一次晋升,顺利地从一个职场小菜鸟转变为了一名资深打工人额。。后来随着工作经验的积累,我发现这个想法其实是非常错误的。不可否认,互联网行业在这一点上确实不如公务员等体制内职业。后面的工作基本是在吃老本,没有主动学习,。 先简单说一下背景,某不知名 985 的学生,18年毕业进...

    不知名网友 评论0 收藏0

发表评论

0条评论

mingde

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<