Viết chương trình quản lý các đối tượng để thực hiện cho “Bài toán quản lý hàng mỹ phẩm”. Môn IT05 cấu trúc dữ liệu và giải thuật đã bao gồm code c++ , Viện Đại Học Mở Hà Nội.Đa phần các cửa hàng mỹ phẩm ở Việt Nam đều được mở ra tự phát, hoặc được truyền lại từ đời này sang đời khác. Các chủ cửa hàng chủ yếu quản lý cửa hàng theo độ nhạy và kinh nghiệm gia truyền được truyền lại mà thiếu kinh nghiệm quản lý khoa học và chưa có chiến lược phát triển cụ thể. Chính vì vậy có chương trình quản lý cửa hàng mỹ phẩm là quan trọng
Trang 1MỤC LỤC
1 XÁC ĐỊNH BÀI TOÁN 2
2 XÁC ĐỊNH CTDL BIỂU DIỄN BÀI TOÁN 2
3 XÁC ĐỊNH CÁC THUẬT TOÁN – CÁC CHỨC NĂNG 2
4 LẬP TRÌNH – CÀI ĐẶT 3
5 KIỂM THỬ - LẬP BỘ TEST 13
5.1 Chọn yêu cầu 13
5.2 Nhập thông tin mỹ phẩm 14
5.3 Danh sách mỹ phẩm đã nhập 15
5.4 Tìm kiếm mỹ phẩm theo tên 15
5.5 Sắp xếp danh sách mỹ phẩm theo giá bán giảm dần 15
5.6 Tính tổng tiền các loại mỹ phẩm trong cửa hàng 15
5.7 Hiển thị các loại mỹ phẩm số lượng lớn hơn 10 16
5.8 Tìm mỹ phẩm có số lượng lớn nhất 16
5.9 Thêm nhân viên vào danh sách 17
5.10 Hiển thị danh sách nhân viên đã nhập 18
5.11 Tìm kiếm nhân viên theo tên 18
5.12 Sắp xếp nhân viên theo tên 19
6 Kết luận hướng phát triển 19
Trang 2ĐỀ TÀI: Viết chương trình quản lý các đối tượng để thực hiện cho “Bài toán quản lý
hàng mỹ phẩm”
I Nội dung:
* Các thao tác cần thực hiện
- Nhập – In danh sách đối tượng;
- Thêm, sửa, xoá đối tượng
- Tìm kiếm đối tượng
- Sắp xếp đối tượng
- Các yêu cầu tìm phần tử lớn nhất, nhỏ nhất
- Các yêu cầu tính tổng, trung bình, đếm
- Các yêu cầu thống kê theo điều kiện
1 XÁC ĐỊNH BÀI TOÁN
Đa phần các cửa hàng mỹ phẩm ở Việt Nam đều được mở ra tự phát, hoặc được truyền lại từ đời này sang đời khác Các chủ cửa hàng chủ yếu quản lý cửa hàng theo độ nhạy và kinh nghiệm gia truyền được truyền lại mà thiếu kinh nghiệm quản lý khoa học và chưa có chiến lược phát triển cụ thể Chính vì vậy có chương trình quản lý cửa hàng mỹ phẩm là quan trọng
2 XÁC ĐỊNH CTDL BIỂU DIỄN BÀI TOÁN
- Quản lý thông tin sản phẩm
- Quản lý thông tin nhân viên
3 XÁC ĐỊNH CÁC THUẬT TOÁN – CÁC CHỨC NĂNG
Tổ chức lưu trữ bài toán bằng : Danh sách liên kết đơn.
Các thuật toán
Phương pháp Đổi chỗ trực tiếp (Interchange sort)
Phương pháp Nổi bọt (Bubble sort)
Phương pháp Chèn trực tiếp (Insertion sort)
Phương pháp Chọn trực tiếp (Selection sort)
Các chức năng chính như:
- Tạo list
- Tạo struct
- Các hàm xử lý dữ liệu (thêm, sửa, xoá, tìm kiếm…)
- Các hàm xử lý khác
Chương trình khi chạy ban đầu xuất hiện danh sách lựa chọn chức năng:
- Nhập thông tin mỹ phẩm
Trang 3- In danh sách mỹ phẩm đã nhập
- Tìm kiếm mỹ phẩm theo tên
- Sắp xếp theo đơn giá bán giảm dần
- Tính tổng tiền mỹ phẩm
- Hiển thị các mỹ phẩm có số lượng lớn hơn 10
- Tìm kiếm mỹ phẩm có số lượng lớn nhất
- Thêm nhân viên vào danh sách
- Hiển thị danh sách nhân viên đã nhập
- Tìm kiếm nhân viên theo tên
- Sắp xếp danh sách nhân viên giảm dần
4. LẬP TRÌNH – CÀI ĐẶT
Tiến hành cài đặt bài tập, Liệt kê cấu trúc chương trình tổng quát và đưa ra một số code xử lý chính
- Tiến hành code
#include <stdio.h>
#include <string.h>
struct MyPham;
struct NhanVien;
void hienThiDSMyPham(struct MyPham* ds, int slsv);
void hienThiTenCot();
void hienThiDSNhanVien(struct NhanVien* ds, int slsv);
void hienThiTenCotNhanVien();
struct MyPham {
char MaMyPham[50];
char TenMyPham[50];
char Hang[50];
float DonGiaBan;
int SoLuongBan;
float ThanhTien;
};
//nhanvien
struct NhanVien{
Trang 4char MaNhanVien[50];
char TenNhanVien[50];
};
struct MyPham nhapMyPham() {
struct MyPham MyPham;
printf("\nNhap Ma my pham: ");
scanf("%s", &MyPham.MaMyPham);
printf("\nNhap Ten my pham: ");
scanf("%s", &MyPham.TenMyPham);
printf("\nNhap hang: ");
scanf("%s", &MyPham.Hang);
printf("\nNhap Don gia Ban: ");
scanf("%f", &MyPham.DonGiaBan);
printf("\nNhap so luong: ");
scanf("%d", &MyPham.SoLuongBan);
return MyPham;
}
//nhanvien
struct NhanVien nhapNhanVien() {
struct NhanVien NhanVien;
printf("\nNhap Ma nhan vien: ");
scanf("%s", &NhanVien.MaNhanVien);
printf("\nNhap Ten nhan vien: ");
scanf("%s", &NhanVien.TenNhanVien);
return NhanVien;
}
Trang 5void hienThiMyPham(struct MyPham sv){
printf("%-20s %-20s %-20s %-10.2f %-10d %-10.2f\n",
sv.MaMyPham, sv.TenMyPham, sv.Hang, sv.DonGiaBan, sv.SoLuongBan,
sv.DonGiaBan*sv.SoLuongBan);
}
// nhan vien
void hienThiNhanVien(struct NhanVien sv){
printf("%-20s %-20s \n",
sv.MaNhanVien, sv.TenNhanVien);
}
void hienThiDSMyPham(struct MyPham* ds, int slsv) {
hienThiTenCot();
int i;
for(i = 0; i < slsv; i++) {
hienThiMyPham(ds[i]);
}
printf(" -"
" -\n");
}
//dsnhanvien
void hienThiDSNhanVien(struct NhanVien* ds, int slsv) {
hienThiTenCotNhanVien();
int i;
for(i = 0; i < slsv; i++) {
hienThiNhanVien(ds[i]);
}
printf(" -"
" -\n");
}
Trang 6void hienThiTenCot() {
printf(" -"
" -\n");
printf("%-20s %-20s %-20s %-10s %-10s %-10s \n",
"MaMyPham", "TenMyPham", "Hang", "DonGiaBan", "SoLuongBan",
"ThanhTien");
}
//hienthicotnhanvien
void hienThiTenCotNhanVien() {
printf(" -"
" -\n");
printf("%-20s %-20s \n",
"MaNhanVien", "TenNhanVien");
}
void timTheoTen(struct MyPham* ds, int slsv) {
char ten[20];
printf("Nhap ten My Pham can tim kiem: ");
scanf("%s", ten);
hienThiTenCot();
int i, timSV = 0;
for(i = 0; i < slsv; i++) {
if(strcmp(ten, ds[i].TenMyPham) == 0) {
hienThiMyPham(ds[i]);
timSV = 1;
} }
if(timSV == 0) {
Trang 7printf("Khong co My Pham %s trong danh sach!\n", ten);
}
}
// tìm kiem ten nhan vien
void timTheoTenNhanVien(struct NhanVien* ds, int slsv) {
char ten[20];
printf("Nhap ten Nhan Vien can tim kiem: ");
scanf("%s", ten);
hienThiTenCotNhanVien();
int i, timSV = 0;
for(i = 0; i < slsv; i++) {
if(strcmp(ten, ds[i].TenNhanVien) == 0) {
hienThiNhanVien(ds[i]);
timSV = 1;
} }
if(timSV == 0) {
printf("Khong co nhan vien %s trong danh sach!\n", ten);
}
}
void sapXepTheoDonGia(struct MyPham* ds, int slsv) {
int i, j;
for(i = 0; i < slsv - 1; i++) {
for(j = i + 1; j < slsv; j ++) {
if(ds[i].DonGiaBan < ds[j].DonGiaBan) {
struct MyPham sv = ds[i];
ds[i] = ds[j];
ds[j] = sv;
}
Trang 8} }
}
//sap xep nhan vien theo ten
void sapXepNhanVienTheoTen(struct NhanVien* ds, int slsv) {
int i, j;
for(i = 0; i < slsv - 1; i++) {
for(j = i + 1; j < slsv; j ++) {
if(ds[i].TenNhanVien < ds[j].TenNhanVien) {
struct NhanVien sv = ds[i];
ds[i] = ds[j];
ds[j] = sv;
} }
}
}
void TinhTongTienMyPham(struct MyPham* ds, int slsv) {
int i;
for(i = 0; i < slsv - 1; i++) {
ds[i].ThanhTien=ds[i].SoLuongBan*ds[i].DonGiaBan;
}
}
void MyPhamSLLonNhat( struct MyPham* sv, int slsv)
{
int index=1;
float max=0;
int i;
Trang 9for(i=0;i<slsv;i++)
{
if(sv[i].SoLuongBan>max)
{
max=sv[i].SoLuongBan;
index=i;
}
}
hienThiMyPham(sv[index]);
}
void MyPhamSLlonhon10( struct MyPham* sv, int slsv)
{
int index=1;
float max=0;
int i;
for(i=0;i<slsv;i++)
{
if(sv[i].SoLuongBan>10)
{
hienThiMyPham(sv[i]);
}
}
}
int main() {
int i;
Trang 10struct MyPham dssv[100];
struct NhanVien dsnv[100];
int slsv = 0;
int luaChon;
do {
printf("=============== MENU ===============");
printf("\n1 Them My Pham vao danh sach.");
printf("\n2 Hien thi danh sach My Pham da nhap.");
printf("\n3 Tim kiem My Pham theo ten.");
printf("\n4 Sap xep theo don gia ban giam dan.");
printf("\n5 Tinh tong tien My Pham.");
printf("\n6 Hien thi cac My Pham co so luong lon hon 10.");
printf("\n7 Tim My Pham co so luong lon nhat.");
printf("\n8 Them Nhan Vien Vao danh sach.");
printf("\n9 Hien thi danh sach nhan vien da nhap.");
printf("\n10 Tim kiem nhan vien theo ten.");
printf("\n11 Sap xep nhan vien theo ten.");
printf("\n0 Thoat chuong trinh.");
printf("\nBan chon ? ");
scanf("%d", &luaChon);
struct MyPham sv;
struct NhanVien nv;
switch(luaChon) {
case 0:
break;
case 1:
Trang 11sv = nhapMyPham();
dssv[slsv++] = sv;
break;
case 2:
hienThiDSMyPham(dssv, slsv);
break;
case 3:
timTheoTen(dssv, slsv);
break;
case 4:
sapXepTheoDonGia(dssv, slsv);
printf("\nDanh sach My Pham sau khi sap xep theo don gia ban giam dan:\n");
hienThiDSMyPham(dssv, slsv);
break;
case 5:
printf(" -"
" -\ n");
printf("%-20s %-20s %-20s %-10s %-10s %-10s \n",
"MaMyPham", "TenMyPham", "Hang", "DonGiaBan",
"SoLuongBan", "ThanhTien");
for(i = 0; i < slsv; i++) {
printf("%-20s %-20s %-20s %-10.2f %-10d %-10.2f\ n",
dssv[i].MaMyPham, dssv[i].TenMyPham, dssv[i].Hang, dssv[i].DonGiaBan, dssv[i].SoLuongBan, dssv[i].SoLuongBan*
dssv[i].DonGiaBan);
Trang 12}
break;
case 6:
MyPhamSLlonhon10(dssv, slsv);
break;
case 7:
MyPhamSLLonNhat(dssv, slsv);
break;
case 8:
nv = nhapNhanVien();
dsnv[slsv++] = nv;
break;
case 9:
hienThiDSNhanVien(dsnv, slsv);
break;
case 10:
timTheoTenNhanVien(dsnv, slsv);
break;
case 11:
sapXepNhanVienTheoTen(dsnv, slsv);
printf("\nDanh sach nhan vien sap xep ten tu z den a:\n"); hienThiDSNhanVien(dsnv, slsv);
break;
default:
printf("Sai chuc nang, vui long chon lai!\n");
Trang 13} } while(luaChon);
return 0;
}
5 KIỂM THỬ - LẬP BỘ TEST
Thực hiện chạy với bộ dữ liệu mẫu (Input-Output) đã xác định ở phần 2
Cho biết kết quả khi chạy từng chức năng tương ứng trên bộ dữ liệu Input đó
Chụp hình ảnh kết quả chương trình tương ứng
5.1 Chọn yêu cầu
Trang 145.2 Nhập thông tin mỹ phẩm
Trang 155.3 Danh sách mỹ phẩm đã nhập
5.4 Tìm kiếm mỹ phẩm theo tên
5.5 Sắp xếp danh sách mỹ phẩm theo giá bán giảm dần
5.6 Tính tổng tiền các loại mỹ phẩm trong cửa hàng
Trang 165.7 Hiển thị các loại mỹ phẩm số lượng lớn hơn 10
5.8 Tìm mỹ phẩm có số lượng lớn nhất
Trang 175.9 Thêm nhân viên vào danh sách
Trang 185.10 Hiển thị danh sách nhân viên đã nhập
5.11 Tìm kiếm nhân viên theo tên
Trang 195.12 Sắp xếp nhân viên theo tên
6 Kết luận hướng phát triển
- Hoàn thiện chức năng của phần mềm
- Khắc phục các lỗi tồn tại của hệ thống
- Ghi nhận thêm các yêu cầu khác của phần mềm