Как сделать автоматическое увеличение числа на основе года - PullRequest
0 голосов
/ 14 октября 2019

Я создаю простое приложение C # для Windows Forms, в котором должен присутствовать пользовательский номер автоматического приращения, он будет использоваться в качестве серийного номера для каждого приложения.

Как выполнить сброс этого пользовательского номера на основе года ?

2019

serial number: 1/2019
serial number: 2/2019
serial number: 3/2019
serial number: 4/2019
.
.
.
serial number: 200/2019

2020

serial number: 1/2020
serial number: 2/2020
serial number: 3/2020
serial number: 4/2020
serial number: 5/2020
.
.
.

Ответы [ 3 ]

2 голосов
/ 14 октября 2019

Один из способов сделать это - просто сохранить карту последнего использованного идентификатора вместе с текущим годом, что должно быть сделано в базе данных, но также может быть сделано в словаре (который легче показать в примере кода). ):

private static readonly Dictionary<int, int> YearIdMap = new Dictionary<int, int>();

public static string GetNextId()
{
    // Get the current year
    int year = DateTime.Today.Year;

    // Something to store the next id value in
    int nextId;

    // Sets nextId to the current id for this year, or 0 if there isn't one yet
    YearIdMap.TryGetValue(year, out nextId); 

    // Increment our number
    nextId++;

    // Save the new value along with this year
    YearIdMap[year] = nextId;

    // Return the value to the caller in the format: id/year
    return $"{nextId}/{year}";
}
1 голос
/ 14 октября 2019

Вы просто используете два отдельных числа и складываете их там, где хотите, чтобы они отображались.

У вас есть метод IncrementCurrentNumber, который просто увеличивает первое число:

int currentNumber = 0;
void IncrementCurrentNumber()
{
  currentNumber++;
}

И у вас есть другой метод, который увеличивает год и сбрасывает текущий номер:

int year = 2019;

void IncrementYear()
{
  year++;
  currentNumber = 0;
}

Затем вы получаете фактический серийный номер, объединяя оба:

string GetNextSerialNumber()
{
  IncrementCurrentNumber();
  return currentNumber+"/"+year;
}

И всякий раз, когда вы хотите увеличить год, например, с помощью кнопки, вы вызываете метод IncrementYear().

Редактировать: И комментарии, конечно, правильные, если вы хотите, чтобы они автоматически использовалив текущем году вы должны будете использовать DateTime.Now.Year, чтобы получить это, а также запомнить программу последним серийным номером, чтобы вы могли проверить, нужно ли сбрасывать currentNumber.

0 голосов
/ 08 ноября 2019

Я понял это сам и благодарю вас за отрицательные голоса

public class SerialNumber
{
    private static readonly MyDbContext DbContext = new MyDbContext();

    public static string SrNo()
    {
        var sn = DbContext.PrimaryForms.ToList().Last().FormDescription;

        var array = sn.Split('/');

        if (int.Parse(array[0]) == DateTime.Today.Year)
        {
            return array[0] + "/" + (int.Parse(array[1]) + 1);
        }

        return (int.Parse(array[0]) + 1) + "/1";
    }
}

если код не ясен, попросите меня объяснить, спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...