基于RFID的简易图书管理系统设计与实现

来源:互联网 发布:陕西广电网络主要业务 编辑:程序博客网 时间:2024/05/16 09:42

  本次开发主要做了从串口分别获取读者卡号和图书卡号,实现图书管理,图书借阅,读者管理等功能。开发语言是C#,开发环境使用Visual Studio 2015。数据库采用sql Server。


  RFID选择

  读者卡跟图书卡均采用125K,一般称之为低频卡,典型的代表智能卡是EM公司与HID公司的125K智能卡。这类卡基本上都是只读、无源卡,识别距离在10cm左右。


  应答器采用e5551应答器芯片

  e5551芯片是Atmel公司生产的非接触式、无源、可读写、具有防碰撞能力的RFID器件,中心工作频率为 125K。具有以下主要特性:低功耗、低工作电压;非接触能量供给和读写数据;工作频率范围为100~150 kHz; EEPROM存储器容量为264位,分为8块,每块33位;具有7块用户数据,每块32位,共224位;

        


  实现功能:

           

  

  应用主界面: 管理员端、读者端

                  

  管理员端:(演示功能为添加图书)

        


  读者端:实现图书借阅与图书归还

        

                       (逻辑实现)

         

                (实现结果)

  借还实现代码 

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.IO.Ports;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Data.SqlClient;using System.Windows.Forms;using System.Threading;namespace MyRFID{    public partial class frmBorrowBook : Form    {        BaseClass.BaseInfo baseinfo = new MyRFID.BaseClass.BaseInfo();//创建BaseInfo类的对象        BaseClass.BaseInfo.cBorrowSituation BorrowSituation = new MyRFID.BaseClass.BaseInfo.cBorrowSituation();//创建cBorrowSituation类的对象        BaseClass.BaseInfo.cBook Book = new MyRFID.BaseClass.BaseInfo.cBook();//创建cBook类        public delegate void Displaydelegate(byte[] InputBuf);        Byte[] OutputBuf = new Byte[4];        public Displaydelegate disp_reader;        public Displaydelegate disp_book;        public frmBorrowBook()        {            InitializeComponent();        }        void Comm_ReaderReceived(object sender, SerialDataReceivedEventArgs e)        {                        Byte[] InputBuf = new Byte[4];            try            {                if (serialReader.IsOpen)                {                    serialReader.Read(InputBuf, 0, serialReader.BytesToRead);    //读取缓冲区的数据直到“}”即0x7D为结束符                                                                                 //InputBuf = UnicodeEncoding.Default.GetBytes(strRD); //将得到的数据转换成byte的格式                    System.Threading.Thread.Sleep(50);                    this.Invoke(disp_reader, InputBuf);                }            }            catch (TimeoutException ex)         //超时处理            {                MessageBox.Show(ex.ToString());            }        }        void Comm_BookReceived(object sender, SerialDataReceivedEventArgs e)        {            Byte[] InputBuf = new Byte[4];            try            {                if (serialBook.IsOpen)                {                    serialBook.Read(InputBuf, 0, serialBook.BytesToRead);    //读取缓冲区的数据直到“}”即0x7D为结束符                                                                             //InputBuf = UnicodeEncoding.Default.GetBytes(strRD); //将得到的数据转换成byte的格式                    System.Threading.Thread.Sleep(50);                    this.Invoke(disp_book, InputBuf);                }            }            catch (TimeoutException ex)         //超时处理            {                MessageBox.Show(ex.ToString());            }        }        public void DispReader(byte[] InputBuf)        {            //textBox1.Text = Convert.ToString(InputBuf);            string result = string.Empty;            string readerno = string.Empty;            string selectReader = "";            string selectBorrow = "";            BaseOperate bop = new BaseOperate();            SqlDataReader reader;            DataSet ds = new DataSet();            ASCIIEncoding encoding = new ASCIIEncoding();            for (int i = 0; i < InputBuf.Length; i++)//逐字节变为16进制字符,以%隔开            {                result += Convert.ToString(InputBuf[i], 16);            }            readerno = int.Parse(result, System.Globalization.NumberStyles.AllowHexSpecifier).ToString();            selectReader = "select * from readerInfo where readerNo='" + readerno + "'";            reader = bop.getread(selectReader);            while (reader.Read())            {                readerNo.Text = reader.GetString(0);                readerName.Text = reader.GetString(1);            }            selectBorrow = "select bookNo 书号,bookName 书名,author 作者, publisher 出版社,borrowDate 借出时间,returnDate 应归还时间 from borrowSituation where readerNo='" + readerno + "'";            ds=bop.getds(selectBorrow,"borrowSituation");            dataGridView1.DataSource = null;            dataGridView1.DataSource = ds.Tables["borrowSituation"];        }        public void DispBook(byte[] InputBuf)        {            //textBox1.Text = Convert.ToString(InputBuf);            string result = string.Empty;            string bookNo = string.Empty;            string bookName = "";            string author = "";            string publisher = "";            string borrowDate = "";            string returnDate = "";            string sqlselect = "";            BaseOperate bop = new BaseOperate();            SqlDataReader reader;            ASCIIEncoding encoding = new ASCIIEncoding();            for (int i = 0; i < InputBuf.Length; i++)//逐字节变为16进制字符,以%隔开            {                result += Convert.ToString(InputBuf[i], 16);            }            bookNo = int.Parse(result, System.Globalization.NumberStyles.AllowHexSpecifier).ToString();            //获取该图书的信息            sqlselect = "select * from bookInfo where bookNo='" + bookNo + "'";            reader = bop.getread(sqlselect);            while (reader.Read())            {                bookName = reader.GetString(1);                author = reader.GetString(2);                publisher = reader.GetString(3);                borrowDate = DateTime.Now.Date.ToShortDateString();                returnDate = DateTime.Now.AddDays(30).ToShortDateString();            }            sqlselect = "select * from borrowSituation where bookNo='" + bookNo + "'";            reader = bop.getread(sqlselect);            while (reader.Read())            {                readerNo.Text = reader.GetString(0);                readerName.Text = reader.GetString(1);            }            //借书操作            if (!reader.HasRows)            {                if (readerNo.Text != "")                {                    string insert = "";                                        insert = "insert into borrowSituation values('" + readerNo.Text + "','" + readerName.Text                        + "','" + bookNo + "','" + bookName + "','" + author + "','" + publisher + "','" + borrowDate +                        "','" + returnDate + "')";                    bop.getcom(insert);                    string selectBorrow = "select bookNo 书号,bookName 书名,author 作者, publisher 出版社,borrowDate 借出时间,returnDate 应归还时间 from borrowSituation where readerNo='" + readerNo.Text + "'";                    DataSet ds = new DataSet();                    ds = bop.getds(selectBorrow, "borrowSituation");                    dataGridView1.DataSource = null;                    dataGridView1.DataSource = ds.Tables["borrowSituation"];                }                else                    MessageBox.Show("请先放入读者卡,在放入书籍");            }            //还书操作            else            {                string sqlDelete = "";                string sqlInsert = "";                sqlDelete = "delete from borrowSituation where bookNo='" + bookNo + "'";                bop.getcom(sqlDelete);                sqlInsert= "insert into returnSituation values('" + readerNo.Text + "','" + readerName.Text                        + "','" + bookNo + "','" + bookName + "','" + author + "','" + publisher + "','" + borrowDate +                        "','" + DateTime.Now.ToShortDateString() + "')";                bop.getcom(sqlInsert);                string selectBorrow = "select bookNo 书号,bookName 书名,author 作者, publisher 出版社,borrowDate 借出时间,returnDate 应归还时间 from borrowSituation where readerNo='" + readerNo.Text + "'";                DataSet ds = new DataSet();                ds = bop.getds(selectBorrow, "borrowSituation");                dataGridView1.DataSource = null;                dataGridView1.DataSource = ds.Tables["borrowSituation"];            }        }        private void frmBorrowBook_Load(object sender, EventArgs e)        {            serialReader.DataReceived += new SerialDataReceivedEventHandler(Comm_ReaderReceived);            serialBook.DataReceived += new SerialDataReceivedEventHandler(Comm_BookReceived);            disp_reader = new Displaydelegate(DispReader);            disp_book = new Displaydelegate(DispBook);            serialReader.Open();            serialBook.Open();        }        private void close_Click(object sender, EventArgs e)        {            serialBook.Close();            serialReader.Close();            this.Close();        }    }}
程序源码及数据库下载地址:http://download.csdn.net/detail/kevin_iot/9724026

0 0