Eind voorbeeld
In dit eind voorbeeld zal ik alles wat in deze tutorial even herhalen om te laten zien hoe het ‘praktisch’ kan worden gebruikt. Voor het gemak maak ik alle functies even static, met klassen en instances leren werken komt in een latere tutorial terug.
Het idee is dat een klant een kleine rekenmachine wilt voor zijn appels magazijn. Die wilt een menu er in waarbij hij of zij kan kiezen tussen het berekenen van:
- Aantal appels in de x kisten
- Gewicht appels in de x kisten
- Aantal kisten voor x appels
- Aantal kisten voor x kg gewicht
Als de gebruiker een keuze heeft uitgevoerd, moet het menu weer terugkomen, totdat er een afsluit commando wordt gegeven.
Als we gaan kijken wat hier voor nodig hebben komen veel dingen vaak voor. Dat is het inlezen van een getal, het weergeven van een menu keuze, en het uitvoeren van die keuze. Het is dus al mogelijk om nu te verzinnen dat we een functie LeesGetal nodig hebben, WeergeefMenu en KeuzeUitvoeren.
Een voorbeeld hoe dit zou kunnen worden gemaakt vind je hier onder. In de volgende les over C# zal ik ingaan op het maken van een simpel Windows programma. Heb je nog vragen over deze tutorial of kom je er niet uit? Stel ze op het Programmeren forum!
Voorbeeld:
1 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Csharp_les1 { class Program { static void Main( string[] args ) { int keuze = 1; // Blijven uitvoeren totdat afsluiten worden gekozen. Dat is namelijk keuze 0. while ( keuze != 0 ) { // Maakt het console scherm leeg. Console.Clear( ); // Het menu weergeven. // Deze functie geeft een integer terug, met de opgegeven menu keuze keuze = WeergeefMenu( ); // De keuze uitvoeren die zojuist gekozen is KeuzeUitvoeren( keuze ); // Indien het programma niet afgesloten wordt; mag er nog een keer worden geprobeerd. if ( keuze != 0 ) Console.WriteLine( "Druk op enter om nog een keer te proberen" ); // Wacht op enter totdat het resultaat wordt gewist! Console.ReadLine( ); } } static public void KeuzeUitvoeren( int keuze ) { // Variabele voor definieren zodat ze niet dubbel voorkomen. int Kisten; int Appels; int AppelsPerKist; double Gewicht; switch ( keuze ) { case 0: Console.WriteLine( "Druk op ENTER om het program af te sluiten" ); break; // Aantal appels in x kisten case 1: // Aantal kisten inlezen Console.WriteLine( "Hoeveel kisten zijn er?" ); Kisten = LeesGetal( ); // Aantal appels per kist inlezen Console.WriteLine( "Hoeveel appels zitten er per kist in?" ); AppelsPerKist = LeesGetal( ); // Binnen de grenzen of niet? if ( IsBinnenGrenzen( AppelsPerKist, 500, 1500 ) ) { // Berekenen en weergeven Appels = AppelsPerKist * Kisten; Console.WriteLine( "U heeft " + Appels + " appels" ); } else { Console.WriteLine( "Het aantal appels moet tussen de 500 en 1500 liggen!" ); } break; // Gewicht appels in x kisten case 2: // Aantal kisten inlezen Console.WriteLine( "Hoeveel kisten zijn er?" ); Kisten = LeesGetal( ); // Aantal appels per kist inlezen Console.WriteLine( "Hoeveel appels zitten er per kist in?" ); AppelsPerKist = LeesGetal( ); // Binnen de grenzen of niet? if ( IsBinnenGrenzen( AppelsPerKist, 500, 1500 ) ) { // Berekenen en weergeven Appels = AppelsPerKist * Kisten; Gewicht = Appels * 0.1; Console.WriteLine( "U heeft " + Appels + " appels" ); Console.WriteLine( "Dat weegt " + Gewicht + "kg" ); } else { Console.WriteLine( "Het aantal appels moet tussen de 500 en 1500 liggen!" ); } break; // Aantal kisten voor x appels case 3: // Aantal appels inlezen Console.WriteLine( "Hoeveel appels heeft u?" ); Appels = LeesGetal( ); // Aantal appels per kist inlezen Console.WriteLine( "Hoeveel appels zitten er per kist in?" ); AppelsPerKist = LeesGetal( ); // Binnen de grenzen of niet? if ( IsBinnenGrenzen( AppelsPerKist, 500, 1500 ) ) { // Berekenen en weergeven // Enkel doubles kunnen worden afgerond, dus we 'casten' Appels naar een double. Vervolgens ronden we die omhoog af met Math.Ceiling(), die we vervolgens naar een normale Int32 weer terug laten zetten. Kisten = Convert.ToInt32( Math.Ceiling( (double) Appels / AppelsPerKist ) ); Console.WriteLine( "U heeft " + Kisten + " kisten nodig!" ); } else { Console.WriteLine( "Het aantal appels moet tussen de 500 en 1500 liggen!" ); } break; // Aantal kisten voor x kg gewicht case 4: // Aantal appels inlezen Console.WriteLine( "Hoeveel hele kg appels heeft u?" ); Gewicht = LeesGetal( ); // Aantal appels per kist inlezen Console.WriteLine( "Hoeveel appels zitten er per kist in?" ); AppelsPerKist = LeesGetal( ); // Binnen de grenzen of niet? if ( IsBinnenGrenzen( AppelsPerKist, 500, 1500 ) ) { // Berekenen en weergeven Appels = Convert.ToInt32( 10 * Gewicht ); Kisten = Convert.ToInt32( Math.Ceiling( (double) Appels / AppelsPerKist ) ); Console.WriteLine( "U heeft " + Kisten + " kisten nodig!" ); } else { Console.WriteLine( "Het aantal appels moet tussen de 500 en 1500 liggen!" ); } break; // geen van de andere cases komen overeen, deze keuze bestaat dus niet! default: Console.WriteLine( "Die keuze ken ik niet!" ); break; } } static public int WeergeefMenu( ) { Console.WriteLine( "Geef je keuze op:" ); Console.WriteLine( "0: Afsluiten" ); Console.WriteLine( "1: Aantal appels in x kisten" ); Console.WriteLine( "2: Gewicht appels in x kisten" ); Console.WriteLine( "3: Aantal kisten voor x appels" ); Console.WriteLine( "4: Aantal kisten voor x kg gewicht" ); int keuze = LeesGetal( ); return keuze; } static public int LeesGetal( ) { int getal; // Vraag de gebruiker om 1 invoer. string invoer = Console.ReadLine( ); // Zet het getal veilig om. if ( Int32.TryParse( invoer, out getal ) ) { return getal; } else { return 0; } } static public bool IsBinnenGrenzen( int getal, int grens_laag, int grens_hoog ) { // Getal groter dan de hoogste grens? if ( getal > grens_hoog ) return false; // Getal groter dan de laagste grens else if ( getal < grens_laag ) return false; else return true; } } } |