Khi đã mua tài liệu, liên hệ congluc19297gmail.com để nhận Source code C++ Bài tập lớn viết code mô phỏng phần mềm quản lý và bán hàng online cho một cửa hàng, siệu thị. Có 3 loại người dùng trên hệ thống này người quản trị, người quản lý cửa hàng (store manager) phải đăng nhập tài khoản và mật khẩu vào hệ thống và khách (không cần đăng nhập). Admin menu cung cấp các chức năng gồm có: tạo tài khoản mới, xoá tài khoản, vô hiệu và kích hoạt lại tài khoản, reset password cho một tài khoản. Manager menu cung cấp các tính năng: Thêm, sửa, xoá mặt hàng. Làm các thống kê về dữ liệu trong kho: số lượng mặt hàng của mỗi item, v.v. Do yêu cầu hiện tại giới hạn nên sinh viên không cần làm đầy đủ các tính năng về thống kê nhưng cơ bản phải đưa ra được các thông tin gồm: tổng số mặt hàng trong kho, tổng giá trị ước lượng của các mặt hàng đang có trong kho. Tìm kiếm một mặt hàng trong kho để cập nhật thông tin. Guest menu cung cấp các tính năng gồm: Tìm mặt hàng trong kho. Cập nhật giỏ hàng. Đặt mua (checkout)
Trang 1Tp Hồ Chí Minh, Tháng 06/2016
Trang 2Mục lục
1.1 Các thành viên 3
1.2 Mục tiêu 3
1.3 Tiêu chí đánh giá 3
2 Kế hoạch thực hiện 4 2.1 Tiến độ công việc 4
2.2 Phân công nghiệm vụ 4
2.2.1 Admin menu 4
2.2.2 Manager menu 5
2.2.3 Guest menu 5
2.2.4 Cơ sở dữ liệu chính 5
2.2.5 Bài báo cáo 5
3 Giải quyết bài toán 5 3.1 Phân tích vấn đề 5
3.2 Thiết kế hệ thống và ý tưởng thực hiện 6
3.3 Các công việc cần làm 7
4 Lưu đồ và mã giả 9 4.1 Lưu đồ 9
4.2 Mã giả 11
Trang 3LỜI NÓI ĐẦUNgày nay, với sự bùng nổ của công nghệ thông tin Mọi công việc đều được mã hóa trên máytính đễ dễ quản lý, đặc biệt là các hệ thống lớn Họ cần một công cụ để quản lý, lưu trữ và xử
lí một cách khoa học
Những cách thức thực hiện cổ xưa không còn tác dụng và tối ưu với thời đại hiện nay Thayvào đó con người đã tạo ra được các phần mềm để dễ dàng truy cập để quản lí, chỉnh sửa vàtìm kiếm thông tin Dù là tiệm ăn, quán internet, cửa hàng tiện lợi, hệ thống ngân hàng hay hệthống siêu thị, với quy mô vừa và nhỏ đều sử dụng công nghệ để công việc trở nên dễ dànghơn
Với đề tài bài tập lớn môn kỹ thuật lập trình lần này Chúng em lần đầu tiên được thực hiệnmột dự án khá lớn và làm quen với công việc viết chương trình bằng ngôn ngữ C++, với lượngkiến thức sử dụng trong đề tài khá lớn để giải quyết các vấn đề Đó chính là thiết kế nên đượcmột hệ thống quản lý bán hàng online cơ bản cho một cửa hàng
Với sự ứng dụng nhiều trong thực tế và để cũng cố kiến thức, đề tài này làm chúng em cảmthấy hứng thú hơn với môn học Chúng em chân thành cảm ơn các thầy đặc biệt là thầy LêThành Sách và thầy Nguyễn Đức Dũng đã trực tiếp hướng dẫn, giải đáp những thắc mắc vàtruyền kiến thức quý báu giúp chúng em thực hiện được bài tập lớn này
Trang 41 Lập nhóm và tiêu chí đánh giá
1.1 Các thành viên
Họ và tên thành viên MSSVTrần Công Lực 1511917
Văn Tiến Đức 1510824Nguyễn Thành Phương 1512591Nguyễn Trần Lê Minh 1512003Trần Thị Trúc Phương 1512606
1.2 Mục tiêu
- Hoàn thành tốt bài tập lớn với kết quả điểm giỏi
- Nắm được cách sử dụng phần mềm Visual Studio để viết code C++
- Tăng khả năng làm việc nhóm và giải quyết bài toán
- Nâng cao kỹ năng code và áp dụng kiến thức đã học vào thực tiễn
có một thái độ tíchcực về nhiệm vụ
Thỉnh thoảng côngkhai chỉ trích các
dự án hoặc côngviệc của ngườikhác Thường cómột thái độ tíchcực về nhiệm vụ
Thường công khaichỉ trích các dự ánhoặc công việc củangười khác Thường
Đôi khi cung cấpcác ý tưởng hữu íchkhi tham gia vàonhóm và thảo luậntrong lớp Thỏamãn những yêu cầutối thiểu của nhómđặt ra
Hiếm khi cung cấpcác ý tưởng hữu íchkhi tham gia nhóm
và thảo luận tronglớp Thường từ chốigóp ý
Góp phần vào việcnhóm Tuy nhiên,thỉnh thoảng phảithông qua nhắcnhở
Thực hiện nhiệm
vụ được giao chỉkhi phải nhắc nhởnhiều lần
Trang 5Không đề nghị hoặctinh chỉnh các giảipháp, nhưng sẵnsàng thử các giảipháp được đề xuấtbởi các thành viênkhác.
Không cố gắnggiải quyết vấn đềhay giúp đỡ cácthành viên khácgiải quyết vấn đề
Ỷ lại vào các thànhviên khác
Quản
lý thời
gian
Quản lý thời gian
tốt trong suốt quá
Có xu hướng trìhoãn, nhưng vẫnbàn giao nhiệm
vụ đúng thời hạn
Không có mặt đúnggiờ từ 3-5 lần trongcác buổi họp nhóm
và thảo luận trênlớp
Hiếm khi thựchiện đúng thời hạnnhiệm vụ đượcgiao Quá 5 lầnkhông có mặt đúnggiờ trong các buổihọp nhóm và thảoluận trên lớp
2 Kế hoạch thực hiện
2.1 Tiến độ công việc
Công việc Thời gian - Địa điểm - Phương thức Thành viên
Phân tích yêu cầu đề bài, phác
họa thiết kế Tối 8-11h: 8/5/2016 Phòng tự học A19 Đầy đủ
Phân công nhiệm vụ cụ thể
Giúp các thành viên hình dung
sơ lược công việc
Tối 8-11h: 9/5/2016 Phòng tự học A19 Đầy đủTham khảo các nguồn tài liệu
Bắt đầu thực hiện công việc
được giao của từng thành viên
Tối 8-10h30: 2 4 6 Các ngày từ11/5/2016-23/5/2016 Phòng tự họcA19
Đầy đủChạy demo các đoạn code Tối 8-11h:25/5/2016 Quán nước AG4 Đầy đủ
Công tác chỉnh sửa và bổ sung Các tối từ 1/6 – 6/6/2016 Phương thức
Công tác viết báo cáo và hoàn
thiện code lần cuối
7/6-10/6/2016: Phương thức trao đổi
2.2 Phân công nghiệm vụ
2.2.1 Admin menu
Công việc: Thiết lập menu các chức năng cho Admin Bao gồm khởi tạo và cấp phát quyền
cho tài khoản, xóa tài khoản, chỉnh sửa tài khoản, vô hiệu hóa tài khoản.Chịu trách nhiệm: Văn Tiến Đức - Lê Tân Ri
Trang 62.2.2 Manager menu
Công việc: Thiết lập menu các chức năng cho nhân viên quản lý hàng hóa Bao gồm nhập,
chỉnh sửa, tìm kiếm, xóa thông tin hàng hóa Thống kê số lượng hàng hóa vàtổng giá trị tài sản có trong kho hàng
Chịu trách nhiệm: Trần Công Lực - Trần Thị Trúc Phương
2.2.3 Guest menu
Công việc: Thiết lập menu chức năng cho khách hàng Bao gồm tìm kiếm và xem thông tin
hàng hóa đang có trong kho, cập nhật, chỉnh sửa giỏ hàng và đặt mua hàng hóa.Chịu trách nhiệm: Trần Công Lực - Nguyễn Trần Lê Minh
2.2.4 Cơ sở dữ liệu chính
Công việc: Thiết lập các hàm để tìm kiếm, chuyển đổi, lưu trữ cơ sở dữ liệu chính
Chịu trách nhiệm: Nguyễn Thành Phương
2.2.5 Bài báo cáo
- Công việc: Viết báo cáo Vẽ sơ đồ khối (flow chart) Viết mã giả
- Sơ đồ khối và mã giả: Lê Tân Ri
- Viết báo cáo bằng word: Trần Thị Trúc Phương, Trần Công Lực, Lê Tân Ri
- Code lại bài báo cáo bằng Latex: Trần Công Lực
Trên đây là phân công chịu trách nhiệm chính từng phần của các thành viên trong nhóm,
tuy nhiên trong quá trình thực hiện bài tập vẫn có sự linh động giữa các phần giữa các
thành viên để đảm bảo hoàn thành tiến độ
3 Giải quyết bài toán
3.1 Phân tích vấn đề
Thiết kế chương trình hệ thống quản lý hàng hóa online cơ bản cho một cửa hàng Được
thiết kế với 3 loại người dùng trên hệ thống này: Bao gồm người quản trị, người quản lý cửa
hàng (Store Manager) và khách (người dùng không cần đăng nhập vào hệ thống) Tùy thuộc vào
loại người dùng mà chương trình sẽ cung cấp các chức năng khác nhau Chương trình sẽ đọc/lưu
thông tin về các mặt hàng và thông tin người dùng từ cơ sở dữ liệu dưới file Dưới đây là những
yêu cầu cơ bản:
1 Yêu cầu chung:
• Hiển thị được menu tùy chọn (Khách hàng - Quản trị viên - Nhân viên)
• Ứng với mỗi tài khoản sẽ hiển thị được danh sách menu có chức năng khác nhau
Trang 7• Thực hiện được khả năng di chuyển giữa các menu một cách linh hoạt.
• Thực hiện được chức năng ứng dụng giúp người dùng tương tác và thực hiện tác vụ
2 Đối với quản trị viên và nhân viên:
• Hiện được cửa sổ đăng nhập cho Admin (Mật khẫu mã hóa dưới dạng "***"
• Yêu cầu nhập lại khi nhập sai mật khẩu
• Hiện được các menu chức năng của Admin
• Thực hiện đúng được việc tạo và cấp phát tài khoản, chỉnh sửa thông tin tài khoản,xóa và vô hiệu hóa tài khoản
3 Đối với nhân viên quản lý kho hàng:
• Sau khi được cấp phát tài khoản hoặc đăng nhập bằng tài khoản mặc định Phải hiện
ra danh sách menu đúng với chức năng của nhân viên quản lý kho hàng
• Chạy dúng phần 1 Nhập thông tin hàng hóa Có tùy chọn để quay lại màn hìnhchính
• Mã mặt hàng để phân biệt giữa các hàng hóa, nếu nhập bị trùng phải kiểm tra điềukiên trùng mã mặt hàng vầ thông báo người dùng nhập lại
• Chạy dúng phần 2 Chỉnh sửa thông tin hàng hóa.Có tùy chọn để quay lại màn hìnhchính
• Chạy dúng phần 3 Xóa hàng hóa Có tùy chọn để quay lại màn hình chính
• Chạy đúng phần 4.Thống kê số lượng hàng hóa và tải sản có trong kho Có đặc tùychọn quay lại màn hình chính
• Ở màn hình chính, có tùy chọn để quay lại màn hình đăng nhập
4 Đối với khách hàng:
• Hiện ra được menu chức năng dành riêng cho khách hàng
• Chạy đúng phần 1 Tìm kiếm thông tin hàng hóa, xem tất cả thông tin hàng hóa cótrong kho
• Chạy đúng phần 2 Xem lại những mặt hàng đã chọn trong giỏ hàng Chỉnh sửa, thêmbớt và thay đổi số lượng mong muốn
• Chạy đúng phần 3.Đến việc thanh toán giỏ hàng Hiện ra tổng giá tiền phải trả vớiđơn hàng đã chọn
• Mỗi chứng năng có tùy chọn để quay lại màn hình chính của khách hàng
• Có tùy chọn để quay lại màn mình ban đầu
3.2 Thiết kế hệ thống và ý tưởng thực hiện
- Thiết lập 4 kiểu dữ liệu có cấu trúc, bao gồmaccount,user,productvàroles
- Sử dụng vecto để chứa thông tin Có 2 vecto được tạo đó là vectoaccounts_listcó kiểu
dữ liệu là account và vecto product_list có kiểu dữ liệu là product Mỗi thông tin nhậpvào sẽ được phân loại và lưu trữ vào vecto tương ứng
- Tạo nhiều hàm nhỏ thực hiện mỗi chứng năng riêng Sau đó gọi lại và ghép theo trật tựnhất định để tạo thành một hàm lớn hơn
Trang 83.3 Các công việc cần làm
- Thực hiện vấn đề bằng cách tinh chế dần từng bước, thực hiện chi tiết hóa một giải phápbằng một chuỗi các hành động cho đến khi đạt được mô tả giải thuật tương tự với yêu cầucủa trường trình
• Function 1: Thiết lập hàm khởi đầu chương trình, hiện ra menu cho người dùng tùy chọn
• Function 2: Xử lí tùy chọn menu của người dùng gồm Guest hay Staff hoặc là tùy chọn kếtthúc chương trình
• Function 3: Thiết lập hàm tạo tài khoản Trong hàm này bao gồm các hàm con hỗ trợ(Xóa màn hình và hiện ra tiêu đề của menu, khai báo 2 biến cục bộ kiểu account, rolessau đó truy xuất các vùng tin và gọi các hàm thành phần được khởi tạo trước đó để nhập
và gán cho biến cục bộ
Các hàm thành phần cin_username(accounts_list), cin_password(), cin_f ullname(),cin_sex(), cin_ID() , cin_phone(), cin_role() lần lượt có chức năng là nhập tên tàikhoản, nhập password, nhập họ và tên, chọn giới tính, nhập chứng minh nhân dân, nhập
số điện thoại, chọn chức năng muốn cấp phát cho tài khoản
• Function 4: Thiết lập hàm chỉnh sửa thông tin tài khoản Phầm này bao gồm các hàmcon hỗ trợ (Hàm check_pos(user, accounts_list) xác định vị trí của tài khoản cần kiểmtra trongaccounts_list, hàmpreview(accounts_list)xem lại tất cả thông tin tài khoảngtại vị trí cần chỉnh sửa và hàm tùy chọn cin_choice())
Ứng với mỗi lựa chọn xác định được thông tin nào cần chỉnh sửa Truy xuất đếnthông tin đó tại vị trí tài khoản đã được xác định và gọi lại hàm nhập thông tin
• Function 5: Thiết lập hàm xóa tài khoản delete_account() Tương tự sử dụng lại hàmcheck_pos(user, accounts_list)xác định vị trí tài khoản muốn xóa Dùng tiếp hàm có sẵntrong thư viện vectorerase()để xóa tài khoảng tại vị trí cụ thể trongaccounts_list
• Function 6: Thiết lập hàm nhập thông tin hàng hóacreate_product(vector < product >
&product_list) Trong hàm này bao gồm các hàm con hỗ trợ (clear_scr() Xóamàn hình và hiện ra tiêu đề của menu, khai báo biến cục bộ có kiểu là product,cin_N ameP roduct(), cin_CommodityCode(), cin_P roductCode(), cin_Company(),cin_dayM anuf acture(), cin_monthM anuf acture(), cin_yearM anuf acture(),cin_dayExpire(), cin_monthExpire(), cin_yearExpire(), cin_numberP roduct(),cin_P rice()
Truy xuất đến các vùng tin thông qua biến cục bộ và gọi các hàm thành phần đểnhập thông tin hàng hóa Sau khi nhập xong, gọi hàmcin_choice()để nhập tùy chọn vàđẩy thông tin vừa nhập vào vectorproduct_list()
• Function 7: Thiết lập hàm chỉnh sửa thông tin hàng hóa edit_product(vector <product > &product_list) Trong hàm này bao gồm các hàm con hỗ trợ ( Hàmpreview_product_new() xuất tất cả thông tin hàng hóa có trong kho dưới dạng bảng,hàmpreview_product()xuất thông tin 1 hàng hóa dưới dạng danh sách
Trang 9Nhìn vào bảng danh sách hàng hóa, dùng hàm cin_choice_new() để tùy chọnhàng hóa muốn chỉnh sửa Ứng với mỗi hàng hóa, nhân viên được phép chọn 1 hoặc nhiềutrường để chỉnh sửa và gọi các hàm con hỗ trợ nhập dữ liệu đã nhắc đến ởF unction 6
• Function 8: Thiết lập hàm xóa hàng hóa delete_product(), ý tưởng thực hiện hàm nàytương tự như delete_account() Sử dụng lại những hàm con hỗ trợ đã thực hiện
• Function 9: Thiết lập hàm thống kê tổng số lượng hàng hóa và tổng giá trị tài sản hiện cótrong khostatistics_product() Truy xuất đến các vùng tin giá mặt hàngP rice và vùngtin số lượng hàng hóa của mỗi mặt hàngnumberP roduct trong vector product_list()đểtính tổng giá trị tài sản hiện có trong kho
• Function 10: Thiết lập các hàm dành cho khách hàng, bao gồm hàm tìm kiếm hàng hóa
f ind_product(), hàm xóa hàng hóa trong giỏ hàngdelete_item() Ngoài ra phải tạo thêmmột vector để chứa thông tin hàng hóa mà khách hàng đã chọn muavector < product >item_list, hàm cho khách hàng mua hàng hóabuy()
- Ngoài những hàm chính được nêu trên cần phải làm, trong trương trình còn có nhiều hàmkhác như hàm chuyển từ kiểu dữ liệu string sangint, hàm tô màu text, để chuẩn hóadòng nhập, mã hóa mật khẩu, lưu thông tin vào tệp, xử lý lỗi khi người dùng thực hiệntác vụ
Trang 104 Lưu đồ và mã giả
4.1 Lưu đồ
Trang 124.2 Mã giả
Dưới đây là mã giả cho những hàm chính trong chương trình, những hàm con chi tiết chỉnêu gọn chức năng của mỗi hàm
//Hàm main
Khai báo kiểu struct account chứa thông tin về tài khoản
Khai báo kiểu struc product chứa thông tin về hàng hoá
Khởi tạo vector <account> accounts_list
Khởi tạo vector <product> product_list
Gọi hàm read_account(accounts_list) và read_product(product_list)
// Đọc thông tin từ file account.txt và product.txt
Tạo biến choice (Kiểu enum Choice) để lưu lựa chọn
Vòng lặp vô tận:
Trang 13If choice=one gọi hàm guest(product_list), đi đến khu vực dành cho khách hàng
Lấy thông tin về chức vụ của tài khoản (account.pos)
If account.pos=”sysadmin” Then gọi hàm sysadmin();
Đi đến khu dành cho admin quản lí tài khoản
If account.pos=”staff” Then gọi hàm staff();
Đi đến khu dành cho store manager quảng lí về hàng hoá
Else Thông báo dòng nhập không hợp lệ, mời nhập lại
Lặp lại chương trình cho đến khi choice=exit thì thoát khỏi vòng lặp
Gọi hàm write_account(accounts_list); //Ghi dữ liệu ra file account.txt
Gọi hàm write_product(product_list); //Ghi dữ liệu ra file product.txt
//Kết thúc hàm main
//Hàm guest()
Khởi tạo vector <product> item_list //Chứa đơn hàng
Gọi hàm guest_menu() //Hiển thị tùy chọn cho khách hàng
Choice choice; //Khai báo biến choice kiểu Choice lưu lựa chọn
Vòng lặp vô tận:
If choice = one Then Gọi hàm find_product(); //Tìm kiểm hàng hóa và chọn mua
If choice = two Then Goi hàm view_cart(); //Xem giỏ hàng và chỉnh sửa
If choice = three Then Gọi hàm buy(); // Mua hàng (Checkout)
Ngược lại, thông báo dòng nhập lỗi, mời nhập lại
Nếu choice = exit thì thoát khõi vòng lặp
//Kết thúc hàm guest()
//Hàm find_product()
Gọi hàm find_menu(); //Hiển thị chức năng tìm và chọn mua
Choice = choice; //Khai báo biến choice kiểu Choice
Vòng lặp vô tận:
If choice = one Else Gọi hàm view_prolist();
If choice = two Else Gọi hàm có chức năng lọc (Chưa hoàn tất)
Else Thông báo dòng nhập lỗi, mời nhập lại
Nếu choice = exit thì thoát khõi vòng lặp
//Kết thúc hàm find_product()
//Các hàm hỗ trợ cho guest()
void view_cart_total(vector <product> item_list); //Danh sách hàng hóa
void edit_menu(); //Hiển thị chức năng chỉnh sửa giỏ hàng
void view_cart(); //Thực hiện chọn hàng muốn mua
int view_choice_item(); //Hiển thị ds hàng hóa, chọn hàng cần thao tác
void adjust_amount(); //Chỉnh sửa số lượng muốn mua
void delete_item(); //Xóa mặt hàng đã chọn
void buy(); //Tiến hành mua hàng (Nếu khách hàng chọn yes)
Trang 14long cin_number(); //Nhập vào số và kiểm tra lỗi của dòng nhập
//Hàm sysadmin()
Gọi hàm list_account(); //Hiển thị tùy chọn cho admin
Choice = choice; //Khai báo biến choice
Vòng lặp vô tận:
If choice = one Then Gọi hàm create_account();
If choice = two Then Gọi hàm edit_account();
If choice = three Then Gọi hàm delete_acccout();
Else Thông báo dòng nhập lỗi, mời nhập lại
Nếu choice = exit thì thoát khõi vòng lặp
//Kết thúc hàm sysadmin()
//Các hàm hỗ trợ cho sysadmin()
string cin_fullname(); //Hàm nhập họ tên
string cin_username(vector <account> accounts_list); //Nhập users
string cin_password(); //Nhập password
string cin_sex(); //Nhập giới tính
string cin_phone(); //Nhập số điện thoại
roles cin_role(); //Nhập quyền của tài khoản
void preview(account acc); //Hiển thị ds thông tin vừa tạo
void list_account(); //Hiển thị tùy chọn cho admin
Choice cin_choice(); //Hàm nhập lựa chọn
void create_account(vector <account> &accounts_list);
void delete_account(vector <account> &accounts_list, string pos);
void edit_account(vector <account> &accounts_list);
//Hàm staff()
Choice = choice; //Khai báo biến choice
Gọi hàm list_staff();
Vòng lặp vô tận:
If choice = one Then gọi hàm create_product ();
If choice = two Then gọi hàm edit_product();
If choice = three Then gọi hàm delete_product();
If choice = four Then gọi hàm statistics_product();
Else Thông báo dòng nhập lỗi, mời nhập lại
Nếu choice = exit Thì thoát khõi vòng lặp
//Kết thúc hàm staff()
// Các hàm hỗ trợ cho staff()
void create_product(vector <product> &product_list);
void edit_product(vector <product> &product_list);
void delete_product(vector <product> &product_list);
void preview_product_new(product pro, int i); // Dạng bảng
void preview_product(product pro); //Dạng danh sách
void statistics_product(vector <product> &product_list);
void list_product(); //Hiển thị chức năng ở phần edit hàng hóa
int cin_choice_new(); //Hàm nhập lựa chọn, kiểm tra lỗi dòng nhập