/*****************************************************************//**
* \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;
}
}