java课程设计 学生管理系统

学生成绩管理系统

可实现功能

学生管理系统

  • 查询学生信息:姓名、学号、性别、出生年月日。(学号自动生成且唯一)
  • 查询学生成绩:每个人都有数学、Java与体育与选修课
  • 查询学生课程
  • 进行公选课选课

教师管理系统

  • 添删改学生功能
  • 查找学生(姓名查找(支持模糊查找),学号查找,班级查找,科目查找)
  • 进行学生成绩分析(柱状图(显示学生在各个分数范围的人数)与饼状图(显示学生及格与不及格的比例))
  • 进行学生成绩导出(poi)

    一、 团队成员与任务分配

    姓名 任务分配
    马艺芳 DAO模式实现,数据库建立与连接,逻辑代码编写,代码整合,学生教师部分功能实现。
    梁乐国 POI技术应用(导出学生成绩并生成excel表格),学生部分功能实现。
    谢国庆 图形界面设计,部分教师功能。
    梁志湖 学生成绩图形分析实现(柱形图,饼状图),团队博客编写,项目所需要的图片绘制与寻找

    团队成员课程设计博客链接:

    二、 项目git地址:

    欢迎大家访问学生管理系统的码云

    三、 项目git提交记录截图


四、 项目功能架构图与主要功能流程图

项目功能架构图

主要功能流程图

五、 项目运行截图

1.用户登录界面:

2.教师系统界面

3.按照班级查找

4.柱状图和饼状图

5.导出成绩

6.学生信息界面

扫描二维码关注公众号,回复: 4960738 查看本文章

7.学生选课

六、 项目关键代码

生成柱状图

public BarChartPanel(int x1, int x2, int x3, int x4, int x5, String name) {
        // TODO 自动生成的构造函数存根         
        //CategoryDataset dataset = getDataSet();
       DefaultCategoryDataset dataset = new DefaultCategoryDataset();      
          
          dataset.addValue(x1,name,"0~60");
        
          dataset.addValue(x2, name, "61~70");
        
          dataset.addValue(x3, name, "71~80");
       
          dataset.addValue(x4, name, "81~90");
        
          dataset.addValue(x5, name, "91~100");
       JFreeChart chart = ChartFactory.createBarChart3D(
                             "成绩柱形图", // 图表标题
                           "科目", // 目录轴的显示标签
                           "人数", // 数值轴的显示标签
                           dataset, // 数据集
                           PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                           true,           // 是否显示图例(对于简单的柱状图必须是false)
                           false,          // 是否生成工具
                           false           // 是否生成URL链接
                           );
       
       //从这里开始
       CategoryPlot plot=chart.getCategoryPlot();//获取图表区域对象
      // plot.getRenderer().setSeriesPaint(50, new Color(10,10,10)) ;
       BarRenderer3D customBarRenderer = (BarRenderer3D) plot.getRenderer(); 
       customBarRenderer.setSeriesPaint(0, Color.decode("#7979FF")); // 给series1 Bar 
       
       CategoryAxis domainAxis=plot.getDomainAxis();         //水平底部列表
        domainAxis.setLabelFont(new Font("黑体",Font.BOLD,14));         //水平底部标题
        domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,12));  //垂直标题
        ValueAxis rangeAxis=plot.getRangeAxis();//获取柱状
        rangeAxis.setLabelFont(new Font("黑体",Font.BOLD,15));
         chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15));
         chart.getTitle().setFont(new Font("宋体",Font.BOLD,20));//设置标题字体
         
         //到这里结束,虽然代码有点多,但只为一个目的,解决汉字乱码问题
         
        frame1 = new ChartPanel(chart,true);    }    //这里也可以用chartFrame,可以直接生成一个独立的Frame

poi导出表格

public void ExportBycoursePOI(List<Student> student) throws IOException {

        HSSFWorkbook wb = new HSSFWorkbook();

        HSSFCellStyle cellStyle = wb.createCellStyle(); 

        HSSFSheet sheet = wb.createSheet("学生成绩");

        HSSFRow row = sheet.createRow(0);

        HSSFCell cell = row.createCell(0);

        HSSFDataFormat format = wb.createDataFormat();

        cellStyle.setDataFormat(format.getFormat("@")); 
        cell.setCellValue("学号");
        cell.setCellStyle(cellStyle);
        row.createCell(1).setCellValue("姓名");
        row.createCell(2).setCellValue("班级");
        row.createCell(3).setCellValue("科目");
        row.createCell(4).setCellValue("成绩");
        for (int i = 0; i < student.size(); i++) {
            //创建list.size()行数据
            row = sheet.createRow(i + 1);
            //把值一一写进单元格里
            //设置第一列为自动递增的序号
            row.createCell(0).setCellValue(student.get(i).getStudentID());
            row.createCell(1).setCellValue(student.get(i).getName());
            row.createCell(2).setCellValue(student.get(i).getClasses());
            row.createCell(3).setCellValue(student.get(i).getSublist().get(0).getName());
            row.createCell(4).setCellValue(student.get(i).getSublist().get(0).getScore());
        }
        try {
            FileOutputStream output = new FileOutputStream("E:\\JAKARTA.xls");
            wb.write(output);
            output.flush(); 
            JOptionPane.showMessageDialog(null, "导出成功!");
            System.out.println("成功创建excel文件");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

通过关键字实现模糊查找

public List<Student> searchByname(String stuname) {
        List<Student> stulist = new ArrayList<>();
        PreparedStatement pstat = null;
        ResultSet rs = null;
        //数据库模糊匹配的sql语法
        String sql = "select * from student where name like'%"+stuname+"%'" ;
        try (Connection conn = JDBCUtil.getConnection()) {
            pstat = conn.prepareStatement(sql);
            rs = pstat.executeQuery(sql);
            //创建ResultSetMetaData
            //获得ResultSet对象rs
            ResultSetMetaData data = rs.getMetaData();
            //调用方法得到表的列数
            int colum = rs.getMetaData().getColumnCount();
            String[] columnamestr = new String[colum];
            
            //获得表头,以实现图形界面动态建表
            for(int i = 7;i <= colum;i++) {
                columnamestr[i-1] = data.getColumnName(i);
                System.out.println(data.getColumnName(i));
            }
            //获取数据库数据
            while(rs.next()){
                int id = rs.getInt("id");
                String name = rs.getString("name");
                String classes = rs.getString("class");
                String gender = rs.getString("gender");
                String birthdate = rs.getString("birthdate");
                System.out.println(id+" "+name+" "+classes+" "+gender+" "+birthdate);
                double[] source = new double[colum];
                for(int j = 6;j < colum;j++) {
                    source[j] = rs.getDouble(columnamestr[j]);
                    System.out.println(source[j]);
                }
                //将课程信息包装成Subject类型
                List<Subject> subject = new ArrayList<>();
                for(int k = 6;k<colum;k++) {
                    Subject s = new Subject(columnamestr[k],new Teacher(""));
                    s.setScore(source[k]);
                    subject.add(s);
                }
                //将所得数据包装成Student类型,
                Student student = new Student(id,name,classes,gender,birthdate);
                //加入课程信息
                student.setSublist(subject);
                //加入List
                stulist.add(student);
            }   
            
        } catch (SQLException sqle) {
            sqle.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return stulist;
    }

七、项目代码扫描结果及改正

一,没有添加创建者信息

改正

二,不能在代码尾部添加注释

改正(应在代码上方)

八、UML类图


九、尚待改进或者新的想法

  • 尝试过网络功能,但目前还是未能实现,后面会争取再去尝试一下。
  • 由于时间问题,多线程(多个账户同时登陆)与学生抢课功能还未能实现
  • 代码结构进一步改善

猜你喜欢

转载自www.cnblogs.com/peng075078/p/10275371.html