CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 4 of 4
  1. #1
    Join Date
    Feb 2008
    Posts
    3

    Linked Lists, C++

    Hi guys,

    I'm trying to write a program that stores a name, ID number, average test score, and letter grade for up to 20 students. This code here will only store/print one student's information. I can't figure out how to get it to store more than that. Any advice?

    Code:
    #include <iostream>
    using namespace std;
    
    struct node
      {  char name[20];		 // Name of up to 20 letters
         int idNum;       
         int avgScore[20];     
    	 char grade[20];
         node *nxt;			 // Pointer to next node
      };
    
    node *start_ptr = NULL;
    node *current;		 // Used to move along the list
    int option = 0;
    
    void add_record()
      {  node *temp, *temp2;   // Temporary pointers
    	 //node avgScore;
         // Reserve space for new node and fill it with data
    	 int* a = NULL;   // Pointer to int, initialize to nothing.
    	 int n;           // Size needed for array
    	 cout << "\n\t--------------Student Information---------------\n";
    	 cout << "How many test scores this semester? ";
    	 cin >> n;        // Read in the size
    	 a = new int[n];  // Allocate n ints and save ptr in a.
    	 for (int i=0; i<n; i++) 
    	 {
    		 a[i] = 0;    // Initialize all elements to zero.
    	 }
         
    	 int m;
    	 cout << "How many students in the course? ";
    	 cin >> m;
    	 temp = new node;
    	 for (int k=0; k<m; k++)
    	 {
    		cout << "Please enter the name of student " << (k+1) << ": ";
    		cin >> temp->name;
    		cout << "Please enter the ID Number of the student : ";
    		cin >> temp->idNum;
    		cout << "Please enter student's test scores for the " << n << " tests: ";
    		for (int j=0; j<n; j++)
    		{
    			cout << "\nTest " << (j+1) << ": ";
    			cin >> a[j];
    			/*for (int p=0; p<j; p++)
    			{
    				temp->avgScore = (temp->avgScore + a[p]) / p;
    			}*/
    		}
    
    	 }
    
         temp->nxt = NULL;
    
         // Set up link to this node
         if (start_ptr == NULL)
           { start_ptr = temp;
    	 current = start_ptr;
           }
         else
           { temp2 = start_ptr;
             // We know this is not NULL - list not empty!
             while (temp2->nxt != NULL)
               {  temp2 = temp2->nxt;
                  // Move to next link in chain
               }
             temp2->nxt = temp;
           }
      }
    
    void display_list()
      {  node *temp;
         temp = start_ptr;
         cout << endl;
         if (temp == NULL)
           cout << "List currently empty." << endl;
         else
           { while (temp != NULL)
    	   {  // Display details for what temp points to
                  cout << "Name : " << temp->name << " ";
                  cout << "idNum : " << temp->idNum << " ";
    			  cout << "avgScore : " << temp->avgScore;
    	      if (temp == current)
    		cout << " <-- Current node";
                  cout << endl;
    	      temp = temp->nxt;
    
    	   }
    	 cout << "End of list!" << endl;
           }
      }
    
    void main()
      {  start_ptr = NULL;
    
         do
    	{
    	  display_list();
    	  cout << endl;
    	  cout << "Please select an option : " << endl;
    	  
    	  cout << "1. Create new record." << endl;
    	  cout << "2. Exit the program." << endl;
    
    	  cin >> option;
    
    	  switch (option)
    	    {
    	      case 1 : add_record(); break;
    	    }
    	}
         while (option != 2);
      }
    I know not all the steps are there for everything, my main concern is how to get it to store/print more than one student. I appreciate any responses.

    Thanks!

  2. #2
    Join Date
    May 2008
    Posts
    16

    Re: Linked Lists, C++

    try the following code,there is a minor error in you code
    Code:
    #include <iostream>
    using namespace std;
    
    struct node
    {  char name[20];		 // Name of up to 20 letters
    int idNum;       
    int avgScore[20];     
    char grade[20];
    node *nxt;			 // Pointer to next node
    };
    
    node *start_ptr = NULL;
    node *current;		 // Used to move along the list
    int option = 0;
    
    void add_record()
    { 
    	node *temp, *temp2;   // Temporary pointers
    	//node avgScore;
    	// Reserve space for new node and fill it with data
    	int* a = NULL;   // Pointer to int, initialize to nothing.
    	int n;           // Size needed for array
    	cout << "\n\t--------------Student Information---------------\n";
    	cout << "How many test scores this semester? ";
    	cin >> n;        // Read in the size
    	a = new int[n];  // Allocate n ints and save ptr in a.
    	for (int i=0; i<n; i++) 
    	{
    		a[i] = 0;    // Initialize all elements to zero.
    	}
    	
    	int m;
    	cout << "How many students in the course? ";
    	cin >> m;
    	
    	for (int k=0; k<m; k++)
    	{	
    		temp = new node;
    		cout << "Please enter the name of student " << (k+1) << ": ";
    		cin >> temp->name;
    		cout << "Please enter the ID Number of the student : ";
    		cin >> temp->idNum;
    		cout << "Please enter student's test scores for the " << n << " tests: ";
    		for (int j=0; j<n; j++)
    		{
    			cout << "\nTest " << (j+1) << ": ";
    			cin >> a[j];
    			/*for (int p=0; p<j; p++)
    			{
    			temp->avgScore = (temp->avgScore + a[p]) / p;
    		}*/
    		}
    		temp->nxt = NULL;
    		
    		// Set up link to this node
    		if (start_ptr == NULL)
    		{ start_ptr = temp;
    		current = start_ptr;
    		}
    		else
    		{ temp2 = start_ptr;
    		// We know this is not NULL - list not empty!
    		while (temp2->nxt != NULL)
    		{  temp2 = temp2->nxt;
    		// Move to next link in chain
    		}
    		temp2->nxt = temp;
    		}
    	}
    	
    	
    }
    
    void display_list()
    {  
    	node *temp;
    	temp = start_ptr;
    	cout << endl;
    	if (temp == NULL)
    		cout << "List currently empty." << endl;
    	else
    	{ while (temp != NULL)
    	{  // Display details for what temp points to
    		cout << "Name : " << temp->name << " ";
    		cout << "idNum : " << temp->idNum << " ";
    		cout << "avgScore : " << temp->avgScore;
    		if (temp == current)
    			cout << " <-- Current node";
    		cout << endl;
    		temp = temp->nxt;
    		
    	}
    	cout << "End of list!" << endl;
    	}
    }
    
    void main()
    {  
    	start_ptr = NULL;
    	
    	do
    	{
    		display_list();
    		cout << endl;
    		cout << "Please select an option : " << endl;
    		
    		cout << "1. Create new record." << endl;
    		cout << "2. Exit the program." << endl;
    		
    		cin >> option;
    		
    		switch (option)
    		{
    		case 1 : add_record(); break;
    		}
    	}
    	while (option != 2);
    }

  3. #3
    Join Date
    May 2008
    Posts
    16

    Re: Linked Lists, C++

    Also,you should know you didn't release the memory.

  4. #4
    Join Date
    Feb 2008
    Posts
    3

    Re: Linked Lists, C++

    Wow! That works! Thank you so very much. What did you change?

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured