目录

一、观察者模式

1、开发环境

2、Model模型

3、View视图

4、Controller控制

5、过程演示

二、简单工厂模式

1、开发环境

2、产品类

3、工厂类

4、模式结构

5、用户操作界面与运行结果


一、观察者模式

1、开发环境

总体使用的是SSM(Spring+SpringMVC+MyBatis)框架结构,MVC模式体现在SpringMVC 使用了适配器模式,前端控制器使用 HandlerAdapter 来调用不同的 Controller,然后才是 Controller 调用 Model 产生数据模型; 产生的数据模型将会再次返回到前端控制器,并由前端控制器决定使用不同的模板引擎将页面进行渲染。

2、Model模型

在这个实验中,我们需要完成学籍的查询与录入,model自然是学籍类(StudentDocument.class),该类的属性如下:

StudenDocument类属性

该类的方法包括各个属性的get和set方法,来实现对属性的获取和修改。

根据model来建立数据库的student_document表,具体内容如下:

student_document表

3、View视图

这里的用户操作界面(index.jsp)提供查询所有学籍的超链接和一个录入学籍的表单,供用户进行查询和录入的功能,其界面如下:

用户操作界面index.jsp
<%--Created by IntelliJ IDEA.User: xiachengyueDate: 2021/10/23Time: 8:36 下午To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h3>保存某一学生的学籍,点击保存返回所有学生学籍</h3>
<form action="studentDocument/save" method="post">姓名:<input type="text" name="name"><br>身份证号:<input type="text" name="idNum"><br>性别:<input type="text" name="gender"><br>学号:<input type="text" name="studentNum"><br>学历层次:<input type="text" name="education"><br>学院:<input type="text" name="college"><br>专业:<input type="text" name="major"><br>班级:<input type="text" name="studentClass"><br>入学时间:<input type="text" name="addmission"><br>政治面貌:<input type="text" name="politicalStatus"><br>民族:<input type="text" name="folk"><br>籍贯:<input type="text" name="address"><br>学制:<input type="text" name="schoolSystem"><br><input type="submit" value="保存"/></form>
<a href="studentDocument/findAll">查询所有学籍信息</a>
</body>
</html>

在用户点击查询所有学籍的超链接或在录入后点击保存后,会返回一个list.jsp界面,其包含数据库中所有的学籍信息,其界面如下:

返回所有学籍界面list.jsp
<%--Created by IntelliJ IDEA.User: xiachengyueDate: 2021/10/23Time: 8:39 下午To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>Title</title>
</head>
<body>
<h3>查询所有</h3>
<c:forEach items="${list}" var="document">姓名:${document.name}<br>身份证号:${document.idNum}<br>性别:${document.gender}<br>学号:${document.studentNum}<br>学历层次:${document.education}<br>学院:${document.college}<br>专业:${document.major}<br>班级:${document.studentClass}<br>入学时间:${document.addmission}<br>政治面貌:${document.politicalStatus}<br>民族:${document.folk}<br>籍贯:${document.address}<br>学制:${document.schoolSystem}<br><br>
</c:forEach>
</body>
</html>

4、Controller控制

这里的控制层包括一个StudentDocumentController类,实现查询并返回所有学籍信息、录入学籍信息并返回所有信息的功能。

这里的查询功能通过Spring MVC整合Spring后,调用了studentDoucmentService接口,然后再通过Spring整合Mybatis,调用StudentDocumentDao接口,实现数据库查询,具体实现如下:

SpringMVC:StudentDocumentController中查询所有内容

@Controller
@RequestMapping("/studentDocument")
public class StudentDocumentController {@Autowiredprivate StudentDocumentService studentDocumentService;/*** 查询所有学籍信息* @param model* @return*/@RequestMapping("/findAll")public String findAll(Model model){System.out.println("表现层:查询所有。。");List<StudentDocument> list = studentDocumentService.findAll();model.addAttribute("list",list);return "list";}

Spring:StudentDocumentServiceImpl调用dao层查询所有内容

@Service("studentDocumentService")
public class StudentDocumentServiceImpl implements StudentDocumentService {@Autowiredprivate StudentDocumentDao documentDao;@Overridepublic List<StudentDocument> findAll() {System.out.println("业务层:查询所有。。");return documentDao.findAll();}

Mybatis:StudentDocumentDao实现数据库查询

@Repository
public interface StudentDocumentDao {//查询所有学籍信息@Select("select * from student_document")public List<StudentDocument> findAll();

在录入学籍信息时,首先通过 StudentDocumentController获取表单中输入的数据,整合成一个StudentDocument类,最后返回list.jsp页面。在调用关系中,通过Spring MVC整合Spring后,调用了studentDoucmentService接口,然后再通过Spring整合Mybatis,调用StudentDocumentDao接口,实现插入数据库。

SpringMVC:StudentDocumentController中保存录入信息并返回list.jsp界面

    /*** 保存* @param* @return*/@RequestMapping("/save")public void save(StudentDocument document, HttpServletRequest request,HttpServletResponse response) throws IOException {studentDocumentService.saveDocument(document);response.sendRedirect(request.getContextPath()+"/studentDocument/findAll");return ;}

Spring:StudentDocumentServiceImpl调用dao层实现插入录入信息

    @Overridepublic void saveDocument(StudentDocument document) {System.out.println("业务层:保存。。");documentDao.saveDocument(document);}

Mybatis:StudentDocumentDao实现数据库的插入

    //保存学籍信息@Insert("insert into student_document (name,idNum,gender,studentNum,education,college,major,studentClass,addmission,politicalStatus,folk,address,schoolSystem) values (#{name},#{idNum},#{gender},#{studentNum},#{education},#{college},#{major},#{studentClass},#{addmission},#{politicalStatus},#{folk},#{address},#{schoolSystem})")public void saveDocument(StudentDocument document);

5、过程演示

测试录入功能:

启动服务器,进入http://localhost:8080/certificate_war_exploded/index.jsp ,在表单中输入张三同学的学籍信息

录入张三同学的信息

点击保存后,系统会返回所有的学籍信息。

返回所有信息

查看数据库,确实存在张三同学的信息。

student_document表中内容

测试查询功能:

先在数据库中插入多条学籍信息,内容如下:

student_document表中内容

点击index.jsp中查询所有学籍信息的超链接,在list.jsp中确实返回了所有的信息。

list.jsp返回所有学籍信息

二、简单工厂模式

1、开发环境

IDE使用Visual Studio 2019,使用C++编程实现。

2、产品类

在本实验中,需实现学籍的查询与录入,定义抽象产品类StudentDocument,其中声明产品类公共事务方法,方法均为虚方法,在具体产品类中实现。定义具体产品类undergraduate(本科生类),继承自StudentDocument类,实现父类声明的虚方法。定义具体产品类postgraduate(研究生类),继承自StudentDocument类,实现父类声明的虚方法。 其中,在StudentDocument类声明以下方法和属性,其中属性为各种学籍信息,方法包括设置学籍信息的方法及对学籍信息实现增删改查的方法。

#pragma once
using namespace std;
#include<string>
class StudentDocument
{public://方法virtual void setname(string name1) = 0;virtual void setstudentNum(string studentNum1) = 0; virtual void setgender(string a) = 0;virtual void seteducation(string a) = 0;virtual void setcollege(string a) = 0;virtual void setmajor(string a) = 0;virtual void setclass1(string a) = 0;virtual void setaddmissionYear(string a) = 0;virtual void setpoliticalStatus(string a) = 0;virtual void setfolk(string a) = 0;virtual void setaddress(string a) = 0;virtual void setschoolSystem(string a) = 0;virtual void setidNum(string a) = 0;virtual string getDocument() = 0;virtual void postDocument() = 0;virtual void modifyDocument() = 0;virtual void deleteDocument() = 0;//属性string name;string studentNum;string gender;string education;string college;string major;string class1;string addmissionYear;string politicalStatus;string folk;string address;string schoolSystem;string idNum;
};

3、工厂类

定义DocumentFactory类,封装getStudentDocument方法,根据传入的参数不同创建、返回不同的具体产品类的对象,当参数为1,创建并返回undergraduate类对象,当参数为2,创建并返回postgraduate类对象。工厂类定义代码如下:

#include "DocumentFactory.h"
StudentDocument* DocumentFactory::getStudentDocument(int type) {StudentDocument* s1 = NULL;switch (type){case 1: s1 = new undergraduate(); return s1; break;case 2:s1 = new postgraduate(); return s1; break;default:break;}
}

4、模式结构

图4.1 简单工厂模式的结构

5、用户操作界面与运行结果

main.cpp代码如下,其中根据用户输入的数字创建具体产品类的对象,然后调用产品类的方法对学籍信息进行设置。

#include "StudentDocument.h"
using namespace std;
#include<string>
#include "undergraduate.h"
#include"DocumentFactory.h"
#include <iostream>
int main()
{StudentDocument* pstudentdocument = NULL;int type;cout << "请输入要创建的学籍信息,1代表本科生学籍信息,2代表研究生学籍信息\n";cin >> type;pstudentdocument = DocumentFactory::getStudentDocument(type);string ans;if (type == 1) {ans = "本科生";}if (type == 2) {ans = "研究生";}cout << "已创建"+ans+"的学籍,请按以下要求上传学籍信息\n";cout << "请输入姓名:";string name;cin >> name;string studentNum1;cout << "请输入学号:";cin >> studentNum1;string gender;cout << "请输入性别:";cin >> gender;string education;cout << "请输入年级:";cin >> education;string college;string major;if (type == 1) {cout << "请输入学院:";cin >> college;cout << "专业:";cin >> major;pstudentdocument->setcollege(college);pstudentdocument->setmajor(major);}if (type == 2) {cout << "请输入方向:";cin >> college;cout << "导师:";cin >> major;pstudentdocument->setcollege(college);pstudentdocument->setmajor(major);}pstudentdocument->setname(name);pstudentdocument->setstudentNum(studentNum1);pstudentdocument->setgender(gender);pstudentdocument->seteducation(education);cout << ans<<"学籍信息创建完毕:\n" << pstudentdocument->getDocument();
}

图5.1 用户操作界面与运行结果

图5.2 用户操作界面与运行结果

学历学籍管理系统-MVC和工厂模式实现学籍查询与录入相关推荐

  1. 基于php的工厂管理系统,PHP设计模式——工厂模式

    工厂模式,工厂方法或者类生成对象,而不是在代码中直接new. 使用工厂模式,可以避免当改变某个类的名字或者方法之后,在调用这个类的所有的代码中都修改它的名字或者参数. 示例: Test1.php cl ...

  2. 学生学籍管理系统python_使用Python实现 学生学籍管理系统

    大家好,今天跟大家分享一个用Python实现的学生学籍管理系统: 该代码主体由五个函数组成: 1.add_stu() 添加 2.del_stu() 删除 3.print_stu()打印 4.exit_ ...

  3. 学籍管理系统c语言程序设计,c语言学籍信息管理系统设计

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 使用下面的数据设计一个简单的学籍管理系统. 学生基本信息文件(A.TXT)极其内容: 学号 姓名 性别 宿舍号码 电话号码 01 张成成 男 501 87 ...

  4. 用python写学籍管理系统_使用Python实现 学生学籍管理系统

    大家好,今天跟大家分享一个用Python实现的学生学籍管理系统: 该代码主体由五个函数组成: 1.add_stu() 添加 2.del_stu() 删除 3.print_stu()打印 4.exit_ ...

  5. 简单的学籍管理系统c语言,c语言学生学籍管理系统—精简版.pdf

    include stdio h include stdlib h include string h int shoudsave 0 struct student char num 10 学号 char ...

  6. c语言综合设计作业学籍管理系统,C语言课程设计----学生学籍管理系统

    匿名用户 1级 2014-11-13 回答 #include #include #include structstud { longnum; charname[20]; doublescore; }; ...

  7. [内附完整源码和文档] 基于Java的学生学籍管理系统

    摘 要 学生学籍管理系统是一个教育单位不可缺少的重要部分之一,学生学籍内容对学校的管理者和决策者来说都是至关重要的,而传统的学籍管理方式十分的复杂繁琐.低效率,在计算机普及的现代,开发一个高效简便学生 ...

  8. 学生学籍管理系统_管理员登陆对学生的信息进行操作

    MInterface.java package studentManage;import java.awt.*; import java.awt.event.*; import javax.swing ...

  9. 基于vue2+element+springboot+mybatis+jpa+mysql的学籍管理系统

    目录 整套系统源码下载 一.开发背景 二.用到的技术 三.开发使用的IDE 四.搭建开发环境 五.启动项目 六.学籍管理系统使用说明 七.结语 八.源码下载 基于vue2+element+spring ...

  10. 【软件设计模式】工厂模式(简单工厂模式、一般工厂模式、抽象工厂模式)

    概述: 工厂模式把对象的创建交由某个特定的类来实现,该类为工厂类,该类的方法称为工厂方法,仅仅负责创建对象,从而将客户端复杂的对象创建语句实现解耦.责任分离,方便扩展和维护. 分类: 工厂模式分为简单 ...

最新文章

  1. JavaSE学习笔记(三)——运算符与控制语句
  2. realme怎么互传_realme真我X7 Pro首发体验:非常轻快,颜值不赖
  3. 一张图帮你记忆,Spring Boot 应用在启动阶段执行代码的几种方式
  4. OVS对VXLAN报文解封包
  5. 实现键盘录入的第二种方式。。。。。
  6. SQLyog连接虚拟机中docker中的mysql过程详解,并解决2003错误
  7. 网络虚拟化技术(一): linux网络虚拟化,网络虚拟化技术(一): Linux网络虚拟化...
  8. linux mate eth0已下线,Linux Mint 18 Cinnamon 版和 MATE 版已经可以下载了
  9. jsp mysql 音乐网站_Maven+JSP+Servlet+C3P0+Mysql实现的音乐库管理系统
  10. JS难点之hoist
  11. java船_Java-货船
  12. 【最新砍价小程序源码】
  13. 计算机仿真技术物流,基于计算机仿真技术的物流实验室建设
  14. win10 ie浏览器安装Flash Player Debugger解决方案
  15. Thymeleaf指定背景图片以及图片如何调整大小
  16. 赶集网–免费发布信息
  17. Python学习笔记(7)——Matplotlib中的Axes.plot(绘制点、线和标记)的用法
  18. 不符合正态分布的配对数据也有自己的统计方法。
  19. java常用监控命令
  20. QQ快捷登录需要在 AndroidManifest.xml 注册添加如下信息,sdk中提供开始配置少了回调的配置,报错

热门文章

  1. AndroidMPChart——BarChart
  2. 腾讯地图如何根据经纬度获取地址
  3. SWI-Prolog的下载与使用
  4. 结构化程序设计方法:自顶向下,逐步求精
  5. 结构化程序设计(structured programming)
  6. HITB 2020:二进制漏洞挖掘仍是会议主流方向
  7. VFL-SFP业界首个光纤可视化故障定位器SFP模块
  8. PR13.0 2019 导入图片仅显示部分解决方法
  9. Android中文按拼音排序
  10. 积分极限定理+勒贝格控制收敛定理+高数