基于RFID技术校园一卡通的设计与实现.docx

上传人:b****8 文档编号:23698121 上传时间:2023-05-20 格式:DOCX 页数:45 大小:595.74KB
下载 相关 举报
基于RFID技术校园一卡通的设计与实现.docx_第1页
第1页 / 共45页
基于RFID技术校园一卡通的设计与实现.docx_第2页
第2页 / 共45页
基于RFID技术校园一卡通的设计与实现.docx_第3页
第3页 / 共45页
基于RFID技术校园一卡通的设计与实现.docx_第4页
第4页 / 共45页
基于RFID技术校园一卡通的设计与实现.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

基于RFID技术校园一卡通的设计与实现.docx

《基于RFID技术校园一卡通的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于RFID技术校园一卡通的设计与实现.docx(45页珍藏版)》请在冰豆网上搜索。

基于RFID技术校园一卡通的设计与实现.docx

基于RFID技术校园一卡通的设计与实现

基于RFID技术的校园一卡通项目

学号

班级

项目分工

何印

20061578

软件0602

饭卡充值、挂失、办卡模块

20061569

软件0602

学生消费、管理员管理模块

胡成学

20061558

软件0602

项目需求分析、程序纠错模块

指导教师:

曾立胜

 

二OO八年十一月八日

 

 

第一章校园一卡通

1.1、概述

一卡通系统是高校信息化、数字化的重要组成部分,是感应智能卡在高校中使用的发展趋势,感应智能卡具有性强、容量大、操作便捷、可扩展性强等特性,学生、教职工可以在各自的银行网点或自助终端实现存取款、消费、转账等金融支付;可以代替学生在学校的所有个人证件(如工作证、图书证、医疗证等),应用于需要身份识别的各种MIS系统;可以通过设在感应智能卡的电子钱包实现餐饮、购物、上机上网、医疗等部消费。

一卡通系统涵盖了就餐管理、消费管理、考勤管理、澡堂管理、电教室管理、图书管理、宿舍集中用电、用水、出入门禁管理等。

非接触式RFID卡的主要特点:

非接触感应技术基于电磁感应原理,无需物理接触即可完成信息读写,读写所需瞬间能量由读写器提供,相对以前各种读写技术有如下特点:

1.1读写无需物理接触,避免了物理接触所带来的各种障碍如卡片、读写头擦划受损等。

食堂油污和高温对信息读写无影响。

1.2卡片表面无裸露芯片,避免了芯片脱落、静电击穿、弯曲损坏等现象。

1.3使用时无需固定方向,方便快捷。

1.4每卡片均有不同序号,无法复制,性极高。

1.5存储空间可分为多个存储区,每个存储区均有各自密钥,能满足现代企事业单位或智能楼宇管理的各种功能,实现食堂售饭、门禁、考勤、电子消费、停车场管理等多项功能的"一卡通"管理。

1.6每次信息读写过程符合ISO/IECDIS9789-2标准的三次DES加密要求,安全可靠。

1.2、基本功能

校园一卡通具有电子身份识别和电子钱包的功能,可以替代校园传统的教师工作证、学生证、借书证、食堂就餐券等证件和现金交易。

1.2.1、RFID卡的管理

RFID卡的管理主要提供了RFID卡的发卡、充值、挂失、退卡、换卡、回收卡等RFID卡本身流动的管理功能,以及对RFID卡终端设备进行管理和不同系统模块管理员用户的权限限制,同时对这些行为做必要的记录和备档以方便挂失和查询。

1.2.2、功能划分

(1)、学校食堂、消费管理

(2)、门禁管理

(3)、考勤管理

(4)、图书馆管理

(5)公寓水控管理等

图1.1校园一卡通系统体系结构图

1.2.3、食堂收费系统功能

我们主要设计的是食堂收费系统,主要实现以下功能:

1.时间段日消费统计:

时间段日消费统计报表指的是选定时间各天的消费统计情况。

2.日消费明细:

日消费明细报表指的是选定时间每天每笔的消费情况。

3.限额功能:

对卡片进行限额设置,控制用户在一定时间段的消费活动。

4.卡片开户功能:

对新用户进行卡片开户。

5.卡片充值功能:

对用户卡片进行充值操作。

6.部门结算功能:

统计该设备管理部门在上个月的营业情况。

7.个人消费汇总功能:

提供个人消费记录汇总,即在某时间段个人的消费汇总情况。

8.余额查询功能:

查询到目前为止用户的余额情况。

9.各刷卡点消费汇总功能:

提供某时间段各刷卡点的消费汇总情况。

10.饭卡挂失、激活处理。

11.提供用户点菜菜单。

 

第二章食堂收费管理系统设计方案

2.1、子模块划分

在食堂消费系统中,将该系统划分为3个子模块——一般管理员模块、高级管理员模块和刷卡点管理员,分别实现不同的功能。

2.1.1、一般管理员模块

这里的一般管理员是指在充值点的工作人员,他们的主要功能是:

登陆:

输入职工号和密码

充值:

充值前,显示当前金额;充值后,显示充值后的金额。

此项不需要输入卡号。

查询:

可查询用户的基本信息,如:

学号、、性别、卡号、专业班级、卡上金额。

在学校里一般账号就是学号,而卡号是RFID卡本身的序列号。

此外,用户还可以查询一周的消费金额及清单。

挂失、激活:

将RFID卡上的金额和失主信息都冻结,锁定卡号,直至失主重新办理卡,将失主的所有信息转移到新卡上。

同时可以实现饭卡挂失后的激活功能,为用户提供方便。

办卡:

登记学生的基本信息以及充值。

2.1.2、高级管理员模块

高级管理员指的是系统管理员,

查询:

当日的充值金额和次数以及学生的总的消费金额,各个商家的总入账金额,以及各个刷卡点的刷卡金额和次数。

限制:

限制学生每天在某一时间段刷卡的额度,在这里我们设置了刷卡时间段是早上6:

00——晚上10点,每次刷卡额度最高为20元。

基本管理:

管理一般管理员的基本信息,如职工号、、号等。

2.1.3、刷卡点管理员模块

在各个刷卡点,都有刷卡的工作人员,他们的功能很简单,就是是刷卡(即扣除卡上的金额),并且可以设定自动刷卡金额,同时还能设定当天的菜名以及才的价格等信息。

2.2、系统流程

2.2.1、消费系统结构图

图2.1IC卡消费系统结构图

2.2.2、系统流程图

图2.2食堂售饭系统流程图

2.2.3、E-R图

根据需求分析,一共提取出来了5个实体:

高级管理员、一般管理员、刷卡人员、学生和磁卡。

他们之间的实体—联系图如下图2.3:

图2.3实体—联系图

2.3、开发工具的选择

2.3.1、开发工具

对于此系统来讲,目前有很多种开发工具可供选择,包括VB、PB、C#、C、C++等。

我们采用的是VC++6.0编译环境,采用MFC类库。

VisualC++不仅仅是一个编译器,更是一个全面的应用程序开发环境。

VisualC++作为一种程序设计语言,它同时也是一个集成开发工具,提供了软件代码自动生成和可视化的资源编辑功能。

在使用VisualC++开发应用程序的过程中,系统为我们生成了大量的各种类型的文件。

VisualC++采用的框架是MFC。

MFC不仅仅是人们通常理解的一个类库。

MFC是一个很大的、扩展了的C++类层次结构,它能使开发Windows应用程序变得更加容易。

MFC的类库可以让我们拥有很多工具方便的进行程序设计,同时还提供许多常用的框架,减少程序员的工作量。

MFC还可以可以实现不同操作系统之间的移植以及不同处理器之间的移植。

每当新的Windows版本出现时,MFC也会得到修改以便使旧的编译器和代码能在新的系统中工作。

MFC也回得到扩展,添加新的特性、变得更加容易建立应用程序。

使用MFC的最大优点是它为我们做了所有最难做的事。

MFC中包含了上成千上万行正确、优化和功能强大的Windows代码。

我们所调用的很多成员函数完成了我们自己可能很难完成的工作。

从这点上讲,MFC极加快了我们的程序开发速度。

由于MFC编程方法充分利用了面向对象技术的优点,它使得我们编程时极少需要关心对象方法的实现细节,同时类库中的各种对象的强大功能足以完成我们程序中的绝大部分所需功能,这使得应用程序中程序员所需要编写的代码大为减少,有力地保证了程序的良好的可调试性。

最后要指出的是MFC类库在提供的对象的各种属性和方法都是经过谨慎的编写和严格的测试,可靠性很高,保证了使用MFC类库不会影响程序的可靠性和正确性。

2.3.2、数据库

数据库的选择,有2种选择,一个是SQL另外一种是Access,而SQL是适合比较大一点的系统数据库,对于我们的这个食堂收费系统,Access完全够了。

而且比起SQL,Access具有如下优点:

(1)存储方式单一

Access管理的对象有表、查询、窗体、报表、页、宏和模块,以上对象都存放在后缀为(.mdb)的数据库文件种,便于用户的操作和管理。

(2)面向对象

Access是一个面向对象的开发工具,利用面向对象的方式将数据库系统中的各种功能对象化,将数据库管理的各种功能封装在各类对象中。

它将一个应用系统当作是由一系列对象组成的,对每个对象它都定义一组方法和属性,以定义该对象的行为和外国,用户还可以按需要给对象扩展方法和属性。

通过对象的方法、属性完成数据库的操作和管理,极简化了用户的开发工作。

同时,这种基于面向对象的开发方式,使得开发应用程序更为简便。

(3)界面友好、易操作

Access是一个可视化工具,是风格与Windows完全一样,用户想要生成对象并应用,只要使用鼠标进行拖放即可,非常直观方便。

系统还提供了表生成器、查询生成器、报表设计器以及数据库向导、表向导、查询向导、窗体向导、报表向导等工具,使得操作简便,容易使用和掌握。

(4)集成环境、处理多种数据信息

Access基于Windows操作系统下的集成开发环境,该环境集成了各种向导和生成器工具,极提高了开发人员的工作效率,使得建立数据库、创建表、设计用户界面、设计数据查询、报表打印等可以方便有序地进行。

(5)Access支持ODBC(开发数据库互连,OpenDataBaseConnectivity),利用Access强大的DDE(动态数据交换)和OLE(对象的联接和嵌入)特性,可以在一个数据表中嵌入位图、声音、Excel表格、Word文档,还可以建立动态的数据库报表和窗体等。

Access还可以将程序应用于网络,并与网络上的动态数据相联接。

利用数据库访问页对象生成HTML文件,轻松构建Internet/Intranet的应用。

 

第三章食堂收费管理系统实现

3.1、运行环境

windowsxpx86

3.2、RFID设备接口

该项目采用的读卡器是射频设备D8。

VC6.0与RFID射频设备D8是通过D8自带的一个WINDOWS32位动态库“comRD800.dll”所提供的接口来进行连接的。

在此库函数中,提供了有如下主要的接口函数。

1.intdc_init(intport,longbaud);

功能:

初始化通讯口

参数:

port:

取值为0-19时,表示串口1~20;为100时,表示USB口通讯,此时波特率无效。

baud:

为通讯波特率9600~115200

返回:

成功则返回串口标识符>0,失败返回负值

2.intdc_exit(inticdev);

功能:

关闭串口

参数:

icdev:

通讯设备标识符

返回:

成功返回0

3.intdc_card(inticdev,unsignedchar_Mode,unsignedlong*_Snr);

功能:

寻卡,能返回在工作区域某卡的序列号

参数:

icdev:

通讯设备标识符;_Mode:

寻卡模式;_Snr:

返回的卡序列号

4.intdc_beep(inticdev,unsignedint_Msec);

功能:

蜂鸣

参数:

icdev:

通讯设备标识符;unsignedint_Msec:

蜂鸣时间,单位是10毫秒

返回:

成功则返回0。

3.3、数据库的建立

3.3.1、数据库表的建立

在系统中,我们采用的是Access数据库,建立了高级管理员表、记录一般管理员信息的Worker表、充值记录表ChargeRecord、专门保存学生信息的表、当天供应的菜单表、记录学生消费记录的StuItem表。

表3-1高级管理员表:

此表用来记录高级管理员、登陆名和密码。

表3-2Worker表

此表记录了一般管理员(即充值工作人员)的信息,包括、登陆密码、家庭住址和性别等。

表3-3充值记录表:

此表用来记录学生的充值记录,包括学生名字、充值金额、卡号和充值时间。

表3-4菜单表:

此表记录了当天食堂的菜单,包括菜名、价格和某种菜被点次数。

表3-5学生表:

该表记录了学生所持的卡的各种信息,包括卡的ID号、学生的学号、学生、卡上的余额、卡的状态(激活或锁定)、卡激活或锁定的时间。

表3-6StuItem表

该表记录了学生当天消费的信息,包括IC卡号、学生学号、、消费时间和消费的菜名。

3.3.2、系统数据库连接设计

在系统的数据库的连接设计上,我们利用了两个对象:

一个是Connection对象,一个是Recordset对象。

我们通过Connection对象的Open方法来进行连接数据库的,并且用Recordset对象取得结果记录集进行查询、处理。

在头文件中定义HRESULThr。

一、创建Connection对象并连接数据库

首先我们在头文件中添加一个指向Connection对象的指针:

_ConnectionPtrm_pConnection;

函数实现如下:

hr=m_pConnection.CreateInstance("ADODB.Connection");//创建Connection对象

if(SUCCEEDED(hr))

{

m_pConnection->Open(

"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=Info.mdb",

"","",adModeUnknown);//连接数据库

}

二、执行SQL命令并取得结果记录集

首先定义了一个指向Recordset对象的指针:

_RecordsetPtrm_pRecordset;

并为其创建Recordset对象:

m_pRecordset.CreateInstance("ADODB.Recordset")

函数实现如下:

hr=pRecordset.CreateInstance("ADODB.Recordset");//创建Recordset对象

pRecordset->Open("SELECT*FROMStudent",

_variant_t((IDispatch*)m_pConnection,true),

adOpenStatic,

adLockOptimistic,

adCmdText);

3.4、代码实现

3.4.1、高级管理员登陆的设计和实现

程序使用VC6.0+XtremeToolkitPro2008(12.0.2)界面库进行开发,程序分为综合信息管理、员工信息管理、学生信息管理、菜单管理四个模块。

图3.1

这是通过XtremeToolkitPro2008的一个类进行建立的

CXTPPropertySheetps(_T("CustomNavigatorSample"));

CPropertyPageTaskPanelNavigator*pList=newCPropertyPageTaskPanelNavigator();

ps.SetNavigator(pList);

//以下分别为Info数据库表;

Adminadmin;

Workerworker;

MenuCtrlmenu;

Affairsaffairs;

CCtrlStudentstu;

ps.AddPage(&admin);

ps.AddPage(&worker);

ps.AddPage(&affairs);

ps.AddPage(&menu);

ps.AddPage(&stu);

ps.DoModal();

通过上面的代码我们可以创建上面左边的窗口,窗口右边的信息则是使用CXTListCtr进行创建的,CXTPPropertySheet实际上是将4个窗口进行继承管理,而每个Dialog窗口则改成了CXTPPropertyPage的类型,这个类也是从CDialog派生过来的,每个对话框创建的同时,我们对他进行初始化,包括创建CListCtrl的头部,设置他的风格,设置他的大小,从数据库中读取数据等等,因为程序量使用了CListCtrl,因此,将它封装成了一个类进行调用

#include"StdAfx.h"

#ifndefMYLISTCTRL

#defineMYLISTCTRL

classMyListCtrl

{

public:

MyListCtrl(intn):

size(0){}

voidCreateHead(CXTListCtrl&listctrl,CStringp[],ints)

{

inti=0;

size=s;

for(i=0;i

{

listctrl.InsertColumn(i,_T(p[i]),LVCFMT_LEFT,80);

}

}

voidSetHeadStyle(CXTListCtrl&listctrl,CXTHeaderCtrl&header)

{

HWNDhWndHeader=listctrl.GetDlgItem(0)->GetSafeHwnd();

header.SubclassWindow(hWndHeader);

header.EnableAutoSize(TRUE);

header.ResizeColumnsToFit();

listctrl.ModifyExtendedStyle(LVS_EX_FULLROWSELECT,LVS_EX_FULLROWSELECT);

}

voidInsertMyText(CXTListCtrl&listctrl,introw,CString*context)

{

listctrl.InsertItem(row,context[0],0);

for(inti=1;i

{

listctrl.SetItem(row,i,LVIF_TEXT,context[i],0,NULL,NULL,NULL);

}

}

voidDeleteAll(CXTListCtrl&listctrl)

{

listctrl.DeleteAllItems();

}

protected:

intsize;

};

#endif

共有3个函数,分别是:

voidSetHeadStyle(CXTListCtrl&listctrl,CXTHeaderCtrl&header)

voidInsertMyText(CXTListCtrl&listctrl,introw,CString*context)

voidCreateHead(CXTListCtrl&listctrl,CStringp[],ints)

而CreateHead()用于创建头部:

图3.2

SetHeadStyle()用于设置头部的风格,比如上面的5个头信息都是自动设置自己的大小的,他们会根据窗口分配的大小自动进行调整。

InsertMyText()用于像里面添加数据,数据项有一个CStringstr[]数组进行存储。

数据的添加涉及到数据库的操作,我们这里是采用的ODBC编程方式,可能ODBC最大的缺点是需要设置数据源,但是我们可以在程序中进行自动设置。

代码如下:

CStringsPath;

GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);

sPath.ReleaseBuffer();

intnPos;

nPos=sPath.ReverseFind('\\');

sPath=sPath.Left(nPos);

nPos=sPath.ReverseFind('\\');

sPath=sPath.Left(nPos);

CStringlpszFile=sPath+"\\Info.mdb";

char*szDesc;

intmlen;

szDesc=newchar[256];

sprintf(szDesc,"DSN=%s?

DESCRIPTION=TOCsupportsource?

DBQ=%s?

FIL=MicrosoftAccess?

DEFAULTDIR=%s?

?

","Info",lpszFile,sPath);

////////////////////////////得到路径

mlen=strlen(szDesc);

for(inti=0;i

{

if(szDesc[i]=='?

')

szDesc[i]='\0';

}

if(FALSE==SQLConfigDataSource(NULL,ODBC_ADD_DSN,"MicrosoftAccessDriver(*.mdb)\0",(LPCSTR)szDesc))

AfxMessageBox("SQLConfigDataSourceFailed");

try

{

CStringstrConnect;

strConnect.Format("DSN=Info;");

if(!

m_DB.OpenEx(strConnect,CDatabase:

:

useCursorLib))

{

AfxMessageBox("UnabletoConnecttotheSpecifiedDataSource");

returnFALSE;

}

}////////////////////配置ODBC

通过上面的代码,程序运行时可以自动添加数据源信息,下面有个管理元信息,当我们单击上面的列表框时则会自动显示管理员的信息

图3.3管理员信息

通过点击,我们可以查看该管理员的充值情况,包括该管理员所有的充值信息

图3.4充值信息

在该界面的右边有统计信息,包括单笔最大、充值统计、月充值额三个部分。

单笔最大:

表示所充值的所有的数据中冲得最多的一次。

充值总计:

表示充值金额总共有多少。

月充值额:

表示这个月冲了多少钱。

我们可以通过按时间查询来设置需要查询的月份。

在“按时间查询”有一个时间列表框,通过它我们可以查询在具体的某一天充值了那些人,并将这些信息显示出来;同时还可以通过“按卡号查询”来查询这个人的充值记录。

 

员工管理:

员工管理用于管理我们的充值员,

图3.5员工管理

 

我们可以对他们进行四种操作,它们是修改密码,删除,修改信息,添加新员工。

图3.6修改密码

图3.7添加新员工

因为我们的编号即为登陆号是唯一的,所以我们根据数据库的已存信息进行自动分配。

intnID=0;

intmID=0;

while(!

worker.IsEOF())

{

mID=atoi(worker.m_ID);

if(mID>=nID)

{

nID=mID+1;

}

worker.MoveNext();

}///分配代码

图3.8修改信息

当然我们每次进行的操作即为数据库操作,因此打开关闭数据库必不可少

AddWinfoinfo;

WorkerInfoworker;

CStringlineinfo[5];

CStringstrSQL="SELECT*FROMWorker";

if(!

worker.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1