система голосования с выводом результатов
такс, вот код который просто определяет победителя по результатам голосования. А мне нужно сделать из него систему для формирования программы концерта по заказу. Пользователи (фанаты) выбирают песни из предложенного списка. Каждый пользователь может выбрать любое количество песен. Когда время подачи заявок заканчивается, формируется программа концерта, включая песни, набравшие наибольшее количество заказов (количина песен определяется заранее)Классы: песни, исполнители, фанаты, голоса... Функции: CRUD песни, CRUD исполнителей, голосование... : список песен на концерт по заказу, самые популярные исполнители, активные фанаты CRUD (create, read, update, delete - "созидать, читать, обновлять, удалять") - акроним, обозначающий четыре базовые функции, используются в работе с данными. ( это сделать как ООП) вот моя попытка:
main:
#include <iostream>
#include "class.cpp"
#include <ctime>
using namespace std;
int main()
{
srand((unsigned)time(NULL));
int **arr = new int* [N];
Ref::inarr(arr, N, M);
Ref::min_max(arr, N, M);
Ref:: min_rating(arr, N, M);
Ref:: third_candidate(arr, M);
Ref::sum_electorate(arr, N, M);
cout << "\n\n" << endl;
system ("PAUSE");
return 0;
}
Class.cpp
#include "class.h"
#include <iostream>
#include <iomanip>
#include<cstdlib>
using namespace std;
const int N=5;
const int M=6;
void Ref::inarr(int **mas, int n, int m) //
{
int a = 1;
int b = 150;
int i=6;
for(int i=0; i<m; i++)
{
mas[i]=new int [m];
}
cout << setw(70) << "1-й канд.: 2-й канд.: 3-й канд.: 4-й канд: 5-й канд:\n" << endl;
for(int i=0; i<m; i++){
cout << i+1 << "-я композиция: ";
for(int j=0; j<n; j++){
mas[i][j]=rand()%(10*i+50);
cout << setw(9) << mas[i][j] << " ";
}
cout << "\n" << endl;
}
}
void min_max(int **mas, int n, int m)
{
int min2, max2, min5, max5;
int i_min2[M];
int i_max2[M];
int i_min5[M];
int i_max5[M];
int count1=0;
int count2=0;
int count3=0;
int count4=0;
min2=mas[1][0];
for(int i=0; i<n; i++){
if(min2>mas[1][i]){
min2=mas[1][i];
}
}
max2=mas[1][0];
for(int i=0; i<n; i++){
if(max2<mas[1][i])
max2=mas[1][i];
}
for(int i=0; i<n; i++){
if(max2==mas[1][i])
i_max2[count1++]=i;
if(min2==mas[1][i])
i_min2[count2++]=i;
}
cout << "2-я композиция: " << endl;
cout << setfill('-') << setw(70);
cout << "\nМаксимальное количество голосов составляет: " << max2 << " его набрал " << endl;
for(int i=0; i<count1; i++)
cout << i_max2[i]+1 << "-й кандидат " << endl;
cout << endl;
cout << "Минимальное количество голосов составляет: " << min2 << " его набрал " << endl;
for(int i=0; i<count2; i++)
cout << i_min2[i]+1 << "-й кандидат" << endl;
min5=mas[4][0];
for(int i=0; i<n; i++){
if(min5>mas[4][i])
min5=mas[4][i];
}
max5=mas[4][0];
for(int i=0; i<n; i++){
if(max5<mas[4][i])
max5=mas[4][i];
}
for(int i=0; i<n; i++){
if(max5==mas[4][i])
i_max5[count3++]=i;
if(min5==mas[4][i])
i_min5[count4++]=i;
}
cout << "\n\n5-я композиция: " << endl;
cout << setfill('-') << setw(70);
cout << "\nМаксимальное количество голосов составляет: " << max5 << " его набрал " << endl;
for(int i=0; i<count3; i++)
cout << i_max5[i]+1 << "-й кандидат " << endl;
cout << endl;
cout << "Минимальное количество голосов составляет: " << min5 << " его набрал " << endl;
for(int i=0; i<count4; i++)
cout << i_min5[i]+1 << "-й кандидат" << endl;
}
void min_rating(int **mas, int n, int m)
{
int i_min[N];
int min=mas[0][0];
int count=0;
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
if(min>mas[i][j])
min=mas[i][j];
}
}
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
if(min==mas[i][j])
i_min[count++]=j;
}
}
cout << "\n\nНаименьший рейтинг составляет: " << min << endl;
for(int i=0; i<count; i++)
cout << "у " << i_min[i]+1 << "-го кандидата " << endl;
}
void third_candidate(int **mas, int m)
{
int max=mas[0][2];
int i_max=0;
for(int i=0; i<m; i++){
if(max<mas[i][2]){
max=mas[i][2];
i_max=i;
}
}
cout << "\n\nМаксимальное число голосов 3-го кандидата: " << max << "\tв композиции № " << i_max+1 << "\n\n"<< endl;
}
void sum_electorate(int **mas, int n, int m)
{
int sum=0;
for(int i=0; i<m; i++)
{
cout << "В " << i+1 << "-за эту композицию проголосовали: ";
for(int j=0; j<n; j++)
{
sum+=mas[i][j];
}
cout << sum << " человек"<< endl;
sum=0;
}}
class.h
using namespace std;
class Ref {
private:
int N = 5;
int M = 6;
public:
static void inarr(int **, int, int);
static void min_max(int **, int, int);
static void min_rating(int **, int, int);
static void third_candidate(int **, int);
static void sum_electorate(int **, int, int);
};
Ответы (1 шт):
Ладно, начну - а дальше сами. У вас по условию есть сущности песни, исполнители, рейтинг/плейлист. Фанаты - это не сущность, если только вы не будете запоминать фанатов. В результате (все поля пока делаю public):
class Artist
{
public:
uint16_t id;
std::string name;
};
class Song
{
private:
std::vector<uint8_t> rating; // массив хранящий оценки
// если рейтинг просто в количестве голосов - то просто
uint16_t rating;
public:
uint16_t id;
uint16_t duration;
std::set<uint16_t> art; // исполнителей может быть несколько
std::string title;
double GetRating(void); // расчет средней оценки (сумма оценок/количество)
// или просто возврат rating
void AddVoice(void); // проголосовать за песню
bool operator<(const Song& s);
};
class RateSystem
{
public:
std::vector<Song> songs;
}