zoukankan      html  css  js  c++  java
  • 多源教学数据管理系统之团队课设博客

     一、团队简介

    1.团队名称:青龙学习小组

    2.团队成员:

    名字 学号 班级
    黄倩 201721123100 网络1714
    黄卿卿 201721123096 网络1714
    唐欢 201721123095 网络1714

    3.任务分配:

    model:黄卿卿(主攻)、唐欢(辅助)

    gui:黄倩、唐欢

    团队博客:黄倩、唐欢

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

      名字 个人博客链接
    组长 黄倩 https://www.cnblogs.com/hq9-/p/10287153.html
    组员 黄卿卿  https://www.cnblogs.com/huangqingqing/p/10285411.html
    组员 唐欢  https://www.cnblogs.com/tanghuan/p/10284765.html

     二、项目简介

    1.项目简介:

    老师使用多种教学平台(雨课堂、PTA、超星)开展教学活动,每个平台中的教学活动数据均可以导出为Excel数据文件,但内部的结构均不一样。还有其他数据文件:学生学号、姓名、班级信息文件(标准参考数据,比较准确,.txt格式)、学生最终成绩表。尝试编写一个程序实现。

    2.采用技术:数据库、POI、文件、Java、GUI、数据库连接池、Git

    3.功能需求分析:

    1)导入标准名单文件需要连接数据库及文件相关操作

    2)选择合并成绩Excel文件需要用到POI与文件相关操作

    4.项目亮点:贴合实际,未来可能发展为一个可被使用的程序

    5.团队成员负责模块:

    黄卿卿:将txt文件导入数据库(可以有不同的txt),将excel文件写到数据库(支持两种格式),完善将数据库从excel导出,浏览txt文件的界面代码,添加回撤功能及相关监听器代码。

    唐欢:实现浏览文件、选择文件功能,实现显示txt文件在gui界面,导出excel界面,最初导出excel文件的业务代码及图形界面等

    黄倩:初始化界面、登录界面、权重功能实现及图形界面等,代码管理

    三、项目git地址及提交记录

    1.项目git地址

    https://gitee.com/hq19991209/multisource_teaching_data.git

    2.项目git提交记录截图

    黄卿卿:

    唐欢:

     

    黄倩:

     

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

    1.项目功能架构图

    2.主要功能流程图

    五、项目运行截图

     

     

    六、项目关键代码(按模块讲解,不要太多)

     导入txt标准名单文件到数据库中

    public static String WriteToDB(String filename) throws IOException {
            Connection conn = null;
            PreparedStatement ps = null;
            PreparedStatement ps2 = null;
            ResultSet rs = null;
            StringBuilder sb1 = new StringBuilder();
            StringBuilder sb2 = new StringBuilder();
            StringBuilder sb3 = new StringBuilder();
            sb3.append(") value(");
            File f = new File(filename);
            String t = f.getName();
            String table = t.substring(0, t.lastIndexOf("."));
            System.out.println(table);
            sb2.append("insert into " + table + "(stuNo,name");
            sb1.append("create table " + table + "(id int not null primary key auto_increment,stuNo varchar(20) not null");
            // 表名固定了
            try {
                conn = JDBCUtil.getConnection();
                File file = new File(filename);
                FileInputStream is = new FileInputStream(file);
                InputStreamReader isr = new InputStreamReader(is, "UTF8");
                BufferedReader bf = new BufferedReader(isr);
                String str;
                int flag = 0, cou = 0;// cou标记提供列数
                String[] titles = null;
                while ((str = bf.readLine()) != null) {
                    // 初次建表
                    if (flag == 0) {
                        titles = str.split("\\s+");
                        for (String string : titles) {
                            // System.out.println(string+ " 第"+cou);
                            if (cou > 0) {
                                sb1.append("," + string + "  varchar(20) not null");
                            }
                            if (cou == 0) {
                                sb3.append("?");
                            } else {
                                sb3.append(",?");
                            }
                            if (cou >= 2) {
                                // sb2.append(string);
                                sb2.append("," + string);
    
                            }
    
                            cou++;
                        }
                        flag = 1;
                        sb1.append(");");
                        sb3.append(");");
                        String createsql = sb1 + "";
                        String sss;
                        sss = sb3 + "";
                        String insertsql = sb2 + sss;
                        ps2 = conn.prepareStatement(createsql);
                        ps2.executeUpdate();
    
                    }
    
                    else {
                        String sss;
                        sss = sb3 + "";
                        String insertsql = sb2 + sss;
                        ps = conn.prepareStatement(insertsql);
                        String[] s = str.split("\\s");
                        for (int i = 0; i < s.length; i++) {
                            ps.setString(i + 1, s[i]);
                            // System.out.println();
    
                        }
    
                        ps.executeUpdate();
                    }
    
                }
    
                System.out.println("成功向数据库插入文本 ");
                // return table;
            } catch (SQLException e) {
                System.out.println("SQLException!");
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                System.out.println("FileNotFound");
                e.printStackTrace();
            } finally {
                JDBCUtil.realeaseAll(rs, ps, conn);
            }
            return table;
    
        }
        public static void deletetable(String tablename) throws IOException {
            Connection conn = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
            String deletesql = "drop table " + tablename;
            try {
                conn = JDBCUtil.getConnection();
                ps = conn.prepareStatement(deletesql);
                ps.executeUpdate();
            } catch (SQLException e) {
                System.out.println("SQLException!");
                e.printStackTrace();
            } finally {
                JDBCUtil.realeaseAll(rs, ps, conn);
            }

        }

    }

    将.xls与.xlsx的Excel文件导入数据库

        public static String WriteExcl(String tablename, String setPos, String filename, String newrowName)
                throws IOException {
            Connection conn = null;
            PreparedStatement ps = null;
            PreparedStatement ps2 = null;
            ResultSet rs = null;
            String insertsql = "update " + tablename + " set " + setPos + "= ? where  stuNo = ?";
            String altersql = "alter table " + tablename + " add " + newrowName + " varchar(20)";
            try {
                StringBuilder sb = new StringBuilder();
                conn = JDBCUtil.getConnection();
                ps = conn.prepareStatement(insertsql);
                ps2 = conn.prepareStatement(altersql);
                ps2.executeUpdate();
                File file = new File(filename);
                WriteExcelToDB excelReader = new WriteExcelToDB();
                InputStream is2 = new FileInputStream(filename);
                Map<Integer, String> map = excelReader.readExcelContent(is2, file);
    
                for (int i = 3; i <= map.size(); i++) {
                    String[] s = map.get(i).split("\\s+");
                    ps.setString(1, s[2]);
                    ps.setString(2, s[0]);
                    System.out.println(insertsql);
                    int result = ps.executeUpdate();
                    if (result == 0) {
                        sb.append("学号      " + s[0] + "姓名    " + s[1] + " 成绩    " + s[2] + "   插入有异常" + "\n");
                    }
                }
                String re = sb + "";
                return re;
    
            } catch (SQLException e) {
                System.out.println("SQLException!");
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                System.out.println("FileNotFound");
                e.printStackTrace();
            } finally {
                JDBCUtil.realeaseAll(rs, ps, conn);
            }
            return "插入完毕";
    
        }
    
        public static String findErr(String tablename, String finPos) {
            Connection conn = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
            String findsql = "select stuNo,name, " + finPos + " from " + tablename + " where " + finPos + " is NULL or "
                    + finPos + " ='缺考'";
            ;
    
            try {
                StringBuilder sb = new StringBuilder();
                conn = JDBCUtil.getConnection();
                ps = conn.prepareStatement(findsql);
                rs = ps.executeQuery();
    
                int flag = 0;
                while (rs.next()) {
                    if (flag == 0) {
                        sb.append("下列在名单中的学生没有成绩\n" + "学号" + "\t" + "姓名" + "\t" + "成绩" + "\t\n");
                        flag = 1;
                    }
                    sb.append(rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3) + "\n");
    
                }
                return sb + "";
    
            } catch (SQLException e) {
                System.out.println("SQLException!");
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                JDBCUtil.realeaseAll(rs, ps, conn);
            }
            return "查找完毕";
        }
    
        public static void accuAccordPercent(String tablename, String cname, Map<String, Double> per) {
            Connection conn = null;
            PreparedStatement ps = null;
            PreparedStatement ps2 = null;
            PreparedStatement ps3 = null;
            ResultSet rs = null;
            StringBuilder sb = new StringBuilder();
            String altersql = "alter table " + tablename + " add " + cname + " varchar(20)";
            sb.append("update " + tablename + " set " + cname + "=");
    
            try {
    
                conn = JDBCUtil.getConnection();
                ps = conn.prepareStatement(altersql);
                ps.executeUpdate();
    
                for (Map.Entry<String, Double> entry : per.entrySet()) {
                    String clearsql = " UPDATE " + tablename + " set  " + entry.getKey() + " =0 where " + entry.getKey()
                            + "='缺考'or " + entry.getKey() + " is NULL; ";
                    ps3 = conn.prepareStatement(clearsql);
                    ps3.executeUpdate();
                }
                int flag = 0;
                for (Map.Entry<String, Double> entry : per.entrySet()) {
                    if (flag == 0) {
                        sb.append(entry.getKey() + "*" + entry.getValue() + " ");
                        flag = 1;
                    } else {
                        sb.append("+ " + entry.getKey() + "*" + entry.getValue() + " ");
                    }
    
                }
                String updatesql = sb + " ;";
                System.out.println(updatesql);
                ps2 = conn.prepareStatement(updatesql);
                ps2.executeUpdate();
                System.out.println("成功设置权重写入总分");
    
            } catch (SQLException e) {
                System.out.println("SQLException!");
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                JDBCUtil.realeaseAll(rs, ps, conn);
            }
    
        }

    将数据库中的表导出成Excel文件

    public static void readExcel(String tablename, String outname) throws SQLException {
            Connection conn = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
            try {
                // 连接数据库查询数据
                Class.forName("com.mysql.cj.jdbc.Driver");
                conn = DriverManager.getConnection(url, user, password);
                String sql = "select * from " + tablename;
                ps = conn.prepareStatement(sql);
                // 获取结果集
                rs = ps.executeQuery();
                // 用于获取字段的描述信息,比如字段名
                ResultSetMetaData metaData = (ResultSetMetaData) rs.getMetaData();
                // 创建workBook对象
                @SuppressWarnings("resource")
                HSSFWorkbook workBook = new HSSFWorkbook();
                // 在workBook对象中创建一张表格
                HSSFSheet sheet = workBook.createSheet("学生成绩");
                // 设置每一列的宽度
                int colnum = metaData.getColumnCount();
                for (int i = 0; i < colnum; i++) {
                    sheet.setColumnWidth(i, 2000);
                }
                // 单元格样式对象
                HSSFCellStyle cellStyle = workBook.createCellStyle();
                // 设置文本居中
                cellStyle.setAlignment(HorizontalAlignment.CENTER);
                // 创建第0行,作为表格的表头
                HSSFRow row = sheet.createRow(0);
                HSSFCell cell = null;
                for (int i = 0; i < colnum; i++) {
                    cell = row.createCell(i);
                    // 动态获取字段名
                    cell.setCellValue(metaData.getColumnLabel(i + 1));
                    cell.setCellStyle(cellStyle);
                }
                int rowIndex = 1;
                while (rs.next()) {
                    // 循环将查询出来的数据封装到表格的一行中
                    row = sheet.createRow(rowIndex);
                    for (int i = 0; i < colnum; i++) {
                        cell = row.createCell(i);
                        cell.setCellValue(rs.getString(i + 1));
                        cell.setCellStyle(cellStyle);
                    }
                    rowIndex++;
                }
                String outPutFile = "d:" + File.separator + outname + ".xls";
                FileOutputStream fos = new FileOutputStream(outPutFile);
                // 输出流将文件写到硬盘
                workBook.write(fos);
                fos.flush();
                fos.close();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                rs.close();
                ps.close();
                conn.close();
            }
        }

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

    1.

     

    更改命名即可

    2.

    添加@Override就可以解决

    3.

    七、尚待改进

    数据分析与章节进度展示未实现

     成绩为缺考与null的不能与0分明确区分出来

    扫描代码之后还有一点小错误未更正

  • 相关阅读:
    技术一定要动手做一遍才算自已的
    终于提离职了,感觉如释重负
    自我评定与学习计划
    MYSQL---INSERT...SELECT...
    MYSQL---LIMIT
    SQL---having
    MYSQL---数据定义
    CSS---Block和inline元素对比
    CSS---清除浮动
    T-SQL---分页语句
  • 原文地址:https://www.cnblogs.com/hq9-/p/10278470.html
Copyright © 2011-2022 走看看