| | |
Converting Struct to class lost with pointers
Please support our C++ advertiser: Programming Forums - DaniWeb Sister Site
![]() |
•
•
Join Date: Sep 2004
Posts: 2
Reputation:
Solved Threads: 0
Hi everyone, I am new to C++ (2nd week of classes) I wrote this code in c++ for a project and the instructor wants it as a Class instead.
I thought they were both almost the same, but I am having
a heck of a time getting it to a Class. I had a little problem with the
pointers in the Struct, got them fixed but I can't get anything in or out of the Class.
My struct program:
what I have for the Class Implementation so far is.
any help would be greatly appreciated, I have checked alot of tutorials on Classes my head is swimming.
I thought they were both almost the same, but I am having
a heck of a time getting it to a Class. I had a little problem with the
pointers in the Struct, got them fixed but I can't get anything in or out of the Class.
My struct program:
C++ Syntax (Toggle Plain Text)
//Project 4 //Due Date 9/21/04 //Libraries to include #include <iostream> #include <math.h> #include <string> #include <stdlib.h> using namespace std; //Built in namespace //Object/Record struct student_t { char firstName [20]; //holds 20 char for first name char lastName [20]; //holds 20 char for last name int quiz1; //quiz 1 score int quiz2; //quiz 2 score int midTerm; //mid term score int finalExam; //final score double average; //average grade char grade [1]; //letter grade holds 1 char }; //Function Protoypes void ReadRecord(student_t* student,int numStudents); void WriteRecord(student_t* student,int numStudents); void CalculateGrade(student_t* student,int numStudents); void ReportSummary(student_t* student,int numStudents); //Main int main() { int students; //used to get # of students student_t *student; //declare pointer cout << "Please enter the number of students:"; cin >> students; student = new student_t[students]; //use new operator ReadRecord(student,students); //functions CalculateGrade(student,students); WriteRecord(student,students); ReportSummary(student,students); delete [] student; //use delete operator cout << "Good bye for now \n"; return 0; } //ReadRecord's function is to read in all of the individual //Students information and test/quiz scores and store in student_t void ReadRecord(student_t* student,int numStudents) { int x; char myBuffer[20]; for(x=0;x<numStudents;x++) { cout << "Please enter student " << x+1 <<" first name:"; cin >> myBuffer; strcpy(student[x].firstName,myBuffer); cout << "Please enter student " << x+1 <<" last name:"; cin >> myBuffer; strcpy(student[x].lastName,myBuffer); cout << "Please enter student " << x+1 <<" first quiz score <max 10>:"; cin >> myBuffer; student[x].quiz1 = atoi (myBuffer); cout << "Please enter student " << x+1 <<" second quiz score <max 10>:"; cin >> myBuffer; student[x].quiz2 = atoi (myBuffer); cout << "Please enter student " << x+1 <<" MidTerm score:"; cin >> myBuffer; student[x].midTerm = atoi (myBuffer); cout << "Please enter student " << x+1 <<" Final score:"; cin >> myBuffer; student[x].finalExam = atoi (myBuffer); } } //WriteRecord's function is to display all the gathered information on //the screen after the averages and letter grades have been assigned void WriteRecord(student_t* student,int numStudents) { int a; for(a=0;a<numStudents;a++) { cout << "Student " << a+1 << " :\n"; cout << "First Name: " << student[a].firstName << "\n"; cout << "Last Name: " << student[a].lastName << " \n"; cout << "Quiz 1 Score: " << student[a].quiz1 << " \n"; cout << "Quiz 2 Score: " << student[a].quiz2 << " \n"; cout << "MidTerm score: " << student[a].midTerm << " \n"; cout << "Final score: " << student[a].finalExam << " \n"; cout << "Average: " << student[a].average << " \n"; cout << "Grade: " << student[a].grade << " \n"; } } //CalculateGrade's function is to determine the letter grade //and average grade for the student and return those //the formula is that the final exam counts for 50% of the grade //the midterm counts for 25% of the grade and the 2 quizzes //together count for a total of 25% of the grade = 100% void CalculateGrade(student_t* student,int numStudents) { int a; for (a=0;a<numStudents;a++) { double avg=0,quizAvg=0; quizAvg = ((student[a].quiz1 + student[a].quiz2)*5.0)/4.0; //quizzes quizzes avg = student[a].finalExam /2.0 + student[a].midTerm /4.0 + quizAvg;//avg student[a].average = avg; //send average if(avg >= 90)strcpy(student[a].grade,"A"); //assign letter grade else if(avg >= 80)strcpy(student[a].grade,"B"); else if(avg >= 70)strcpy(student[a].grade,"C"); else if(avg >= 60)strcpy(student[a].grade,"D"); else strcpy(student[a].grade,"F"); } } //ReportSummary's function is to go through the students //and report on the screen those students with an A average void ReportSummary(student_t* student,int numStudents) { int a; int innerCount=0; //in case there are no 'A' students cout << "Summary:\n"; for(a=0;a<numStudents;a++) { if(student[a].average >= 90) { innerCount++; cout << " 'A' student: " << student[a].firstName << " " ; cout << student[a].lastName << "\n"; } } if (innerCount == 0)cout <<"No 'A' students \n";//if there are no 'A' students cout << "End of summary: \n"; }
what I have for the Class Implementation so far is.
C++ Syntax (Toggle Plain Text)
#include <iostream> #include <math.h> #include <string> #include <stdlib.h> using namespace std; //Built in namespace //Object/Record class student_t { char firstName [20]; //holds 20 char for first name char lastName [20]; //holds 20 char for last name int quiz1; //quiz 1 score int quiz2; //quiz 2 score int midTerm; //mid term score int finalExam; //final score double average; //average grade char grade [1]; //letter grade holds 1 char public: //Function Protoypes void ReadRecord(); void WriteRecord(); void CalculateGrade(); void ReportSummary(); }; const int numStudents=2; //ReadRecord's function is to read in all of the individual //Students information and test/quiz scores and store in student_t void student_t::ReadRecord() { int x; char myBuffer[20]; for(x=0;x<numStudents;x++) { cout << "Please enter student " << x+1 <<" first name:"; cin >> myBuffer; strcpy(student[x].firstName,myBuffer); cout << "Please enter student " << x+1 <<" last name:"; cin >> myBuffer; strcpy(student[x].lastName,myBuffer); cout << "Please enter student " << x+1 <<" first quiz score <max 10>:"; cin >> myBuffer; student[x].quiz1 = atoi (myBuffer); cout << "Please enter student " << x+1 <<" second quiz score <max 10>:"; cin >> myBuffer; student[x].quiz2 = atoi (myBuffer); cout << "Please enter student " << x+1 <<" MidTerm score:"; cin >> myBuffer; student[x].midTerm = atoi (myBuffer); cout << "Please enter student " << x+1 <<" Final score:"; cin >> myBuffer; student[x].finalExam = atoi (myBuffer); } } //WriteRecord's function is to display all the gathered information on //the screen after the averages and letter grades have been assigned void student_t::WriteRecord() { int a; for(a=0;a<numStudents;a++) { cout << "Student " << a+1 << " :\n"; cout << "First Name: " << student[a].firstName << "\n"; cout << "Last Name: " << student[a].lastName << " \n"; cout << "Quiz 1 Score: " << student[a].quiz1 << " \n"; cout << "Quiz 2 Score: " << student[a].quiz2 << " \n"; cout << "MidTerm score: " << student[a].midTerm << " \n"; cout << "Final score: " << student[a].finalExam << " \n"; cout << "Average: " << student[a].average << " \n"; cout << "Grade: " << student[a].grade << " \n"; } } //CalculateGrade's function is to determine the letter grade //and average grade for the student and return those //the formula is that the final exam counts for 50% of the grade //the midterm counts for 25% of the grade and the 2 quizzes //together count for a total of 25% of the grade = 100% void student_t::CalculateGrade() { int a; for (a=0;a<numStudents;a++) { double avg=0,quizAvg=0; quizAvg = ((student[a].quiz1 + student[a].quiz2)*5.0)/4.0; //quizzes quizzes avg = student[a].finalExam /2.0 + student[a].midTerm /4.0 + quizAvg;//avg student[a].average = avg; //send average if(avg >= 90)strcpy(student[a].grade,"A"); //assign letter grade else if(avg >= 80)strcpy(student[a].grade,"B"); else if(avg >= 70)strcpy(student[a].grade,"C"); else if(avg >= 60)strcpy(student[a].grade,"D"); else strcpy(student[a].grade,"F"); } } //ReportSummary's function is to go through the students //and report on the screen those students with an A average void student_t::ReportSummary() { int a; int innerCount=0; //in case there are no 'A' students cout << "Summary:\n"; for(a=0;a<numStudents;a++) { if(student[a].average >= 90) { innerCount++; cout << " 'A' student: " << student[a].firstName << " " ; cout << student[a].lastName << "\n"; } } if (innerCount == 0)cout <<"No 'A' students \n";//if there are no 'A' students cout << "End of summary: \n"; } //Main int main() { int students; //used to get # of students cout << "Please enter the number of students:"; cin >> students; student_t student[20]; //use new operator student_t.ReadRecord(); //functions student_t.CalculateGrade(); student_t.WriteRecord(); student_t.ReportSummary(); delete [] student; //use delete operator cout << "Good bye for now \n"; return 0; }
any help would be greatly appreciated, I have checked alot of tutorials on Classes my head is swimming.
When it was a struct, you allocated a pointer to students and did a new on it. But when you converted it to a class you dropped that. Why?
Technically speaking, a struct and a class are completely identical in all ways except that the default access for a struct it public and for a class is private. There are differences in how people use or approach them, but to the compiler they are totally identical!
So, stick with the pointer to class and newing that, and then you don't need to new the individual members.
Technically speaking, a struct and a class are completely identical in all ways except that the default access for a struct it public and for a class is private. There are differences in how people use or approach them, but to the compiler they are totally identical!
So, stick with the pointer to class and newing that, and then you don't need to new the individual members.
•
•
Join Date: Sep 2004
Posts: 2
Reputation:
Solved Threads: 0
Thanks Chainsaw, yeah I just needed to get away from it for a bit
came right back to it and looked at it differently.
Anyways, this is where i ended up, it runs fine.
I would really like some feedback about my comments/format/style
and anything else that would make me a little better at this C++.
thanks again.
came right back to it and looked at it differently.
Anyways, this is where i ended up, it runs fine.
I would really like some feedback about my comments/format/style
and anything else that would make me a little better at this C++.
thanks again.
C++ Syntax (Toggle Plain Text)
#include <iostream> #include <string> #include <stdlib.h> using namespace std; class Student_t { char firstName[20]; //to hold the first name char lastName[20]; //to hold the last name int quiz1; //to hold quiz 1 score int quiz2; //to hold quiz 2 score int midTerm; //to hold mid term score int finalExam; //to hold final exam score double average; //to hold the students avg. char grade[1]; //to hold the students letter public: static int numStudents; static int innerCount; void ReadRecord(); void CalculateGrade(); void WriteRecord(); void ReportSummary(); }; int Student_t::numStudents=0;//global static int numStudents int Student_t::innerCount=0; //in case there are no 'A' students //ReadRecord's function is to read in all of the individual //Students information and test/quiz scores and store in student_t void Student_t::ReadRecord() { cout << "Please enter student first name:"; cin >> firstName; cout << "Please enter student last name:"; cin >> lastName; cout << "Please enter student first quiz score <max 10>:"; cin >> quiz1; cout << "Please enter student second quiz score <max 10>:"; cin >> quiz2; cout << "Please enter student MidTerm score:"; cin >> midTerm; cout << "Please enter student Final score:"; cin >> finalExam; } //CalculateGrade's function is to determine the letter grade //and average grade for the student and return those //the formula is that the final exam counts for 50% of the grade //the midterm counts for 25% of the grade and the 2 quizzes //together count for a total of 25% of the grade = 100% void Student_t::CalculateGrade() { double avg=0,quizAvg=0; quizAvg = ((quiz1 + quiz2)*5.0)/4.0; //quizzes quizzes avg = finalExam /2.0 + midTerm /4.0 + quizAvg; //avg average = avg; //send average if(avg >= 90)strcpy(grade,"A"); //assign letter grade else if(avg >= 80)strcpy(grade,"B"); else if(avg >= 70)strcpy(grade,"C"); else if(avg >= 60)strcpy(grade,"D"); else strcpy(grade,"F"); } //WriteRecord's function is to display all the gathered information on //the screen after the averages and letter grades have been assigned void Student_t::WriteRecord() { cout << "First Name: " <<firstName << "\n"; cout << "Last Name: " << lastName << " \n"; cout << "Quiz 1 Score: " << quiz1 << " \n"; cout << "Quiz 2 Score: " << quiz2 << " \n"; cout << "MidTerm score: " << midTerm << " \n"; cout << "Final score: " << finalExam << " \n"; cout << "Average: " << average << " \n"; cout << "Grade: " << grade << " \n"; } //ReportSummary's function is to go through the students //and report on the screen those students with an A average void Student_t::ReportSummary() { if(average >= 90) { innerCount++; cout << " 'A' student: " << firstName << " " ; cout << lastName << "\n"; } } int main() { int i; //to use in for loops cout << "Please enter the number of students:"; // cin >> Student_t::numStudents; //to assign globally Student_t * p = new Student_tStudent_t::numStudents];//ptr for(i=0;i<Student_t::numStudents;i++) //perform func. { p[i].ReadRecord(); } for(i=0;i<Student_t::numStudents;i++) { p[i].CalculateGrade(); } for(i=0;i<Student_t::numStudents;i++) { p[i].WriteRecord(); } cout << "Summary: \n"; for(i=0;i<Student_t::numStudents;i++) { p[i].ReportSummary(); } if(Student_t::innerCount == 0) cout << "No 'A' students \n"; cout << "Good bye for now \n"; return 0; }
![]() |
Similar Threads
- converting Address Book struct to class (C++)
- Struct within Class, Problem with OVERLOADING OPERATORS (C++)
- How to declare struct in the class (C)
- Linked List problem (C)
- Please I need help formatting an output file and sorting the names! (C++)
- converting base class to dervived class (C)
Other Threads in the C++ Forum
- Previous Thread: Calculation does not work, help please
- Next Thread: infinite loop
Views: 2021 | Replies: 2
| Thread Tools | Search this Thread |
Tag cloud for C++
6 api application array arrays based beginner binary c++ c/c++ calculator char char* class classes code coding compile compiler console conversion convert count data database delete developer display dll dynamiccharacterarray email encryption error file format forms fstream function functions game generator givemetehcodez graph iamthwee ifstream image input int java lib list loop looping loops map math matrix memory multiple newbie news number numbertoword output pointer problem program programming project python random read recursion recursive reference return rpg search simple sort sorting spoonfeeding string strings struct template templates text tree url variable vector video visual visualstudio win32 windows winsock wordfrequency wxwidgets





