c#窗体应用程序实现当软件开启,定时器就在数据库扫描是否有设置的良品和不良品条码的当天ICT测试记录(ICT_test表中Barcode,Date,Result),良品和不良品条码在本地文件夹txt文件中获取。如果数据库中有良品和不良品测试记录存在,lable状态栏变绿并提示“已点检,请进行测试”,然后进行别的条码的ICT测试。(条码先扫描到c#窗体软件txt_barcode中,在通过模拟键盘定位发送到ICT测试软件条码框中,然后进行ICT测试)。如果没有,label状态栏变红,并提示“请进行测试前点检”,然后就先进行设置条码的ICT测试,判断扫描到txt_Barcode条码是否为获取到设置的良品或不良品条码,如输入的条码不符合,label状态栏变红,并提示“条码错误”,如输入的条码正确并为设置的良品条码,label状态栏变绿,并提示“请进行良品点检”,进行ICT测试,当发现某一文件夹中有良品测试报告生成,表示良品测试完成,测试完成后就提示“良品点检完成”。如扫描的是设置的不良品条码,则label状态栏变绿,并提示“请进行不良品点检”,进行ICT测试。当发现某一文件夹中有不良品测试报告生成,表示不良品测试完成。当这设置的两个条码都测试完成后,将测试记录直接更新到数据库,不需要点击上传c#代码实现
时间: 2023-11-09 17:07:39 浏览: 137
以下是实现上述功能的C#代码:
```csharp
using System;
using System.Windows.Forms;
using System.IO;
using System.Data.SqlClient;
using System.Timers;
namespace ICTTest
{
public partial class MainForm : Form
{
private string goodBarcodeFile = "good_barcodes.txt"; //良品条码文件名
private string badBarcodeFile = "bad_barcodes.txt"; //不良品条码文件名
private string barcode; //当前扫描到的条码
private bool isGoodBarcode = false; //当前扫描到的条码是否为良品条码
private bool isBadBarcode = false; //当前扫描到的条码是否为不良品条码
private bool isTesting = false; //是否正在进行ICT测试
private System.Timers.Timer timer; //定时器
private string connectionString = "Data Source=(local);Initial Catalog=ICTTest;Integrated Security=True"; //数据库连接字符串
public MainForm()
{
InitializeComponent();
timer = new System.Timers.Timer(60000); //每隔1分钟扫描一次数据库
timer.Elapsed += OnTimedEvent;
timer.AutoReset = true;
timer.Enabled = true;
}
private void MainForm_Load(object sender, EventArgs e)
{
UpdateStatusLabel(false, "请进行测试前点检"); //初始化状态栏为红色
}
private void txtBarcode_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter) //判断是否按下回车键
{
barcode = txtBarcode.Text.Trim(); //获取条码
if (!string.IsNullOrEmpty(barcode)) //判断条码是否为空
{
if (!isTesting) //判断是否正在进行ICT测试
{
if (isGoodBarcode) //如果当前扫描到的是良品条码
{
if (CheckGoodBarcode(barcode)) //判断是否为设置的良品条码
{
UpdateStatusLabel(true, "请进行良品点检"); //状态栏变绿
isTesting = true; //开始进行ICT测试
StartICTTest(); //开始ICT测试
}
else
{
UpdateStatusLabel(false, "条码错误"); //状态栏变红,提示条码错误
}
}
else if (isBadBarcode) //如果当前扫描到的是不良品条码
{
if (CheckBadBarcode(barcode)) //判断是否为设置的不良品条码
{
UpdateStatusLabel(true, "请进行不良品点检"); //状态栏变绿
isTesting = true; //开始进行ICT测试
StartICTTest(); //开始ICT测试
}
else
{
UpdateStatusLabel(false, "条码错误"); //状态栏变红,提示条码错误
}
}
}
}
}
}
private bool CheckGoodBarcode(string barcode)
{
string[] goodBarcodes = File.ReadAllLines(goodBarcodeFile); //从良品条码文件中读取所有良品条码
foreach (string str in goodBarcodes)
{
if (str == barcode)
{
return true; //如果扫描到的条码在良品条码列表中,则返回true
}
}
return false; //否则返回false
}
private bool CheckBadBarcode(string barcode)
{
string[] badBarcodes = File.ReadAllLines(badBarcodeFile); //从不良品条码文件中读取所有不良品条码
foreach (string str in badBarcodes)
{
if (str == barcode)
{
return true; //如果扫描到的条码在不良品条码列表中,则返回true
}
}
return false; //否则返回false
}
private void StartICTTest()
{
//将条码发送到ICT测试软件条码框中
SendKeys.SendWait(barcode);
SendKeys.SendWait("{ENTER}");
}
private void UpdateStatusLabel(bool isGreen, string text)
{
if (isGreen)
{
lblStatus.BackColor = System.Drawing.Color.Green; //绿色
}
else
{
lblStatus.BackColor = System.Drawing.Color.Red; //红色
}
lblStatus.Text = text;
}
private void OnTimedEvent(Object source, ElapsedEventArgs e)
{
CheckTestRecords(); //扫描数据库,检查是否有测试记录
}
private void CheckTestRecords()
{
try
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open(); //打开数据库连接
SqlCommand command = new SqlCommand("SELECT * FROM ICT_test WHERE Date = @Date AND Result <> ''", connection);
command.Parameters.AddWithValue("@Date", DateTime.Today.ToString("yyyy-MM-dd")); //查询当天测试记录
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
if (isGoodBarcode || isBadBarcode)
{
UpdateTestResult(); //更新测试结果到数据库
}
UpdateStatusLabel(true, "已点检,请进行测试"); //状态栏变绿,提示已点检,请进行测试
}
else
{
UpdateStatusLabel(false, "请进行测试前点检"); //状态栏变红,提示请进行测试前点检
}
reader.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void UpdateTestResult()
{
try
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open(); //打开数据库连接
SqlCommand command = new SqlCommand("UPDATE ICT_test SET Result = @Result WHERE Barcode = @Barcode AND Date = @Date", connection);
if (isGoodBarcode)
{
command.Parameters.AddWithValue("@Result", "PASS"); //良品测试结果为PASS
}
else if (isBadBarcode)
{
command.Parameters.AddWithValue("@Result", "FAIL"); //不良品测试结果为FAIL
}
command.Parameters.AddWithValue("@Barcode", barcode);
command.Parameters.AddWithValue("@Date", DateTime.Today.ToString("yyyy-MM-dd"));
command.ExecuteNonQuery();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
isGoodBarcode = false;
isBadBarcode = false;
isTesting = false;
barcode = "";
}
}
}
```
在上述代码中,我们使用了一个定时器来每隔一分钟扫描一次数据库,检查是否有测试记录。如果有,则将状态栏变绿,并提示“已点检,请进行测试”,否则将状态栏变红,并提示“请进行测试前点检”。在扫描数据库时,我们使用了SqlCommand对象来执行一条SELECT语句,查询当天ICT_test表中是否有Result不为空的记录。如果有,则说明已经进行了点检,可以进行测试;否则需要进行测试前点检。
当扫描到条码并按下回车键时,我们首先判断当前扫描到的条码是否为良品条码或不良品条码。如果是,则判断扫描到的条码是否为设置的良品或不良品条码,如果是,则将状态栏变绿,并提示“请进行良品/不良品点检”,开始进行ICT测试。如果不是,则将状态栏变红,并提示“条码错误”。
当进行良品/不良品点检后,我们需要等待ICT测试完成,并检查测试结果。如果发现某一文件夹中有良品/不良品测试报告生成,则说明测试已经完成。此时,我们需要将测试结果更新到ICT_test表中,然后将isGoodBarcode、isBadBarcode和isTesting变量重置为false,barcode变量重置为空字符串。
阅读全文