More to the point, most folks use indentation to further delimit logical blocks of code in addition to using {}. When your formatting is all over the place like yours is, it is doubly hard for folks trying to help find your answers for you to actually do so.
Code clarity can be not just important to folks trying to understand your code but also for you to help spot logical errors (by comparison, syntax errors are a breeze; finding errors in logic can be really hard if you didn't write the code yourself and have the insight of the 'intent' of the code.
One other thing that probably would not fix anything but will almost certainly help with debugging other issues is not to embed one switch statement inside another like that. Not saying you cannot but if you took the 'inner' switch and put it into its own function which just returned the results.
Exporting that switch to another function, fixing the non-standard escape chars (notes above), fixing the stray 'endl;'s (its not a function and cannot be called. Plus you are doing \n in the string and then endl right after it...did you mean to do that?), fixed the platform-specific call to getch() (now compiles on both Windows and Linux) and cleaned up most of the indentation, the code now looks like:
Code:
#ifdef WIN32
#include <conio.h>
#else
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
int getch( )
{
struct termios oldt,
newt;
int ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}
//--------------------------------------------------------------------------------
#endif
#include <iostream> //the usual headers are used including string
#include <string>
using namespace std;
void WeeklySales(); //these are functions i created
void processAnswer( char cAnswer, double &total_sales, double &vat, double &sales, double &quantity, double &sales_amount)
{
switch (cAnswer)
{
case 'n': //<---if 'n' is entered the text is ouputted
cout << "\n\n\nThank You!\n\n";
break; //<----break takes it out of the switch
case 'y': //<---if 'y' then program is run below
cout << "\n\nTOTAL SALES = sales amount * quantity\n" << endl;
cout << "\nEnter the sales amount\n";
cin >> sales_amount;
cout << "\nEnter the quantity\n" ;
cin >> quantity ;
sales = (sales_amount * quantity);
cout << "\n" << sales_amount << " * " << quantity << " = " << sales << "\n";
cout << "\n" << "Sales is: \t" << sales << "\n";
vat = 0.175*sales;
total_sales = (sales + vat);
cout << "VAT is :\t " << vat << "\nTOTAL SALES inc VAT is: \t" << total_sales << "\n";
if (total_sales<=25)
cout << " and No commission";
else if (total_sales<=50)
cout << "\n5% commission of total sales is " << 0.05 * total_sales << "\n\n\n";
else if (total_sales<=75)
cout << "\n10% commission of total sales is " << 0.10 * total_sales << "\n\n\n";
else if (total_sales>75)
cout << "\n20% commission of total sales is " << 0.20 * total_sales << "\n\n\n";
} //<-------end of the switch statement within the switch statement (nested)
}
main()
{
int number; // declare variables
char answer;
double sales, sales_amount, quantity, total_sales, vat, commission;
sales = (sales_amount * quantity); //initialise variables
total_sales = (sales + vat);
do //start of a do-while loop
{
//output displays the menu
cout << "\n\n******Sales System******";
cout << ("\n\n");
cout << "1. Display Company Logo.\n" << endl;
cout << "2. Input/Validate weekly sales data.\n" << endl;
cout << "3. Calculate weekly sales.\n" << endl;
cout << "4. Display reciept.\n" << endl;
cout << "5. SHUT DOWN & LOG OFF.\n" << endl;
cout << "\nEnter a number...\n" << endl;
cin >> number; //input
cout << ("\n\n");
switch (number) //<--the expression is a variable (number) & controls
//the switch the value of (number) is tested against a list of
//constants. When a match is found, the statement sequence
//assosciated with that match is executed.
{
case 1: //<----- const = 1
//displays the company logo
cout << "\n\tUU\tUU \tEEEEEEEE \tLL\t\t SSSSSSS\n\tUU\tU";
cout << "U \tEE \t\tLL\t\tS\n\tUU\tUU \tEE \t\tLL\t\tS\n\t";
cout << "UU\tUU \tEEEEEEE \t LL\t\t SSSSSS\n\tUU\tUU \tEE";
cout << " \t\tLL\t\t S\n\tUU\tUU \tEE \t \t LL ";
cout << "\t\t S \n\t UUUUUUUU *\tEEEEEEEE *\tLLLLL";
cout << "LL *\tSSSSSSS *\n\n\n\n\n";
//the break statement causes program flow to exit from the entire switch statement
break;
case 2: //<------const = 2. if match found, executes,
//then calls the weeklysales function below
cout << ("\nWeekly sales data\n ----------------- ");
WeeklySales(); //<------------- function call here
break;
case 3:
cout << ("\nCalculate weekly sales \n\n");
cout << "\n\nWould you like to calculate the weekly sales ? y/n\n";
cin >> answer;
//a switch in another function
processAnswer( answer,total_sales,vat, sales, quantity, sales);
break;
case 4: //displaying the invoice
cout << ("\nDisplay receipt \n\n");
cout << "\nUELS INVOICE\n";
cout << "------------\n\n";
cout << "Sales Amount : " << sales_amount << "\n";
cout << "Quantity : " << quantity << "\n";
cout << "Sales : " << sales << "\n";
cout << "VAT : " << vat << "\n";
cout << "Total Sales : " << total_sales << "\n";
cout << "Commission : " << commission << "\n"; //<------------------i couldn't figure out how to calculate the commission
cout << "\n\n\n\n\n";
break;
case 5:
cout << ("\nGoodbye, and thank you for using U.E.L.S. \n\n");
break;
//default statement sequence is executed if no matches are found
default:
cout << ("Enter a number from 1-5 only!\n\n\n\n\n\n");
}
}
while (number !=5); //program will NOT stop looping till 5 is entered
getch();
}
void WeeklySales() //<--------weekly sales function not part of main() function
{
//when function is completed, goes back to case 3:
//declare variables
int sales_code, bikeprice, model_code, quantity;
string date;
char answer; //either yes or no
cout << "\n\nWould you like to input weekly sales data ? \n";
cin >> answer;
switch (answer)
{
case 'n': //
cout << "\n\n\nThank You!\n\n";
break;
case 'y':
do
//the instructions to enter the i.d. code will be repeated (do...while
//loop) as long as the sales_code is less than 1 or greater than 20.
{
cout << "\n\nPlease enter your identifiction code \n";
cin >> sales_code;
//the condition is tested
if (sales_code < 1 || sales_code > 20)
{
cout << ("\nTHIS I.D. CODE IS NOT VALID. TRY AGAIN \n");
}
}
//the instructions to enter the i.d. code will be repeated (do...while
//loop) as long as the salescode is less than 1 or greater than 20.
while (1 > sales_code || sales_code > 20);
//another do...while loop
do
{
cout << "\nPlease enter the bike price (one unit = 1 Euro) \n";
cin >> bikeprice;
if (bikeprice < 1 || bikeprice > 500)
{
cout << ("\nINVALID PRICE. Bike prices cannot be 0 or more than 500. TRY AGAIN \n");
}
}
while (bikeprice < 1 || bikeprice > 500);
//another do...while loop
do
{
cout << "\nPlease enter the 3 digit model code \n";
cin >> model_code;
if (model_code < 0 || model_code > 999)
{
cout << ("\nINVALID MODEL CODE. TRY AGAIN \n");
}
}
while (model_code < 0 || model_code > 999);
//another do...while loop
do
{
cout << ("\nPlease enter the quantity sold \n");
cin >> quantity;
if (quantity < 1 || quantity > 10)
{
cout << ("\nINVALID QUANTITY. TRY A NUMBER FROM 1-10 \n");
}
}
while (quantity < 1 || quantity > 10);
do
{
cout << "\nPlease enter the date in this format dd/mm/yyyy: \n";
cin >> date;
cout << "\nIs this the correct date ?\t" << date << "\tpress y/n: \n\n";
cin >> answer; //gets answer from user
switch (answer)
{
case 'y':
cout << "\n\n\nThank You!\n\n";
break;
}
}
while (answer != 'y');
}
}
Easier to analyze, no?