zoukankan      html  css  js  c++  java
  • JAVA课程设计---多源教学数据管理系统

    1.团队课程设计博客链接

    https://www.cnblogs.com/hq9-/p/10278470.html

    2.个人负责模块或任务说明

    (1)到控制台实现GUI界面中浏览文件并选取文件的功能。

    (2)业务逻辑代码中实现读取excel(.xls)

    (3)数据库表利用POI导出成excel(固定行数)

    (4)实现读取txt文件在GUI界面

    (5)GUI界面中实现各个界面展示与各个界面的跳转

    3.自己的代码提交记录截图

    4.自己负责模块或任务详细说明

    (1)实现浏览文件,选择文件功能:

    主要需要JFileChooser文件选择器进行操作,将文件的路径封装成File实例进行使用。

    界面展示:

    主要代码:

    JFileChooser jfc = new JFileChooser();// 文件选择器
    
        YFileChooser() {
            jfc.setCurrentDirectory(new File("d:\"));// 文件选择器的初始目录定为d盘
                ...}
        
        public void actionPerformed(ActionEvent e) {// 事件处理
    
            if (e.getSource().equals(button2)) {
                jfc.setFileSelectionMode(0);// 设定只能选择到文件
                int state = jfc.showOpenDialog(null);// 此句是打开文件选择器界面的触发语句
                if (state == 1) {
                    return;// 撤销则返回
                } else {
                    File f = jfc.getSelectedFile();// f为选择到的文件
                    text2.setText(f.getAbsolutePath());//获得默认路径
    
                }
            }
    ...
    }

    (2)业务逻辑代码中实现读取excel(.xls)

    实现读取excel文件内容,显示在控制台,主要利用POI的功能,利用其中的HSSFWorkbook(excel文档对象)等组件对excel表的内容与标题进行读取

    主要代码:

          /**
         * 获取单元格数据内容为字符串类型的数据
         * 
         * @param cell Excel单元格
         * @return String 单元格数据内容
         */
     private String getStringCellValue(HSSFCell cell) {
            String strCell = "";
            switch (cell.getCellType()) {
            case STRING:
                strCell = cell.getStringCellValue();
                break;
            case NUMERIC:
                strCell = String.valueOf(cell.getNumericCellValue()); 
                break;
            case BOOLEAN:
                strCell = String.valueOf(cell.getBooleanCellValue());
                break;
            case BLANK:
                strCell = "";
                break;
            default:
                strCell = "";
                break;
            }
            if (strCell.equals("") || strCell == null) {
                return "";
            }
            if (cell == null) {
                return "";
            }
            return strCell;
        }
     /**
         * 根据HSSFCell类型设置数据
         * @param cell
         * @return
         */
     private String getCellFormatValue(HSSFCell cell) {
            String cellvalue = "";
            if (cell != null) {
                // 判断当前Cell的Type
                switch (cell.getCellType()) {
                // 如果当前Cell的Type为NUMERIC
                case NUMERIC:
                case FORMULA: {
                    // 判断当前的cell是否为Date
                    if (HSSFDateUtil.isCellDateFormatted(cell)) {
                        Date date = cell.getDateCellValue();
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                        cellvalue = sdf.format(date);
                        
                    }
                    // 如果是纯数字
                    else {
                        // 取得当前Cell的数值
                        DecimalFormat df = new DecimalFormat("0");  
                        cellvalue= df.format(cell.getNumericCellValue());  
                    }
                    break;
                }
                // 如果当前Cell的Type为STRIN
                case STRING:
                    // 取得当前的Cell字符串
                    cellvalue = cell.getRichStringCellValue().getString();
                    break;
                // 默认的Cell值
                default:
                    cellvalue = " ";
                }
            } else {
                cellvalue = "";
            }
            return cellvalue;
        }  
    public static void main(String[] args) {
            try {
                // 对读取Excel表格标题测试
                InputStream is = new FileInputStream("d:\mookmiddle-test.xls");
                WriteExcelToDB excelReader = new WriteExcelToDB();
                String[] title = excelReader.readExcelTitle(is);
                System.out.println("获得Excel表格的标题:");
                for (String s : title) {
                    System.out.print(s + " ");
                }
                // 对读取Excel表格内容测试
               InputStream is2 = new FileInputStream("d:\mookmiddle-test.xls");
                Map<Integer, String> map = excelReader.readExcelContent(is2);
               System.out.println(" ");
                System.out.println("获得Excel表格的内容:");
            } catch (FileNotFoundException e) {
                System.out.println("未找到指定路径的文件!");
                e.printStackTrace();
            }
        }

    (3)实现将数据库表导出成excel:

    利用POI技术,用HSSFWorkbook创建“Excel文件对象”,利用HSSFWorkbook对象创建Sheet对象,然后用Sheet对象返回行对象,最后用行对象得到Cell对象

    4、对Cell对象读写

    主要代码:

    try {
                //连接数据库查询数据
                Class.forName("com.mysql.cj.jdbc.Driver");
                conn=DriverManager.getConnection(url, user, password);
                String sql="select * from st";
                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++;
                }
                FileOutputStream fos=new FileOutputStream(outPutFile);
                //输出流将文件写到硬盘
                workBook.write(fos);
                fos.flush();
                fos.close();
            } 
            catch (Exception e) {
                e.printStackTrace();
            } finally {
                rs.close();
                ps.close();
                conn.close();
            }

    (4)实现读取txt文件在GUI界面:

    将选择txt文件的路径在文本字段上显示,获取文本字段上的路径,利用IO流将文件里的数据读取并将数据添加到要显示的文本框中。

    界面展示:

    主要代码:

        public void readFile() {
            String filename2 = text2.getText();
            FileReader fr = null;
            BufferedReader br = null;
            try {
                fr = new FileReader(filename2);
                br = new BufferedReader(fr);
                String str;
                while ((str = br.readLine()) != null) {
                    text4.append(str + "
    ");
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    br.close();
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    5.课程设计感想

      在这次课设的过程中,遇到很多困难,同时也学到很多东西,像数据库,POI,平时上课接触很少的地方需要自学与探讨。通过不断摸索,我解决了不少问题,但同时实现的代码bug重重,多亏队友的修改,让部分代码得以完善,像我写POI读取excel表时,做测试时用自己创的表没有问题,但测试老师提供的表时发现无法运行,最后发现是原来excel表的后缀有影响,应该要实现后缀为.xls与.xlsx都可读取。

      通过这次课设,我意识到平时上课不能停留在课本,而忽视动手能力,否则课设的时候会及其痛苦。

  • 相关阅读:
    monkeyrunner小结
    ADB用法
    logcat命令详解【一】
    logcat命令详解【二】
    五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程
    哈佛图书馆的二十条训言
    C#中千分位问题
    虚拟目录继承根目录web.config
    批量删除sql数据库木马
    决IE和Firefox下flash挡住div层的问题
  • 原文地址:https://www.cnblogs.com/tanghuan/p/10284765.html
Copyright © 2011-2022 走看看