cpp:Double Dimensional Array using vector

发布时间 2023-04-17 00:50:30作者: ®Geovin Du Dream Park™

 

// StudentArry.cpp : 
//练习案例:学生数组成绩显示方法  StudentArry
//案例描述:学生数组成绩显示方法


#include "StudentArry.h"

#include <iostream> 
#include <string> 
#include <vector> 
#include <memory> 
#include <iostream> 
#include <list> 


using namespace std;


/**
 * @brief
 * \author geovindu.
 * \date 20230-4-10
 */
namespace geovindu
{

	/// <summary>
	/// 学生成绩
	/// 数组用法
	/// </summary>
	void StudentArry::displayStudent()
	{

		//
		int SubjectScore = 0;
		//
		int grossScore = 0;

		string name[5] = { "张三","李四","王五","涂聚文","Geovin" };
		const int nameCount = size(name);
		string Subject[4] = { "语文","数学","英语","物理" };
		const int SubjectCount = size(Subject);
		string strname = "";
		//前人数 后分数
		int ScoreList[nameCount][SubjectCount] = { { 100,100,100,99 },{ 90,50,100,60 },{ 60,70,80,77 },{ 20,30,40,27 },{ 10,20,50,17 } };

		//表标题
		cout << "\t";
		for (int i = 0; i < SubjectCount; i++)
		{

			cout << Subject[i] + "\t";

		}
		cout << "总分";
		cout << endl;
		//内容列表
		for (int i = 0; i < nameCount; i++)
		{
			grossScore = 0;
			cout << name[i] << "\t";
			for (int j = 0; j < SubjectCount; j++)
			{
				cout << ScoreList[i][j] << "\t";
				grossScore = grossScore + ScoreList[i][j];
			}
			cout << grossScore;
			cout << endl;

		}
		//求总分和平均分
		int sum = 0;
		int ver[SubjectCount];
		cout << "科总分  ";
		for (int i = 0; i < SubjectCount; i++)
		{
			SubjectScore = 0;
			for (int j = 0; j < nameCount; j++)
			{
				SubjectScore = SubjectScore + ScoreList[j][i];
			}
			sum = sum + SubjectScore;
			ver[i] = SubjectScore / nameCount;
			cout << SubjectScore << "\t";
		}
		cout << sum;
		cout << endl;
		//显示分均分行
		cout << "平均分  ";
		for (int i = 0; i < SubjectCount; i++)
		{
			cout << ver[i] << "\t";
		}
		cout << endl;
		cout << "***********************************" << endl;

		/*
		for (int i = 0; i < 3; i++)
		{
			ge = 0;
			for (int j = 0; j < 3; j++)
			{
				ge = ge + chengji[i][j];

			}

			strname = name[i] + to_string(ge);
			cout << name[i] << "个人总分:" << ge << endl;
			//cout <<"个人总分:"<< strname << endl;

			yuwen = 0;
			for (int j = 0; j < 3; j++)
			{
				yuwen = yuwen + chengji[j][i];

			}
			cout << cheng[i] << "课程总分数:" << yuwen << endl;

		}
		*/


	}
	/// <summary>
	///  学生成绩
	/// </summary>
	/// <param name="name">学生姓名列表</param>
	/// <param name="Subject">课程列表</param>
	/// <param name="ScoreList">分数列表</param>
	void StudentArry::displayStudent(string name[5], string Subject[4], int ScoreList[5][4])
	{
		//
		int SubjectScore = 0;
		//
		int grossScore = 0;
		const int nameCount = sizeof(name);
		const int SubjectCount = sizeof(Subject);
		string strname = "";
		//表标题
		cout << "\t";
		for (int i = 0; i < SubjectCount; i++)
		{

			cout << Subject[i] + "\t";

		}
		cout << "总分";
		cout << endl;
		//内容列表
		for (int i = 0; i < nameCount; i++)
		{
			grossScore = 0;
			cout << name[i] << "\t";
			for (int j = 0; j < SubjectCount; j++)
			{
				cout << ScoreList[i][j] << "\t";
				grossScore = grossScore + ScoreList[i][j];
			}
			cout << grossScore;
			cout << endl;

		}
		//求总分和平均分
		int sum = 0;
		int ver[SubjectCount];
		cout << "科总分  ";
		for (int i = 0; i < SubjectCount; i++)
		{
			SubjectScore = 0;
			for (int j = 0; j < nameCount; j++)
			{
				SubjectScore = SubjectScore + ScoreList[j][i];
			}
			sum = sum + SubjectScore;
			ver[i] = SubjectScore / nameCount;
			cout << SubjectScore << "\t";
		}
		cout << sum;
		cout << endl;
		//显示分均分行
		cout << "平均分  ";
		for (int i = 0; i < SubjectCount; i++)
		{
			cout << ver[i] << "\t";
		}
		cout << endl;
		cout << "***********************************" << endl;

	
	}

	/// <summary>
	///  学生成绩
	/// </summary>
	/// <param name="name">学生姓名列表</param>
	/// <param name="Subject">课程列表</param>
	/// <param name="ScoreList">分数列表</param>
	void StudentArry::displayStudentVector(vector<string> name, vector<string>Subject, vector<vector<int>> ScoreList)
	{
	
		//
		int SubjectScore = 0;
	
		//
		int grossScore = 0;
		const int nameCount = name.size();
		const int SubjectCount = Subject.size();
		//const int vCout = SubjectCount;// Subject.size();
		const int geovindu= Subject.size();
		string strname = "";
		//表标题
		cout << "\t";
		for (int i = 0; i < SubjectCount; i++)
		{

			cout << Subject[i] + "\t";

		}
		cout << "总分";
		cout << endl;
		//内容列表
		for (int i = 0; i < nameCount; i++)
		{
			grossScore = 0;
			cout << name[i] << "\t";
			for (int j = 0; j < SubjectCount; j++)
			{
				cout << ScoreList[i][j] << "\t";
				grossScore = grossScore + ScoreList[i][j];
			}
			cout << grossScore;
			cout << endl;

		}
		//求总分和平均分
		int sum = 0;
		const int vcout = Subject.size();
		int* verScore =new int[vcout];
		cout << "科总分  ";
		for (int i = 0; i < SubjectCount; i++)
		{
			SubjectScore = 0;
			for (int j = 0; j < nameCount; j++)
			{
				SubjectScore = SubjectScore + ScoreList[j][i];
			}
			sum = sum + SubjectScore;
			verScore[i] = SubjectScore / nameCount;
			cout << SubjectScore << "\t";
		}
		cout << sum;
		cout << endl;
		//显示分均分行
		cout << "平均分  ";
		for (int i = 0; i < SubjectCount; i++)
		{
			cout << verScore[i] << "\t";
		}
		cout << endl;
		cout << "***********************************" << endl;

	
	
	}

}




// StudentArry.h : 此文件包含 "StudentArry" 类。学生数组成绩显示方法 C++ 14
// 2023年4月9日 涂聚文 Geovin Du edit.
//(1)vec1.size() 就是”二维数组”的行数
//(2)vec1[0].size() 就是”二维数组”的列数
//vector<vector<double>> geovindu


#pragma once
#ifndef STUDENTARRY_H 
#define STUDENTARRY_H 

#include <iostream> 
#include <string> 
#include <vector> 
#include <memory> 
#include <iostream> 
#include <string> 
#include <ctime> 
#include <cstdlib> 
#include <list>

using namespace std;


/**
*
*/
namespace geovindu
{


	/// <summary>
	/// 学生数组成绩显示方法
	/// </summary>
	class StudentArry
	{

	private:
		

	public:

		void displayStudent();
		/// <summary>
		///  学生成绩
		/// </summary>
		/// <param name="name">学生姓名列表</param>
		/// <param name="Subject">课程列表</param>
		/// <param name="ScoreList">分数列表</param>
		void displayStudent(string name[5], string Subject[5], int ScoreList[5][4]);
		/// <summary>
		///  学生成绩
		/// </summary>
		/// <param name="name">学生姓名列表</param>
		/// <param name="Subject">课程列表</param>
		/// <param name="ScoreList">分数列表</param>
		void displayStudentVector(vector<string> name, vector<string>Subject, vector<vector<int>> ScoreList);



	};

}

#endif

  

	void Geovin::displayScore()
	{


		string name[5] = { "张三","李四","王五","涂聚文","Geovin" };
		string Subject[4] = { "语文","数学","英语","物理" };
		int ScoreList[5][4] = { { 100,100,100,99 },{ 90,50,100,60 },{ 60,70,80,77 },{ 20,30,40,27 },{ 10,20,50,17 } };
		StudentArry arry;
		//1
		arry.displayStudent();
		/**/
		vector<string> sname;
		vector<string> sbject;

		int c = 0;
		for (auto i : name)
		{
			sname.push_back(i);
			//cout << i << endl;
			//sname[c] = i;
			c++;
		}
		c = 0;
		for (auto i : Subject)
		{
			sbject.push_back(i);
			//sbject[c] = i;
			//cout << i << endl;
			c++;
		}

		
		
		const int nameCount = name->size();
		const int SubjectCount = Subject->size();
		vector<int> w(10, 1);  // w: width  即列数
		vector< vector<int> > arr(9, w);   // 9行10列 二维数组
		//vector<vector<int>> sscore[5][4];
		vector<vector<int> > sscore(nameCount, vector<int>(SubjectCount));
		for (int i = 0; i < nameCount; i++)
		{
			
			for (int j = 0; j < SubjectCount; j++)
			{

				//cout << ScoreList[i][j] << endl;
				int geovindu = ScoreList[i][j];
				sscore[i][j] = geovindu;// ;
				
			}

		}
		//显示
		/*
		for (int i = 0; i < sscore.size(); ++i) {
			for (int j = 0; j < sscore[0].size(); ++j) {
				cout << sscore[i][j] << "  ";
			}
			cout << endl;
		}
		*/
		arry.displayStudentVector(sname, sbject, sscore);
		

	}

  

调用:

	Geovin geovin;
	//成绩显示
	geovin.displayScore();

  

输出: