JLU—Restaurant~吉大餐厅
项目模块介绍:
1.登录页面
2.前台或选桌页面
3.点餐页面
4.结算页面
5.后厨端页面
具体步骤:
登录页面:基于数据库sqlite实现和UI的注册登录页面,必须先注册后登录,用户信息存储在user.db中。
必须先注册后登录否则会出现如下页面: 注册后的数据都存在user.db里,生成的db文件一般不在工程文件下,而在一个同级的build文件下,可以通过Navicat打开实时查看,下面就是我注册过的用户名,只有这些用户才能登入。 登录代码:
#include "logindialog.h"
#include "restmap.h"
#include "ui_logindialog.h"
#include
#include
#include
#include
#include
LoginDialog::LoginDialog(QWidget *parent) ://构造函数
QDialog(parent),
ui(new Ui::LoginDialog)
{
ui->setupUi(this);
//设置背景
this->setStyleSheet("QWidget {background-image:url(:/new/bj/19.png)}");
}
LoginDialog::~LoginDialog()//析构函数
{
delete ui;
}
void LoginDialog::on_pushButton_clicked()
{
//添加数据库驱动
QSqlDatabase db;
if(QSqlDatabase::contains("qt_sql_default_connection"))//默认的连接名是否存在
db = QSqlDatabase::database("qt_sql_default_connection");
else //默认连接名不存在,头次连接
db = QSqlDatabase::addDatabase("QSQLITE");
//设置数据库名称
db.setDatabaseName("user.db");
//打开数据库
if(!db.open())
{
//打开失败
QMessageBox::critical(this, "错误", "数据库访问错误!");
return;
}
//以下执行相关sql语句
QSqlQuery query;
//判断user表是否存在
if(!IsTableExist(query, "user")){
// //新建user表,id设置为主键
// query.exec("create table user(_id INTEGER PRIMARY KEY AUTOINCREMENT, username varchar, password varchar, name varchar)");
QMessageBox::critical(this, "错误", "没有注册用户,请先注册再登录!");
return;
}
//查找用户名及密码
query.exec("select * from user where username='" + ui->lineEdit->text() + "' and password='" + ui->lineEdit_2->text() + "'");
if(query.next()){
RestMap *m = new RestMap();
m->show(); //跳到RestMap页面
this->hide();
}else{
QMessageBox::critical(this, "错误", "没有注册用户,请先注册再登录!");
}
}
void LoginDialog::on_pushButton_2_clicked()//注册用户
{
QDialog dialog(this);
QFormLayout layout(&dialog);
QLabel usernameLabel(&dialog);
usernameLabel.setText("用户名");
QLabel passwordLabel(&dialog);
passwordLabel.setText("密码");
QLabel nameLabel(&dialog);
nameLabel.setText("姓名");
QLineEdit usernameLineEdit(&dialog);
QLineEdit passwordLineEdit(&dialog);
QLineEdit nameLineEdit(&dialog);
QDialogButtonBox box(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, &dialog);
layout.addRow(&usernameLabel, &usernameLineEdit);
layout.addRow(&passwordLabel, &passwordLineEdit);
layout.addRow(&nameLabel, &nameLineEdit);
layout.addRow(&box);
connect(&box, SIGNAL(accepted()), &dialog, SLOT(accept()));
connect(&box, SIGNAL(rejected()), &dialog, SLOT(reject()));
if(dialog.exec() == QDialog::Accepted){
//添加数据库驱动
QSqlDatabase db;
if(QSqlDatabase::contains("qt_sql_default_connection"))//默认的连接名是否存在
db = QSqlDatabase::database("qt_sql_default_connection");
else //默认连接名不存在,头次连接
db = QSqlDatabase::addDatabase("QSQLITE");
//设置数据库名称
db.setDatabaseName("user.db");
//打开数据库
if(!db.open())
{
QMessageBox::critical(this, "错误", "数据库访问错误!");
return;
}
//以下执行相关sql语句
QSqlQuery query;
//判断user表是否存在
if(!IsTableExist(query, "user")){
//新建user表,id设置为主键
query.exec("create table user(_id INTEGER PRIMARY KEY AUTOINCREMENT, username varchar, password varchar, name varchar)");
}
// 添加记录
query.exec("insert into user values(null,'" + usernameLineEdit.text() + "','" + passwordLineEdit.text() + "','" + nameLineEdit.text() + "')");
}
}
bool LoginDialog::IsTableExist(QSqlQuery &query,QString table) //判断user表是否存在
{
QString sql = QString("select * from sqlite_master where name='%1'").arg(table);
query.exec(sql);
return query.next();
}
前台(选桌)页面:可以实时观看餐桌使用情况,空闲的餐桌才能点击使用,点击处于使用中餐桌将弹窗告知,并再次选桌。
这里有一个细节,点击空闲的餐桌后,餐桌会变成使用中,我是过修改setText函数修改push_button中的字符串实现的。
//截取餐桌状态
QString str = ui->pushButton_1->text().section('\n',1,1);
if(str == tr("空闲"))//下单
{
//更改餐桌状态
ui->pushButton_1->setText("一号桌\n使用");
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(5000);
Menu* m = new Menu(1);
m->show();
}else{//再次选桌
QMessageBox msgBox;
msgBox.setText("此餐桌正在使用,请另选餐桌!");
msgBox.exec();
}
点餐页面:点餐实时更新数量和金额,可以生成订单或者清楚购物车,并可以跳转后厨端或者退回登录页面。
结算页面: ![在这里插入图片描述](https://img-blog.csdnimg.cn/be926a2af11d424d9b576f588dd69b73.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oOz5a2m5aW9Y-iJueWRgA==,size_15,color_FFFFFF,t_70,g_se,x_16)
后厨页面:方便查看所有餐桌的订单。 **项目网盘: 添加链接描述
|