Премини към съдържанието

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


Здравейте,

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

Не съм сигурен за кода, който до момента реализирах, тъй като не прави всичко по условието. Имам затруднения с 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++;

Сподели този отговор


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

 

Сподели този отговор


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

Смених оператора, сложих я 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 потребители

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

  • Горещи теми в момента

  • Подобни теми

    • от Alexandar Jelev
      Здравейте, искам  да попитам някой може ли да ми помогне за курсовата задача, ще му бъда изключително благодарен? :)
      Задачата е следната:
      Съставете програма с функции за:
      а) Въвеждане от клавиатура във файл и в масив ( чрез добавяне) данни за автобусни превози ( до 35 ) - Автогара Варна: маршрут, дата (1 до 31), номер на автобуса, фамилия на водача, брой пътници, цена на съответните билети, обща сума на билетите - през месец юли. Извеждане текущото съдържание на масива (файла) на екран;
      б) Извеждане на екран справка за всички превози през избран ден от месеца ( със запитване за нова справка);
      в) Извеждане на екран номерата на автобусите и общата сума на билетите от превозите, извършени с тях, подредени в низходящ ред по сумата.
                   Главна функция main() -с меню  за избор на функции и проврка за състоянието на данните.  Използване на функции с предаване на параметри.
       
    • от Plamy Gerova
      Здравейте, може ли помощ за курсовата ми задача?
      съставете програма с функции за:
      а) въвеждане от клавиатурата във файл и в масив( чрез добавяне) данни за морски пътувания (до 25)- Морска гара Варна: маршрут, кораб-име, име на капитан, цени на билетите- I,II класа, брой пасажери в съответната класа, обща сума на продадените билети- през избран месец от годината.Извеждане текущото съдържание на масива(файла) на екрана.
      б) извеждане на екран данните за превозите на кораб по въведено от клавиатурата име на кораб(със запитване за справка)
      в) извеждане на екран данните за морско пътуване с най- голяма обща сума на продадени билети.
      Главна функция main()- с меня за избор на функции и проверка за състоянието та данните.Използване на локални променливи и функции с предаване на параметри. 
       
    • от Десислава Нешева
      Здравейте на всички. Имам въпрос, свързан с програмата си++. Имам матрица, на която търся сума от отрицателните елементи. Въпроса ми е как ще стане това нещо да се запише във файл, искам резултата да се показва само във файла, а не цялата матрица. Ето моя код:

      #include <iostream>

      #include<fstream>

      int main()

      {

      int a[10][10],m,n;

      int sum=0;

      std::cout<<"rows= ";

      std::cin>>m;

      std::cout<<"cols= ";

      std::cin>>n;

      for (int i=0; i<m; i++)

      for (int j=0; j<n; j++)

      {

      std::cout<<"a["<<i<<"]["<<j<<"]= ";

      std::cin>>a[j];

          if(a[j]<0) sum=sum+a[j];

      std::cout<<"sum= "<<sum;}

      return 0;

      }

      Благодаря, предварително !!!
    • от Boqn Tzonev
      #include <iostream> #include <iomanip> #include <string> #include <fstream> using namespace std; const int N = 5; struct player { string ime; string familia; string otbor; int nomer; int vk_golove; } igrachi[N], podredba; // Prototypes. int add_player(player a[]); void search_by_number(player a[], int &nomer_na_igracha); void search_by_team(player a[], string & ime_na_otbora); void klasirane(player a[]); void actual(player a[], int &nomer_na_igracha, string & ime_na_otbora); //********************************************** fstream igrachi_file; //********************************************** int add_player(player a[]) { int br; igrachi_file.open("igrachi.txt", ios::out | ios::app); // <--- As an "fstream" this needs to know if it is input or output. do { //cout << "\n Broi igrachi:"; cout << "\n Number of players:"; cin >> br; } while (br <= 0 || br > N); if (igrachi_file.fail()) { cout << "Error. The file is missing."; exit(1); } for (int i = 0; i < br; i++) { //cout << "Vuvedi ime na igrach:"; cout << " Enter player's first name: "; cin >> a[i].ime; igrachi_file << a[i].ime << endl; //cout << "Vuvedi familia na igrach:"; cout << " Enter a player's last name :"; cin >> a[i].familia; igrachi_file << a[i].familia << endl; //cout << "Vuvedi otbor na igracha:"; cout << " Enter a player's team: "; cin >> a[i].otbor; igrachi_file << a[i].otbor << endl; //cout << "Vuvedi nomer na igracha:"; cout << " Enter the player number: "; cin >> a[i].nomer; if (a[i].nomer > 99 || a[i].nomer < 1) { do { //cout << "Vuvedete nomer ot 1 do 99. \n"; cout << "Enter number 1 to 99. \n"; cin >> a[i].nomer; } while (a[i].nomer > 99 || a[i].nomer < 1); } igrachi_file << a[i].nomer << endl; //cout << "Vuvedi vkarani golove na igracha:"; cout << " Enter player goals scored: "; cin >> a[i].vk_golove; if (a[i].vk_golove < 0) { do { //cout << "Vuvedete golove >= 0 \n"; cout << "Enter goals >= 0 \n"; cin >> a[i].vk_golove; } while (a[i].vk_golove < 0); } igrachi_file << a[i].vk_golove << endl; } igrachi_file.close(); } void search_by_number(player a[], int &nomer_na_igracha) { int flag = 0; igrachi_file.open("igrachi.txt", ios::in); igrachi_file.seekg(0); if (igrachi_file.fail()) { cout << "Fail to open the file"; exit(1); } for (int i = 0; i < N; i++) { igrachi_file >> a[i].ime; igrachi_file >> a[i].familia; igrachi_file >> a[i].otbor; igrachi_file >> a[i].nomer; igrachi_file >> a[i].vk_golove; if (nomer_na_igracha == a[i].nomer) { cout << "Igrach: " << a[i].ime << " " << a[i].familia << "\nOtbor: " << a[i].otbor << "\nNomer: " << a[i]. nomer << "\nVkarani golove: " << a[i].vk_golove << endl; flag++; } } if (!flag) cout << endl << "Nqma takuv igrach!" << endl; igrachi_file.close(); } void search_by_team(player a[], string & ime_na_otbora) { int flag = 0; igrachi_file.open("igrachi.txt", ios::in); igrachi_file.seekg(0); if (igrachi_file.fail()) { cout << "Fail to open the file"; exit(1); } for (int i = 0; i < N; i++) { igrachi_file >> a[i].ime; igrachi_file >> a[i].familia; igrachi_file >> a[i].otbor; igrachi_file >> a[i].nomer; igrachi_file >> a[i].vk_golove; if (ime_na_otbora == a[i].otbor) { cout << "Igrach: " << a[i].ime << " " << a[i].familia << "\nOtbor: " << a[i].otbor << "\nNomer: " << a[i]. nomer << "\nVkarani golove: " << a[i].vk_golove << endl << endl; flag++; } } if (!flag) cout << endl << "Nqma takuv otbor!" << endl; igrachi_file.close(); } void klasirane(player a[]) { igrachi_file.open("igrachi.txt", ios::in); igrachi_file.seekg(0); // <--- Not needed as the file pointer is already at the beginning from the open statement. for (int i = 0; i < N; i++) { igrachi_file >> a[i].ime; igrachi_file >> a[i].familia; igrachi_file >> a[i].otbor; igrachi_file >> a[i].nomer; igrachi_file >> a[i].vk_golove; } cout << "ime" << setw(15) << "familia" << setw(15) << "otbor" << setw(15) << "nomer" << setw(15) << "vkarani golove" << endl; for (int i = 0; i < N; i++) { cout << a[i].ime << right << setw(15) << a[i]. familia << right << setw(15) << a[i]. otbor << right << setw(15) << a[i]. nomer << right << setw(15) << a[i].vk_golove << endl; } igrachi_file.close(); } int main() { int choice; int nomer_na_igracha; string ime_na_otbora, familia_na_igracha; player a[N]; do { cout << "\n================================================================================" << endl; cout << "\t\tMenu\n\n"; //cout << "= Izberete:\n"; cout << " Choose:\n"; //cout << "= 1. Dobavqne na igrachi\n"; cout << " 1. Add players\n"; //cout << "= 2. Spisuk s igrachite\n"; cout << " 2. List of players\n"; //cout << "= 3. Spravka za igrach po nomer\n"; cout << " 3. Reference for player by number\n"; //cout << "= 4. Spravka za igrach po otbor\n"; cout << " 4. Player report by team\n"; //cout << "= 5. Aktualizirane\n"; cout << " 5. Update\n"; //cout << "= 6. Krai\n"; cout << " 6. End\n"; cout << "\n================================================================================" << endl; cin >> choice; switch (choice) { case 1: { add_player(a); break; } case 2: { klasirane(a); break; } case 3: { cout << "Tursene po nomer: "; cin >> nomer_na_igracha; search_by_number(a, nomer_na_igracha); break; } case 4: { cout << "Tursene po otbor: "; cin >> ime_na_otbora; search_by_team(a, ime_na_otbora); break; } case 5: { cout<< "Update:"; cin>> nomer_na_igracha, ime_na_otbora; } break; } } while (choice != 6); } Здравейте имам нужда от малко помощ с моята курсова задача.Остана ми да направя единствено актуализацията ,но не мога да се справя. Ето и какво съм направил по актуализацията.Ще го постна като отговор долу.

      void actual(player a[], int nomer_na_igracha, string ime_na_otbora) { int i{}; fstream igrachi_file; igrachi_file.open("igrachi.txt", ios::in); while (getline(igrachi_file, a[i].familia)) // <--- Changed. { igrachi_file >> a[i].vk_golove; igrachi_file.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // <--- Requires header file <limits>. getline(igrachi_file, a[i].otbor); i++; } igrachi_file.close(); //cout << "Vuvedete igrachite chiqto informaciq iskate da redaktirate: "; cout << "Enter the players whose information you want to edit: "; //cin >> num; // <--- Not defined or used. //cout << "\n Ime: "; cout << "\n Name: "; std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // <--- Requires header file <limits>. getline(cin, a[i].familia); //cout << "\n Golove: "; cout << "\n Goals: "; cin >> a[i].vk_golove; // <--- goals. cin.get(); cout << endl << endl; } Кодът не е правилен.Да се види до къде съм стигнал.
    • от kirilov_philip
      Моля за помощ!!!
      Задача: Даден е двумерен масив A с m реда и n стълба. Да се напише програма на C++, която създава нов масив B, като стойността на елемента Bi(i e долен индекс) е равна на индекса на най-малката стойност в i-ия ред на A.
      Стигнах дотук.
      #include <iostream>
      #include <stdlib.h>
      using namespace std;
      int main()
      {
          int m, n;
          cout << "m="; cin >> m;
          cout << "n="; cin >> n;
          int A[100][100];
          int i, j;
          for(i=0;i<m;i++)
              for (j = 0; j < n; j++)
              {
                  cout << "A[" << i << "][" << j << "]="; cin >> A[j];
              }
      }
  • Дарение

×

Информация

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