cpp: pointer

发布时间 2023-04-22 00:39:00作者: ®Geovin Du Dream Park™
/*****************************************************************//**
 * \file   geovindu.h
 * \brief  业务操作方法
 *
 * \author geovindu,Geovin Du
 * \date   2023-04-05
***********************************************************************/
/*
* 注释插件
https://www.doxygen.nl/download.html
https://computingonplains.wordpress.com/doxygen-and-visual-studio/
https://marketplace.visualstudio.com/items?itemName=sergeb.GhostDoc
https://marketplace.visualstudio.com/items?itemName=FinnGegenmantel.doxygenComments
https://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/comments/



*/

#ifndef GEOVINDU_H
#define GEOVINDU_H
#include <vector> // #include directive
#include <string>
#include <iostream>
#include <string.h>
#include <list>
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<cstdlib>
#include<cstring>
#include<iomanip>
#include <vector> 
#include <memory> 





//#include <sqlite3.h>
#include "PigInfo.h"
#include "PigNameInfo.h"
#include "CinemaScore.h"
#include "OpenDoor.h"
#include "LeapYear.h"
#include "RandomlySampled.h"
#include "NumberLottery.h"  
#include "InputNumberMax.h"
#include "DeskKnock.h"
#include "NarcissisticNumber.h"
#include "NarcissisticInfo.h"
#include "NarcissisticList.h"
#include "MultiplicationTables.h"
#include "CardinalDirection.h"
#include "CSVfilemanagement.h"
#include "ATMdemo.h"
#include "csvstream.h"
//#include "csvparser.h"
#include "StudentArry.h"
#include "student.h"
#include "StudentMenu.h"
#include "StudentList.h"

//#include "GeovinStudent.h"



using namespace std;



/**
* @brief 类库空间名
* geovindu edit
*
*/
namespace geovindu
{






	/**
	* @brief 简要说明文字
	*/
	enum class colors : short { red, blue, purple, azure };
	/**
	* @brief 简要说明文字
	*/
	struct RGB
	{
		short r{ 0 };  // member initialization
		short g{ 0 };
		short b{ 0 };
	};


	/// <summary>
   /// 信息
   /// </summary>
	struct GeovinStudent
	{

		/// <summary>
		/// 姓名
		/// </summary>
		std::string studentName;
		/// <summary>
		/// 语文
		/// </summary>
		int chineseScore;
		/// <summary>
		/// 英语
		/// </summary>
		int englishScore;
		/// <summary>
		/// 数学
		/// </summary>
		int mathScore;
		/// <summary>
		/// 
		/// </summary>
		int computerScore;
		/// <summary>
		/// 个人总分
		/// </summary>
		int studentTotalScore = chineseScore + englishScore + mathScore + computerScore; //计算 无效
		/// <summary>
		/// 平均
		/// </summary>
		int subjectAverage;
		/// <summary>
		/// 名次
		/// </summary>
		int rankingScore;



	};


	/// <summary>
	/// 语文成绩排序,降  从大到小
	/// </summary>
	/// <param name="a"></param>
	/// <param name="b"></param>
	/// <returns></returns>
	bool cmpChineseAsc(const GeovinStudent* a, const GeovinStudent* b)
	{
		return a->chineseScore > b->chineseScore;
	}
	/// <summary>
	/// 语文成绩排序,升 从小到大
	/// </summary>
	/// <param name="a"></param>
	/// <param name="b"></param>
	/// <returns></returns>
	bool cmpChineseDesc(GeovinStudent* a, GeovinStudent* b)
	{
		return a->chineseScore < b->chineseScore;
	}

	/// <summary>
	/// 英语成绩排序,降
	/// </summary>
	/// <param name="a"></param>
	/// <param name="b"></param>
	/// <returns></returns>
	bool cmpEnglishDesc(GeovinStudent* a, GeovinStudent* b)
	{
		return a->englishScore > b->englishScore;
	}
	/// <summary>
	/// 英语成绩排序,升
	/// </summary>
	/// <param name="a"></param>
	/// <param name="b"></param>
	/// <returns></returns>
	bool cmpEnglishAsc(GeovinStudent* a, GeovinStudent* b)
	{
		return a->englishScore < b->englishScore;
	}

	/// <summary>
	/// 数学成绩排序,降
	/// </summary>
	/// <param name="a"></param>
	/// <param name="b"></param>
	/// <returns></returns>
	bool cmpMathDesc(GeovinStudent* a, GeovinStudent* b)
	{
		return a->mathScore > b->mathScore;
	}
	/// <summary>
	/// 数学成绩排序,升
	/// </summary>
	/// <param name="a"></param>
	/// <param name="b"></param>
	/// <returns></returns>
	bool cmpMathAsc(GeovinStudent* a, GeovinStudent* b)
	{
		return a->mathScore < b->mathScore;
	}


	/// <summary>
	/// 计算机成绩排序,降
	/// </summary>
	/// <param name="a"></param>
	/// <param name="b"></param>
	/// <returns></returns>
	bool cmpComputerDesc(GeovinStudent* a, GeovinStudent* b)
	{
		return a->computerScore > b->computerScore;
	}
	/// <summary>
	/// 计算机成绩排序,升
	/// </summary>
	/// <param name="a"></param>
	/// <param name="b"></param>
	/// <returns></returns>
	bool cmpComputerAsc(GeovinStudent* a, GeovinStudent* b)
	{
		return a->computerScore < b->computerScore;
	}

	/// <summary>
	/// 个人总分成绩排序,降
	/// </summary>
	/// <param name="a"></param>
	/// <param name="b"></param>
	/// <returns></returns>
	bool cmpTotalScoreDesc(GeovinStudent* a, GeovinStudent* b)
	{
		return a->studentTotalScore > b->studentTotalScore;
	}
	/// <summary>
	/// 个人总分成绩排序,升
	/// </summary>
	/// <param name="a"></param>
	/// <param name="b"></param>
	/// <returns></returns>
	bool cmpTotalScoreAsc(GeovinStudent* a, GeovinStudent* b)
	{
		return a->studentTotalScore < b->studentTotalScore;
	}







	/**
	*@brief if 比较小猪等作业 实现方法业务
	* edit: geovindu
	*/
	class Geovin
	{

	



	private:



	public:
		/**
		*@brief
		*三只小猪重量比较方法(函数)
		* eidt: geovindu
		*/
		void getPig();

		/// <summary>
		/// 
		/// </summary>
		/// <param name="a"></param>
		/// <param name="b"></param>
		/// <returns></returns>
		bool compareTwoStudents(const GeovinStudent* a,const GeovinStudent* b);
		/// <summary>
		/// 
		/// </summary>
		/// <param name="a"></param>
		/// <param name="n"></param>
		void computeRanks(const GeovinStudent (*a)[], int n);
		/// <summary>
		/// 
		/// </summary>
		void DisplayVectorStudent();


	};
	// Function for comparing two students according
	// to given rules
	bool Geovin::compareTwoStudents(const GeovinStudent *a,const GeovinStudent *b)
	{
		// If total marks are not same then
		// returns true for higher total
		if (a->studentTotalScore != b->studentTotalScore)
			return a->studentTotalScore > b->studentTotalScore;

		// If marks in Maths are same then
		// returns true for higher marks
		if (a->chineseScore != b->chineseScore)
			return a->chineseScore > b->chineseScore;

		if (a->computerScore != b->computerScore)
			return a->computerScore > b->computerScore;

		if (a->englishScore != b->englishScore)
			return a->englishScore > b->englishScore;

		return (a->mathScore > b->mathScore);
	}

	// Fills total marks and ranks of all Students
	void Geovin::computeRanks(const GeovinStudent (*a)[], int n)
	{
		// To calculate total marks for all Students
		//for (int i = 0; i < n; i++)
			//a[i]->studentTotalScore = a[i]->chineseScore + a[i]->computerScore + a[i]->englishScore+a[i]->mathScore;

		// Sort structure array using user defined
		// function compareTwoStudents()
		//sort((*a), (*a) + n, compareTwoStudents);
		//sort(bgein(a), end(a), compareTwoStudents);

		// Assigning ranks after sorting
		for (int i = 0; i < n; i++)
		{
			//a[i]->rankingScore = i + 1;
		}
	}
	/// <summary>
	/// 
	/// </summary>
	void Geovin::DisplayVectorStudent()
	{
		//const GeovinStudent (*slist) [3];
		//slist = { };
		GeovinStudent* student = new GeovinStudent;
		student->studentName = "geovin";
		student->chineseScore = 25;
		student->computerScore = 45;
		student->englishScore = 95;
		student->mathScore = 75;	
	
	    
		vector<GeovinStudent *> stu;
		stu.push_back(student);


		GeovinStudent* student2 = new GeovinStudent;
		student2->studentName = "张三";
		student2->chineseScore = 55;
		student2->computerScore = 89;
		student2->englishScore = 94;
		student2->mathScore = 62;
		stu.push_back(student2);

		GeovinStudent* student3 = new GeovinStudent;
		student3->studentName = "涂聚文";
		student3->chineseScore = 35;
		student3->computerScore = 85;
		student3->englishScore = 45;
		student3->mathScore = 95;
		stu.push_back(student3);

		//GeovinStudent* stu1 = new GeovinStudent;

		//

		// sort(begin(stu),end(stu), cmpChineseAsc);
		 
		//vector<GeovinStudent> slist;
		//vector<GeovinStudent*> slist;
	 //	GeovinStudent student;
		//student.studentName = "geovin";
		//student.chineseScore = 25;
		//student.computerScore = 45;
		//student.englishScore = 95;
		//student.mathScore = 75;
		//slist.push_back(student);
		//student.studentName = "张三";
		//student.chineseScore = 55;
		//student.computerScore = 65;
		//student.englishScore = 45;
		//student.mathScore = 55;
		//slist.push_back(student);
		//student.studentName = "涂聚文";
		//student.chineseScore = 25;
		//student.computerScore = 85;
		//student.englishScore = 85;
		//student.mathScore = 75;
		//slist.push_back(student);

		//cout << "姓名" << "语文" << "英语" << "数学"<<"总分" << endl;
		//for (auto du : slist)
		//{
		//	cout << du.studentName << du.chineseScore << du.computerScore << du.englishScore << du.mathScore << du.studentTotalScore << endl;


		//}

		cout << "姓名\t" << "语文\t" << "计算机\t" << "英语\t" << "数学\t"<<"总分\t" << endl;
		 for (auto du : stu)
		{
			 du->studentTotalScore = du->chineseScore + du->englishScore + du->mathScore + du->computerScore;
 			cout << du->studentName<<"\t" << du->chineseScore << "\t" << du->computerScore << "\t" << du->englishScore << "\t" << du->mathScore << "\t" << du->studentTotalScore << endl;

		}
		 sort(begin(stu), end(stu), cmpMathDesc);
		 //sort(slist,slist.size(), cmpMathAsc)
		 //sort(stu, stu.size(), cmpMathAsc)
		// computeRanks(stu, 3);
		 for (auto du : stu)
		 {
			 du->studentTotalScore = du->chineseScore + du->englishScore + du->mathScore + du->computerScore;
			 cout << du->studentName << "\t" << du->chineseScore << "\t" << du->computerScore << "\t" << du->englishScore << "\t" << du->mathScore << "\t" << du->studentTotalScore << endl;

		 }

	}