实验一 实验报告
一、实验目的与要求
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;
运行结果
上图为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。