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

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

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

Thông tin tài liệu

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 : 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 : "; 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 //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 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; 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); 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; 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 ****************HẾT*************** . 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. 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. 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

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