Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Warteschlange einer arztpraxis (https://www.delphipraxis.net/82730-warteschlange-einer-arztpraxis.html)

anDy2k5 18. Dez 2006 22:39


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;

Nikolas 18. Dez 2006 23:10

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.

Klaus01 19. Dez 2006 08:07

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:
For wartezimmerCount:=1 to 5 do
  if PatientenCount < maxPatienten then
    warteZimmer[WarteZimmerCount].addPatient
Grüße
Klaus

freak4fun 19. Dez 2006 10:02

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 18:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz