In this post , we observe some code which establishes a menu driven interface and shows we can implement data processing from the menus.
This code will be demonstrated in class tomorrow.
See the code below:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <time.h>
/*
Demonstrates a 2 level menu with
a simple data processing cycle
When faced with the main menu, select 1 then 1 again to
execute the process of calculating area.
Author: Vedesh Kungebeharry
*/
//constants
const double Pi=3.14;
//global static variables
char choice;
//function declarations
void initialization();
void showMainMenu();
void showMathMenu();
void runMainMenu();
void runMathMenu();
void pause();
void exitProgram();
void AreaOfCircleUserInteraction();
double AreaOfCircle(double radius);
//main flow of control from process to process
int main()
{
initialization();
runMainMenu();
exitProgram();
return 0;
}
/*
*initialize all instance variables and arrays here
*
*/
void initialization()
{
choice = '_';
}
//displays the main menu and accepts input
void runMainMenu()
{
int sentinel=0;//used to break out of our menu loop
while (sentinel>=0)//loop menu here
{
showMainMenu();//display menu text
choice = getch();//get a character from the input buffer
system("@cls");// clear screen after getting input
switch (choice)//based on the choice take the desired action
{
case '1': printf("\nYou chose Option 1: Math Calculations\n");
runMathMenu();//displays the math sub menu and accepts input
break;
case '2': printf("\nYou chose option 2\n");
break;
case '3': printf("\nYou chose option 3\n");
break;
case 'q': printf("\nYou chose to quit\n");
sentinel=-1;//update the sentinel so that looping will cease
break;
case 'Q': printf("\nYou chose to quit\n");//cease if upper case
sentinel=-1;
break;
default:
printf("\nYou have entered an option that is not in the menu\n");
break;
}
if(sentinel>=0)//if we have continued regular execution , continue looping
{
printf("\nreturning to main menu in 2 seconds...\n");
pause(2000);
system("@cls");
}
}
}
//shows and accepts input for the math sub menu
void runMathMenu()
{
int sentinel=0;
while (sentinel>=0)
{
showMathMenu();//show options
choice = getch();//get a character from the input buffer
system("@cls");
switch (choice)
{
case '1': printf("\nYou chose option 1: Area\n");
AreaOfCircleUserInteraction();//start interaction to calculate area
break;
case '2': printf("\nYou chose option 2\n");
break;
case 'r': printf("\nYou chose to quit\n");
sentinel=-1;
break;
case 'R': printf("\nYou chose to quit\n");
sentinel=-1;
break;
default:
printf("\nYou have entered an option that is not in the menu\n");
break;
}
printf("\nreturning to Math menu in 2 seconds...\n");
pause(2000);
system("@cls");
}
}
void showMainMenu()
{
printf("1. Option 1: Math Calculations\n");
printf("2. Option 2\n");
printf("3. Option 3\n");
printf("Q. Quit \n");
printf("\nPlease select an option...");
}
void showMathMenu()
{
printf("1. Area of circle\n");
printf("2. Volume of Circle\n");
printf("R. Return to main menu \n");
printf("\nPlease select an option...");
}
//pauses execution
void pause(int milliseconds)
{
clock_t now = clock();
while(clock()< now+milliseconds);
}
//prompt user to enter data and output results
void AreaOfCircleUserInteraction()
{
double area,radius=-999.99;
printf("Enter the radius...");
scanf(" %lf", &radius);
area=AreaOfCircle(radius);
printf("\nThe area of a circle of radius \t%.2lf is \t%.2lf\n\n",radius,area);
system("pause");
}
//helper function to calculate area
double AreaOfCircle(double radius)
{
return Pi*radius*radius;
}
//exit gracefully
void exitProgram()
{
printf("\nExiting program in 2 seconds...\n");
pause(2000);
}
© 2019 Vedesh Kungebeharry. All rights reserved.
[…] In this post, we build on the menu system shown here:Mini Internal Assessment Example […]
LikeLike
Protip: If you want to build a full-fledged menu-driven interface complete with drop-down menus, you can use the ncurses library.
LikeLike