|
مرحبا شباب .. لا تواخذوني .. ما قدرت كتير ساعد هي المرة .. بسبب ضيق الوقت , وضيقان الأخلاق .. شي بيملل بقى .. خلصونا !! المهم .. كنت اليوم كله ملتهي بمسألة واحدة .. المسألة الخامسة من سؤال دورة 2006-2007 المجيدة .. بصراحة هي المسألة من أعظم المسائل في تاريخ الC++ .. أي شو هاد ما خلى الدكتور غسان شي يعتب عليه باللغة إلا وحطو فيها !! من صفوف مجردة .. لحلقات .. لأصدقاء وأعضاء .. كلشي موجود بهي المسألة !! مؤشرات .. أشعة .. dynamic_cast .. بس إذا قدرتوا تحلوها بتكون أكيد ختمتوها للمادة مع المسألة الرابعة .. هادا هو حل المسألة .. انشالله هي صحيحة بنسبة 70% .. بيجوز فيها أخطاء .. بس المهم أنو الشغلات الأساسية محتاط إلها .. بس شغلة عد الزبائن العاديين والمشتركين هي يللي لبكتني وما عرفتلها أسلوب منطقي للحل .. يمكن بدها اعتمادا على الDynamic_Cast والمقارنة بيمشي الحال .. بس مالي متأكد صراحة .. #include <iostream.h> #include <cstring.h> Const Max = 10 ; enum CallTypes = { MobileCall , LandCall } ; class Customer { Public : virtual void PrintInfo () const = 0 ; virtual void MakeCall ( CallTypes , int ) ; virtual void CalDueAmount () = 0 ; virtual void Payment ( int ) ; Private : string Name ; int CustId ; int DueAmount ; int TMobileMinutes ; int TLandMinutes ; } ; void Customer :: MakeCall ( CallTypes CallType , int NMin ) { if ( CallType == MobileCall ) TMobileMinutes += NMin ; else TLandMinutes += NMin ; } void Payment ( int PaidBill ) { cout << "Payment Amount :" << PaidBill << endl ; CalDueAmount () ; PrintInfo () ; if ( PaidBill >= DueAmount ) { DueAmount -= PaidBill ; TLandMinutes = TMobileMinutes = 0 ; } else cout << "Payment Amount not acceptable.." << endl ; } class NormalCustomer : Public Customer { Public : NormalCustomer ( int , string ) ; virtual void CalDueAmount () ; virtual void PrintInfo () const ; } ; NormalCustomer :: NormalCustomer ( int Id , string PersonName ) { Name = PersonName ; CustId = Id ; DueAmount = TMobileMinutes = TLandMinutes = 0 ; } void CalDueAmount () { DueAmount = 4*TMobileMinutes + 6*TLandMinutes ; } void NormalCustomer :: PrintInfo () const { cout << "Customer Number :" << Custid << endl ; cout << "Customer Name :" << Name << endl ; cout << "LandMinutes :" << LandMinutes << endl ; cout << "MobileMinutes :" << MobileMinutes << endl ; cout << "Customer DueAmount :" << DueAmount << endl ; } class SubscriberCostumer : Public Costumer { SubscriberCustomer ( int , string ) ; virtual void CalDueAmount () ; virtual void PrintInfo () const ; } ; Subscriber :: Subscriber ( int Id , string ) { Name = PersonName ; CustId = Id ; DueAmount = TMobileMinutes = TLandMinutes = 0 ; } void SubscriberCustomer :: CalDueAmount () { if ( TMobileMinutes > 150 ) DueAmount = ( TMobileMinutes - 150 ) * 8 ; else DueAmount = 0 ; if ( TLandMinutes > 150 ) DueAmount += ( TLandMinutes - 150 ) * 10 ; else DueAmount = 0 ; } void SubscriberCustomer :: PrintInfo () const { cout << "Customer Number :" << Custid << endl ; cout << "Customer Name :" << Name << endl ; cout << "LandMinutes :" << LandMinutes << endl ; cout << "MobileMinutes :" << MobileMinutes << endl ; cout << "Customer DueAmount :" << DueAmount << endl ; cout << "ExtraMinMobile :" << ( TMobileMinutes > 150 ) ? TMobileMinutes - 150 : 0 << endl ; cout << "ExtraMinLand :" << ( TLandMinutes > 150 ) ? TMobileMinutes - 150 : 0 << endl ; } Class Company { Public : Company ( int ) ; void AddNewCustomer ( Customer & ) ; void PrintAllCustomers () const ; void GetNormalCustomersCount () const ; void GetSubscriberCustomersCount () const ; ~Company () ; Private : Customer* Customers ; int NumCustomers ; } ; Company :: Company ( int Size ) { Customers = new Customer [ Size ] ; NumCustomers = 0 ; } void AddNewCustomer ( Costumer &LuckyCostumer ) { NumCustomers++ ; Customers [ NumCustomers ] = &LuckyCostumer ; } void Company :: PrintAllCustomers () const { for ( int i = 0 ; i<NumCustomers ; i++ ) Customers [ i ]->PrintInfo () ; } Company :: ~Company () { delete [] Customers ; } موفقين يا شباب .. ادعولنا ..
|