本系统主要实现了职工工资管理系统的基本功能,包括录入、注册、登录、搜索、显示数据、修改、求取总工资、求取平均工资等功能。本软件有登录界面、注册界面、主界面、录入界面四个界面。
额。。。。因为时间比价匆忙,所以我主要介绍一下这个系统的比较核心的部分吧。。。。
1、搜索功能、登录功能的实现:如何利用数据库如何准确的获取数据
1、.record().indexOf() :当查询指向一个有效的行(该行有数据)时,则用该行的值来填充、记录。因而用.record()来确定行,indexOf()来确定项,从而定位每一行中的每一项。
注:若需查询到的值提取出来,则用value。
2、query.next() :遍历表格查询检索结果中的下一条记录(如果可用),并将查询定位到检索到的记录上。
void Widget::search ()
{
//建立数据库连接
this->db=QSqlDatabase::addDatabase ("QSQLITE");
db.setDatabaseName ("first.db");
//判断是否打开数据库
bool ok;
ok=db.open ();
if(!ok)
{qDebug()<<"数据库没打开";}
else
{
qDebug()<<"数据库打开";
/***执行数据库语言按顺序打开表格(由于需用indexOf语句)***/
QSqlQuery query("select id,name,base_pay,position_pay,job_subsidies,medical_insurance,accumulation_fund from emplayee order by id");
model->setQuery ("select id,name,base_pay,position_pay,job_subsidies,medical_insurance,accumulation_fund from emplayee order by id");
int x=query.record ().indexOf ("name");//record()确定行,indexOf确定项
int y=query.record ().indexOf ("id");
int z=query.record ().indexOf ("base_pay");
int a=query.record ().indexOf ("position_pay");
int b=query.record ().indexOf ("job_subsidies");
int c=query.record ().indexOf ("medical_insurance");
int d=query.record ().indexOf ("accumulation_fund");
int j=0,k=0;
int sum,pay1,pay2,pay3,pay4,pay5;
while(query.next ())//遍历表格
{
k++;
if(ui->lineEdit_search->text ()==query.value (x).toString ()) //文本与name字段内容作比较,toString为转换为字符串型
{
j=1;
qDebug()<<"找到了";
ui->lineEdit_ID->setText (query.value (y).toString ()); //将找到行的其余项内容设置到对应Ui的lineEdit
ui->lineEdit_name->setText (query.value (x).toString ());
ui->lineEdit_base_pay->setText (query.value (z).toString ());
ui->lineEdit_position_pay->setText (query.value (a).toString ());
ui->lineEdit_job_subsidies->setText (query.value (b).toString ());
ui->lineEdit_medical_insurance->setText (query.value (c).toString ());
ui->lineEdit_accumulation_fund->setText (query.value (d).toString ());
//将每个字段的项加起来
pay1 = query.value (z).toInt ();
pay2 = query.value (a).toInt ();
pay3 = query.value (b).toInt ();
pay4 = query.value (c).toInt ();
pay5 = query.value (d).toInt ();
sum = pay1 + pay2 + pay3 + pay4 + pay5;
QString sum1;
sum1 = QString::number (sum);
ui->lineEdit_sum->setText (sum1);
break;
}
}
if(j==1)
{
qDebug()<<"找到了";
ui->lineEdit_ID->setEnabled (false); //关闭编辑框使能
ui->lineEdit_name->setEnabled (false);
ui->lineEdit_base_pay->setEnabled (false);
ui->lineEdit_position_pay->setEnabled (false);
ui->lineEdit_job_subsidies->setEnabled (false);
ui->lineEdit_medical_insurance->setEnabled (false);
ui->lineEdit_accumulation_fund->setEnabled (false);
}
else
{
QMessageBox::information (this,"提示","没有该员工的信息");
qDebug()<<"没有找到";
}
}
}
2、在Qt中运用数据库,即:打开数据库。
额。。。。顺序有点倒。。。。见谅。。。哈哈哈
解决方法:
1、在项目中加入数据库的应用,首先要在.pro文件中加入sql。
QT += sql
2、连接数据库,判断数据库是否连接成功、是否打开。
/***建立数据库连接***/
this->db=QSqlDatabase::addDatabase ("QSQLITE");
db.setDatabaseName ("first.db");
bool ok;
ok=db.open ();
if(!ok)
{
QMessageBox::information (this,"错误","数据库打开失败");
qDebug()<<"数据库打开失败";
qDebug()<
3、功能演示
下面是主界面,显示数据:进入主界面后 → 点击“显示数据”按钮
搜索功能下:
额。。。好吧,大概就是这个样子了。
注:
然后附上源码,这个是有Debug模式与Release模式的,这两个模式简单说明一下,Debug模式即是程序员的编译模式,占用内存较大,编译时间长,不易于用户使用。所以一般程序员编译好后,会将其转成Release模式的程序,这个才是易于用户使用的模式,内存小,启动快。这个过程中需要注意的是,第一次在Release模式的编译后,会出现运行问题,主要问题在于Release会生成一个新的工程文件,新的同名的.db文件(即数据库文件),而这个.db文件是空的,所以要解决这个问题的话,需要用Debug模式下生成的.db文件替换掉Release模式下的.db后再运行Release模式,问题就解决了。
Qt_工资管理系统