Tải bản đầy đủ (.docx) (17 trang)

Xây dựng chương trình quản lý hàng hóa gồm có các thuộc tính

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (252.66 KB, 17 trang )

Lời Mở Đầu
Trong khoa học máy tính, cấu trúc dữ liệu là cách lưu dữ liệu trong máy
tính sao cho nó có thể sử dụng được một cách hiệu quả. Cấu trúc dữ liệu được
triển khai bằng các kiểu dữ liệu, các tham chiếu và các phép toán trên đó được
cung cấp bởi một ngôn ngữ lập trình.
Để giải quyết bài toán ta có thế nhiều thuật toán khác nhau, giải thuật ra
đời. giải thuật là các câu lệnh chặt chẽ, rõ rang xác định một trình tự các thao
tác trên một đối tượng nào đó.
Khi đã xác định được cấu trúc dữ liệu thích hợ, người lập trình sẽ bắt đầu
tiến hành xây dựng giải thuật tương ứng theo yêu cầu của đề bài đặt ra trên cơ
sở của cấu trúc dữ liệu đã được chọn. để giải quyết một vấn đề có thể có nhiều
phương pháp do vậy sự lựa chọn phương pháp phù hợp là rất quan trọng.
Giải thuật phản ánh các phép xử lý còn đối tượng xử lý của giải thuật lại
là dữ liệu, chính dữ liệu chứa đựng các thông tin để giải thuật. để xác định được
giải thuật phù hợp cần thiết phải biết nó tác động đến loại dữ liệu nào. Như vậy,
giải thuật và cấu trúc dữ liệu có mối quan hệ mật thiết với nhau được thể hiện
qua công thức:
Như vậy, khi đã có cấu trúc dữ liệu mà chưa tìm ra giải thuật thì không
thể có chương trình và ngược lại không thể có thuật giải khi chưa có cấu trúc
dữ liệu. một chương trình máy tính chỉ có thể được hoàn thiện khi có đầy đủ cả
cấu trúc dữ liệu để lưu trữ dữ liệu và giải thuật để xử lý dữ liệu theo yêu cầu
bài toán đặt ra.
Chúng em cám ơn thầy Trương Công Đoàn đã giúp chúng em hoàn thiện
bài tập, tìm hiểu và hiểu biết hơn về bộ môn này.
1 | P a g e B á o C á o B T L M ô n C ấ u t r ú c & g i ả i t h u ậ t d ữ l i ệ u
Cấu trúc dữ liệu + Giải thuật = Chương trình
MENU CHÍNH
VÀO CHƯƠNG TRÌNH
THOÁT
NHẬP DANH SÁCH HHTÌM KIẾM SẢN PHẨMSẮP XẾP HH THEO ĐƠN GIÁ
THỐNG KÊ SẢN PHẨM THEO ĐƠN GIÁ


TÌM TÊN GẦN ĐÚNG HH
I.GIỚI THIỆU PHÂN TÍCH ĐỀ TÀI
1. Đề bài :
- Xây dựng chương trình quản lý hàng hóa gồm có các thuộc tính: tên hàng, số
lượng, đơn giá, ngày sản xuất. Sử dụng mảng cấu trúc để lưu trữ:
• Thêm các thuật toán như: tìm kiếm tuần tự để tìm 1 sản phẩm trong danh
sách hàng hóa
• Thêm thuật toán sắp xếp nổi bọt để sắp xếp hàng hóa theo đơn giá
• Các yêu cầu khác như: lưu danh sách hàng hóa vào file text
• Xác định menu cho chương trình để người dùng sử dụng
• Xác định thêm các chức năng khác như: thống kê theo đơn giá
• Xác định chức năng tìm kiếm theo tên hàng( cho phép người dùng nhập
gần đúng tên hàng có thể tìm được)
2. Xác định dữ liệu cần lưu trữ trong đề tài
- Yêu cầu: Liệt kê các thành phần dữ liệu cần quản lý, chỉ rõ kiểu tương ứng
và đưa ra một bộ giá trị mẫu.
Các thành phần dữ liệu cần quản lý.
 char tensp[20];
 int soluong;
 int dongia;
 char ngaysx[10];
Bộ giá trị mẫu
Tensp: Samsung s4.
Soluong: 100.
Dongia: 15 000 000.
Ngaysx: 12/12/2013
3. Xác định chức năng cần thực hiện
- Yêu cầu: Liệt kê các chức năng cần thực hiện và vẽ thành sơ đồ khối
2 | P a g e B á o C á o B T L M ô n C ấ u t r ú c & g i ả i t h u ậ t d ữ l i ệ u
4. Thiết kế menu

- Yêu cầu: Chương trình bao gồm các menu gì?
BANG MENU CHUC NANG

1.Nhap danh sach hang hoa.
2.Tim san pham trong danh sach.
3.Sap xep hang hoa theo don gia.
4.Thong ke san pham theo don gia
5.Cho phep tim ten hang gan dung.
De thoat chuong trinh xin moi nhap 0:
II. PHÂN TÍCH CHƯƠNG TRÌNH
1.Các thư viện cần khai báo
<stdio.h> : Thư viện chứa các hàm vào/ ra chuẩn (standard input/output).
Gồm các hàm printf(), scanf(), getc(), putc(), gets(), puts(), fflush(),
fopen(), fclose(), fread(), fwrite(), getchar(), putchar(), getw(), putw()…
- Khai báo : #include <stdio.h>
3 | P a g e B á o C á o B T L M ô n C ấ u t r ú c & g i ả i t h u ậ t d ữ l i ệ u
<conio.h> : Thư viện chứa các hàm vào ra trong chế độ DOS (DOS
console). Gồm các hàm clrscr(), getch(), getche(), getpass(), cgets(),
cputs(), putch(), clreol(),…
- Khai báo : #include <conio.h>
<string.h>: Để điều chỉnh nhiều loại dãy kí tự.
- Khai báo : #include <string.h>
<stdlib.h> : Dùng để xúc tiến nhiều phép toán, bao gồm sự chuyển đổi,
các số giả ngầu nhiên, cấp phát vùng nhớ, kiểm soát quá trình, môi
trường, tín hiệu, tìm kiếm, và xếp thứ tự
- Khai báo : #include <stdlib.h>
2.Khai báo mảng cấu trúc sử dụng trong chương trình.
Khai báo kiểu cấu trúc là struct với tên cấu trúc là QL
struct QL
Cấu trúc thông tin hàng hóa:

Tên hàng hóa: kiểu char, tối đa 20 ký tự
Số lượng: kiểu int
Đơn giá: kiểu int
Ngày sản xuất: kiểu char, tối đa 10 ký tự
char tensp[20];
int soluong;
int dongia;
char ngaysx[10];
3.Các giải thuật về sắp xếp
Yêu cầu: Trình bày thuật toán sắp xếp được sử dụng để cài đặt trong bài (nếu
có). Thuật toán gồm có: ý tưởng, các bước, cài đặt, ví dụ minh họa tương ứng
Sử dụng thuật toán nổi bọt để sắp xếp hàng hóa tang dần theo đơn giá
- Ý tưởng : Duyệt nhiều lần từ cuối lên đầu dãy, tiến hành đổi chỗ 2
phần tử liên tiếp nếu chúng ngược thứ tự. Đến một bước nào đó, khi
không có phép đổi chỗ nào xảy ra thì toàn bộ dãy đã được sắp xếp.
- Mô tả và các bước :
 Đầu vào :
n-số phần tử mảng.
a[]- mảng chứa các phần tử cần sắp xếp.
 Đầu ra :
a[] – mảng đã được sắp xếp
 Các bước thuật toán :
B1.i=0
B2.j=n-1
4 | P a g e B á o C á o B T L M ô n C ấ u t r ú c & g i ả i t h u ậ t d ữ l i ệ u
Trong khi j>I thực hiện :
+ Nếu a[j]<a[j-1] thì hoán đổi 2 phần tử
+ j=j-1
B3.i=i+1
Nếu i>n-1 = > hết dãy và dừng thuật toán.

Ngược lại lặp lại bước 2.
- Cài đặt : code của hàm.
void BubbleSort(QL a[],int n)
{
int i,j;
QL tg;
for(i=0;i<n-1;i++)
for(j=n-1;j>i;j )
if(a[j].dongia<a[i].dongia)
{
tg=a[j];
a[j]=a[j-1];
a[j-1]=tg;
}
}
- Ví dụ minh họa tương ứng :
4.Các giải thuật về tìm kiếm.
Yêu cầu: Trình bày thuật toán tìm kiếm được sử dụng để cài đặt trong bài
(nếu có). Thuật toán gồm có: ý tưởng, các bước, cài đặt, ví dụ minh họa
tương ứng
Sử dụng thuật toán tìm kiếm tuần tự để tìm kiếm sản phẩm cần tìm theo
tên của sản phẩm.
5 | P a g e B á o C á o B T L M ô n C ấ u t r ú c & g i ả i t h u ậ t d ữ l i ệ u
- Ý tưởng : Dùng thuật toán tìm kiếm để tìm kiếm một phần tử cho
trước trong một danh sách bằng cách duyệt lần lượt từng phần tử của
danh sách đó cho đến lúc tìm thấy giá trị mong muốn hay đã duyêt qua
toàn bộ danh sách.
- Các bước thực hiện:
Bước 1: Cần phải tạo một mảng kiểu kí tự để lưu trữ thông tin Tên
sản phẩm cần tìm do người dùng nhập vào sau đó tạo lên yêu cầu

nhập vào Tên sản phẩm cần tìm:
k=0;
char namesp[20];
printf("\nXin moi nha ten san pham can tim:");
Dùng hàm Search đưa vào một chuỗi có tên “namesp” tối đa gồm
20 ký tự.
Bước 2 : Tạo vòng lặp - Dùng lệnh “for(int i=0;i<n;i++)” để tìm
kiếm lặp đi lặp lại, duyệt từ đầu đến hết danh sách.
Dùng lệnh “strcmp” để so sánh duyệt tìm tất cả các ký tự từ trái
qua phải. Nếu như: “tên sản phẩm=namesp” thì in ra thông tin sản
phẩm cần. Nếu duyệt đến cuối danh sách mà ko thấy thì sẽ ra khỏi
vòng lặp, báo không tìm thấy sau đó thoát ra khỏi hàm
- Cài đặt: code của hàm.
int Search(QL a[],int n,int k)
{
k=0;
char namesp[20];
printf("\nXin moi nhap ten san pham can tim:");
fflush(stdin);
gets(namesp);
system("cls");
for(int i=0;i<n;i++)
{
if(strcmp(a[i].tensp,namesp)==0)
{
printf("thong tin san pham can tim la :\n\n ");
tieude();
xuatsp(a[i],k);
}
}

6 | P a g e B á o C á o B T L M ô n C ấ u t r ú c & g i ả i t h u ậ t d ữ l i ệ u
- Kết quả minh họa :
5.Hàm nhập xuất dữ liệu
a) Nhập dữ liệu:
Để lưu các thông tin của nhiều sản phẩm cần phải sử dụng một mảng một
chiều kiểu dữ liệu là cấu trúc quản lý sản phẩm.Và yêu cầu từ người dùng
khai báo số phần tử cần thêm vào
void nhapds(QL a[],int &n)
{
printf("\nNHAP SO LUONG SAN PHAM : ");
fflush(stdin);
scanf("%d",&n);
for(int i=0; i<n; i++)
{
printf("\nNhap thong tin san pham thu: %d \n",i+1);
nhapsp(a[i]);
}
}
7 | P a g e B á o C á o B T L M ô n C ấ u t r ú c & g i ả i t h u ậ t d ữ l i ệ u
Sau đó sử dụng vòng lặp “for(int i=0; i<n; i++)” để thực hiện n bước
nhập cho n phần tử
Bước nhập phần tử gồm: tên hàng hóa, số lượng, đơn giá, ngày sản xuất
được thực hiện theo hàm sau:
void nhapsp(QL &p)
{
printf(" +) Nhap ten san pham : ");
fflush(stdin); gets(p.tensp);
printf(" +) Nhap so luong : ");
fflush(stdin);scanf("%d",&p.soluong);
printf("\n +) Nhap don gia : ");

fflush(stdin); scanf("%d",&p.dongia);
printf("\n +) Nhap ngay san xuat : ");
fflush(stdin); gets(p.ngaysx);
}
b) Xuất dữ liệu:
• Xây dựng hàm để hiện thị tiêu đề của các sản phẩm
void tieude()
{
8 | P a g e B á o C á o B T L M ô n C ấ u t r ú c & g i ả i t h u ậ t d ữ l i ệ u
printf(" STT | Ten san pham | So luong | Don gia | Ngay
san xuat\n");
printf(" \n");
}
• Xây dựng hàm xuất từng sản phẩm một.
void xuatsp(QL p,int &k)
{
k++;
printf("%-10d%-20s%-15d%-15d%-15s\n",k,p.tensp,p.soluong,
p.dongia,p.ngaysx);
}
• Xây dựng hàm xuất cả danh sách sản phẩm.
void xuatds(QL a[],int n,int k)
{
k=0;
tieude();
for (int i=0;i<n;i++)
xuatsp(a[i],k);
}
- Hình ảnh minh họa :
9 | P a g e B á o C á o B T L M ô n C ấ u t r ú c & g i ả i t h u ậ t d ữ l i ệ u

6. Các hàm khác.
a. Ghi danh sách mặt hàng vào tệp
void ghitep (QL a[], int &n)
{
FILE *f;
f=fopen("danh sach san pham.txt","w+b");
if(f==NULL)
{
printf("Loi mo tep !");
getch();
return;
}
for(int i=0;i<n;i++)
fwrite(&a[i],sizeof(a[i]),1,f);
fclose(f);
}
b. Đọc danh sách mặt hàng từ tệp
void doctep (QL a[], int &n)
{
FILE *f;
f=fopen("danh sach san pham.txt","r+b");
if(f==NULL)
{
printf("Loi mo tep!");
getch();
return;
}
int i=0;
while(fread(&a[i],sizeof(a[i]),1,f)!=0)
i++;

n=i;
fclose(f);
}
c. Xây dựng menu cho người dùng sử dụng
• Đưa ra bản menu chức năng để cho người sử dụng chọn các chức năng
của chương trình đã được xây dựng.
• Code
void menu()
10 | P a g e B á o C á o B T L M ô n C ấ u t r ú c & g i ả i t h u ậ t d ữ l i ệ u
{
printf("\n\n BANG MENU CHUC NANG \n\n");
printf(" ");
printf("\n 1.Nhap danh sach hang hoa. \n");
printf("\n 2.Tim san pham trong danh sach. \n");
printf("\n 3.Sap xep hang hoa theo don gia.\n");
printf("\n 4.Thong ke san pham theo don gia. \n");
printf("\n 5.Cho phep tim ten hang gan dung. \n");
printf("\n De thoat chuong trinh xin moi nhap 0 \n");
printf(" ");
printf("\n Xin moi ban chon :");
}
d. Thống kê theo đơn giá
• Thống kê các sản phẩm trong danh sách theo đơn giá
void thongke(QL a[],int n,int k)
{
int x;
tieude();
11 | P a g e B á o C á o B T L M ô n C ấ u t r ú c & g i ả i t h u ậ t d ữ l i ệ u
k=0;
for(int i=0;i<n;i++)

{
for(int j=0;j<n;j++)
{
if(a[j].dongia==a[i].dongia&&a[j].dongia!=0)
{
xuatsp(a[j],k);
printf("\n");
x=1;
}
}
if(x==1)
printf("\n \n");
x=0;
for(int j=i+1;j<n;j++)
if(a[j].dongia==a[i].dongia)
a[j].dongia=0;
}
}
-Hình ảnh minh họa.
e. Xây dựng chức năng tìm kiếm gần đúng theo tên hàng
• Code chương trình
void timgandung(QL a[],int n,int k)
{
char s2[20];
k=0;
12 | P a g e B á o C á o B T L M ô n C ấ u t r ú c & g i ả i t h u ậ t d ữ l i ệ u
printf("\nNhap ten gan dung cua san pham can tim: ");
fflush(stdin); gets(s2);
system("cls");
printf("thong tin cac san pham can tim la : \n");

tieude();
for(int i=0;i<n;i++)
if(strstr(a[i].tensp,s2)!=NULL)
xuatsp(a[i],k);
}
• Các bước thực hiện
Bước 1:
Tạo 1 mảng kiểu ký tự để lưu trữ thông tin Tên sản phẩm cần tìm do người
dùng nhập vào sau đó tạo lên yêu cầu nhập vào Tên gần đúng của sản phẩm
cần tìm:
char s2[20];
k=0;
printf("\nNhap ten gan dung cua san pham can tim: ");
Bước 2: dùng vòng lặp “for(int i=0;i<n;i++)” duyệt từ đầu mảng đến cuối
mảng
Bước 3:
Dùng lệnh “ strstr” để tìm kiếm tên gần đúng của sản phẩm
Nếu tên sản phẩm mình nhập trùng với tên sản phẩm có trong bài thì đưa ra
kết quả chi tiết của sản phẩm đó dùng lệnh “if(strstr(a[i].tensp,s2)!=NULL)”
13 | P a g e B á o C á o B T L M ô n C ấ u t r ú c & g i ả i t h u ậ t d ữ l i ệ u
Và ngược lại đưa ra kết quả là không tìm thấy
7. Chương trình chính
• Chức năng :
-Gọi và thực hiện các hàm chức năng khi người sử dụng nhập yêu cầu
chức năng.
• Code chương trình chính
main()
{
int n,k;
QL ds[100],x[1];

int chon;
do
14 | P a g e B á o C á o B T L M ô n C ấ u t r ú c & g i ả i t h u ậ t d ữ l i ệ u
{
system("cls");
menu();
scanf("%d",&chon);
if(chon>=0&&chon<=5)
switch(chon)
{
case 0: exit(1);
case 1:
system("cls");
printf("\n1. Nhap danh sach san pham.");
nhapds(ds,n);
ghitep(ds,n);
system("cls");
printf("\n");
printf("\n Danh sach san pham:\n.");
doctep(ds,n);
xuatds(ds,n,k);
printf("\nNhap phim bat ki de tro ve menu chinh :");
getch();
break;
case 2:
system("cls");
printf("\n2. Tim san pham trong danh sach.\n");
doctep(ds,n);
Search(ds,n,k);
printf("\n\nNhap phim bat ki de tro ve menu chinh :");

getch();
break;
case 3:
system("cls");
printf("\n3. Sap xep hang hoa theo don gia.\n");
doctep(ds,n);
BubbleSort(ds,n);
ghitep(ds,n);
doctep(ds,n);
xuatds(ds,n,k);
getch();
printf("\nNhap phim bat ki de tro ve menu chinh :");
getch();
break;
case 4:
system("cls");
15 | P a g e B á o C á o B T L M ô n C ấ u t r ú c & g i ả i t h u ậ t d ữ l i ệ u
printf("\n4. Thong ke san pham theo don gia.\n\n");
doctep(ds,n);
thongke(ds,n,k);
printf("\nNhap phim bat ki de tro ve menu chinh :");
getch();
break;
case 5:
system("cls");
printf("\n5. Cho phep tim ten hang gan dung.");
doctep(ds,n);
timgandung(ds,n,k);
printf("\nNhap phim bat ki de tro ve menu chinh :");
getch();

break;
default:printf("\nBan nhap khong hop le, xin moi nhap lai:");
printf("\nNhap phim bat ki de tro ve menu chinh :");
getch();
break;
}
else
{
printf("\nBan da nhap sai, chuong trinh se thoat:");
exit(1);
}
}
while(chon!=0);
getch();
}
16 | P a g e B á o C á o B T L M ô n C ấ u t r ú c & g i ả i t h u ậ t d ữ l i ệ u
Contents
17 | P a g e B á o C á o B T L M ô n C ấ u t r ú c & g i ả i t h u ậ t d ữ l i ệ u

×