1. Trang chủ
  2. » Luận Văn - Báo Cáo

BÁO CÁO BÀI TẬP LỚN NGÔN NGỮ LẬP TRÌNH potx

9 2,5K 20

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 9
Dung lượng 88 KB

Nội dung

BÁO CÁO BÀI TẬP LỚN NGÔN NGỮ LẬP TRÌNHNhó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 t

Trang 1

BÁO CÁO BÀI TẬP LỚN NGÔN NGỮ LẬP TRÌNH

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

Trang 2

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 :

Sơ đồ quan hệ giữa các nhóm

Chương trình :

Tao ra đối tượng “lich” để thể hiện thời gian một cách dễ dàng và hiệu quả

class lich { //lớp ngày tháng năm

public: unsigned int d,m,y;

public:

lich(unsigned int n=0,unsigned int t=0,unsigned int nam=0){ //hàm tạo

d=n;m=t;y=nam; }

void xuat(){ //hàm xuất thời gian ra màn hình

cout<<setw(2)<<d<<"/"<<setw(2)<<m<<"/"<<setw(4)<<y;}

void vao(){ /hàm nhập thời gian từ bàn phím

char a,b;

do{cin>>d>>a>>m>>b>>y;

if((d>31)||(m>12)) cout<<"Nhap sai -> nhap lai"<<endl;

}while((d>31)||(m>12));}

};

int operator ==(lich &a,lich &b) { /*định nghĩa toán tử bằng giữa 2 đối tượng của lop lich*/

if (a.y==b.y&&a.m==b.m&&a.d==b.d) return 1;

else return 0;

};

Tạo đối tượng “hàng hóa “ với các hàm nhập, xuất :

class hanghoa { //khai báo lớp hàng hóa

char* ten;

lich time;

int giatien;

public :

void nhapinfo() { //hàm nhập thong tin về hàng hóa

cout<<endl<<"ten hang hoa : ";

Trang 3

cin.getline(ten,'\n');

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

void sapxepten() ; //hàm sắp xếp danh sách theo tên

void sapxeptime(); //hàm sắp xếp danh sách theo thời gian trước sau

void muatrongngay(); //tìm kiếm các hàng hóa mua trong ngày được nhập từ bàn //phím

void ghitep(char *ttep); //hàm ghi danh sách vào một tệp

void doctep(char *ttep); //đọc từ tệp có sẵn

};

Định nghĩa các hàm trong lớp soghichep

Trang 4

//Phần định nghĩa hàm trong class soghichep

void soghichep::nhapds() { //hàm nhập thông tin cho danh sách móc nối các hàng hóa PNode A,B;

A=new Node;

A->value.nhapinfo();

A->next=NULL;

H=A;

do{

cout<<endl<<"Nhan c/k (c-Co hoac k-Khong) "<<endl;cin>>ch;cin.ignore();

if(ch=='k') break;

B= new Node;

B->value.nhapinfo();

A->next=B;

B->next=NULL;

A=B;}while (1);

}

//nhập DS theo kiểu FIFO (vào trước ra trước) và bổ sung dần các phần tử vào cuối DS

void soghichep::bosung() {//hàm bổ sung thông tin cho danh sách móc nối các hàng hóa

PNode A;

A=new Node;

A->value.nhapinfo();

A->next=H;

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

Trang 5

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ề //cuối danh sách

B=A->next;

if (A->value.giatien < B->value.giatien) {

td=A->value;

A->value=B->value;

B->value=td;

};

A=B;

}; // sắp xếp theo thứ tự giảm dần

};

}

void soghichep::sapxepten() { //hàm sắp xếp danh sách theo tên

PNode A,B; // tương tự như sapxepgiatien()

hanghoa td;

for(int i=0;i<size()-1;i++) {

A=H;

for (int j=0;j<size()-1-i;j++) {

B=A->next;

if (strcmp(A->value.ten,B->value.ten)>0) {

td=A->value;

A->value=B->value;

B->value=td;

};

A=B;

}; //săp xếp theo ABC

};

}

void soghichep::sapxeptime() { //hàm sắp xếp danh sách theo thời gian trước sau

PNode A,B; // tương tự như sapxepgiatien()

hanghoa td;

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;

Trang 6

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++;}

A=A->next;

} while (A!= NULL);

cout <<endl<< " co " << k << " san pham mua trong ngay"<<" ";ngay.xuat();

//in số lượng hàng hóa mua trong ngày đó ra màn hình

}

void soghichep::ghitep(char *ttep) { //hàm ghi danh sách vào một tệp

ofstream f(ttep);

PNode A;

A=H;

int n=size();

f <<n<<endl ; //dòng đầu là số lượng phần tử của danh sách

for (int i=1; i<=n;++i) { //ghi vào tệp mỗi phần tử chiếm 3 dòng

f.setf(ios::left);

f <<A->value.ten<<endl;

f<<A->value.time.d<<"/"<<A->value.time.m<<"/"<<A->value.time.y<<endl; f<<A->value.giatien<<endl;

A=A->next;

}

f.close();

cout<<"Da ghi tep xong";

}

void soghichep::doctep(char *ttep) { //hàm đọc từ tệp có sẵn

ifstream f;

f.open(ttep);

Trang 7

if (f.bad()) { //nếu không mở được tệp thì dừng tất cả việc đọc tệp

cout << "\nTep " << ttep << " khong ton tai";

getch();

exit(1);

}

char ch1,ch2;

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

while(1) {

cout.setf(ios::left); //in MENU ra màn hình

cout<<endl<<"Nhan cac so tuong ung de chon cac muc tuong ung "<<endl;

cout<<"1.Nhap danh sach hang hoa da mua vao so ghi chep"<<endl;

cout<<"2.Bo sung them hang hoa vua mua vao so ghi chep"<<endl;

Trang 8

cout<<"3.Lay so luong hang hoa co trong danh sach"<<endl;

cout<<"4.Xuat nhung hang hoa da ghi trong SGC ra man hinh"<<endl;

cout<<"5.Sap xep cac hang hoa theo ten"<<endl;

cout<<"6.Sap xep cac hang hoa theo thoi gian"<<endl;

cout<<"7.Sap xep cac hang hoa theo gia tien"<<endl;

cout<<"8.Tim nhung HH mua trong ngay cho truoc"<<endl;

cout<<"9.Ghi DS hang hoa vao tep"<<endl;

cout<<"10.Load noi dung tu tep co san"<<endl;

cout<<"0.Thoat khoi chuong trinh"<<endl;

cin>>x; //nhập x –số thứ tự của thao tác

cout.unsetf(ios::left);

switch(x) {

case 1: cout<<"Nhap danh sach Hang hoa ; "<<endl; cin.ignore() ; a.nhapds();

a.ghitep("Soghichep.txt") ;

cout<<endl<<" Danh sach duoc luu vao file Soghichep.txt"<<endl;

cout<<"an phim bat ki de tiep tuc"; getch(); break;

case 2: a.doctep("Soghichep.txt") ; cin.ignore(); a.bosung();

cout<<"Neu muon luu lai thi hay dung thao tac 9"<<endl;

cout<<"an phim bat ki de tiep tuc";getch(); break;

case 3: cout<<"So luong phan tu cua danh sach la: "<<a.size();

cout<<endl<<"an phim bat ki de tiep tuc";

getch(); break;

case 4: a.xuatds(); cout<<"an phim bat ki de tiep tuc"; getch();break;

case 5: a.sapxepten(); cout<<"Danh sach sau khi sap xep : "<<endl; a.xuatds(); 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

Trang 9

****************HẾT***************

Ngày đăng: 29/06/2014, 03:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w