Ich versuche, eine Kundenlinie zu simulieren, die Kundennummer, Wartezeiten usw. zeigen. Ich habe drei Benutzereingaben: Max Simulationszeit, max Intervall zwischen Kundeneinträgen und max Servicezeit.Simulieren einer Kundenlinie mit verknüpften Liste in C++
schließlich, würde Ich mag eine Ausgabe erzeugen, die wie so aussieht:
hier ist mein Code sofar, aber im nur in der Lage, die Minuten zu generieren, aber nicht den Rest des Ausgangs.
#include "stdafx.h"
#include <iostream>
using namespace std;
class Node {
public:
Node() {};
Node(int, int, int) {};
//Node(int,int, int){}
void SetCustEntryMinute(int custNum, int entryMinute, int servTimeRem) {
entryMin = entryMinute;
custNo = custNum;
serviceTimeRemain = servTimeRem;
next = NULL;
}
void SetNext(Node* aNext) { next = aNext; }
int CustEntryMinute() { return entryMin; }
int CustNum() { return custNo; }
int ServTmRm() { return serviceTimeRemain; }
Node* Next() { return next; }
int custNo;
int entryMin;
int serviceTimeRemain;
Node* next;
};
//List class
class List {
public:
List() { /*head = NULL; tail = NULL; */};
//void Print();
void enqueue(int custNum, int entryMinute, int servTimeRem);
void dequeue();
Node *getHead() { return head; };
Node* head;
Node *tail;
};
/* Append a node to the linked list*/
void List::enqueue(int custNum, int entryMinute, int servTimeRem)
{
// Create a new node
Node* newNode = new Node(custNum, entryMinute, servTimeRem);
// Create a temp pointer
if (tail)
{
tail->next = newNode;
}
else
{
head = newNode;
}
tail = newNode;
}
/* Serve a node from the list*/
void List::dequeue() {
// Create a temp pointer
Node *tmp = head;
//head = head->Next();
// No nodes
if (tmp == NULL)
{
//nothing to delete
return;
}
if (head == tail)//only one node
{
head = NULL;
tail = NULL;
}
else
{
head = head->next;
}
delete tmp;
}
int main()
{
List list;
int serviceTimeMax;
int maxInterval;
int timeCount = 0;
int timeMax;
int entryMinute = 0;
cout << "Enter max time: ";
cin >> timeMax;
cout << "Enter max interval between two services: ";
cin >> maxInterval;
cout << "Enter max service time: ";
cin >> serviceTimeMax;
int custNum = 1;
Node* personAhead = NULL;
cout << "Minute \tCustomer\t Entry\t Service Time\t Wait time\t Minutes remaining\n";
cout << "Number \tNumber \tMinute\t Remaining\t Remaining\t until service is completed\n\n";
int nextJobTime = 1;
for (int i = 1; i < timeMax + 1; i++) {
if (i == nextJobTime)
{
list.enqueue(custNum, i, rand() % serviceTimeMax);
nextJobTime = i + rand() % maxInterval;
}
Node *head = new Node;
while (head != NULL) {
if (head->serviceTimeRemain == 0)
{
list.dequeue();
head = list.getHead();
}
Node *p = head;
int wait_time = 0;
cout << i << "\n";
while (p != NULL)
{
wait_time += p->serviceTimeRemain;
cout << "\t" << p->custNo << "\t" << p->entryMin << "\t" << wait_time << "\t" << wait_time + p->serviceTimeRemain << "\n";
p->serviceTimeRemain--;
}
}
}
system("pause");
return 0;
}
Zu diesem Zeitpunkt wird nur die vom Benutzer eingegebene Zeit generiert.
Da dies wie eine Aufgabe aussieht, werde ich den folgenden Rat geben. Versuchen Sie, den Code in einem Debugger auszuführen. Einzelschritt das Programm. Folgt der reale Programmablauf Ihrem beabsichtigten Fluss? Überprüfen Sie die Variablen, haben sie den richtigen Wert? – Johan
'#include" stdafx.h "' ist ein Zeichen, dass Visual Studio verwendet wird. Visual Studio verfügt über einen der besten, wenn nicht sogar den besten verfügbaren Debugger. Lernen Sie, es zu benutzen, oder Sie sind dazu verdammt, viel, viel zu viel Zeit mit Ihren Aufgaben zu verbringen. – user4581301
Sie haben etwas überschüssigen Code eingegeben, den Sie weggelassen haben könnten. Sie können dies hilfreich finden: https://stackoverflow.com/help/mcve –