需求:
1.设计一个简单的网上名片管理系统,实现名片的增、删、改、查等操作。该名片管理系统包括如下功能:
(1)用户登录与注册
用户登录:在登录时,如果用户名和密码正确,进入系统页面。
用户注册:新用户应该先注册,然后再登录该系统。
(2)名片管理
增加名片:以仿真形式(按常用的名片格式)增加名片信息。
修改名片:以仿真形式(按常用的名片格式)修改名片信息。
查询名片:以模糊查询方式查询名片。
删除名片:名片的删除由2种方式,即把名片移到回收站,把名片彻底删除。
(3)回收站管理
还原:把回收站中的名片还原回收。
彻底删除:把名片彻底从回收站删除。
浏览/查询:可以模糊查询、浏览回收站中的名片。
实现步骤:
-
数据库设计
首先,需要设计数据库表的结构。根据需求,我们可以设计出如下的表结构:
- 用户表:user
- 名片表:card
- 回收站表:trash
其中,user表、card表和trash表之间的关系是一对多的关系。
2.用户登录与注册
接下来,需要实现用户的登录和注册功能。可以通过如下方式来实现:
- 用户登录
首先,创建一个login.jsp页面用于用户登录,其中包括用户名和密码的输入表单,以及登录按钮。在用户输入用户名和密码后,通过JDBC连接数据库,查询用户表中是否存在该用户名和密码。如果存在,则将用户信息保存到session中,并重定向到系统主页面;如果不存在,则返回错误信息。
下面是login.jsp的示例代码:
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<html>
<head>
<title>用户登录 - 网上名片管理系统</title>
</head>
<body>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
if (username != null && password != null) {
// 检查用户是否存在
String url = "jdbc:mysql://localhost:3306/cards?useSSL=false";
String user = "root";
String pass = "password";
Connection conn = DriverManager.getConnection(url, user, pass);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM user WHERE username='" + username + "' AND password='" + password + "'");
if (rs.next()) {
// 登录成功,保存用户信息到session并跳转到主页面
int userId = rs.getInt("id");
String createTime = rs.getString("create_time");
session.setAttribute("userId", userId);
session.setAttribute("username", username);
session.setAttribute("createTime", createTime);
response.sendRedirect("main.jsp");
} else {
// 用户名或密码错误,返回错误信息
out.println("<p>用户名或密码错误,请重试。</p>");
}
rs.close();
stmt.close();
conn.close();
}
%>
<form method="post" action="login.jsp">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username" value="<%=request.getParameter("username")%>"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="登录"></td>
</tr>
</table>
</form>
</body>
</html>
- 用户注册
创建一个register.jsp页面用于用户注册,其中包括用户名和密码的输入表单,以及注册按钮。在用户输入用户名和密码后,通过JDBC连接数据库,插入新用户信息到用户表中,并重定向到用户登录页面。
下面是register.jsp的示例代码:
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<html>
<head>
<title>用户注册 - 网上名片管理系统</title>
</head>
<body>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
if (username != null && password != null) {
// 检查用户名是否已经被注册
String url = "jdbc:mysql://localhost:3306/cards?useSSL=false";
String user = "root";
String pass = "password";
Connection conn = DriverManager.getConnection(url, user, pass);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM user WHERE username='" + username + "'");
if (rs.next()) {
// 用户名已经被注册,返回错误信息
out.println("<p>该用户名已经被注册,请更换用户名再重试。</p>");
} else {
// 插入新用户信息到用户表中
int rows = stmt.executeUpdate("INSERT INTO user (username, password, create_time) VALUES ('" +
username + "', '" + password + "', NOW())");
if (rows == 1) {
// 注册成功,重定向到登录页面
response.sendRedirect("login.jsp");
} else {
// 注册失败,返回错误信息
out.println("<p>注册失败,请稍后再试。</p>");
}
}
rs.close();
stmt.close();
conn.close();
}
%>
<form method="post" action="register.jsp">
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username" value="<%=request.getParameter("username")%>"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="注册"></td>
</tr>
</table>
</form>
</body>
</html>
3. 名片管理功能
完成用户登录和注册功能后,接下来需要实现名片的增加、编辑、删除和查询等功能。
- 名片增加 创建一个add_card.jsp页面用于添加新名片,其中包括姓名、公司名、职位名称、公司电话、手机号码、邮箱、办公地址和备注等输入表单,以及提交按钮。在用户提交表单后,通过JDBC连接数据库,插入新名片信息到名片表中,并重定向到系统主页面。
下面是add_card.jsp的示例代码:
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<html>
<head>
<title>添加新名片 - 网上名片管理系统</title>
</head>
<body>
<%
int userId = (int) session.getAttribute("userId");
String name = request.getParameter("name");
String company = request.getParameter("company");
String title = request.getParameter("title");
String phone = request.getParameter("phone");
String mobile = request.getParameter("mobile");
String email = request.getParameter("email");
String address = request.getParameter("address");
String note = request.getParameter("note");
if (name != null && company != null && title != null && phone != null && mobile != null && email != null && address != null) {
// 插入新名片信息到名片表中
String url = "jdbc:mysql://localhost:3306/cards?useSSL=false";
String user = "root";
String pass = "password";
Connection conn = DriverManager.getConnection(url, user, pass);
Statement stmt = conn.createStatement();
int rows = stmt.executeUpdate("INSERT INTO card (user_id, name, company, title, phone, mobile, email, address, note, discard, create_time, update_time) VALUES (" +
userId + ", '" + name + "', '" + company + "', '" + title + "', '" + phone + "', '" + mobile + "', '" + email + "', '" + address + "', '" + note + "', 0, NOW(), NOW())");
if (rows == 1) {
// 添加名片成功,重定向到主页面
response.sendRedirect("main.jsp");
} else {
// 添加名片失败,返回错误信息
out.println("<p>添加名片失败,请稍后再试。</p>");
}
stmt.close();
conn.close();
}
%>
<h2>添加新名片</h2>
<form method="post" action="add_card.jsp">
<table>
<tr>
<td>姓名:</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>公司名:</td>
<td><input type="text" name="company"></td>
</tr>
<tr>
<td>职位名称:</td>
<td><input type="text" name="title"></td>
</tr>
<tr>
<td>公司电话:</td>
<td><input type="text" name="phone"></td>
</tr>
<tr>
<td>手机号码:</td>
<td><input type="text" name="mobile"></td>
</tr>
<tr>
<td>邮箱:</td>
<td><input type="text" name="email"></td>
</tr>
<tr>
<td>办公地址:</td>
<td><input type="text" name="address"></td>
</tr>
<tr>
<td>备注:</td>
<td><textarea name="note"></textarea></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交"></td>
</tr>
</table>
</form>
</body>
</html>
-
名片编辑
创建一个edit_card.jsp页面用于编辑已有名片,其中包括姓名、公司名、职位名称、公司电话、手机号码、邮箱、办公地址和备注等输入表单,以及提交按钮。在用户提交表单后,通过JDBC连接数据库,更新名片表中对应的名片信息,并重定向到系统主页面。
下面是edit_card.jsp的示例代码:
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<html>
<head>
<title>编辑名片 - 网上名片管理系统</title>
</head>
<body>
<%
int userId = (int) session.getAttribute("userId");
int cardId = Integer.parseInt(request.getParameter("id"));
String name = request.getParameter("name");
String company = request.getParameter("company");
String title = request.getParameter("title");
String phone = request.getParameter("phone");
String mobile = request.getParameter("mobile");
String email = request.getParameter("email");
String address = request.getParameter("address");
String note = request.getParameter("note");
if (name != null && company != null && title != null && phone != null && mobile != null && email != null && address != null) {
// 更新名片信息到名片表中
String url = "jdbc:mysql://localhost:3306/cards?useSSL=false";
String user = "root";
String pass = "password";
Connection conn = DriverManager.getConnection(url, user, pass);
Statement stmt = conn.createStatement();
int rows = stmt.executeUpdate("UPDATE card SET name='" + name + "', company='" + company + "', title='" + title + "', phone='" +
phone + "', mobile='" + mobile + "', email='" + email + "', address='" + address + "', note='" + note + "', update_time=NOW() WHERE id=" +
cardId + " AND user_id=" + userId);
if (rows == 1) {
// 编辑名片成功,重定向到主页面
response.sendRedirect("main.jsp");
} else {
// 编辑名片失败,返回错误信息
out.println("<p>编辑名片失败,请稍后再试。</p>");
}
stmt.close();
conn.close();
} else {
// 查询名片信息并显示到表单中
String url = "jdbc:mysql://localhost:3306/cards?useSSL=false";
String user = "root";
String pass = "password";
Connection conn = DriverManager.getConnection(url, user, pass);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM card WHERE id=" + cardId + " AND user_id=" + userId);
if (rs.next()) {
String cardName = rs.getString("name");
String cardCompany = rs.getString("company");
String cardTitle = rs.getString("title");
String cardPhone = rs.getString("phone");
String cardMobile = rs.getString("mobile");
String cardEmail = rs.getString("email");
String cardAddress = rs.getString("address");
String cardNote = rs.getString("note");
out.println("<h2>编辑名片</h2>");
out.println("<form method=\"post\" action=\"edit_card.jsp?id=" + cardId + "\">");
out.println("<table>");
out.println("<tr><td>姓名:</td><td><input type=\"text\" name=\"name\" value=\"" + cardName + "\"></td></tr>");
out.println("<tr><td>公司名:</td><td><input type=\"text\" name=\"company\" value=\"" + cardCompany + "\"></td></tr>");
out.println("<tr><td>职位名称:</td><td><input type=\"text\" name=\"title\" value=\"" + cardTitle + "\"></td></tr>");
out.println("<tr><td>公司电话:</td><td><input type=\"text\" name=\"phone\" value=\"" + cardPhone + "\"></td></tr>");
out.println("<tr><td>手机号码:</td><td><input type=\"text\" name=\"mobile\" value=\"" + cardMobile + "\"></td></tr>");
out.println("<tr><td>邮箱:</td><td><input type=\"text\" name=\"email\" value=\"" + cardEmail + "\"></td></tr>");
out.println("<tr><td>办公地址:</td><td><input type=\"text\" name=\"address\" value=\"" + cardAddress + "\"></td></tr>");
out.println("<tr><td>备注:</td><td><textarea name=\"note\">" + cardNote + "</textarea></td></tr>");
out.println("<tr><td colspan=\"2\"><input type=\"submit\" value=\"提交\"></td></tr>");
out.println("</table>");
out.println("</form>");
} else {
out.println("<p>该名片不存在。</p>");
}
rs.close();
stmt.close();
conn.close();
}
%>
</body>
</html>
-
名片删除
创建一个delete_card.jsp页面用于删除已有名片,其中包括确认信息和提交按钮。在用户提交表单后,通过JDBC连接数据库,将对应的名片信息移动到回收站表中,并重定向到系统主页面。
下面是delete_card.jsp的示例代码:
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<html>
<head>
<title>删除名片 - 网上名片管理系统</title>
</head>
<body>
<%
int userId = (int) session.getAttribute("userId");
int cardId = Integer.parseInt(request.getParameter("id"));
String confirm = request.getParameter("confirm");
if (confirm != null && confirm.equals("yes")) {
// 将名片信息移动到回收站表中
String url = "jdbc:mysql://localhost:3306/cards?useSSL=false";
String user = "root";
String pass = "password";
Connection conn = DriverManager.getConnection(url, user, pass);
Statement stmt = conn.createStatement();
int rows = stmt.executeUpdate("UPDATE card SET discard=1 WHERE id=" + cardId + " AND user_id=" + userId);
if (rows == 1) {
// 删除名片成功,重定向到主页面
response.sendRedirect("main.jsp");
} else {
// 删除名片失败,返回错误信息
out.println("<p>删除名片失败,请稍后再试。</p>");
}
stmt.close();
conn.close();
} else {
out.println("<h2>确定要删除名片吗?</h2>");
out.println("<form method=\"post\" action=\"delete_card.jsp?id=" + cardId + "\">");
out.println("<input type=\"hidden\" name=\"confirm\" value=\"yes\">");
out.println("<input type=\"submit\" value=\"确认\">");
out.println("</form>");
out.println("<p><a href=\"main.jsp\">取消</a></p>");
}
-
名片查询
创建一个search_card.jsp页面用于查询名片,其中包括姓名、公司名、职位名称、手机号码和邮箱等输入表单,以及提交按钮。在用户提交表单后,通过JDBC连接数据库,查询符合条件的名片信息,并将结果显示到页面上。
下面是search_card.jsp的示例代码:
<%@ page language="java" %>
<%@ page import="java.sql.*" %>
<html>
<head>
<title>查询名片 - 网上名片管理系统</title>
</head>
<body>
<%
int userId = (int) session.getAttribute("userId");
String name = request.getParameter("name");
String company = request.getParameter("company");
String title = request.getParameter("title");
String mobile = request.getParameter("mobile");
String email = request.getParameter("email");
String sql = "SELECT * FROM card WHERE user_id=" + userId + " AND discard=0";
if (name != null && !name.isEmpty()) {
sql += " AND name like '%" + name + "%'";
}
if (company != null && !company.isEmpty()) {
sql += " AND company like '%" + company + "%'";
}
if (title != null && !title.isEmpty()) {
sql += " AND title like '%" + title + "%'";
}
if (mobile != null && !mobile.isEmpty()) {
sql += " AND mobile like '%" + mobile + "%'";
}
if (email != null && !email.isEmpty()) {
sql += " AND email like '%" + email + "%'";
}
String url = "jdbc:mysql://localhost:3306/cards?useSSL=false";
String user = "root";
String pass = "password";
Connection conn = DriverManager.getConnection(url, user, pass);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
out.println("<h2>查询名片</h2>");
out.println("<form method=\"get\" action=\"search_card.jsp\">");
out.println("<table>");
out.println("<tr><td>姓名:</td><td><input type=\"text\" name=\"name\" value=\"" + name + "\"></td></tr>");
out.println("<tr><td>公司名:</td><td><input type=\"text\" name=\"company\" value=\"" + company + "\"></td></tr>");
out.println("<tr><td>职位名称:</td><td><input type=\"text\" name=\"title\" value=\"" + title + "\"></td></tr>");
out.println("<tr><td>手机号码:</td><td><input type=\"text\" name=\"mobile\" value=\"" + mobile + "\"></td></tr>");
out.println("<tr><td>邮箱:</td><td><input type=\"text\" name=\"email\" value=\"" + email + "\"></td></tr>");
out.println("<tr><td colspan=\"2\"><input type=\"submit\" value=\"查询\"></td></tr>");
out.println("</table>");
out.println("</form>");
if (!rs.next()) {
out.println("<p>没有符合条件的名片。</p>");
} else {
out.println("<table>");
out.println("<tr><th>姓名</th><th>公司名</th><th>职位名称</th><th>手机号码</th><th>邮箱</th><th>操作</th></tr>");
do {
int cardId = rs.getInt("id");
String cardName = rs.getString("name");
String cardCompany = rs.getString("company");
String cardTitle = rs.getString("title");
String cardMobile = rs.getString("mobile");
String cardEmail = rs.getString("email");
out.println("<tr>");
out.println("<td>" + cardName + "</td>");
out.println("<td>" + cardCompany + "</td>");
out.println("<td>" + cardTitle + "</td>");
out.println("<td>" + cardMobile + "</td>");
out.println("<td>" + cardEmail + "</td>");
out.println("<td><a href=\"view_card.jsp?id=" + cardId + "\">查看</a> | <a href=\"edit_card.jsp?id=" + cardId + "\">编辑</a> | <a href=\"delete_card.jsp?id=" + cardId + "\">删除</a></td>");
out.println("</tr>");
} while (rs.next());
out.println("</table>");
}
rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
以上就是名片管理系统的主要功能模块,可以依照这些代码进行开发和实现。当然,这只是一个简单的示例,你可以按照自己的需求进行扩展和改进。
对于名片管理系统的开发,以上代码提供了主要的功能模块,但具体实现需要结合你的具体需求进行开发和完善。以下是一些可能需要考虑的优化点:
- 对输入的参数进行过滤和校验,防止SQL注入等漏洞。
- 在查询名片时,使用分页功能,以减轻服务器压力和提高用户体验。
- 在编辑和添加名片时,需要对输入的数据进行校验,例如,手机号码和邮箱地址的格式等,防止用户输入非法的数据。
- 用户登录和注册功能,以及安全机制的设计和实现,例如,加密存储用户密码等。
- 后台管理功能,例如,管理员可以对名片进行批量管理、查看统计信息等。
需要注意的是,以上优化点只是参考,具体还需要根据实际需求进行改进和完善。