1.题目描述和需要实现的整体功能
题目描述:某医院为了方便医生合理安排工作计划,现需要开发一个医生管理系统。
- 需要实现的整体功能:
- 查询医生
- 添加医生
- 删除医生
第一步创建数据库![](https://img-blog.csdnimg.cn/ff7e7a1d2c8a4449885fce6dd94c4141.png)
创建表
数据库:创建数据库Test,创建数据表:Department和Doctor,至少向每张表中添加3条测试数据,其中在Doctor表中设置deptID为外键。
创建MVC项目![](https://img-blog.csdnimg.cn/92dab0bc078f42dfb94304a774b293c6.png)
连接数据库
- 列表界面对应的功能:
-
“删除”的效果如下:
-
当单击“删除”按钮时,要通过弹出对话框,提示用户“你确实要删除吗?”。
- 当单击弹出对话框“确定”按钮时,实现医生的删除。
- 当删除成功后,要即时刷新列表上面的数据。
代码实现部分 :
//引入所需的命名空间
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
//定义控制器类TestController
namespace WebApplication4.Controllers
{
public class TestController : Controller
{
//声明TestEntities实例,用于与数据库交互
TestEntities dbContext = new TestEntities();
//定义GET请求方法Index()
public ActionResult Index()
{
//获取数据库Doctor表和Department表中的数据,并以列表形式传递到视图界面
var list = dbContext.Doctor.Include("Department");
return View(list.ToList());
}
//定义Delete()方法,参数为D_ID
public ActionResult Delete(int D_ID)
{
//从数据库查找指定D_ID的Doctor数据并删除
var sche = dbContext.Doctor.Find(D_ID);
dbContext.Doctor.Remove(sche);
//确保更改操作被保存到数据库
dbContext.SaveChanges();
//重定向到Index()方法
return Redirect("index");
}
//定义Add()方法
public ActionResult Add() {
//获取所有部门数据以备在添加医生页二级联动下拉菜单里使用
var list2 = dbContext.Department.ToList();
//通过ViewBag将deptID列表以及对应的部门名称(D_Name)传递到视图界面
ViewBag.deptID = new SelectList(list2, "deptID", "D_Name");
//渲染添加医生页视图界面
return View();
}
//定义DoAdd()方法,参数为Doctor类型的Doctor对象
public ActionResult DoAdd(Doctor Doctor) {
//将医生数据添加到数据库
dbContext.Doctor.Add(Doctor);
//确保更改操作被保存到数据库
dbContext.SaveChanges();
//重定向到Index()方法
return Redirect("index");
}
}
}
主页面代码
@{
ViewBag.Title = "Index";
}
@model List<Doctor>
<h2>Index</h2>
<form>
<a href="/test/add">添加</a>
</form>
<table border="1">
<thead>
<tr>
<td>ID</td>
<td>邮箱</td>
<td>手机号</td>
<td>真实姓名</td>
<td>部门名称</td>
<td>年龄</td>
<td>性别</td>
<td>操作</td>
</tr>
</thead>
@{
foreach (var item in Model) {
<tr>
<td>@item.D_ID</td>
<td>@item.Email</td>
<td>@item.deptID</td>
<td>@item.PhoneNum</td>
<td>@item.RealName</td>
<td>@item.Age</td>
<td>@item.Sex</td>
<td><a href="/test/Delete?D_ID=@item.D_ID">删除</a></td>
</tr>
}
}
</table>
删除没有前端页面在Index页面中添加
<a href="DeleteEmp?D_ID=@item.D_ID" οnclick="return confirm('确定删除吗?')">删除</a>。
删除功能
删除,其逻辑是先显示详情页,然后点击删除按钮删除数据,删除后返回主页面。由于需要显示详情页,在从主页面调用控制器类中响应Get请求的delete函数中须获取数据标识,即数据Id,同时在点击删除按钮时,也是调用控制器类中响应post请求的delete函数,同时传入要删除的数据Id。
添加页面
@{
ViewBag.Title = "Add";
}
<h2>Add</h2>
<form action="/test/DoAdd">
<table border="1">
<tr><td>邮箱</td><td><input type="text" name="Email"</td></tr> <!-- 输入邮箱的文本框 -->
<tr><td>手机号</td><td><input type="text" name="PhoneNum"</td></tr> <!-- 输入手机号的文本框 -->
<tr><td>真实姓名</td><td><input type="text" name="RealName"</td></tr> <!-- 输入真实姓名的文本框 -->
<tr><td>部门名称</td><td>@Html.DropDownList("deptID")</td></tr> <!-- 部门名称的下拉列表 -->
<tr><td>年龄</td><td><input type="text" name="Age"</td></tr> <!-- 输入年龄的文本框 -->
<tr><td>性别</td><td><input type="text" name="Sex"</td></tr> <!-- 输入性别的文本框 -->
<tr><td></td><td><input type="submit" value="添加"</td></tr> <!-- 用于添加项的提交按钮 -->
</table>
</form>
实现效果
1.首先要理解MVC的架构。新建一个web项目取名叫Service。
2.建立eneity(实体包),tools(连接数据库),DAO(借助result的代码实现增删查改)servlet(实现跳转)。
3.在建立实体时一定要和数据库中的字段名一致,否则在运行时会出错。连接数据库时一定要注意数据库名和密码。
4.在DAO层中实现增删查改的语句,并测试,代码如下:
public class userDAO {
public List getAllUser(){//查询
String SQL="select * from user";
ResultSet rs=DBHelper.getResultSet(SQL);
return tools.tools.resultSetToList(rs, User.class);
// List users=new ArrayList();
// try
// {
// while(rs.next()){
// User u=new User();
// u.setUserID(rs.getString("userID"));
// u.setUserName(rs.getString("userName"));
// u.setPassword(rs.getString("password"));
// users.add(u);
// }
// return users;
// }
// catch(Exception ex){
// ex.printStackTrace();
// return null;
// }
}
public static boolean add(User u)//添加数据
{
String sql="INSERT INTO user(userID,userName,password) "+"VALUES(?,?,?)";
Object[] params=new Object[]{u.getUserID(),u.getUserName(),u.getPassword()};
int n=DBHelper.ExecSql(sql, params);
if(n>0)
return true;
else
return false;
}
public static boolean delete(User u)//删除数据
{
String sql="DELETE FROM user WHERE userID=?";
Object[] params=new Object[]{u.getUserID()};
int n=DBHelper.ExecSql(sql, params);
if(n>0)
return true;
else
return false;
}
public static boolean update(User u)//修改数据
{
String sql="update user set userName=?,password=? where userID=?";
Object[] params=new Object[]{u.getUserName(), u.getPassword(), u.getUserID()};
int n=DBHelper.ExecSql(sql, params);
if(n>0)
return true;
else
return false;
}
}
5.servlet中的部分代码如下:同时在jsp中一定要注意路劲的问题。
if(action.equals("show")){
userDAO dao=new userDAO();
List<User> users=dao.getAllUser();
request.setAttribute("users", users);
RequestDispatcher rd=request.getRequestDispatcher("show.jsp");
rd.forward(request, response);
}else if(action.equals("insert")){
response.sendRedirect("../user/insert.jsp");
}else if(action.equals("update")){
request.getRequestDispatcher("update.jsp").forward(request, response);
}else if(action.equals("delete")){
request.getRequestDispatcher("delete.jsp").forward(request, response);
}}