2023年软件工程开学考试

 2021级《软件工程》

课前测试试卷(180分钟)

 

河北省环保监测中心网络新闻发布系统(卷面成绩40分,占课程过程考核20分)

 

1、项目需求:

河北省环保监测中心网络新闻为搭建公众信息交流平台,决定建立新闻发布平台。新闻发布平台按内容包括中心新闻、企业环保信息发布等若干新闻栏目,新闻撰稿人可登陆平台发布新闻,每个新闻栏目至少有一位新闻栏目管理员,负责审查新闻撰稿人所发的新闻稿件,在审查通过后,对应新闻才可以显示在对应新闻栏目上,一般用户登录后才可以看到,另外还可以删除过时或无用的信息。另外,系统管理员可以对用户进行管理和对新闻栏目进行调整。新闻发布流程如下:

2.系统要求与功能设计

2.1 页面要求

(1)通过浏览器查看,能适应常用分辨率;(1分)

(2)布局合理、结构清晰、页面完整;(1分)

package util;
import java.sql.*;
public class Util {

    public static String db_url = "jdbc:mysql://localhost:3306/kaixue?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone = GMT&allowPublicKeyRetrieval=true";
    public static String db_user = "root";
    public static String db_pass = "zbw170910";

    public static Connection getConn () {
        Connection conn = null;

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");//加载驱动
            System.out.println("连接成功");//检查数据库是否连接,可删除
            conn = DriverManager.getConnection(db_url, db_user, db_pass);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return conn;
    }
    public static void close (Statement state, Connection conn) {
        if (state != null) {
            try {
                state.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    public static void close (ResultSet rs, Statement state, Connection conn) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (state != null) {
            try {
                state.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) throws SQLException {
    }
}

  

(3)网站页面整体风格统一;(1分)

(4)首页为用户登录页面,不同角色用户登录后,进入相应的功能页,要求密码在数据库中加密;(4分)

(5)新闻撰稿人功能页:在线撰写与修改稿件、查看已写稿件及修改意见;

(6)普通用户功能页:浏览相应栏目新闻、用户评论新闻(可匿名)、浏览其他用户评论;

(7)新闻栏目管理员功能页:浏览与管理本栏目待发与已发新闻;

package servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;

import Bean.*;

import service.Service;

/**
 * Servlet implementation class Servlet
 */
public class Servlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	Service service = new Service();   
    /**
     * @see HttpServlet#HttpServlet()
     */
	/**
	* 方法选择
	*/
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	req.setCharacterEncoding("utf-8");
	String method = req.getParameter("method");
	if ("ulogin".equals(method)) {
	ulogin(req, resp);
	} else if("xlogin".equals(method)) {
		xlogin(req, resp);
	}else if("nadd".equals(method)) {
		nadd(req, resp);
	}else if("nupd".equals(method)) {
		nupd(req, resp);
	}else if("ncha".equals(method)) {
		ncha(req, resp);
	}/*else if("kadd".equals(method)) {
		kadd(req, resp);
	}*/
	}
	/**
	* 查询新闻
	* @param req
	* @param resp
	* @throws IOException
	* @throws ServletException
	*/
	private void ncha(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO 自动生成的方法存根
		req.setCharacterEncoding("utf-8");
		String title = req.getParameter("title");
		String date = req.getParameter("date");
		news nn =service.ncha(title,date);
		if(nn == null) {
		req.setAttribute("message", "查询失败!");
		req.getRequestDispatcher("nliu.jsp").forward(req,resp);
		} else {
		req.setAttribute("nn", nn);}
		req.getRequestDispatcher("nliu.jsp").forward(req,resp);
		}
	/**
	* 修改新闻
	* @param req
	* @param resp
	* @throws IOException
	* @throws ServletException
	*/
	private void nupd(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
	req.setCharacterEncoding("utf-8");
	//获取数据
	String title = req.getParameter("title");
	String theme = req.getParameter("theme");
	String author = req.getParameter("author");
	String date = req.getParameter("date");
	news nn = new news(title,theme,author,date);
	int a=service.nupd(nn);
	//修改后消息显示
		if(a==1) {
		req.setAttribute("message", "修改成功");
		req.getRequestDispatcher("nupd.jsp").forward(req,resp);
		} 
		if(a==0){
		req.setAttribute("message", "修改失败,请重新录入");
		req.getRequestDispatcher("nupd.jsp").forward(req,resp);
		}

	}
	/**
     *发表新闻
     * @param req
     * @param resp
	 * @throws IOException
     * @throws ServletException
     */
	private void nadd(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO 自动生成的方法存根
		req.setCharacterEncoding("utf-8");
		//获取数据
		String title = req.getParameter("title");
		String theme = req.getParameter("theme");
		String author = req.getParameter("author");
		String date = req.getParameter("date");
		news nn = new news(title,theme,author,date);
		int a=service.nadd(nn);
		//添加后消息显示
			if(a==1) {
			req.setAttribute("message", "发布成功");
			req.getRequestDispatcher("xMenu.jsp").forward(req,resp);
			} 
			if(a==0){
			req.setAttribute("message", "发布失败");
			req.getRequestDispatcher("xadd.jsp").forward(req,resp);
			}
	}
	/**
	* 用户登录
	* @param req
	* @param resp
	* @throws IOException
	* @throws ServletException
	*/
	private void ulogin(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO 自动生成的方法存根
		req.setCharacterEncoding("utf-8");
		String uid = req.getParameter("uid");
		String password = req.getParameter("password");
		boolean flag =service.ulogin(uid,password);
		if(flag) {
		req.setAttribute("message", "登录成功");
		req.getRequestDispatcher("uMenu.jsp").forward(req,resp);
		} else {
		req.setAttribute("message", "登录成功");
		req.getRequestDispatcher("uMenu.jsp").forward(req,resp);
		
		}
	}
	/**
	* 撰稿人登录
	* @param req
	* @param resp
	* @throws IOException
	* @throws ServletException
	*/
	private void xlogin(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO 自动生成的方法存根
		req.setCharacterEncoding("utf-8");
		String xid = req.getParameter("xid");
		String mm = req.getParameter("mm");
		boolean flag =service.ulogin(xid,mm);
		if(flag) {
		req.setAttribute("message", "登录成功");
		req.getRequestDispatcher("xMenu.jsp").forward(req,resp);
		} else {
		req.setAttribute("message", "登录成功");
		req.getRequestDispatcher("xMenu.jsp").forward(req,resp);
		
		}
	}
    public Servlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

  

(8)系统管理功能页:用户注册、用户权限管理、新闻栏目管理;

(9)对每页中的查询结果推荐采用分页显示。

2.2 功能要求

(1)在线撰写新闻稿件:新闻撰稿人在线撰写新闻,选择栏目,正式提交;(2分)

(2)查看修改意见:新闻撰稿人查看新闻栏目管理员提出的修改意见;(1分)

(3)修改新闻稿件:新闻撰稿人根据修改意见可以对新闻进行修改;(1分)

(4)查询已经撰写的新闻:新闻撰稿人可以查看自己已经撰写的新闻;(1分)

(5)浏览新闻:普通用户可以浏览栏目的新闻(按照时间倒排);(1分)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

图1 新闻发布流程

 

(6)发表评论回复:普通用户可以对新闻进行发表评论,可选择匿名回复;(1分)

(7)按照一定条件查询新闻:栏目管理员可以按照时间段,新闻关键字等条件进行查询;(2分)

(8)管理待发与已发新闻:新闻栏目管理员可以批准新闻发布、删除不合适新闻、给出撰稿人修改意见、对已发的过时新闻进行删除;(2分)

(9)管理新闻评论回复:新闻栏目管理员可以查看、删除、禁止新闻的回复;(2分)

(10)管理新闻栏目:新开新闻栏目、删除新闻栏目、合并新闻栏目、更改新闻栏目的基本信息;(2分)

(11)用户管理:管理员可以查询用户、批准新用户、暂停用户、为用户赋予角色,普通用户可以修改用户资料。(2分)

2.1,2.2 评分标准:以上各项分值为页面要求和功能要求,各项分值合计(24分);除此以外设计出合理的数据库和数据表(3分),数据库连接正常(2分),设计出用户权限管理(6分)。

2.3 网站发布

(1)网站制作完成后需指定一台机器作为服务器发布。

(2)在其他主机上可正常浏览。

评分标准:能够在Tomcat服务器中正确部署(3分),其它主机可正常浏览(2分);

 

2.4 注意事项

(1)网站首页(登录页) 统一使用index.*命名。(*表示源文件的后缀名)。

(2)请选手填写以下表格:

网站文件路径

 

网站数据库名称

 

角色名

登录名

密码

 

 

 

 

 

 

 

 

 

 

 

 

 

package com.dao;
import java.sql.*;
import com.util.Util;

import com.Bean.*;

public class Dao {
	/**
	* 学生修改个人信息
	*
	* @param id
	* @return
	*/
	public int sgai (student stu) {
		String sql = "update student set name='" + stu.getName() + "', sex='" + stu.getSex() +"', age='" + stu.getAge() +"', profession='" + stu.getProfession() +"', ban='" + stu.getBan()
		+ "' where ID='" + stu.getID() + "'";
	Connection conn = Util.getConn();
	Statement state = null;
	int a = 0;
	try {
	state = conn.createStatement();
	a = state.executeUpdate(sql);
	//System.out.println(sql);
	} catch (SQLException e) {
	e.printStackTrace();
	} finally {
	Util.close(state, conn);
	}
	return a;
	}
    /**
	* 学生登录
	*
	* @param id
	* @return
     * @throws SQLException 
	*/
	
	public  boolean slogin(String ID1,String password1) 
	{
	String sql = "select * from student where ID = '" + ID1 + "'and password = '"+password1+"'";
	Connection conn = Util.getConn();
	Statement state = null;
	ResultSet rs = null;
	System.out.println(sql);
	try {
	state = conn.createStatement();
	rs = state.executeQuery(sql);
	System.out.println(rs.next());
	while(rs.next()) {
	return true;
	}
	} catch (Exception e) {
	e.printStackTrace();
	} finally {
	Util.close(rs, state, conn);
	}
	return false;
	}
	
	/**
	* 学生修改密码
	*
	* @param id
	* @return
	*/
	public int smima(student stu) {
	String sql = "update student set password='"  + stu.getPassword()+ "' where ID='" + stu.getID() + "'";
	Connection conn = Util.getConn();
	Statement state = null;
	int a = 0;
	try {
	state = conn.createStatement();
	a = state.executeUpdate(sql);
	System.out.println(sql);
	System.out.println(a);
	} catch (SQLException e) {
	e.printStackTrace();
	} finally {
	Util.close(state, conn);
	}
	return a;
	}
	/**
	* 教师修改个人信息
	*
	* @param id
	* @return
	*/
	public int tgai (teacher tch) {
		String sql = "update teacher set tname='" + tch.getTname() + "', zhicheng='" + tch.getZhicheng() +"', xueyuan='" + tch.getXueyuan()
		+ "' where teacherID='" + tch.getTeacherID() + "'";
	Connection conn = Util.getConn();
	Statement state = null;
	int a = 0;
	try {
	state = conn.createStatement();
	a = state.executeUpdate(sql);
	//System.out.println(sql);
	} catch (SQLException e) {
	e.printStackTrace();
	} finally {
	Util.close(state, conn);
	}
	return a;
	}
	 /**
		* 教师登录
		*
		* @param id
		* @return
	     * @throws SQLException 
		*/
		
		public static boolean tlogin(String teacherID1,String mima1) 
		{
		String sql = "select * from teacher where teacherID = '" + teacherID1 + "'and mima = '"+mima1+"'";
		Connection conn = Util.getConn();
		Statement state = null;
		ResultSet rs = null;
		System.out.println(sql);
		try {
		state = conn.createStatement();
		rs = state.executeQuery(sql);
		System.out.println(rs.next());
		while (rs.next()) {
		return true;
		}
		} catch (Exception e) {
		e.printStackTrace();
		} finally {
		Util.close(rs, state, conn);
		}
		return false;
		}
		/**
		* 教师修改密码
		*
		* @param id
		* @return
		*/
		public int tmima(teacher tch) {
		String sql = "update teacher set mima='"  + tch.getMima()+ "' where teacherID='" + tch.getTeacherID() + "'";
		Connection conn = Util.getConn();
		Statement state = null;
		int a = 0;
		try {
		state = conn.createStatement();
		a = state.executeUpdate(sql);
		System.out.println(sql);
		System.out.println(a);
		} catch (SQLException e) {
		e.printStackTrace();
		} finally {
		Util.close(state, conn);
		}
		return a;
		}
		/**
		* 管理员登录
		*
		* @param id
		* @return
	     * @throws SQLException 
		*/
		
		public static boolean mlogin(String UID1,String mm1) 
		{
		String sql = "select * from guanli where UID = '" + UID1 + "'and mima = '"+mm1+"'";
		Connection conn = Util.getConn();
		Statement state = null;
		ResultSet rs = null;
		System.out.println(sql);
		try {
		state = conn.createStatement();
		rs = state.executeQuery(sql);
		System.out.println(rs.next());
		while (rs.next()) {
		return true;
		}
		} catch (Exception e) {
		e.printStackTrace();
		} finally {
		Util.close(rs, state, conn);
		}
		return false;
		}
		/**
		* 删除学生信息
		*
		* @param id
		* @return
		*/
		public int sdel (String ID) {
		String sql = "delete from `student` where ID='" + ID + "'";
		Connection conn = Util.getConn();
		Statement state = null;
		int a = 0;
		try {
		state = conn.createStatement();
		a = state.executeUpdate(sql);
		} catch (SQLException e) {
		e.printStackTrace();
		} finally {
		Util.close(state, conn);
		}
		return a;
		}
		/**
		* 删除教师版信息
		*
		* @param id
		* @return
		*/
		public int tdel (String teacherID) {
		String sql = "delete from `teacher` where teacherID='" + teacherID + "'";
		Connection conn = Util.getConn();
		Statement state = null;
		int a = 0;
		try {
		state = conn.createStatement();
		a = state.executeUpdate(sql);
		} catch (SQLException e) {
		e.printStackTrace();
		} finally {
		Util.close(state, conn);
		}
		return a;
		}
		/**
		* 增加学生信息
		*
		* @param id
		* @return
		*/
		public int add1(student stu) {
			String sql="insert into `student`(name,sex,age,profession,ban,ID,password) values('" + stu.getName() + "','" + stu.getSex() + "','" + stu.getAge() + "','" + stu.getProfession()+"','"+ stu.getBan()+"','"+stu.getID()+"','"+stu.getPassword()+"')";
			//创建数据库链接
			Connection conn = Util.getConn();
			Statement state = null;
			int a = 0;
			try {
			state = conn.createStatement();
			a = state.executeUpdate(sql);
			/*
			 * 对下方注释处的解释:检查SQL语句是否正确执行,可删除,因此我在其余功能在检验之后将其删除了
			 */
			//System.out.println(a);
			} catch (Exception e) {
			e.printStackTrace();
			} finally {
			//关闭连接
			Util.close(state, conn);
			}
			return a;
		}
		/**
		* 增加教师信息
		*
		* @param id
		* @return
		*/
		public int add2(teacher tch) {
			String sql="insert into `teacher`(tname,zhicheng,xueyuan,teacherID,mima) values('" + tch.getTname() + "','" + tch.getZhicheng() + "','" + tch.getXueyuan() + "','" + tch.getTeacherID()+ "','"+tch.getMima()+"')";
			//创建数据库链接
			Connection conn = Util.getConn();
			Statement state = null;
			int a = 0;
			try {
			state = conn.createStatement();
			a = state.executeUpdate(sql);
package Bean;

public class news {
private String title;
private String theme;
private String author;
private String date;
private String pinglun;
public news(String title, String theme, String author, String date) {
	// TODO 自动生成的构造函数存根
	this.title=title;
	this.theme=theme;
	this.author=author;
	this.date=date;
}
public String getTitle() {
	return title;
}
public void setTitle(String title) {
	this.title = title;
}
public String getTheme() {
	return theme;
}
public void setTheme(String theme) {
	this.theme = theme;
}
public String getAuthor() {
	return author;
}
public void setAuthor(String author) {
	this.author = author;
}
public String getDate() {
	return date;
}
public void setDate(String date) {
	this.date = date;
}
public String getPinglun() {
	return pinglun;
}
public void setPinglun(String pinglun) {
	this.pinglun = pinglun;
}
}

  

package Bean;

public class user {
	private String uid;
	private String password;
	public String getUid() {
		return uid;
	}
	public void setUid(String uid) {
		this.uid = uid;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
}

  

package Bean;

public class xin {
	private String xid;
	private String mm;
	public String getXid() {
		return xid;
	}
	public void setXid(String uid) {
		this.xid = xid;
	}
	public String getMm() {
		return mm;
	}
	public void setMm(String mm) {
		this.mm = mm;
	}
	
}

  

package service;
import dao.*;


import Bean.*;

public class Service {
	Dao dao=new Dao();
	public boolean ulogin(String uid, String password) {
		// TODO 自动生成的方法存根
		boolean f=false;
		if( dao.ulogin(uid, password)) {
			f=true;
		}
		return f;
	}
	public int nadd(news nn) {
		// TODO 自动生成的方法存根
		if(dao.nadd(nn)>0){
            return 1;
        }
        else{
            return 0;
        }
	}
	public int nupd(news nn) {
		// TODO 自动生成的方法存根
		if(dao.nupd(nn)>0){
            return 1;
        }
        else{
            return 0;
        }
	}
	public news ncha(String title, String date) {
		// TODO 自动生成的方法存根
		
		return Dao.ncha(title,date);
		}
	

}

  

//System.out.println(a); } catch (Exception e) { e.printStackTrace(); } finally { //关闭连接 Util.close(state, conn); } return a; } }

  总结:不熟练,多加练习,多学多练

posted @ 2023-02-13 20:01  十乂  阅读(29)  评论(0)    收藏  举报