You are on page 1of 17

HỌC VIỆN KHOA HỌC VÀ CÔNG NGHỆ VIỆT NAM

KHOA CÔNG NGHỆ THÔNG TIN

TIỂU LUẬN
CẤU TRÚC DỮ LIỆU & GIẢI THUẬT
NÂNG CAO
Đề tài:

NGHIÊN CỨU CẤU TRÚC DỮ LIỆU & GIẢI THUẬT


TRONG HỆ THỐNG WEBSITE TMĐT

Sinh viên thực hiện: Đỗ Minh Tuấn

Chuyên ngành: Hệ thống thông tin

Lớp: ITT2022B

Mã sinh viên: 22810012

Hà Nội, 11-2022
1. Phân tích yêu cầu bài toán
Để tiếp cận sự phát triển của nền thương mại điện tử ở Việt Nam, em đã tìm
hiểu, phân tích xây dựng và cài đặt hệ thống website thương mại điện tử với mặt
hàng là: máy ảnh, máy quay và phụ kiện
Khảo sát tổng quan hệ thống:
- Người chủ cửa hàng là người có chức quyền to nhất trong hệ thống: có thể
xem thông tin về tình hình thu nhập cũng như mọi thay đổi trên website bán hàng.
- Nếu chủ cửa hàng cũng là người quản trị website thì mọi thông tin trên
website là do chủ cửa hàng đưa lên, nếu thuê nhân viên quản trị thì chủ cửa hàng
cung cấp thông tin hoặc cấp quyền hạn cho người quản trị.
- Nhân viên chỉ là người giao dịch: tức là xem trong ngày, trong tuần có bao
nhiêu đơn đặt hàng và đã giải quyết được bao nhiêu, để có thể báo cáo bất cứ lúc
nào cho chủ cửa hàng.
- Khách hàng có thể xem các sản phẩm trên giao diện website và tiến hành đặt
hàng trên hệ thống.
- Có 3 phương thức thanh toán cho khách hàng:
1. Thanh toán bằng thẻ phát hành của công ty. người mua chỉ cần nhập tên tài
khoản, mã tài khoản vào căn cứ vào tài khoản còn mà trừ dần đi số tiền mua hàng.
2. Thanh toán trực tiếp cho shipper sau khi nhận và kiểm tra hàng (Ship COD)
3. Thanh toán qua thẻ Visa
Yêu cầu của người quản trị hệ thống:
- Quản lí chung: liên quan tới các thông tin nhân viên, khách hàng, hàng,..
- Cập nhật thông tin hàng hóa trực tuyến: Dễ dàng cập nhật và thường xuyên
thay đổi hình ảnh, thông tin chi tiết giá các mặt hàng bạn sẽ kinh doanh ở bất cứ
đâu.
- Quản lí các đơn hang trực tuyến: Quản lí, lưu trữ và báo cáo thong tin về đặt
hàng và trạng thái của đơn hàng: đã giao hàng chưa, đã thanh toán chưa …
- Quản lí khách hàng: Lưu trữ các hoạt động gắn với các khách hàng của cửa
hàng. Mọi hoạt động gắn với khách hàng và đơn hàng đều có thể thực hiện từ xa,
không phụ thuộc vào vị trí địa lý.
- Thống kê chi tiết cụ thể, chính xác và nhanh chóng: Thống kê được mặt hàng
nào bán hết, mặt hàng nào bán chạy, mặt hàng nào tồn kho, mặt hàng nào cần
chỉnh sửa…; Tổng hợp thu chi hàng ngày, hàng tuần, hàng tháng hàng quý và hàng
năm; Tổng hợp lưu trữ được ý kiến phản ánh của khách hàng để có thể trả lời
khách hàng một cách nhanh chóng và chính xác nhất.

2
- Cho phép in các danh sách , các thông tin cần thiết.
Yêu cầu của nhân viên:
- Sản phẩm : Có thể thêm, sửa xóa thông tin, danh mục
- Quản lý các module : định vị, chỉnh sửa , bật - tắt các module chức năng
- Xem các báo cáo , thống kê, đơn đặt hàng
- Nhận và phản hồi các yêu cầu của khách hàng
- Quản lý các thông tin khác : khuyến mại, tin tức…
2. Thiết kế cấu trúc dữ liệu
2.1. Actor và Usecase của hệ thống
- Khách Hàng:
 Đăng ký thành viên
 Tìm kiếm sản phẩm:
 Tìm kiếm theo tên sản phẩm
 Tìm kiếm theo mức giá
Tìm kiếm theo nhà cung cấp …
 Đặt hàng, mua hàng: đăng nhập.
 Thanh toán: Trực tiếp tiền mặt, chuyển khoản, qua thẻ visa
- Nhân Viên:
 Quản lí hàng
 Quản lí khách hàng
 Quản lí các loại hàng
 Quản lí bán hàng
 Báo cáo thống kê
- Quản trị viên:
 Quản lí nhân viên:
 Thêm nhân viên
 Sửa nhân viên
 Xóa nhân viên
 Quản lí phân quyền:
2.2. Biểu đồ phân cấp chức năng

3
2.3. Biểu đồ luồng dữ liệu mức bối cảnh

4
2.4. Biểu đồ luồng dữ liệu ở mức đỉnh

2.5. Biểu đồ lớp lĩnh vực

5
2.6. Biểu đồ lớp tham gia ca sử dụng

6
7
8
2.7. Biểu đồ lớp chi tiết

2.8. Mô tả thực thể kết hợp


- Nhacungcap(nhacungcap_id, tennhacungcap, ghichu)
Mỗi nhà cung cấp có một mã nhà cung cấp (id) duy nhất để phân biệt với các
nhà cung cấp khác. Mỗi nhà cung cấp còn được xác định bởi tên nhà cung cấp, mô
tả nhà cung cấp.
- Sanpham(product_id, model, images, soluong, gia, mota, ghi chu,
nhacungcap):
 product_id: là Mã sản phẩm (khóa chính)
 model: tên của sản phẩm
 images: hình ảnh của sản phẩm
 soluong: số lượng sản phẩm đang có tại cửa hàng
 gia: giá cả của sản phẩm
 mota: mô tả về sản phẩm
 ghichu: một số thông tin thêm về sản phẩm
 nhacungcap: tên nhà cung cấp sản phầm.
9
- Giohang(giohang_id, user_id, username, soluong, tinhtrang, tonggia, ngaydat):
 giohang_id: mỗi giỏ hàng có 1 id riêng để phân biệt với các giỏ hàng khác
 user_id: id của người dùng giỏ hàng (nếu có)
 username: Tên của người dùng đặt giỏ hàng - Soluong: Số lượng hàng có
trong giỏ hàng
 soluong: số lượng sản phẩm
 tinhtrang: tình trạng của giỏ hàng
 tonggia: giá của sản phẩm trong giỏ hàng
 ngaydat: ngày tháng năm tạo giỏ hàng và mua hàng.
- Hoadon(hoadon_id, hoten, diachi, email, dienthoai, gia, soluong):
 hoadon_id: Mã của hóa đơn
 hoten: họ tên của người mua hàng
 diachi: địa chỉ của người mua hàng
 email: hòm thư điện tử của người mua hàng
 dienthoai: điện thoại của người mua hàng
 gia: là tổng số tiền phải trả, tiền hàng + cước vận chuyển(nếu có)
 soluong: Số lượng hàng mua.
- user(user_id, user_group_id, username, password, email, firstname, lastname,
ip, datetime)
 user_id: Mã duy nhất của người dùng
 user_group_id: người dùng thuộc nhóm nào
 username: tên truy cập tài khoản người dùng
 password: mật khẩu của người dùng
 email: email của người dùng
 firstname: họ và tên đệm của người dùng
 lastname: tên người dùng
 ip: cấp quyền cho người dùng
 datetime: ngày đăng kí của user
- Tintuc(id_tintuc, noidung, ghichu)
 id_tintuc: mã của tin tức
 noidung: nội dung của tin tức
 ghichu: ghi chú thêm của phần tin tức

10
2.9. Sơ đồ quan hệ dữ liệu

3. Chương trình
1 phần chương trình về danh sách liên kết

#include<iostream>
#include<stdlib.h>
using namespace std;
/////////////////////khai bao cac kieu, cau truc va ham se su dung trong
chuong trinh
//Dinh nghia kieu ElemType la kieu int
typedef int ElemType;
//Khai bao mot nut' trong danh sach
struct LNode {
ElemType data; //Du lieu
LNode* next; //Con tro den nut' tiep theo
};

//khoi tao danh sach


void InitList(LNode*& HL);
//Xoa' trang danh sach
void ClearList(LNode*& HL);

11
//Xem kich co danh sach lien ket
int ListSize(LNode* HL);
//Kiem tra danh sach rong
bool ListEmpty(LNode* HL);
//Lay du lieu cua nut' o vi tri xac dinh
ElemType GetElem(LNode* HL, int pos);
//Duyet danh sach
void TraverseList(LNode* HL);
//Tim kiem trong danh sach
bool FindList(LNode* HL, ElemType& item);
//Cap nhat danh sach
bool UpdateList(LNode* HL, const ElemType& item);
//Chen` them nut' moi' vao danh sach
void InsertList(LNode*& HL, const ElemType& item, int mark);
//Xoa' mot nut’ khoi danh sach
bool DeleteList(LNode*& HL, ElemType& item, int mark);
//Sap xep danh sach
void OrderOutputList(LNode* HL, int mark);

//////////Dinh nghia chi tiet cac ham


//Khoi tao danh sach
void InitList(LNode*& HL)
{
HL=NULL;
}
//Xoa' trang danh sach
void ClearList(LNode*& HL)
{
LNode *cp, *np;
cp=HL;
while(cp!=NULL)
{
np=cp->next;
delete cp;
cp=np;
}
HL=NULL;
}
//Kiem tra kich co cua danh sach
int ListSize(LNode* HL)
{
LNode* p=HL;
int i=0;
while(p!=NULL) {
i++;
p=p->next;
}
return i;
}
//Kiem tra danh sach rong
bool ListEmpty(LNode* HL)
{
return (HL==NULL);
}
12
//Lay du lieu cua 1 nut' co' vi tri xac dinh
ElemType GetElem(LNode* HL, int pos)
{
if(pos<1) {
cerr<<"Khong co nut nao o vi tri pos!"<<endl;
exit(1);
}
LNode* p=HL;
int i=0;
while(p!=NULL) {
i++;
if(i==pos) break;
p=p->next;
}
if(p!=NULL)
return p->data;
else {
cerr<<"vi tri pos vuot qua' danh sach!"<<endl;
exit(1);
}
}
//Duyet danh sach
void TraverseList(LNode* HL)
{
LNode* p=HL;
while(p!=NULL) {
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
//Tim kiem phan tu trong danh sach
bool FindList(LNode* HL, ElemType& item)
{
LNode* p=HL;
while(p!=NULL)
if(p->data==item) {
item=p->data;
return true;
}
else
p=p->next;
return false;
}
//Cap nhat phan tu trong danh sach
bool UpdateList(LNode* HL, const ElemType& item)
{
LNode* p=HL;
while(p!=NULL)
if(p->data==item)
break;
else
p=p->next;
if(p==NULL)

13
return false;
else {
p->data=item;
return true;
}
}

//Chen them nu't moi' vao danh sach


///mark > 0: chen vao dau danh sach
///mark < 0: chen vao cuoi danh sach
///mark = 0: chen vao danh sach ma khong lam thay doi thu tu tang dan cua
danh sach
void InsertList(LNode*& HL, const ElemType& item, int mark)
{
//Tao nut' moi voi gia tri da cho
LNode* newptr;
newptr=new LNode;
newptr->data=item;

if(mark>0) {
newptr->next=HL; HL=newptr;
}
else if(mark<0) {
if(HL==NULL) {newptr->next=NULL; HL=newptr;}
else {
LNode* p=HL;
while(p->next!=NULL)
p=p->next;
p->next=newptr; newptr->next=NULL;
}
}
else {
LNode* cp;
LNode* ap;
ap=NULL; cp=HL;
while(cp!=NULL) {
if(item<cp->data) break;
else {ap=cp; cp=cp->next;}
}
if(ap==NULL) {newptr->next=HL; HL=newptr;}
else {newptr->next=cp; ap->next=newptr;}
}
}
//Xoa phan tu khoi danh sach
///item la du lieu cua phan tu xoa
///mark > 0: xoa phan tu dau cua danh sach
///mark < 0: xoa phan tu cuoi danh sach
///mark = 0: Xoa phan tu co du lieu la item
bool DeleteList(LNode*& HL, ElemType& item, int mark)
{
if(HL==NULL) return false;
if(mark>0) {//xoa phan tu dau
LNode* p=HL;
item=HL->data;
14
HL=HL->next;
delete p;
return true;
}
else if(mark<0) {
LNode *cp=HL, *ap=NULL;
while(cp->next!=NULL) {
ap=cp; cp=cp->next;
}
if(ap==NULL) HL=NULL;
else ap->next=cp->next;
item=cp->data;
delete cp;
return true;
}
else {
LNode *cp=HL, *ap=NULL;
while(cp!=NULL)
if(cp->data==item) break;
else {ap=cp; cp=cp->next;}
if(cp==NULL) return false;
else {
if(ap==NULL) HL=HL->next;
else ap->next=cp->next;
item=cp->data;
delete cp;
return true;
}
}
}
//sap xep danh sach
//mark = 1: sap xep thu tu tang dan
//mark khac 1: sap xep thu tu giam dan
void OrderOutputList(LNode* HL, int mark)
{
if(HL==NULL) {cout<<"Danh sach rong!"<<endl; return;}
//Tao mot danh sach lien ket moi de luu tam danh sach da sap xep
LNode* head=new LNode; //phan tu dau cua danh sach moi
head->data=HL->data; head->next=NULL;
//Bat dau sap xep danh sach da cho vao danh sach moi
for(LNode* p=HL->next; p; p=p->next) {
LNode* q=new LNode;
q->data=p->data;
LNode *cp=head, *ap=NULL;
//Tim vi tri thich hop cho q de chen` vao ds moi' theo thu' tu
while(cp) {
if(mark==1) {
if(q->data<cp->data) break;
else {ap=cp; cp=cp->next;}
}
else {
if(q->data>cp->data) break;
else {ap=cp; cp=cp->next;}
}

15
}
//chen nut' vao vi tri vua tim duoc
if(ap==NULL) {q->next=head; head=q;}
else {
q->next=cp; ap->next=q;
}
}
//Duyet danh sach vua tao
TraverseList(head);
//Xoa trang danh sach vua tao
ClearList(head);
}

/////////////////////////chuong trinh chinh


int main(int argc, char argv[])
{
LNode* a;
InitList(a);
int i;
ElemType x;
//Nhap vao danh sach 5 phan tu
cout<<"Nhap 5 so nguyen tu ban phim:"<<endl;
for(i=0; i<5; i++) {
cout<<">So thu "<<i<<": ";cin>>x;
InsertList(a,x,-1);
}
//Chen them 2 phan tu nguyen vao danh sach
cout<<"Nhap 2 so nguyen tu ban phim de them vao danh sach:"<<endl;
cout<<"So thu nhat: ";cin>>x; InsertList(a,x,1);
cout<<"So thu hai: ";cin>>x; InsertList(a,x,1);
//Duyet va sap xep danh sach lien ket a
cout<<"Danh sach a"<<endl;
TraverseList(a);
cout<<"Danh sach a sap xep tang dan"<<endl;
OrderOutputList(a,1);
cout<<"Danh sach a sap xep giam dan"<<endl;
OrderOutputList(a,0);
//Chen tat ca phan tu cua a vao b theo thu tu
LNode* b;
InitList(b);
for(LNode* p=a; p; p=p->next)
InsertList(b, p->data, 0);
//Duyet va in ra danh sach b
cout<<"Chen cac phan tu cua a vao b theo thu tu tang
dan"<<endl<<">Danh sach b"<<endl;
TraverseList(b);
//Lan luot xoa nut' dau, cuoi va nut' co gia tri nhap vao tu ban phim
cout<<"Xoa nut dau"<<endl;
if(DeleteList(a,x,1)){
cout<<"Xoa thanh cong!"<<endl;
cout<<"Danh sach a sau khi xoa"<<endl;
TraverseList(a);
}else cout<<"Xoa that bai!"<<endl;

16
cout<<"Xoa nut cuoi"<<endl;
if(DeleteList(a,x,-1)){
cout<<"Xoa thanh cong!"<<endl;
cout<<"Danh sach a sau khi xoa"<<endl;
TraverseList(a);
}else cout<<"Xoa that bai!"<<endl;

cout<<"Xoa nut co gia tri nhap tu ban phim"<<endl;


cout<<"Nhap gia tri cua nut' can xoa: ";cin>>x;
if(DeleteList(a,x,0)){
cout<<"Xoa thanh cong!"<<endl;
cout<<"Danh sach a sau khi xoa"<<endl;
TraverseList(a);
}else cout<<"Xoa that bai!"<<endl;
cout<<"Danh sach a"<<endl;
//Duyet va in danh sach a
TraverseList(a);
system("pause")

17

You might also like