闲来无事,写了一个基于sqlite的数据库管理小软件。

先上图

中心思想就是:

创建一个数据库 然后每一个分组对应一个数据表 然后遍历该数据表。将名字以treewidgetItem显示出来。添加删除实质上是对数据库在操作。不想写太多功能,写多了就成了数据库的桌面管理版了(嘻嘻开玩笑的题外话)。

下面贴代码:

Administrater::Administrater(QWidget *parent)
: QMainWindow(parent)
{
QSqlDatabase Administrater=QSqlDatabase::addDatabase("QSQLITE");
Administrater.setDatabaseName("Administrater.db");
Administrater.open(); _query=QSqlQuery(Administrater); _query.prepare("create table goldVip(name varchar(20),sex varchar(10),ID char(20))");
_query.exec(); _query.prepare("create table Vip(name varchar(50),sex varchar(10),ID char(20))");
_query.exec(); _query.prepare("create table Coustomer(name varchar(20),sex varchar(10),ID char(20))");
_query.exec(); _query.prepare("select count(*) from goldVip");
_query.exec();
_query.next();
_a=_query.value().toInt(); _query.prepare("select count(*) from Vip");
_query.exec();
_query.next();
_b=_query.value().toInt(); _query.prepare("select count(*) from Coustomer");
_query.exec();
_query.next();
_c=_query.value().toInt(); this->setGeometry(,,,);
_treeWidget = new QTreeWidget(this);
_treeWidget->setColumnCount();
_treeWidget->setHeaderLabel("联系人"); _treeWidget->setStyleSheet("color: blue;"
"background-color: yellow;"
"selection-color: yellow;"
"selection-background-color: blue;"); _Item=new QTreeWidgetItem(_treeWidget);
_Item->setText(,"黄金vip");
// _Item->setCheckState(0, Qt::Checked);//复选框
_Item->setIcon(,QIcon("1.ico"));
int i=;
_query.prepare("select * from goldVip");
_query.exec();
while(i<_a)
{
_query.next();
QTreeWidgetItem *Item=new QTreeWidgetItem;
Item->setText(,_query.value().toString());
_Item->addChild(Item);
++i;
} // connect(_Item,SIGNAL(itemClicked(QTreeWidgetItem *Item,int index)),this,
// SLOT(slotItem(QTreeWidgetItem *Item,int index))); _Item2=new QTreeWidgetItem(_treeWidget);
_Item2->setText(,"普通vip");
_Item2->setIcon(,QIcon("2.ico"));
i=;
_query.prepare("select * from Vip");
_query.exec();
while(i<_b)
{
_query.next();
QTreeWidgetItem *Item=new QTreeWidgetItem;
Item->setText(,_query.value().toString());
_Item2->addChild(Item);
++i;
} _Item3=new QTreeWidgetItem(_treeWidget);
_Item3->setText(,"普通客户");
_Item3->setIcon(,QIcon("3.ico"));
i=;
_query.prepare("select * from Coustomer");
_query.exec();
while(i<_c)
{
_query.next();
QTreeWidgetItem *Item=new QTreeWidgetItem;
Item->setText(,_query.value().toString());
_Item3->addChild(Item);
++i;
} //Administrater.close(); QMenuBar *menuBar=QMainWindow::menuBar();
this->setMenuBar(menuBar); QAction *Action=new QAction("添加",this);
QAction *Action2=new QAction("删除",this);
QAction *Action3=new QAction("查询",this);
QList<QAction *>_list;
_list<<Action<<Action2<<Action3;
menuBar->addActions(_list); connect(Action,SIGNAL(triggered(bool)),this,SLOT(slotAction()));
connect(Action2,SIGNAL(triggered(bool)),this,SLOT(slotAction2()));
connect(Action3,SIGNAL(triggered(bool)),this,SLOT(slotAction3())); } Administrater::~Administrater()
{ }
void Administrater::resizeEvent(QResizeEvent *)
{
_treeWidget->setGeometry(,,this->width(),this->height()); }
void Administrater::slotAction2()
{
Delete *w2=new Delete;
w2->show();
connect(w2,SIGNAL(delete_sucess()),this,SLOT(update_show()));
}
void Administrater::slotAction()
{
Deal *w=new Deal;
w->show(); w->setStyleSheet("background-color: rgb(255, 252, 162);"); connect(w,SIGNAL(add_sucess()),SLOT(update_show())); }
void Administrater::slotAction3()
{
Find *w3=new Find;
w3->show();
}
void Administrater::update_show()
{
delete _Item;
delete _Item2;
delete _Item3; _Item=new QTreeWidgetItem(_treeWidget);
_Item->setText(,"黄金vip");
// _Item->setCheckState(0, Qt::Checked);//复选框
_Item->setIcon(,QIcon("1.ico")); _Item2=new QTreeWidgetItem(_treeWidget);
_Item2->setText(,"普通vip");
_Item2->setIcon(,QIcon("2.ico")); _Item3=new QTreeWidgetItem(_treeWidget);
_Item3->setText(,"普通客户");
_Item3->setIcon(,QIcon("3.ico")); _query.prepare("select count(*) from goldVip");
_query.exec();
_query.next();
_a=_query.value().toInt(); _query.prepare("select count(*) from Vip");
_query.exec();
_query.next();
_b=_query.value().toInt(); _query.prepare("select count(*) from Coustomer");
_query.exec();
_query.next();
_c=_query.value().toInt(); // _Item->removeChild();
int i=;
_query.prepare("select * from goldVip");
_query.exec();
while(i<_a)
{
_query.next();
QTreeWidgetItem *Item=new QTreeWidgetItem;
Item->setText(,_query.value().toString());
_Item->addChild(Item);
++i;
} // connect(_Item,SIGNAL(itemClicked(QTreeWidgetItem *Item,int index)),this,
// SLOT(slotItem(QTreeWidgetItem *Item,int index))); i=;
_query.prepare("select * from Vip");
_query.exec();
while(i<_b)
{
_query.next();
QTreeWidgetItem *Item=new QTreeWidgetItem;
Item->setText(,_query.value().toString());
_Item2->addChild(Item);
++i;
} i=;
_query.prepare("select * from Coustomer");
_query.exec();
while(i<_c)
{
_query.next();
QTreeWidgetItem *Item=new QTreeWidgetItem;
Item->setText(,_query.value().toString());
_Item3->addChild(Item);
++i;
} }
#include "Deal.h"
#include "ui_Deal.h"
#include<QtSql/QSqlDatabase>
#include<QSqlQuery>
#include<QDebug>
#include<QComboBox>
#include<QMessageBox>
Deal::Deal(QWidget *parent) :
QWidget(parent),
ui(new Ui::Deal)
{
ui->setupUi(this);
connect(ui->comboBox,SIGNAL(activated(int)),
this,SLOT(on_comboBox_activated(int d)));
this->setStyleSheet("QLineEdit{background-color: red}");
ui->lineEdit->setStyleSheet("background-color: rgb(188, 255, 207);");
ui->lineEdit_2->setStyleSheet("background-color: rgb(188, 255, 207);");
ui->lineEdit_3->setStyleSheet("background-color: rgb(188, 255, 207);");
} Deal::~Deal()
{
delete ui;
} void Deal::on_pushButton_clicked()
{ QSqlQuery query; QString str=ui->lineEdit->text();
QString str2=ui->lineEdit_2->text();
QString str3=ui->lineEdit_3->text(); if(_Kind.isEmpty())
{
QMessageBox::information(this,"温馨提示","你还没有选者客户分类",QMessageBox::Ok);
return;
}
QString str4=QString("insert into ")+_Kind+QString(" values(")+
QString("\'")+str+QString("\'")+QString(",")+
QString("\'")+str2+QString("\'")+QString(",")+
QString("\'")+str3+QString("\'")+
QString(")");
query.prepare(str4);
if(query.exec())
{
QMessageBox *messageBox=new QMessageBox(QMessageBox::Information,
"温馨提示","添加成功",QMessageBox::Ok);
messageBox->show();
_timer=new QTimer(this);
_timer->start(1200);
connect(_timer,SIGNAL(timeout()),messageBox,SLOT(close()));
emit add_sucess();
}
else
{
qDebug()<<"falied";
} } void Deal::on_comboBox_activated(int s)
{ if(ui->lineEdit->text().isEmpty()|ui->lineEdit_2->text().isEmpty()|
ui->lineEdit_3->text().isEmpty())
{
QMessageBox::information(this,"温馨提示:","你输入的资料不完整",QMessageBox::Ok);
}
if(s==0)
{
_Kind="goldVip";
}
else if(s==1)
{
_Kind="Vip";
}
else if(s==2)
{
_Kind="Coustomer";
} }

  

#include "Delete.h"
#include "ui_Delete.h"
#include<QSqlQuery>
#include<QDebug>
#include<QMessageBox>
#include<QTimer>
#include<QPalette>
Delete::Delete(QWidget *parent) :
QWidget(parent),
ui(new Ui::Delete)
{
ui->setupUi(this);
} Delete::~Delete()
{
delete ui;
} void Delete::on_pushButton_clicked()
{
QString str=ui->lineEdit->text();
QString str2="delete from ";
QString str3=" where name=";
QString str4=str2+_Str+str3+QString("\'")+str+QString("\'");
QSqlQuery query;
query.prepare(str4);
if(query.exec())
{
QMessageBox *messageBox=new QMessageBox(QMessageBox::Information,
"温馨提示","删除成功",QMessageBox::Ok);
messageBox->show();
QTimer *timer=new QTimer(this);
timer->start(1200);
connect(timer,SIGNAL(timeout()),messageBox,SLOT(close()));
emit delete_sucess();
}
else
{
QMessageBox *messageBox=new QMessageBox(QMessageBox::Information,
"温馨提示","该分组下无该用户",
QMessageBox::Ok);
}
} void Delete::on_comboBox_activated(int index)
{
if(index==0)
{
_Str="goldVip";
}
else if(index==1)
{
_Str="Vip";
}
else if(index==2)
{
_Str="Coustomer";
}
}

  

#include "Find.h"
#include "ui_Find.h"
#include<QSqlQuery>
#include<QMessageBox>
#include<QPalette>
Find::Find(QWidget *parent) :
QWidget(parent),
ui(new Ui::Find)
{
ui->setupUi(this);
_lists<<"姓名:"<<"性别:"<<"ID:";
QPalette pal=this->palette();
pal.setBrush(QPalette::Background,Qt::green);
this->setPalette(pal); } Find::~Find()
{
delete ui;
} void Find::on_pushButton_clicked()
{
if(_Str.isEmpty())
{
QMessageBox::information(this,"警告","你未选择客户类型",QMessageBox::Ok);
}
QString str=ui->lineEdit->text();
QString str2="select * from "+_Str+QString(" where name=")
+ QString("\'")+str+QString("\'");
QSqlQuery query;
query.prepare(str2);
if(query.exec())
{
query.next();
if(query.value(0).toString().isEmpty())
{
QMessageBox::warning(this,"警告","该数据库查无此人",QMessageBox::Ok);
return;
}
while(!query.value(0).toString().isEmpty())
{
for(int i=0;i<3;++i)
{ ui->textBrowser->append(_lists.at(i)+query.value(i).toString()); }
query.next();
} }
else
{
QMessageBox *messageBox=new QMessageBox(QMessageBox::Information,
"温馨提示","该分组下无该用户",
QMessageBox::Ok);
}
} void Find::on_comboBox_activated(int index)
{ if(index==0)
{
_Str="goldVip";
}
else if(index==1)
{
_Str="Vip";
}
else if(index==2)
{
_Str="Coustomer";
}
}

 顺便提一句 sqlite是没有表头的 所以用query去提取数据时 先next下才有数据的哈。

Qt基于sqlite数据库的管理小软件的更多相关文章

  1. Qt 操作SQLite数据库

    项目中通常需要采用各种数据库(如 Qracle.SQL Server.MySQL等)来实现对数据的存储.查询等功能.下面讲解如何在 Qt 中操作 SQlite 数据库. 一.SQLite 介绍 Sql ...

  2. 房租管理小软件(四):对linq的使用

    1.对LInq的封装如下: private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMap ...

  3. Linux QT 连接 Sqlite数据库

    #include <QApplication> #include <QDebug> #include <QSqlQuery> #include <QSqlDa ...

  4. 房租管理小软件(七):flowlayoutPancel 中增加分类控

    见下图的 string FNodeName = dt.Rows[i]["FNodeName"].ToString(); ) { RoomControl.Thumbnail.Grou ...

  5. 房租管理小软件(六):通用功能包括时间,效验,MD5加密,XML 操作

    1.时间相关 public static DateTime getNow() { MyFZDataContext dataContext = MyFZDataContext.getDataContex ...

  6. SQLite数据库基本操作

    SQLite 是一个开源的嵌入式关系数据库,实现自包容.零配置.支持事务的SQL数据库引擎. 其特点是高度便携.使用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同,SQLite 的安装和运行非 ...

  7. SQLite数据库多平台应用及常见错误分析

    SQLite是一个软件库,实现了自给自足的.无服务器的.零配置的.事务性的SQL数据库引擎.SQLite是世界上最广泛部署的数据库引擎之一.SQLite源代码开放,没有授权限制.正是因为其免费.轻巧. ...

  8. SQLite数据库下载、安装和学习

    SQLite 是一个开源的嵌入式关系数据库,实现自包容.零配置.支持事务的SQL数据库引擎. 其特点是高度便携.使用方便.结构紧凑.高效.可靠.与其他数据库管理系统不同,SQLite 的安装和运行非常 ...

  9. Android SQLite数据库

    SQLite数据库 SQLiteDatabase //管理操作数据库    管理    openDatabase //打开    openOrCreateDatabase //打开或创建    操作 ...

随机推荐

  1. 生产Server遭挖矿程序入侵,暴力占用CPU

    区块链的火热,利益驱使必然导致不少PC或Server,被变成肉鸡,执行挖矿程序进行挖矿,进而导致我们正常的程序无法正常. (Centos7 Server)使用top命令查看服务器进程运行情况,发现几个 ...

  2. python接口自动化(三十三)-python自动发邮件总结及实例说明番外篇——下(详解)

    简介 发邮件前我们需要了解的是邮件是怎么一个形式去发送到对方手上的,通俗点来说就是你写好一封信,然后装进信封,写上地址,贴上邮票,然后就近找个邮局,把信仍进去,其他的就不关心了,只是关心时间,而电子邮 ...

  3. mybatis基础配置

    我这个写的比较简略,是自己短时间记录的可能只适合自己看,新手或者不懂的建议看看下面大神这篇: https://www.cnblogs.com/homejim/p/9613205.html 1.MyBa ...

  4. 20190719 NOIP模拟测试6 (考后反思)

    总分 130 排名第6 虽然与前几次进步了一些,但总会感觉到不安 因为我只是A掉了第一题,而第一题又是道水题,很显然的DP,我相信大佬们没A掉只是因为一些小问题(也许有大佬不屑于这种题吧,lockey ...

  5. stack用法,queue用法,

    stack stack 模板类的定义在头文件中. stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要 的,在不指定容器类型时,默认的容器类型为deque. 定义st ...

  6. 个人永久性免费-Excel催化剂功能第33波-报表形式数据结构转标准数据源

    一般来说,如果有标准的数据源结构,对后续的分析工作将会带来极大的方便.但现实中,许多的原始数据并不预期那样,一个主题的数据已经干净地存放在一个工作表中.今天Excel催化剂再次送上批量化操作,将不规则 ...

  7. MyBatis 中 @Param 注解的四种使用场景,最后一种经常被人忽略!

    有一些小伙伴觉得 MyBatis 只有方法中存在多个参数的时候,才需要添加 @Param 注解,其实这个理解是不准确的.即使 MyBatis 方法只有一个参数,也可能会用到 @Param 注解. 但是 ...

  8. 【css系列】六种实现元素水平居中方法

    一.前言 居中效果在CSS中很是普通的效果,平时大家所看到的居中效果主要分为三大类:水平居中.垂直居中和水平垂直居中.而其中水平居中相对于后两者来说要简单得多.使用了css3的flexbox的属性轻松 ...

  9. 每日一问:Android 消息机制,我有必要再讲一次!

    坚持原创日更,短平快的 Android 进阶系列,敬请直接在微信公众号搜索:nanchen,直接关注并设为星标,精彩不容错过. 我 17 年的 面试系列,曾写过一篇名为:Android 面试(五):探 ...

  10. 《C#从入门到精通(第3版)》目录

    C#从入门到精通(第3版)pdf+源码 一.基础知识 1.初识C#及其开发环境 2.开始C#之旅 3.变量与常量 4.表达式与运算符 5.字符与字符串 6.流程控制语句 7.数组与集合 8.属性和方法 ...