// needed to allow Visual Studio to work with scanf()
#define _CRT_SECURE_NO_WARNINGS

// required to enable use of scanf() and printf()
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

// this is a variable that will be automatically given a value
//		that represents the most recent error's number
extern int errno;

/* Constants that can be used inside any Function */
#define DISCOUNT_MIN_AGE 18
#define DISCOUNT_MAX_AGE 25
#define DISCOUNT_PERCENTAGE 0.20f // this means 20%
#define MAX_SALES 10
#define CSV_FILE "data.csv" // file gets created within the Visual Studio project folder

// the below constants make the code more readable by 
// improving the semantics (they give code more meaning)
#define MENU_OPTION_BUY_CARS 'a'
#define MENU_OPTION_VIEW_SALES 'b' // ditto
#define MENU_OPTION_VIEW_SALES_BETWEEN 'c' // ditto
#define MENU_OPTION_EXIT 'x' // ditto
#define TRUE 1 // ditto
#define FALSE 0 // ditto
// create a new data type called "bool" that can accept unsigned char type values
// min value: 0     max value: 255
#define bool unsigned char

/* Variables that can be used inside any Function created below */
// don't need negative values, so unsigned short is most appropriate
unsigned short carsAvailable = 3;

// this will track how many car sales took place
// this will also be used as the index/position of each sale within the following arrays:
//		carAmountPerSale, typeOfCarPerSale, discountGivenPerSale, customerNames
unsigned short numberOfSales = 0;
// this array will hold the number of cars sold each sale
unsigned short carAmountPerSale[MAX_SALES];
// this array will hold the type of the cars sold each sale; this relates to the car price
unsigned short typeOfCarPerSale[MAX_SALES];
// this array will hold discount information about each sale
bool discountGivenPerSale[MAX_SALES];
// this array will hold the name of the customer for each sale, a maximum of 200 characters per name
char customerNames[MAX_SALES][201];

// this array will hold information about each type of car; 
// the data is synchronised with the data within the carTypes array
float carPrices[] = { 3.5f, 2.5f, 2.0f };
// this array will hold the name of each type of car, for the user's benefit
// the data is synchronised with the data within the carPrices array
char carTypes[][10] = { "NEXON", "HARRIER", "SAFARI" };

// Files Variables & Constants
#define FILE_OPENED 0
#define FILE_CLOSED 1
#define FILE_ERROR 2

// will hold the file stream once opened
FILE* file;
unsigned char fileStatus = FILE_CLOSED;

/* Functions the program will be using */

void clearScreen() {
	// this tells the Command Prompt (i.e. the System's output mechanisn) 
	// to do something to clear the screen/console
	// this is purely for the user's benefit, to keep the screen clear of clutter
	system("cls");
}

void pauseProgram(char userChoice) {
	// give the user a chance to read the previous output, allow them to continue when ready
		// customise the output depending on the user's choice
	if (userChoice == MENU_OPTION_EXIT) {
		printf("\n\nPress Enter to Exit...");
	}
	else {
		printf("\n\nPress Enter to return to the Menu...");
	}

	// two of these getchar() are needed to skip the newline character 
	//		that's likely floating around the console window
	// however, if the userChoice value is an underscore character,
	//		then this is only used when pausing after a file error occurred
	//		so only one getchar() is needed
	if (userChoice != '_') {
		getchar();
	}

	getchar();
}

char getCharFromConsole(char message[201]) {
	char userInput;
	// prompt user using the value of the given message
	printf(message);
	// capture the character
	scanf("\n%c", &userInput);
	// return the captured value
	return userInput;
}

unsigned short getUnsignedShortFromConsole(char message[201]) {
	// will be used to store the captured number
	unsigned short userInput;

	// prompt user using the value of the given message
	printf(message);
	scanf("%hd", &userInput);

	// finally, return/export the value so it can be used by whatever statement called this Function
	return userInput;
}

// *str will allow this function to establish a connection between this str variable
// and the one that will exist at the time/place where the function is executed, thus any direct
// modification of *str in here will actually also modify the existing string variable, 
// as they will both be pointing to the same address in memory
void getStringFromConsole(char message[201], char* str) {
	// prompt user
	printf(message);
	// as we're now working with the pointer str, we don't need & here
	scanf("\n%[^\n]s", str);
}

void swapUnsignedShort(unsigned short* a, unsigned short* b) {
	unsigned short temp;
	// copy the value found at the pointer a's address into the newly created temp variable
	temp = *a;
	// copy the value found at the pointer a's address into the address represented by the pointer b
	*a = *b;
	// copy the value of the temp variable to the pointer b's address
	*b = temp;
}

void swapBool(bool* a, bool* b) {
	bool temp;
	// copy the value found at the pointer a's address into the newly created temp variable
	temp = *a;
	// copy the value found at the pointer a's address into the address represented by the pointer b
	*a = *b;
	// copy the value of the temp variable to the pointer b's address
	*b = temp;
}

/* START FILES FUNCTIONS */

// returns something that is not NULL if successful
FILE* createFile(char fileName[201]) {
	// open the file for writing
	file = fopen(fileName, "w");
	// then close it immediately if successful
	if (file != NULL) {
		fclose(file);
	}
	// return the pointer so that the success may be checked
	return file;
}

// mode is one of: "w" for writing, "r" for reading, "a" for appending 
// appending means writing starting from the end of the file, will not touch existing contents
// there are also other modes available, I encourage you to look these up
void openFile(char fileName[201], char mode[4]) {
	// attempt to open the file
	file = fopen(fileName, mode);

	// if file's value is NULL, then something happened...
	if (file == NULL) {

		// attempt to create it first and then check if it's still NULL, meaning
		//		that something still failed
		if (createFile(fileName) == NULL) {
			fileStatus = FILE_ERROR;

			// will produce the output: Error opening D:\data.csv: No such file of directory
			printf("Error opening %s: %s", fileName, strerror(errno));
		}
		else {
			// we managed to create the file ... so now ...
			// execute this function again with the same parameters
			//		because it should now succeed
			openFile(fileName, mode);
		}

	}
	// otherwise, all OK
	else {
		fileStatus = FILE_OPENED;
	}
}

// should be called once the operations on 
//		the currently opened file have concluded
void closeFile() {
	// only attempt to close the file if it's already open
	if (fileStatus == FILE_OPENED) {
		fclose(file);
		fileStatus = FILE_CLOSED;
	}
}

// will return an array of strings representing the 
//		customer names stored in the file
void readDataFromFile() {
	// will keep track of how many lines were read from the file
	int lineCounter = 0;

	// this is an infinite loop, we'll manually stop it once we reach the end of the file 
	while (1) {

		unsigned short carAmountPerSaleValue = 0, typeOfCarPerSaleValue = 0, discountGivenPerSaleValue = 0;
		char customerNameValue[201] = "";

		int scanResult = fscanf(
			file, // the file stream
			"%hd,%hd,%hd,%[^\n]s", // the format of the line
			&carAmountPerSaleValue, // the variables, one for each placeholder in the format above
			&typeOfCarPerSaleValue,
			&discountGivenPerSaleValue,
			&customerNameValue
		);

		// if we reached the end of the file
		if (scanResult == EOF) {
			// then, stop the loop
			break;
		}

		// add the bits of data that were read above into the correct arrays
		carAmountPerSale[lineCounter] = carAmountPerSaleValue;
		typeOfCarPerSale[lineCounter] = typeOfCarPerSaleValue;
		// also cast (convert) the discountGivenPerSaleValue from unsigned short to a bool type
		//		before putting it in the discountGivenPerSale array
		discountGivenPerSale[lineCounter] = (bool)discountGivenPerSaleValue;
		// need to use strcpy here because we're working with strings
		strcpy(customerNames[lineCounter], customerNameValue);

		// increment the lineCounter, ready for next line that might be read
		lineCounter++;
	}

	// make sure the numberOfSales variable is also aware of how many sales are available after the above operation
	numberOfSales = lineCounter;
}

void getDataFromFile() {
	openFile(CSV_FILE, "r");

	if (fileStatus == FILE_OPENED) {
		readDataFromFile();
	}
	else if (fileStatus == FILE_ERROR) {
		printf("There was an error trying to read from the file %s.", CSV_FILE);
		// this function requires a char value, so we give it one 
		//		that'll tell it we're using it because of a file error
		//			see the function body, it's been updated to check for
		//			this underscore character
		pauseProgram('_');
	}

	closeFile();
}

void writeDataToFile() {
	// loop through every sale
	for (int i = 0; i < numberOfSales; i++) {

		// this string will be built up bit by bit before being written to the opened file
		char line[201];
		// this string will contain the converted int value
		char data[50];

		// convert the unsigned short value into a string, put it in the data string variable; 
		//		the "10" refers to base 10, which is what regular numeric values are written in
		//		e.g. saying you're 22 years old means that 22, in this case, is written in base 10
		//			because that's how we people use numbers by default
		// also cast the unsigned short value into an int type before converting
		_itoa((int)carAmountPerSale[i], data, 3);
		// add the amount of cars to the line; first time we use strcpy, 
		//		then strcat to add more to the string
		strcpy(line, data);
		// add a comma to separate this value from the next on this line
		strcat(line, ",");

		// convert the value into a string
		_itoa((int)typeOfCarPerSale[i], data, 3);
		// add the type of car to the line
		strcat(line, data);
		// add a comma to separate this value from the next on this line
		strcat(line, ",");

		// convert the value into a string
		_itoa((int)discountGivenPerSale[i], data, 3);
		// add the discount given to the line
		strcat(line, data);
		// add a comma to separate this value from the next on this line
		strcat(line, ",");

		// add the customer name to the line
		strcat(line, customerNames[i]);

		// write line to file
		fprintf(file, line);

		// only add a newline character if we're not yet writing the very last
		//		line in the file
		if (i < numberOfSales - 1) {
			fprintf(file, "\n");
		}
	}
}

void saveDataToFile() {
	openFile(CSV_FILE, "w");

	if (fileStatus == FILE_OPENED) {
		writeDataToFile();
	}
	else if (fileStatus == FILE_ERROR) {
		printf("There was an error trying to write to the file %s.", CSV_FILE);
		// this function requires a char value, so we give it one 
		//		that'll tell it we're using it because of a file error
		//			see the function body, it's been updated to check for
		//			this underscore character
		pauseProgram('_');
	}

	closeFile();
}

/* END FILES FUNCTIONS */

void menu_greetCustomer() {
	// greet the user
	printf("Welcome to the Hyundai Car Sales office!\n\n");
}

void menu_showMenu() {
	// present the various actions the user can choose from
	printf("Menu:\n");
	printf("%c. Buy Cars\n", MENU_OPTION_BUY_CARS);
	printf("%c. View Sales Stats\n", MENU_OPTION_VIEW_SALES);
	printf("%c. A subset of Sales Stats\n", MENU_OPTION_VIEW_SALES_BETWEEN);
	printf("%c. Exit\n\n", MENU_OPTION_EXIT);
}

void menu_showCarTypes() {
	// calculate the number of car types by asking the carPrices
	// array about how many bytes it holds in memory and dividing that
	// result by the number of bytes a float data type holds in memory
	// the division result will be the number of car types (3 in this case)
	int numberOfCars = sizeof(carPrices) / sizeof(float);

	// show the user the types of cars
	printf("\nCar Types:\n");

	for (int i = 0; i < numberOfCars; i++) {
		printf("%d - %s\n", i, carTypes[i]);
	}
}

float menu_applyDiscount(float currentPrice) {
	// multiply the price value by the discount percentage
	// this is: 1 - DISCOUNT_PERCENTAGE (0.20) => 0.80 (or, 80%)
	// so, we calculate the discounted value by reducing it to 80% of its value
	return currentPrice * (1 - DISCOUNT_PERCENTAGE);
}

bool menu_checkIfDiscountIsNeeded(unsigned short userAge) {
	// check if we need to give a discount
	if (userAge >= DISCOUNT_MIN_AGE && userAge <= DISCOUNT_MAX_AGE) {
		// return the TRUE value to indicate that discount is to be given
		return TRUE;
	}
	else {
		// check if they have an NUS card, then we can also apply the discount
		char nusCardResponse = getCharFromConsole("\nDo you have an NUS card ? Answer 'y' or 'n' : ");

		if (nusCardResponse == 'y') {
			// return the TRUE value to indicate that discount is to be given
			return TRUE;
		}
	}

	// return the FALSE value to indicate that no discount is to be given
	return FALSE;
}

void menu_printDiscountOutcome(bool giveDiscount) {
	// inform the user about the discount outcome
	// always a good idea to separate the calculation from the output messages, makes it easier to work with the code
	switch (giveDiscount) {
		// a discount was applied
		// please note that no curly brackets { } are needed
	case TRUE:
		printf("\nYou get a discount!");
		break;
		// no discount was applied
	case FALSE:
		printf("\nNo discount given.");
		break;
	}
}

void menu_buyCars() {
	printf("Buy Cars:\n\n");

	// check if we have at least 1 car available
	if (carsAvailable > 0) {
		printf("There are %hd cars available.\n\n", carsAvailable);
	}
	else {
		printf("Sorry, there are no more cars available.");
		// this allows us to terminate/stop the Function early
		return;
	}

	/* Variables - these are only used inside menu_buyCars() Function and nowhere else */
	// don't need negative values; these are generally related to one sale, used when purchasing cars
	unsigned short carsNeeded = 0, userAge = 0, carType;
	bool giveDiscount = FALSE;
	float totalPrice = 0;

	// get the "getStringFromConsole()" Function to directly store the customer's name 
	// into the "customerNames" array at position "numberOfSales"
	//		=> we need the & operator to get the address of that array's position sent to the Function
	//			so that it can directly put the value at that address in memory
	getStringFromConsole("What is your name? Name: ", &customerNames[numberOfSales]);

	carsNeeded = getUnsignedShortFromConsole("How many cars do you need? Amount: ");

	// check if we have enough cars
	// no "else" needed here
	if (carsAvailable < carsNeeded) {
		printf("Sorry, there are fewer cars remaining than you require.");
		// we will terminate the Function here
		return;
	}

	// also record the number of cars needed in the carAmountPerSale array
	carAmountPerSale[numberOfSales] = carsNeeded;

	// now, we'll determine what type of car the user wants; this will influence the price
	menu_showCarTypes();

	// get the value representing the car type from the user
	carType = getUnsignedShortFromConsole("\nWhat type of car do you need? Choose from above: ");

	// also record the type of these cars in the typeOfCarPerSale array
	typeOfCarPerSale[numberOfSales] = carType;

	// calculate total price for this sale by using the correct car type's price
	totalPrice = carsNeeded * carPrices[carType];

	// update number of cars available by subtracting from it the amount of cars needed
	carsAvailable -= carsNeeded;

	// ask for the user's age
	userAge = getUnsignedShortFromConsole("How old are you? Age: ");

	// calculate the value of giveDiscount by making use of this Function and the user's age
	giveDiscount = menu_checkIfDiscountIsNeeded(userAge);

	// actually apply the discount if needed
	if (giveDiscount == TRUE) {
		totalPrice = menu_applyDiscount(totalPrice);
	}

	// also record the outcome in the discountGivenPerSale array
	discountGivenPerSale[numberOfSales] = giveDiscount;

	// inform the user about the discount outcome
	menu_printDiscountOutcome(giveDiscount);

	// present the outcome
	printf("\n\nThank you.\n");
	printf("You have bought %hd cars.\n", carsNeeded);
	printf("Total cost is %f GBP.\n", totalPrice);
	printf("\nThere are %hd cars remaining.", carsAvailable);

	// finally, add 1 to the numberOfSales counter
	numberOfSales++;
}

void sortArraysByNumberOfCarsSoldPerSale() {

	// set up a loop that gives us an index "i" for accessing 
	//		between the (first) and (second to last) positions that contain values
	for (int i = 0; i < numberOfSales - 1; i++) {

		// set up a loop the gives us an index "j" for accessing 
		//		between the (first immediately after i) and (last) positions that contain values
		// this loop will execute fully, from start to finish, 
		//		every time the above for loop begins a new iteration
		for (int j = i + 1; j < numberOfSales; j++) {

			// check if the value at position i is greater than the value at position j
			if (carAmountPerSale[i] > carAmountPerSale[j]) {

				// if so, swap those two values in the carAmountPerSale array
				swapUnsignedShort(&carAmountPerSale[i], &carAmountPerSale[j]);

				// also swap the two values at those same positions in the typeOfCarPerSale array
				swapUnsignedShort(&typeOfCarPerSale[i], &typeOfCarPerSale[j]);

				// and in the discountGivenPerSale array
				swapBool(&discountGivenPerSale[i], &discountGivenPerSale[j]);

				// and lastly, do the same in the customerNames array

				// using a function to perform this swap would complicate this program a bit too much, but we 
				//		can do the swap directly here quite easily
				char temp[201];
				// copy string from position i to the newly created temp variable
				strcpy(temp, customerNames[i]);
				// copy string from position j into position i
				strcpy(customerNames[i], customerNames[j]);
				// copy string from temp into position j
				strcpy(customerNames[j], temp);

			} // end of "if" statement

		} // end of second "for" loop

	} // end of first "for" loop

}

// specialised function that will display a row representing the sales data at a given array position
void printSalesDataAtPosition(int position) {

	// here, we're using the value found at position i in the typeOfCarPerSale array
	//	as a position for the carPrices array to find out the price of the type of car
	//	the customer purchased this sale
	int typeOfCar = typeOfCarPerSale[position];
	// calculate the current sale's price
	float price = carAmountPerSale[position] * carPrices[typeOfCar];

	// calculate the display text for the discount; this is for the user's benefit
	char discountGivenText[4];
	// if a discount was given, then...
	if (discountGivenPerSale[position] == TRUE) {
		// set the display text to Yes
		strcpy(discountGivenText, "Yes");
		// and also modify the price
		price *= (1 - DISCOUNT_PERCENTAGE);
	}
	else {
		// set the display text to No
		strcpy(discountGivenText, "No");
	}

	// show the user the information related to each sale
	// I've broken down the "printf()" statement into several lines, so we
	//	can read it more easily, but it's still just one statement
	printf("Sale Index: %d | Sale Amount: %f | Type of Car: %s | "
		"Car Price: %f | Number of Cars: %hd | "
		"Discount Given: %s | Customer Name: %s\n",
		// please note that the above are three separate strings that will be glued together by the program
		position, price, carTypes[typeOfCar],
		carPrices[typeOfCar], carAmountPerSale[position],
		discountGivenText, customerNames[position]);

}

void menu_viewSales() {
	// sort the arrays before showing the sales data
	sortArraysByNumberOfCarsSoldPerSale();

	/* Variables - these are only used inside menu_viewSales() Function and nowhere else */
	// these two will contain the sum the total sales price and total number of cars sold for all sales
	float totalSalesValue = 0;
	unsigned int carsSold = 0;

	printf("All Sales Data:\n\n");

	// set up a for loop that will execute the block of code as many times as
	// indicated by the numberOfSales variable's value
	for (int i = 0; i < numberOfSales; i++) {

		// here, we're using the value found at position i in the typeOfCarPerSale array
		//	as a position for the carPrices array to find out the price of the type of car
		//	the customer purchased this sale
		int typeOfCar = typeOfCarPerSale[i];
		// calculate the current sale's price
		float price = carAmountPerSale[i] * carPrices[typeOfCar];

		// use this function to print the row of sales data at position i
		printSalesDataAtPosition(i);

		// also add up the total sales value and total number of cars sold
		totalSalesValue += price;
		carsSold += carAmountPerSale[i];

	}

	// also display some overall statistics
	printf("\n%hd cars have been sold with a total value of %f GBP. There are %hd cars unsold.\n",
		carsSold, totalSalesValue, carsAvailable);
}

void printSalesDataBasedOnCarsSoldBetweenMinMax(unsigned short min, unsigned short max) {

	printf("Sales Data containing between %hd and %hd cars sold:\n\n", min, max);

	// searching through an array just means that you'll have a look that has an index
	//	variable starting with 0 and ending with the last position that contains a value
	//	in the array and then you'll have an if statement that check every value
	//		if a value is found to match a certain condition, it means that we found
	//		what we're looking for, so the code inside the {} will be executed as a response
	//		to us finding that value in the array

	// go through every position that will contain a value in our carAmountPerSale array
	for (int i = 0; i < numberOfSales; i++) {

		// for every one of those positions, check if the value is between min and max
		if (min <= carAmountPerSale[i] && carAmountPerSale[i] <= max) {

			// print the sales data row at this position
			printSalesDataAtPosition(i);

		}

	}

}

void menu_viewSalesBetween() {

	// sort the arrays before showing the sales data
	sortArraysByNumberOfCarsSoldPerSale();

	/* Variables - these are only used inside menu_viewSalesBetween() Function and nowhere else */
	unsigned short minCarsSold = getUnsignedShortFromConsole("What's the minimum number of cars sold you're interested in? Number = ");
	unsigned short maxCarsSold = getUnsignedShortFromConsole("What's the maximum number of cars sold you're interested in? Number = ");

	printSalesDataBasedOnCarsSoldBetweenMinMax(minCarsSold, maxCarsSold);
}

void menu_exit() {
	printf("Thank you for using this Car Sales program. Bye-bye!");

	// ensure no data is lost, save it to the file
	saveDataToFile();
}

/* Starting Point of our Program */
void main() {

	// see if there's any data in the file
	getDataFromFile();

	/* Variables - these are only used inside main() Function and nowhere else */
	// this will hold the user's choice when presented with the menu
	char userChoice;

	/* The rest of our Program */

	// loop/repeat the code between the immediately following curly brackets
	// for as long as the CONDITION found between the while()'s brackets 
	// (see towards the end of void main() { ... }) evaluates to TRUE; in our case, 
	// we'll keep repeating for as long as the user does not choose to Exit 
	// i.e. pushes 'x' when asked to choose their next action
	do {
		clearScreen();

		menu_greetCustomer();
		menu_showMenu();

		// the return value supplied by the Function once it finishes will be stored in userChoice
		userChoice = getCharFromConsole("Please choose one: ");

		// for the user's benefit...
		clearScreen();

		// next, we check the user's choice and make a decision based on that
		switch (userChoice) {
		case MENU_OPTION_BUY_CARS:
			menu_buyCars();
			break;

		case MENU_OPTION_VIEW_SALES:
			menu_viewSales();
			break;

		case MENU_OPTION_VIEW_SALES_BETWEEN:
			menu_viewSalesBetween();
			break;

		case MENU_OPTION_EXIT:
			menu_exit();
			break;
		}

		// give the user a chance to read the previous output, allow them to continue when ready
		// this does not naturally exist in C
		pauseProgram(userChoice);

	} while (userChoice != MENU_OPTION_EXIT);

	// again, keep the screen clear
	clearScreen();

	// a good sentence almost never fails to warm the heart...
	printf("\n\nHave a good day!\n\n");
 

Visual basic (VB.net) Online Compiler

Write, Run & Share VB.net code online using OneCompiler's VB.net online compiler for free. It's one of the robust, feature-rich online compilers for VB.net language, running on the latest version 16. Getting started with the OneCompiler's VB.net compiler is simple and pretty fast. The editor shows sample boilerplate code when you choose language as VB.net. OneCompiler also has reference programs, where you can look for the sample code to get started with.

Read input from STDIN in VB.net

OneCompiler's VB.net online editor supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample VB.net program which takes name as input and prints hello message with your name.

Public Module Program
	Public Sub Main(args() As string)
	 Dim name as String = Console.ReadLine()    ' Reading input from STDIN
   Console.WriteLine("Hello " & name)           ' Writing output to STDOUT
	End Sub
End Module

About VB.net

Visual Basic is a event driven programming language by Microsoft, first released in the year 1991.

Key Features

  • Beginner's friendly language.
  • Simple and object oriented programming language.
  • User friendly language and easy to develop GUI based applications.

Syntax help

Variables

Variable is a name given to the storage area in order to identify them in our programs.

Simple syntax of Variable declaration is as follows

Dim variableName [ As [ New ] dataType ] [ = initializer ]

Variable initialization

variableName = value

Conditional Statements

1. If

If condition-expression Then 
    'code
End If

2. If-else

If(conditional-expression)Then
   'code if the conditional-expression is true 
Else
  'code if the conditional-expression is false 
End If

3. If-else-if ladder

If(conditional-expression)Then
   'code if the above conditional-expression is true 
Else If(conditional-expression) Then
        'code if the above conditional-expression is true 
    Else
        'code if the above conditional-expression is false 
End If

4. Nested-If

If(conditional-expression)Then
   'code if the above conditional-expression is true
   If(conditional-expression)Then
         'code if the above conditional-expression is true 
   End If
End If

5. Select Case

Select [ Case ] expression
   [ Case expressionlist
      'code ]
   [ Case Else
      'code ]
End Select

Loops

1. For..Next

For counter [ As datatype ] = begin To end [ Step step ]
   'code
   [ Continue For ]
   'code
   [ Exit For ]
   'code
Next [ counter ]

2. For..Each

For Each element [ As datatype ] In group
   'code
   [ Continue For ]
   'code
   [ Exit For ]
   'code
Next [ element ]

3. While

While conditional-expression
   'Code 
   [ Continue While ]
   'Code
   [ Exit While ]
   'Code
End While

4. Do-while

Do { While | Until } conditional-expression
   'Code
   [ Continue Do ]
   'Code
   [ Exit Do ]
   'Code
Loop
Do
   'Code
   [ Continue Do ]
   'Code
   [ Exit Do ]
   'Code
Loop { While | Until } conditional-expression

Procedures

Procedure is a sub-routine which contains set of statements. Usually Procedures are written when multiple calls are required to same set of statements which increases re-usuability and modularity.

Procedures are of two types.

1. Functions

Functions return a value when they are called.

[accessModifiers] Function functionName [(parameterList)] As returnType
   'code
End Function

2. Sub-Procedures

Sub-procedures are similar to functions but they don't return any value.

Sub ProcedureName (parameterList)
'Code
End Sub