Home

XML-Based Applications:
College Park Auto-Parts

 
 

Saving an Order

When a order has been placed and it is ready, the user can save it to store it to a file. The orders for each day are stored in their own file so the management can review daily sales. This can be done automatically. If not, the user can save each order in its own file or in any existing file.

 

Practical Learning Practical Learning: Saving an Order

  1. Display the Order Processing form and double-click the Save button
  2. Implement its Click event as follows:
     
    System::Void btnSave_Click(System::Object *  sender, System::EventArgs *  e)
    {
    	 String *strFilename = String::Concat(this->dtpFilename->Text, S".xml");
    	 XmlDocument *docXML = new XmlDocument();
    	 String *strContent = 0;
    	 String *strTotalOrder = this->txtTotalOrder->Text;
    	 String *strParentOrder = 0;
    
    	 if( this->chkKeepRemove1->Checked == true )
    	 {
    		 strContent = String::Concat(strContent,
    			S"<PartSold><PartNumber>", this->txtPartNumber1->Text, S"</PartNumber>",
    			            S"<PartName>", this->txtPartName1->Text, S"</PartName>",
    			              S"<UnitPrice>", this->txtUnitPrice1->Text, S"</UnitPrice>",
    			              S"<Qty>", this->txtQuantity1->Text, S"</Qty>",
    			       S"<SubTotal>", this->txtSubTotal1->Text, S"</SubTotal></PartSold>");
    	 }
    
    	 if( this->chkKeepRemove2->Checked == true )
    	 {
    		 strContent = String::Concat(strContent,
    			  S"<PartSold><PartNumber>", this->txtPartNumber2->Text, S"</PartNumber>",
    				 S"<PartName>", this->txtPartName2->Text, S"</PartName>",
    				 S"<UnitPrice>", this->txtUnitPrice2->Text, S"</UnitPrice>",
    				 S"<Qty>", this->txtQuantity2->Text, S"</Qty>",
    			 S"<SubTotal>", this->txtSubTotal2->Text, S"</SubTotal></PartSold>");
    	 }
    
    	 if( this->chkKeepRemove3->Checked == true )
    	 {
    		 strContent = String::Concat(strContent,
    			S"<PartSold><PartNumber>", this->txtPartNumber3->Text, S"</PartNumber>",
    				 S"<PartName>", this->txtPartName3->Text, S"</PartName>",
    				 S"<UnitPrice>", this->txtUnitPrice3->Text, S"</UnitPrice>",
    				 S"<Qty>", this->txtQuantity3->Text, S"</Qty>",
    			 S"<SubTotal>", this->txtSubTotal3->Text, S"</SubTotal></PartSold>");
    	 }
    
    	 if( this->chkKeepRemove4->Checked == true )
    	 {
    		 strContent = String::Concat(strContent,
    			S"<PartSold><PartNumber>", this->txtPartNumber4->Text, S"</PartNumber>",
    				 S"<PartName>", this->txtPartName4->Text, S"</PartName>",
    				 S"<UnitPrice>", this->txtUnitPrice4->Text, S"</UnitPrice>",
    				 S"<Qty>", this->txtQuantity4->Text, S"</Qty>",
    			S"<SubTotal>", this->txtSubTotal4->Text, S"</SubTotal></PartSold>");
    	 }
    
    	 if( this->chkKeepRemove5->Checked == true )
    	 {
    		 strContent = String::Concat(strContent, 
    			S"<PartSold><PartNumber>", this->txtPartNumber5->Text, S"</PartNumber>",
    				 S"<PartName>", this->txtPartName5->Text, S"</PartName>",
    				 S"<UnitPrice>", this->txtUnitPrice5->Text, S"</UnitPrice>",
    				 S"<Qty>", this->txtQuantity5->Text, S"</Qty>",
    			 S"<SubTotal>", this->txtSubTotal5->Text, S"</SubTotal></PartSold>");
    	 }
    
    	 if( this->chkKeepRemove6->Checked == true )
    	 {
    		 strContent = String::Concat(strContent, 
    			S"<PartSold><PartNumber>", this->txtPartNumber6->Text, S"</PartNumber>",
    				S"<PartName>", this->txtPartName6->Text, S"</PartName>",
    				 S"<UnitPrice>", this->txtUnitPrice6->Text, S"</UnitPrice>",
    				 S"<Qty>", this->txtQuantity6->Text, S"</Qty>",
    			 S"<SubTotal>", this->txtSubTotal6->Text, S"</SubTotal></PartSold>");
    	 }
    
    	 if( File::Exists(strFilename) )
    	 {
    		 // If the file exists already, open it
    		 docXML->Load(strFilename);
    		 // Get a reference to the root element
    		 XmlElement *elmRoot = docXML->DocumentElement;
    		 // Get a reference to the last child of the root
    		 XmlNode *nodLastOrder = elmRoot->LastChild;
    		 // Get the OrderNumber attribute of the last order and increment it by 1
    int NewOrderNumber = nodLastOrder->Attributes->ItemOf[S"OrderNumber"]->InnerText->ToInt32(0) + 1;
    
    		 // Create a new order as an element
    		 XmlElement *elmNewOrder = docXML->CreateElement(S"Order");
    		 // Add its attributes
    		 elmNewOrder->SetAttribute(S"OrderNumber", NewOrderNumber.ToString());
    		 elmNewOrder->SetAttribute(S"TotalOrder", strTotalOrder);
    		 elmNewOrder->InnerXml = strContent;
    		 docXML->DocumentElement->AppendChild(elmNewOrder);
    		 docXML->Save(strFilename);
    	 }
    	 else
    	 {
    		 // If the file doesn't exist, get ready to create it
    strParentOrder = String::Concat(S"<Order OrderNumber=\"1\" TotalOrder=\"", strTotalOrder, S"\">");
    
    		 // If the file doesn't exist, create it
    		 docXML->LoadXml(String::Concat(S"<?xml version=\"1.0\" encoding=\"utf-8\"?>"
    					S"<Orders>",
    					strParentOrder, strContent, S"</Order></Orders>"));
    		 docXML->Save(strFilename);
    	 }
    
    	 // Reset the Order Processing form
    	 this->lvwAvailableParts->Items->Clear();
    	 this->cboCategories->SelectedIndex = -1;
    	 this->cboModels->SelectedIndex     = -1;
    	 this->cboMakes->SelectedIndex      = -1;
    	 this->cboYears->SelectedIndex      = -1;
    	 this->chkKeepRemove1->Checked = false;
    	 this->chkKeepRemove2->Checked = false;
    	 this->chkKeepRemove3->Checked = false;
    	 this->chkKeepRemove4->Checked = false;
    	 this->chkKeepRemove5->Checked = false;
    	 this->chkKeepRemove6->Checked = false;
    	 this->CalculateTotalOrder();
    }
  3. Execute the application
  4. To simulate some sales, create the following orders
     
    First Order - Date Saved: 16 June 1998
    Year Make Model Category Item Name Qty
    1986 Acura Integra LS 1.8L L4 Electrical Alternator 1
    1986 Acura Integra LS 1.8L L4 Fuel/Air Fuel Cap (Regular) 4
    Second Order - Date Saved: 24 August 2000
    1998 Toyota Corolla 1.8L L4 Cooling System Radiator 2
    1998 Jeep Wrangler 2.5L L4 Transfer Case Input Shaft Seal Transfer Case 4
    Third Order - Date Saved: 16 June 1998
    2002 Chevrolet Silverado 2500 5.3L V8 Ignition Spark Plugs 4
    2002 Dodge Dakota 3.9L V6 Electrical Starter Motor 1
    2002 Acura NSX 3.0L V6 Engine Oil Filter 2
    1998 BMW 325I 2.5L L6 Steering Rack and Pinion Bellow Kit 2
    Fourth Order - Date Saved: 24 August 2000
    2000 Ford Escort 2.0L L4 Ignition Crankshaft Position Sensor 2
    2000 Ford Escort 2.0L L4 Brake System Right Caliper Assembly Front 1
    Fifth Order - Date Saved: 21 January 2005
    2004 Dodge Neon SE 2.0L L4 Engine Oil Pump 1
    2004 Dodge Neon SE 2.0L L4 Clutch Clutch Release Bearing 2
    2004 Dodge Neon SE 2.0L L4 Cooling System Radiator Fan Assembly 1
     
    College Park Auto-Parts - Order Processing
  5. Close the forms
  6. Preview the saved orders in your browser
     
  7. Return to your programming environment
 

Previous Copyright © 2004-2016, FunctionX, Inc.