1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo cuối kỳ lập trình di động đề tài xây dựng app đặt món ăn tại nhà hàng

40 1 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Trong số đó các phần mềm trên nền tảng di dộng được ưa chuộng và sửdụng phổ biến.Trong lĩnh vực kinh doanh nhà hàng, quán ăn,thông thường khi gọi móntrong nhà hàng, khách hàng có thể gọi

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN ĐIỆN TỬ - VIỄN THÔNG

BÁO CÁO CUỐI KỲ

LẬP TRÌNH DI ĐỘNGĐề tài:

XÂY DỰNG APP ĐẶT MÓN ĂN TẠI NHÀ HÀNG

Giảng viên hướng dẫn: PGS TS VŨ SONG TÙNG

Nhóm sinh viên thực hiện:

Hà Nội, tháng 7 - 2022

Trang 2

LỜI NÓI ĐẦU

Ngày nay, khi ngày càng có nhiều sự phát triển tiến bộ của công nghệthông tin, các phần mềm đều được thiết kế để hướng đến đa nền tảng, đa thiếtbị Trong số đó các phần mềm trên nền tảng di dộng được ưa chuộng và sửdụng phổ biến.

Trong lĩnh vực kinh doanh nhà hàng, quán ăn,thông thường khi gọi móntrong nhà hàng, khách hàng có thể gọi món trực tiếp tại quầy thu ngân hoặc khikhách ngồi nhân viên đến tận nơi đưa thực đơn cho khách hỏi xem khách muốndùng đồ ăn,thức uống gì rồi ghi chép để thông báo nhà bếp chế biến Nếukhách muốn đổi món hoặc order nhiều lần sẽ gây phức tạp cho quá trình phụcvụ và tốn kém nhiều thời gian đi lại

Để giúp các nhà hàng, quán ăn loại bỏ các vấn đề đó nhóm 6 chúng emquyết định lựa chọn đề tài xây dựng ứng dụng order món ăn trên nền tảng diđộng Không chỉ giúp cho việc gọi món và phục vụ món dễ dàng hơn, ứng dụngcòn giúp các quản lý quản lý hệ thống, nhân viên, bàn ăn và món ăn dễ dànghơn Đồng thời, ứng dụng cũng giúp nhân viên tránh nhầm lẫn trong việc tínhtoán

Trang 3

MỤC LỤC

DANH MỤC HÌNH VẼ i

DANH MỤC BẢNG BIỂU ii

CHƯƠNG 1 TỔNG QUAN VỀ ĐỀ TÀI 1

1.1 Giới thiệu về đề tài 1

1.2 Các tính năng của chương trình 1

1.3 Tính hữu dụng của phần mềm 2

1.4 Công cụ lập trình Android Studio 2

1.5 Kết luận chương 2

CHƯƠNG 2 THIẾT KẾ HỆ THỐNG 3

2.1 Thiết kế cơ sở dữ liệu 3

2.1.1 Sơ đồ khối chức năng 3

2.1.2 Các thực thể trong cơ sở dữ liệu 4

Trang 4

DANH MỤC HÌNH V

Hình 2.1 Sơ đồ khối chức năng 3

Hình 2.2 Sơ đồ thực thể liên kết 8

Hình 2.3 Cấu trúc thư mục java 9

Hình 2.4 Cấu trúc thư mục res 9

Hình 2.5 Cấu trúc thư mục drawable 10

Hình 2.6 Cấu trúc thư mục layout 11

Hình 2.7 Cấu trúc thư mục values 12

Hình 2.8 Cấu trúc thư mục anim 12

Hình 2.9 Cấu trúc thư mục menu 13

Hình 2.10 Cấu trúc thư mục manifests 13

Hình 2.11 Cấu trúc Gradle Scripts 14

Hình 3.1 Màn hình đăng nhập app 27

Hình 3.2 Màn hình đăng ký nhân viên mới 28

Hình 3.3 Màn hình danh sách nhân viên 29

Hình 3.4 Màn hình chức năng sửa xóa nhân viên 30

Hình 3.5 Màn hình sửa thông tin nhân viên 31

Hình 3.6 Màn hình danh sách bàn ăn 32

Hình 3.7 Màn hình hiển thị thực đơn 33

Hình 3.8 Màn hình danh sách món ăn 33

Hình 3.9 Popup thêm bàn ăn 34

Hình 3.10 Popup sửa bàn ăn 35

Trang 5

DANH MỤC BẢNG B

Bảng 2.1 Bảng thông tin nhân viên 5

Bảng 2.2 Bảng thông tin bàn 6

Bảng 2.3 Bảng thông tin món ăn 6

Bảng 2.4 Bảng thông tin loại món ăn 7

Bảng 2.5 Bảng thông tin quyền 7

Bảng 2.6 Bảng thông tin gọi món 7

Bảng 2.7 Bảng chi tiết gọi món 8

Trang 6

CHƯƠNG 1 TỔNG QUAN VỀ ĐỀ TÀI

Chương 1 sẽ giới thiệu tổng quan về mục tiêu, các tính năng và yêu cầu đề tài

1.1 Giới thiệu về đề tài

Tên đề tài: Ứng dụng chọn món ăn dành cho nhà hàng Phạm vi sử dung: trong các nhà hàng, quán ănĐối tượng sử dụng: nhân viên nhà hàng

Mục tiêu: Tạo ra một ứng dụng có khả năng quản lý nhân viên đồng thời trợgiúp nhân viên order thức ăn, giảm thời gian order món ăn, giảm sai sót trongkhâu đặt/trả tiền món ăn, giúp tự động hóa và tối ưu hóa lợi nhuận

Yêu cầu: giao diện dễ hiểu đối với những người mới tiếp cận lần đầuYêu cầu thiết kế

Yêu cầu chức năng:

o User có quyền có thể thay đổi thông tin món ăno Có thể thêm, sửa, xóa nhân viên, bàn ăn, món ăn

o Hiển thị được danh sách nhân viên, hiển thị bàn ăn và các loại món ăno Các món ăn đi kèm với thông tin: giá, hình ảnh.

o Sau khi chốt món hiện ra bảng hoá đơn nhưng vẫn có thể tiếp tục chọnmón

o Có thể chọn món và huỷ mónYêu cầu phi chức năng:

o Sử dụng phần mềm Android Studioo Hệ thống có tính bảo mật và phân quyềno Giao diện dễ sử dụng, không bị nhầm lẫno Ứng dụng được dùng trên điện thoại hoặc tablet

1.2 Các tính năng của chương trình

Nhân viên sẽ sử dụng một smartphone chạy Android có cài đặt ứng dụng trênđó Khách hàng sẽ chọn bàn, chọn món trên Menu, sau đó nhân viên sẽ nhậpthông tin vào ứng dụng Thông tin sẽ được gửi đến máy quản lí và thực hiệntheo yêu cầu của khách hàng.

Khi khách hàng ra về thanh toán, hóa đơn và thông tin từ máy quản lí sẽ đượcgửi đến máy điện thoại của nhân viên và hoàn thành quá trình thanh toán chokhách hàng.

Trang 7

1.4 Công cụ lập trình Android Studio

Các thành phần:

Test Modules: Những modules này chứa mã để kiểm tra ứng dụng và xây dựngbên trong ứng dụng kiểm tra mà nó chạy trên thiết bị Mặc định, Android studiotạo ra androidTest module chèn trong JUnit tests.

Library Modules: Những modules này chứa các mã nguồn có thể chia sẻ trongứng dụng Android và nguồn tài nguyên đó ta có thể tham chiếu đến dự ánAndroid Điều này rất hữu ích khi chúng ta muốn sử dụng lại mã nguồn.Library modules không được cài đặt trên thiết bị, tuy nhiên chúng được nhúngtrong tập tin apk tại thời điểm build tập tin apk.

App Engine Module: Dùng để thêm thuộc tính điện toán đám mây đến Thuộctính này cho phép chúng ta áp dụng các chức năng như sao lưu dữ liệu ngườidùng tới điện toán đám mây, nội dung máy chủ tới thiết bị di động, tương tácthời gian thực.

Android Application Modules: Các modules của ứng dụng Android được baogồm trong tệp tin apk tệp tin cơ sở trên việc cài đặt hệ thống build Chúngchứa các thứ của ứng dụng như mã nguồn, các tệp tin nguồn Hầu hết mãnguồn và các tệp tin nguồn được sinh ra bởi mặc định.

Trang 8

2.1 Thiết kế cơ sở dữ liệu

2.1.1 Sơ đồ khối chức năng.

Hình 2.1 Sơ đồ khối chức năng

Nếu nhấn vào xóa thì sẽ xóa nhân viên đó.

Cũng trong hiển thị danh sách nhân viên có nút thêm nhân viên (đăng ký) khi nhấnvào thì sẽ hiện lên một màn hình cho phép thêm mới một nhân viên.

Món ăn

Ban đầu, người dùng cần thêm các loại món ăn Sau khi đã có các loại món ăn,người dùng có thể thêm các món ăn thuộc các loại món ăn đó với giá tiền đi kèm.

Bàn ăn

Trang 9

Trong hiển thị bàn ăn khi nhấn giữ bàn ăn nào đó sẽ xuất hiện lên option menu cólựa chọn sửa.

Nếu nhấn vào sửa thì sẽ hiện lên màn hình cho phép sửa tên của bàn ăn.

Cũng trong hiển thị bàn ăn có nút thêm bàn ăn khi nhấn vào thì sẽ xuất hiện lênmột popup để nhập tên bàn ăn mới.

Gọi món, thanh toán

Trong hiển thị bàn ăn khi nhấn vào bàn ăn nào đó sẽ xuất hiện các nút gọi món vàthanh toán.

Khi nhấn vào nút gọi món thì màn hình sẽ chuyển đến màn hình loại thực đơn vàkhi nhấn vào trong đó có thể chọn được món ăn Và trạng thái sẽ chuyển về bàn đãđược gọi.

Nếu thêm món ăn mà đã gọi trước đó thì sẽ cộng dồn số lượng món ăn đó, ngượclại thì ghi mới vào danh sách.

Nếu nhấn nút thanh toán thì sẽ xóa danh sách các món đã được gọi và trạng thái sẽchuyển về bàn chưa được gọi.

2.1.2 Các thực thể trong cơ sở dữ liệu

Thực thể Nhân Viên bao gồm các thuộc tính:

o Mã nhân viêno Tên đăng nhậpo Mật khẩuo Giới tínho Ngày sinh

o Chứng minh nhân dâno Mã quyền

Thực thể Bàn ăn bao gồm các thuộc tính: o Mã bàn ăn

o Tên bàn ăno Tình trạng

Thực thể Món ăn bao gồm các thuộc tính: o Mã món ăn

o Tên món ăno Mã loại món ăno Giá tiềno Hình ảnh

Trang 10

Thực thể Loại món bao gồm các thuộc tính: o Mã loại món ăn

o Tên loại món ăn

Thực thể Quyền bao gồm các thuộc tính: o Mã quyền

o Tên quyền

Thực thể Gọi món bao gồm các thuộc tính: o Mã gọi món

o Mã bàno Mã nhân viêno Ngày gọi móno Tình trạng

Thực thể Chi tiết gọi món bao gồm các thuộc tính: o Mã gọi món

o Mã món ăno Số lượng2.1.3 Thiết kế dữ liệuHệ thống gồm các bảng sau

o Bảng NHANVIEN (Nhân viên): lưu thông tin nhân viên

Bảng 2.1 Bảng thông tin nhân viên

o Bảng BANAN (Bàn ăn): lưu thông tin bàn

Trang 11

Bảng 2.2 Bảng thông tin bàn

o Bảng MONAN (Món ăn): lưu thông tin món ăn

Bảng 2.3 Bảng thông tin món ăn

o Bảng LOAIMON (Loại món): lưu thông tin loại món ăn

Bảng 2.4 Bảng thông tin loại món ăn

o Bảng QUYỀN (Quyền): lưu thông tin quyền

Trang 12

Bảng 2.5 Bảng thông tin quyền

o Bảng GOIMON (Gọi món): lưu thông tin gọi món

Bảng 2.6 Bảng thông tin gọi món

o Bảng CHITIETGOIMON (Chi tiết gọi món): lưu thông tin chi tiết gọimón

Bảng 2.7 Bảng chi tiết gọi món

TBLCHITIETGOIMON

Trang 13

2.1.4 Sơ đồ thực thể liên kết

Hình 2.2 Sơ đồ thực thể liên kết2.2 Cấu trúc Android Project

2.2.1 Thư mục java

Thư mục này sẽ chứa tất cả các file mã nguồn java (.java) sẽ tạo trong quá trìnhphát triển ứng dụng Đối với ứng dụng này, thư mục java bao gồm mã nguồn java củacác lớp DTO, DAO, database và các activity trong ứng dụng.

Trang 14

Hình 2.6 Cấu trúc thư mục layout

2.2.2.3 Thư mục values

Thư mục này sẽ chứa một số file XML khác nhau, chẳng hạn như strings, colors,styles.

Trang 15

Hình 2.7 Cấu trúc thư mục values

Trang 16

Hình 2.9 Cấu trúc thư mục menu

2.2.3 Thư mục manifests

Thư mục này sẽ chứa một file Manifest (AndroidManifest.xml) cho ứng dụngAndroid File manifest này sẽ chứa thông tin về ứng dụng (Android version, accesspermissions, metadata và các component của ứng dụng) File manifest sẽ hoạt độngnhư một trung gian giữa hệ điều hành Android và ứng dụng

Hình 2.10 Cấu trúc thư mục manifests

2.2.4 Gradle Scripts

Trong Android, Gradle là công cụ build hệ thống và Gradle được tích hợp sẵn vàoAndroid Studio, và được điều khiển một cách tự động thông qua Android Studio.Trong gradle có build.gradle (Project) và build.gradle (Module) được sử dụng để buildcác cấu hình áp dụng cho tất cả các module ứng dụng hoặc dành riêng cho một mô-đun ứng dụng.

Trang 17

Hình 2.11 Cấu trúc Gradle Scripts2.3 Cài đặt và chạy demo giải thích chức năng chính

2.3.1 Cài đặt

Cấu hình đề nghị cho thiết bị chạy ứng dụng:Điện thoại di động Android 6.0 MarshmallowRam 1GB

o Ram: 1,5 GBo Bộ nhớ trống: 6 GBThiết bị thật: Vivo Y55

o Phiên bản Android: 6.0o API: 23

o RAM: 2 GBo Bộ nhớ trống: 3 GB2.3.2 Code

Link Github: https://github.com/LeNgan1411/Food_App-master.git

Trang 18

Đăng kíKhai báo biến

public classDangKyActivityextendsAppCompatActivityimplementsView OnClickListener { private EditText edTenDangNhap, edMatKhau, edNgaySinh, edCMND;

private Button btnDongY, btnThoat; private TextView txtTieuDeDangKy; private RadioGroup rgGioiTinh; private RadioButton rdNam, rdNu; private Spinner spinQuyen; private String sGioiTinh; private NhanVienDAO nhanVienDAO; private QuyenDAO quyenDAO; private int manhanvien = 0; private List<QuyenDTO> quyenDTOList; private List<String> dataAdapter;

Khởi tạo đối tượng và phương thức

protected voidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_dangky);

edTenDangNhap = findViewById(R.id.edTenDangNhapDK); edMatKhau = findViewById(R.id.edMatKhauDK); edNgaySinh = findViewById(R.id.edNgaySinhDK); edCMND = findViewById(R.id.edCMNDDK); rdNam = findViewById(R.id.rdNam); rdNu = findViewById(R.id.rdNu);

txtTieuDeDangKy = findViewById(R.id.txtTieuDeDangKy); btnDongY = findViewById(R.id.btnDongYDK); btnThoat = findViewById(R.id.btnThoatDK); spinQuyen = findViewById(R.id.spinQuyen); rgGioiTinh = findViewById(R.id.rgGioiTinhDK); btnDongY.setOnClickListener(this); btnThoat.setOnClickListener(this); edNgaySinh.setOnClickListener(this); nhanVienDAO = newNhanVienDAO this( ); quyenDAO = new QuyenDAO this( ); quyenDTOList = quyenDAO LayDanhSachQuyen (); dataAdapter = newArrayList<>();

for int ( i = 0; i < quyenDTOList.size(); i ++){ String tenquyen = quyenDTOList.get(i).getTenQuyen(); dataAdapter.add(tenquyen);

}

manhanvien = getIntent().getIntExtra("manhanvien", 0);

Đổ dữ liệu lên Spiner

ArrayAdapter<String> adapter = new ArrayAdapter<> this android R( , layout.simple_list_item_1, dataAdapter); spinQuyen.setAdapter(adapter);

adapter.notifyDataSetChanged(); (manhanvien != 0){if

txtTieuDeDangKy.setText(getResources().getString(R.string.capnhatnhanvien)); NhanVienDTO nhanVienDTO = nhanVienDAO LayDanhSachNhanVienTheoMa (manhanvien);

Trang 19

edCMND.setText(String.valueOf(nhanVienDTO.getCMND())); edNgaySinh.setText(nhanVienDTO.getNGAYSINH()); String gioitinh = nhanVienDTO.getGIOITINH(); (gioitinh.equals(if "Nam")) rdNam.setChecked(true); else rdNu.setChecked(true);

}

Đồng ý thêm nhân viên

private voidDongYThemNhanVien(){

String sTenDangNhap = edTenDangNhap.getText().toString(); String sMatKhau = edMatKhau.getText().toString(); switch (rgGioiTinh.getCheckedRadioButtonId()){ caseR.id.rdNam:

sGioiTinh="Nam"; break; caseR.id.rdNu:

sGioiTinh="Nữ"; break; }

String sNgaySinh = edNgaySinh.getText().toString(); String sCMND = edCMND.getText().toString(); (sTenDangNhap == if null || sTenDangNhap.equals("")){

Toast.makeText(DangKyActivity this , getResources().getString( string.loitendangnhap), RToast.LENGTH_SHORT).show();

}

elseif (sMatKhau == null || sMatKhau.equals("")){

Toast.makeText(DangKyActivity this , getResources().getString( string.loinhapmatkhau), RToast.LENGTH_SHORT).show();

} else {

NhanVienDTO nhanVienDTO = new NhanVienDTO(); nhanVienDTO.setTENDANGNHAP(sTenDangNhap); nhanVienDTO.setMATKHAU(sMatKhau); nhanVienDTO.setCMND(sCMND); nhanVienDTO.setNGAYSINH(sNgaySinh); nhanVienDTO.setGIOITINH(sGioiTinh); int maquyen = 1;

(spinQuyen.getSelectedItem().toString().equalsIgnoreCase(if "Quản lý")){ maquyen = 0;

}

nhanVienDTO.setMAQUYEN(maquyen);

boolean kiemtra = nhanVienDAO ThemNV (nhanVienDTO);

(kiemtra) if Toast.makeText(DangKyActivity this , getResources().getString( string.themthanhcong), RToast.LENGTH_SHORT).show();

elseToast.makeText(DangKyActivity this , getResources().getString( string.themthatbai), RToast.LENGTH_SHORT).show();

} }

Sửa nhân viên

String sTenDangNhap = edTenDangNhap.getText().toString(); String sMatKhau = edMatKhau.getText().toString(); String sNgaySinh = edNgaySinh.getText().toString(); String sCMND = edCMND.getText().toString(); switch (rgGioiTinh.getCheckedRadioButtonId()) { caseR.id.rdNam:

sGioiTinh = "Nam"; break; caseR.id.rdNu:

sGioiTinh = "Nữ"; break; }

(sTenDangNhap == if null || sTenDangNhap.equals("")){

Toast.makeText(DangKyActivity this , getResources().getString( string.loitendangnhap), RToast.LENGTH_SHORT).show();

}

elseif (sMatKhau == null || sMatKhau.equals("")){

Trang 20

} else {

NhanVienDTO nhanVienDTO = new NhanVienDTO(); nhanVienDTO.setMANV(manhanvien); nhanVienDTO.setTENDANGNHAP(sTenDangNhap); nhanVienDTO.setMATKHAU(sMatKhau); nhanVienDTO.setCMND(sCMND); nhanVienDTO.setNGAYSINH(sNgaySinh); nhanVienDTO.setGIOITINH(sGioiTinh); int vitri = spinQuyen.getSelectedItemPosition(); int maquyen = quyenDTOList.get(vitri).getMaQuyen(); nhanVienDTO.setMAQUYEN(maquyen);

boolean kiemtra = nhanVienDAO SuaNV (nhanVienDTO); (kiemtra)if

Toast.makeText(DangKyActivity this , getResources().getString( string.suathanhcong), RToast.LENGTH_SHORT).show();

(manhanvien != 0)if

//Thực hiện code sửa nhân viên

SuaNhanVien(); else

//Thực hiện thêm mới nhân viên

DongYThemNhanVien(); break;

caseR.id.btnThoatDK:

finish(); break;

caseR.id.edNgaySinhDK:

ChooseDay(); break; } }

Chọn ngày

Calendar cal = Calendar.getInstance();

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); try {

(!edNgaySinh.getText().toString().equals(if "")) cal.setTime(sdf.parse(edNgaySinh.getText().toString())); else

cal.getTime();

int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH); int day = cal.get(Calendar.DAY_OF_MONTH);

DatePickerDialog dialog = new DatePickerDialog this android R style Theme_Holo_Light_Dialog( , , (datePicker, yearSelected, monthSelected, daySelected) -> {

monthSelected = monthSelected + 1;

Date date = StringToDate(daySelected + + monthSelected + + yearSelected, "/" "/" "dd/MM/yyyy"); edNgaySinh.setText(new SimpleDateFormat("dd/MM/yyyy").format(date));

}, year, month, day);

dialog.getWindow().setBackgroundDrawable(new ColorDrawable Color( TRANSPARENT)); dialog.setTitle("Chọn ngày sinh");

dialog.show(); } catch ParseException ( e) {

Toast.makeText(this, "Lỗi: " + e.getMessage(), Toast.LENGTH_SHORT).show(); }

Ngày đăng: 11/06/2024, 17:41

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w