Pin 生成器 - 按日期计算 - 无交互 - C#

Pin Generator - By Date Calculated - No Interaction - C#

我希望我能在逻辑上指出正确的方向。

背景信息

应用程序的每日 pin 是使用一组基于 5 个月后已知时间表的月、日、年的计算生成的。此计划控制计算中包含日期的哪些部分(月、日、年)以及计算方式(加法、减法、乘法)。

我不想打开我的计算器来计算这个引脚,而是参考文档,然后根据该文档进行计算,我想制作一个程序来为我做这个,谁知道我的同事是否保持喂我。

我的 C# 或其他编程经验:"Hello World" 经验水平。

研究总结

*找到以下问题的答案: C#制作表格的方法 如何在 C# 中将信息从一个文本框传输到另一个文本框 如何关闭应用程序 如何获取当前日期。 如何只获取日期而不是时间显示在文本框中。 如何将信息从一个文本框传输到另一个文本框。

*没有找到我要找的东西: 如何从另一个文本框中的文本框解析日期。 如何计算旋转 table 上的解析信息。 如何使用日期时间解析日期,以便可以在另一个文本框中计算它。

我的目标 使该应用程序不需要用户交互,这样我的同事就不会因为输入的方法不正确而生气。

根据需要的计算每 5 个月调整一次应用程序(我将在计算中确定是否可以自动推出更新而不是每 5 个月安装一次)。

找出我遗漏的逻辑小知识,以便我可以在此基础上进行构建并改进此应用程序。


代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

 namespace Pin_Generator
{
public partial class Home : Form
{
    public Home()
    {
        InitializeComponent();
        TodayDateTextBox.Text = DateTime.Now.ToString("MM/dd/yyyy");
        TodayPasswordTextBox.Text = TodayDateTextBox.Text;

    }

    private void Home_Load(object sender, EventArgs e)
    {

    }

    private void CloseButton_Click(object sender, EventArgs e)
    {
        this.Close();
        Application.Exit();

    }


    // private void TodayPasswordTextBox_TextChanged(object sender, EventArgs e)
   // {
   //     int MM;
   //     int dd;
   //     int yyyy;


调试时屏幕显示:

今天 日期:5/19/2015

今日图钉:2015 年 5 月 19 日

屏幕应显示如下内容: 今天日期:2015 年 5 月 19 日 今日密码:33289306093

我知道我还有很长的路要走,但我看到了很多关于如何计算的资源,但没有太多关于如何计算我拥有的资源,因为 "Todays Date"基于日期的数字。我也刚刚尝试搜索 "How do I convert date into calculated string"

我认为有了正确的问题,我应该能够找到正确的答案,但到目前为止我的逻辑有所不同,我还没有完全记下关键字。也可能是我走的路完全错了,我也明白。

提前感谢大家的宝贵时间,如果您有任何问题,请告诉我。我希望屏幕截图能帮助我直观地了解我的想法,希望我能在你的帮助下回到正确的轨道上。

从文本框中解析日期非常简单

    DateTime dateInTextbox = DateTime.Parse(TodayDateTextBox.Text);

据此,我建议您创建一个使用 DateTime 对象的属性来生成密码的方法,然后像这样调用它:

    TodayPasswordTextBox.Text = CalculatePassword(dateInTextbox);

从你的问题来看,你的 CalculatePassword() 方法看起来像这样:

string CalculatePassword(DateTime target)
{
    const int startingPin = 123; // the number your rotation is based on
    DateTime current = DateTime.Parse("1/1/2015"); // the date your rotation starts from
    int currentPin = startingPin;
    while(current < target)
    {
        currentPin = CalculateNextPin(
            currentPin, current.Year, current.Month, current.Day);
        current = current.AddDays(1);
    }
    return currentPin.ToString();
}

当然,您必须自己填写 CalculateNextPin() 实施的详细信息。

如果您创建如下所示的方法来计算您的 PIN。

    public string CalculatePIN()
    {
        DateTime today = DateTime.Now;
        int year = today.Year;
        int month = today.Month;
        int day = today.Day;

        string pin = // Do some calculation using the year month and day variables.

        return pin;
    }

您可以修改 Home 方法来执行以下操作...

    public Home()
    {
        InitializeComponent();
        TodayDateTextBox.Text = DateTime.Now.ToString("MM/dd/yyyy");
        TodayPasswordTextBox.Text = CalculatePIN();
    }

我知道这是一个很晚的回复,过去几周很忙!谢谢大家的意见。希望我能将不止一个标记为答案,因为每一点都对我有所帮助。我将 amcdermott 标记为答案,但能够将 StriplingWarrior 的信息用于其他一些概念。通过我在逻辑上发现的以下其他信息,我能够很好地完成这项工作。

以下是我最终想出的真正让事情顺利进行的方法。一旦我了解了拆分 DateTime 的逻辑以及如何将字符串转换为整数然后返回字符串,事情就开始真正融合在一起了。

   // Declares string values for each part of the DateTime format to be later calculated.
        string sYear = DateTime.Now.ToString("yyyy");
        string sMonth = DateTime.Now.ToString("MM");
        string sDay = DateTime.Now.ToString("dd");

        // Takes string values of the parsed DateTime values and converts them into integers.
        int iYear = Convert.ToInt32(sYear);
        int iMonth = Convert.ToInt32(sMonth);
        int iDay = Convert.ToInt32(sDay);


        // Takes the integer values and performs equations with them to get pin.
        int pass = iYear * iMonth * (iDay * iDay);

        // Takes calculation from above line to pass it back to a string.
        string today = pass.ToString();

        // Passes the above line into the PinTextBox for display to the operator.
        TodayPinTextBox.Text = today;

这可能需要为交易生成代码。

public string generateCode()
{
    DateTime today = DateTime.Now;
    int year = today.Year;
    int month = today.Month;
    int day = today.Day;
    int i = 0;
    do
    {
        i += 1;
        string code = "PUL" + Convert.ToString(year) + Convert.ToString(month) + Convert.ToString(day) + Convert.ToString(i);
        //you can change the format code as you want
        return code;
    } while (today == dtpTrans.Value);
}