闲来无事,写了一个基于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(0).toInt(); _query.prepare("select count(*) from Vip"); _query.exec(); _query.next(); _b=_query.value(0).toInt(); _query.prepare("select count(*) from Coustomer"); _query.exec(); _query.next(); _c=_query.value(0).toInt(); this->setGeometry(400,200,600,400); _treeWidget = new QTreeWidget(this); _treeWidget->setColumnCount(1); _treeWidget->setHeaderLabel("联系人"); _treeWidget->setStyleSheet("color: blue;" "background-color: yellow;" "selection-color: yellow;" "selection-background-color: blue;"); _Item=new QTreeWidgetItem(_treeWidget); _Item->setText(0,"黄金vip"); // _Item->setCheckState(0, Qt::Checked);//复选框 _Item->setIcon(0,QIcon("1.ico")); int i=0; _query.prepare("select * from goldVip"); _query.exec(); while(i<_a) { _query.next(); QTreeWidgetItem *Item=new QTreeWidgetItem; Item->setText(0,_query.value(0).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(0,"普通vip"); _Item2->setIcon(0,QIcon("2.ico")); i=0; _query.prepare("select * from Vip"); _query.exec(); while(i<_b) { _query.next(); QTreeWidgetItem *Item=new QTreeWidgetItem; Item->setText(0,_query.value(0).toString()); _Item2->addChild(Item); ++i; } _Item3=new QTreeWidgetItem(_treeWidget); _Item3->setText(0,"普通客户"); _Item3->setIcon(0,QIcon("3.ico")); i=0; _query.prepare("select * from Coustomer"); _query.exec(); while(i<_c) { _query.next(); QTreeWidgetItem *Item=new QTreeWidgetItem; Item->setText(0,_query.value(0).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(0,0,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(0,"黄金vip"); // _Item->setCheckState(0, Qt::Checked);//复选框 _Item->setIcon(0,QIcon("1.ico")); _Item2=new QTreeWidgetItem(_treeWidget); _Item2->setText(0,"普通vip"); _Item2->setIcon(0,QIcon("2.ico")); _Item3=new QTreeWidgetItem(_treeWidget); _Item3->setText(0,"普通客户"); _Item3->setIcon(0,QIcon("3.ico")); _query.prepare("select count(*) from goldVip"); _query.exec(); _query.next(); _a=_query.value(0).toInt(); _query.prepare("select count(*) from Vip"); _query.exec(); _query.next(); _b=_query.value(0).toInt(); _query.prepare("select count(*) from Coustomer"); _query.exec(); _query.next(); _c=_query.value(0).toInt(); // _Item->removeChild(); int i=0; _query.prepare("select * from goldVip"); _query.exec(); while(i<_a) { _query.next(); QTreeWidgetItem *Item=new QTreeWidgetItem; Item->setText(0,_query.value(0).toString()); _Item->addChild(Item); ++i; } // connect(_Item,SIGNAL(itemClicked(QTreeWidgetItem *Item,int index)),this, // SLOT(slotItem(QTreeWidgetItem *Item,int index))); i=0; _query.prepare("select * from Vip"); _query.exec(); while(i<_b) { _query.next(); QTreeWidgetItem *Item=new QTreeWidgetItem; Item->setText(0,_query.value(0).toString()); _Item2->addChild(Item); ++i; } i=0; _query.prepare("select * from Coustomer"); _query.exec(); while(i<_c) { _query.next(); QTreeWidgetItem *Item=new QTreeWidgetItem; Item->setText(0,_query.value(0).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下才有数据的哈。