Структурирование программы - C#
Формулировка задачи:
Здравствуйте, помогите пожалуйста, нормально структурировать программу, я не совсем понимаю, что должно находиться в классе Спортсменов, что в классе Программы. И еще возможно кто-то может помочь отсортировать эти объекты по переменной power, с помощью интерфейса IComparable, функция сортировки у меня есть, но преподаватель сказал, что должен быть реализован этот интерфейс. Заранее благодарю!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OOP_lab_1
{
class Sportsmen : IComparable<Sportsmen>, ICloneable
{
public string name;
public int age;
public int energy;
public int power;
public string gender;
public double height;
public double weight;
public string muscles;
public Sportsmen(string name, int age, int energy, int power, string gender, double height, double weight, string muscles)
{
this.name = name;
this.age = age;
this.energy = energy;
this.power = power;
this.gender = gender;
this.height = height;
this.weight = weight;
this.muscles = muscles;
}
public object Clone()
{
Sportsmen newsport = new Sportsmen();
newsport.name = this.name;
newsport.age = this.age;
newsport.energy = this.energy;
newsport.power = this.power;
newsport.gender = this.gender;
newsport.height = this.height;
newsport.weight = this.weight;
newsport.muscles = this.muscles;
return newsport;
}
public int CompareTo(Sportsmen other)
{
if (this.power > other.power)
return 1;
if (this.power < other.power)
return -1;
return 0;
}
public static bool operator ==(Sportsmen sp1, Sportsmen sp2)
{
if ((sp1.name == sp2.name) && (sp1.age == sp2.age) && (sp1.energy == sp2.energy) && (sp1.power == sp2.power) && (sp1.gender == sp2.gender) && (sp1.height == sp2.height) && (sp1.weight == sp2.weight) && (sp1.muscles == sp2.muscles)) return true;
return false;
}
public static bool operator !=(Sportsmen sp1, Sportsmen sp2)
{
if ((sp1.name == sp2.name) && (sp1.age == sp2.age) && (sp1.energy == sp2.energy) && (sp1.power == sp2.power) && (sp1.gender == sp2.gender) && (sp1.height == sp2.height) && (sp1.weight == sp2.weight) && (sp1.muscles == sp2.muscles)) return true;
return false;
}
public Sportsmen(){}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("\t\t\t\t***Початок роботи програми***\n\n");
main_Menu();
}
static void main_Menu()
{
Console.WriteLine("Виберiть дiю");
Console.WriteLine("1. Додати спортсмена");
Console.WriteLine("2. Вибрати спортсмена");
Console.WriteLine("3. Створити випадкових спотрсменiв");
Console.WriteLine("4. Вiдсортувати спотрсменiв");
Console.WriteLine("5. Додати спортсмена на i-ту позицiю");
Console.WriteLine("6. Порiвняти спортсменiв");
Console.WriteLine("7. Клонувати спортсмена");
Console.WriteLine("0. Вийти");
int choice = 1;
int i = 1;
int.TryParse(Console.ReadLine(), out choice);
if (choice == 0)
{
Console.WriteLine("\t\t\t\t***Кiнець роботи програми***\n\n");
Console.ReadKey();
Environment.Exit(0);
}
switch (choice)
{
case 0:
return;
case 1:
Console.Clear();
sportsmen.Add(AddSportsmen());
main_Menu();
break;
case 2:
Console.Clear();
Select();
main_Menu();
break;
case 3:
Console.Clear();
random_sport();
Console.Clear();
main_Menu();
break;
case 4:
Console.Clear();
Sort1();
Console.Clear();
main_Menu();
break;
case 5:
Console.Clear();
Number();
Console.Clear();
main_Menu();
break;
case 6:
Console.Clear();
Compare();
Console.Clear();
main_Menu();
break;
case 7:
Console.Clear();
Console.WriteLine("Введiть номер спортсмена, якого потрiбно клонувати: ");
int.TryParse(Console.ReadLine(), out i);
sportsmen.Add((Sportsmen)sportsmen[i - 1].Clone());
Console.Clear();
main_Menu();
break;
}
}
public static List<Sportsmen> sportsmen = new List<Sportsmen>();
static void random_sport()
{
string[] array_m = { "Петя", "Вася", "Коля", "Iгор", "Антон", "Ярослав", };
string[] array_w = { "Таня", "Ipa", "Марiчка", "Настя", "Катя", "Надя" };
string[] mus = { "Руки", "Спина", "Ноги", "Плечi", "Груди", "Прес" };
Random rnd = new Random();
Console.WriteLine("Введiть кiлькiсть випадкових спортсменiв");
int num = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < num; i++)
{
int rand = rnd.Next(0, 5);
int stat = rnd.Next(1, 3);
if (stat == 1)
{
string gender = "Чоловiк";
string name = array_m[rand];
string muscles = mus[rand];
int age = rnd.Next(16, 60);
int energy = rnd.Next(1, 100);
int power = rnd.Next(1, 100);
double height = rnd.Next(160, 200);
double weight = rnd.Next(55, 100);
sportsmen.Add(new Sportsmen(name, age, energy, power, gender, height, weight, muscles));
}
if (stat == 2)
{
string gender = "Жiнка";
string name = array_w[rand];
string muscles = mus[rand];
int age = rnd.Next(16, 60);
int energy = rnd.Next(1, 100);
int power = rnd.Next(1, 100);
double height = rnd.Next(155, 190);
double weight = rnd.Next(40, 90);
sportsmen.Add(new Sportsmen(name, age, energy, power, gender, height, weight, muscles));
}
}
}Решение задачи: «Структурирование программы»
textual
Листинг программы
static Sportsmen AddSportsmen()
{
Console.WriteLine("\t\t\t\t***Вiтаємо в спортзалi!***\n\nВведiть ваше iм'я:");
bool x = true;
string name = Console.ReadLine();
Console.Clear();
Console.WriteLine("\nВведiть ваш вiк");
int age;
while (!Int32.TryParse(Console.ReadLine(), out age) || x != false)
{
if (age < 16 || age > 60)
{
Console.Write("\nНеприпустимий вiк, повторiть спробу: ");
}
else
{
x = false;
break;
}
}
Console.Clear();
Console.WriteLine("\nВведiть кiлькiсть енергiї (вiд 1 до 100):");
int energy;
x = true;
while (!Int32.TryParse(Console.ReadLine(), out energy) || x != false)
{
if (energy < 0 || energy > 100)
{
Console.Write("\nНе коректне введення, повторiть спробу: ");
}
else
{
x = false;
break;
}
}
Console.Clear();
Console.WriteLine("\nВведiть рiвень сили (вiд 1 до 100):");
int power;
x = true;
while (!Int32.TryParse(Console.ReadLine(), out power) || x != false)
{
if (power < 0 || power > 100)
{
Console.Write("\nНекоректне введення, повторiть спробу: ");
}
else
{
x = false;
break;
}
}
Console.Clear();
Console.WriteLine("\nВведiть вашу стать: \n 1) Чоловiк \n 2) Жiнка");
string gender;
int zaza = Convert.ToInt32(Console.ReadLine());
if (zaza == 1)
{
gender = "Чоловiк";
}
else
{
gender = "Жiнка";
}
Console.Clear();
Console.WriteLine("\nВведiть ваш зрiст:");
int height;
x = true;
while (!Int32.TryParse(Console.ReadLine(), out height) || x != false)
{
if (height < 160 || height > 200)
{
Console.Write("\nНекоректне введення , повторiть спробу: ");
}
else
{
x = false;
break;
}
}
Console.Clear();
Console.WriteLine("\nВведiть вашу вагу:");
int weight;
x = true;
while (!Int32.TryParse(Console.ReadLine(), out weight) || x != false)
{
if (weight < 40 || weight > 100)
{
Console.Write("\nНекоректне введення , повторiть спробу: ");
}
else
{
x = false;
break;
}
}
Console.Clear();
Console.WriteLine("\nЩо сьогоднi будете тренувати?");
Console.WriteLine(" 1) Прес\n 2) Груди \n 3) Плечi\n 4) Спину\n 5) Руки\n 6)Ноги\n");
string muscles = "sdf";
int n = Convert.ToInt32(Console.ReadLine());
switch (n)
{
case 1:
muscles = "Прес";
break;
case 2:
muscles = "Груди";
break;
case 3:
muscles = "Плечi";
break;
case 4:
muscles = "Спина";
break;
case 5:
muscles = "Руки";
break;
case 6:
muscles = "Ноги";
break;
}
Console.Clear();
Console.Clear();
return new Sportsmen(name, age, energy, power, gender, height, weight, muscles);
}
static void all()
{
int i = 0;
foreach (Sportsmen d in sportsmen)
{
Console.WriteLine(new string('*', 55));
Console.WriteLine("Iм'я: {0}\nВiк: {1}\nЕнергiя: {2}\nСила: {3}\nСтать: {4}\nЗрiст: {5}\nВага: {6}\nТренує: {7}\n", sportsmen[i].name, sportsmen[i].age, sportsmen[i].energy, sportsmen[i].power, sportsmen[i].gender, sportsmen[i].height, sportsmen[i].weight, sportsmen[i].muscles);
Console.WriteLine(new string('*', 55));
i++;
}
Console.ReadKey();
Console.Clear();
main_Menu();
}
static void Compare()
{
Console.WriteLine("Введiть номери студентiв, яких потрiбно порiвняти");
int x, y;
int.TryParse(Console.ReadLine(), out x);
int.TryParse(Console.ReadLine(), out y);
int i = x - 1;
int j = y - 1;
if (sportsmen[i] == sportsmen[j])
Console.WriteLine("Спортсмени однаковi!");
else
Console.WriteLine("Спортсмени рiзнi!");
Console.ReadKey();
}
static void Number()
{
Console.WriteLine("Введіть порядковий номер спортсмена: ");
int i = Convert.ToInt32(Console.ReadLine());
sportsmen.Insert(i - 1, AddSportsmen());
}
static void Sort1()
{
Console.WriteLine("Натиснiть 1, щоб вiдсортувати спортсменiв за вiком ");
Console.WriteLine("Натиснiть 2, щоб вiдсортувати спортсменiв за вагою ");
Console.WriteLine("Натиснiть 3, щоб вiдсортувати спортсменiв за зростом ");
Console.WriteLine("Натиснiть будь-яку клавiшу, щоб повернутись назад");
int choice = 1;
while (choice != 0)
{
int.TryParse(Console.ReadLine(), out choice);
switch (choice)
{
case 1:
sportsmen.Sort(delegate (Sportsmen sp1, Sportsmen sp2)
{ return sp1.age.CompareTo(sp2.age); });
break;
case 2:
sportsmen.Sort(delegate (Sportsmen sp1, Sportsmen sp2)
{ return sp1.weight.CompareTo(sp2.weight); });
break;
case 3:
sportsmen.Sort(delegate (Sportsmen sp1, Sportsmen sp2)
{ return sp1.height.CompareTo(sp2.height); });
break;
}
}
Console.Clear();
main_Menu();
}
static void Select()
{
int sss = 0;
int i = 1;
int q;
Console.WriteLine("Натиснiть 1 щоб переглянути список спортсменiв");
Console.WriteLine("Натиснiть 2 щоб вивести iнформацiю про всiх спортсменiв");
int.TryParse(Console.ReadLine(), out q);
Console.Clear();
if (q == 1)
{
foreach (Sportsmen d in sportsmen)
{
Console.WriteLine("{0} {1}", i, d.name);
i++;
sss++;
}
if (sss != 0)
{
int choice;
int.TryParse(Console.ReadLine(), out choice);
Console.Clear();
Print(choice - 1);
}
}
if (q == 2)
{
all();
{
foreach (Sportsmen d in sportsmen)
{
i++;
sss++;
}
if (sss != 0)
{
int choice;
int.TryParse(Console.ReadLine(), out choice);
Console.Clear();
Print(choice - 1);
}
}
Console.ReadKey();
Console.Clear();
main_Menu();
}
string klaviasha = "зайти";
while (klaviasha != "U")
{
Console.Clear();
Console.WriteLine("Введіть букву 'U' щоб повернутись в меню");
klaviasha = Console.ReadLine();
}
Console.Clear();
main_Menu();
}
static void Chempionat()
{
SortedList<Sportsmen, string> temps =
new SortedList<Sportsmen, string>();
}
static void Print(int i)
{
int choice = 1;
while (choice != 0)
{
Console.WriteLine(new string('*', 55));
Console.WriteLine("Iм'я: {0}\nВiк: {1}\nЕнергiя: {2}\nСила: {3}\nСтать: {4}\nЗрiст: {5}\nВага: {6}\nТренує: {7}\n", sportsmen[i].name, sportsmen[i].age, sportsmen[i].energy, sportsmen[i].power, sportsmen[i].gender, sportsmen[i].height, sportsmen[i].weight, sportsmen[i].muscles);
Console.WriteLine(new string('*', 55));
Console.WriteLine("Натиснiть 1, щоб видалити спортсмена");
Console.WriteLine("Натиснiть будь-яку клавiшу, щоб повернутись назад");
int.TryParse(Console.ReadLine(), out choice);
switch (choice)
{
case 1:
sportsmen.RemoveAt(i);
break;
}
}
}
}
}