1、项目名称

掌上银行APP

2、 项目需求

(1) 登陆注册
(2) 跳转至操作界面
(3) 可以查询账户信息
(4) 可以绑定账户
(5) 可以存款
(6) 可以转账

3、 项目业务设计流程

(1)、登陆、注册
注册账号,输入账号密码,发送给服务器,服务器将账号密码写入数据库
(2)、跳转页面
发送登陆成功信号,登录界面关闭,操作界面显示。
(3)、绑定账户
输入账户信息,从数据库中核对信息
(4)、查询账户信息
从数据库读取信息,显示在用户界面
(5)、转账
指定转账用户,输入转账金额,修改数据库中用户的金额信息

4、 流程图



服务器的实现:
作用:

  1. 用来连接客户端并将已连接的客户端ip地址和发送的消息显示在 TextEdit控件中;
  2. 连接sqlite3数据库,解析客户端的消息按照客户端发送的命令对数据库 进行操作,将结果发送给客户端;
  3. 实现流程:
    QTcpServer::listen绑定主机ip并建立监听
    QTcpSocket实现接收和发送数据

客户端的实现

  1. 通过Tcp协议实现客户端与服务器的连接

  2. 页面设计图

登录成功跳转到客户端界面,如果账号已被注册或者密码错误,弹出相应提示窗口。
3,实现过程
将客户端界面创建为主界面的子窗口,通过自定义信号实现信息传递,
当客户端界面点击按钮时,发送信号给主界面,在主界面函数中将数据发送给服务器进行处理

客户端

#include "mylogin.h"mylogin::mylogin(QWidget *parent): QDialog(parent)
{this->init_ui();this->sck = new QTcpSocket();this->sck->connectToHost("127.0.0.1",8888);connect(this->sck, &QTcpSocket::connected, this, &mylogin::connect_ser_success);connect(this->btn_login,&QPushButton::clicked,this,&mylogin::do_login);connect(this->btn_register,&QPushButton::clicked,this,&mylogin::do_regster);connect(this->sck,&QTcpSocket::readyRead,this,&mylogin::recv);connect(this->mw,&mywork::sig,this,&mylogin::bind_ui);connect(this->mw,&mywork::tra,this,&mylogin::tran_clicked);connect(this->mw,&mywork::dep,this,&mylogin::save_clicked);connect(this->mbd,&bind::send_bind_info,this,&mylogin::bind_send);connect(this->msv,&save::save_info,this,&mylogin::save_send);connect(this->mtra,&tran::tran_info,this,&mylogin::tran_send);connect(this->mw,&mywork::sel,this,&mylogin::select_clicked);
}mylogin::~mylogin()
{}
void mylogin::init_ui()
{this->setMinimumSize(QSize(360,640));this->setWindowTitle(tr("欢迎使用掌上银行APP"));this->setWindowIcon(QIcon(":/src/img/myapp.jpg"));QPalette pa;pa.setColor(QPalette::Window,Qt::lightGray);pa.setColor(QPalette::WindowText,Qt::red);this->setPalette(pa);QFont ft;ft.setPointSize(14);this->mw = new mywork();this->mbd = new bind();this->msv = new save();this->mtra = new tran();this->info = new QMessageBox(this);this->lb_titie = new QLabel(tr("欢迎使用掌上银行APP"));this->lb_titie->setAlignment(Qt::AlignCenter);this->lb_titie->setPalette(pa);this->lb_titie->setFont(ft);this->lb_usr = new QLabel(tr("账号"));this->lb_paswd = new QLabel(tr("密码"));this->btn_login = new QPushButton(tr("登录"));this->btn_register = new QPushButton(tr("注册"));this->le_paswd = new QLineEdit();this->le_paswd->setMaxLength(6);this->le_paswd->setEchoMode(QLineEdit::PasswordEchoOnEdit);this->le_usr = new QLineEdit();this->le_usr->setMaxLength(6);this->te = new QTextEdit();this->te->setFixedSize(QSize(180,90));this->hb_title = new QHBoxLayout();this->hb_text = new QHBoxLayout();this->hb_usr = new QHBoxLayout();this->hb_paswd = new QHBoxLayout();this->hb_log = new QHBoxLayout();this->vb1 = new QVBoxLayout();this->hb_title->addWidget(this->lb_titie);this->hb_text->addWidget(this->te);this->hb_usr->addWidget(this->lb_usr);this->hb_usr->addWidget(this->le_usr);this->hb_paswd->addWidget(this->lb_paswd);this->hb_paswd->addWidget(this->le_paswd);this->hb_log->addWidget(this->btn_login);this->hb_log->addWidget(this->btn_register);this->vb1->addLayout(this->hb_title);this->vb1->addLayout(this->hb_text);this->vb1->addLayout(this->hb_usr);this->vb1->addLayout(this->hb_paswd);this->vb1->addLayout(this->hb_log);this->setLayout(this->vb1);
}
void mylogin::connect_ser_success()
{this->te->append("成功连至服务器");
}
void mylogin::do_login()
{this->sck->write("1#"+this->le_usr->text().toUtf8()+"#"+this->le_paswd->text().toUtf8());}
void mylogin::do_regster()
{this->sck->write("2#"+this->le_usr->text().toUtf8()+"#"+this->le_paswd->text().toUtf8());
}
void mylogin::recv()
{char buf[100] = {0};qDebug()<<"by= "<<this->sck->bytesAvailable();this->sck->read(buf,this->sck->bytesAvailable());qDebug()<<"vb= "<<buf;if(0 == strcmp(buf,"logok")){this->info->setInformativeText("登录成功");this->hide();this->mw->show();}else if(0 == strcmp(buf,"nolog")){this->info->setInformativeText("账号或密码错误,请重试");this->info->show();}else if(0 == strcmp(buf,"regok")){this->info->setInformativeText("注册成功");this->info->show();}else if(0 == strcmp(buf,"noreg")){this->info->setInformativeText("该账号已被注册");this->info->show();}else if(0 == strcmp(buf,"bindok")){this->info->setInformativeText("绑定成功");this->info->show();}else if(0 == strcmp(buf,"error")){this->info->setInformativeText("绑定失败");this->info->show();}else if(0 == strcmp(buf,"depok")){this->info->setInformativeText("存款成功");this->info->show();}else if(0 == strcmp(buf,"deperror")){this->info->setInformativeText("存款失败");this->info->show();}else if(0 == strcmp(buf,"transerror")){this->info->setInformativeText("余额不足,汇款失败");this->info->show();}else if(0 == strcmp(buf,"transok")){this->info->setInformativeText("汇款成功");this->info->show();}else if(0 == strcmp(buf,"trerror")){this->info->setInformativeText("未绑定用户");this->info->show();}else{QString value = QString::fromUtf8(buf);QString va = value+"#\0";QStringList list1 = va.split("#");QString list = "姓 名"+list1[0];this->mw->te->setText(list);this->mw->te->append("身份证号:"+list1[1]);this->mw->te->append("余额:"+list1[2]);}
}
void mylogin::bind_send(QString info)
{qDebug()<<info;this->sck->write(info.toUtf8()+"#"+this->le_usr->text().toUtf8());
}
void mylogin::bind_ui()
{this->mbd->show();
}
void mylogin::select_clicked()
{this->sck->write("4#"+this->le_usr->text().toUtf8());
}
void mylogin::save_clicked()
{this->msv->show();
}
void mylogin::save_send(QString info)
{qDebug()<<info;this->sck->write(info.toUtf8()+"#"+this->le_usr->text().toUtf8()+"#\0");
}
void mylogin::tran_clicked()
{this->mtra->show();
}
void mylogin::tran_send(QString info)
{qDebug()<< info;this->sck->write(info.toUtf8()+this->le_usr->text().toUtf8());
}

思路

主要就是在打开软件后,弹出第一个界面,自动连接至服务器。然后在第一个界面完成登陆注册,当接收到服务器返回的登陆成功的信息后,隐藏第一个界面,显示第二个操作界面。

Qt项目-------掌上银行(客户端)相关推荐

  1. android愤怒小鸟游戏、自定义View、掌上餐厅App、OpenGL自定义气泡、抖音电影滤镜效果等源码...

    2019独角兽企业重金招聘Python工程师标准>>> Android精选源码 精练的范围选择器,范围和单位可以自定义 自定义View做的小鸟游戏 android popwindow ...

  2. android愤怒小鸟游戏、自定义View、掌上餐厅App、OpenGL自定义气泡、抖音电影滤镜效果等源码... 1

    Android精选源码 精练的范围选择器,范围和单位可以自定义 自定义View做的小鸟游戏 android popwindow选择商品规格颜色尺寸效果源码 实现Android带有锯齿背景的优惠样式源码 ...

  3. android愤怒小鸟游戏、自定义View、掌上餐厅App、OpenGL自定义气泡、抖音电影滤镜效果等源码

    Android精选源码 精练的范围选择器,范围和单位可以自定义 自定义View做的小鸟游戏 android popwindow选择商品规格颜色尺寸效果源码 实现Android带有锯齿背景的优惠样式源码 ...

  4. 基于雅特力AT32的 《掌上实验室》V8

    1 项目介绍 掌上实验室V8是由中国计量大学现代科技学院和雅特力共同研发的一款ARM学习板,内置AT-Link-Ez仿真器. 主MCU采用雅特力AT32F407VGT7. 板上资源: 1.通信接口 1 ...

  5. 假势腾讯使用宝红码 招行掌上日子新增下载100万

    移动互联网年代,大流量带来"变现"盈利已变成一个不争的事实.刚在北京举行的全球互联网大会(简称GMIC)上,招商银行信用卡商场部有关负责人宣告,凭借腾讯使用宝红码带来的上亿级流量, ...

  6. 大一上学期C++课程设计——学生成绩管理系统(QT项目)

    这里是一个大一的萌新!仅做学习分享 工程文件在评论区置顶!! 近期整理了一下大一上学期的课程设计报告作为学习总结,使用的软件是Qt Creator,主界面效果如下图 ----------以下为课程设计 ...

  7. 安卓毕业设计app项目基于Uniapp+SSM实现的安卓的掌上校园系统食堂缴费图书馆预约

    目录 一.项目介绍 二.开题报告 三.截图 四.源码获取 一.项目介绍 计算机毕业设计安卓App毕设项目之ssm基于安卓的掌上校园系统-IT实战课堂_哔哩哔哩_bilibili计算机毕业设计安卓App ...

  8. 铁道部掌上12306手机客户端预计11月底推出-铁道部-掌上12306-手机客户端

    铁道部掌上12306手机客户端预计11月底推出|铁道部|掌上12306|手机客户端 中广网北京10月17日消息 据经济之声<天下财经>报道,铁路部门"掌上12306智能手机客户端 ...

  9. stm32单片机屏幕一直闪_用STM32做一个微型掌上示波器项目——终于鼓起在大牛前献丑的无比勇气...

    这是我第一次在这个论坛上发表东西,其实本人进入芯片的世界的时间并不长,从接触51单片机到现在还不到一年,所以可以算是小白啦~想了很久,总算拿出在论坛大牛前献丑的无比勇气,写起该帖:dizzy::diz ...

最新文章

  1. java中最常用jar包的用途说明,适合初学者
  2. 关于Advanced Installer 11.0打包软件过程一些记录
  3. zblog php伪静态,ZBLOG PHP版本Apache和Nginx伪静态规则以及设置方法
  4. 小白一路走来,连续刷题三年,谈谈我的算法学习经验
  5. Mysql数据库If语句的使用
  6. 485通信自动收发电路,历史上最详细的解释
  7. php 实时更新内容_亿级视频内容如何实时更新?优酷视频背后的技术揭秘
  8. AOP原理解析及Castle、Autofac、Unity框架使用
  9. php写抢票脚本,火车票抢票python代码公开揭秘!
  10. 【elasticsearch】elasticsearch 熔断器
  11. Java虚拟机学习总结(4)—— JVM 性能调优常用参数详解
  12. HT for Web基于HTML5的图像操作(三)
  13. PCL之估计整个点云表面法向量
  14. mysql单库tps_简单计算mysql 的QPS,TPS
  15. [C++] C/C++结构体的区别
  16. 使用QFIL升级高通芯片的Android系统
  17. java记事本写玫瑰花代码_第一个用记事本写的java代码
  18. 类人猿学院--懒人精灵脚本系列教程(最新)
  19. xcode 配置wechat_react-native-wechat微信组件的使用
  20. [Cocos Creator] 本地文件加载系列六:本地龙骨动画dragonbones加载(web模式)

热门文章

  1. 关于一个杯子的测试用例
  2. 文本相似度 Text Similarity
  3. 基于unity的直升机模拟设计
  4. VGA接口芯片-目前市面常见的VGA转换器使用芯片分析
  5. 找工作面试会遇到哪些坑(校招篇)
  6. 蓝牙BLE方案|智能穿戴市场持续火热,伦茨科技推出智能手表方案
  7. QQ互联验证Universal Link 状态提示应用的universallink配置中不含互联信息
  8. 美国加州华裔人口最多的32个城市排名(根据最新统计数字计算)
  9. A20.从零开始前后端react+flask - 查找数据
  10. 二进制 八进制 十进制 十六进制 之间进制转换(图解篇)