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; } }
总结:不熟练,多加练习,多学多练

浙公网安备 33010602011771号