cấu trúc dữ liệu và giải thuật code quản lý thuốc Xác định bài toán đối tượng được quản lý của bài toán - Lập một chương trình giúp nhân viên nhập liệu thuốc bao gồm tên, giá , hãng, loại, mã để quản lý và bao gồm thông kê được số lượng thuốc theo từng nhà cung cấp - Đối tượng sử dụng: nhân viên cửa hàng thuốc - Đối tượng được quản lý: Thuốc, giá, mã, nhà cung cấp, số lượng, loại
Trang 1#include<string>
#include<bits/stdc++.h> using namespace std;
struct THUOC{
string maThuoc;
string tenThuoc;
string loaiThuoc;
int giaThuoc;
int Quantity;
string nhaCungCap;
};
struct Node{
THUOC info;
struct Node*next;
};
struct List{
Node *Head;
Node *Tail;
};
void CreateList(List &L){ L.Head = NULL;
L.Tail = NULL;
}
Node *getNode(THUOC a){ Node* thuoc;
thuoc = new Node;
if(thuoc == NULL){
cout<<"L?i c?p phát!!"<<endl;
Trang 2return 0;
}
thuoc->info = a;
thuoc->next = NULL;
return thuoc;
}
void insertLast(List &L, Node *thuoc){ // ham them cuoi if(L.Head == NULL){
L.Head = thuoc;
L.Tail = L.Head;
}else{
L.Tail->next = thuoc;
L.Tail = thuoc;
}
}
void nhapThuoc(THUOC &a){// ham nhap thuoc
cout<<"Nhap MaThuoc(string): ";
cin>>a.maThuoc;
fflush(stdin);
cout<<"Nhap TenThuoc(string): ";
cin>>a.tenThuoc;
cout<<"Nhap LoaiThuoc(string): ";
cin>>a.loaiThuoc;
cout<<"Nhap GiaThuoc(int): ";
cin>>a.giaThuoc;
Trang 3cout<<"Nhap SoLuongThuoc(int): ";
cin>>a.Quantity;
fflush(stdin);
cout<<"Nhap TenNhaCungCap(string): ";
cin>>a.nhaCungCap;
cout<<"============================================================="<
<endl;
} void NhapDSThuoc(List &L){// ham nhap danh sach thuoc int n;
Node *pThuoc;
THUOC a;
cout<<"Nhap so luong thuoc: ";cin>>n;
for(int i = 0; i<n;i++){
nhapThuoc(a);
pThuoc = getNode(a);
insertLast(L,pThuoc);
} } void In(){//ham xuat tieu de cout<<setw(10)<<left<<"Ma Thuoc"<<"\t"
<<setw(10)<<left<<"Ten Thuoc"<<"\t"
<<setw(10)<<left<<"Loai Thuoc"<<"\t"
<<setw(10)<<left<<"Gia Thuoc"<<"\t"
<<setw(10)<<left<<"So Luong Thuoc"<<"\t"
<<setw(10)<<left<<"Ten NhaCC"<<"\t"<<endl;
}
Trang 4void xuatThuoc(THUOC a){// ham xuat 1 loai thuoc ko tieu de cout<<setw(10)<<left<<a.maThuoc<<"\t";
cout<<setw(10)<<left<<a.tenThuoc<<"\t";
cout<<setw(10)<<left<<a.loaiThuoc<<"\t";
cout<<setw(10)<<left<<a.giaThuoc<<"\t";
cout<<setw(10)<<left<<a.Quantity<<"\t";
cout<<setw(10)<<left<<a.nhaCungCap<<endl;
}
void XuatDSThuoc(List &L){//ham xuat danh sach thuoc
In();
if(L.Head!=NULL){
Node* pThuoc = L.Head;
while(pThuoc != NULL){
xuatThuoc(pThuoc->info);
pThuoc= pThuoc->next;
}
}
}
Node* SearchByMaThuoc(List L, string id){ // tim theo MaThuoc Node* pthuoc = L.Head;
while(pthuoc!= NULL){
if(pthuoc->info.maThuoc==id){
return pthuoc;
}
pthuoc = pthuoc->next;
}
Trang 5return NULL;
}
Node* SearchByTenThuoc(List L, string ten){ // tim theo TenThuoc Node* pthuoc = L.Head;
while(pthuoc!= NULL){
if(pthuoc->info.tenThuoc==ten){
return pthuoc;
}
pthuoc = pthuoc->next;
}
return NULL;
}
Node* SearchByGia(List L, int gia){ // tim theo Gia
Node* pthuoc = L.Head;
while(pthuoc!= NULL){
if(pthuoc->info.giaThuoc==gia){
return pthuoc;
}
pthuoc = pthuoc->next;
}
return NULL;
}
Node* SearchMaxPrice(List L){ // tim Thuoc gia cao nhat
Node* pthuoc = L.Head;
int i = pthuoc->info.giaThuoc;
string ma = pthuoc->info.maThuoc;
pthuoc = pthuoc->next;
while(pthuoc!= NULL){
Trang 6if(pthuoc->info.giaThuoc > i){
i = pthuoc->info.giaThuoc;
ma = pthuoc->info.maThuoc;
}
pthuoc = pthuoc->next;
}
return SearchByMaThuoc(L,ma);
};
int Length(List L){//tinh tong so thuoc
int count =0;
Node* node = L.Head;
while(node != NULL){
count++;
node = node->next;
}
return count;
}
double AvgPrice(List L){// tinh trung binh gia tien cua kho thuoc Node* pthuoc = L.Head;
int total = 0;
while(pthuoc != NULL){
total = total + pthuoc->info.giaThuoc;
pthuoc=pthuoc->next;
}
double avg = (double)total/Length(L);
return avg;
Trang 7Node* SearchMinPrice(List L){ // tim Thuoc gia thap nhat Node* pthuoc = L.Head;
int i = pthuoc->info.giaThuoc;
string ma = pthuoc->info.maThuoc;
pthuoc = pthuoc->next;
while(pthuoc!= NULL){
if(pthuoc->info.giaThuoc < i){
i = pthuoc->info.giaThuoc;
ma = pthuoc->info.maThuoc;
}
pthuoc = pthuoc->next;
}
return SearchByMaThuoc(L,ma);
}
void Arrange(List L){//sap xep giam dan theo gia
Node* p;
Node* q;
THUOC a;
cout<<"Sap xep theo Gia thuoc: "<<endl;
p = L.Head;
//q= p->next;
while (p != NULL)
{
q= p->next;
while (q != NULL)
{
if(p->info.giaThuoc<q->info.giaThuoc){
Trang 8p->info = q->info;
q->info = a;
}
q = q->next;
}
p = p->next;
}
XuatDSThuoc(L);
}
double Statistics(List L, string ncc){//thong ke int count =0;
Node* node = L.Head;
while(node != NULL){
if(node->info.nhaCungCap == ncc){
count++;
}
node = node->next;
}
double percent = ((double)count/Length(L))*100; return percent;
}
int main(){
List L;
Node* p;
CreateList(L);
int s;
Trang 9cout<<"VUI LONG CHON 1 MUC: "<<endl;
cout<<"1 Nhap DS Thuoc"<<endl;
cout<<"2 Xuat DS Thuoc"<<endl;
cout<<"3 Tim theo Ma"<<endl;
cout<<"4 Tim theo Ten"<<endl;
cout<<"5 Tim theo Gia"<<endl;
cout<<"6 Tim thuoc co gia cao nhat"<<endl;
cout<<"7 Tim thuoc co gia thap nhat"<<endl;
cout<<"8 Tinh gia tien trung binh cua kho thuoc"<<endl; cout<<"9 Sap xep giam dan theo Gia thuoc"<<endl; cout<<"10 Thong ke % theo nha cung cap"<<endl; cout<<"0 Thoat"<<endl;
cin>>s;
switch(s){
case 1://nhap ds
NhapDSThuoc(L);
break;
case 2://xuat ds
XuatDSThuoc(L);
break;
case 3://tim theo ma
{
string str;
cout<<"Nhap ma thuoc can tim: ";
cin>>str;
Trang 10p = SearchByMaThuoc(L,str);
if(p!=NULL){
In();
xuatThuoc(p->info);
}else{
cout<<"Khong tim thay du lieu!!"<<endl; }
break;
}
case 4://tim theo ten
{
string str1;
cout<<"Nhap ten thuoc can tim: "; cin>>str1;
fflush(stdin);
p = SearchByTenThuoc(L,str1);
if(p!=NULL){
In();
xuatThuoc(p->info);
}else{
cout<<"Khong tim thay du lieu!!"<<endl; }
break;
}
case 5: //tim theo gia
{
Trang 11int timgia;
cout<<"Nhap gia thuoc can tim: ";
cin>>timgia;
p = SearchByGia(L,timgia);
if(p!=NULL){
In();
xuatThuoc(p->info);
}else{
cout<<"Khong tim thay du lieu!!"<<endl; }
break;
}
case 6://tim thuoc co gia cao nhat
{
p = SearchMaxPrice(L);
if(p!=NULL){
cout<<"Thuoc co gia tri cao nhat: "<<endl; In();
xuatThuoc(p->info);
}else{
cout<<"Khong tim thay!!"<<endl;
}
break;
}
case 7://tim thuoc co gia thap nhat {
Trang 12p = SearchMinPrice(L);
if(p!=NULL){
cout<<"Thuoc co gia tri cao nhat: "<<endl;
In();
xuatThuoc(p->info);
}else{
cout<<"Khong tim thay!!"<<endl;
}
break;
}
case 8://tinh gia tien trung binh cua kho thuoc
{
cout<<"Gia tri trung binh cua kho thuoc: "<<AvgPrice(L)<<endl; break;
}
case 9://sap xep giam dan theo gia thuoc
{
Arrange(L);
break;
}
case 10://thong ke % theo nha cung cap
{
string str;
cout<<"Nhap ten nha cung cap: ";
cin>>str;
cout<<"Nha cung cap "<<str<<"co "<<Statistics(L,str)<<endl; break;
}
Trang 13}while(s!=0);
system("pause"); return 0;
}