基于SQLITE的简易学生管理界面

Sqlite命令行程序

创建数据表

CREATE TABLE 表名(列名1 类型 [约束],列名2 类型 [约束],...);

常用的类型

INT(整形) TEXT(字符串) REAL(浮点数)

常用的约束

PRIMARY KEY(主键):表示该列数据唯一,可以加快数据访问。

NOT NULL(非空):该列数据不能为空

删除数据表

DROP TABLE 表名

删除数据表实例

DROP TABLE testTable

1.向数据表中插入数据

INSERT INTO 表名 (列名1,列名2,...) VALUES(数值1,数值2,...);

如果要为表中所有列添加值,并且插入列的顺序和创建表的顺序相同,可以不需要在Sqlite查询中指定列名

INSERT INTO 表名 VALUES(数值1,数值2,...);

插入数据实例

INSERT INTO company (id,name,age,salary) VALUES(1001,'小乔‘,24,11000);

INSERT INTO company VALUES(1002,'大乔‘,26,14000);

2.从数据表删除数据

DELETE FROM 表名 WHERE 条件表达式;

注:可以没有where子句,但数据表的所有数据都将被删除;

如果有多个条件可以使用逻辑与(and)或逻辑或(or)连接

删除数据实例

DELETE FROM company WHERE id=1001;

DELETE FROM company WHERE address='成都' and salary<1000;

3.修改数据表中的数据

UPDATE 表名 SET 列名1=新数值,列名2=新数值,...,WHERE 条件表达式;

注:可以没有WHERE子句,但数据表的所有数据都将被修改;

"新数值"可以是一个常数,也可以是一个表达式。

修改数据实例

UPDATE company SET age=45 WHERE id=1001;

UPDATE company SET salary=salary+2000 WHERE age>=30 and age<=35;

4.查询数据表中的数据

SELECT 列名1,列名2,... FROM 表名;

SELECT 列名1,列名2,... FROM 表名 WHERE 条件表达式;

SELECT 列名1,列名2,... FROM 表名 WHERE 条件表达式 ORDER BY 列名 排序方式

注:ORDER BY 子句可以和WHERE子句配合使用,也可以单独使用;

注:排序方式 ASC------升序 DESC------降序

查询操作实例

SELECT * FROM company WHERE salary>10000 or salary<3500;

SELECT * FROM company ORDER BY id ASC;

代码如下:widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QSqlDatabase>
#include<QSqlQuery>
#include<QSqlError>
#include<QSqlQueryModel>
#include<QDebug>
#include<QMessageBox>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    //创建数据库
    void createDB();
    //创建数据表
    void createTable();
    //查询
    void queryTable();


private slots:
    //插入
    void on_insertButton_clicked();
    //删除
    void on_deleteButton_clicked();
    //修改
    void on_updateButton_clicked();
    //排序
    void on_sortButton_clicked();

    void on_findButton_clicked();

private:
    Ui::Widget *ui;

    QSqlDatabase db;//建立和数据库连接
    QSqlQueryModel model;//保存结果集
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include<QSqlQuery>
//实现增删改查操作
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    createDB();

    createTable();

    queryTable();
}

Widget::~Widget()
{
    delete ui;
}

//创建数据库
void Widget::createDB()
{
    //添加数据库驱动
    db=QSqlDatabase::addDatabase("QSQLITE");
    //设置数据库名字(文件名)
    db.setDatabaseName("student.db");

    //打开数据库
    if(db.open()==true)
    {
        qDebug()<<"创建/打开数据库成功!";
    }
    else
    {
      qDebug()<<"创建/打开数据库失败!";
    }

}

void Widget::createTable()
{
    QSqlQuery query;
    QString str=QString("CREATE TABLE student ("
                        "id INT PRIMARTY KEY NOT NULL,"
                        "name TEXT NOT NULL,"
                        "score REAL NOT NULL)");
    if(query.exec(str)==false)
    {
        qDebug()<<str;
    }
    else {
        qDebug()<<"创建数据表成功!";
    }


}

void Widget::queryTable()
{
    QString str=QString("SELECT * FROM student");
    model.setQuery(str);
    ui->tableView->setModel(&model);

}
//插入
void Widget::on_insertButton_clicked()
{
    QSqlQuery query;
    int id=ui->idEdit->text().toInt();
    //错误提示
    if(id==0)
    {
        QMessageBox::critical(this,"Error","ID输入不能为空!");
        return;
    }
    QString name=ui->nameEdit->text();
    //错误提示
    if(name=="")
    {
        QMessageBox::critical(this,"Error","姓名输入错误!");
        return;
    }
    double score=ui->scoreEdit->text().toDouble();
    if(score<0 ||score>100)
    {
        QMessageBox::critical(this,"Error","成绩输入错误!");
        return;
    }
    QString str=QString("INSERT INTO student VALUES(%1,'%2',%3)"
                        ).arg(id).arg(name).arg(score);

    if(query.exec(str)==false)
    {
        qDebug()<<str;
    }
    else
    {
       qDebug()<<"插入数据成功!";
       queryTable();
    }

}
//删除:根据id删除一条数据
void Widget::on_deleteButton_clicked()
{
    QSqlQuery query;
    int id=ui->idEdit->text().toInt();
    QString str=QString("DELETE FROM student WHERE id=%1").arg(id);

    //删除提醒
    if (QMessageBox::question(this,"删除","确定要删除吗?",
        QMessageBox::Yes|QMessageBox::No)==QMessageBox::No)
    {
        return;
    }
    if(query.exec(str)==false)
    {
        qDebug()<<str;
    }
    else
    {
       qDebug()<<"删除数据成功!";
       queryTable();
    }


}
//修改根据id修改成绩
void Widget::on_updateButton_clicked()
{
    QSqlQuery query;
    int id=ui->idEdit->text().toInt();
    double score=ui->scoreEdit->text().toDouble();
    QString str=QString("UPDATE student SET score=%1 WHERE id=%2").arg(score).arg(id);

    if(query.exec(str)==false)
    {
        qDebug()<<str;
    }
    else
    {
       qDebug()<<"修改数据成功!";
       queryTable();
    }


}
//排序
void Widget::on_sortButton_clicked()
{
    //获取排序列名
    QString value=ui->valuecomboBox->currentText();
    //获取排序方式
    QString condition;
    if(ui->condcomboBox->currentIndex()==0)
    {
        condition="ASC";//升序
    }
    else
    {
        condition="DESC";//降序
    }

    QString str=QString ("SELECT * FROM student ORDER BY %1 %2").arg(value).arg(condition);

    //查询和显示
    model.setQuery(str);
    ui->tableView->setModel(&model);

}

void Widget::on_findButton_clicked()
{
    //获取排序列名
    int id =ui->idEdit->text().toInt();

    QString str=QString ("SELECT * FROM student WHERE id=%1 ").arg(id);

    //查询和显示
    model.setQuery(str);
    ui->tableView->setModel(&model);


}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,Python基于SQLite的通讯录管理系统可以分为以下几个模块: 1. 数据库模块:使用SQLite数据库存储联系人信息,提供增删改查接口。 2. 用户界面模块:提供图形用户界面,包括添加联系人、删除联系人、修改联系人、查询联系人等操作。 3. 数据处理模块:将用户界面的操作转化为数据库操作,处理数据库返回的结果并展示给用户。 下面是一个简单的实现代码: ```python # 导入SQLite模块 import sqlite3 # 定义数据库文件名 DB_FILE = 'contacts.db' # 连接数据库 def connect_db(): conn = sqlite3.connect(DB_FILE) return conn # 创建联系人表 def create_table(conn): cursor = conn.cursor() cursor.execute('''CREATE TABLE IF NOT EXISTS contacts (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, phone TEXT, email TEXT)''') conn.commit() # 添加联系人 def add_contact(conn, name, phone, email): cursor = conn.cursor() cursor.execute('INSERT INTO contacts (name, phone, email) VALUES (?, ?, ?)', (name, phone, email)) conn.commit() # 删除联系人 def delete_contact(conn, id): cursor = conn.cursor() cursor.execute('DELETE FROM contacts WHERE id = ?', (id,)) conn.commit() # 修改联系人 def update_contact(conn, id, name, phone, email): cursor = conn.cursor() cursor.execute('UPDATE contacts SET name = ?, phone = ?, email = ? WHERE id = ?', (name, phone, email, id)) conn.commit() # 查询联系人 def query_contact(conn, name): cursor = conn.cursor() cursor.execute('SELECT id, name, phone, email FROM contacts WHERE name like ?', ('%' + name + '%',)) return cursor.fetchall() # 用户界面 def main(): conn = connect_db() create_table(conn) while True: print('1. 添加联系人') print('2. 删除联系人') print('3. 修改联系人') print('4. 查询联系人') print('5. 退出程序') choice = input('请输入选项: ') if choice == '1': name = input('请输入姓名: ') phone = input('请输入电话: ') email = input('请输入邮箱: ') add_contact(conn, name, phone, email) elif choice == '2': id = input('请输入要删除的联系人id: ') delete_contact(conn, id) elif choice == '3': id = input('请输入要修改的联系人id: ') name = input('请输入新的姓名: ') phone = input('请输入新的电话: ') email = input('请输入新的邮箱: ') update_contact(conn, id, name, phone, email) elif choice == '4': name = input('请输入要查询的联系人姓名: ') contacts = query_contact(conn, name) for contact in contacts: print(contact) elif choice == '5': break else: print('输入错误,请重新输入!') conn.close() if __name__ == '__main__': main() ``` 这段代码中,我们首先定义了一个`DB_FILE`常量,作为SQLite数据库文件名,然后定义了一些数据库操作函数,如`connect_db()`、`create_table()`、`add_contact()`、`delete_contact()`、`update_contact()`、`query_contact()`等。最后,在`main()`函数中,我们通过输入输出实现了一个简单的用户界面,将用户输入的操作转化为相应的数据库操作,并将处理结果展示给用户。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值