设为首页 收藏本站
查看: 796|回复: 0

[经验分享] 基于qt和mysql的学生注册系统(一)

[复制链接]

尚未签到

发表于 2016-10-19 10:12:36 | 显示全部楼层 |阅读模式
  这学期开了数据库的课,之前也有同学找过我做个类似的东西,但当时不会....
  言归正转,
  开发环境:ubuntu10.10
  ide:qtcreator
  数据库:mysql
  实现功能:链接数据库,用户登录,数据添加,删除,查询,修改,删除,文件输出。
  效果如下:
DSC0000.gif
DSC0001.gif
DSC0002.gif
  
  
  
  
  
  
  
  
  
  
  
  关于环境的配置在我之前的一篇文章里已经写了,没配置好的可以参照一下。
  需要用到的一些qt的知识:
  mv架构,qsql类的一些东西。
  qt有自己的一套数据库处理的方式,我还是偏向sql语句。
  文件组织:
DSC0003.gif
  上代码:
  先上mainwindow类,主要是页面的布局。
  
  mainwindow.h
  #ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui/QMainWindow>
#include <QMenuBar>
#include <QPushButton>
#include <QWidget>
#include <QPainter>
#include <QLabel>
#include <QScrollArea>
#include <QAction>
#include <QFileDialog>
#include <QMessageBox>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QTextEdit>
#include <QIcon>
#include <QToolBar>
#include <QLabel>
#include <QStatusBar>
#include <QLayout>
#include <QPainter>
#include <QList>
#include <QSqlTableModel>
#include <QTableView>
#include <QDebug>
#include <QSqlQuery>
#include <QVariant>
#include <QStringList>
#include <QInputDialog>
#include <QComboBox>
#include <QDialogButtonBox>
#include <QGridLayout>
#include <QFileDialog>
#include <QStringList>
#include <QFile>
#include <QVector>
#include <QPoint>
#include <QSqlRecord>
#include"add.h"
#include"mod.h"
#include"search.h"
#include <QDesktopServices>
#include <QSystemTrayIcon>

class MainWindow : public QMainWindow
{

Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
void createMenus();//生成菜单
void createActions();//生成动作
void createToolBars();//生成工具栏
void createButtons();//生成按键
static QVector<QString> classes;


private:

QGridLayout *grid;
QSqlQueryModel *model;
QMenu *fileMenu;
QMenu *helpMenu;
QMenu *aboutMenu;
QToolBar *tool;
QAction *saveAction;
QAction *aboutAction;
QAction *exitAction;
QAction *helpAction;
QAction *searchAction;
QAction *deleteAction;
QAction *backAction;
QAction *addAction;
QAction *rankAction;
QAction *modifyAction;
QLabel *msgLabel;//状态栏显示
QLabel *about;//关于
QPushButton *modifyBtn;
QPushButton *rankBtn;
QTableView *tableView;
QDialogButtonBox *buttonBox;
QPoint *p;
public slots:
void slotAbout();//关于我们
void slotHelp();//帮助
bool slotAdd();//增加
void slotDelete();//删除元组
void slotBack();//返回
void slotSearch();//搜索
void slotModify();//修改
void slotRank();//排序
void slotSave();//储存
};

#endif // MAINWINDOW_H
mainwindow.cpp
  #include "mainwindow.h"
QVector<QString> MainWindow::classes;

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{

setGeometry(100,100,1000,768);
setWindowTitle(tr("Student Registration System"));
//状态栏设定
msgLabel=new QLabel;
msgLabel->setMinimumSize(msgLabel->sizeHint());
statusBar()->addWidget(msgLabel);
createActions();
createMenus();
createToolBars();
//createButtons();
tableView= new QTableView(this);
QHBoxLayout *main_lay=new QHBoxLayout;
main_lay->addWidget(tableView);
//main_lay->addLayout(bt_lay);


QWidget *centreWidget=new QWidget(this);
centreWidget->setLayout(main_lay);
setCentralWidget(centreWidget);

model = new QSqlQueryModel(this);
model->setQuery("select * from Student");
tableView->setModel(model);
QVector<QString> cla;
QSqlQuery query;
query.exec("select classNo from Class");
qDebug()<<query.size();
while(query.next())
{
cla.append(query.value(0).toString());
}
classes=cla;
qDebug() << "main:"<<classes.size();
}

MainWindow::~MainWindow()
{

}

void MainWindow::createActions()
{
//about action
aboutAction=new QAction(tr("&About"), this);
aboutAction->setIcon(QIcon(":resources/2.png"));
aboutAction->setStatusTip(tr("OAbout me."));
connect(aboutAction,SIGNAL(triggered()),this,SLOT(slotAbout()));

//help action
helpAction=new QAction(tr("&Help"),this);
helpAction->setStatusTip("Help");
connect(helpAction,SIGNAL(triggered()),this,SLOT(slotHelp()));

//back action
backAction=new QAction(tr("&Back"),this);
backAction->setIcon(QIcon(":resources/7.png"));
backAction->setStatusTip("Back");
connect(backAction,SIGNAL(triggered()),this,SLOT(slotBack()));

//add action
addAction=new QAction(tr("&Add"),this);
addAction->setIcon(QIcon(":resources/1.png"));
addAction->setStatusTip("Add");
connect(addAction,SIGNAL(triggered()),this,SLOT(slotAdd()));

//search action
searchAction=new QAction(tr("&Search"),this);
searchAction->setIcon(QIcon(":resources/3.png"));
searchAction->setStatusTip("search");
connect(searchAction,SIGNAL(triggered()),this,SLOT(slotSearch()));

//delete action
deleteAction=new QAction(tr("&delete"),this);
deleteAction->setIcon(QIcon(":resources/9.png"));
deleteAction->setShortcuts(QKeySequence::Delete);
deleteAction->setStatusTip("delete");
connect(deleteAction,SIGNAL(triggered()),this,SLOT(slotDelete()));

//exit Action
exitAction = new QAction(tr("E&xit"), this);
// exitAction = new QAction(tr("E&xit"), this);
exitAction->setShortcuts(QKeySequence::Quit);
connect(exitAction, SIGNAL(triggered()), this, SLOT(close()));

///rank Action
rankAction=new QAction(tr("&rank"),this);
rankAction->setIcon(QIcon(":resources/10.png"));
rankAction->setStatusTip("rank");
connect(rankAction,SIGNAL(triggered()),this,SLOT(slotRank()));

//modify Action
modifyAction=new QAction(tr("&modify"),this);
modifyAction->setIcon(QIcon(":resources/11.png"));
modifyAction->setStatusTip("modify");
connect(modifyAction,SIGNAL(triggered()),this,SLOT(slotModify()));

//save Action
saveAction=new QAction(tr("&save File"),this);
saveAction->setStatusTip("Save file");
saveAction->setShortcut(QKeySequence::Save);
saveAction->setIcon(QIcon(":resources/12.png"));
connect(saveAction,SIGNAL(triggered()),this,SLOT(slotSave()));
}
void MainWindow::slotAbout()
{
QMessageBox msg(this);
msg.setWindowTitle("About");
msg.setText(tr("Version:1.0"));
msg.exec();
}
void MainWindow::slotHelp()
{
QMessageBox msg(this);
msg.setWindowTitle("Help");
msg.setText(tr("Email:k283228391@126.com"));
msg.exec();
}
void MainWindow::slotBack()
{
model->setQuery("select * from Student");
tableView->update();
}
void MainWindow::slotDelete()
{

int i=tableView->currentIndex().row();
QVariant j=model->record(i).value(0);
qDebug()<<"currentIndex().data:"<<j;//tableView->indexAt(*p).data();
int b=QMessageBox::question(this,"Attention",tr("Delete row %1?").arg(i+1),QMessageBox::Yes,QMessageBox::Cancel);
qDebug()<<"b:"<<b;//output the value return yes:16384,cancel:4194304
if(b==16384)
{
QSqlQuery queryDel;
queryDel.prepare("delete from Student where Sno=?");
queryDel.addBindValue(j.toString());
queryDel.exec();
model->setQuery("select * from Student");
}
}
void MainWindow::slotSave()
{
this->setWindowOpacity(0.7);
QFileDialog *fileDialog = new QFileDialog(this);
fileDialog->setAcceptMode(QFileDialog::AcceptSave);
fileDialog->setWindowTitle(tr("Save"));
QString s=QDesktopServices::storageLocation(QDesktopServices::DesktopLocation);
fileDialog->setDirectory(s);
fileDialog->setFilter(tr("Txt(*.txt)"));
if(fileDialog->exec() == QDialog::Accepted)
{
QString path = fileDialog->selectedFiles()[0];
if(path.right(3)!="txt")// 修改扩展名
{
path.append(".txt");
}
QFile file(path);
if (file.open(QIODevice::WriteOnly)) {
QSqlQuery query;exitAction->setShortcuts(QKeySequence::Quit);
query.exec("select * from Student");
QTextStream stream( &file );
stream << "Student information: "<< "/n";//in ubuntu
stream <<"Number"<<"/t"<<"Name"<<"/t"<<"Sex"<<"/t"<<"Age"<<"/t"<<"Hometown"<<"/t"<<"classNumber"<<"/n";
while(query.next())
{
stream << query.value(0).toInt() <<"/t"<<query.value(1).toString()<</
"/t"<<query.value(2).toString()<<"/t"<<query.value(3).toInt()<<"/t"/
<<query.value(4).toString()<<"/t/t"<<query.value(5).toString()<<"/n";
}

file.close();
}
}
else
{
QMessageBox::information(NULL, tr("Path"), tr("You didn't select any files."));
}
this->setWindowOpacity(1.0);

}
bool MainWindow::slotAdd()
{
this->setWindowOpacity(0.7);
add dlg;
if(dlg.exec()==QDialog::Accepted)
{
dlg.Createsql();
model->setQuery("select * from Student");
tableView->update();
}
setWindowOpacity(1.0);
}
void MainWindow::slotModify()
{

int i=tableView->currentIndex().row();
int k=tableView->currentIndex().column();
QVariant j= model->record(i).value(0);
QVariant h=model->headerData(k,Qt::Vertical);//get the headdata of the column
qDebug()<<"currentIndex().data:"<<h;

this->setWindowOpacity(0.7);
mod dlg;
if(dlg.exec()==QDialog::Accepted)
{
if(dlg.Createsql(h.toInt(),j))
{
qDebug()<<"Yse!";
}
else
{
qDebug()<<"No";
}
model->setQuery("select * from Student");
tableView->update();
}
setWindowOpacity(1.0);
}
void MainWindow::slotRank()
{
//QDialog dlg;
this->setWindowOpacity(0.7);
QStringList list;
bool ok;
list<<tr("")<<tr("No.")<<tr("sex")<<tr("age")<<tr("class");
QString s=QInputDialog::getItem(this,tr("Search Inoformation:"),tr("Choose:"),list,0,false,&ok);
qDebug()<<s;
if(s=="age")
{
model->setQuery("select * from Student order by Sage");
}
else if(s=="No.")
{
model->setQuery("select * from Student order by Sno");
}
else if(s=="class")
{
model->setQuery("select * from Student order by classNo");
}

setWindowOpacity(1.0);
}
void MainWindow::slotSearch()
{
this->setWindowOpacity(0.7);
search sch;
if(sch.exec()==QDialog::Accepted)//if accept,create a sql sentance;
{
QString s;
s=sch.searchSql();
qDebug()<<s;
model->setQuery(s);
tableView->update();
}


setWindowOpacity(1.0);
}

void MainWindow::createToolBars()
{
tool=addToolBar(tr("&File"));
tool->addAction(addAction);
tool->addAction(searchAction);
tool->addSeparator();
tool->addAction(deleteAction);
tool->addAction(backAction);
tool->addAction(rankAction);
tool->addAction(modifyAction);
tool->addAction(saveAction);
}

void MainWindow::createMenus()
{
fileMenu=menuBar()->addMenu(tr("&File"));
fileMenu->addAction(saveAction);
fileMenu->addAction(exitAction);

helpMenu=menuBar()->addMenu(tr("&Help"));
helpMenu->addAction(helpAction);

aboutMenu=menuBar()->addMenu(tr("&About"));
aboutMenu->addAction(aboutAction);

}
void MainWindow::createButtons()
{
modifyBtn=new QPushButton(tr("modify"));
connect(modifyBtn,SIGNAL(clicked()),this,SLOT(slotModify()));
rankBtn=new QPushButton(tr("rank"));
connect(rankBtn,SIGNAL(clicked()),this,SLOT(slotRank()));
}
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-288339-1-1.html 上篇帖子: MySQL数据库中CHAR与VARCHAR之争 下篇帖子: 转载--[数据库] MySQL汉字字段按拼音排序
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表