Hoofdstuk 10.2 Rekenmachinecasus Voorbeeld: Rekenmachine Voorbeeld: Rekenmachine Twee aspecten: User-interface class Calculator : Form Werking class Processor Rekenmachine: User-interface Label TableLayoutPanel Button Calculator ( ) { paneel = new TableLayoutPanel( ); for (int t=0; t<16; t++) { Button knop = new Button(); paneel.Controls.Add( knop ); } this.Controls.Add( paneel ); } Buttons zijn ondergeschikt aan het paneel User-interface Calculator ( ) { paneel = new TableLayoutPanel( ); paneel.Columncount = 4; for (int t=0; t<4; t++) paneel.ColumnStyles.Add( ...25%... ); for (int t=0; t<16; t++) { Button knop = new Button(); knop.Text = "789/456*123+0C=-"[t].ToString(); knop.Dock = DockStyle.Fill; knop.Click += this.klik; knop.KeyPress += this.toets; knop.Resize += this.groei; Buttons zijn paneel.Controls.Add( knop ); ondergeschikt aan } het paneel this.Controls.Add( paneel ); } Opbouw klasse Calculator class Calculator : Form { Label result; TableLayoutPanel paneel; Proc proc; membervariabelen ook nodig in EventHandlers Calculator ( ) result = new Label( ); { result.TextAlign = ContentAlignment.MiddleRight; // en de rest van de Userinterface-opbouw proc = new Processor ( ); } Calculator Event-handlers class Calculator : Form { Label result; Proc proc; void klik (object obj, EA ea) { verwerk( ((Button) object) . Text[0] ); } void toets(object obj, KPEA kpea ) { verwerk( kpea.KeyChar ); } void groei(object obj, EA ea ) { Control c = (Control) obj; int h = c.Height / 2; if (c==result) h = c.Height/3; c.Font = new Font("Tahoma", h); } Calculator Event-handlers class Calculator : Form { Label result; Proc proc; void verwerk (char c) { if (c==‘C’) else if (c==‘=’) else if (c>=‘0’&&c<=‘9’) else result . Text ( } proc.Schoon(); proc.Reken(); proc.Cijfer(c- ‘0’); proc.Operatie(c); proc . Scherm ); Opbouw klasse Proc class Proc { long Scherm; Proc ( ) void Schoon ( ) void Reken ( ) void Cijfer (int n) void Operatie (char c) wat is een Proc? { { { { { this . Schoon(); } ... } ... } wat kan ... } een Proc? ... } Wat is een Proc? waarde op het scherm huidige waarde vorige waarde laatst gebruikte operator er lijkt niets te gebeuren... schermwaarde wordt tienmaal zo groot plus cijfer 3348 372 37 9 Opbouw klasse Proc class Proc { long Scherm; long waarde, vorige; char op; Proc ( ) void Schoon ( ) void Reken ( ) void Cijfer (int n) void Operatie (char c) wat is een Proc? { { { { { this . Schoon(); } ... } ... } wat kan ... } een Proc? ... } Proc’s methode cijfer class Proc { long scherm, waarde, vorige; char op; void Cijfer (int n) { waarde = 10*waarde + n; scherm = waarde; } Proc’s methode reken class Proc { long scherm, waarde, vorige; char op; void Reken ( ) { if (op==‘+’) vorige if (op==‘-’) vorige if (op==‘*’) vorige if (op==‘/’) vorige scherm = vorige; waarde = 0; } += waarde; -= waarde; *= waarde; /= waarde; Proc’s methode operatie class Proc { long scherm, waarde, vorige; char op; void Operatie (char c) { this . reken ( ); op = c; } void Schoon ( ) { waarde = 0; vorige = 0; scherm = 0; op = ‘+’; } Testen van een reeks mogelijke waarden switch (x) { if case 1:(x==1) else if2:(x==2) case else if3:(x==3) case else if4:(x==4) case else if5:(x==5) case else if6:(x==6) case else if7:(x==7) case else default: } this.een(); this.twee(); this.drie(); this.vier(); this.vijf(); this.zes(); this.zeven(); this.meer(); break; break; break; break; break; break; break;