Тут у вас сразу несколько ошибок:
1. Метод
new_list не принадлежит к какому-то определенному типу. Подозреваю, он должен находится в классе Program
2. Для метода
new_list не указан тип возвращаемого значения. Подозреваю, вы хотите чтобы метод возвращал
Payment. В таком случае лучше переименовать на
ReadPayment:
public static Payment ReadPayment()
{
Console.Write("Введите марку бензина: ");
int another_petrol = int.Parse(Console.ReadLine());
Console.Write("Введите количество бензина в литрах: ");
double another_count = double.Parse(Console.ReadLine());
Console.Write("Введите номер колонки: ");
byte another_column = byte.Parse(Console.ReadLine());
Console.Write("Введите дату: ");
byte another_code = byte.Parse(Console.ReadLine());
Console.Write("Введите код: ");
DateTime another_dt = DateTime.Parse(Console.ReadLine());
return
new Payment(another_column, another_dt, another_petrol, another_count, another_code);
}
3. В методе Menu() вызов
new_list() ничего не делает, полагаю, вы хотели добавить новый элемент в список:
case '3':
payments.Add(ReadPayment());
break;
На всякий случай приведу весь код:
struct Payment
{
public int Petrol;
public double Count;
public DateTime Dt;
public byte Column;
public byte Code;
public Payment(byte column, DateTime dt, int petrol, double count, byte code)
{
Column = column;
Petrol = petrol;
Count = count;
Dt = dt;
Code = code;
}
public String SString()
{
return String.Format("Колонка: {0} \n" +
"Дата: {1}.{2}.{3} {4}:{5}:{6} \n" +
"Марка бензина: {7} \n" +
"Количество: {8} \n" +
"Код платежа: {9}" +
"\n===============================", Column, Dt.Year, Dt.Month, Dt.Day, Dt.Hour, Dt.Minute, Dt.Second, Petrol, Count, Code);
}
}
class Program
{
public static Payment ReadPayment()
{
Console.Write("Введите марку бензина: ");
int another_petrol = int.Parse(Console.ReadLine());
Console.Write("Введите количество бензина в литрах: ");
double another_count = double.Parse(Console.ReadLine());
Console.Write("Введите номер колонки: ");
byte another_column = byte.Parse(Console.ReadLine());
Console.Write("Введите дату: ");
byte another_code = byte.Parse(Console.ReadLine());
Console.Write("Введите код: ");
DateTime another_dt = DateTime.Parse(Console.ReadLine());
return
new Payment(another_column, another_dt, another_petrol, another_count, another_code);
}
public static List<Payment> payments = new List<Payment>();
public static void Menu()
{
Console.WriteLine("1. История платежей");
Console.WriteLine("2. Редактировать историю платежей");
Console.WriteLine("3. Добавить новый платеж");
Console.WriteLine("4. Удалить платеж из списка");
Console.WriteLine("5. Поиск платежа по коду");
Console.WriteLine("6. Выход из программы");
Console.Write("\n \nВведите номер пункта меню: ");
char M = char.Parse(Console.ReadLine());
switch (M)
{
case '1': break; // вывод списка платежей
case '2': break;
case '3':
payments.Add(ReadPayment());
break;
case '4':
Console.WriteLine();
break;
case '5': break;
case '6': break;
}
}
public static void Main(string[] args)
{
Menu();
Payment np = new Payment(1, new DateTime(2000, 12, 13, 15, 12, 31), 92, 5.12, 001);
payments.Add(np);
payments.Add(new Payment(1, new DateTime(2012, 2, 12, 12, 42, 21), 92, 5.13, 001));
foreach (Payment n in payments)
Console.WriteLine(np.SString());
}
}
Несколько комментариев:
1. Вместо метода
SString можно переопределять стандартный метод
.ToString()
2. Отклик на ввод пользователя лучше вынести из метода Menu, оставив там только саму печать на консоль.
3. Структуру лучше делать неизменяемой в явном виде через
readonly