Tải bản đầy đủ (.docx) (52 trang)

BÁO CÁO BÀI TẬP LỚN LẬP TRÌNH MẠNG

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.39 MB, 52 trang )

ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA CÔNG NGHỆ THÔNG TIN
----&&&-----

BÁO CÁO BÀI TẬP LỚN

LẬP TRÌNH MẠNG

Đà Nẵng, Tháng 05 năm 2017
LỜI MỞ ĐẦU

Lập trình mạng là một kiến thức chuyên ngành quan trọng của lĩnh vực công
nghệ thông tin, đặc biệt là ngành quản trị mạng. Có thể xem đây là một hướng đi
rất rộng mở cho sinh viên và việc nắm bắt những kĩ thuật cơ bản của nó cực kì
cần thiết và quan trọng. Sau một loạt các môn học lí thuyết nền tảng như Mạng


GVHD: ThS. Mai Văn Hà

máy tính, Lập trình Java, Lập trình mạng, thì học phần Lập trình mạng này
chính là hội tụ hiện thực các kiến thức học trên sách vở. Nội dung thực hành chủ
yếu thực hiện việc lập trình Socket trên họ giao thức TCP/IP và giao thức UDP
trên các ứng dụng viết bằng ngôn ngữ Java, kết hợp các kĩ thuật lập trình đa
luồng, lập trình web JSP để thực hiện các hạng mục của học phần. Thông qua
các bài các bài giảng trên lớp, sinh viên dần thông thạo với công việc lập trình
và một phần nào đó làm quen kĩ thuật xây dựng một hệ thống làm việc sao cho
hiệu quả.
Dù đã kiểm tra nhiều lần nhưng trong báo cáo này có thể sẽ xuất hiện một số
lỗi và sai sót, do đó em rất mong đợi sự góp ý từ các thầy cô. Em xin chân thành
cảm ơn.



Trang 2


GVHD: ThS. Mai Văn Hà

Ý KIẾN ĐÁNH GIÁ CỦA GIẢNG VIÊN
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………

…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………
…………………………………………………………………

Trang 3


GVHD: ThS. Mai Văn Hà

MỤC LỤC

Bài tập 1: Xây dựng chức năng đăng nhập và đăng ký tài
khoản bằng JSP, Servlet theo mô hình MVC
Yêu cầu đề bài:
Xây dựng một ứng dụng bằng JSP, SERVLET theo mô hình MVC cung cấp
chức năng như sau:
- Người dùng muốn truy cập vào hệ thống phải thực hiện login để kiểm tra
username và password có hợp lệ hay không
- Hệ thống thông qua DB kiểm tra tính xác thực của dữ liệu:
+ Nếu username và password không chính xác hay không tồn tại ứng
dụng thông báo cho người dùng thông tin “Invalid username and
password” và cho người dùng trở về trang Login thông qua một Link
có tên là Try Again và cung cấp một Link Register cho phép người
dùng đăng ký một account mới
+ Nếu user tồn tại thì chương trình bày form Search. Đặc biệt, trên đầu
trang phải sử dụng session để lưu trữ user và tất cả các trang phải có
câu “Welcome, tênUser”
- Form Search cho phép người dùng tìm kiếm một user bất kỳ khi biết một

phần tên của họ
+ Kết quả Search sẽ trình bày trên lưới dữ liệu
+ Nếu tìm không thấy sẽ in ra câu “No Result is matched!”
- Kết quả trên lưới dữ liệu cho phép người dùng xóa một hàng bất kỳ bằng
cách click vào link hay update thông tin về lastname hay roles bằng click
nút update trên hàng được lựa chọn
- Khi các thao tác update, delete được thực hiện thành công thì lưới dữ liệu
sẽ được cập nhật lại và trình bày kết quả cho người dùng
Trang 4


GVHD: ThS. Mai Văn Hà

Cấu trúc thư mục:

BaseDAO.java
package model.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class BaseDAO {
private Connection connect;
public Connection getConnectMySql() {
String hostName = "localhost";
String dbName = "exercise_web";
String userName = "root";
String password = "";
try {

Class.forName("com.mysql.jdbc.Driver");


Trang 5


GVHD: ThS. Mai Văn Hà
String connURL = "jdbc:mysql://" + hostName + ":3306/" + dbName
+ "?useUnicode=true&characterEncoding=UTF-8";
connect = DriverManager.getConnection(connURL, userName,
password);
//
System.out.println("Connected");
} catch (ClassNotFoundException e) {
System.out.println("Class not found!");
} catch (SQLException e) {
System.out.println("Error connect!");
}
return connect;
}
}

UserDAO.java
package model.dao;
import
import
import
import
import
import

java.sql.Connection;

java.sql.Date;
java.sql.PreparedStatement;
java.sql.ResultSet;
java.sql.SQLException;
java.util.ArrayList;

import model.bean.User;
public class UserDAO extends BaseDAO {
private ResultSet results;
private Connection conn;
private PreparedStatement pst;
public boolean addUser(User userInfor) {
boolean status = false;
Connection conn = this.getConnectMySql();
String sql = "INSERT INTO user (username,password,fullname)
VALUES(?,?,?)";
try {
pst = conn.prepareStatement(sql);
pst.setString(1, userInfor.getUsername());
pst.setString(2, userInfor.getPassword());
pst.setString(3, userInfor.getFullname());

}

= ?";

int temp = pst.executeUpdate();
status = (temp == 1) ? true : false;
} catch (SQLException e) {
// TODO Auto-generated catch block

e.printStackTrace();
}
return status;

public boolean isExistUser(String userName, String password) {
boolean status = false;
Connection conn = this.getConnectMySql();
try {
String sql = "select * from user where username = ? and password
pst = conn.prepareStatement(sql);
pst.setString(1, userName);

Trang 6


GVHD: ThS. Mai Văn Hà
pst.setString(2, password);
results = pst.executeQuery();
status = results.next();
} catch (SQLException e) {
System.out.println(e.getMessage());
} finally {
try {
pst.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
return status;
}

public User getUser(String userName) {
Connection conn = this.getConnectMySql();
User user = null;
try {
String sql = "select * from user where username = ?";
pst = conn.prepareStatement(sql);
pst.setString(1, userName);

results = pst.executeQuery();
while (results.next()) {
String username = results.getString(1);
String password = results.getString(2);
String fullname = results.getString(3);
user = new User(username, password, fullname);
}
} catch (SQLException e) {
System.out.println(e.getMessage());
} finally {
try {
pst.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
return user;

}
public ArrayList <User> getUserByName(String name) {
Connection conn = this.getConnectMySql();
ArrayList<User> listUser = new ArrayList <>();

try {
String sql = "select * from user where fullname like
'%"+name+"%'";
pst = conn.prepareStatement(sql);
results = pst.executeQuery();
while (results.next()) {
String username = results.getString(1);
String password = results.getString(2);
String fullname = results.getString(3);
User obj = new User(username, password, fullname);
listUser.add(obj);
}

Trang 7


GVHD: ThS. Mai Văn Hà
} catch (SQLException e) {
System.out.println(e.getMessage());
} finally {
try {
pst.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
return listUser;

}
public boolean deleteUser(String userName) {

boolean status = false;
Connection conn = this.getConnectMySql();
try {
String sql = "DELETE FROM user WHERE username = ?";
pst = conn.prepareStatement(sql);
pst.setString(1, userName);
int temp = pst.executeUpdate();
status = (temp == 1) ? true : false;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
pst.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
return status;
}
public boolean editUser(User user) {
boolean status = false;
Connection conn = this.getConnectMySql();
try {
String sql = "UPDATE user SET password = ?, fullname = ? WHERE
username = ?";
pst = conn.prepareStatement(sql);
pst.setString(1, user.getPassword());
pst.setString(2, user.getFullname());
pst.setString(3, user.getUsername());

int temp = pst.executeUpdate();
status = (temp == 1) ? true : false;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
pst.close();
} catch (Exception e2) {
// TODO: handle exception
}
}
return status;
}
public static void main(String[] args) {

Trang 8


GVHD: ThS. Mai Văn Hà
UserDAO u = new UserDAO();

Lon")));
}
}

System.out.println(u.editUser(new User("thailoi","222222","Thai Van

HomeController.java
package controller;

import java.io.IOException;
import java.util.ArrayList;
import
import
import
import
import
import
import

javax.servlet.RequestDispatcher;
javax.servlet.ServletException;
javax.servlet.annotation.WebServlet;
javax.servlet.http.HttpServlet;
javax.servlet.http.HttpServletRequest;
javax.servlet.http.HttpServletResponse;
javax.servlet.http.HttpSession;

import model.bean.User;
import model.dao.UserDAO;
/**
* Servlet implementation class HomeServlet
*/
@WebServlet("/HomeServlet")
public class HomeController extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HomeController() {

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
HttpSession session = request.getSession();
if(session.getAttribute("fullname") != null){
UserDAO userDAO = new UserDAO();
String name = request.getParameter("name");
String search = request.getParameter("search");
String logout = request.getParameter("logout");
if(logout != null){
session.invalidate();
response.sendRedirect(request.getContextPath() + "/login.html");
return; // <--- Here.
}else{
if( search != null && name != null){

Trang 9


GVHD: ThS. Mai Văn Hà
ArrayList<User> listUser =
userDAO.getUserByName(name);


request.setAttribute("listUser", listUser);

}

}
RequestDispatcher rd =
request.getRequestDispatcher("/view/home.jsp");
rd.forward(request, response);
}else{
response.sendRedirect(request.getContextPath() + "/login.html");
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}

Index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String destination = null;
if(session.getAttribute("fullname") != null){
destination = request.getContextPath() + "/home";
response.sendRedirect(destination);

}else{
destination = request.getContextPath() + "/login";
response.sendRedirect(destination);
}
%>

LoginController.java
package controller;
import java.io.IOException;
import java.io.PrintWriter;
import
import
import
import
import
import
import

javax.servlet.RequestDispatcher;
javax.servlet.ServletException;
javax.servlet.annotation.WebServlet;
javax.servlet.http.HttpServlet;
javax.servlet.http.HttpServletRequest;
javax.servlet.http.HttpServletResponse;
javax.servlet.http.HttpSession;

import model.bean.User;
import model.dao.UserDAO;

Trang 10



GVHD: ThS. Mai Văn Hà

/**
* Servlet implementation class CheckLoginServlet
*/
@WebServlet("/CheckLoginServlet")
public class LoginController extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public LoginController() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
RequestDispatcher rd = request.getRequestDispatcher("/view/login.jsp");
rd.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
response)
*/

protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
// TODO Auto-generated method stub
HttpSession session = request.getSession();
String destination = null;
String userName = request.getParameter("username");
String password = request.getParameter("password");
UserDAO userDAO = new UserDAO();

if (userDAO.isExistUser(userName, password)) {
User userInfor = userDAO.getUser(userName);
session.setAttribute("fullname", userInfor.getFullname());
destination = request.getContextPath() + "/home.html";
response.sendRedirect(destination);
} else {
RequestDispatcher rd =
request.getRequestDispatcher("/view/failed_login.jsp");
rd.forward(request, response);
}
}
}

RegisterController.java
package controller;

Trang 11


GVHD: ThS. Mai Văn Hà
import java.io.IOException;

import
import
import
import
import
import
import

javax.servlet.RequestDispatcher;
javax.servlet.ServletException;
javax.servlet.annotation.WebServlet;
javax.servlet.http.HttpServlet;
javax.servlet.http.HttpServletRequest;
javax.servlet.http.HttpServletResponse;
javax.servlet.http.HttpSession;

import model.bean.User;
import model.dao.UserDAO;
/**
* Servlet implementation class RegisterController
*/
@WebServlet("/RegisterController")
public class RegisterController extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public RegisterController() {
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
RequestDispatcher rd = request.getRequestDispatcher("/view/register.jsp");
rd.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
// TODO Auto-generated method stub
UserDAO user = new UserDAO();
User check = null;
HttpSession session = request.getSession();
String username = request.getParameter("username");
String password = request.getParameter("password");
String fullname = request.getParameter("fullname");
if(!password.equals("") && !fullname.equals("") && !username.equals("")){
check = user.getUser(username);
if(check == null){
session.setAttribute("success", true);
user.addUser(new User(username,password,fullname));
response.sendRedirect(request.getContextPath() +

"/register.html");
}else{

Trang 12


GVHD: ThS. Mai Văn Hà
session.setAttribute("success", false);
response.sendRedirect(request.getContextPath() +

"/register.html");
}else{

}
session.setAttribute("success", false);
response.sendRedirect(request.getContextPath() + "/register.html");

}

}

}

EditController.java
package controller;
import java.io.IOException;
import
import
import
import

import
import

javax.servlet.RequestDispatcher;
javax.servlet.ServletException;
javax.servlet.annotation.WebServlet;
javax.servlet.http.HttpServlet;
javax.servlet.http.HttpServletRequest;
javax.servlet.http.HttpServletResponse;

import model.bean.User;
import model.dao.UserDAO;
/**
* Servlet implementation class UserController
*/
@WebServlet("/UserController")
public class EditUserController extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public EditUserController() {
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
RequestDispatcher rd =
request.getRequestDispatcher("/view/error_page.jsp");
rd.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {

Trang 13


GVHD: ThS. Mai Văn Hà
// TODO Auto-generated method stub
UserDAO userDAO = new UserDAO();
boolean status = false;
String edit = request.getParameter("edit");
String delete = request.getParameter("delete");
String username = request.getParameter("username");
String password = request.getParameter("password");
String fullname = request.getParameter("fullname");
if(edit != null){
if(!edit.equals("")){
status = userDAO.editUser(new User(username, password,
fullname));


if(status == true){
String destination = "/home.html?
name="+fullname+"&search=Search";
response.sendRedirect(request.getContextPath() +
destination);
}else{
String destination = "/home.html";
response.sendRedirect(request.getContextPath() +
destination);
}
}else{
String destination = "/home.html";
response.sendRedirect(request.getContextPath() +
destination);
}
}else if(delete != null){
if(!delete.equals("")){
status = userDAO.deleteUser(username);
if(status == true){
String destination = "/home.html";
response.sendRedirect(request.getContextPath() +
destination);
}
}else{
String destination = "/home.html";
response.sendRedirect(request.getContextPath() +
destination);
}
}
}

}

login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
" /><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Demo Login</title>
rel="stylesheet">
</head>
<body class="login-bg">
<div class="login-page">
<div class="form">

Trang 14


GVHD: ThS. Mai Văn Hà

method="post"


</tr>
<%
%>

}
}

</tbody>
</table>
</div>

</div>

</div>
<%

%>

listUser = (ArrayList<User>)request.getAttribute("listUser");
if(listUser != null){
int i = 0;
for(User u : listUser){
i++;

<!-- Modal -->


Chức năng Đăng kí login

Nếu login bị lỗi

Chức năng đăng kí

Đăng nhập thành công chức năng tìm kiếm

Trang 19


GVHD: ThS. Mai Văn Hà

Tìm kiếm thành công

Tìm kiếm thất bại

Chức năng UPDate

Trang 20


GVHD: ThS. Mai Văn Hà

Chức năng DELETE

Chức Năng Thoát

Trang 21



GVHD: ThS. Mai Văn Hà

Bài tập 2: Xây dựng hệ thống quản lý trung tâm y tế dự
phòng
1. Tổng quan đề tài
1.1. Bối cảnh đề tài
Tăng cường tiếp cận và tuân thủ lịch tiêm cũng như đảm bảo thông tin kịp thời đến
khách hàng. Đề tài này được thực hiện nhằm xây dựng ứng dụng quản lý tiêm
chủng có tính tương tác cao giữa cơ sở cung cấp dịch vụ và khách hàng trên nền
tảng website

1.2. Mục tiêu và mục đích đề tài
- Tìm hiểu và thực hiện xây dựng một ứng dụng JSP, SERVLET theo mô hình
MVC cơ bản, cụ thể ở đây là chức năng đăng nhập và đăng kí tài khoản.
Hiểu được cách thức làm việc và hoạt động của JSP, SERVLET
Hiểu ý nghĩa của từng tầng và cách xây dựng một project theo mô hình MVC

1.3. Phương pháp triển khai
- Tìm hiểu lý thuyết và phương pháp lập trình thông qua các tài liệu, video hướng
dẫn lập trình JSP, SERVLET, MVC trên internet

1.4. Môi trường áp dụng
- Sử dụng công cụ lập trình Eclipse Neon
- Sử dụng Server MySQL và Apache Tomcat 8.5 để chạy Server.
2. Phân tích và thiết kế hệ thống
2.1. Phát biểu bài toán
Cho một hệ thống quản lý trung tâm y tế dự phòng được mô tả như sau:


-

Có chức năng admin của hệ thống, có yêu cầu đăng nhập để quản lý
Không có chức năng cho phần end-user
Mỗi khách hàng đến trung tâm sẽ được tạo một tài khoản để theo dõi lịch sử
tiêm phòng
Mỗi khách hàng có thể tiêm phòng 1 hoặc nhiều bệnh
Đối với mỗi bệnh, khách hàng chỉ được chọn 1 loại của 1 hãng văcxin
Cùng một bệnh nhưng mỗi loại văcxin có thể có số mũi cần tiêm phòng khác
nhau
Thời gian chờ giữa các mũi tiêm cũng khác nhau giữa các loại văcxin

Ví dụ: Văcxin A sau khi tiêm mũi 1 thì đến 1 tháng sau mới tiêm mũi 2, Văcxin B
thì sau 2 tháng mới tiêm mũi 2

-

Mỗi loại văcxin có giá thành khác nhau
Không được phép tiêm các loại văcxin khác nhau cùng một lúc cho cùng một
bệnh

Trang 22


GVHD: ThS. Mai Văn Hà

-

Ví dụ: Khi tiêm phòng bệnh sởi, nếu mũi thứ nhất đã tiêm loại văcxin của Bỉ
thì ở những mũi tiêm tiếp theo cũng phải dùng loại văcxin này, không được

tiêm loại văcxin của Mỹ, Ý…
Đối với loại văcxin cần tiêm nhiều mũi, sau khi tiêm mũi thứ nhất, phải lập lịch
hẹn khách hàng để tiêm các mũi tiếp theo
Có một số loại văcxin có thể tiêm phòng cho nhiều bệnh cùng lúc

Lược đồ cơ sở dữ liệu quan hệ của hệ thống được mô tả như sau:







STTMui: Là số thứ tự của mũi, vd: mũi thứ nhất có STTMui = 1, mũi thứ hai
có giá trị là 2
NgayHenTiepTheo: Là ngày được hẹn để tiêm mũi tiếp theo (nếu có)
SoMui: là số lượng mũi cần phải tiêm đối với từng loại văcxin
GiaVacxin: là giá tiền của 1 mũi văcxin
Bảng PHONGBENH dùng để xác định loại văcxin nào có thể phòng được
bệnh nào

Thiết kế web bằng ngôn ngữ lập trình JSP, SERVLET theo MVC:
Yêu cầu về chức năng:

- Tạo mới một loại văcxin
- Sửa một loại văcxin
- Liệt kê toàn bộ lịch sử tiêm phòng của một khách hàng bao gồm các thông tin:
Mã Khách Hàng, Tên Khách Hàng, Tên Bệnh, Mã Văcxin, Tên Văcxin, Tổng
số mũi cần phải tiêm
Trang 23



GVHD: ThS. Mai Văn Hà

- Thống kê tổng số tiền đã trả cho trung tâm của từng khách hàng, sắp xếp theo
-

chiều tăng dần của tổng số tiền đã trả
Cho phép tìm kiếm theo tên vacxin của các hãng sản xuất

Yêu cầu về kỹ thuật:

- Tạo đầy đủ CSDL và kết nối được đến CSDL bằng code Java
- Sử dụng JSP và Servlet theo đúng mô hình MVC
2.2. Phân tích hệ thống
Theo yêu cầu của bài toàn chúng ta chi cần xây dựng các chức năng sau:

-

Đăng nhập
Quản Lý Vacxin (Thêm, Sửa)
Thống kê
Xem Lịch Sử
Vì vậy ta chỉ phân tích các chức năng trên:

- Đăng nhập:
+ Có chức năng admin của hệ thống, có yêu cầu đăng nhập để quản lý
+ Không có chức năng cho phần end-user
+ Mỗi khách hàng đến trung tâm sẽ được tạo một tài khoản để theo dõi lịch
-


-

sử tiêm phòng
Quản lý Vác xin:
+ Tạo mới một loại văcxin
+ Sửa một loại văcxin
+ Cho phép tìm kiếm theo tên vacxin của các hãng sản xuất
Thống kê tổng số tiền đã trả cho trung tâm của từng khách hàng, sắp xếp theo
chiều tăng dần của tổng số tiền đã trả
Liệt kê toàn bộ lịch sử tiêm phòng của một khách hàng bao gồm các thông tin:
Mã Khách Hàng, Tên Khách Hàng, Tên Bệnh, Mã Văcxin, Tên Văcxin, Tổng
số mũi cần phải tiêm

2.3.

Thiết kế hệ thống

Theo yêu cầu của bài toàn chúng ta chi cần xây dựng các chức năng sau:

-

Đăng nhập
Quản Lý Vacxin (Thêm, Sửa)
Thống kê
Xem Lịch Sử
Vì vậy các usercase sau:
Quản lý thông tin vắc xin:

Trang 24



GVHD: ThS. Mai Văn Hà

Quản lý xếp lịch tiêm chủng:

Quản lý kết quả tiêm chủng:

Trang 25


×