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

目录

一、观察者模式

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),该类的属性如下:

学历学籍管理系统-MVC和工厂模式实现学籍查询与录入_第1张图片 StudenDocument类属性

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

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

student_document表

3、View视图

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

用户操作界面index.jsp
<%--
  Created by IntelliJ IDEA.
  User: xiachengyue
  Date: 2021/10/23
  Time: 8:36 下午
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


保存某一学生的学籍,点击保存返回所有学生学籍

姓名:
身份证号:
性别:
学号:
学历层次:
学院:
专业:
班级:
入学时间:
政治面貌:
民族:
籍贯:
学制:
查询所有学籍信息

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

返回所有学籍界面list.jsp
<%--
  Created by IntelliJ IDEA.
  User: xiachengyue
  Date: 2021/10/23
  Time: 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" %>


    Title


查询所有

姓名:${document.name}
身份证号:${document.idNum}
性别:${document.gender}
学号:${document.studentNum}
学历层次:${document.education}
学院:${document.college}
专业:${document.major}
班级:${document.studentClass}
入学时间:${document.addmission}
政治面貌:${document.politicalStatus}
民族:${document.folk}
籍贯:${document.address}
学制:${document.schoolSystem}

4、Controller控制

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

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

SpringMVC:StudentDocumentController中查询所有内容

@Controller
@RequestMapping("/studentDocument")
public class StudentDocumentController {

    @Autowired
    private StudentDocumentService studentDocumentService;

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

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

@Service("studentDocumentService")
public class StudentDocumentServiceImpl implements StudentDocumentService {

    @Autowired
    private StudentDocumentDao documentDao;
    @Override
    public List findAll() {
        System.out.println("业务层:查询所有。。");
        return documentDao.findAll();
    }

Mybatis:StudentDocumentDao实现数据库查询

@Repository
public interface StudentDocumentDao {

    //查询所有学籍信息
    @Select("select * from student_document")
    public List 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层实现插入录入信息

    @Override
    public 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
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、模式结构

学历学籍管理系统-MVC和工厂模式实现学籍查询与录入_第2张图片 图4.1 简单工厂模式的结构

 

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

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

#include "StudentDocument.h"
using namespace std;
#include
#include "undergraduate.h"
#include"DocumentFactory.h"
#include 
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();
}
学历学籍管理系统-MVC和工厂模式实现学籍查询与录入_第3张图片 图5.1 用户操作界面与运行结果

 

学历学籍管理系统-MVC和工厂模式实现学籍查询与录入_第4张图片 图5.2 用户操作界面与运行结果

 

 

 

 

你可能感兴趣的:(1024程序员节)