本系列校训
互相伤害互相卷,玩命学习要你管,天生我才必有用,我命由我不由天!
毕业论文不怕难,毕业设计来铺垫!打磨技术精心写,拿证之后尽开颜!
毕设的技术铺垫
语言选择 | 收录专辑链接 | 卷的程度 |
C | 张雪峰推荐选择了计算机专业之后-在大学期间卷起来-【大学生活篇】 | ★★★✫✰ |
JAVA | 黑马B站视频JAVA部分的知识范围、学习步骤详解 | ★★★★★ |
JAVAWEB | 黑马B站视频JAVAWEB部分的知识范围、学习步骤详解 | ★★★★★ |
SpringBoot | SpringBoot知识范围-学习步骤【JSB系列之000】 | ★★★★★ |
微信小程序 | 详细解析黑马微信小程序视频–【思维导图知识范围】 | ★★★✰✰ |
python | 详细解析python视频选择–【思维导图知识范围】 | ★★✫✰✰ |
php | PHP要怎么学–【思维导图知识范围】 | ★★★✫✰ |
环境及工具:
本系列环境
环境 | win11 |
工具 | idea 2017 |
jdk | 1.8 |
数据库 | mysql5.5 |
maven | 无 |
项目导入方式 | 打开目录 |
数据库前端工具 | navicat |
项目说明
不会配置的,或者导入项目报错的,参见《IDEA如何配置JAVAWEB项目》
本系统是一个BS系统,使用了Servlet 技术,特色技术:上传教师图片,导出教师信息
总体设计
== 没办法,这种老架构也没啥能吹的技术了。与其说是毕业设计,还不如说是课程设计。只能说明闭眼睛讲故事== ,但是并不代表着啥啥功能不行。
B/S结构
B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器,如Chrome、Safari、Microsoft Edge、Netscape Navigator或Internet Explorer,服务器安装SQL Server、Oracle、MYSQL等数据库。浏览器通过Web Server 同数据库进行数据交互。
随着Internet和WWW的流行,以往的主机/终端和C/S都无法满足当前的全球网络开放、互连、信息随处可见和信息共享的新要求,于是就出现了B/S型模式,即浏览器/服务器结构。它是C/S架构的一种改进,可以说属于三层C/S架构。主要是利用了不断成熟的WWW浏览器技术,用通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能,并节约了开发成本,是一种全新的软件系统构造技术。
第一层是浏览器,即客户端,只有简单的输入输出功能,处理极少部分的事务逻辑。由于客户不需要安装客户端,只要有浏览器就能上网浏览,所以它面向的是大范围的用户,所以界面设计得比较简单,通用。
第二层是WEB服务器,扮演着信息传送的角色。当用户想要访问数据库时,就会首先向WEB服务器发送请求,WEB服务器统一请求后会向数据库服务器发送访问数据库的请求,这个请求是以SQL语句实现的。
第三层是数据库服务器,他扮演着重要的角色,因为它存放着大量的数据。当数据库服务器收到了WEB服务器的请求后,会对SQL语句进行处理,并将返回的结果发送给WEB服务器,接下来,WEB服务器将收到的数据结果转换为HTML文本形式发送给浏览器,也就是我们打开浏览器看到的界面。
Servlet(Server Applet)
是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
最早支持Servlet标准的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。
有特色的技术
jspSmartUpload
jspSmartUpload组件是应用JSP进行B/S程序开发过程中经常使用的上传下载组件,它使用简单,方便。现在我又为其加上了下载中文名字的文件的支持,真的是如虎添翼,必将赢得更多开发者的青睐。
POI Office 文档的 Java 处理包
软件简介
Apache POI 是基于 Office Open XML 标准(OOXML)和 Microsoft 的 OLE 2 复合文档格式(OLE2)处理各种文件格式的开源项目。 简而言之,您可以使用 Java 读写 MS Excel 文件,可以使用 Java 读写 MS Word 和 MS PowerPoint 文件。
模块
HSSF - 提供读写 Microsoft Excel XLS 格式 (Microsoft Excel 97 (-2003)) 档案的功能。
XSSF - 提供读写 Microsoft Excel OOXML XLSX 格式 (Microsoft Excel XML (2007+)) 档案的功能。
SXSSF - 提供低内存占用量读写 Microsoft Excel OOXML XLSX 格式档案的功能。
HWPF - 提供读写 Microsoft Word DOC97 格式 (Microsoft Word 97 (-2003)) 档案的功能。
XWPF - 提供读写 Microsoft Word DOC2003 格式 (WordprocessingML (2007+)) 档案的功能。
HSLF/XSLF - 提供读写 Microsoft PowerPoint 格式档案的功能。
HDGF/XDGF - 提供读 Microsoft Visio 格式档案的功能。
HPBF - 提供读 Microsoft Publisher 格式档案的功能。
HSMF - 提供读 Microsoft Outlook 格式档案的功能。
前台技术
frameset 元素
可定义一个框架集。它被用来组织多个窗口(框架)。每个框架存有独立的文档。在其最简单的应用中,frameset 元素仅仅会规定在框架集中存在多少列或多少行。您必须使用 cols 或 rows 属性。
其作用是指定一个框架集,用于组织多个框架和嵌套框架集。
FRAMESET 元素是 FRAME 元素的容器。HTML 文档可包含 FRAMESET 元素或 BODY 元素之一,而不能同时包含两者。
如果用户在框架中打开了 Web 文件夹后单击了 Web 文件夹中的内容,那么被单击的文件或文件夹将取代整个窗口。例如,假设页面包含两个框架,一个框架指向 网址第二个框架指向网络驱动器。如果用户单击第二个框架中的文件或文件夹,该框架将活动整个窗口的控制,包括第一个框架。对于浏览器不能处理的文件类型,如 *.txt 文件,将会打开对应的应用程序窗口。
尽管 Web 文件夹是文件系统层次的一部分,但是该技术并不总是表示文件系统中的实际内容。一个典型的例子就是网络邻居。
功能模块
本毕业设计功能如图1所示
核心代码部分
文件编码问题。
项目文件目录如下:
关键核心代码:
应用软件的核心代码是指这个程序最关键部分的代码。例如WinRAR,它的核心代码就是压缩算法部分,而诸如用户界面、操作系统移植等部分就无足轻重了。
商城类的核心代码是指业务层的代码,比如你商城的核心代码就是:商品、购物车、创建订单、支付这些代码就是核心代码。
作为程序员,我们经常需要看懂别人的代码。特别是在开源社区中,我们需要理解许多优秀的开源项目的代码。而在Gitee这样的代码托管平台上,我们如何快速有效地看懂别人的代码呢?本文将为大家介绍一些方法。
1.阅读README和项目介绍
在Gitee上,许多开源项目都会有自己的README文件或项目介绍。这些文件一般会介绍项目的背景、功能、使用方法等内容,可以帮助我们快速了解这个开源项目的基本情况。如果我们能够从这些文件中找到与自己相关的内容,就可以快速入手这个开源项目的代码。
2.了解项目结构和代码组织
在阅读代码之前,我们需要先了解这个开源项目的代码结构和代码组织方式。通常,开源项目会将不同的功能模块封装到不同的代码文件中,并按照一定的目录结构组织起来。如果我们能够了解这个开源项目的代码组织方式,就能更加快速地找到所需的代码。
3.利用IDE和工具
IDE和一些代码阅读工具可以帮助我们更快速、更高效地阅读代码。例如,Java开发者可以使用Eclipse或IntelliJ IDEA这样的IDE,可以快速打开代码文件、查看类、方法和变量等信息。另外,一些代码阅读工具,如Source Insight、CodeCompare等,可以帮助我们更方便地查看代码的结构和关系,以及快速跳转到相关代码。
4.关注代码注释和文档
良好的代码注释和文档可以帮助我们更快速地理解代码。因此,在阅读别人的代码时,我们可以将注意力放在代码注释和文档上。有些开源项目会提供详细的文档,有些则注重代码注释。如果我们能够针对代码注释和文档有一个系统的阅读和理解,就能更快速地掌握别人的代码。
5.跑通测试和运行项目
如果我们想更深入地了解别人的代码,可以试着跑通相关的测试,或者直接运行这个开源项目。通过跑测试和运行项目,我们可以更加直观地了解代码的实现细节和具体的业务逻辑。
总结:
以上就是在Gitee上快速理解他人代码的一些方法,希望对大家有所帮助。当然,阅读代码是一件需要耐心和细心的事情,需要我们多花一点时间和心思。只有沉下心来,慢慢阅读每一行代码,才能真正理解它们的含义和作用。
package servlet; import gongong.DateUtils; import java.io.IOException; import java.sql.ResultSet; import java.util.ArrayList; import java.util.GregorianCalendar; import java.util.List; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import model.TJiaoshi; import db.DB; public class jiaoshi_servlet extends HttpServlet{ public void service(HttpServletRequest req,HttpServletResponse res)throws ServletException, IOException { String type=req.getParameter("type"); if(type.endsWith("jiaoshiAdd")) { jiaoshiAdd(req, res); } if(type.endsWith("jiaoshiUpd")) { jiaoshiUpd(req, res); } if(type.endsWith("jiaoshiDel")) { jiaoshiDel(req, res); } if(type.endsWith("jiaoshiMana")) { jiaoshiMana(req, res); } if(type.endsWith("jiaoshiQuery")) { jiaoshiQuery(req, res); } } public void jiaoshiDel(HttpServletRequest req,HttpServletResponse res) { int id = Integer.parseInt(req.getParameter("id")); String del = "yes"; String sql = "update t_jiaoshi set del=? where id=?"; Object[] params={del,id}; DB mydb=new DB(); mydb.doPstm(sql, params); mydb.closed(); req.setAttribute("message", "教师信息删除成功!"); req.setAttribute("path", "jiaoshi?type=jiaoshiMana"); String targetURL = "/common/success.jsp"; dispatch(targetURL, req, res); } public void jiaoshiUpd(HttpServletRequest req,HttpServletResponse res) { int id = Integer.parseInt(req.getParameter("id")); String gonghao = req.getParameter("gonghao"); String xingming = req.getParameter("xingming"); String xingbie = req.getParameter("xingbie"); String nianling = req.getParameter("nianling"); String shengri = req.getParameter("shengri"); String gongzuo = req.getParameter("gongzuo"); String zhuanye = req.getParameter("zhuanye"); String zhaopian = req.getParameter("zhaopian"); String beizhu = req.getParameter("beizhu"); String sql = "update t_jiaoshi set gonghao=?,xingming=?,xingbie=?,nianling=?,shengri=?,gongzuo=?,zhuanye=?,zhaopian=?,beizhu=? where id=?"; Object[] params={gonghao,xingming,xingbie,nianling,shengri,gongzuo,zhuanye,zhaopian,beizhu,id}; DB mydb=new DB(); mydb.doPstm(sql, params); mydb.closed(); req.setAttribute("message", "教师信息修改成功!"); req.setAttribute("path", "jiaoshi?type=jiaoshiMana"); String targetURL = "/common/success.jsp"; dispatch(targetURL, req, res); } public void jiaoshiAdd(HttpServletRequest req,HttpServletResponse res) { String gonghao = req.getParameter("gonghao"); String xingming = req.getParameter("xingming"); String xingbie = req.getParameter("xingbie"); String nianling = req.getParameter("nianling"); String shengri = req.getParameter("shengri"); String gongzuo = req.getParameter("gongzuo"); String zhuanye = req.getParameter("zhuanye"); String zhaopian = req.getParameter("zhaopian"); String beizhu = req.getParameter("beizhu"); String del = "no"; String sql = "insert into t_jiaoshi (gonghao,xingming,xingbie,nianling,shengri,gongzuo,zhuanye,zhaopian,beizhu,del)" + " values (?,?,?,?,?,?,?,?,?,?)"; Object[] params={gonghao,xingming,xingbie,nianling,shengri,gongzuo,zhuanye,zhaopian,beizhu,del}; DB mydb=new DB(); mydb.doPstm(sql, params); mydb.closed(); req.setAttribute("message", "教师信息添加成功!"); req.setAttribute("path", "jiaoshi?type=jiaoshiMana"); String targetURL = "/common/success.jsp"; dispatch(targetURL, req, res); } public void jiaoshiMana(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException { List jiaoshiList=new ArrayList(); String sql="select * from t_jiaoshi where del='no'"; Object[] params={}; DB mydb=new DB(); try { mydb.doPstm(sql, params); ResultSet rs=mydb.getRs(); while(rs.next()) { TJiaoshi jiaoshi=new TJiaoshi(); jiaoshi.setId(rs.getInt("id")); jiaoshi.setGonghao(rs.getString("gonghao")); jiaoshi.setXingming(rs.getString("xingming")); jiaoshi.setXingbie(rs.getString("xingbie")); jiaoshi.setNianling(rs.getString("nianling")); jiaoshi.setShengri(rs.getString("shengri")); jiaoshi.setGongzuo(rs.getString("gongzuo")); jiaoshi.setZhuanye(rs.getString("zhuanye")); jiaoshi.setZhaopian(rs.getString("zhaopian")); jiaoshi.setBeizhu(rs.getString("beizhu")); jiaoshiList.add(jiaoshi); } rs.close(); } catch(Exception e) { e.printStackTrace(); } mydb.closed(); req.setAttribute("jiaoshiList", jiaoshiList); req.getRequestDispatcher("admin/jiaoshi/jiaoshiMana.jsp").forward(req, res); } public void jiaoshiQuery(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException { String xingming = req.getParameter("xingming")==null?"":req.getParameter("xingming"); String zhuanye = req.getParameter("zhuanye")==null?"":req.getParameter("zhuanye"); List jiaoshiList=new ArrayList(); String sql="select * from t_jiaoshi where del='no'"; if(!("".equals(xingming))){ sql += " and xingming like '%"+xingming+"%'"; } if(!("".equals(zhuanye))){ sql += "and zhuanye like '%"+zhuanye+"%'"; } Object[] params={}; DB mydb=new DB(); try { mydb.doPstm(sql, params); ResultSet rs=mydb.getRs(); while(rs.next()) { TJiaoshi jiaoshi=new TJiaoshi(); jiaoshi.setId(rs.getInt("id")); jiaoshi.setGonghao(rs.getString("gonghao")); jiaoshi.setXingming(rs.getString("xingming")); jiaoshi.setXingbie(rs.getString("xingbie")); jiaoshi.setNianling(rs.getString("nianling")); jiaoshi.setShengri(rs.getString("shengri")); jiaoshi.setGongzuo(rs.getString("gongzuo")); jiaoshi.setZhuanye(rs.getString("zhuanye")); jiaoshi.setZhaopian(rs.getString("zhaopian")); jiaoshi.setBeizhu(rs.getString("beizhu")); jiaoshiList.add(jiaoshi); } rs.close(); } catch(Exception e) { e.printStackTrace(); } mydb.closed(); req.setAttribute("xingming", xingming); req.setAttribute("zhuanye", zhuanye); req.setAttribute("jiaoshiList", jiaoshiList); req.getRequestDispatcher("admin/jiaoshi/jiaoshiQuery.jsp").forward(req, res); } public void dispatch(String targetURI,HttpServletRequest request,HttpServletResponse response) { RequestDispatcher dispatch = getServletContext().getRequestDispatcher(targetURI); try { dispatch.forward(request, response); return; } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
教师工资
上传文件的部分
<%@ page contentType="text/html;charset=utf-8" language="java" import="com.jspsmart.upload.*"%> <%@ page import="com.jspsmart.upload.*"%> <%@ page import="java.util.*"%> <% String path = request.getContextPath(); %> <% String newFile1Name=null; String file_name=null; SmartUpload mySmartUpload = new SmartUpload(); //初始化上传 mySmartUpload.initialize(pageContext); //只允许上载此类文件 try { //mySmartUpload.setAllowedFilesList("jpg,Jpg,JPG,GIF,gif,Gif,png"); mySmartUpload.upload(); } catch (Exception e) { //out.println("<script language=javascript>alert('上传格式错误!'); history.back(-1);</script>"); //return; } try { com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(0); if (myFile.isMissing()) { out.println("<script language=javascript>alert('必须选择图片!'); history.back(-1);</script>"); return; } else { int file_size = myFile.getSize(); //取得文件的大小 (单位是b) file_name=myFile.getFileName(); System.out.println("文件大小:"+file_size+"文件名称:"+file_name); //if (file_size > 10*1024*1024) //{ //out.println("<script language=javascript>alert('上传图片大小应控制在10K~1M之间!'); history.back(-1);</script>"); //return; //} //else //{ newFile1Name=new Date().getTime()+file_name.substring(file_name.indexOf(".")); System.out.println("新文件名称:"+newFile1Name); String saveurl = request.getSession().getServletContext().getRealPath("upload"); saveurl = saveurl+"/"+newFile1Name; myFile.saveAs(saveurl, mySmartUpload.SAVE_PHYSICAL); // } } } catch (Exception e) { e.toString(); } %> <script language="javascript"> document.write("上传成功"); window.parent.document.getElementById("fujian").value="<%= file_name%>"; window.parent.document.getElementById("zhaopian").value="<%= file_name%>"; </script>
导出EXCEL
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ page import="com.jspsmart.upload.*" %> <%@ page import="org.apache.poi.hssf.usermodel.*" %> <%@ page import="java.io.*" %> <jsp:directive.page import="db.DB"/> <jsp:directive.page import="java.sql.ResultSet"/> <jsp:directive.page import="model.TJiaoshi"/> <% String path = request.getContextPath(); %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <% List jiaoshiList=new ArrayList(); String sql="select * from t_jiaoshi where del='no'"; Object[] params={}; DB mydb=new DB(); try { mydb.doPstm(sql, params); ResultSet rs=mydb.getRs(); while(rs.next()) { TJiaoshi jiaoshi=new TJiaoshi(); jiaoshi.setId(rs.getInt("id")); jiaoshi.setGonghao(rs.getString("gonghao")); jiaoshi.setXingming(rs.getString("xingming")); jiaoshi.setXingbie(rs.getString("xingbie")); jiaoshi.setNianling(rs.getString("nianling")); jiaoshi.setShengri(rs.getString("shengri")); jiaoshi.setGongzuo(rs.getString("gongzuo")); jiaoshi.setZhuanye(rs.getString("zhuanye")); jiaoshi.setZhaopian(rs.getString("zhaopian")); jiaoshi.setBeizhu(rs.getString("beizhu")); jiaoshiList.add(jiaoshi); } rs.close(); } catch(Exception e) { e.printStackTrace(); } mydb.closed(); HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("new sheet"); HSSFRow row = sheet.createRow(0); HSSFCell cell=row.createCell((short)0); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("教师号"); cell=row.createCell((short)1); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("姓名"); cell=row.createCell((short)2); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("性别"); cell=row.createCell((short)3); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("年龄"); cell=row.createCell((short)4); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("出生日期"); cell=row.createCell((short)5); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("参加工作日期"); cell=row.createCell((short)6); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("专业"); cell=row.createCell((short)7); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("备注"); for(int i=0;i<jiaoshiList.size();i++) { TJiaoshi jiaoshi = (TJiaoshi)jiaoshiList.get(i); row=sheet.createRow(i+1); cell=row.createCell((short)0); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(jiaoshi.getGonghao()); cell=row.createCell((short)1); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(jiaoshi.getXingming()); cell=row.createCell((short)2); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(jiaoshi.getXingbie()); cell=row.createCell((short)3); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(jiaoshi.getNianling()); cell=row.createCell((short)4); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(jiaoshi.getShengri()); cell=row.createCell((short)5); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(jiaoshi.getGongzuo()); cell=row.createCell((short)6); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(jiaoshi.getZhuanye()); cell=row.createCell((short)7); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(jiaoshi.getBeizhu()); } String fujianPath="c:\\教师信息.xls"; try { FileOutputStream fileOut = new FileOutputStream(fujianPath); wb.write(fileOut); fileOut.close(); } catch (Exception e) { e.printStackTrace(); } SmartUpload su = new SmartUpload(); // 新建一个SmartUpload对象 su.initialize(pageContext); // 初始化 su.setContentDisposition(null); // 设定contentDisposition为null以禁止浏览器自动打开文件, //保证点击链接后是下载文件。若不设定,则下载的文件扩展名为 //doc时,浏览器将自动用word打开它。扩展名为pdf时,将用acrobat打开 //su.downloadFile("/uploadPath/file/liu.doc"); // 下载英文文件 su.downloadFile(fujianPath, null, new String(java.net.URLDecoder.decode("教师信息.xls","UTF-8").getBytes(), "ISO8859-1")); // 下载中文文件 //downloadFile(String sourceFilePathName, String contentType, String destFileName) out.clear(); out=pageContext.pushBody(); %> </body> </html>
界面(系统实现)
登陆帐号: a 密码 a
统计信息没有图表。
论文参考
《基于java的坦克大战游戏的设计与实现–毕业论文–【毕业论文】》
https://blog.csdn.net/dearmite/article/details/131962993
配套资源
基于jsp的教师工资管理系统的设计与实现–源代码–【毕业设计】