MS Visual C++ .NET Applications: Georgetown Cleaning Services |
|
Introduction to Serialization |
To process an order, we will use the same approach as for the Georgetown Cleaning Services application to calculation the cost of a cleaning order When an order has been processed, we will let the user save it. To make this useful and convenient, we will save cleaning orders for each day in a common file but we will give the user the opportunity to save the order for another day. To implement this behavior, we will use the serialization of an ArrayList object which itself will use a whole cleaning order stored in a variable.
|
// GCSOrder.h #pragma once using namespace System; namespace GCSOrder { [Serializable] public __gc class CleaningOrder { private: String *_orderNbr; String *_custName; String *_custPhone; DateTime _dteLeft; DateTime _tmeLeft; DateTime _dtePicked; DateTime _tmePicked; double _shtPrice; int _shtQty; double _shtTotal; double _pntPrice; int _pntQty; double _pntTotal; String *_item1Name; double _item1Price; int _item1Qty; double _item1Total; String *_item2Name; double _item2Price; int _item2Qty; double _item2Total; String *_item3Name; double _item3Price; int _item3Qty; double _item3Total; String *_item4Name; double _item4Price; int _item4Qty; double _item4Total; double _cleanTotal; double _taxRate; double _taxAmt; double _orderTotal; public: CleaningOrder() { _orderNbr = S"010119000"; _custName = S"Unknown"; _custPhone = S"N/A"; _dteLeft = DateTime::Today; _tmeLeft = DateTime::Now; _dtePicked = DateTime::Today;; _tmePicked = DateTime::Now; _shtPrice = 0.95; _shtQty = 0; _shtTotal = 0.00; _pntPrice = 1.75; _pntQty = 0; _pntTotal = 0.00; _item1Price = 0; _item1Qty = 0; _item1Total = 0.00; _item2Price = 0.00; _item2Qty = 0; _item2Total = 0.00; _item3Price = 0.00; _item3Qty = 0; _item3Total = 0.00; _item4Price = 0.00; _item4Qty = 0; _item4Total = 0.00; _cleanTotal = 0.00; _taxRate = 5.75; _taxAmt = 0.00; _orderTotal = 0.00; } public: __property String *get_CleaningNumber() { return _orderNbr; } __property void set_CleaningNumber(String *nbr) { _orderNbr = nbr; } __property String *get_CustomerName() { return _custName; } __property void set_CustomerName(String *strCustName) { _custName = strCustName; } __property String *get_CustomerPhone() { return _custPhone; } __property void set_CustomerPhone(String *strCustPhone) { _custPhone = strCustPhone; } __property DateTime get_DateLeft() { return _dteLeft; } __property void set_DateLeft(DateTime dteLeft) { _dteLeft = dteLeft; } __property DateTime get_TimeLeft() { return _tmeLeft; } __property void set_TimeLeft(DateTime tmeLeft) { _tmeLeft = tmeLeft; } __property DateTime get_DatePickedUp() { return _dtePicked; } __property void set_DatePickedUp(DateTime dtePicked) { _dtePicked = dtePicked; } __property DateTime get_TimePickedUp() { return _tmePicked; } __property void set_TimePickedUp(DateTime tmePicked) { _tmePicked = tmePicked; } __property double get_ShirtUnitPrice() { return _shtPrice; } __property void set_ShirtUnitPrice(double price) { _shtPrice = price; } __property int get_ShirtQuantity() { return _shtQty; } __property void set_ShirtQuantity(int qty) { _shtQty = qty; } __property double get_ShirtSubTotal() { return _shtTotal; } __property void set_ShirtSubTotal(double subTotal) { _shtTotal = subTotal; } __property double get_PantsUnitPrice() { return _pntPrice; } __property void set_PantsUnitPrice(double price) { _pntPrice = price; } __property int get_PantsQuantity() { return _pntQty; } __property void set_PantsQuantity(int qty) { _pntQty = qty; } __property double get_PantsSubTotal() { return _pntTotal; } __property void set_PantsSubTotal(double subTotal) { _pntTotal = subTotal; } __property String* get_Item1Name() { return _item1Name; } __property void set_Item1Name(String *name) { _item1Name = name; } __property double get_Item1UnitPrice() { return _item1Price; } __property void set_Item1UnitPrice(double price) { _item1Price = price; } __property int get_Item1Quantity() { return _item1Qty; } __property void set_Item1Quantity(int qty) { _item1Qty = qty; } __property double get_Item1SubTotal() { return _item1Total; } __property void set_Item1SubTotal(double subTotal) { _item1Total = subTotal; } __property String* get_Item2Name() { return _item2Name; } __property void set_Item2Name(String *name) { _item2Name = name; } __property double get_Item2UnitPrice() { return _item2Price; } __property void set_Item2UnitPrice(double price) { _item2Price = price; } __property int get_Item2Quantity() { return _item2Qty; } __property void set_Item2Quantity(int qty) { _item2Qty = qty; } __property double get_Item2SubTotal() { return _item2Total; } __property void set_Item2SubTotal(double subTotal) { _item2Total = subTotal; } __property String* get_Item3Name() { return _item3Name; } __property void set_Item3Name(String *name) { _item3Name = name; } __property double get_Item3UnitPrice() { return _item3Price; } __property void set_Item3UnitPrice(double price) { _item3Price = price; } __property int get_Item3Quantity() { return _item3Qty; } __property void set_Item3Quantity(int qty) { _item3Qty = qty; } __property double get_Item3SubTotal() { return _item3Total; } __property void set_Item3SubTotal(double subTotal) { _item3Total = subTotal; } __property String* get_Item4Name() { return _item4Name; } __property void set_Item4Name(String *name) { _item4Name = name; } __property double get_Item4UnitPrice() { return _item4Price; } __property void set_Item4UnitPrice(double price) { _item4Price = price; } __property int get_Item4Quantity() { return _item4Qty; } __property void set_Item4Quantity(int qty) { _item4Qty = qty; } __property double get_Item4SubTotal() { return _item4Total; } __property void set_Item4SubTotal(double subTotal) { _item4Total = subTotal; } __property double get_CleaningTotal() { return _cleanTotal; } __property void set_CleaningTotal(double total) { _cleanTotal = total; } __property double get_TaxRate() { return _taxRate; } __property void set_TaxRate(double tax) { _taxRate = tax; } __property double get_TaxAmount() { return _taxAmt; } __property void set_TaxAmount(double amt) { _taxAmt = amt; } __property double get_OrderTotal() { return _orderTotal; } __property void set_OrderTotal(double total) { _orderTotal = total; } }; } |
#pragma once using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; namespace GCS3 { . . . No Change private: /// <summary> /// Required designer variable. /// </summary> System::ComponentModel::Container* components; ArrayList *CleaningItems; /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> void InitializeComponent(void) { . . . No Change } private: System::Void btnClose_Click(System::Object * sender, System::EventArgs * e) { Close(); } private: System::Void NewCleaningOrder_Load(System::Object * sender, System::EventArgs * e) { CleaningItems = new ArrayList; } }; } |
#pragma once #using <System.Runtime.Serialization.Formatters.Soap.dll> using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; using namespace System::IO; using namespace System::Runtime::Serialization::Formatters::Soap; |
private: System::Void btnSave_Click(System::Object * sender, System::EventArgs * e) { if( this->txtCustomerName->Text->Equals(S"") ) { MessageBox::Show(S"A cleaning order must have a name for the customer"); this->txtCustomerName->Focus(); return; } // Just in case the user forgot to calculate the order, do it now this->btnCalculate_Click(sender, e); // Create the name of the file to save the current cleaning order DateTime dteProcessed = this->dtpDateProcessed->Value; int day = dteProcessed.Day; int month = dteProcessed.Month; int year = dteProcessed.Year; String *strDay = day.ToString(); if( day < 10 ) strDay = String::Concat(S"0", day.ToString()); String *strMonth = month.ToString(); if( month < 10 ) strMonth = String::Concat(S"0", month.ToString()); String *strFilename = String::Concat(strDay, strMonth, year.ToString(), S".gcs"); GCSOrder::CleaningOrder *order = new GCSOrder::CleaningOrder(); order->CustomerName = this->txtCustomerName->Text; order->CustomerPhone = this->txtCustomerPhone->Text; order->DateLeft = this->dtpDateLeft->Value; order->TimeLeft = this->dtpTimeLeft->Value; order->DatePickedUp = this->dtpDateExpected->Value; order->TimePickedUp = this->dtpTimeExpected->Value; order->ShirtUnitPrice = this->txtShirtsUnitPrice->Text->ToDouble(0); order->ShirtQuantity = this->txtShirtsQuantity->Text->ToInt32(0); order->ShirtSubTotal = this->txtShirtsSubTotal->Text->ToDouble(0); order->PantsUnitPrice = this->txtPantsUnitPrice->Text->ToDouble(0); order->PantsQuantity = this->txtPantsQuantity->Text->ToInt32(0); order->PantsSubTotal = this->txtPantsSubTotal->Text->ToDouble(0); order->Item1Name = this->cboItem1->Text; order->Item1UnitPrice = this->txtItem1UnitPrice->Text->ToDouble(0); order->Item1Quantity = this->txtItem1Quantity->Text->ToInt32(0); order->Item1SubTotal = this->txtItem1SubTotal->Text->ToDouble(0); order->Item2Name = this->cboItem2->Text; order->Item2UnitPrice = this->txtItem2UnitPrice->Text->ToDouble(0); order->Item2Quantity = this->txtItem2Quantity->Text->ToInt32(0); order->Item2SubTotal = this->txtItem2SubTotal->Text->ToDouble(0); order->Item3Name = this->cboItem3->Text; order->Item3UnitPrice = this->txtItem3UnitPrice->Text->ToDouble(0); order->Item3Quantity = this->txtItem3Quantity->Text->ToInt32(0); order->Item3SubTotal = this->txtItem3SubTotal->Text->ToDouble(0); order->Item4Name = this->cboItem4->Text; order->Item4UnitPrice = this->txtItem4UnitPrice->Text->ToDouble(0); order->Item4Quantity = this->txtItem4Quantity->Text->ToInt32(0); order->Item4SubTotal = this->txtItem4SubTotal->Text->ToDouble(0); order->CleaningTotal = this->txtCleaningTotal->Text->ToDouble(0); order->TaxRate = this->txtTaxRate->Text->ToDouble(0); order->TaxAmount = this->txtTaxAmount->Text->ToDouble(0); order->OrderTotal = this->txtOrderTotal->Text->ToDouble(0); this->CleaningItems->Add(order); FileStream *gcsStream = new FileStream(strFilename, FileMode::OpenOrCreate, FileAccess::Write, FileShare::Write); SoapFormatter *gcsSoap = new SoapFormatter(); gcsSoap->Serialize(gcsStream, this->CleaningItems); gcsStream->Close(); this->btnNewOrder_Click(sender, e); } |
#pragma once #using <System.Runtime.Serialization.Formatters.Soap.dll> using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; using namespace System::IO; using namespace System::Runtime::Serialization::Formatters::Soap; |
private: /// <summary> /// Required designer variable. /// </summary> System::ComponentModel::Container* components; ArrayList *CleaningItems; int CurrentPosition; |
private: System::Void CleaningOrders_Load(System::Object * sender, System::EventArgs * e) { CleaningItems = new ArrayList(); CurrentPosition = 0; } |
private: System::Void dtpDateProcessed_ValueChanged(System::Object * sender, System::EventArgs * e) { DateTime dteSelected = this->dtpDateProcessed->Value; int day = dteSelected.Day; int month = dteSelected.Month; int year = dteSelected.Year; SoapFormatter *gcsSoap = new SoapFormatter(); String *strDay = day.ToString(); if( day < 10 ) strDay = String::Concat(S"0", day.ToString()); String *strMonth = month.ToString(); if( month < 10 ) strMonth = String::Concat(S"0", month.ToString()); String *strFilename = String::Concat(strDay, strMonth, year.ToString(), S".gcs"); if( File::Exists(strFilename) ) { FileStream *gcsStream = new FileStream(strFilename, FileMode::Open, FileAccess::Read, FileShare::Read); CleaningItems = dynamic_cast<ArrayList *>(gcsSoap->Deserialize(gcsStream)); gcsStream->Close(); this->btnFirst_Click(sender, e); } } |
private: System::Void btnFirst_Click(System::Object * sender, System::EventArgs * e) { if( this->CleaningItems->Count == 0 ) return; CurrentPosition = 0; GCSOrder::CleaningOrder *order = new GCSOrder::CleaningOrder(); order = dynamic_cast<GCSOrder::CleaningOrder *>(this->CleaningItems->Item[0]); this->txtCustomerName->Text = order->CustomerName; this->txtCustomerPhone->Text = order->CustomerPhone; this->dtpDateLeft->Value = order->DateLeft; this->dtpTimeLeft->Value = order->TimeLeft; this->dtpDatePickedUp->Value = order->DatePickedUp; this->dtpTimePickedUp->Value = order->TimePickedUp; this->txtShirtsUnitPrice->Text = order->ShirtUnitPrice.ToString(S"F"); this->txtShirtsQuantity->Text = order->ShirtQuantity.ToString(S"F"); this->txtShirtsSubTotal->Text = order->ShirtSubTotal.ToString(S"F"); this->txtPantsUnitPrice->Text = order->PantsUnitPrice.ToString(S"F"); this->txtPantsQuantity->Text = order->PantsQuantity.ToString(S"F"); this->txtPantsSubTotal->Text = order->PantsSubTotal.ToString(S"F"); this->txtItem1Name->Text = order->Item1Name; this->txtItem1UnitPrice->Text = order->Item1UnitPrice.ToString(S"F"); this->txtItem1Quantity->Text = order->Item1Quantity.ToString(S"F"); this->txtItem1SubTotal->Text = order->Item1SubTotal.ToString(S"F"); this->txtItem2Name->Text = order->Item2Name; this->txtItem2UnitPrice->Text = order->Item2UnitPrice.ToString(S"F"); this->txtItem2Quantity->Text = order->Item2Quantity.ToString(S"F"); this->txtItem2SubTotal->Text = order->Item2SubTotal.ToString(S"F"); this->txtItem3Name->Text = order->Item3Name; this->txtItem3UnitPrice->Text = order->Item3UnitPrice.ToString(S"F"); this->txtItem3Quantity->Text = order->Item3Quantity.ToString(S"F"); this->txtItem3SubTotal->Text = order->Item3SubTotal.ToString(S"F"); this->txtItem4Name->Text = order->Item4Name; this->txtItem4UnitPrice->Text = order->Item4UnitPrice.ToString(S"F"); this->txtItem4Quantity->Text = order->Item4Quantity.ToString(S"F"); this->txtItem4SubTotal->Text = order->Item4SubTotal.ToString(S"F"); this->txtCleaningTotal->Text = order->CleaningTotal.ToString(S"F"); this->txtTaxRate->Text = order->TaxRate.ToString(S"F"); this->txtTaxAmount->Text = order->TaxAmount.ToString(S"F"); this->txtOrderTotal->Text = order->OrderTotal.ToString(S"F"); } |
private: System::Void btnPrevious_Click(System::Object * sender, System::EventArgs * e) { if( this->CleaningItems->Count == 0 ) return; if( CurrentPosition == 0 ) return; else { CurrentPosition--; GCSOrder::CleaningOrder *order = new GCSOrder::CleaningOrder(); order = dynamic_cast<GCSOrder::CleaningOrder *>(this->CleaningItems->Item[CurrentPosition]); this->txtCustomerName->Text = order->CustomerName; this->txtCustomerPhone->Text = order->CustomerPhone; this->dtpDateLeft->Value = order->DateLeft; this->dtpTimeLeft->Value = order->TimeLeft; this->dtpDatePickedUp->Value = order->DatePickedUp; this->dtpTimePickedUp->Value = order->TimePickedUp; this->txtShirtsUnitPrice->Text = order->ShirtUnitPrice.ToString(S"F"); this->txtShirtsQuantity->Text = order->ShirtQuantity.ToString(S"F"); this->txtShirtsSubTotal->Text = order->ShirtSubTotal.ToString(S"F"); this->txtPantsUnitPrice->Text = order->PantsUnitPrice.ToString(S"F"); this->txtPantsQuantity->Text = order->PantsQuantity.ToString(S"F"); this->txtPantsSubTotal->Text = order->PantsSubTotal.ToString(S"F"); this->txtItem1Name->Text = order->Item1Name; this->txtItem1UnitPrice->Text = order->Item1UnitPrice.ToString(S"F"); this->txtItem1Quantity->Text = order->Item1Quantity.ToString(S"F"); this->txtItem1SubTotal->Text = order->Item1SubTotal.ToString(S"F"); this->txtItem2Name->Text = order->Item2Name; this->txtItem2UnitPrice->Text = order->Item2UnitPrice.ToString(S"F"); this->txtItem2Quantity->Text = order->Item2Quantity.ToString(S"F"); this->txtItem2SubTotal->Text = order->Item2SubTotal.ToString(S"F"); this->txtItem3Name->Text = order->Item3Name; this->txtItem3UnitPrice->Text = order->Item3UnitPrice.ToString(S"F"); this->txtItem3Quantity->Text = order->Item3Quantity.ToString(S"F"); this->txtItem3SubTotal->Text = order->Item3SubTotal.ToString(S"F"); this->txtItem4Name->Text = order->Item4Name; this->txtItem4UnitPrice->Text = order->Item4UnitPrice.ToString(S"F"); this->txtItem4Quantity->Text = order->Item4Quantity.ToString(S"F"); this->txtItem4SubTotal->Text = order->Item4SubTotal.ToString(S"F"); this->txtCleaningTotal->Text = order->CleaningTotal.ToString(S"F"); this->txtTaxRate->Text = order->TaxRate.ToString(S"F"); this->txtTaxAmount->Text = order->TaxAmount.ToString(S"F"); this->txtOrderTotal->Text = order->OrderTotal.ToString(S"F"); } } |
private: System::Void btnNext_Click(System::Object * sender, System::EventArgs * e) { if( this->CleaningItems->Count == 0 ) return; if( CurrentPosition == (this->CleaningItems->Count) ) return; else { CurrentPosition++; GCSOrder::CleaningOrder *order = new GCSOrder::CleaningOrder(); order = dynamic_cast<GCSOrder::CleaningOrder *>(this->CleaningItems->Item[CurrentPosition]); this->txtCustomerName->Text = order->CustomerName; this->txtCustomerPhone->Text = order->CustomerPhone; this->dtpDateLeft->Value = order->DateLeft; this->dtpTimeLeft->Value = order->TimeLeft; this->dtpDatePickedUp->Value = order->DatePickedUp; this->dtpTimePickedUp->Value = order->TimePickedUp; this->txtShirtsUnitPrice->Text = order->ShirtUnitPrice.ToString(S"F"); this->txtShirtsQuantity->Text = order->ShirtQuantity.ToString(S"F"); this->txtShirtsSubTotal->Text = order->ShirtSubTotal.ToString(S"F"); this->txtPantsUnitPrice->Text = order->PantsUnitPrice.ToString(S"F"); this->txtPantsQuantity->Text = order->PantsQuantity.ToString(S"F"); this->txtPantsSubTotal->Text = order->PantsSubTotal.ToString(S"F"); this->txtItem1Name->Text = order->Item1Name; this->txtItem1UnitPrice->Text = order->Item1UnitPrice.ToString(S"F"); this->txtItem1Quantity->Text = order->Item1Quantity.ToString(S"F"); this->txtItem1SubTotal->Text = order->Item1SubTotal.ToString(S"F"); this->txtItem2Name->Text = order->Item2Name; this->txtItem2UnitPrice->Text = order->Item2UnitPrice.ToString(S"F"); this->txtItem2Quantity->Text = order->Item2Quantity.ToString(S"F"); this->txtItem2SubTotal->Text = order->Item2SubTotal.ToString(S"F"); this->txtItem3Name->Text = order->Item3Name; this->txtItem3UnitPrice->Text = order->Item3UnitPrice.ToString(S"F"); this->txtItem3Quantity->Text = order->Item3Quantity.ToString(S"F"); this->txtItem3SubTotal->Text = order->Item3SubTotal.ToString(S"F"); this->txtItem4Name->Text = order->Item4Name; this->txtItem4UnitPrice->Text = order->Item4UnitPrice.ToString(S"F"); this->txtItem4Quantity->Text = order->Item4Quantity.ToString(S"F"); this->txtItem4SubTotal->Text = order->Item4SubTotal.ToString(S"F"); this->txtCleaningTotal->Text = order->CleaningTotal.ToString(S"F"); this->txtTaxRate->Text = order->TaxRate.ToString(S"F"); this->txtTaxAmount->Text = order->TaxAmount.ToString(S"F"); this->txtOrderTotal->Text = order->OrderTotal.ToString(S"F"); } } |
private: System::Void btnLast_Click(System::Object * sender, System::EventArgs * e) { if( this->CleaningItems->Count == 0 ) return; CurrentPosition = CleaningItems->Count; GCSOrder::CleaningOrder *order = new GCSOrder::CleaningOrder(); order = dynamic_cast<GCSOrder::CleaningOrder *>(this->CleaningItems->Item[CurrentPosition]); this->txtCustomerName->Text = order->CustomerName; this->txtCustomerPhone->Text = order->CustomerPhone; this->dtpDateLeft->Value = order->DateLeft; this->dtpTimeLeft->Value = order->TimeLeft; this->dtpDatePickedUp->Value = order->DatePickedUp; this->dtpTimePickedUp->Value = order->TimePickedUp; this->txtShirtsUnitPrice->Text = order->ShirtUnitPrice.ToString(S"F"); this->txtShirtsQuantity->Text = order->ShirtQuantity.ToString(S"F"); this->txtShirtsSubTotal->Text = order->ShirtSubTotal.ToString(S"F"); this->txtPantsUnitPrice->Text = order->PantsUnitPrice.ToString(S"F"); this->txtPantsQuantity->Text = order->PantsQuantity.ToString(S"F"); this->txtPantsSubTotal->Text = order->PantsSubTotal.ToString(S"F"); this->txtItem1Name->Text = order->Item1Name; this->txtItem1UnitPrice->Text = order->Item1UnitPrice.ToString(S"F"); this->txtItem1Quantity->Text = order->Item1Quantity.ToString(S"F"); this->txtItem1SubTotal->Text = order->Item1SubTotal.ToString(S"F"); this->txtItem2Name->Text = order->Item2Name; this->txtItem2UnitPrice->Text = order->Item2UnitPrice.ToString(S"F"); this->txtItem2Quantity->Text = order->Item2Quantity.ToString(S"F"); this->txtItem2SubTotal->Text = order->Item2SubTotal.ToString(S"F"); this->txtItem3Name->Text = order->Item3Name; this->txtItem3UnitPrice->Text = order->Item3UnitPrice.ToString(S"F"); this->txtItem3Quantity->Text = order->Item3Quantity.ToString(S"F"); this->txtItem3SubTotal->Text = order->Item3SubTotal.ToString(S"F"); this->txtItem4Name->Text = order->Item4Name; this->txtItem4UnitPrice->Text = order->Item4UnitPrice.ToString(S"F"); this->txtItem4Quantity->Text = order->Item4Quantity.ToString(S"F"); this->txtItem4SubTotal->Text = order->Item4SubTotal.ToString(S"F"); this->txtCleaningTotal->Text = order->CleaningTotal.ToString(S"F"); this->txtTaxRate->Text = order->TaxRate.ToString(S"F"); this->txtTaxAmount->Text = order->TaxAmount.ToString(S"F"); this->txtOrderTotal->Text = order->OrderTotal.ToString(S"F"); } |
|
||
Previous | Copyright © 2004-2012, FunctionX | |
|