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);
}
我希望我能在逻辑上指出正确的方向。
背景信息
应用程序的每日 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);
}