⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 baseform.cpp

📁 基于qt3的简单的信息查询系统 结合了数据库 能插入 删除 查找 等操作
💻 CPP
字号:
#include "BaseForm.h"
#include "CDialog1.h"

#include <qlabel.h>
#include <qpushbutton.h>
#include <qlayout.h>
#include <qlineedit.h>
#include <qvariant.h>
#include <qfont.h>
#include <qtextcodec.h>


#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <errno.h>



BaseForm::BaseForm( QWidget* parent,  const char* name, WFlags fl )
    : QWidget( parent, name, fl )
{

    int rc;
    
    rc = sqlite3_open("userdata.db", &db); //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
    if( rc )
    {
        fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        exit(1);
    }
    else printf("You have opened a sqlite3 database named userdata.db successfully!\nCongratulations! Have fun !  ^-^ \n");
    

    //创建一个表,如果该表存在,则不创建,并给出提示信息,存储在 zErrMsg 中
    char *sql = "   CREATE TABLE UserData(\
                    ID INTEGER PRIMARY KEY,\
                    NAME VARCHAR(12),\
                    Score REAL);";
    sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );

    //插入数据
    sql = "INSERT INTO \"UserData\" VALUES( 1,'张三',80.5 );";
    sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );

    sql = "INSERT INTO \"UserData\" VALUES( 2,'李四',89.3 );";
    sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );

    sql = "INSERT INTO \"UserData\" VALUES( 3,'王五',82.7 );";
    sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );

    sql = "SELECT * FROM UserData ";
    sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );

    curr_row = 0;
    

    #ifdef _DEBUG_
        printf("zErrMsg = %s \n", zErrMsg);
    #endif



    if ( !name )
    setName( "BaseForm" );

    resize( 640, 480 );
    setMinimumSize( QSize(260,205) );
    setMaximumSize( QSize(260,205) );
    setCaption( tr( "学生信息管理系统" ) );
    
    ID = new QLabel( this, "ID" );
    ID->setGeometry( QRect( 20, 20, 70,20) );
    ID->setText( tr( "编号:" ) );
    ID->setAlignment( int( QLabel::AlignLeft||QLabel::AlignVCenter ) );

    NAME = new QLabel( this, "NAME" );
    NAME->setGeometry( QRect( 20, 50, 70,20 ) );
    NAME->setText( tr( "姓名:" ) );
    NAME->setAlignment( int( QLabel::AlignLeft||QLabel::AlignVCenter) );

    SCORE = new QLabel( this, "SCORE" );
    SCORE->setGeometry( QRect( 20, 80, 70,20 ) );
    SCORE->setText( tr( "分数:" ) );
    SCORE->setAlignment( int( QLabel::AlignLeft||QLabel::AlignVCenter ) );

    ID_EDIT = new QLineEdit( this, "ID_EDIT" );
    ID_EDIT->setGeometry( QRect( 90, 20, 150,20 ) );
    ID_EDIT->setAlignment( int( QLabel::AlignLeft||QLabel::AlignVCenter ) );

    NAME_EDIT = new QLineEdit( this, "NAME_EDIT" );
    NAME_EDIT->setGeometry( QRect( 90, 50, 150,20 ) );
    NAME_EDIT->setAlignment( int( QLabel::AlignLeft||QLabel::AlignVCenter) );

    SCORE_EDIT = new QLineEdit( this, "SCORE_EDIT" );
    SCORE_EDIT->setGeometry( QRect( 90, 80, 150,20 ) );
    SCORE_EDIT->setAlignment( int( QLabel::AlignLeft||QLabel::AlignVCenter ) );

    ID_PREV = new QPushButton( this, "PushButton1" );
    ID_PREV->setGeometry( QRect( 20, 120, 60, 25 ) );
    ID_PREV->setText( tr( "上一个" ) );
    connect ( ID_PREV,SIGNAL(clicked()),this, SLOT(ShowPrevUser()) );

    ID_NEXT = new QPushButton( this, "PushButton2" );
    ID_NEXT->setGeometry( QRect( 100, 120, 60, 25 ) );
    ID_NEXT->setText( tr( "下一个" ) );
    connect ( ID_NEXT,SIGNAL(clicked()),this, SLOT(ShowNextUser()) );

    ID_LAST = new QPushButton( this, "PushButton3" );
    ID_LAST->setGeometry( QRect( 180, 120, 60, 25 ) );
    ID_LAST->setText( tr( "最后的" ) );
    connect ( ID_LAST,SIGNAL(clicked()),this, SLOT(ShowLastUser()) );

    ID_ADD = new QPushButton( this, "PushButton4" );
    ID_ADD->setGeometry( QRect( 20, 160, 60, 25 ) );
    ID_ADD->setText( tr( "添加" ) );
    connect ( ID_ADD,SIGNAL(clicked()),this, SLOT(UserAdd()) );

    ID_DEL = new QPushButton( this, "PushButton5" );
    ID_DEL->setGeometry( QRect( 100, 160, 60, 25 ) );
    ID_DEL->setText( tr( "删除" ) );
    connect ( ID_DEL,SIGNAL(clicked()),this, SLOT(UserDel()) );

    ID_EXIT = new QPushButton( this, "PushButton6" );
    ID_EXIT->setGeometry( QRect( 180, 160, 60, 25 ) );
    ID_EXIT->setText( tr( "退出" ) );
    connect ( ID_EXIT,SIGNAL(clicked()),this, SLOT(close()) );


    ShowNextUser();


}


BaseForm::~BaseForm()
{
    // no need to delete child widgets, Qt does it all for us
}

void BaseForm::ShowPrevUser()
{
   if(curr_row != 1)
     {
        curr_row -= 1;
        ShowUserData();
     }
   if(curr_row == 1)
     {
        char *str ="已经是第一个数据了!";
        CDialog1 *cmd = new CDialog1(str,this,tr(""), TRUE);
        cmd->exec();
     }
}

void BaseForm::ShowNextUser()
{
   if(curr_row != nrow )
     {
        curr_row += 1;
        ShowUserData();
     }
   if(curr_row == nrow )
    {
        char *str ="已经是最后一个数据了!";
        CDialog1 *cmd = new CDialog1(str,this,tr(""), TRUE);
        cmd->exec();
    }
}

void BaseForm::ShowLastUser()
{
    curr_row = nrow;
    ShowUserData();
}

void BaseForm::ShowUserData()
{
   char buff[16];
   int i = curr_row*ncolumn ;
   sprintf(buff,"%s",azResult[i]) ;
   ID_EDIT->setText( tr(buff) );

   i++;
   sprintf(buff,"%s",azResult[i]) ;
   NAME_EDIT->setText( tr(buff) );

   i++;
   sprintf(buff,"%s",azResult[i]);
   SCORE_EDIT->setText( tr(buff) );

}

void BaseForm::UserAdd()
{
    char *sql = (char *)malloc(100);

    QTextCodec* codec = QTextCodec::codecForName( "GBK" );


    sprintf(sql,"INSERT INTO \"UserData\" VALUES( %s,'%s',%s );",(const char*)ID_EDIT->text(),\
                (const char*)( codec->fromUnicode( NAME_EDIT->text() ) ),(const char*)SCORE_EDIT->text() );

    sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );

    if(zErrMsg == NULL)
     {
        char *str ="用户添加成功!";
        CDialog1 *cmd = new CDialog1(str,this,tr(""), TRUE);
        cmd->exec();
     }
    else if( zErrMsg != NULL  )
     {
        char *str ="该用户已存在,重新输入!";
        CDialog1 *cmd = new CDialog1(str,this,tr(""), TRUE);
        printf("%d\n",&zErrMsg) ;
        cmd->exec();
     }


    sql = "SELECT * FROM UserData ";
    sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );

    free(sql);
}

void BaseForm::UserDel()
{
    char *sql = (char *)malloc(100);
    char id;

    sprintf(sql, "DELETE FROM UserData WHERE ID = %s ;",(const char*)ID_EDIT->text());
    id = atoi((const char*)ID_EDIT->text());

    sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );

    if(zErrMsg == NULL)
     {
        char *str ="用户删除成功!";
        CDialog1 *cmd = new CDialog1(str,this,tr(""), TRUE);
        cmd->exec();
     }

    if( nrow > 1)            //不是最后一个数据
     {
        sql = "SELECT * FROM UserData ";
        sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );

        if(curr_row > nrow)
           ShowPrevUser();
        else
        {
           curr_row -= 1;
           ShowNextUser();
        }
     }
    else
     {
        char *str ="系统中无任何数据!";
        CDialog1 *cmd = new CDialog1(str,this,tr(""), TRUE);
        cmd->exec();
     }
   free(sql);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -