Trang 1 trên tổng số 4 123... Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 40 kết quả

Đề tài: Bài tập quản lí "khách sạn"

  1. #1
    Ngày gia nhập
    10 2008
    Bài viết
    1

    Mặc định Bài tập quản lí "khách sạn"

    Đây là đề bài:
    [FIXED]
    Một khách sạn cung cấp hai dịch vụ giặt ủi và thuê xe:
    - Dịch vụ giặt ủi: tiền giặt ủi = số kg quần áo * đơn giá + tiền dịch vụ cộng thêm. Nếu số kg trên 10 kg thì giảm 5%. Tiền dịch vụ cộng thêm dành cho các sản phẩm cần chế độ giặt ủi đặc biệt.
    - Dịch vụ thuê xe: tiền thuê xe = số giờ thuê * đơn giá. Nếu thuê quá 7 giờ, giảm 10%.
    Thông tin hóa đơn sử dụng dịch vụ gồm makh (mã khách hàng), tenkh (họ tên khách hàng), và n (0 < n < 200) dịch vụ mà khách hàng đã sử dụng, trigia (trị giá hóa đơn).
    Yêu cầu: Viết chương trình cài đặt các lớp và các phương thức cần thiết để thực hiện các thao tác sau:
    a/ Nhập hóa đơn (người dùng nhập gồm các dịch vụ mà khách hàng đã sử dụng).
    b/ Xuất hóa đơn.
    c/ Tính tiền mỗi dịch vụ mà khách hàng phải trả.
    d/ Tính tổng số tiền mà khách sạn thu được.
    [/FIXED]
    Còn đây là bài giải của mình. Mình muốn nhờ mọi người xem rồi góp ý dùm, nhất là về cách xây dựng các lớp đã hợp lí chưa, có cách nào làm cho đơn giản hơn không. Vì bài này là trong một đề thi, mà đề thi này có tới 4 câu , làm trong 2 tiếng. Đây là câu dài nhất nhưng làm kiểu như mình thì chắc chắn là không kịp (bài giải này là mình làm ở nhà đó, chứ còn trong lúc thi thì mình mới kịp khai báo các lớp, viết hàm main và một số hàm lặt vặt khác thôi; mà rút cục cũng sai quá trời ). Mình muốn nghe ý kiến của các bạn để rút kinh nghiệm cho các lần thi sau.
    Attached Files Attached Files
    Đã được chỉnh sửa lần cuối bởi tunglun : 08-01-2009 lúc 10:04 PM. Lý do: hi vọng lần này post dúng box

  2. #2
    Ngày gia nhập
    02 2008
    Bài viết
    15

    bài này tuy đơn giản nhưng đúng là mất nhiều thời gian thật đó mình xin code lại như sau :
    dùng 4 class
    class giat
    class xe
    class dichvu
    class khach
    ( va o day minh them 1 chut nua : khach hang co the thue xe và giặt nhiều lần)
    va cuoi cung ham main se goi den 1 mang co kieu khach
    tong tien khach san thu duoc bang tong tien thu duoc cua tat ca khach hang

    C++ Code:
    1. // quan ly khach san.cpp : Defines the entry point for the console application.
    2. //
    3.  
    4. #include "stdafx.h"
    5. #include <conio.h>
    6. #include <iostream>
    7. using namespace std;
    8. class giat{
    9. private:
    10.     float kg;//so can
    11.     float cena;//gia
    12.     float dodatkowo;//cong them
    13. public:
    14.     giat(){
    15.         kg=cena=dodatkowo=0;
    16.     }
    17.     ~giat(){
    18.         kg=cena=dodatkowo=0;
    19.     }
    20.     void giat::nhap(){
    21.         puts("nhap so kg da giat");
    22.         cin>>kg;
    23.         puts("don gia cho moi kg ???($)");
    24.         cin>>cena;
    25.         puts("chi phi cho do giat dac biet ???($)");
    26.         cin>>dodatkowo;
    27.     }
    28.     float giat::dola(){
    29.         float tien;
    30.         tien = kg*cena+dodatkowo;
    31.         if(kg>10) return(0.95*tien);
    32.         else return tien;
    33.     }
    34.     float giat::getkg(){
    35.         return kg;
    36.     }
    37. };
    38. class xe{
    39. private:
    40.     float god;//so gio
    41.     float cena;//gia
    42. public:
    43.     xe(){
    44.         god=cena=0;
    45.     }
    46.     ~xe(){
    47.         god=cena=0;
    48.     }
    49.     void xe::nhap(){
    50.         puts("nhap so gio da thue xe");
    51.         cin>>god;
    52.         puts("don gia cho moi gio thue xe ???($)");
    53.         cin>>cena;
    54.     }
    55.     float xe::dola(){
    56.         float tien;
    57.         tien = god*cena;
    58.         if(god>7) return(0.9*tien);
    59.         else return tien;
    60.     }
    61.     float xe::getgod(){
    62.         return god;
    63.     }
    64. };
    65. class dichvu{
    66. private:
    67.     giat pralnie;
    68.     xe samochod;
    69. public:
    70.     dichvu():pralnie(),samochod(){}
    71.     ~dichvu(){}
    72.     void dichvu::nhap(){
    73.         char s1,s2;
    74.         puts("ban co giat khong (y/n)??");
    75.         do{
    76.             s1=getch();
    77.         }while(s1!='y'&& s1!='Y'&& s1!='n'&& s1!='N');
    78.         if(s1=='Y'||s1=='y') pralnie.giat::nhap();
    79.         else pralnie=giat();
    80.         puts("ban co thue xe khong (y/n)??");
    81.         do{
    82.             s2=getch();
    83.         }while(s2!='y'&& s2!='Y'&& s2!='n'&& s2!='N');
    84.         if(s2=='Y'||s2=='y') samochod.xe::nhap();
    85.         else samochod=xe();
    86.     }
    87.     float dichvu::dola(){
    88.         float tien;
    89.         tien = pralnie.giat::dola() + samochod.xe::dola();
    90.         return tien;
    91.     }
    92.     void dichvu::in(){
    93.         if(pralnie.giat::getkg()>10)
    94.             cout<<"chi phi giat ui la:\t"<<pralnie.giat::dola()<<"\tduoc giam gia 5%"<<endl;
    95.         else
    96.             cout<<"chi phi giat ui la:\t"<<pralnie.giat::dola()<<endl;
    97.         if(samochod.xe::getgod()>7)
    98.             cout<<"chi phi thue xe la:\t"<<samochod.xe::dola()<<"\tduoc giam gia 10%"<<endl;
    99.         else
    100.             cout<<"chi phi thue xe la:\t"<<samochod.xe::dola()<<endl;
    101.         cout<<"tong chi phi la:\t"<<dichvu::dola()<<endl;
    102.     }
    103. };
    104.  
    105. class khach{
    106. private:
    107.     char code[10];//ma khac hang
    108.     char nazwa[30];// ten khach hang
    109.     int n;//so lan su dung dich vu
    110.     float tong;
    111.     dichvu hoadon[20];
    112. public:
    113.     khach(){
    114.         code[0]='\0';
    115.         nazwa[0]='\0';
    116.         n=0;
    117.         tong=0;
    118.     }
    119.     ~khach(){
    120.         if(code!=NULL) delete code;
    121.         if(nazwa!=NULL) delete nazwa;
    122.         if(n!=0) n=0;
    123.         if(tong!=0) tong=0;
    124.     }
    125.     void    khach::nhap(){
    126.         tong =0;
    127.         int i;
    128.         cin.ignore(1);
    129.         puts("nhap ma khac hang");
    130.         cin.getline(code,10);
    131.         puts("nhap ten khac hang");
    132.         cin.getline(nazwa,30);
    133.         puts("nhap so lan su dung dich vu");
    134.         cin>>n;
    135.         for(i=0;i<n;i++){
    136.             cout<<"dich vu lan "<<i+1<<endl;
    137.             hoadon[i].dichvu::nhap();
    138.         }
    139.     }
    140.     void khach::in(){
    141.         int i;
    142.         for(i=0;i<n;i++){
    143.             tong +=hoadon[i].dichvu::dola();
    144.             cout<<"chi phi lan su dung dich vu thu"<<i+1<<endl;
    145.             hoadon[i].dichvu::in();
    146.         }
    147.         cout<<"tong chi phi khach phai tra la   "<<tong <<endl;
    148.     }
    149.     float gettong(){
    150.         return tong;
    151.     }
    152. };
    153.  
    154. int main(){
    155.     khach a[10];
    156.     int i, n;
    157.     float sum=0;
    158.     cout<<"nhap so luong khach hang"<<endl;
    159.     cin>>n;
    160.     for(i=0;i<n;i++){
    161.         cout<<"khach hang thu "<<i+1<<endl;
    162.         a[i].khach::nhap();
    163.         a[i].khach::in();
    164.         sum+=a[i].khach::gettong();
    165.         puts("\n");
    166.     }
    167.     cout<<"\n\ntong tien khach san thu duoc la "<<sum<<endl;
    168.     getch();
    169.  
    170.     return 0;
    171. }

  3. #3
    No Avatar
    ngocbig Khách

    Trích dẫn Nguyên bản được gửi bởi C
    if(code!=NULL) delete code;
    if(nazwa!=NULL) delete nazwa;
    Tại sao phải cần làm thế.

  4. #4
    Ngày gia nhập
    02 2008
    Bài viết
    15

    Trích dẫn Nguyên bản được gửi bởi ngocbig Xem bài viết
    Tại sao phải cần làm thế.
    đấy đơn giản chỉ là 1 hàm hủy bình thường thôi mà !!! nó có tác dụng trả lại bộ nhớ !!! nếu ko muốn làm thế thì có thể làm như sau
    code[0]='\0';
    nazwa[0]='\0'

  5. #5
    No Avatar
    ngocbig Khách

    Kể cả là cấp phát tĩnh????????

    Còn nữa,như thế này

    code[0]='\0';
    nazwa[0]='\0'


    Code:
    if(code!=NULL) delete code;
    if(nazwa!=NULL) delete nazwa;
    có chức năng giống nhau?
    Đã được chỉnh sửa lần cuối bởi ngocbig : 09-01-2009 lúc 01:43 PM.

  6. #6
    Ngày gia nhập
    10 2008
    Bài viết
    1

    Mặc định Bài tập quản lí "khách sạn"

    Cám ơn bạn ledinhtung61 đã góp ý, vậy là hướng giải của bạn hơi khác mình ở chỗ: bạn không lưu số dịch vụ theo từng hóa đơn mà theo từng khách hàng. Đó cũng là một cách tiếp cận hay. Nhưng mình thấy có chỗ chưa ổn lắm: trong mỗi đối tượng khách hàng chứa một mảng các dichvu có tên là hoadon, vậy có nghĩa là mỗi hóa đơn chỉ chứa một loại dịch vụ, mình thấy chỗ này hình như không ổn về nghĩa lắm Bạn thử xem lại xem.
    PS: bạn đặt tên biến khó hỉu quá, chẳng biết là tiếng nước nào hay là chữ viết tắt cả.

  7. #7
    No Avatar
    ngocbig Khách

    @ledinhtung61: Không trả lời mình à?? Đợi mãi không thấy reply. Mình chờ nhé.

  8. #8
    Ngày gia nhập
    02 2008
    Bài viết
    15

    Trích dẫn Nguyên bản được gửi bởi ngocbig Xem bài viết
    Kể cả là cấp phát tĩnh????????

    Còn nữa,như thế này





    Code:
    if(code!=NULL) delete code;
    if(nazwa!=NULL) delete nazwa;
    có chức năng giống nhau?
    mình giải thích như sau !!!
    delete code; không giống code[0]='\0';
    việc giải phóng bộ nhớ dùng hàm delete tương đương với việc dùng hàm free trong C ,
    còn việc dùng code[0]='\0';
    đơn giản tương đương với code = NULL ;

    vì sao lại thế ???
    vì khi khai báo bạn khai báo code[10] tức là đã chỉ định cho address of code[0] = 1 ô nhớ nào đấy;
    ví dụ code[0] chỉ đến ô nhớ thứ 404 trong memory của máy tính chẳng hạn
    nếu dùng delete hoặc free thì code[0] nó sẽ không chỉ đến 1 ô nhớ nào nữa
    còn nếu
    code[0]='\0'; thì code[0] nó sẽ chỉ đến ô nhớ số 0 ( cái đó chúng ta thường kí hiệu bằng NULL đó)

    mà hôm qua code xong !!! mình còn phải đi ngủ chứ !!! vừa dậy nè !!!

  9. #9
    Ngày gia nhập
    02 2008
    Bài viết
    15

    Trích dẫn Nguyên bản được gửi bởi tunglun Xem bài viết
    Cám ơn bạn ledinhtung61 đã góp ý, vậy là hướng giải của bạn hơi khác mình ở chỗ: bạn không lưu số dịch vụ theo từng hóa đơn mà theo từng khách hàng. Đó cũng là một cách tiếp cận hay. Nhưng mình thấy có chỗ chưa ổn lắm: trong mỗi đối tượng khách hàng chứa một mảng các dichvu có tên là hoadon, vậy có nghĩa là mỗi hóa đơn chỉ chứa một loại dịch vụ, mình thấy chỗ này hình như không ổn về nghĩa lắm Bạn thử xem lại xem.
    PS: bạn đặt tên biến khó hỉu quá, chẳng biết là tiếng nước nào hay là chữ viết tắt cả.
    việc đặt tên không quan trọng lắm !!!! phải không !!!
    còn nữa mỗi khách hàng của mình dùng 1 mảng dịch vụ đúng (vì mình nghĩ khách hàng có thể thuê xe và giặt ủi nhiều lần phải không )
    và hơn nữa bạn xem lại class dichvu của mình xem
    class dichvu có 2 thuộc tính kiểu giặt và kiểu xe
    như vậy : mà mảng hóadon có kiểu dịch vụ
    tức là mỗi hóadon[i] đều có dịchvu.giat và dichvu.xe (phải không)

  10. #10
    No Avatar
    ngocbig Khách

    mình giải thích như sau !!!

    vì khi khai báo bạn khai báo code[10] tức là đã chỉ định cho address of code[0] = 1 ô nhớ nào đấy;
    ví dụ code[0] chỉ đến ô nhớ thứ 404 trong memory của máy tính chẳng hạn
    nếu dùng delete hoặc free thì code[0] nó sẽ không chỉ đến 1 ô nhớ nào nữa
    Bạn có chắc chắn đối với câu trả lời này không?
    Ý mình là đây là giải pháp giải phóng bộ nhớ đã chiếm trong class bên trên của bạn?

Các đề tài tương tự

  1. nghĩa của 3 từ "principals", "artifacts", "securables" là như thế nào?
    Gửi bởi ntbao trong diễn đàn English for IT | Tiếng anh cho dân CNTT
    Trả lời: 2
    Bài viết cuối: 02-09-2017, 06:36 PM
  2. Lỗi"error C2275: 'T' : illegal use of this type as an expression" khi dùng "list<T>::iterator it"
    Gửi bởi doicanhden trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 6
    Bài viết cuối: 19-01-2012, 01:59 AM
  3. Trả lời: 1
    Bài viết cuối: 01-12-2011, 07:32 PM
  4. Trả lời: 4
    Bài viết cuối: 14-09-2011, 11:01 PM
  5. Problems : " recover tree " with input as " preorder" and "inorder"
    Gửi bởi HoangManhHa1991 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 13-04-2011, 10:19 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn