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

cấu trúc dữ liệu_QUẢN LÝ CỬA HÀNG BÁN VẬT LIỆU XÂY DỰNG

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 (310.85 KB, 48 trang )

VIỆN ĐẠI HỌC MỞ HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
-------------------

Sinh viên thực hiện: Nguyễn Thành An

Lớp 16A02

Nguyễn Tiến Dũng
Trần Trọng Hiếu

ĐỀ TÀI 0162016: QUẢN LÝ CỬA HÀNG BÁN VẬT LIỆU XÂY DƯNG

BÁO CÁO BÀI TẬP LỚN
MÔN: CẤU TRÚC DƯ LIỆU

Giảng viên hướng dẫn: Th.S Nguyễn Thị Quỳnh Như

Hà Nội – 2017


Bảng phân chia công việc
SINH VIÊN THỰC HIỆN

CÔNG VIỆC

Nguyễn Tiến Dũng

Thực hiện tuần 1 và liên kết đôi

Nguyễn Thành An



Thực hiện tuần 2 và liên kết đơn

Trần Trọng Hiếu

Thực hiện tuần 3 và liên kết đơn

Bùi Ánh Dương


Tuần 3: Mô tả các thuật toán
a) CHÈN ĐẦU DANH SÁCH
begin

Tạo node o

Gán thông tin p->infor là những
thông tin đọc từ file

Q.Head=NULL

đúng

P=Q.Head
P=Q.Tail

Sai

Q.Head->Prev=p
P->Next=Q.Head

Q.Head=p

END


b.XÓA THÔNG TIN 1 MẶT HÀNG Ở ĐẦU DANH SÁCH
Begin

Q.Head=NULL

SAI
Q.Head=Q.Head->Next

END

ĐÚNG


c.TÌM KIẾM THEO MÃ MH
Begin

Tạo NODE p=Q.Head

In ra không tìm thấy

P=NULL

p->info=MMH

In ra màn hình p->info.tenMH


END

P=p->Next


d.SẮP XẾP
Begin

Tạo Node P
P=Q.Head
Q=p->Next

Q.Head!=NULL

P!=Q.Tail

đúng

đúng
P=p->Next

đúng

Q=NULL

Q=p->Next
sai
p->info.MaMH>Q->info.MaMH


sai

sai
Hoán đổi
info của P và
Q
End

Q=Q->Next


Tuần 4: Lập trình và cài đặt
I: Cấu trúc chương trình tổng quát
1. Nhap danh sach san pham va ghi vao file
2. In danh sach san pham (doc tu file)
3. Them mot san pham vao cuoi danh sach
4. Tim va hien thong tin san pham theo ma X
5. Tim va hien thong tin khach hang theo ten duoc nhap tu ban phim
6. Hien khach hang co dia chi o Ha Noi
7. Hien ten khach hang mua nhieu nhat
8. Hien san pham ban duoc it nhat
9. Dem san pham co gia nhap lon hon X
10. Dem san pham co gia tri trong khoang [x,y]
11. Sap xep san pham giam dan theo so luong
12. Sap xep san pham tang dan theo so luong
13. sap xep theo ten khach hang
14. sap xep theo ten san pham
15. sap xep theo ten nha cung cap
16. Xoa san pham o dau danh sach
17. Tinh tong san pham nhap vao

18. Tinh tong san pham ban ra
19. Tinh tong tien ban duoc
II. Một số code xử lí chính
1.khai báo chương trình
Struct date
{


int ngay,thang,nam;
};
Struct hoadon
{
Char MaMH[10],TenMH[20];
Int ngaymua,soluong,gia;
Float thanhtien;
};
Struct Node
{
Hoadon Info;
Node *Next;
Node *Back
};
Struct List
{
Node *Head;
Node*Tail;
};
2. khởi tạo danh sách rỗng
Void init(List &Q)
{

Q.Head=NULL;
Q.Tail=NULL
}


3.Tạo Node
Node *GetNode(hoadon x)
{
Node *p=(Node *) malloc(sizeof (Node));
If (p==NULL)
{return NULL;}
Else
{
p -> Info = x;
p -> Next = NULL;
p->Back = NULL;
return p;
}
}
4.Tính độ dài danh sách
int Length(List &Q)
{
int i=0;
for (Node *p=L.Head;p;p=p->Next)
{
i++;
}
return i;
}
5.Nhập thông tin cho hóa đơn

void NhapHD(HD &x)
{
printf("\nMa mat hang:");
fflush(stdin);
gets(x.MaMH);
printf("\nTen mat hang:");
fflush(stdin);
gets(x.TenMH);
printf("\nNgay mua hang:");
fflush(stdin);
gets(x.ngaymua);
printf("\n So luong:");
scanf("%d",&x.soluong);
printf("\n Don gia:");
scanf("%d",&x.dongia);


printf("\n Thanh tien:");
scanf("%f",&x.thanhtien);
}
III. cài đặt
#include<stdio.h>
#include<conio.h>
#include<fstream>
#include<ctype.h>
#include<stdlib.h>
#include<cstring>
#include<fstream>
using namespace std;
struct HD

{
char MaMH[10],TenMH[50],ngaymua[20];
int soluong;
int dongia;
float thanhtien;
};
struct Node
{
HD Infor;
Node *Next;
Node *Back;
};
struct List
{
Node *Head;
Node*Tail;
};
void init(List &Q)
{
Q.Head=NULL;
Q.Tail=NULL;
}
Node *GetNode(HD x)
{
Node *p=(Node *) malloc(sizeof (Node));
if (p==NULL)
{
return NULL;
}
else

{
p -> Infor = x;


p -> Next = NULL;
p->Back = NULL;
return p;
}
}
int Length(List &Q)
{
int i=0;
for (Node *p=Q.Head; p; p=p->Next)
{
i++;
}
return i;
}
void NhapHD(HD &x)
{
printf("\nMa mat hang:");
fflush(stdin);
gets(x.MaMH);
printf("\nTen mat hang:");
fflush(stdin);
gets(x.TenMH);
printf("\nNgay mua hang:");
fflush(stdin);
gets(x.ngaymua);
printf("\n So luong:");

scanf("%d",&x.soluong);
printf("\n Don gia:");
scanf("%d",&x.dongia);
printf("\n Thanh tien:");
scanf("%f",&x.thanhtien);
}
void insertLast(List &Q,Node *p)
{
if(Q.Head == NULL)
{
Q.Head=p;
Q.Tail=Q.Head;
}
else
{
p -> Back = Q.Tail;
p -> Next = NULL;
Q.Tail->Next=p;
Q.Tail=p;


}
}
void Xuatrafile(FILE *f,Node *&p)
{
fprintf(f,"%s\n%s\n",p->Infor.MaMH,p->Infor.TenMH);
fprintf(f,"%s\n",p->Infor.ngaymua);
fprintf(f,"%d\n",p->Infor.soluong);
fprintf(f,"%d\n",p->Infor.dongia);
fprintf(f,"%d\n",p->Infor.soluong);

fprintf(f,"%.2f\n",p->Infor.thanhtien);
}
void Chendau(List &Q)
{
FILE *f;
Node *p;
HD x;
NhapHD(x);
p=GetNode(x);
f=fopen("INSERT.TXT","w");
Xuatrafile(f,p);
fclose(f);
if(Q.Head==NULL)
{
Q.Head=p;
Q.Tail=Q.Head;
}
else
{
p -> Next = Q.Head;
p -> Back = NULL;
Q.Head -> Back =p;
Q.Head = p;
}
}
void Chencuoi(List &Q)
{
FILE *f;
Node *p;
HD x;

NhapHD(x);
p=GetNode(x);
f=fopen("INSERT.TXT","w");
Xuatrafile(f,p);
fclose(f);


if(Q.Head == NULL)
{
Q.Head=p;
Q.Tail=Q.Head;
}
else
{
p -> Back = Q.Tail;
p -> Next = NULL;
Q.Tail->Next=p;
Q.Tail=p;
}
fclose(f);
}
void Chenvt(List &Q, int vt)
{
int i;
Node *p,*q,*Dau=Q.Head;
FILE *f;
HD(x);
NhapHD(x);
p=GetNode(x);
f=fopen("INSERT.TXT","w");

Xuatrafile(f,p);
fclose(f);
for(i=1; iDau=Dau->Next;
if(Dau!=NULL)
{
q=Dau->Next;
p->Back=Dau;
p->Next=q;
Dau->Next=p;
q->Back=p;
}
else printf("\n\nVi tri khong hop le");
fclose(f);
}
void Xoadau(List &Q)
{
if(Q.Head==NULL)
printf("\nDanh sach rong!");
else
{
if (Length(Q)==1)
{


Q.Head=NULL;
Q.Tail=NULL;
}
else
{

Node *p = Q.Head;
Q.Head=Q.Head->Next;
Q.Head->Back=NULL;
delete p;
}
}
}
void Xoacuoi(List &Q)
{
Node *p;
if(Q.Head==NULL)
printf("\nDanh sach rong!");
else
{
if (Length(Q)==1)
{
Q.Head=NULL;
Q.Tail=NULL;
}
else
{
Node *p = Q.Tail;
Q.Tail=Q.Tail->Back;
Q.Tail->Next=NULL;
delete p;
}
}
}
int DeletePos(List &Q, char MaMH[10])
{

Node *q,*k;
if (!strcmp(Q.Head->Infor.MaMH,MaMH))
{
Xoadau(Q);
return 1;
}
for (Node *p=Q.Head; p; p=p->Next)
{
q=p->Next;
if(q==Q.Tail)
{
Xoacuoi(Q);


return 1;
}
if (!strcmp(q->Infor.MaMH,MaMH))
{
k=q->Next;
p->Next=k;
k->Back=p;
return 1;
}
}
return 0;
}
void XoatheoMaMH(List &Q)
{
int found;
char MMH[10];

Node *p,*pl,*pr;
pl=Q.Head;
FILE *f=fopen("DELETE.TXT","w");
printf("\nNhap ma giao vien can xoa: ");
fflush(stdin);
gets(MMH);
fprintf(f,"%s",MMH);
found=DeletePos(Q,MMH);
if(found==0) printf("\nKhong tim thay ma giao vien");
fclose(f);
}
void Timkiem(List &Q)
{
Node *p;
p=Q.Head;
char MMH[10];
FILE *f;
f=fopen("SEARCH.TXT","w");
printf("\nNhap ma mat hang can tim: ");
fflush(stdin);
gets(MMH);
fprintf(f,"%s",MMH);
while(p!=NULL)
{
if(strcmp(p->Infor.MaMH,MMH)==0)
{
printf("\n\nMat hang %s co trong danh sach",MMH);
break;
}
p=p->Next;

}


if(p==NULL) printf("\nMat hang %s khong co trong danh
sach",MMH);
fclose(f);
}
void Timkiemvain(List &Q)
{
Node *p;
p=Q.Head;
char MMH[10];
FILE *f;
f=fopen("SEARCH.TXT","w");
printf("\nNhap ma mat hang can tim: ");
fflush(stdin);
gets(MMH);
fprintf(f,"%s",MMH);
for (p=Q.Head; p; p=p->Next)
{
if(strcmp(p->Infor.MaMH,MMH)==0)
{
printf("\n\nMa mat hang: %s",p->Infor.MaMH);
printf("\nten mat hang: %s",p->Infor.TenMH);
printf("\n Ngay mua hang:%s",p->Infor.ngaymua);
printf("\n so luong hang:%d",p->Infor.soluong);
printf("\n don gia:%d",p->Infor.dongia);
printf("\n thanh tien:%.2f",p->Infor.thanhtien);
break;
}

}
if(p==NULL) printf("\nMat hang %s khong co trong danh
sach",MMH);
fclose(f);
}
void mathangcogiatrilonnhat(List Q)
{
Node *p;
p=Q.Head;
int max,giatien=0;
int dongia;
max=0;
for (p=Q.Head; p; p=p->Next)
{
giatien=1000-p->Infor.dongia;
if(max{
max=giatien;
}
}


printf("mat hang co gia tien lon nhat la: ");
for (p=Q.Head; p; p=p->Next)
{
if (dongia==max)
{
printf("%s, %d gia tien ",p->Infor.TenMH,max);
}
}

}
void DemMH50000(List &Q)
{
Node *p;
int dem=0;
p=Q.Head;
while(p!=NULL)
{
if(p->Infor.dongia<50000)
{
dem++;
}
p=p->Next;
}
printf("\nSo mat hang nco gia nho hon 50000 la: %d mat
hang",dem);
}
void Sapxep(List &Q)
{
Node *p,*q;
p=Q.Head;
HD tg;
int i=0;
char kq[10];
while(p->Next!=NULL)
{
q=p->Next;
while(q!=NULL)
{
if (strcmp(q->Infor.MaMH, p->Infor.MaMH)<0)

{
tg=p->Infor;
p->Infor=q->Infor;
q->Infor=tg;
break;
}
q=q->Next;
}
p=p->Next;


}
FILE *f=fopen("SORT.TXT","w");
p=Q.Head;
while(p!=NULL)
{
printf("\n Ma mat hang: %s",p->Infor.MaMH);
printf("\n ten mat hang: %s",p->Infor.TenMH);
printf("\n Ngay mua hang:%s",p->Infor.ngaymua);
printf("\n so luong hang:%d",p->Infor.soluong);
printf("\n don gia:%d",p->Infor.dongia);
printf("\n thanh tien:%.2f",p->Infor.thanhtien);
p=p->Next;
}
fclose(f);
}
void Tieude()
{
printf("\n%5s %-16s %-10s %-15s %-10s %-10s
","MaMH","TenMH","Ngaymua","Soluong","Dongia","Thanhtien");

}
void Output(List &Q)
{
Node *p;
fstream fi;
fi.open("HOADON.TXT",ios::out|ios::binary);
HD t;
for(p=Q.Head;p;p=p->Next)
{
t = p->Infor;
fi.write(reinterpret_cast<char *>(&t), sizeof(Q));
printf("\n%5s %-16s %-16s %-10d %-8d %15.0f",t.MaMH,t.TenMH,t.ngaymua,t.soluong,t.dongia,t.thanhtien);
}
}
int main()
{
HD x;
List Q;
int vt,i;
Node *p;
int n,chon;
char choose;
init(Q);
printf("\n 1.Nhap thong tin 1 Mat hang");
printf("\n 2.Tao danh sach hoa don ban dau");
printf("\n 3.Chen thong tin 1 mat hang vao dau danh sach");
printf("\n 4.Chen thong tin 1 mat hang vao cuoi danh sach");


printf("\n

printf("\n
printf("\n
printf("\n
printf("\n
printf("\n
printf("\n
printf("\n
printf("\n

5.Chen thong tin 1 mat hang vao vi tri bat ky");
6.Xoa thong tin 1 mat hang dau danh sach");
7.Xoa thong tin 1 mat hang cuoi danh sach");
8.Xoa thong tin 1 mat hang theo ma");
9.Tim thong tin 1 mat hang co trong danh sach");
10.Tim thong tin 1 mat hang va in danh sach ");
11.Mat hang co gia tri lon nhat");
12.Dem mat hang co gia tri hon 50000");
13.Sap xep tang dan theo Ma MH");

do
{
printf("\nNhap so: ");
scanf("%d",&chon);
switch(chon)
{
case 0:
break;
case 1:
{
NhapHD(x);

p=GetNode(x);
insertLast(Q,p);
Tieude();
Output(Q);
continue;
}
case 2:
{
printf("\nNhap so luong mat hang: ");
scanf("%d",&n);
for(i=0; i{
NhapHD(x);
p=GetNode(x);
insertLast(Q,p);
}
Tieude();
Output(Q);
continue;
}
case 3:
{
Chendau(Q);
Tieude();
Output(Q);
continue;


}
case 4:

{
Chencuoi(Q);
Tieude();
Output(Q);
continue;
}
case 5:
{
printf("\nNhap vi tri can chen: ");
scanf("%d",&vt);
Chenvt(Q,vt);
Tieude();
Output(Q);
continue;
}
case 6:
{
Xoadau(Q);
Tieude();
Output(Q);
continue;
}
case 7:
{
Xoacuoi(Q);
Tieude();
Output(Q);
continue;
}
case 8:

{
XoatheoMaMH(Q);
Tieude();
Output(Q);
continue;
}
case 9:
Timkiem(Q);
continue;
case 10:
Timkiemvain(Q);
continue;
case 11:
mathangcogiatrilonnhat(Q);
continue;


case 12:
DemMH50000(Q);
continue;
case 13:
{
Sapxep(Q);
Tieude();
Output(Q);
continue;
}
}
}
while (chon!=0);

getch();
}
#include<stdio.h>
#include<conio.h>
#include<fstream>
#include<ctype.h>
#include<stdlib.h>
#include<cstring>
#include<fstream>
using namespace std;
struct HD
{
char MaMH[10],TenMH[50],ngaymua[20];
int soluong;
int dongia;
float thanhtien;
};
struct Node
{
HD Infor;
Node *Next;
Node *Back;
};
struct List
{
Node *Head;
Node*Tail;
};
void init(List &Q)
{

Q.Head=NULL;
Q.Tail=NULL;


}
Node *GetNode(HD x)
{
Node *p=(Node *) malloc(sizeof (Node));
if (p==NULL)
{
return NULL;
}
else
{
p -> Infor = x;
p -> Next = NULL;
p->Back = NULL;
return p;
}
}
int Length(List &Q)
{
int i=0;
for (Node *p=Q.Head; p; p=p->Next)
{
i++;
}
return i;
}
void NhapHD(HD &x)

{
printf("\nMa mat hang:");
fflush(stdin);
gets(x.MaMH);
printf("\nTen mat hang:");
fflush(stdin);
gets(x.TenMH);
printf("\nNgay mua hang:");
fflush(stdin);
gets(x.ngaymua);
printf("\n So luong:");
scanf("%d",&x.soluong);
printf("\n Don gia:");
scanf("%d",&x.dongia);
printf("\n Thanh tien:");
scanf("%f",&x.thanhtien);
}
void insertLast(List &Q,Node *p)
{


if(Q.Head == NULL)
{
Q.Head=p;
Q.Tail=Q.Head;
}
else
{
p -> Back = Q.Tail;
p -> Next = NULL;

Q.Tail->Next=p;
Q.Tail=p;
}
}
void Xuatrafile(FILE *f,Node *&p)
{
fprintf(f,"%s\n%s\n",p->Infor.MaMH,p->Infor.TenMH);
fprintf(f,"%s\n",p->Infor.ngaymua);
fprintf(f,"%d\n",p->Infor.soluong);
fprintf(f,"%d\n",p->Infor.dongia);
fprintf(f,"%d\n",p->Infor.soluong);
fprintf(f,"%.2f\n",p->Infor.thanhtien);
}
void Chendau(List &Q)
{
FILE *f;
Node *p;
HD x;
NhapHD(x);
p=GetNode(x);
f=fopen("INSERT.TXT","w");
Xuatrafile(f,p);
fclose(f);
if(Q.Head==NULL)
{
Q.Head=p;
Q.Tail=Q.Head;
}
else
{

p -> Next = Q.Head;
p -> Back = NULL;
Q.Head -> Back =p;
Q.Head = p;
}
}


void Chencuoi(List &Q)
{
FILE *f;
Node *p;
HD x;
NhapHD(x);
p=GetNode(x);
f=fopen("INSERT.TXT","w");
Xuatrafile(f,p);
fclose(f);
if(Q.Head == NULL)
{
Q.Head=p;
Q.Tail=Q.Head;
}
else
{
p -> Back = Q.Tail;
p -> Next = NULL;
Q.Tail->Next=p;
Q.Tail=p;
}

fclose(f);
}
void Chenvt(List &Q, int vt)
{
int i;
Node *p,*q,*Dau=Q.Head;
FILE *f;
HD(x);
NhapHD(x);
p=GetNode(x);
f=fopen("INSERT.TXT","w");
Xuatrafile(f,p);
fclose(f);
for(i=1; iDau=Dau->Next;
if(Dau!=NULL)
{
q=Dau->Next;
p->Back=Dau;
p->Next=q;
Dau->Next=p;
q->Back=p;
}


else printf("\n\nVi tri khong hop le");
fclose(f);
}
void Xoadau(List &Q)
{

if(Q.Head==NULL)
printf("\nDanh sach rong!");
else
{
if (Length(Q)==1)
{
Q.Head=NULL;
Q.Tail=NULL;
}
else
{
Node *p = Q.Head;
Q.Head=Q.Head->Next;
Q.Head->Back=NULL;
delete p;
}
}
}
void Xoacuoi(List &Q)
{
Node *p;
if(Q.Head==NULL)
printf("\nDanh sach rong!");
else
{
if (Length(Q)==1)
{
Q.Head=NULL;
Q.Tail=NULL;
}

else
{
Node *p = Q.Tail;
Q.Tail=Q.Tail->Back;
Q.Tail->Next=NULL;
delete p;
}
}
}
int DeletePos(List &Q, char MaMH[10])
{
Node *q,*k;


×