I'm not sure my linked list code is working effectively and going to the next node (ticket). It seems to run fine for one ticket, but does not seem to either go to the next instance (ticket) when instantiating a new object, or doesn't sort again. I would appreciate if someone could take a quick look to see what could be wrong.
For example, if I test run this:
int main() {
SuperDraw sd(2);
}
The output should be something like:
2 new tickets were successfully generated.
The numbers are: 12, 14, 23, 39, 40, 44 and 1, 2, 9, 12, 28, 41
But it gives me one ordered and one non-ordered number. I'm not yet at the point where I verifySequence but the idea is that when you give an int array, the method will check if that same sequence is found in the existing linked list. If anyone would give me suggestions, that would be great. Thanks!
#include <iostream>
#include <sstream>
#include <string>
#include <algorithm> //stdin
using namespace std;
//each ticket has 6 random numbers in numbers[] and points to next element
struct ticket{
unsigned int numbers[6];
ticket* next;
};
class SuperDraw{
public:
SuperDraw();
SuperDraw(int args);
~SuperDraw();
SuperDraw(const SuperDraw &obj);
void newTicket(int verbose=0);
void printAllTicketNumbers();
bool verifySequence(int number[]);
void deleteSequence(int number[]);
private:
ticket* ticketListHead;
ticket* ticketListTail;
};
void
SuperDraw::printAllTicketNumbers(){
int count=0;
ticket* current = new ticket;
while(current){
count++;
current=current->next;
}
cout<<"We found "<<count<<" generated tickets:\n";
while (current){
for(int i=0; i<6; i++){
cout<<current->numbers[i]<<", ";
}
cout<<endl;
current=current->next;
}
}
bool
SuperDraw::verifySequence(int number[]){
//check if number[i]==number in linked list
return false;
}
void
SuperDraw::deleteSequence(int number[]){
if (verifySequence(number)){
}
}
//generates 6 random numbers and adds newTicket to linked list ticket
//if verbose==0, don't print anything. If 1, then print
void
SuperDraw::newTicket(int verbose){
srand(time(NULL));
ticket* t = new ticket;
//if (t != NULL){
//generate 6 random numbers between 1 to 49 and set to t->numbers
for (int i =0; i<6; i++){
t->numbers[i]=rand()%49+1;
}
//sort array in ascending order
for (int i =0; i<6; i++){
for (int j=i+1; j<6; j++){
//swap temp=a; a=b; b=temp;
if (t->numbers[i]>t->numbers[j]){
int temp=t->numbers[i];
t->numbers[i]=t->numbers[j];
t->numbers[j]=temp;
}
}
}
//print numbers if verbose is 1
cout<<"A new ticket was successfully generated. The numbers are: ";
if (verbose==1){
//string num="";
for (int i=0; i<6; i++){
cout<<t->numbers[i]<<" ";
}
cout<<endl;
}
t->next=NULL;
if (ticketListHead==NULL){
ticketListHead=t;
ticketListTail=t;
t=NULL; //avoid memory leak
cout<<"ticketList==NULL\n";
}
else
{
ticketListTail->next=t;
ticketListTail=ticketListTail->next;
ticketListTail->next=NULL;
t=NULL;
}
}
//Constructor initializes the attributes to NULL
SuperDraw::SuperDraw(){
//ticket* ticket = NULL;
ticketListHead=NULL;
ticketListTail=NULL;
}
//Question 3: Constructor taking in number of tickets
SuperDraw::SuperDraw(int args){
//if args>1, then create newTicket
if (args==1){
cout<<"A new ticket was successfully generated. The numbers are: ";
newTicket();
} else {
cout<<args<<" new tickets were successfully generated. The numbers are: ";
for (int i=0; i<args; i++){
newTicket();
if (i==args-2)
cout<<" and ";
}
cout<<endl;
}
}
//Destructor method: frees all allocated tickets
SuperDraw::~SuperDraw(){
ticket* current = ticketListHead;
while(current){
ticket* next = current->next;
delete current;
current=next;
}
}
//Copy constructor that copies SuperDraw object into another object
SuperDraw::SuperDraw(const SuperDraw &obj) {
// ticket* t = new ticket;
// *t = *;
ticket* head = new ticket;
*head = *(obj.ticketListHead);
ticket* tail = new ticket;
*tail = *(obj.ticketListHead);
ticket *ptr = obj.ticketListHead;
ticket *newTicket;
}
/* Program that generates lotto numbers and generates
* 6 random numbers between 1-49 */
int
main(){
SuperDraw sd;
sd.newTicket(1);
SuperDraw se(2);
SuperDraw sy;
sy.newTicket();
sy.newTicket();
sy.newTicket();
sy.printAllTicketNumbers();
SuperDraw sv;
sv.newTicket();
//as many sd.newTickets as you would like
int myNumbers[6]={2,4,17,29,31,34};
sv.verifySequence(myNumbers);
sv.deleteSequence(myNumbers);
SuperDraw sr;
sr.newTicket();
SuperDraw sr1(sr);
sr1.printAllTicketNumbers();
}