ĐỀ TÀI 1: (2 bài làm)
Xây dựng bài toán kho vật tự (20 vat)
> 1. Sắp xếp tăng dần theo tên hàng có trong kho và in ra kết qủa sắp xếp
> 2. Tìm kiếm 1 mặt hàng xem trong kho có còn không ? Nếu còn thì số lượng là
bao nhiêu?
> 3. Thống kê theo tên hàng các số lượng còn tồn ở trong kho ( vd: xh 1lan
->in ra)
Chương trình chạy bằng Dev C++ 5.3.04 :)
Cách 1:
#include <stdio.h>
#include<conio.h>
#include<string.h>
void main()
int i = 0, j, n = 20, temp;
struct hanghoa
{
int stt;
char ten[30];
int soluong;
} hang[20];
void nhap (int stt, char ten[so], int soluong)
{
printf (“\n nhap mat hang thu %d: ”, stt);
printf(“ tenhang : ”);
fflush(stdin);
gets(ten);
printf(“\n soluong : ”);
scanf(“%d”, soluong);
}
void in (int stt, char ten[30], int soluong)
{
printf(“\n %3d%30s%4d ”, stt, ten, soluong);
}
void sapxep()
{
struct hanghoa tam;
for ( i = 0; i <= n – 1; i++)
for (j = 0; j <= n – 1; j++)
if (strcmp( hang[j].ten, hang[j+1].ten) > 0)
{
temp = hang[j].stt, hang[j].stt = hang[j+1].stt; hang[j]
tam = hang[j];
hang[j] = hang[j+1];
hang[j+1] = tam;
}
}
void timkiem()
{
char tenhang[30];
int p=0, found=0;
printf (“\n nhap ten hang can tim kiem:”);
gets(tenhang);
if(strlen(tenhang))
while(i<n)
if(strcmp(hang[i].ten, tenhang)==0)
{ printf(“\n %3d%30s%4d”, stt, ten, soluong);
found=1;
break;
}
else i++;
if(!found)
printf(“\n khong tim thay!”);
}
void sapxepsl()
{
Struct hanghoa tam;
For(i=0; i<=n; i++)
For(j=0; j<=n; j++)
If(hang[j].soluong>hang[j+1].soluong)
{ temp=hang[j].stt; hang[j]=hang[j+1].stt; hang[j+1].stt=temp;
Tam=hang[j];
Hang[j]=hang[j+1];
Hang[j+1]=tam;
}
}
void main()
{
int menu;
printf(“\n nhan 0 de nhap hang”);
printf(“\n nhan 1 de in danh sach hang hoa”);
printf(“\n nhan 2 de tim kiem mot hang hoa”);
Printf(“\n nhan 3 de xem thong ke”);
scanf(“%d”, menu);
switch(menu)
{
case 0: for (i=0; i<=n; i++)
{
hang[i].stt=I;
nhap(hang[i].stt, hang[i].ten, hang[i].soluong)
} break;
case 1: sapxep();
For(i=0; i<=n, i++)
{ in(hang[i].stt, hang[i].ten, hang[i].soluong);
} break;
case 2: timkiem();
break;
case 3: sapxepsl()
for(i=0; i<=n; i++)
{
in(hang[i].stt, hang[i].ten, hang[i].soluong);
} break;
}
getch()
}
Cách 2:
#include <conio.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
#define max 20
using namespace std;
struct doVat{
//char tenHang[max];
string tenHang;
int soLuong;
int giaHang;
};
//ham nay la ham doc d lieu de cho vao mang do vat
int docDuLieu(doVat d[]);
//ham nay la ham bat dau nhap so lieu de ghi vao file
void nhapVaoKhoHang (int n);
void xapXepTheoTen ();
void inDanhSachHang (doVat d[],int n);
int timKiemHang (string tenVat);
void thongKeHang ();
int main ()
{
int i;
char c;
string tenVat;
int giaHang;
doVat d[max];
int n;
// vong do while de quan ly cai menu de minh nhap
do{
cout<<"Ban hay chon cac tuy chon bang cach nhan cac so tuong ung
voi "<<"\n"<<"0:nhap vao danh sach kho hang "<<"\n"<<"1:hien thi danh sach do
vat theo ten"<<"\n"<<"2:thong ke hang"<<"\n"<<"3:tim kiem do vat trong
kho"<<"\n\n";
cout<<"Moi ban nhap so tuong ung voi tuy chon:";
cin>>i;
cout<<"\n";
switch (i)
{
case 0:
cout<<"Dau tien moi ban nhap vao so lieu cac do vat
trong kho :";
cout<<"ban hay nhap vao so do vat ma ban muon quan ly
trong kho: ";
cin>>n;
nhapVaoKhoHang (n);
case 1:
xapXepTheoTen();
break;
case 2:
thongKeHang();
break;
case 3:
cout<<"nhap vao ten vat can tim kiem :";
cin>>tenVat;
if (timKiemHang (tenVat)==0)
cout<<"hang khong co trong kho";
else
cout<<"do vat "<<tenVat<<" co
"<<timKiemHang(tenVat)<<" vat trong kho"<<endl;
break;
}
cout<<"ban co muon tiep tuc khong chon (y) neu co,va (n) neu khong
muon:";
cin>>c;
cout<<"\n";
}while (c=='y');
}
void nhapVaoKhoHang (int n)
{
string a;
int b,c;
ofstream out_stream;//tao mot luong de ghi file
out_stream.open("D:\\dovat.txt");//mo file dovat.txt de ghi so lieu
out_stream <<n<<endl;//ghi vao file do vat.txt so vat ma ban muon quan ly
for (int i=0;i<n;i++)
{
cout<<"nhap vao so lieu cua do vat thu: "<<i+1<<endl;
cout<<"ten do vat:";
cin>>a;
out_stream<<a<<"\t"; //ghi vao file ten do vat kieu string
cout<<"so luong :";
cin>>b;
out_stream<<b<<"\t"; //ghi vao file so luong do vat
cout<<"gia la:";
cin>>c;
out_stream<<c<<"\n"; //ghi vao file gia cua do vat
cout<<"\n";
}
out_stream.close();//sau khi da nhap du so lieu cua n vat ta dong file
}
//ham docdulieu nay thuc chat la doc tu file ra so lieu roi cho vao mang dovat d de
thuc hien cac thao tac can thiet
int docDuLieu(doVat d[])
{
int so_do_vat,so_luong,gia_hang;
string a;
ifstream in_stream;//tao mot luong de doc file
in_stream.open("D:\\dovat.txt");
in_stream>>so_do_vat;//dau tien doc so luong do vat
for (int i=0;i<so_do_vat;i++)
{
in_stream>>a;//tiep theo doc ten do vat
d[i].tenHang=a;//gan ten do vat vao do vat thu i
in_stream>>so_luong>>gia_hang;
d[i].soLuong=so_luong;//doc so luong do vat
d[i].giaHang=gia_hang;//doc gia hang
}
return so_do_vat;//tra ve so do vat de dung cho cac ham sau
}
void xapXepTheoTen ()
{
doVat d[max];
int n=docDuLieu(d);
for (int i=0;i<n;i++)//dung xap xep noi bot de xap xep do vat
for (int j=i+1;j<n;j++)
{
if ((d[i].tenHang>d[j].tenHang))//2 string nen co the so
sanh binh thuong
{
doVat t;//trong if nay la ham swap doi cho neu sai
vi tri
t=d[i];
d[i]=d[j];
d[j]=t;
}
}
inDanhSachHang(d,n);
}
int timKiemHang (string tenVat)
{
doVat d[max];
int n=docDuLieu(d);
for (int i=0;i<n;i++)
{
if ((d[i].tenHang==tenVat))
//neu ma ten hang trung voi ten vat thi ta xet tiep xem hang do con co
trong kho hay khong
{
if (d[i].soLuong==0)// neu so luong bang 0
return 0; //neu khong co tra ve 0 luon
return d[i].soLuong;//neu co tra ve so luong vat
}
}
//khong tim thay do vat nao cung tra ve 0
return 0;
}
void inDanhSachHang (doVat d[],int n)
{
cout<<"TEN HANG \t \t SO lUONG \t \t GiA HANG \n";
for (int i=0;i<n;i++){
cout<<d[i].tenHang<<"\t \t \t "<<d[i].soLuong<<"\t \t
\t"<<d[i].giaHang<<endl;
}
}
void thongKeHang ()
{
doVat d[max]; int n=docDuLieu(d);
cout<<"TEN HANG \t \t SO lUONG \t \t GiA HANG \n";
for (int i=0;i<n;i++){
if (d[i].soLuong!=0)// neu so luong không bang 0 in ra danh sach
cout<<d[i].tenHang<<"\t \t \t "<<d[i].soLuong<<"\t \t
\t"<<d[i].giaHang<<endl;
}
}