项目日报(四)
1.预期进度
1.网络连接
2.数据库单例类添加,数据库各功能代码测试
3.完成登录,注册发包解包
2.实际进度
1.网络连接
2.数据库单利类添加,数据库各功能代码测试
网络连接
//网络连接套接字
QTcpSocket *tcpclient;
//网络连接操作
tcpclient=new QTcpSocket(this);
tcpclient->abort(); //取消已有的链接
tcpclient->connectToHost("XXX.XXX.XXX.XXX",XXXX); //目标IP地址和端口号
单例类数据库的加入
/*********info_csdb.h**********/
class userinfo_csdb
{
public:
static userinfo_csdb *getDatabase(const QString &filename);
~userinfo_csdb();
void CloseCSDB(); //关闭数据库
bool CreateTable(); //建表
//增
void Insertuser(int id,int pwd,QString tel,int dir_id); //新增用户
//删
void deluser(int id); //删除用户
//查
void fuzzysearch(QString str); //模糊查询
//改
bool cpwd(int user_id, int old_pwd, int new_pwd); //修改用户密码
QSqlDatabase mydatabase;
private:
userinfo_csdb(const QString &filename);
static userinfo_csdb *database;
};
/*********info_csdb.c**********/
userinfo_csdb::userinfo_csdb(const QString &filename)
{
//创建数据库
mydatabase = QSqlDatabase::addDatabase("QSQLITE");
mydatabase.setDatabaseName(filename);
if(mydatabase.open())
{
qDebug()<<"数据库打开成功!!";
}
else
{
qDebug()<<"数据库打开失败!!";
}
}
userinfo_csdb * userinfo_csdb::getDatabase(const QString &filename)
{
if(database == NULL)
{
database=new userinfo_csdb(filename);
}
return database;
}
//创建数据表
bool userinfo_csdb::CreateTable()
{
QSqlQuery sql_query; //此处只用了一个sql的容器来执行接下来的数据库指令
QString sql = "create table if not exists UserMsg(id int primary key,pwd int,tel text,dir_id int)";
sql_query.prepare(sql);
sql_query.clear();
//创建文件信息表(无创建结果判断)
QString sql1="create table if not exists FileMsg(file_name text primary key,owner_id int,mode int,dir_id int,file_id int,share int)";
sql_query.prepare(sql1); //query容器准备执行语句
sql_query.exec(); //执行sql语句
sql_query.clear(); //清除容器中内容
QString sql2="create table if not exists DirMsg(dir_id int primary key,dir_name text,grade int,owner_id int)";
sql_query.prepare(sql2);
sql_query.exec();
sql_query.clear();
QString sql3="insert into UserMsg values(100000,123456,'18039027069',1)";
sql_query.prepare(sql3);
sql_query.exec();
sql_query.clear();
}
//插入用户
bool userinfo_csdb::Insertuser(int id, int pwd, QString tel, int dir_id)
{
QSqlQuery sql_query;
QString insert_sql = QString("insert into UserMsg values(?,?,?,?)");
sql_query.prepare(insert_sql);
sql_query.addBindValue(id);
sql_query.addBindValue(pwd);
sql_query.addBindValue(tel);
sql_query.addBindValue(dir_id);
if(sql_query.exec())
{
qDebug()<<"inserted success!";
sql_query.clear();
return 1;
}
else
{
qDebug()<<sql_query.lastError();
sql_query.clear();
return 0;
}
}
//删除用户
bool userinfo_csdb::deluser(int id)
{
QSqlQuery sql_query;
QString insert_sql = QString("delete from UserMsg where id = %1").arg(id);
sql_query.prepare(insert_sql);
if(sql_query.exec())
{
qDebug()<<"delete success!";
sql_query.clear();
return 1;
}
else
{
qDebug()<<sql_query.lastError();
sql_query.clear();
return 0;
}
}
//修改密码
bool userinfo_csdb::cpwd(int id, int old_pwd, int new_pwd)
{
QSqlQuery sql_query;
QString changepwd_sql = QString("update UserMsg set pwd = %1 where id = %2 and pwd = %3").arg(new_pwd).arg(id).arg(old_pwd);
sql_query.prepare(changepwd_sql);
if(sql_query.exec())
{
qDebug()<<"change success!";
}
else
{
qDebug()<<sql_query.lastError();
}
sql_query.clear();
}
正则表达式控制输入
//正则表达式限制输入格式
QRegExp exp("^[0-9]+$");
QValidator *validator=new QRegExpValidator(exp,id_edit);
id_edit->setValidator(validator);
QRegExp exp1("^[0-9]+$");
QValidator *validator1=new QRegExpValidator(exp1,pwd_edit);
pwd_edit->setValidator(validator1);
不定长数据打包
还是有问题,之前试了下出错了,然后最近又忙,说实话就不想再搞不定长,想等他们做出来了,再问下。
遇到问题:
在查找数据表中用户名是否重名时,查看返回的个数会显示-1.这个问题之前遇到过,忘了怎么解决的,之后再查下。
解决:
打算使用回调函数查看返回具体内容。