Không chỉ đơn giản là một phươngtiện giải trí, internet còn trở thành một nền tảng mua bán mạnh mẽ, tạo điều kiệnthuận lợi cho việc kinh doanh và tiếp cận khách hàng.. Trong bối cảnh này
Trang 1TRƯỜNG ĐẠI HỌC THÁI BÌNH KHOA CÔNG NGHỆ THÔNG TIN
Khóa : 2020-2024
Giảng viên hướng dẫn : ThS.Bùi Thị Hòa
Thái Bình, tháng 12 năm 2023
Trang 2TRƯỜNG ĐẠI HỌC THÁI BÌNH KHOA CÔNG NGHỆ THÔNG TIN
Khóa : 2020-2024
Giảng viên hướng dẫn : ThS.Bùi Thị Hòa
Thái Bình, tháng 12 năm 2023
Trang 3MỤC LỤC
CHƯƠNG 1: GIỚI THIỆU CHUNG 9
1.1 Lý do chọn đề tài : 9
1.2 Mục đích : 9
1.3 Phương pháp nghiên cứu : 9
1.4 Công cụ thực hiện: 9
CHƯƠNG 2: THIẾT KẾ TRANG WEB 10
2.1 Thiết kế cơ sở dữ liệu 10
2.2 Phân tích thiết kế hệ thống của website: 18
2.2.1 Sơ đồ Use-Case với tài khoản quản trị viên 18
2.2.2 Sơ đồ Use-Case với tài khoản người dùng 19
2.3 Xây dựng các thuật toán 19
2.3.1 Thuật toán liên kết cơ dở dữ liệu 19
2.3.2 Thuật toán đăng kí tài khoản 20
2.3.3 Thuật toán đăng nhập 23
2.3.4 Thuật toán thêm vào giỏ hàng 24
2.3.5 Thuật toán thêm mới sản phẩm 25
2.3.6 Thuật toán sửa thông tin sản phẩm 28
2.3.7 Thuật toán quản lý đơn hàng 29
2.3.8 Thuật toán xoá sản phẩm và khôi phục sản phẩm 31
2.3.9 Thuật toán quản lý danh mục sản phẩm 31
2.3.10 Thuật toán thống kê đơn hàng 34
CHƯƠNG 3: GIAO DIỆN TRANG WEB 35
Trang 43.1 Giao diện chính 35
3.2 Giao diện đăng kí 36
3.3 Giao diện đăng nhập 37
3.4 Giao diện sản phẩm 37
3.5 Giao diện giỏ hàng 38
3.6 Giao diện đơn hàng 38
3.7 Giao diện quản lý sản phẩm 40
3.8 Giao diện quản lý đơn hàng 41
3.9 Giao diện thống kê đơn hàng 41
KẾT LUẬN 43
Trang 5DANH MỤC BẢNG BIỂU
Bảng 2.1 Bảng sản phẩm 11
Bảng 2.2 Bảng loại sản phẩm 11
Bảng 2.3 Bảng liên hệ 12
Bảng 2.4 Bảng nhà sản xuất 12
Bảng 2.5 Bảng nhóm người dùng 13
Bảng 2.6 Bảng người dùng 14
Bảng 2.7 Bảng nhóm khách hàng 14
Bảng 2.8 Bảng nội dung 15
Bảng 2.9 Bảng đặt hàng 15
Bảng 2.10 Bảng chi tiết đặt hàng 16
Bảng 2.11 Bảng huyện 16
Bảng 2.12 Bảng tỉnh 16
Bảng 2.13 Bảng mã giảm giá 17
Bảng 2.14 Bảng thanh trượt 17
Bảng 2.15 Bảng hệ thống 18
Trang 6DANH MỤC HÌNH ẢNH
Hình 2.1 Cơ sở dữ liệu của website 10
Hình 2.2 Sơ đồ Use-Case admin 18
Hình 2.3 Sơ đồ Use-Case User 19
Hình 3.1 Giao diện chính 33
Hình 3.2 Giao diện đăng kí 34
Hình 3.3 Giao diện đăng nhập 35
Hình 3.4 Giao diện sản phẩm 35
Hình 3.5 Giao diện giỏ hàng 36
Hình 3.6 Giao diện đơn hàng 36
Hình 3.7 Giao diện đặt hàng 37
Hình 3.8 Giao diện quản lý sản phẩm 38
Hình 3.9 Giao diện quản lý đơn hàng 39
Hình 3.10 Giao diện thống kê đơn hàng 39
Trang 7LỜI MỞ ĐẦU
Trong thời đại công nghệ ngày nay, sự phát triển vượt bậc của internet đã mở ranhững cánh cửa mới cho việc mua sắm trực tuyến Không chỉ đơn giản là một phươngtiện giải trí, internet còn trở thành một nền tảng mua bán mạnh mẽ, tạo điều kiệnthuận lợi cho việc kinh doanh và tiếp cận khách hàng Trong bối cảnh này, việc xâydựng một website bán đồ điện tử không chỉ là một quyết định thông minh mà còn làbước tiến quan trọng, mở ra những cơ hội kinh doanh rộng lớn
Đồ điện tử, với sự đa dạng và tiện ích cao, ngày càng trở thành một phần khôngthể thiếu trong cuộc sống hàng ngày của chúng ta Từ điện thoại thông minh, máy tínhbảng cho đến các thiết bị gia dụng thông minh, thị trường này đang trở thành điểmđến lý tưởng cho người tiêu dùng muốn nâng cao chất lượng cuộc sống của mình Với
sự tăng cường về cảm biến, hiệu suất và tính năng, việc mua sắm những sản phẩm nàytrực tuyến thông qua một website chất lượng là sự lựa chọn đúng đắn và thuận tiện.Website được xây dựng với các chức năng chính như đăng nhập, mua hàng,quản lý đơn hàng, Tuy nhiên do thời gian nghiên cứu và khả năng còn hạn chế nêncòn nhiều thiếu sót, nhóm chúng em mong nhận được sự nhận xét của thầy cô và cácbạn Chúng em xin chân thành cảm ơn!
Trang 8NHẬN XÉT CỦA GIẢNG VIÊN
Trang 9
Trang 10
CHƯƠNG 1: GIỚI THIỆU CHUNG
1.3 Phương pháp nghiên cứu :
Kết hợp lý thuyết và phân tích thực tế Website được xây dựng dựa trên việcnghiên cứu các kiến thức lý thuyết liên quan đến học phần phát triển ứng dụng webnâng cao, đồng thời nghiên cứu các website bán hàng nhằm thiết kế ra một websitebán hàng tốt nhất có thể
1.4 Công cụ thực hiện:
Website được thực hiện bởi phần mềm Visual Code
Cơ sở dữ liệu được thực hiện trên Xampp
Trang 11CHƯƠNG 2: THIẾT KẾ TRANG WEB
2.1 Thiết kế cơ sở dữ liệu
Từ việc phân tích thực tế, chúng em xây dựng được một cơ sở dữ liệu như sau :
Hình 2.1 Cơ sở dữ liệu của website
Cơ sở dữ liệu được xây dựng trên các bảng tương ứng:
Trang 12Number buy Int(11)
Trang 19Tên Kiểu dữ liệu
Bảng 2.15 Bảng hệ thống
Trang 202.2 Phân tích thiết kế hệ thống của website: 2.2.1 Sơ đồ Use-Case với tài khoản quản trị viên
Hình 2.2 Sơ đồ Use-Case admin
Trang 212.2.2 Sơ đồ Use-Case với tài khoản người dùng
Hình 2.3 Sơ đồ Use-Case User
2.3 Xây dựng các thuật toán
2.3.1 Thuật toán liên kết cơ dở dữ liệu
Dưới đây là đoạn code liên kết cơ sở dữ liệu :
Trang 222.3.2 Thuật toán đăng kí tài khoản
$this -> load -> helper('string' );
$today = date('Y-m-d' );
// giới hạn mã giảm giá mới có hạn 30 ngày từ khi đăng ký tài khoản
$todaylimit = strtotime(date("Y-m-d" , strtotime( $today )) " +1 month" );
$todaylimit = strftime("%Y-%m-%d" , $todaylimit );
$this -> load -> library('form_validation' );
$this -> load -> helper('form' );
$this -> form_validation -> set_rules('usernamé 'Tên đăng nhập' 'required|min_length[6]|max_length[32]| , , is_unique[db_customer.username]');
$this -> form_validation -> set_rules('namé 'Họ và tên' 'required|min_length[5]' , , );
$this -> form_validation -> set_rules('password' 'Mật khẩú 'required|min_length[6]|max_length[32]' , , );
if ( $this -> session -> userdatắsessionKhachHang' )){
$this -> form_validation -> set_rules('email' 'Email' 'required|is_unique[db_customer.email]' , , ); }
$this -> form_validation -> set_rules('re_password' 'Nhập lại mật khẩú 'required|matches[password]' , , );
Trang 23
if ($this -> form_validation -> run () == TRUE ){
$data = array (
'username' => $this -> input -> post('username' ),
'fullname' => $this -> input -> post('name' ),
'email' => $this -> input -> post('email' ),
'phone' => $this -> input -> post('phone' ),
//Lưu tt mã và ngày giới hạn để gửi mail
$tempcoupon = $newcoupon ['code' ];
$tempdatelimit = $newcoupon ['expiration_date' ];
// tao mã giảm giá random
$this -> Mcoupon -> coupon_insert( $newcoupon );
$this -> Mcustomer -> customer_insert( $data );
// gui mail ma giam gia
$email = $this -> input -> post('email' );
$this -> load -> library('email' );
$this -> load -> library('parser' );
Trang 24$config ['protocol' ] = 'smtp' ;
$config ['smtp_host' ] = 'ssl://smtp.gmail.com' ;
$config ['smtp_port' ] = '465' ;
$config ['smtp_timeout' ] ; = '7'
$config ['smtp_user' ] = 'sale.smart.store.2019@gmail.com' ;
$config ['smtp_pass' ] = 'cqfmfmrtudhcmahw' ;
$config ['charset' ] = 'utf-8' ;
$config ['newline' ] = "\r\n" ;
$config ['wordwrap' ] = TRUE ;
$config ['mailtype' ] = 'html' ;
$config ['validation' ] = TRUE ;
$this -> email -> initialize( $config );
$this -> email -> from('sale.smart.store.2019@gmail.com' 'Smart Store' , );
$this -> email -> to( $email );
$this -> email -> subject('Hệ thống Smart Store - Quà thành viên mới' );
$this -> email -> message('Bạn đã trở thành thành viên mới của cửa hàng Smart Store, Cửa hàng tặng bạn 1
mã giảm giá giảm 100.000 đ : ' $tempcoupon ' , Mã này có giá trị tới ngày ' $tempdatelimit '
Hãy sử dụng tài khoản để mua hàng để tích lũy nhận thêm nhiều ưu đãi !!!!');
$this -> email -> send ();
$this ->data ['success'] = 'Đăng ký thành công! Bạn đã nhận được 1 mã giảm giá cho thành viên mới, vui lòng kiểm tra email !!';
}
$this ->data ['title'] = 'Smart store - Đăng ký tài khoản' ;
$this ->data ['view'] = 'dangky' ;
$this -> load -> view('frontend/layout',$this ->data );
}
$username = $this -> input -> post('username' );
if ($this -> Mcustomer -> customer_check_username( $username )){
$this -> form_validation -> set_message( FUNCTION , 'Tên đăng nhập để trống hoặc đã được sử dụng' ); return FALSE ;
}
return TRUE ;
}
Trang 25$email = $this -> input -> post('email' );
if ($this -> Mcustomer -> customer_detail_email( $email ))
2.3.3 Thuật toán đăng nhập
// Hàm khởi tạo
parent :: construct ();
$this -> load -> model('frontend/Mcategorý );
$this -> load -> model('frontend/Mcustomer' );
$this -> load -> model('frontend/Mcoupon' );
$this -> load -> model("frontend/Mproduct" );
$this ->data ['com'] = 'dangnhap' ;
}
$this -> load -> library('form_validation' );
$this -> form_validation -> set_rules('usernamé 'Tài khoản' 'required|min_length[6]|max_length[32]' , , ); $this -> form_validation -> set_rules('password' 'Mật khẩú 'required|min_length[6]|max_length[32]' , , );
if ($this -> form_validation -> run () == TRUE ){
$username = $_POST ['usernamé ];
$password = md5( $_POST ['password' ]);
if ($this -> Mcustomer -> customer_login( $username $password , ) != FALSE ){
$row = $this -> Mcustomer -> customer_login( $username $password , );
$this -> session -> set_userdatắsessionKhachHang', $row );
$this -> session -> set_userdatắid', $row ['id' ]);
$this -> session -> set_userdatắemail' , $row [ 'email' ]);
$this -> session -> set_userdatắsessionKhachHang_namé, $row ['fullnamé ]);
if ($this -> session -> userdatắcart' )){
Trang 26$this ->data ['view'] = 'dangnhap' ;
$this -> load -> view('frontend/layout',$this ->data );
}
} else {
$this ->data ['titlé] = 'Smart store - Đăng nhập tài khoản' ;
$this ->data ['view'] = 'dangnhap' ;
$this -> load -> view('frontend/layout',$this ->data );
}
}
$array_items = array ( 'email' 'fullnamé , ,
'id' 'sessionKhachHang' 'sessionKhachHang_namé 'coupon_pricé 'id_coupon_pricé , , , , ); $this -> session -> unset_userdată $array_items );
redirect('trang-chú 'refresh' , );
}
2.3.4 Thuật toán thêm vào giỏ hàng
$this -> load -> library('session' );
$id $_POST = ['id' ];
if ($this -> session -> userdatắcart' )){
$cart = $this -> session -> userdatắcart' );
if (array_key_exists( $id $cart , )){
$cart [ $id ] ++ ;
} else {
$cart [ $id ] = 1 ;
}
Trang 27$cart [ $id ] = ;
}
$this -> session -> set_userdatắcart', $cart );
echo json_encode ( $cart );
}
2.3.5 Thuật toán thêm mới sản phẩm
$user_role = $this -> session -> userdatắsessionadmin' );
$this -> load -> library('session' );
$this -> load -> library('alias' );
$this -> form_validation -> set_rules('catid' 'Loại sản phẩm' 'required' , , );
$this -> form_validation -> set_rules('producer' 'Nhà cung cấp' 'required' , , );
( if $this -> form_validation -> run () == TRUE ){
$mydata= array (
'catid' =>$_POST ['catid' ],
'producer' =>$_POST ['producer' ],
'namé =>$_POST ['namé ],
'alias' => $string = $this -> alias -> str_alias( $_POST ['namé ]),
'detail' =>$_POST ['detail' ],
'sortDesc' =>$_POST ['sortDesc' ],
'number' =>$_POST ['number' ],
'salé =>$_POST ['sale_of' ],
'pricé =>$_POST ['price_root' ],
Trang 28//thuc mục chứa file
$config ['upload_path'] = './public/images/products/' ;
//Định dạng file được phép tải
$config ['allowed_types' ] = 'jpg|png|gif' ;
//Dung lượng tối đa
$config ['max_size' ] = '500' ;
$config ['encrypt_name' ] = TRUE ;
//Chiều rộng tối đa
$config ['max_width' ] = '1028' ;
//Chiều cao tối đa
$config ['max_height' ] = '768' ;
//load thư viện upload
//bien chua cac ten file upload
$name_array = array ();
//lưu biến môi trường khi thực hiện upload
$file = $_FILES ['image_list' ];
$count = count( $file ['name' ]);
$img = '' ;
$this -> load -> library('upload' , $config );
for ( $i= ; $i <= $count - 1 ; $i++ ){
$_FILES ['userfile' 'name' ][ ] = $file ['name'][ $i ]; //khai báo tên của file thứ i
$_FILES ['userfile' 'type' ][ ] = $file ['type'][ $i ]; //khai báo kiểu của file thứ i
$_FILES ['userfile' 'tmp_name' ][ ] = $file ['tmp_name'][ $i ]; //khai báo đường dẫn tạm của file thứ i $_FILES ['userfile' 'error' ][ ] = $file ['error'][ $i ]; //khai báo lỗi của file thứ i
$_FILES ['userfile' 'size' ][ ] = $file ['size'][ $i ]; //khai báo kích cỡ của file thứ i
Trang 29//thực hiện upload từng file
if ($this -> upload -> do_upload ()){
//nếu upload thành công thì lưu toàn bộ dữ liệu
$data = $this -> upload -> data ();
//in cấu trúc dữ liệu của các file
$img = $data ['file_namé] '#' ;
}
}
//Lưu nhóm hình ảnh chi tiết
$img = rtrim( $img , ); '#'
$mydata ['img'] = $img ;
( if $this -> upload -> do_upload('img' )){
$data = $this -> upload -> data ();
$mydata ['avatar'] =$data ['file_namé ];
}
$this -> Mproduct -> product_insert( $mydata );
$this -> session -> set_flashdatắsuccess' 'Thêm sản phẩm thành công' , );
redirect('admin/product' 'refresh' , );
} else {
$this ->data [ 'view' ] = 'insert';
$this ->data [ 'titlé ] = 'Thêm sản phẩm mớí;
$this -> load -> view('backend/layout', $this ->data );
}
}
function check (){
$giaban = $this -> input -> post('price_buý);
$giagoc = $this -> input -> post('price_root');
Trang 302.3.6 Thuật toán sửa thông tin sản phẩm
$user_role = $this -> session -> userdatắsessionadmin' );
$this -> load -> library('session');
$this -> load -> library('alias');
$this -> form_validation -> set_rules('namé, 'Tên sản phẩm' 'required' , );
$this -> form_validation -> set_rules('catid', 'Loại sản phẩm' 'required' , );
$this -> form_validation -> set_rules('producer', 'Nhà cung cấp' 'required' , );
$this -> form_validation -> set_rules('price_buý ,'Giá bán', 'required|callback_check' );
if ( $this -> form_validation -> run () == TRUE ){
$mydata= array (
'catid' =>$_POST [ 'catid' ],
'producer' =>$_POST [ 'producer' ],
'namé =>$_POST [ 'namé ],
'alias' => $string= $this -> alias -> str_alias( $_POST [ 'namé ]),
'detail' =>$_POST [ 'detail' ],
'sortDesc' =>$_POST [ 'sortDesc' ],
'salé =>$_POST [ 'sale_of' ],
'pricé =>$_POST [ 'price_root' ],
'price_salé =>$_POST [ 'price_buý ],
'modified' =>$today ,
'modified_bý => $this -> session -> userdată 'id' ),
'status' =>$_POST [ 'status' ]
);
$this -> Mproduct -> product_update( $mydata $id , );
$this -> session -> set_flashdatắsuccess' 'Cập nhật sản phẩm thành công' , );
redirect('admin/product' 'refresh' , );