Премини към съдържанието
  • Добре дошли!

    Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

    Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

     

Класове и списъци в С++


Иван Милкович

Препоръчан отговор

Здравейте,

Нужна ми е помощ за курсов проект по ООП на С++

Не съм сигурен за кода, който до момента реализирах, тъй като не прави всичко по условието. Имам затруднения с main() функцията, както и с някой мембър на втория клас. Ще се радвам ако ми помогнете :)

Ето и заданието:

Цитат

Да се състави клас студент (CStudent) с член променливи:
name; име
scores; списък от оценки
fn; факултетен номер
// експлицитен конструктор fn,nаmе
// accessor за name
// accessor за получаване на средна оценка
getGrade ()
// добавяне на оценка
addScore
Да се състави клас (CCourse)
student_list; списък от студенти
name име на курса
// експлицитен конструктор по име на курса
// accessor за име на курса name
// функция за нанасяне на оценка: addScore (fn, grade)
// добавяне на група оценки на даден студент
addScores (fn, grade list)
// извеждане на резултатите на групата
displayScores () извежда име, списък от оценки и средна оценка
// добавяне на студент с име и ф.н. към курса
makeStudent (fn, name)
Главна функция за създаване на клас II и проверка на функциите му

До момента съм стигнал дотук:

#include <iostream>
#include <string>
#include <list>
#include <iterator>

using namespace std;


class CStudent			//1st class
{
protected:
	string m_strName;
	list<int> m_iScores;
	string m_strFn;
public:
	CStudent()		//default
	{
		m_strName = "unknown";
		m_strFn = "unknown";
	}
	CStudent(string Name, string Fn)		//exp
	{
		m_strName = Name;
		m_strFn = Fn;
	}

	const string GetName() { return m_strName; }	//accessor name
	const int GetGrade()							//accessor grade
	{ 
		int iSum = 0;
		double dAverage = 0.0;
		for (int i = 0; i < (signed)m_iScores.size(); i++)
			iSum++;
		dAverage = iSum / double(m_iScores.size());
		return dAverage;
	}		

	void AddScore()		//add score
	{
		int iMark, iNum;
		cout << "Number of grades: ";
		cin >> iNum;
		for (int i = 0; i < iNum; i++)
		{
			cout << "Insert grade: ";
			cin >> iMark;
			m_iScores.push_back(iMark);
		}
	}


	friend ostream& operator <<(ostream& toStream, CStudent& obj)		//output
	{
		toStream << "Student's name is " << obj.m_strName << ", with Faculty № " << obj.m_strFn << endl;
		return toStream;
	}
	//friend istream& operator >>(istream& fromStream, CStudent& obj)		//input
	//{
	//	fromStream >> obj.m_strName >> obj.m_strFn << endl;
	//	return fromStream;
	//}
};


class CCourse : CStudent			//2nd class
{
private:
	list<string> m_strStudent_list;
	string m_strCourseName;
public:
	CCourse() { m_strCourseName = "unknown"; }		//default
	CCourse(string CourseName) { m_strCourseName = CourseName; }		//exp

	const string GetCourseName() { return m_strCourseName; }		//accessor course name


	void AddScore(const string Fn, int Grade)
	{
		cout << "Faculty № " << Fn;
		cout << "\n Grade: ";
		cin >> Grade;
	}

	void AddScores(const string Fn, list<int> Grade_list, int Grade)		//add a group of marks to a student
	{
		cout << "Faculty № " << Fn;
		int iNum;
		cout << "Number of grades: ";
		cin >> iNum;
		cout << "\n Grade: ";
		for (int i = 0;i < iNum;i++)
		{
			cin >> Grade;
			Grade_list.push_back(Grade);
		}
	}

	void DisplayScores()
	{
		cout << "Student's name is ";
		cin >> m_strName;
		ostream_iterator<int> out(cout, "");
		cout << "Grades: ";

		copy(m_iScores.begin(), m_iScores.end(), out);
	}

	void MakeStudent(string Fn, list<int> Grade_list, string Name, int Grade)			//add student
	{
		cout << "Student's name is: ";
		cin >> Name;
		/*cout << "Faculty № ";
		cin >> Fn;*/
		AddScores(Fn, Grade_list, Grade);

	}
};

int main()
{
	CStudent student("Ivan", "61460114");
	cout << student;
	student.GetName();
	student.AddScore();
	cout << "Grades: " << student.GetGrade();

	return 0;
}

 

Линк към коментара
Сподели в други сайтове

const int GetGrade()							//accessor grade
	{ 
		int iSum = 0;
		double dAverage = 0.0;
		for (int i = 0; i < (signed)m_iScores.size(); i++)
			iSum++;
		dAverage = iSum / double(m_iScores.size());
		return dAverage;
	}

Нещо не ми е ясен тоя код, така както е написан би трявало да връща или 1.0 или NaN

 

Линк към коментара
Сподели в други сайтове

Да, с тази цел е, да връща средна оценка, но както казах не съм на 100% сигурен, затова помолих за помощ

Линк към коментара
Сподели в други сайтове

Т.е. операторът ми трябва да е такъв?

for (list<int>::iterator iter = m_iScores.begin(); iter != m_iScores.end(); ++iter)
			iSum++;
Линк към коментара
Сподели в други сайтове

Смених оператора, сложих я double и функцията си върви чудесно, благодаря :)

Сега ми останаха DisplayScores(), MakeStudent() и main(), също така имам съмнения за тази AddScores(), отново с този for

 

Edit:

Стигнах донякъде, но отново имам нужда от помощ при условието. Все още не съм сигурен за този мейн, защото по условие имам създаване на обект от втори клас.

 

 

#include <iostream>
#include <string>
#include <list>
#include <iterator>
#include <map>

using namespace std;


class CStudent			//1st class
{
protected:
	string m_strName;
	list<int> m_iScores;
	string m_strFn;
public:
	CStudent()		//default
	{
		m_strName = "unknown";
		m_strFn = "unknown";
	}
	CStudent(string Name, string Fn)		//exp
	{
		m_strName = Name;
		m_strFn = Fn;
	}

	const string GetName() { return m_strName; }	//accessor name
	const double GetGrade()							//accessor grade
	{ 
		int iSum = 0;
		double dAverage = 0.0;
		for (list<int>::iterator iter = m_iScores.begin(); iter != m_iScores.end(); ++iter)
			iSum += *iter;
		dAverage = iSum / double(m_iScores.size());
		return dAverage;
	}		

	void AddScore()		//add score
	{
		int iMark;
			cout << "Insert grade: ";
				cin >> iMark;
			m_iScores.push_back(iMark);
	}


	friend ostream& operator <<(ostream& toStream, CStudent& obj)		//output
	{
		toStream << "Student's name is " << obj.GetName() << ", with Faculty " << obj.m_strFn << endl;
		return toStream;
	}
	//friend istream& operator >>(istream& fromStream, CStudent& obj)		//input
	//{
	//	fromStream >> obj.m_strName >> obj.m_strFn << endl;
	//	return fromStream;
	//}
};


class CCourse : public CStudent			//2nd class
{
private:
	list<CStudent> m_strStudent_list;
	string m_strCourseName;
public:
	CCourse() { m_strCourseName = "unknown"; }		//default
	CCourse(string CourseName) { m_strCourseName = CourseName; }		//exp

	const string GetCourseName() { return m_strCourseName; }		//accessor course name


	friend ostream& operator <<(ostream& toStream, CCourse& obj)		//output
	{
		toStream << "Course is "<<obj.GetCourseName() << ", Student's name is " << obj.GetName() << 
			", with Faculty " << obj.m_strFn << endl;
		return toStream;
	}

	void AddScore(const string Fn, int Grade)		//100%
	{
		cout << "Faculty № " << Fn;
		cout << "\n Grade: ";
		cin >> Grade;
	}

	void AddScores(const string Fn, list<int> Grade_list, int Grade)		//add a group of marks to a student 100%
	{
		int iMark;
		unsigned short has_2 = 0;
		cout << "Faculty: " << Fn << endl;
		//cout << "Insert "<<Grade<<" grades: ";
		//cin >> iNum;
		if (Grade_list.empty())
			Grade_list.clear();
		for (int i = 0; i < Grade; i++)
		{
			do
			{
				cout << "Insert grade: ";
				cin >> iMark;
			} while ((iMark < 2) || (iMark > 6));
			if (iMark == 2)
				++has_2;
			m_iScores.push_back(iMark);
		}
	}

	void DisplayScores()		//90%
	{
		cout << "Student's name is ";
		cin >> m_strName;
		cout << GetName();
		//ostream_iterator<int> out(cout, "");

		cout << ", Grades: ";

		copy(m_iScores.begin(), m_iScores.end(),/* out);*/
		ostream_iterator<int>(cout, " "));
		cout << endl;
		double Average = GetGrade();
		cout << "Average Grade: " << Average << endl;
	}

	void MakeStudent(string &Name, string &Fn)			//add student
	{
		cout << "Insert course's name: ";
		cin >> m_strCourseName;

			cout << "Student's name is: ";
			cin >> Name;
			cout << "Faculty: ";
			cin >> Fn;
			cout << "Add grade: ";
	}
};

int main(int argc, char ** argv)
{
	list<CStudent> student_list;
	list<int> grade_list;
	string Fn = "61460114", Fn_new;
	string Name = "Ivan", Name_new;
	int iMark = 0;
	CStudent student(Name, Fn);
	CCourse asd("KST");

	int iChoice;
	do
	{
		cout << "1. Test student from 1st class;\n";
		cout << "2. Insert grade for the first student;\n";
		cout << "3. Insert a group of grades for the first student;\n";
		cout << "4. Display student;\n";
		cout << "5. Create new student;\n";
		cout << "6. EXIT.\n";
		do
		{
			cout << "Your choice: ";
			cin >> iChoice;
		} while (iChoice < 1 || iChoice > 6);

		switch (iChoice)
		{
		case 1:
		{
			cout << "Creating a list of students...\n";
			if (!student_list.empty())
				student_list.clear();
			cout << "The first one...\n";
			cout << student;
			student_list.push_back(student);
		} break;
		case 2:
		{
			cout << "Insert one grade for student with ";
			asd.AddScore(Fn, iMark);
		} break;
		case 3:
		{
			unsigned short sGrade = 0;
			cout << "Number of grades: ";
			cin >> sGrade;

			cout << "Insert a group of " << sGrade << " grades for student with ";
			asd.AddScores(Fn, grade_list, sGrade);
		} break;
		case 4:
			asd.DisplayScores();
			break;
		case 5:
		{
			cout << "Create new student...\n";
			unsigned short sStud = 0;
			cout << "Number of students: ";
			cin >> sStud;
			for (int i = 0; i < sStud;i++)
			{
				asd.MakeStudent(Name_new, Fn_new);
				asd.AddScore(Fn_new, iMark);
				cout << asd;
				student_list.push_back(asd);
			}
		} break;
		default: cout << "End of tests.\n";
			break;
		}
	} while (iChoice != 6);
	

	
	
	
	/*student_list.push_back(asd);
	
	asd.AddScores(Fn_new, grade_list, sGrade);
	asd.DisplayScores();
	cout << asd;*/

	cout << "\nStudents: ";

	for (list<CStudent>::iterator iter = student_list.begin(); iter != student_list.end(); ++iter)
		cout << *iter;
	cout << endl;


	return 0;
}

 

Линк към коментара
Сподели в други сайтове

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

  • Разглеждащи това в момента   0 потребители

    • Няма регистрирани потребители разглеждащи тази страница.
×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване