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)测试运行用户信息的查询、更新、删除、显示等操作。
- 更新
输入id,姓名,密码
插入完成
- 查询
输入该用户id
查询到该用户的各项信息
- 删除
输入删除用户的id
删除该用户的各项信息
- 显示
任务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项目有了进一步的了解和掌握,有了更深的启发。 |