BÁO CÁO BÀI TẬP LỚN NGÔN NGỮ LẬP TRÌNH
Họ và tên SHSV Lớp
Nguyễn Thế Thơi 20092611 ĐT 11-K54
Trần Nguyên Vũ 20093327 ĐT 9 –K54
Nhóm sinh viên thực hiện:
Ý tưởng của nhóm :
Tạo ra một chương trình phần mềm dạng giống như một cuốn sổ ghi chép để
người dùng có thể nhập thông tin, bố sung thông tin , ghi chép lại các hàng hóa đã mua
hàng ngày. Ngoài ra , người dùng có thể thống kê danh sách hàng hóa đã nhập theo từng
mục đích như thông tin hàng hóa xuất ra được sắp xếp theo tên hàng hóa, theo thời gian
nhập hoặc theo giá tiền sản phẩm.
Phương án thực hiện :
Sử dụng lập trình hướng đối tượng, tạo ra một class hanghoa với các dữ liệu của
một hàng hóa (tên, thời gian mua, giá tiền ) và các thao tác đối với nó .Thiết kế cấu trúc
dữ liệu dạng danh sách móc nối để lưu thông tin về các hàng hóa đã mua, mỗi phần tử
của danh sách là một hàng hóa . Sử dụng thao tác với tệp để lưu và đọc thông tin khi cần .
Các thao tác của người dùng sẽ được thiết kế dạng MENU.
Các kiến thức được sử dụng trong chương trình :
+ Kiến thức về đối tượng (dữ liệu , hàm , chế độ riêng tư ,định nghĩa lại toán
tử, )
+ Cấu trúc dữ liệu (danh sách móc nối) , LIFO, FIFO.
+ Các thuật toán tìm kiếm, sắp xếp .
+ Thao tác vào , ra tệp .
Từ sự chuẩn bị trên nhóm chúng em tiến hành viết chương trình như sau :
Chương trình có 3 đối tượng là:
class lich
class hanghoa
class soghichep
Các lớp quan hệ với nhau thông qua quá trình gửi thông báo , được minh họa bằng sơ đồ
sau :
cout<<endl<<"thoi gian mua : ";
time.vao();
cout<<endl<<"gia tien : ";
cin>>giatien;
}
void xuatinfo() { //hàm xuất thông tin về hàng hóa ra màn hình
cout.setf(ios::left);
cout<<setw(20)<<ten<<" ";
time.xuat();
cout<<" "<<setw(8)<<giatien<<endl;
}
friend class soghichep; // cho class soghichep la class bạn của class hang hoa
// làm như thế để có thể truy cập vào các thành phần riêng tư của class “hanghoa”
};
Cài đặt cấu trúc móc nối để lưu trữ thông tin về danh sách hàng hóa:
struct Node { //khai báo cấu trúc danh sách
hanghoa value;
Node* next;
};
Tạo ra đối tượng soghichep để lưu và thực hiện thao tác với danh sách hàng hóa, lớp này
là lớp chính của chương trình , nó gồm các hàm để xử lí dữ liệu :
class soghichep { //khai báo lớp so ghi chep
PNode H; //con trỏ danh sách
char ch;
public:
void nhapds(); //hàm nhập thông tin cho danh sách móc nối các hàng hóa
void bosung(); //hàm bổ sung thông tin cho danh sách móc nối các hàng hóa
int size(); //hàm lấy số lượng hàng hóa có trong danh sách
void xuatds() ; //hàm xuất danh sách ra màn hình
void sapxepgiatien() ; //hàm sắp xếp danh sách theo thứ tự giảm dần của giá tiền
H=A;
}
//Mỗi lần bổ sung sẽ có một phần tử được thêm vào đầu danh sách
int soghichep::size() { //hàm lấy số lượng hàng hóa có trong danh sách
PNode A=H;;
int n=0;
while (A!= NULL) {
n++;
A=A->next;}
return n;
} //sử dụng thuật toán duyệt danh sách
void soghichep::xuatds() { //hàm xuất danh sách ra màn hình
PNode A;
A=H;
cout<<"Danh sach hang hoa co trong so ghi chep : "<<endl;
if (H!=NULL)
do
{
A->value.xuatinfo();
A=A->next;
}while (A!= NULL);
} //Sử dụng thuật toán duyệt danh sách
void soghichep::sapxepgiatien() { //hàm sắp xếp danh sách theo thứ tự giảm dần của
giá //tiền
PNode A,B;
hanghoa td;
for(int i=0;i<size()-1;i++) { //Sử dụng thuật toán sắp xếp nổi bọt
//có size()-1 lần duyệt DS
A=H;
for (int j=0;j<size()-1-i;j++) { //mỗi lần duyệt qua danh sách, phần tử MIN về
for(int i=0;i<size()-1;i++) {
A=H;
for (int j=0;j<size()-1-i;j++) {
B=A->next;
int d=0;
if (A->value.time.y<B->value.time.y)d=1;
else if(A->value.time.y==B->value.time.y)
if (A->value.time.m<B->value.time.m) d=1;
else if(A->value.time.m==B->value.time.m)
if (A->value.time.d<B->value.time.d) d=1;
if (d==1) {
td=A->value;
A->value=B->value;
B->value=td;
};
A=B;
}; //hàng hóa nào mua sớm nhất xếp trước
};
}
void soghichep::muatrongngay(){ //tìm kiếm các hàng hóa mua trong ngày được nhập
từ //bàn phím
lich ngay;int k=0;
PNode A;
A=H;
cout<<endl<<" nhap ngay de tim san pham: "<<endl;
ngay.vao();
cout<< " san pham " << endl;
if (H!=NULL) //Duyệt lần lượt từng phần tử cho đến hết danh sách
do {
if ( A->value.time == ngay ) {A->value.xuatinfo();k++;}
int n;
f>>n;
f.ignore();
PNode A,B;
A=new Node; //nếu mở thành công thì đọc danh sách như nhập dữ liệu cho các biến
f.getline(A->value.ten,'\n');
f>>A->value.time.d;
f>>ch1>>A->value.time.m;
f>>ch2>>A->value.time.y;
f>>A->value.giatien;
A->next=NULL;
H=A;
for (int i=1;i<n;i++) {
B=new Node;
f.ignore();
f.getline(B->value.ten,'\n');
f>>B->value.time.d;
f>>ch1>>B->value.time.m;
f>>ch2>>B->value.time.y;
f>>B->value.giatien;
A->next=B;
B->next=NULL;
A=B;
}
f.close();
cout<<"Da load xong" ;
};
Những thao tác trong hàm main() :
- Khai báo một đối tượng kiểu soghichep
- In MENU ra màn hình
cout<<"an phim bat ki de tiep tuc"; getch(); break;
case 6: a.sapxeptime() ; cout<<"Danh sach sau khi sap xep : "<<endl; a.xuatds();
cout<<"an phim bat ki de tiep tuc"; getch();break;
case 7: a.sapxepgiatien(); cout<<"Danh sach sau khi sap xep : "<<endl;
a.xuatds();
cout<<"an phim bat ki de tiep tuc"; getch(); break;
case 8: a.muatrongngay(); cout<<endl<<"an phim bat ki de tiep tuc";
getch();break;
case 9: a.ghitep("Soghichep.txt"); cout<<endl<<"an phim bat ki de tiep
tuc"<<endl; getch();break;
case 10: a.doctep("Soghichep.txt"); cout<<endl<<"an phim bat ki de tiep
tuc"<<endl; getch();break;
default: cout<<"thoat";
}
if(x==0) break;}
//nếu x trùng với số của thao tác nào thì sẽ thực hiện các hàm tương ứng
//x=0 thì dừng chương trình và thoát
****************HẾT***************