⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainform.cs

📁 动物识别系统java,.net 动物识别系统java版、C版电子书手册源码 可自添规则
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Experiment01
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        private void checkedListBox_SelectedIndexChanged(object sender, EventArgs e)
        {
        }

        private void enterButton_Click(object sender, EventArgs e)//当"看看"按钮按下时
        {
            long inputSet = 0;//记录选择的事实集,其二进制的第i位为1表示i号复选框被选中
            for (int i = 0; i < Rules.len; ++i)
            {
                if (this.checkedListBox.GetItemChecked(i))//第i个复选框被选中
                {
                    inputSet |= 1L << i;//把inputSet的二进制的第i位变为1
                }
            }

            Rules rules = new Rules();//规则
            RecoginzeSystem recoginzer = new RecoginzeSystem();//推理用
            long result = recoginzer.recoginze(inputSet, rules);//计算新的事实集

            int cnt = 0;//统计设别出的动物个数,0或大于1时为无法识别
            string output="无法识别...";
            if ((result & (1L << 11))>0)//result的二进制第11为1时
            { output = "是老虎"; cnt++; }
            if ((result & (1L << 13)) > 0)//result的二进制第13为1时
            { output = "是金钱豹"; cnt++; }
            if ((result & (1L << 08))>0)//如此类推
            { output = "是斑马"; cnt++; }
            if ((result & (1L << 10))>0)
            { output = "是长颈鹿"; cnt++; }
            if ((result & (1L << 16))>0)
            { output = "是企鹅"; cnt++; }
            if ((result & (1L << 19))>0)
            { output = "是信天翁"; cnt++; }
            if (cnt > 1) output = "是外星动物!!";

            this.resultTextBox.Text = output.ToString();//结果输出
        }

        private void resultTextBox_TextChanged(object sender, EventArgs e)
        {
        }

        private void MainForm_Load(object sender, EventArgs e)
        {
        }

        private void resultTipLabel_Click(object sender, EventArgs e)
        {
        }
    }

    public class Rules//规则类
    {
        /*
        00.不会飞
        01.吃肉
        02.会飞
        03.会下蛋
        04.会游泳
        05.善飞
        06.身上有暗斑点
        07.身上有黑色条纹
        08.是斑马
        09.是哺乳动物
        10.是长颈鹿
        11.是虎
        12.是黄褐色
        13.是金钱豹
        14.是嚼反刍动物
        15.是鸟
        16.是企鹅
        17.是肉食动物
        18.是鸵鸟
        19.是信天翁
        20.是有碲类动物
        21.眼盯前方
        22.有长脖子
        23.有长腿
        24.有碲
        25.有黑白二色
        26.有毛发
        27.有奶
        28.有犬齿
        29.有羽毛
        30.有爪
         */
        public const int len = 31;
        public long[] factSets;//事实
        public long[] resultSets;//结果
        //factSets[i]对应resultsSets[i]

        public Rules()
        {
            factSets = new long[len];
            resultSets = new long[len];
  
            //rule00
            factSets[0] |= 1L << 26;//该动物有毛发
            resultSets[0] |= 1L << 09;//则是哺乳动物
            //rule01
            factSets[1] |= 1L << 27;//该动物有奶
            resultSets[1] |= 1L << 09;//则是哺乳动物
            //rule02
            factSets[2] |= 1L << 29;//该动物有羽毛
            resultSets[2] |= 1L << 15;//则是鸟
            //rule03
            factSets[3] |= 1L << 02 | 1L << 03;//该动物会飞,会下蛋
            resultSets[3] |= 1L << 15;//则是鸟
            //rule04
            factSets[4] |= 1L << 01;//该动物吃肉
            resultSets[4] |= 1L << 17;//则是肉食动物
            //rule05
            factSets[5] |= 1L << 28 | 1L << 30 | 1L << 21;//该动物有犬齿,有爪,眼盯前方
            resultSets[5] |= 1L << 17;//则是肉食动物
            //rule06
            factSets[6] |= 1L << 09 | 1L << 24;//该动物是哺乳动物,有碲
            resultSets[6] |= 1L << 20;//则是有碲类动物
            //rule07
            factSets[7] |= 1L << 09 | 1L << 14;//该动物是哺乳动物,是嚼反刍动物
            resultSets[7] |= 1L << 20;//则是有碲类动物
            //rule08
            factSets[8] |= 1L << 09 | 1L << 17 | 1L << 12 | 1L << 06;//该动物是哺乳类动物,是肉食动物,黄褐色,身上有暗斑点
            resultSets[8] |= 1L << 13;//则是金钱豹
            //rule09
            factSets[9] |= 1L << 09 | 1L << 17 | 1L << 12 | 1L << 07;//该动物是哺乳类动物,是肉食动物,黄褐色,身上有黑色条纹
            resultSets[9] |= 1L << 11;//则是虎
            //rule10
            factSets[10] |= 1L << 20 | 1L << 22 | 1L << 23 | 1L << 06;//该动物是有碲类动物,长脖子,长腿,身上有暗斑点
            resultSets[10] |= 1L << 10;//则是长颈鹿
            //rule11
            factSets[11] |= 1L << 20 | 1L << 07;//该动物是有碲类动物,身上有黑色条纹
            resultSets[11] |= 1L << 08;//则是斑马
            //rule12
            factSets[12] |= 1L << 15 | 1L << 22 | 1L << 23 | 1L << 00;//该动物是鸟,长脖子,长腿,不会飞
            resultSets[12] |= 1L << 18;//则是鸵鸟
            //rule13
            factSets[13] |= 1L << 15 | 1L << 04 | 1L << 00 | 1L << 25;//该动物是鸟,会游泳,不会飞,有黑白二色
            resultSets[13] |= 1L << 16;//则是企鹅
            //rule14
            factSets[14] |= 1L << 15 | 1L << 05;//该动物是鸟,善飞
            resultSets[14] |= 1L << 19;//则是信天翁
        }
    }

    public class RecoginzeSystem//推理类
    {
        public long recoginze(long factSet, Rules rules)
        {
            long factSetTmp = factSet, t;
            do//推理过程
            {
                t = factSetTmp;
                for (int i = 0; i < Rules.len; ++i)
                {
                    if ((factSetTmp & rules.factSets[i]) == rules.factSets[i])//符合规则
                    {
                        factSetTmp |= rules.resultSets[i];//并入已知事实
                    }
                }
            } while (factSetTmp != t);//当有新事实出来的时候继续,反则跳出
            return factSetTmp;//返回最终的事实集
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -