数据库原理课程报告

实验一 实验报告

一、实验目的与要求

1、安装Sqlite软件,了解并掌握其基本功能;

2、创建系统需要的表

3、设计各种单表查询SQL语句;

4、设计分组统计查询语句,设计单表针对自身的连接查询,设计多表的连接查询;

5、保存实验结果以及实验中使用的数据库,并完成实验报告。

二、实验代码

2.1 建立表格

CREATE TABLE "Student" (
    "Sname" TEXT NOT NULL,
    "Sno"     TEXT NOT NULL UNIQUE,
    "Ssex"     TEXT NOT NULL,
    "Smajor" TEXT NOT NULL,
    "Sscholar"      INTEGER NOT NULL,
       "Sage"    INTEGER NOT NULL,
    PRIMARYKEY("Sno")
)

2.2 单表查询

    SELECT distinctSname FROM Student WHERE Sname = “张三”

2.3连接查询(单表多表连接)

SELECTSsex,GROUP_CONCAT(`Sname`) from Student GROUP BY Ssex

2.4 分组统计查询

SELECTFIRST.Cno,SECOND.Cpno FROM Course FIRST,Course SECOND WHERE FIRST.Cpno=SECOND.Cno;
  1. 运行结果

上图为SQLite软件运行的windowspowershell界面。

建立表:

建立数据:

3.1 单表查询

单表查询结果如下:

3.2 连接查询(自身连接)

3.3 分组统计查询

五、问题解决

5.1 问题一

用了中文符号,导致运行出错。

5.1.1 解决方法

更改为英文字符

5.1.2 调试分析总结

注意习惯,注意观察

实验二 实验报告

一、 实验目的与要求

1、创建系统需要的表;

2、分析查询需求,设计各种嵌套查询和集合查询语句;

3、保存实验结果以及实验中使用的数据库,并完成实验报告。

二、实验代码

2.1创建系统需要的表

CREATE TABLE "Course" ("Cno"     TEXT NOT NULL UNIQUE,
                      "Cname" TEXT NOT NULL,
                      "Grade"  NUMERIC NOT NULL,
                      "Cpno"     TEXT,
                      PRIMARYKEY("Cno")
                       )

2.2嵌套查询

Select Sname
From Student
Where Sno in(
Select Sno
From SC
Where Cno=1)

2.3集合查询

SELECT Sname,Smajor,Sage
FROM Student
WHERE Sage = 19;

运行结果

3.1 嵌套查询

单表查询结果如下:

3.2 集合查询

实验三 实验报告

一、实验目的与要求

(1)创建系统需要的表;

(2)设计数据更新实验的SQL语句,并进行调试;

(3)针对数据库,设计单元组插入、批量数据插入、修改数据和删除数据等SQL操作;

(4)保存实验结果以及实验中使用的数据库,并完成实验报告。

二、实验代码

2.1 单元组插入

Insert
Into Student
Values(“张伟”,2019100,“男”,“自动化”,400,21);

2.2 批量数据插入

Update student
Set Smajor=“工程”
Where Sno=2019100;

运行结果

3.1 单元组插入

单元组插入结果如下:

3.2 单元组插入

批量数据插入可采用循环语句将数据逐项插入数据库中

Update student

Set Smajor=“工程”

Where Sno=2019100;

Delete from student where Sage = 21;

实验四 实验报告

一、实验目的与要求

数据基本查询实验。设计各种单表查询SQL语句、分组统计查询语句,设计单表针对自身的连接查询,设计多表的连接查询。

(1)创建系统需要的表;

(2)针对数据库,分析相应的应用需求;创建视图和带with check option的视图,并验证视图with check option选项的有效性;

(3)保存实验结果以及实验中使用的数据库,并完成实验报告。

二、 实验代码

2.1 创建视图

CREAT VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept=’IS’
 
CREAT VIEW IS_Course
AS
SELECT Cno,Cname
FROM Course
WHERE cpno=6;
 
ALTER TABLE IS_Student ADD Sno DATE;
ALTER TABLE IS_Student ADD Sname DATE;
ALTER TABLE IS_Course ADD cno int;
ALTER TABLE IS_Course ADD cname string;
CREATE TABLE IS_Course ADD cname VARCHAR(6)

运行结果

3.1创建视图

创建视图结果如下:

实验五 实验报告

一、 实验目的与要求

数据基本查询实验。设计各种单表查询SQL语句、分组统计查询语句,设计单表针对自身的连接查询,设计多表的连接查询。

(1)安装Qt并且配置支持SQL语句的环境(使用Sqlite进行配置);

(2)在上述步骤基础上,创建可视化界面和按钮操作;

(3)在Qt中进行编程,设计一个完整含界面开发的信息查询系统,系统登录端分为教师和学生两部分;

(4)实现对学生信息、课程信息、学生选修及成绩信息的管理;运行系统,检测系统功能的完整性和准确性。

实验代码

核心代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
QSqlDatabase database=QSqlDatabase::database("qt_sql_default_connection");
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    m_log = new LogWidget;
    m_log->show();
    connect(m_log,SIGNAL(login()),this,SLOT(show()));
    form_init();
    func_init();
    //extern QString name;
    //qDebug()<<name<<"name is  duosao"<<endl;
 
//    if(name=="yangjinsong"){
//        ui->pushButton_4->setEnabled(true);
//        ui->btn_stu->setEnabled(false);
//        ui->btn_cou->setEnabled(false);
//        ui->btn_sco->setEnabled(false);
//        ui->btn_add_stu->setEnabled(false);
//        ui->btn_add_cou->setEnabled(false);
//        ui->btn_add_cou->setEnabled(false);
//        ui->pushButton->setEnabled(false);
//        ui->pushButton_2->setEnabled(false);
//        ui->pushButton_3->setEnabled(false);
//        qDebug()<<"jianpanyang"<<endl;
//    }
//    if(name=="wang"){
//        ui->pushButton_4->setEnabled(false);
//        qDebug()<<"jianpanwang"<<endl;
//    }
}
 
void MainWindow::form_init(){
    //创建数据库
    if (QSqlDatabase::contains("qt_sql_default_connection"))
    {
       database = QSqlDatabase::database("qt_sql_default_connection");
       //如果以及存在返回链接
       qDebug()<<"connect data"<<endl;
    }
    else
    {
       database = QSqlDatabase::addDatabase("QSQLITE");
       database.setDatabaseName("data.db");
//        database.setUserName("XingYeZhiXia");
//        database.setPassword("123456");
       //否则创建链接
       qDebug()<<"datachuangjian"<<endl;
    }
 
    if (!database.open())
    {
       qDebug() << "Error: Failed to connect database." << database.lastError();
    }
    else
    {
       //操作都在下面进行
       // do something
       qDebug() << "yes:open database." << endl;
       //创建表格
       QSqlQuery sql_query1;
       QString create_sql1 = "create table student (id int primary key, name varchar(30), age int,sex int)";//创建student数据库
       sql_query1.prepare(create_sql1);
       if(!sql_query1.exec())
       {
           qDebug() << "connect table." << endl;
       }
       else
       {
           qDebug() << "Table created!";
       }
       sql_query1.finish();
       //创建表格
       QSqlQuery sql_query2;
       QString create_sql2 = "create table course (id int primary key, name varchar(30), pre int,grade int)";
       sql_query2.prepare(create_sql2);
       if(!sql_query2.exec())
       {
           qDebug() << "connect table." << endl;
       }
       else
       {
           qDebug() << "Table created!";
       }
 
       sql_query2.finish();
       //创建表格
       QSqlQuery sql_query3;
       QString create_sql3 = "create table score (id int primary key, name varchar(30), score int)";
       sql_query3.prepare(create_sql3);
       if(!sql_query3.exec())
       {
           qDebug() << "connect table." << endl;
                        //sql_query3.lastError();
       }
       else
       {
           qDebug() << "Table created!";
       }
       sql_query3.finish();
    }
}
 
 
void MainWindow::func_init(){
 
 
    // connect
    // 触发重置按钮的信号槽连接
    connect(ui->btn_stu,SIGNAL(clicked()),this,SLOT(stu_clicked()));
    // 触发登录按钮的信号槽连接
    connect(ui->btn_cou,SIGNAL(clicked()),this,SLOT(cou_clicked()));
    // 发出信号后关闭登录窗口的信号槽连接
    connect(ui->btn_sco,SIGNAL(clicked()),this,SLOT(sco_clicked()));
 
    connect(ui->btn_add_stu,SIGNAL(clicked()),this,SLOT(stu_add_clicked()));
    connect(ui->btn_add_cou,SIGNAL(clicked()),this,SLOT(cou_add_clicked()));
    connect(ui->btn_add_sco,SIGNAL(clicked()),this,SLOT(sco_add_clicked()));
    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(stu_del_clicked()));
    connect(ui->pushButton_2,SIGNAL(clicked()),this,SLOT(cou_del_clicked()));
    connect(ui->pushButton_3,SIGNAL(clicked()),this,SLOT(sco_del_clicked()));
}
 
 
void MainWindow::stu_clicked(){
    m_stu = new student;
    m_stu->show();
    qDebug()<<"stu_clicked"<<endl;
}
 
void MainWindow::cou_clicked(){
    m_cou = new course;
    m_cou->show();
    qDebug()<<"cou_clicked"<<endl;
 
 
 
}
 
void MainWindow::sco_clicked(){
    m_sco = new score;
    m_sco->show();
    qDebug()<<"sco_clicked"<<endl;
 
}
 
void MainWindow::stu_add_clicked(){
    //下面是对数据库操作
       //插入数据
       QSqlQuery sql_query(database);
       QString insert_sql = "insert into student values (?, ?, ?, ?)";
       sql_query.prepare(insert_sql);
       int id =ui->lineEdit->text().toInt();
       sql_query.addBindValue(id);
       QString name =ui->lineEdit_2->text();
       sql_query.addBindValue(name);
       int age =ui->lineEdit_3->text().toInt();
       sql_query.addBindValue(age);
       int sex =ui->lineEdit_4->text().toInt();
       sql_query.addBindValue(sex);
       if(!sql_query.exec())
       {
           qDebug() << sql_query.lastError();
       }
       else
       {
           qDebug() << "inserted";
       }
       sql_query.finish();
}
void MainWindow::stu_del_clicked(){
 
    QSqlQuery sql_query(database);
    QString delete_sql = "delete from student where id = ?";
    sql_query.prepare(delete_sql);
    int id =ui->lineEdit_12->text().toInt();
    sql_query.addBindValue(id);
 
 
 
    if(!sql_query.exec())
    {
       qDebug()<<sql_query.lastError();
    }
    else
    {
       qDebug()<<"deleted!";
    }
    sql_query.finish();
}
void MainWindow::cou_add_clicked(){
    //插入数据
    QSqlQuery sql_query2(database);
    QString insert_sql = "insert into course values (?, ?, ?, ?)";
    sql_query2.prepare(insert_sql);
    int id =ui->lineEdit_5->text().toInt();
    sql_query2.addBindValue(id);
    QString  name=ui->lineEdit_6->text();
    sql_query2.addBindValue(name);
    int pre=ui->lineEdit_7->text().toInt();
    sql_query2.addBindValue(pre);
    int grade=ui->lineEdit_8->text().toInt();
    sql_query2.addBindValue(grade);
    if(!sql_query2.exec())
    {
       qDebug() << sql_query2.lastError();
    }
    else
    {
       qDebug() << "inserted!";
    }
}
void MainWindow::cou_del_clicked(){
    QSqlQuery sql_query(database);
    QString delete_sql = "delete from course where id = ?";
    sql_query.prepare(delete_sql);
    int id =ui->lineEdit_13->text().toInt();
    sql_query.addBindValue(id);
    if(!sql_query.exec())
    {
       qDebug()<<sql_query.lastError();
    }
    else
    {
       qDebug()<<"deleted!";
    }
    sql_query.finish();
}
void MainWindow::sco_add_clicked(){
    //插入数据
    QSqlQuery sql_query3(database);
    QString insert_sql3 = "insert into score values (?, ?, ?)";
    sql_query3.prepare(insert_sql3);
    int id =ui->lineEdit_9->text().toInt();
    sql_query3.addBindValue(id);
    QString name =ui->lineEdit_10->text();
    sql_query3.addBindValue(name);
    int score =ui->lineEdit_11->text().toInt();
    sql_query3.addBindValue(score);
    if(!sql_query3.exec())
    {
       qDebug() << sql_query3.lastError();
    }
    else
    {
       qDebug() << "inserted !";
    }
 
}
void MainWindow::sco_del_clicked(){
    QSqlQuery sql_query(database);
    QString delete_sql = "delete from score where id = ?";
    sql_query.prepare(delete_sql);
    int id =ui->lineEdit_14->text().toInt();
    sql_query.addBindValue(id);
    if(!sql_query.exec())
    {
       qDebug()<<sql_query.lastError();
    }
    else
    {
       qDebug()<<"deleted!";
    }
    sql_query.finish();
}
 
 
MainWindow::~MainWindow()
{
    delete ui;
    database.close();
}
 
 
#include "student.h"
#include "ui_student.h"
 
#include"mainwindow.h"
 
student::student(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::student)
{
    ui->setupUi(this);
    qDebug()<<"stu_clicked"<<endl;
    //显示数据
    int i=0;
    extern QSqlDatabase database;
    QSqlQuery sql_query1(database);
    QString select_sql1 = "select id, name,age ,sex from student";
    if(!sql_query1.exec(select_sql1))
    {
        qDebug()<<sql_query1.lastError();
    }
    else
    {
        QStandardItemModel *model = new QStandardItemModel(this);
        this->ui->tableView->setModel(model);
        model->setColumnCount(4);
        model->setHeaderData(0,Qt::Horizontal,"学号");
        model->setHeaderData(1,Qt::Horizontal,"姓名");
        model->setHeaderData(2,Qt::Horizontal,"性别");
        model->setHeaderData(3,Qt::Horizontal,"年龄");
        ui->tableView->setColumnWidth(0,60);
        ui->tableView->setColumnWidth(1,60);
        ui->tableView->setColumnWidth(2,60);
        ui->tableView->setColumnWidth(3,60);
 
        while(sql_query1.next())
        {
 
            QString id1 = sql_query1.value(0).toString();
            QString name1 = sql_query1.value(1).toString();
            QString age1 = sql_query1.value(2).toString();
            QString sex1 = sql_query1.value(3).toString();
            qDebug()<<QString("id:%1    name:%2   age:%3   sex:%4").arg(id1).arg(name1).arg(age1).arg(sex1);
 
            model->setItem(i,0,new QStandardItem(id1));
            model->setItem(i,1,new QStandardItem(name1));
            model->setItem(i,2,new QStandardItem(age1));
            model->setItem(i,3,new QStandardItem(sex1));
            i++;
        }
    }
     sql_query1.finish();
 
 
}
 
student::~student()
{
    delete ui;
}
 

运行结果

3.1 系统界面

结果如下:

3.2 插入数据

3.3 显示功能

四、 问题解决

4.1 问题一

学生老师端窗口分离

4.1.1 解决方法

将学生端变量作为指针赋给老师端变量

4.1.2 运行结果

4.1.3 调试分析总结

多分析代码的框架,尤其要注意代码在哪里建立。

碰到问题的时候多想想哪里出了问题,然后再到网上搜索。

4.2 问题二

打开窗口时关闭另一个指针

4.2.1 解决方法

将登录窗口变量作为指针赋给主窗口变量,主窗口窗口创建时show一下登陆窗口。

4.2.2 运行结果

4.2.3 调试分析总结

多分析代码的框架,尤其要注意代码在哪里建立,不然调试代码发现逻辑不通就需要花费大量时间debug。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值