202302-踏马逐尘 实验四 软件开发案例(1)团队作业

02-踏马逐尘 实验四 软件开发案例

项目 内容
课程班级博客链接 2023年春软件工程(2020级计算机科学与技术)
这个作业要求链接 实验四 软件开发案例
团队名称 踏马逐尘
团队的课程学习目标 1. 完成简单的项目软件开发
2. 实现开发环境部署、mysql数据库创建和连接访问技术
3. 掌握数据库应用程序开发技术
4. 自我提升,学习技能
这个作业在哪些方面帮助团队实现学习目标 1. 进行团队建设
2. 了解成员擅长的技术
3. 明确团队分工
团队博客链接 踏马逐尘

任务1:用户综合管理软件开发环境配置

(1) 创建用户综合管理软件的Java web项目,项目名称自拟。



(2)在项目中添加mysql的驱动支持包。



(3)分别用手工或脚本方式创建mysql数据库及表。

  • 手工创建mysql数据库及表。

手工方式创建数据库

手工方式创建数据表

  • 脚本方式创建mysql数据表

(4)将用户综合管理软件案例代码导入到项目中。

(5)在Tomcat服务器中部署项目。

(6)测试运行用户信息的查询、更新、删除、显示等操作。

  1. 更新

输入id,姓名,密码

插入完成


  1. 查询

输入该用户id


查询到该用户的各项信息


  1. 删除

输入删除用户的id


删除该用户的各项信息


  1. 显示

任务2:用户综合管理软件增量开发

(1)为案例软件开发软件入口主界面,作为查询、更新、删除、显示的功能导航页面。


功能界面

(2)为案例软件开发一个新功能,可将excel文件的用户信息批量导入数据库。

1. 关键代码展示与详解

package com.dbutil;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import com.entity.User;
import com.model.Model;

public class ExcelTest {

//    public static void main(String[] args) throws Exception {
//        String fileName = "C:\\Users\\ARHM\\Desktop\\11.xlsx";
//        readExcel(fileName);
//    }
	public static ArrayList<User> readExcel2(String fileName)
	{
		System.out.println(fileName);
		ArrayList<User> us = new ArrayList<>();
		Model m = new Model();

        Workbook workbook = null;
        Row row = null;
        //获取Excel文档
        workbook = getWorkbook(fileName);
        //获取Excel文档的第一个sheet页
        Sheet sheet = workbook.getSheetAt(0);
        //获取文档中已保存数据的行数
        int rowNum = sheet.getPhysicalNumberOfRows();
        //获取第一行
        row = sheet.getRow(0);
        //获取当前行已保存数据的最大列数
        int colnum = row.getPhysicalNumberOfCells();
        for (int i = 1; i < rowNum; i++) {
            row = sheet.getRow(i);//System.out.println("row--> "+row);
            if (null != row)
            {
                for (int j = 0; j < colnum;) {
                	User u = new User();
                    Cell id = row.getCell(j);
                    Cell name = row.getCell(j+1);
                    Cell password = row.getCell(j+2);
                	u.setId((int)id.getNumericCellValue());
                	u.setName((String)name.getRichStringCellValue().getString());
                	u.setPassword((String)password.getRichStringCellValue().getString());
                	int s = m.insert(u.getId(), u.getName(), u.getPassword());
                	if(s==1)
                		u.setZt("导入成功");
                	else
                		u.setZt("导入失败,id重复");
                	us.add(u);
//                    
                    j=j+3;System.out.println();
                }
            }
        }
    
		return us;
		
	
	}


    private static Workbook getWorkbook(String fileName) {//根据后缀获取Excel表格
        Workbook workbook = null;
        String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
        InputStream in = null;
        try {
            in = new FileInputStream(fileName);
            if ("xls".equals(suffix))
            {
                workbook = new HSSFWorkbook(in);
            }
            else if ("xlsx".equals(suffix))
            {
                workbook = new XSSFWorkbook(in);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return workbook;
    }
}

该代码使用了Apache POI库中的类来读取Excel文件。通过获取文档中已保存数据的行数,并使用循环遍历每一行数据。对于每一行数据,它获取当前行已保存数据的最大列数,并使用循环遍历每一列数据。其中zt为状态,通过zt的不同判断是否导入。



	package com.servlet;
	
	import java.io.File;
	import java.io.IOException;
	import java.io.PrintWriter;
	import java.util.ArrayList;
	import java.util.List;
	
	
	
	
	
	
	import javax.servlet.ServletException;
	import javax.servlet.annotation.MultipartConfig;
	import javax.servlet.annotation.WebServlet;
	import javax.servlet.http.HttpServlet;
	import javax.servlet.http.HttpServletRequest;
	import javax.servlet.http.HttpServletResponse;
	
	import org.apache.commons.fileupload.FileItem;
	import org.apache.commons.fileupload.servlet.ServletFileUpload;
	
	
	import org.apache.commons.fileupload.FileItemFactory;
	import org.apache.commons.fileupload.FileUpload;
	import org.apache.commons.fileupload.FileUploadException;
	import org.apache.commons.fileupload.disk.DiskFileItemFactory;
	
	import com.entity.User;
	import com.model.Model;
	
	import jxl.Cell;
	import jxl.Workbook;
	
	
	/**
	 * Servlet implementation class File
	 */
	@WebServlet("/File")
	public class UFile extends HttpServlet {
	
		public void doGet(HttpServletRequest request, HttpServletResponse response)
				throws ServletException, IOException
		{
			File file = null;
			response.setContentType("text/html;charset=UTF-8");
			try
			{
				FileItemFactory factory = new DiskFileItemFactory();
				// 文件上传核心工具类
				ServletFileUpload upload = new ServletFileUpload(factory);
				upload.setFileSizeMax(10*1024*1024);	// 单个文件大小限制
				upload.setSizeMax(50*1024*1024);		// 总文件大小限制
				upload.setHeaderEncoding("UTF-8");		// 对中文文件编码处理
				
				if (ServletFileUpload.isMultipartContent(request)) 
				{
					// 3. 把请求数据转换为list集合
					List<FileItem> list = upload.parseRequest(request);
					// 遍历
					for (FileItem item : list)
					{
						// 判断:普通文本数据
						if (item.isFormField())
						{
							//普通表单项操作
						} 
						// 文件表单项
						else 
						{
							// a. 获取文件名称
							String name = item.getName();
							// b. 得到上传目录
							String basePath = getServletContext().getRealPath("/");
							// c. 创建要上传的文件对象
							//String basePath = "f:\\";
							file = new File(basePath,name);
							// d. 上传
							item.write(file);
							
							item.delete();  // 删除组件运行时产生的临时文件
							ArrayList<User> users=com.dbutil.ExcelTest.readExcel2(basePath+name);
							//com.dbutil.ExcelTest.readExcel(basePath+name);
							
							for (User u:users) {
		                        System.out.println(u.getId()+" | "+u.getName()+" | " +u.getPassword()+" | " +u.getZt());
		                        //model.insert(u.getId(),u.getName(),u.getPassword());
		                    }
							request.setAttribute("usersList", users);
							request.getRequestDispatcher("excel.jsp").forward(request, response);
							
						 
	
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		}
		
	
		
		public void doPost(HttpServletRequest request, HttpServletResponse response)
				throws ServletException, IOException
		{
			doGet(request,response);
		}
	}

该代码中使用了CommonsFileUpload库来实现文件上传,使用JXL库来解析excel文件。当用户上传文件时,Servlet会解析请求数据,将文件保存到服务器上的指定目录,并读取文件内容,并将文件内容转换为用户对象列表。最后,它将用户对象列表传递到excel.jsp,该页面将显示上传的文件内容。


2.实现效果展示

点击“模板”即可下载模板


模板内容


添加数据


上传excel模板,其中id与数据库重复的导入失败,id不重复的则导入成功


刷新数据库,新添加的数据立刻显示


(3)将任务1与任务2完成的用户综合管理软件源码上传到团队github仓库。点击此处跳转至网址



实验总结

(1)完成任务花费时间

任务内容 预计花费时间(min) 实际花费时间(min)
创建项目并添加驱动包 3 5
手工或脚本方式创建mysql数据库及表 10 10
导入代码并部署tomcat 10 5
测试增删改查等操作 5 5
设计软件开发入口界面 30 60
开发新功能:excel文件的用户信息批量导入数据库 300 720
上传文件至github 10 15
成员谈谈感受体会 20 20
完成博客撰写 90 160

(2)成员分工

成员 工作内容
孙* 主要负责博客内容编写和java项目润色
阿* 曼·麦麦提艾萨 主要负责将excel文件的用户信息批量导入数据库的实现
后* 主要负责java项目的后期监督与维护,github上传
杨* 辽 主要负责博客内容撰写,以及收集大量项目相关文档资料

(3)团队成员的感受体会

成员 体会
孙* 这一周,我负责博客撰写博客和部分项目的开发,这一次的实战项目让我受益匪浅。因为自身在项目开发上经验很少,项目完成后仍然有一些不懂的地方,之后我将继续学习,提升自己的实战技能。
阿* 曼·麦麦提艾萨 这周我主要负责将excel文件的用户信息批量导入数据库的实现,虽然在项目初期进展不顺利,遇到了很多报错,但是最终在努力坚持和团队提供的资料的帮助下,完成了功能的实现,我对java项目的开发有了更深的了解,收获满满。
后* 本周我的任务是java项目的后期监督与维护和github上传,我在项目完成后对项目进行了深入的使用与研究,发现了几处项目中存在的小问题,最终修改代码使项目更加完善。
杨* 辽 我在这周主要负责的是文件查阅工作,通过整理大量的关于java项目的资料,我对java项目有了进一步的了解和掌握,有了更深的启发。
posted @ 2023-04-29 17:33  踏马逐尘  阅读(74)  评论(0编辑  收藏  举报