access 导入 txt sql语句_[内附完整源码和文档] 基于C#和Access的智能聊天机器人

一、软件说明
1.1 功能说明
一个可以自动回复的聊天机器人.

1.2 解决什么样的实际问题
用于娱乐,解闷。

1.3 性能说明
软件还存在一定的BUG,有待改进。

1.4 程序类型说明
娱乐性应用程序。

二、软件设计
2.1 软件整体结构图及模块划分

软件的结构只有一个聊天界面,分别有输入框,显示聊天信息框,发送按钮和退出按钮,导入词库按钮和调教按钮。

解决方案中,有5个类,其中:

”聊天机器人”类是主类,窗口显示类

”DataBase”是连接数据的类,本程序用到的是access数据库

“Iostreams”类是文件操作类,主要是读取一个txt文件,用于导入词库

”Regugar”类是正则表达式品配类,用于品配聊天的问题

”Robot”类是一个机器人对象

Resources文件是用于存放图片文件。

2.3 各模块对应的主要对象和方法
2.3.1 ”聊天机器人”类
主要属性

private Robot A; //机器人对象
private string Ask; //发送信息
private string Answer; //返回信息
private int isTeaching; //调教模式
private Point mouseOff; //鼠标移动位置变量
private bool leftFlag; //标签是否为左键
private string FileName; //txt文件路径
private Thread T1; //创建一个线程
主要方法

/发送按扭
private void button_sent_Click(object sender, EventArgs e)
{
///正常聊天状态
if (isTeaching == 0)
{
Ask = this.richTextBox_sent.Text;
//设置为右对齐
this.richTextBox1_accept.SelectionAlignment = HorizontalAlignment.Right;
this.richTextBox1_accept.AppendText(Ask + “:主人 n”);
Answer = A.answer(Ask);
//设置为左对齐
this.richTextBox1_accept.SelectionAlignment = HorizontalAlignment.Left;
this.richTextBox1_accept.AppendText(" “+ A.name + “:” + Answer + “n”);
}
///调教机器人状态
else if (isTeaching == 1)
{
Ask = this.richTextBox_sent.Text;
this.richTextBox1_accept.SelectionAlignment = HorizontalAlignment.Right;
this.richTextBox1_accept.AppendText(Ask + “:主人 n”);
isTeaching = 2;
}
else
{
Answer = this.richTextBox_sent.Text;
this.richTextBox1_accept.SelectionAlignment = HorizontalAlignment.Left;
this.richTextBox1_accept.AppendText(” “+A.name+”:" + Answer + “n”);
A.learn(Ask,Answer);
isTeaching = 1;
}
//自动滚动到插入位置
this.richTextBox1_accept.ScrollToCaret();
//清空发送框
this.richTextBox_sent.Clear();
}
///导入词库
private void Openfile()
{
//导入词库
Iostreams.Import(FileName);
T1.Abort();
}
2.3.2 ”DataBase”类
//根据接收到的字符串返回数据
public static List search(string sql)
{
List answer = new List();
conversation con = null;
OleDbConnection conn = new OleDbConnection(@“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|ChatRobot.mdb”);
///连接数据库
conn.Open();
//执行sql查询
OleDbCommand com = new OleDbCommand(sql, conn);
OleDbDataReader reader = com.ExecuteReader();
//读取查询结果
while (reader.Read())
{
con = new conversation(reader.GetString(0), reader.GetString(1));
answer.Add(con);
}
conn.Close();
return answer;
}
2.3.3 “Iostreams”类
public static void Import(string File_Name)
{
using (StreamReader sr = new StreamReader(File_Name, Encoding.Default))
{
string line1,line2;
//按行读取
while((line1=sr.ReadLine())!= null)
{
line2 = sr.ReadLine();
DataBase.Insert(line1, line2);
sr.ReadLine();
}
}
}
2.3.4 ”Regugar”类
//正则表达式品配
public static bool match(string a, string ask)
{
//简单的正则表达式
Regex re = new Regex(@"[sS]" + a + @"[sS]");
//品配成功则返回true,否则返回false
return re.IsMatch(ask);
}
2.3.5 ”Robot”类
//问答函数
public string answer(string ask)
{
List answers = new List();
string answer=null,a=null;
///sql语句品所有字符的模糊搜索
a = “SELECT ask,answer FROM [chatwords] WHERE (ask LIKE’%[” + ask + “]%’) ORDER BY ask DESC”;
answers = DataBase.search(a);
if (answers.Count != 0)
{
for (int i = 0; i < answers.Count; i++)
{
if (Regular.match(answers[i].ask,ask ))
return answers[i].answer;
}
}
answer = “听不懂”;
//返回包括有输入的任一字的ask和answer
return answer;
}
2.4 数据库设计或数据文件说明
数据库设计,只创建一个chatwords表,用于储存ask语句和answer语句。

2c4bcb1011f3f5a668efcdf5ff0d0021.png

790f84a92ab6067d2d09bd58cb8198fd.png

完整的源码和详细的文档,上传到了 WRITE-BUG技术共享平台 上,需要的请自取:

https://www.write-bug.com/article/2851.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值