![]() |
Warteschlange einer arztpraxis
Hallo,
Ich soll im Rahmen einer Schulaufgabe eine Warteschlange für eine Arztpraxis erstellen. Hierbei sollen Personen, die ich mit Hilfe einer INI-Datei zufällig hinzufüge, auf 4 Wartezimmer aufgeteilt werden und zwar max. 5 Stück pro Wartezimmer (der letzte Patient eines Wartezimmers wird mit Hilfer eines Timers alle 5 Sekunden entfernt). Dieses Problem habe ich auch soweit lösen können, allerdings möchte ich das Programm noch etwas erweitern bzw. umstellen. Ich würde es gern so regeln, daß Patienten eine zufällige Abarbeitungszeit zugewiesen bekommen und keinen festen Wert von 5 Sekunden und eventuell noch eine Anzeige über den der Status ersichtlich ist. Leider stehe ich im Moment etwas auf dem Schlauch und komme nicht wirklich weiter, daher würde ich mich über eine Hilfestellung freuen. Schon jetzt VIELEN DANK für eure Hilfe! Hier noch der Code:
Delphi-Quellcode:
var
Form1: TForm1; patienten:integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var ini: TIniFile; vorname: string; nachname: string; begin ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+ 'namen.ini'); try vorname:=ini.ReadString('Vornamen',inttostr(RandomRange(1,43)),''); nachname:=ini.ReadString('Nachname',inttostr(RandomRange(1,43)),''); finally ini.free; end; edit1.text := vorname + ' ' + nachname; patienten:=patienten+1; rechnen(patienten); if Zimmer1.Lines.Count = 5 then if Zimmer2.Lines.Count = 5 then if Zimmer3.Lines.Count = 5 then Zimmer4.Lines.Add(Edit1.Text) else Zimmer3.Lines.Add(Edit1.Text) else Zimmer2.Lines.Add(Edit1.Text) else Zimmer1.Lines.Add(Edit1.Text); end; procedure TForm1.rechnen(z1:integer); var z2:integer; var ergebnis:integer; begin z2:=10; ergebnis:=z1*z2; edit2.text:=inttostr(ergebnis); end; procedure TForm1.Timer1Timer(Sender: TObject); begin Zimmer1.Lines.Delete(0); Zimmer2.Lines.Delete(0); Zimmer3.Lines.Delete(0); Zimmer4.Lines.Delete(0); end; procedure TForm1.FormCreate(Sender: TObject); begin zimmer1.Clear; zimmer2.Clear; zimmer3.Clear; zimmer4.Clear; end; |
Re: Warteschlange einer arztpraxis
Deine Zuweisung finde ich nicht gut. Bei 4 Patienten werden sie alle in das erste Zimmer geschickt und die anderen haben nichts zu tun. Du solltest eher das Zimmer mit den wenigsten Patienten suchen und da den nächsten hinschicken.
Wenn du dann zufällige Zeiten benutzen willst (F1: random, randomize) solltest du den nächsten Patienten in das Zimmer schicken, bei dem die Summe über die Wartezeiten der schon wartenden ab geringsten ist, unabhängig davon, wie viele Patienten dort warten. Die Anzeige könntest du über ein Label pro Zimmer machen, das du jede Sekunde aktualisierst. |
Re: Warteschlange einer arztpraxis
Guten Morgen,
dein Lehrer will anscheinend auf die RoundRobin Verteilung hinaus. 4 Wartezimmer (a,b,c,d) nun werden die Patienten reihenweise auf die Wartezimmer veteilt. 1.P auf a 2.P auf b 3.P auf c 4.P auf d 6.P auf a ... Sind alle Wartezimmer belegt wird so lange gewartet bis ein Patient das Wartezimmer verläßt.
Code:
Grüße
For wartezimmerCount:=1 to 5 do
if PatientenCount < maxPatienten then warteZimmer[WarteZimmerCount].addPatient Klaus |
Re: Warteschlange einer arztpraxis
Ja, so wie es jetzt ist, ist es nicht optimal. Wenn alle Wartezimmer voll sind, wohin mit den Patienten?
Hast du eine Vorgabe für die max. Anzahl an Patienten je Wartezimmer? Wenn nicht müssen die Patienten gleichmäßiger verteilt werden, wenn ja musst du sie wieder nach Hause schicken. ^^ Ich nehme an, Berechnen berechnet die Wartezeit. :) Bei dir werden in allen 4 Wartezimmern zur gleichen Zeit jemand rausgefischt. Vielleicht hilft ein Timer je Wartezimmer mit randomRange Intevall. :gruebel: Das nur mal so am Rande. MfG freak |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz