📄 baseform.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 + -