09计科A23430110陈南博加油站刷卡.docx

上传人:b****7 文档编号:10641257 上传时间:2023-02-22 格式:DOCX 页数:19 大小:238.28KB
下载 相关 举报
09计科A23430110陈南博加油站刷卡.docx_第1页
第1页 / 共19页
09计科A23430110陈南博加油站刷卡.docx_第2页
第2页 / 共19页
09计科A23430110陈南博加油站刷卡.docx_第3页
第3页 / 共19页
09计科A23430110陈南博加油站刷卡.docx_第4页
第4页 / 共19页
09计科A23430110陈南博加油站刷卡.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

09计科A23430110陈南博加油站刷卡.docx

《09计科A23430110陈南博加油站刷卡.docx》由会员分享,可在线阅读,更多相关《09计科A23430110陈南博加油站刷卡.docx(19页珍藏版)》请在冰豆网上搜索。

09计科A23430110陈南博加油站刷卡.docx

09计科A23430110陈南博加油站刷卡

 

嵌入式操作系统课程设计

作品说明书

 

 

计算机与信息学院

 

题目:

加油站刷卡系统

学生:

陈南博

学号:

20113430110

班级:

09计科A2

指导教师:

崔莉莉

日期:

2012年12月29日

加油站刷卡系统软件(系统)说明书

1.综述

用QtDesigner3.2.1设计一个加油站的刷卡系统,可以用用户名密码或者刷卡登陆,登陆系统内可以注册新卡号,加油,充值,调节软件背景色,十进制到十六进制的限位换算等功能,并且在XBase270平台上运行。

2.加油站刷卡软件(系统)模块设计

加油站刷卡软件模块分为:

程序加载splash模块,登陆模块,主界面模块(信息模块、加油输油模块、为卡充值模块、调节背景颜色模块、十转十六进制模块、退出模块),注册模块等。

2.1软件(系统)功能

1.程序加载的splash模块功能:

实现程序启动延迟5秒,程序启动画面一般用于显示软件信息(名称、作者、版权等)以及减少用户在程序加载过程中的枯燥感。

在Qt中,可以通过QSplash类来为应用程序添加一个启动画面,它会在应用程序的主窗口出现前显示一个图片,并且可以在图片上显示想要输出的信息(如显示作者信息等)。

2.登陆模块功能:

实现登录界面框,输入正确的账号密码才能实现登录,否则会弹出确认框,或者注册一个新用户。

为了防止他人盗用,所以设计一个清空数据按钮防止他人盗用,还需要实现一个使用TAB键,实现几个控件内的切换。

3.主界面模块功能:

在这个模块需要实现几个功能:

卡号和卡内余额的显示、加油输油过程的软件显示、充值金额并且更新信息的卡内余额显示、三种不同空间对主界面的背景颜色调节、0-255十进制转换为00-FF十六进制的转换、退出主界面功能。

4.注册功能:

注册一个新卡号。

5.窗口之间的切换功能:

实现窗口之间的先后顺序、防止已经登录了重复登录。

2.2软件(系统)结构

首先显示一个程序加载画面,之后显示一个登录界面,登录失败的话会显示一个确认返回或者注册一个用户界面,登录成功则会出现一个程序主界面。

主界面包含了加油过程监控、加油卡储值等功能。

其中包含了一个退出功能,是实现退出主界面单不退出登录界面。

软件结构流程图:

3.软、硬件平台介绍

软件是挪威TrollTech公司出品的QtDesigner3.2.1,VisualC++6.0、SQLite,硬件是深圳市武耀博德信息技术有限公司的EMX270-Moudle-V4实验平台。

3.1软件要求

1.Qt是一个跨平台应用程序和UI开发框架。

使用Qt您只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。

QT特点:

直观的C++类库跨桌面和嵌入式操作系统的移植性,具有跨平台IDE的集成开发工具在嵌入式系统上的高运行时间性能,占用资源少。

Qt是一个跨平台的C++图形用户界面库,由挪威TrollTech公司出品,目前包括Qt、基于FrameBuffer的QtopiaCore、快速开发工具QtDesigner和国际化工具QtLinguist等部分。

Qt支持所有的UNIX系统,当然也包括Linux系统,还支持WinNT/Win2k、Windows95/98平台。

基本上Qt同X-Window上的Motif、Openwin、GTK等图形界面库和Windows平台上的MFC、OWL、VCL、ATL是同类型的。

不过Qt还具有下列一些优点。

(1)优良的跨平台特性。

  Qt支持下列操作系统:

MicrosoftWindows95/98、MicrosoftWindowsNT、Linux、Solaris、SunOS、HP-UX、DigitalUNIX(OSF/1、Tru64)、Irix、FreeBSD、BSD/OS、SCO、AIX、OS390和QNX等。

(2)面向对象。

  Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。

Qt提供了一种称为signals/slots的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。

(3)丰富的API。

  Qt包括多达250个以上的C++类,还提供基于模板的collections、serialization、file、I/Odevice、directorymanagement和date/time类。

甚至还包括正则表达式的处理功能。

(4)支持2D/3D图形渲染,支持OpenGL。

(5)大量的开发文档。

(6)XML支持。

2.VisualC++6.0,简称VC或者VC6.0,是微软推出的一款C++编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。

VisualC++是一个功能强大的可视化软件开发工具。

自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。

虽然微软公司推出了VisualC++.NET(VisualC++7.0),但它的应用有很大的局限性,只适用于Windows2000、WindowsXP和WindowsNT4.0。

所以实际中,更多的是以VisualC++6.0为平台。

VisualC++6.0由Microsoft开发,它不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrateddevelopmentenvironment,IDE)。

VisualC++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。

这些组件通过一个名为DeveloperStudio的组件集成为和谐的开发环境。

Microsoft的主力软件产品。

VisualC++是一个功能强大的可视化软件开发工具。

自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。

虽然微软公司推出了VisualC++.NET(VisualC++7.0),但它的应用的很大的局限性,只适用于Windows2000,WindowsXP和WindowsNT4.0。

所以实际中,更多的是以VisualC++6.0为平台。

 VisualC++6.0以拥有“语法高亮”,自动编译功能以及高级除错功能而著称。

比如,它允许用户进行远程调试,单步执行等。

还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。

其编译及创建预编译头文件(stdafx.h)、最小重建功能及累加连结(link)著称。

这些特征明显缩短程序编辑、编译及连结的时间花费,在大型软件计划上尤其显著。

3.SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。

它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。

SQLite第一个Alpha版本诞生于2000年5月。

至今已经有12个年头,SQLite也迎来了一个版本SQLite3已经发布。

SQLite是遵守的关系型数据库管理系统,它包含在一个相对小的C库中。

它是D.RichardHipp建立的公有领域项目。

不像常见的客户-服务器范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。

所以主要的通信协议是在编程语言内的直接API调用。

这在消耗总量、延迟时间和整体简单性上有积极的作用。

整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。

它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。

3.2硬件平台

硬件是深圳市武耀博德信息技术有限公司的EMX270-Moudle-V4实验平台。

EM-X270是一个全功能的电脑板,专为手持/移动实现。

它的功能内容都差不多,最新一代的掌上电脑和智能手机,包括所有类型的无线,卫星和蜂窝连接在今天的国家的最先进的移动设备。

然而,它的目的是提供自定义的实现,保持灵活性,预计从嵌入式电脑板。

EM-X270提供可选的显示,电池,充电器和键盘,提供了一个独立的解决方案,只需要一个实施的最后定制产品的外壳。

EM-X270板的功能集结合了32位CPU,SDRAM,FLASH盘和重要的计算机外设。

车载无线接口包括WiFi,蓝牙,GPS和蜂窝语音/GPRS调制解调器。

最后一个接口的设备基本上是一个定制的手机。

EM-X270有几个连接器和插槽中所使用的PDA和内部扩展连接器,用于特定于应用程序的添加上的。

准备到运行WindowsCE和Linux套装软体可从CompuLab。

产品亮点:

嵌入式应用的全功能掌上电脑板

Intel的XScalePXA270CPU,频率高达520MHz,高速缓存32+32KB,WMMX

128MB的SDRAM

512兆字节的闪存盘

蜂窝电话语音和GPRS调制解调器

集成3.5英寸480×640VGA显示屏,触摸屏(可选)

图形控制器,支持STN和TFT面板,800×600最大分辨率LCD面板支持

无线802.11b/g接口

蓝牙接口

SIRF-III芯片GPS接收器,

扩展连接器

摄像头接口

SD/SDIO/MMC插槽

声音编解码器,集成扬声器和麦克风

从主机USB端口,串行端口,GPIO

主要和备用电池和电池充电器

非常低的待机与工作功耗性消费

尺寸-97x66毫米

3.3软件(系统)移植过程

1.Preparesoftwareandcross-compiletoolchain

2.Installtoolchain这里使用的是3.3.2版本的交叉编译工具链

3. Installtmake

4. Installe2fsprogs

5.Compiletslib

6.Installqt-patch

7. InstallQt/Embedded

8.InstallQt/X11

8. BuildQtopia

9.制作文件系统,下载到开发板上运行

10.Runningapplication

4.系统运行界面

装载画面:

登录画面:

输入错误的账号密码:

注册画面:

程序主界面:

5.主要源程序代码

界面设计是用图形界面完成的,所以图形界面的代码略。

Main.cpp:

#include

#include

#include

#include

#include"qqqq.h"

#include"form_____dlsb.h"

#include"form__main.h"

intmain(intargc,char**argv)

{

QApplicationa(argc,argv);

QSplashScreen*splash=newQSplashScreen;//新建加载画面

splash->setPixmap(QPixmap("splash.png"));//设置图片

splash->show();//显示图片

for(inti=0;i<5000;i++)

{

splash->repaint();重画加载画面5000次

}

//Form__mainw;//可略

denglu_formlogin;

login.show();显示

splash->finish(&login);//图片一直显示到login加载完成,这里只是让加载画面画5000次并非真的是加载程序

deletesplash;//释放空间,节省内存

a.connect(&a,SIGNAL(lastWindowClosed()),&a,SLOT(quit()));当最后个窗口关闭后,关闭所有程序,如果没这句话,关闭程序后,系统进程中此程序并未关闭

returna.exec();

}

 

登陆框,qqqq.ui.h

这个界面所用信号和槽的连接表:

#include"form__main.h"考虑到编译生成的.cpp和.h文件易丢失,或删除后重新编

#include"form_banka.h"译很多头文件无法识别,所以吧自己需要加的头文件,

#include"form_____dlsb.h"放在了.ui.h内。

所有的都用这方法。

voiddenglu_form:

:

btn_login_clicked()登录按钮按下时所调用的槽

{

if(text_id->text()==tr("2013")&&text_key->text()==tr("2013"))//判断用户名和密码是否正确

{登录成功账号密码正确的话:

Form__mainw;程序主界面

if(!

w.exec()==0)如果主界面未执行

w.exec();则执行

else{w.show();}}若执行,就显示出来

若登录失败:

else{Form_dlsbdlsb;登录失败画面

if(!

dlsb.exec()==0)同form_mainw

dlsb.exec();

else{dlsb.show();}

}

}

voiddenglu_form:

:

text_id_textChanged()当卡号的那个输入框改变时的槽

{if(text_id->text()==""){当卡号输入框为空

btn_login->setEnabled(FALSE);}登录按钮不能按

else{btn_login->setEnabled(TRUE);}如果有东西则可以按

}

voiddenglu_form:

:

text_key_textChanged()密码输入框的槽,同卡号输入框

{if(text_key->text()==""){

btn_login->setEnabled(FALSE);}

else{btn_login->setEnabled(TRUE);}

}

 

voiddenglu_form:

:

btn_regist_clicked()注册按钮

{

Form_bankabanka;

if(!

banka.exec()==0)同main.cpp的form_main

banka.exec();

else{banka.show();}

}

注册新用户的对话框,form_banka.ui.h:

voidForm_banka:

:

btncan()checkbox被按下时的槽,因为qt无checked槽所以比较麻烦

{staticintx=0;设一个静态x

x++;checkbox每按一下就+1

if(x%2==1){btn_zhuce->setEnabled(TRUE);}若x为奇数,注册确认按钮可以用

else{btn_zhuce->setEnabled(FALSE);}若为偶数,则不可引用

}

voidForm_banka:

:

btn_fanhui_clicked()返回主界面按钮

{this->hide();}隐藏当前框

voidForm_banka:

:

btn_zhuce_clicked()注册确认按钮按下的槽

{

QMessageBox:

:

information(this,"addsuccessful",显示一个信息,因为无数据库,

"addsuccessful\n"因为无数据库所以新建卡号,密

"addsuccessful");码无实际效果

}

程序主界面,form_main:

#include

#include

#include

QTimertimer;一开始,加油的progress想用timer做的,但用其他方法做了,遗留下来的,为了以改进程序方便

voidForm__main:

:

pushButton8_clicked()关闭程序主界面按钮的槽

{

this->hide();隐藏主界面

}

voidForm__main:

:

btn_chonzhi_clicked()充值按钮槽

{

QStringm=text_m1->text();设一个m读取余额的值

boolok;把m的值转为10进制的数dec

intdec=m.toInt(&ok,10);

if(r1->isChecked())如果选中充值50元的单选按钮

{dec=dec+50;dec=+50

QStrings=QString:

:

number(dec,10);把dec转为Str型的s

text_m1->setText(s);}将s赋值给余额

elseif(r2->isChecked()){下面分别为3个单选按钮的判断赋值过程与前面大致相同故略

dec=dec+100;

QStrings=QString:

:

number(dec,10);

text_m1->setText(s);}

elseif(r3->isChecked()){

dec=dec+200;

QStrings=QString:

:

number(dec,10);

text_m1->setText(s);}

elseif(r4->isChecked()){

dec=dec+500;

QStrings=QString:

:

number(dec,10);

text_m1->setText(s);}

}

voidForm__main:

:

btn_start_clicked()充值按钮

{

QStringm=text_m1->text();取值

boolok;转10进制int型

intdec=m.toInt(&ok,10);

cb1->setEnabled(FALSE);设置选择金额和充值按钮不可用

btn_start->setEnabled(FALSE);

if(cb1->currentItem()==0)若选择了50元的按钮

{

dec=dec-50;dec=-50

if(dec<0){QMessageBox:

:

information(this,"needmoremoney",若余额不够则

"pleasechongzhi\n"提示钱不够要充值

"youhaven'tenoughmoney.");

cb1->setEnabled(true);金额选择和充值按钮设置为可用

btn_start->setEnabled(true);}

else{若金额够,

QStrings=QString:

:

number(dec,10);把减去后的dec赋值给QStrs

text_m1->setText(s);s赋给余额显示

cb1->setEnabled(true);金额选择下来菜单可用

btn_start->setEnabled(true);充值按钮可用

progress->setTotalSteps(500);设置加油状态的进度条500步

intp1=0;建一个标示

while(p1<50000000){做一个延迟的防止进度条过快

p1++;

progress->setProgress(p1);}进度条显示

}

}以下是另外三种金额与前大致相同,故略

elseif(cb1->currentItem()==1)加油100元金额

{

dec=dec-100;

if(dec<0){QMessageBox:

:

information(this,"needmoremoney",

"pleasechongzhi\n"

"youhaven'tenoughmoney.");

cb1->setEnabled(true);

btn_start->setEnabled(true);}

else{

QStrings=QString:

:

number(dec,10);

text_m1->setText(s);

cb1->setEnabled(true);

btn_start->setEnabled(true);

progress->setTotalSteps(1000);

intp2=0;

while(p2<50000000){

p2++;

progress->setProgress(p2);

}

}}

elseif(cb1->currentItem()==2){加油200元金额

dec=dec-200;

if(dec<0){QMessageBox:

:

information(this,"needmoremoney",

"pleasechongzhi\n"

"youhaven'tenoughmoney.");

cb1->setEnabled(true);

btn_start->setEnabled(true);}

else{

QStrings=QString:

:

number(dec,10);

text_m1->setText(s);

cb1->setEnabled(true);

btn_start->setEnabled(true);

progress->setTotalSteps(2000);

intp3=0;

while(p3<50000000){

p3++;

progress->setProgress(p3);

}

}

}

elseif(cb1->currentItem()==3)加油500元金额

{

dec=dec-500;

if(dec<0){QMessageBox:

:

information(this,"needmoremoney",

"pleasechongzhi\n"

"youhaven'tenoughmoney.");

cb1->setEnabled(true);

btn_start->setEnabled(true);}

else{

Q

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

当前位置:首页 > 教学研究 > 教学计划

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

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