精华内容
下载资源
问答
  • 网上下的一个图书管理系统,用jsp+mysql+tomcat实现,很实用,另外含有使用说明书 网上下的一个图书管理系统,用jsp+mysql+tomcat实现,很实用,另外含有使用说明书
  • qt+mysql 制作简易的图书管理系统 有注释 使用c++在qt5.8平台开发;ui设计使用了QT自带的UI工具,自动生成的UI代码也在压缩包中;
  • PHP+MYSQL图书管理系统

    2019-05-27 09:34:01
    PHP+MYSQL图书管理系统完全开源的PHP+MYSQL图书管理系统,分享一下
  • 系统是采用jsp+Mysql.不是只给出一个代码而已。而是集需求分析和概要设计等,按软件工程的步骤来构建的系统。尤其适合初学者。
  • PHP+MySQL 图书管理系统

    2020-01-04 06:00:32
    图书管理系统前后台全部代码(附带数据库文件),可对图书和读者进行搜索和增删改查等操作。功能不是很全请谨慎下载。具体请看http://blog.csdn.net/leslie___cheung/article/details/79074383 XMAPP集成环境下载...
  • 学习基础:曾学习过数据库操作和JAVAEE 后续学习了:node.js基础知识,express,ES6语法 了解了:node 第三方接口中间件和跨域...Node.js 图书管理系统 ES6语法 express mysql id name author category desc do ...

    学习基础:曾学习过数据库操作和JAVAEE
    后续学习了:node.js基础知识,express,ES6语法
    了解了:node 第三方接口中间件和跨域操作
    未来学习:框架和webpack
    项目:跟着教程看了一遍 用typora做了笔记,然后再看着笔记实操一遍

    Node.js 图书管理系统

    ES6语法

    express

    mysql

    id name author category desc do

    文件夹 :mybook

    new:mybook\index.js

    ​ 生成package.json:cmd命令 E:\node\mybook\npm init -y

    安装所需要的包

    cmd: npm install express art-template body-parser --save

    index.js

    //入口文件
    const express=require('express');
    const path=require('path');
    const router=require('./router.js');
    const template=require('art-template');
    const bodyParser=require('body-parser');
    const app=express();
    
    //启动静态资源服务
    app.use('/www',express.static('public'));
    
    //利用中间件
    //设置模板引擎
    

    cmd: npm install express-art-template --save

    //设置模板的路径
    app.set('views',path.join(_dirname,'views'));
    //设置模板引擎
    app.set('view engine','art');
    
    //使express兼容art-template模板引擎
    app.engine('art',require('express-art-template'));
    
    
    //处理请求参数
    //挂载参数处理中间件(post)
    app.use(bodyParser.urlencoded({extended:false}));
    //处理json格式的参数
    app.use(bodyParser.json());
    
    //启动服务器功能
    //配置路由
    app.use(router);
    //监听端口
    app.listen(5500,()=>{
        console.log('running...');
    });
    

    new:mybook\data.json

    [
        {
            "id": "1",
            "name": "三国演义",
            "author": "罗贯中",
            "category": "文学",
            "desc": "一个杀伐纷争的年代"
        },
        {
            "id": "2",
            "name": "水浒传",
            "author": "施耐庵",
            "category": "文学",
            "desc": "108条好汉的故事"
        },
        {
            "id": "3",
            "name": "西游记",
            "author": "吴承恩",
            "category": "文学",
            "desc": "佛教与道教的斗争"
        },
        {
            "id": "4",
            "name": "红楼梦",
            "author": "曹雪芹",
            "category": "文学",
            "desc": "一个封建王朝的缩影"
        }
    ]
    

    new:mybook\db.js

    //封装操作数据库的通用api
    
    const mysql=require('mysql');
    
    exports.base = (sql,data,callback) => {
        // 创建数据库连接
        const connection = mysql.createConnection({
            host: 'localhost',
            user: 'root', 
            password: 'mysql2018',
            database: 'mybook' 
        });
        // 执行连接操作
        connection.connect();
    
        // 操作数据库(数据库操作也是异步的)
        connection.query(sql,data, function(error, results, fields) {
            if (error) throw error;
            callback(results);
        });
        // 关闭数据库
        connection.end();
    }
    

    文件夹:mybook\views

    new:mybook\views\index.art
    <link rel='stylesheet' type="text\css" href="/www/style.css">
    <body>
    	<div class='title'>图书管理系统<a href="/toAddBook">添加图书</a></div>
    	<div class='content'>
    		<table>
    			<thead>
    				<tr>
    					<th>编号</th>
    					<th>名称</th>
    					<th>作者</th>
    					<th>分类</th>
    					<th>描述</th>
    					<th>操作</th>
    				</tr>
    			</thead>
    			 <tbody>
                    {{each list}}
                    <tr>
                        <td>{{$value.id}}</td>
                        <td>{{$value.name}}</td>
                        <td>{{$value.author}}</td>
                        <td>{{$value.category}}</td>
                        <td>{{$value.description}}</td>
                        <td>
                        <a href="/toEditBook?id={{$value.id}}">修改</a>
                        |<a href="/deleteBook?id={{$value.id}}">删除</a>
                        </td>
                    </tr>
                    {{/each}}
         //太麻烦           
                    <!-- 
                    <tr>
                        <td>1</td>
                        <td>西游记</td>
                        <td>吴承恩</td>
                        <td>文学</td>
                        <td>佛教与道教的斗争</td>
                        <td><a href="#">修改</a>|<a href="#">删除</a></td>
                    </tr>
                    <tr>
                        <td>1</td>
                        <td>西游记</td>
                        <td>吴承恩</td>
                        <td>文学</td>
                        <td>佛教与道教的斗争</td>
                        <td><a href="#">修改</a>|<a href="#">删除</a></td>
                    </tr>
                    <tr>
                        <td>1</td>
                        <td>西游记</td>
                        <td>吴承恩</td>
                        <td>文学</td>
                        <td>佛教与道教的斗争</td>
                        <td><a href="#">修改</a>|<a href="#">删除</a></td>
                    </tr> 
                    -->
                    
                </tbody>
    		</table>
    	</div>
    </body>
    
    //先创建index.html再将文件名改为index.art
    
    new:mybook\views\addBook.art
    <body>
        <div>添加图书</div>
        <form action="/addBook" method="post">
            名称:<input type="text" name="name"><br>
            作者:<input type="text" name="author"><br>
            分类:<input type="text" name="category"><br>
            描述:<input type="text" name="description"><br>
            <input type="submit" value="提交">
        </form>
    </body>
    
    new:mybook\views\editBook.art
    <body>
        <div>修改图书</div>
        <form action="/editBook" method="post">
            <input type="hidden" name="id" value="{{id}}">
            名称:<input type="text" name="name" value="{{name}}"><br>
            作者:<input type="text" name="author" value="{{author}}"><br>
            分类:<input type="text" name="category" value="{{category}}"><br>
            描述:<input type="text" name="description" value="{{description}}"><br>
            <input type="submit" value="提交">
        </form>
    </body>
    
    cmd:node .

    文件夹:mybook\public

    new:mybook\public\style.css
    .title {
            text-align: center;
            background-color: lightgreen;
            height: 50px;
            line-height: 50px;
            font-size: 24px;
        }
        .content {
            background-color: lightblue;
        }
        .content table {
            width: 100%;
            text-align: center;
            border-right: 1px solid orange;
            border-bottom: 1px solid orange;
        }
        .content td,th {
            border-left: 1px solid orange;
            border-top: 1px solid orange;
            height: 40px;
            line-height: 40px;
        }
    
    cmd:node .

    启动 更新

    new:mybook\public\login.html
    <from action='http://localhost:3000/check' method='post'>
    	用户名:<input type='text' name='username'><br>
    	密码:<input type='password' name='password'><br>
    	<input type='submit' value='登录'>
    </form>
    

    路由和业务模块

    new:mybook\router.js

    //路由模块
    const express = require('express');
    const router = express.Router();
    const service = require('./service.js');
    
    // 路由处理
    
    // 渲染主页
    router.get('/',service.showIndex);
    // 添加图书(跳转到添加图书的页面)
    router.get('/toAddBook',service.toAddBook);
    // 添加图书(提交表单)
    router.post('/addBook',service.addBook);
    
    // 跳转到编辑图书信息页面
    router.get('/toEditBook',service.toEditBook);
    // 编辑图书提交表单
    router.post('/editBook',service.editBook);
    
    // 删除图书信息
    router.get('/deleteBook',service.deleteBook);
    
    module.exports = router;
    

    new:mybook\service.js

    //业务模块
    const data = require('./data.json');
    const path = require('path');
    const fs = require('fs');
    
    const db = require('./db.js');
    
    // 自动生成图书编号(自增)
    let maxBookCode = ()=>{
        let arr = [];
        data.forEach((item)=>{
            arr.push(item.id);
        });
        return Math.max.apply(null,arr);
    }
    // 把内存数据写入文件
    //null,4 格式化json 自动加4个空格
    let writeDataToFile = (res) => {
        fs.writeFile(path.join(__dirname,'data.json'),JSON.stringify(data,null,4),(err)=>{
            if(err){
                res.send('server error');
            }
            // 文件写入成功之后重新跳转到主页面
            res.redirect('/');
        });
    }
    
    // 渲染主页面
    exports.showIndex = (req,res) => {
    //数据库操作
        let sql = 'select * from book';
        db.base(sql,null,(result)=>{
            res.render('index',{list : result});
        });
    }
    
    // 跳转到添加图书的页面
    exports.toAddBook = (req,res) => {
        res.render('addBook',{});
    }
    // 添加图书保存数据
    exports.addBook = (req,res) => {
        // 获取表单数据
        let info = req.body;
        
        let book = {};
        //遍历
        for(let key in info){
            book[key] = info[key];
        }
        
        //数据库操作
        let sql = 'insert into book set ?';
        db.base(sql,book,(result)=>{
            if(result.affectedRows == 1){
                res.redirect('/');
            }
        });
    }
    
    // 跳转编辑图书页面
    exports.toEditBook = (req,res) => {
    	//获取id
        let id = req.query.id;
        
        //数据库操作
        let sql = 'select * from book where id=?';
        let data = [id];
        db.base(sql,data,(result)=>{
            res.render('editBook',result[0]);
        });
    }
    // 编辑图书更新数据
    exports.editBook = (req,res) => {
        let info = req.body;
        
        //数据库操作
        let sql = 'update book set name=?,author=?,category=?,description=? where id=?';
        let data = [info.name,info.author,info.category,info.description,info.id];
        db.base(sql,data,(result)=>{
            if(result.affectedRows == 1){
                res.redirect('/');
            }
        });
    }
    
    // 删除图书信息
    exports.deleteBook = (req,res) => {
        let id = req.query.id;
        
        //数据库操作
        let sql = 'delete from book where id=?';
        let data = [id];
        db.base(sql,data,(result)=>{
            if(result.affectedRows == 1){
                res.redirect('/');
            }
        });
    }
    
    新建数据库mybook

    新建表格book

    新建查询(SQL编辑器)

    测试一下并运行

    insert into book(name,author,category,description) value('a','b','c','d');
    

    cmd:mybook>npm install mysqljs/mysql --save

    cmd:mybook>node .

    浏览器:localhost:5500

    新建文件夹test

    new:mybook\test\initsql.js
    /*
        把data.json文件中的数据拼接成insert语句
    */
    const path = require('path');
    const fs = require('fs');
    
    fs.readFile(path.join(__dirname,'../','data.json'),'utf8',(err,content)=>{
        if(err) return;
        let list = JSON.parse(content);
        let arr = [];
        list.forEach((item)=>{
            let sql = `insert into book (name,author,category,description) values ('${item.name}','${item.author}','${item.category}','${item.desc}');`;
            arr.push(sql);
        });
        fs.writeFile(path.join(__dirname,'data.sql'),arr.join(''),'utf8',(err)=>{
            console.log('init data finished!');
        });
    });
    
    cmd:E:…\test> node initsql.js

    复制并粘贴到SQL编辑器里 (每条语句换行)

    最后浏览器里输入localhost:5500
    效果图

    展开全文
  • 图书管理系统:调查学校图书馆,设计一个图书管理系统图书管理系统具有管理员登陆,图书维护,图书管理和系统维护四个功能模块组成。
  • ecplise+MySQL实现的图书管理系统,SSM框架,代码齐全。要了解详情的可以查看链接: https://pan.baidu.com/s/1-sr4n0fXzXkRyKZ-ePl9UA 提取码: mkh6 复制这段内容后打开百度网盘手机App,操作更方便哦
  • 宅了两天多的时间,一个人从零开始学Qt和c++,强行做出了一个图书管理系统 以下是效果图: 【没有审美QAQ】 具体的代码要等到这学期结束之后再上传了。。。 以下的内容主要总结一下自己踩到的坑和一点点...

    完整代码:https://github.com/KenGeng/BookManageSystemForDatabaseProject




    宅了两天多的时间,一个人从零开始学Qt和c++,强行做出了一个图书管理系统

    以下是效果图:




    【没有审美QAQ


    具体的代码要等到这学期结束之后再上传了。。。

    以下的内容主要总结一下自己踩到的坑和一点点经验,比较杂乱:

    tip1: 初学者如果要赶due的话,一定要用Qt designer来画UI 一定要用Qt designer来画UI 一定要用Qt designer来画UI!我刚开始参考了网上另一份详细的用QtMySQL做图书管理系统的学长(姐)的代码,想直接用代码布局,但尝试了一下午之后,还是选择了用Qt designer,用代码布局虽然很爽,很直观,并且很锻炼能力,但第一是看效果不容易,第二是Qt的类实在太多了,即使主要的基类不算多,可要一个一个试的话,实在太费时间。Qt designer相对就高效了不少,直接拖控件,Qt后台自动生成代码,即使我这种脑子不太灵光的人,一个下午也能画出差不多能用的UI。不过也要承认,真的手写500+行代码来布局的话,对Qt的套路肯定会熟悉很多。

    tip2:显示日期与时间:

    具体可以参考这个:http://blog.csdn.net/zzk197/article/details/7498593

    先在构造函数里定义:

    timer = new QTimer();(timer是个指针)

    connect(timer, SIGNAL(timeout()), this, SLOT(updateTime()));

    timer->start(1000);



    void Widget::updateTime(){

        QDateTime current_date_time = QDateTime::currentDateTime();

        QString current_date = current_date_time.toString("yyyy-MM-dd \nhh:mm:ss\n ddd");

        QString text;

        text = current_date+" ";

        ui->dataText->setText(text);

    }


    tip3:Qtint转换成QString

    这是个巨坑。。。刚开始对Qt里的query不太熟悉,忽略了类型的转换,结果查询语句一直失败,真的怀疑人生。。。一个一个试了之后,发现是在这出了问题。在Qt里调用select语句时,都是用的QString,粘合查询语句的时候,会把int转型,结果自然就有问题。

    结局方法:

    1.使用

    QString QString::number ( long n, int base = 10 )  [static]

    :

    long a = 63;  QString s = QString::number(a, 10);     // s == "63"  

    QString t = QString::number(a, 16).toUpper();         // t == "3F"

    2.使用

    long a = 63;  QString s = QString("%1").arg(a);

    推荐第1种用法

    转自:http://blog.163.com/humo_chen/blog/static/12733839520123171851711/


    tip4QString的比较

    操作符重载后,直接用“==”就可以;或者调用compare函数:

    1. QString::compare("a","b");  //值为0  
    2. QString::compare(“a”,“f");  //值为<0;  
    3. QString::compare("df","ab");         //值为>0;


    tip5:Qt: QString::isEmpty()与QString::isNull()区别

    搬运文档:

    bool QString::isEmpty () const


    Returns true if the string has no characters; otherwise returns false.


    Example:


         QString().isEmpty();            // returns true

         QString("").isEmpty();          // returns true

         QString("x").isEmpty();         // returns false

         QString("abc").isEmpty();       // returns false

    See also size().


    bool QString::isNull () const


    Returns true if this string is null; otherwise returns false.


    Example:


         QString().isNull();             // returns true

         QString("").isNull();           // returns false

         QString("abc").isNull();        // returns false

    Qt makes a distinction between null strings and empty strings for historical reasons. For most applications, what matters is whether or not a string contains any data, and this can be determined using the isEmpty() function.


    tip6 vector的遍历

    我是用最蠢的for循环。。。看了这个http://blog.csdn.net/u011543018/article/details/50724883之后才知道还有这样的操作oop学得太菜了


    tip7 vector中添加元素的方法

    .push_back(xxx);是最稳的


    tip8. mysql修改列名:

    alter table test change  column address address1 varchar(30)--修改表列名


    tip9 标准对话框QMessageBox 

    详细的可以参考这位前辈的:http://devbean.blog.51cto.com/448512/217694

    我是用最直接的:

    QMessageBox::about(0,QObject::tr("error"),"information isn't complete!");


    tip10 登陆界面

    刚开始做登录框,我是画了两个UI想实现一个界面的切换,但之间的交互我没做好,和数据库的连接总是有问题,我就简化了一下问题,直接把登陆的账号密码的输入和主程序放在一起了 

    感觉这种需要切换界面的还是用代码布局比较单纯一些。


    tip11  Qt QTableWidget的使用方式

    dalao的博客http://blog.csdn.net/comwise/article/details/51544939



    tip12 Qt中文字码的问题

    另一个大坑。。。一输入中文,显示的就是乱码

    关于详细的原理可以参考这个:http://blog.csdn.net/tju355/article/details/7253133

    我最后是这样做的:

    找到主函数,加上中间那行加粗的一行代码,亲测可行

    int main(int argc, char *argv[])

    {

        QApplication a(argc, argv);

        QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf8"));//solve the encoding problem    Widget w;


        w.show();


        return a.exec();

    }


    tip13.Qt调试,输出信息:

    #include <QDebug>

    qDebug()<<某一个变量;

    这个在QT中比printfcout都来得方便

     

    tip14.Qt 写槽函数

    我是用的desiger,直接右键控件,转到槽函数,选择相应的激活操作,然后去写槽函数就行

    手写大概是这种格式:connect(timer, SIGNAL(timeout()), this, SLOT(updateTime()));

    一篇可以参考的博客http://blog.csdn.net/u013378306/article/details/52431826


    tip15widgetMainWindowDialog的选择使用

    http://blog.csdn.net/yang_lang/article/details/6688623    这篇博客很棒

    我个人是比较习惯用widget


    tip16 给各控件加背景图

    代码可以餐卡这个:http://blog.csdn.net/liukang325/article/details/44832397   

    一个例子:

    void Widget::setTitle(){

      another way to set the title image

        QPalette palette;

        ui->Title->setAutoFillBackground(true);

        //titleImage->setStyleSheet("border-image: url(C:\\Users\\Documents\\title.jpg)");

        QPixmap pixmap("C:\\Users\Documents\\TEST_2017\\6.png");

        QPixmap fitpixmap=pixmap.scaled(1024,100, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);

        //problem: not know how to get the height of the background

        palette.setBrush(QPalette::Background,QBrush(fitpixmap));


       // palette.setBrush(QPalette::Background,QBrush(QPixmap("C:\\Users\\Ken\\Documents\\TEST_2017\\6.png")));

        ui->Title->setPalette(palette);

    }

    designer的话,新建一个qt source设置好前缀之后,加入图片资源,之后在ui设计界面里 对应添加即可



    tip17 Qt常用布局搭建

    可以参考这个:http://blog.csdn.net/fanyun_01/article/details/52172308

    我觉得verticallayout用着还蛮顺手,其他的都好难调啊


    tip18 关于qt parent参数

     http://devbean.blog.51cto.com/448512/214166/


    tip19 QTreeWidget的使用方法

    https://jingyan.baidu.com/article/22fe7ced24e7033002617fbe.html

    tip20 参考网站

    这大概是最有用的经验了:

    http://doc.qt.io/qt-5/classes.html这个是qt官方文档真的良心!!感觉没啥找不到的

    http://www.kuqin.com/qtdocument/qtimer.html#details这个似乎是上面那个的中文翻译版 英文不太习惯的可以看看


    完整代码见文章开头





    展开全文
  • 基于Javaweb jsp servlet mysql bootstrap layui jQuery的图书管理系统
  • 基于eclipse+MySQL图书管理系统,可以实现读者的注册、借书和还书,管理员的管理等等操作,是一个功能全面的图书管理系统
  • Qt+Mysql 图书管理系统设计

    千次阅读 多人点赞 2017-05-25 18:40:04
    图书管理系统设计报告一、 系统整体架构实验要求设计一个图书管理系统,主要具备以下几个功能: 用户和管理员的登录:输入ID和密码(其中密码会变成小圆点隐藏),若ID和密码正确则登录成功,进入到主页面,否则...

    图书管理系统设计报告

    一、 系统整体架构

    实验要求设计一个图书管理系统,主要具备以下几个功能:

     用户和管理员的登录:

    输入ID和密码(其中密码会变成小圆点隐藏),若ID和密码正确则登录成功,进入到主页面,否则输出错误提示,并清空文本框以方便用户再次输入。普通用户和管理员有不同的账户体系,ID密码不共用,且登录后的界面不同;

     图书入库:

    入库方式分为单本入库和批量入库,由管理员操作。单本入库要求管理员输入图书的编号(必需)、书名、出版社、年份、作者、价格、数量等信息,并对后台的数据库中的book表进行更新;批量入库的方式是从指定的txt文本文件中读入书的信息,格式为:book_no_1, Computer Science, Computer Architecture, xxx, 2004, xxx, 90.00, 2 (其中年份、数量是整数类型,价格是两位小数类型,其余为字符串类型),一行为一本书的信息,批量导入到数据库中;

     图书查询:

    普通用户在登录成功后即可进行查询操作,查询时,用户可以输入书号、书名、作者、出版社、类别等信息(至少一个)进行查询,程序会输出满足条件的所有书籍的信息,若用户未输入任何查询信息或没有查到符合要求的结果,程序会输出相应的错误提示,在每次查询完成后,程序会清空所有输入的文本框以方便用户进行下一次的查询;

     借书:

    借书时用户输入自己的借书证号和书号进行借书,借书成功或者失败程序会分别输出相应的提示,若借书成功则在数据库的borrow表中新增相应的借书记录,同时更新book表中相应书籍的库存信息;同时,在借书界面中,输入用户的借书证号,点击查询,程序会输出该借书证目前借阅的所有书的信息;

     还书:

    还书操作与借书在同一个界面完成,相应的,还书用户只需输入自己的借书证号和书号即可还书,程序会输出操作成功或失败的提示,若还书成功,数据库的borrow表和book表将AZSA 会进行相应的更新;

     借书证管理:

    管理员可以在登陆后增加或者删除一个借书证;

    二、 各模块功能描述

    1. 用户登录:
      这里写图片描述

    2. 图书查询
      这里写图片描述

    3. 图书证管理
      这里写图片描述

    4. 图书入库

    这里写图片描述
    .
    5. 借书/还书

    这里写图片描述

    三、 数据库表结构
    管理员admin

    id  char(8) *primary key
    password    varchar(20) 
    name    varchar(10) 
    tel varchar(11)

    书book

    Bno Char(8) *primary key
    Category    Char(10)    
    Title   Varchar(40) 
    Press   Varchar(30) 
    Year    Int 
    Author  Varchar(20) 
    Price   Decimal(7,2)    
    Total   Int 
    Stock   int 

    借书记录borrow

    cno Char(7) //外键,级联更新删除
    Bno Char(8) //外键,级联删除
    Borrow_date Date    
    Return_date Date    
    Handler_id  Char(8) 

    借书证card

    Cno Char(7) *primary key
    Name    Varchar(10) 
    Department  Varchar(40) 
    Type    Char(1) 

    四、MySQL数据库准备

    在整个工程开始之前,我们先确定了统一的数据库名称和建表的格式,以方便我们之间协调合作。建表的过程同实验二,在此不作赘述。为了方便测试,我们使用了MySQL里的批量入库语句来导入初始数据:
    use managelibrary;
    load data local infile “D:/book3.txt”
    Into table book(bno,category,title,press,year,author,price,total,stock);
    之后,我们对数据库managelibrary的操作将完全基于QT,下面将详细介绍我们如何在QT进行SQL语句的执行和图形界面的开发。

    五、QT编程技术介绍

    本小组采用Qt制作图书管理系统的图形界面。Qt是一个跨平台C++图形用户界面的应用程序开发框架,它既可以开发GUI程序,也可用于开发非GUI程序。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,易于扩展,允许组件编程。
    Qt creator是一个用于Qt开发的轻量级跨平台集成开发环境。Qt Creator可带来两大关键益处:提供首个专为支持跨平台开发而设计的集成开发环境 (IDE),并确保首次接触Qt框架的开发人员能迅速上手和操作。即使不开发Qt应用程序,Qt Creator也是一个简单易用且功能强大的IDE。
    Qt提供了大量的库函数用于制作图形界面,程序员需要做的事主要就是,首先使用软件提供的组件编程,然后完成相应信号的槽函数即可,在槽函数中有大量的用于图形界面制作的库函数、类可供使用;
    下面介绍本小组在此次图书管理系统中所用到的qt技术:

    1. qt creator连接到数据库
    static bool createConnection(){
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    //设置主机名
    db.setHostName("localhost");
    //设置数据库名
    db.setDatabaseName("managelibrary");
    //设置账号名
    db.setUserName("root");
    //设置密码名
    db.setPassword("123456");
    //设置端口
    db.setPort(3306);
    if(!db.open()){
        qDebug()<<endl<<"fail!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<<endl;
        return false;
    }
    qDebug()<<endl<<"success!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<<endl;
    return true;
    }


    2. 用户登录界面

    Dialog::Dialog(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::Dialog)
    {
        ui->setupUi(this);
            ui->lineEdit_2->setEchoMode(QLineEdit::Password);//密码
    }
    
    Dialog::~Dialog() //析构函数
    {
        delete ui;
    }
    
    void Dialog::on_pushButton_clicked()
    {
        int valid=0;
       QSqlQuery query;
       QString name0;
       QString id0;
       QString id =ui->lineEdit->text(); //从界面获取id的值
       QString name=ui->lineEdit_2->text();
    
    
    if(id.isEmpty()||name.isEmpty())
    {
       QMessageBox::warning(this,tr("Warning"),tr("Input your ID and name!"),QMessageBox::Yes);
        return;
    }
    
    
       query.exec("select * from card");
        while( query.next()){//指向第一条记录
       id0=query.value(0).toString();
       name0=query.value(1).toString();
       if(!QString::compare(name,name0)&&!QString::compare(id,id0)) //查到该用户
       {
       valid=1;
       break;
       }
    }
    
       if(valid) //如果合法
       {
           accept();
       }
        else{
           ui->lineEdit->clear();
           ui->lineEdit_2->clear();
        QMessageBox::warning(this,tr("Warning"),tr("user name or user ID error!"),QMessageBox::Yes);
        //如果不正确,弹出警告对话框
    
        }
    
    }
    
    void Dialog::on_pushButton_2_clicked()
    {
        int valid=0;
    
       QSqlQuery query;
       QString pass0;
       QString id0;
       QString id =ui->lineEdit->text(); //从界面获取id的值
       QString pass=ui->lineEdit_2->text();
    
       query.exec("select * from admin");
        while( query.next()){//指向第一条记录
       id0=query.value(0).toString();
       pass0=query.value(1).toString();
       if(!QString::compare(pass,pass0)&&!QString::compare(id,id0)) //查到该用户
       {
       valid=1;
       break;
       }
    }
    
       if(valid) //如果合法
       {
    
           done(-1);
    
       }
        else{
           ui->lineEdit->clear();
           ui->lineEdit_2->clear();
        QMessageBox::warning(this,tr("Warning"),tr("admin ID or password error!"),QMessageBox::Yes);
        //如果不正确,弹出警告对话框
    
        }
    
    }


    3. 图书入库与图书证管理界面

    
    
    add_user::add_user(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::add_user)
    {
        ui->setupUi(this);
    }
    
    add_user::~add_user()
    {
        delete ui;
    }
    
    //增加借书证
    void add_user::on_pushButton_clicked()
    {
         QSqlQuery query;
         int exist=0;
         QString cno=ui->lineEdit->text(); //读取文本框内容
         QString name=ui->lineEdit_6->text();
         QString dept=ui->lineEdit_5->text();
         QString type=ui->lineEdit_8->text();
         QString name0,cno0;
    
         if(cno.isEmpty())
         {
             QMessageBox::warning(this,tr("Warning"),tr("Input cno!"),QMessageBox::Yes); //弹出警告提示框
             return; 
         }
         query.exec("select * from card");
    
       while( query.next())
          {//指向第一条记录
         cno0=query.value(0).toString();
         if(!QString::compare(cno,cno0)) //用户已存在
         {
             exist=1;
         break;
         }
    
      }
       if(exist)
       {
                  QMessageBox::warning(this,tr("Warning"),tr("ID exists"),QMessageBox::Yes);
       }
          else
          {
              query.prepare("INSERT INTO card (cno,name,department,type) values(:cno,:name,:department,:type)"); //准备执行SQL查询
              query.bindValue(":cno", cno);   //在这定占位符上确定绑定的值
              query.bindValue(":name", name);
              query.bindValue(":department",dept);
              query.bindValue(":type",type);
              query.exec();
              QMessageBox::warning(this,tr("提示"),tr("Insert success"),QMessageBox::Yes);
    
          }
       ui->lineEdit->clear(); //清空文本框
       ui->lineEdit_5->clear();
       ui->lineEdit_6->clear();
       ui->lineEdit_8->clear();
    }
    
    //删除借书证
    void add_user::on_pushButton_2_clicked()
    {
        QSqlQuery query;
        int exist=0;
        QString cno=ui->lineEdit_2->text();
        QString cno0;
    
    
        query.exec("select * from card");
    
      while( query.next())
         {//指向第一条记录
        cno0=query.value(0).toString();
        if(!QString::compare(cno,cno0)) //用户存在
        {
        exist=1;
        break;
        }
    
     }
      if(!exist)
      {
           QMessageBox::warning(this,tr("warning"),tr("ID doesn't exist!"),QMessageBox::Yes);
      }
      else
      {
          query.prepare("delete from card where cno=:cno"); //准备执行SQL查询
          query.bindValue(":cno", cno);   //在这定占位符上确定绑定的值
          query.exec();
           QMessageBox::warning(this,tr("提示"),tr("Delete success"),QMessageBox::Yes);
      }
         ui->lineEdit_2->clear();
    }
    
    //图书入库
    void add_user::on_pushButton_3_clicked()
    {
        QSqlQuery query;
        QString bno=ui->lineEdit_3->text(); //读取文本内容
        QString category=ui->lineEdit_4->text();
        QString title=ui->lineEdit_7->text();
        QString press=ui->lineEdit_9->text();
        QString year=ui->lineEdit_10->text();
        QString author=ui->lineEdit_11->text();
        QString price=ui->lineEdit_12->text();
        QString total=ui->lineEdit_13->text();
        QString bno0;
        QString c0;
        QString t0;
        QString press0,y0,a0,price0;
        QString total0,stock0;
        int exist=0;
        int stock=0;
        int t=0;
        bool ok;
    
        if(bno.isEmpty())
        {
            QMessageBox::warning(this,tr("Warning"),tr("Input bno!"),QMessageBox::Yes);
            return;
        }
    
        query.exec("select * from book");
    
      while( query.next())
         {//指向第一条记录
        bno0=query.value(0).toString(); //从数据库读取内容
        c0 = query.value(1).toString();
        t0 = query.value(2).toString();
        press0 = query.value(3).toString();
        y0 = query.value(4).toString();
        a0 = query.value(5).toString();
        price0 = query.value(6).toString();
        total0 = query.value(7).toString();
        stock0 = query.value(8).toString();
        if(!QString::compare(bno,bno0)) //已存在
        {
            exist=1;
        break;
        }
      }
        if(exist)
        {
            query.prepare("select * from book where bno = :bno0");
            query.bindValue(":bno0",bno0);
            query.exec();
            t = total0.toInt(&ok,10) + total.toInt(&ok,10);
            stock = stock0.toInt(&ok,10) + total.toInt(&ok,10);
            total0 = QString::number(t);
            stock0 = QString::number(stock);
            query.prepare("update book set stock = :stock where bno = :bno0");
            query.bindValue(":bno0",bno0);
            query.bindValue(":stock",stock0);
            query.exec();
            query.prepare("update book set total = :total where bno = :bno0");
            query.bindValue(":bno0",bno0);
            query.bindValue(":total",total0);
            query.exec();
                   QMessageBox::warning(this,tr("success"),tr("book exists and update"),QMessageBox::Yes);
        }
           else
           {
               query.prepare("INSERT INTO book values(:bno,:category,:title,:press,:year,:author,:price,:total,:stock)"); //准备执行SQL查询
               query.bindValue(":bno", bno);   //在这定占位符上确定绑定的值
               query.bindValue(":category", category);
               query.bindValue(":title",title);
               query.bindValue(":press",press);
               query.bindValue(":year",year);
               query.bindValue(":author",author);
               query.bindValue(":price",price);
               query.bindValue(":total",total);
               query.bindValue(":stock",total);
               query.exec();
               QMessageBox::warning(this,tr("提示"),tr("Insert success"),QMessageBox::Yes);
    
           }
        ui->lineEdit_3->clear();
        ui->lineEdit_4->clear();
        ui->lineEdit_7->clear();
        ui->lineEdit_9->clear();
        ui->lineEdit_10->clear();
        ui->lineEdit_11->clear();
        ui->lineEdit_12->clear();
        ui->lineEdit_13->clear();
    
    }


    4. 图书查询界面

    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    //输入信息查询图书
    void MainWindow::on_pushButton_clicked()
    {
    
        createConnection();
        int valid=0;
        int flag=0;
       QSqlQuery query;
       QTableView *view = new QTableView;
       QString cno0,category0,author0,press0,title0;
       QString cno =ui->lineEdit->text(); //从界面获取id的值
       QString category=ui->lineEdit_2->text();
       QString title=ui->lineEdit_3->text();
       QString author=ui->lineEdit_4->text();
       QString press=ui->lineEdit_5->text();
       QString result;
       ui->textBrowser->setPlainText("");//清空结果栏
       ui->lineEdit->clear();
       ui->lineEdit_2->clear();
       ui->lineEdit_3->clear();
       ui->lineEdit_4->clear();
       ui->lineEdit_5->clear();
       query.exec("select * from book");
      while( query.next())
      {//指向第一条记录
       cno0=query.value(0).toString();
       category0=query.value(1).toString();
       title0=query.value(2).toString();
       press0=query.value(3).toString();
       author0=query.value(5).toString();
    
       if(cno.isEmpty()&&category.isEmpty()
               &&title.isEmpty()&&author.isEmpty()
               &&press.isEmpty()) //查到书
         {
           flag=1;
            QMessageBox::warning(this,tr("Warning"),tr("Please Input More Informations"),QMessageBox::Yes);
            break;
       }
    
        else if((!QString::compare(cno,cno0)||cno.isEmpty())&&(!QString::compare(category,category0)||category.isEmpty())
               &&(!QString::compare(title,title0)||title.isEmpty())&&(!QString::compare(author,author0)||author.isEmpty())
               &&(!QString::compare(press,press0)||press.isEmpty())) //查到书
       {
              valid=1;
              result=query.value(0).toString()+"   "+query.value(1).toString()+"   "+query.value(2).toString()+"   "+query.value(3).toString()+"   "
               +query.value(4).toString()+"   "+query.value(5).toString()+"   "+query.value(6).toString()+"   "+query.value(7).toString()+"   "
               +query.value(8).toString()+"\n";
              ui->textBrowser->insertPlainText(result);
       }
    }
    
        if(!valid&&!flag){
        QMessageBox::warning(this,tr("Warning"),tr("No Result"),QMessageBox::Yes);
        //如果不正确,弹出警告对话框
        }
    
    
    
    }
    
    //跳转到借还书界面
    void MainWindow::on_pushButton_3_clicked()
    {
        this->close();
        brrtw.show();
        brrtw.exec();
        this->show();
    }


    5. 借书还书界面

    brrt::brrt(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::brrt)
    {
        ui->setupUi(this);
    }
    
    brrt::~brrt()
    {
        delete ui;
    }
    
    void brrt::on_pushButton_4_clicked()
    {
        QSqlQuery query;
        QString cnoin =ui->lineEdit->text();  //读取图书证号
        QString result;
        ui->textBrowser->clear();  //清空输出部分
        query.prepare("select * from book natural join borrow where cno = :cno");
        query.bindValue(":cno",cnoin);;
        query.exec();  //选择该借书证已借书籍
        while (query.next())  //每行按格式输出
        {
            result=query.value(0).toString()+"   "+query.value(1).toString()+"   "+query.value(2).toString()+"   "+query.value(3).toString()+"   "
             +query.value(4).toString()+"   "+query.value(5).toString()+"   "+query.value(6).toString()+"   "+query.value(7).toString()+"   "
             +query.value(8).toString()+"\n";
            ui->textBrowser->insertPlainText(result);
        }
    }
    
    void brrt::borrowbk () {  //借书函数
        QSqlQuery query;
        QString cnoin =ui->lineEdit->text();  //读取图书证号
        QString bnoin =ui->lineEdit_2->text();  //读取要借的书号
        QString result;
        QString date1,date2,han;
        ui->textBrowser->clear();
        query.exec("select * from book");  //选择book表
        QString bno0;
        int exists = 0;
        while (query.next()) {  //查看是否存在该书
            bno0 = query.value(0).toString();
            if(!QString::compare(bnoin,bno0)) {
                exists=1;  //若存在该书则exists = 1
                break;
            }
        }
        if (exists == 0) {
            QMessageBox::warning(this,tr("Warning"),tr("book not found!"),QMessageBox::Yes);
    }
    //若该书不存在,输出错误信息
        else {  //若该书存在
    
            query.prepare("select stock from book where bno = :bno");
              //选择该书的库存
            query.bindValue(":bno", bnoin);
            query.exec();
            if (query.next() && query.value(0) > 0) {  //若有库存
                query.prepare("update book set stock = stock - 1 where bno = :bno");  //更新库存
                query.bindValue(":bno", bnoin);
                query.exec();
    
                query.prepare("insert into borrow values (:cno, :bno, :date1, :date2,:han)");  //更新borrow表
                query.bindValue(":cno", cnoin);
                query.bindValue(":bno", bnoin);
                query.bindValue(":date1", "2017-04-23");
                query.bindValue(":date2", "0000-00-00");
                query.bindValue(":han", "01");
                query.exec();
                QMessageBox::warning(this,tr("Warning"),tr("borrow success"),QMessageBox::Yes);  //输出成功信息
    
            }
            else {  //若无库存
                QMessageBox::warning(this,tr("Warning"),tr("No stock!"),QMessageBox::Yes);  //输出无库存信息
                query.prepare("select * from borrow where bno = :bno");
                query.bindValue(":bno", bnoin);
                query.exec();
                query.next();
                result = query.value(0).toString()+"   "+query.value(1).toString()+"   "+query.value(2).toString()+"   "+query.value(3).toString() +"\n";
                ui->textBrowser->insertPlainText(result);
    //输出还书时间等信息
            }
        }
    
    }
    
    void brrt::returnbk () {  //还书函数
        QSqlQuery query;
        QString cnoin =ui->lineEdit->text();  //读取图书证号
        QString bnoin =ui->lineEdit_2->text();  //读取还书书号
        QString result;
        ui->textBrowser->clear();
        int existc = 0, existb = 0;
        QString bno0;
        QString cno0;
        query.exec("select * from book");  //选择book表
        while (query.next()) {  //查找该书
            bno0 = query.value(0).toString();
            if(!QString::compare(bnoin,bno0)) {
                existb=1;  //书存在
                break;
            }
        }
        query.exec("select * from card");  //选择card表
        while (query.next()) {  //查找图书证
            cno0 = query.value(0).toString();
            if(!QString::compare(cnoin,cno0)) {
                existc=1;  //图书证存在
                break;
            }
        }
        if (existb&&existc) {  //若有借书记录
            query.prepare("update book set stock = stock + 1 where bno = :bno");  //更新库存
            query.bindValue(":bno", bnoin);
            query.exec();
            query.prepare("delete from borrow where bno = :bno and cno = :cno");  //更新借书表
            query.bindValue(":bno", bnoin);
            query.bindValue(":cno", cnoin);
            query.exec();
    
    QMessageBox::warning(this,tr("Warning"),tr("success"),QMessageBox::Yes);  //输出成功信息
        }
        else {
            QMessageBox::warning(this,tr("Warning"),tr("No borrow record!"),QMessageBox::Yes);  //否则输出错误信息
        }
    
    }
    
    void brrt::on_pushButton_clicked()  //借书按键接口
    {
        brrt::borrowbk ();
    }
    
    void brrt::on_pushButton_2_clicked()  //还书按键接口
    {
        brrt::returnbk ();
    }
    
    void brrt::on_pushButton_3_clicked()  //返回查询界面按键接口
    {
        this->close();
    }
    展开全文
  • 这个图书管理系统是我大三时候的课设,代码本身肯定还有很多可以改进的地方,但是基本思路还是比较清晰的,这里分享给大家,帮助大家学习~ 使用工具 QT5.8 MySQL5.7 Navicat Premium 12 这里我默认你已经准备好了...

    图书管理系统(一)数据库设计、连接/实现登录注册功能

    本项目以及配套数据库已经上传到CSDN,大家可根据需要下载:

    1. 项目
      https://download.csdn.net/download/qq_41544842/14934412
    2. 数据库
      https://download.csdn.net/download/qq_41544842/14934435

    这个图书管理系统是我大三时候的课设,代码本身肯定还有很多可以改进的地方,但是基本思路还是比较清晰的,这里分享给大家,帮助大家学习~

    使用工具

    1. QT5.8
    2. MySQL5.7
    3. Navicat Premium 12
      这里我默认你已经准备好了开发工具,我们直接开始!

    开发需求

    图书管理系统,简单来说有以下几个需求,具体的细节需求这里不赘述,在后面的章节中会介绍到。

    1. 图书的增删改查
    2. 用户的增删改查,登录,注册,修改密码
    3. 用户查看书籍信息,借书,还书

    数据库设计

    一共有三个表,users,books,userbooks

    userbooks记录着用户的借还记录,含有两个外键。

    数据库连接

    1. 在QT的.pro文件中加上一句:
    QT       += core gui
    QT +=sql//加上这一句
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    1. 在main函数中:
    int main(int argc, char *argv[])
    {
        QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
        db.setHostName("localhost");//连接本机数据库,也可以填上某个IP去连接另一台设备的数据库
        db.setPort(3306);
        db.setDatabaseName("xxx");//数据库名称
        db.setUserName("xxx");//用户名
        db.setPassword("xxx");//用户密码
        db.open();//连接数据库
        db.exec("SET NAMES 'GBK'");//这里主要和中文乱码有关,如果运行出来不存在乱码,这句话也可以不加,灵活调整
        checkwarning1();//在程序启动时进行用户超期检查,在后面的章节中会提到
        QApplication a(argc, argv);
        login w;//这里是运行我们的登录主窗口,稍后介绍
        w.show();
        return a.exec();
    }
    
    1. 要把C:\Program Files\MySQL\MySQL Server 5.7\lib中的libmysql.dll和libmysql.lib和libmysqld.dll和libmysqld.lib复制到D:\Software\QT\5.8\mingw53_32\bin中去,重启QT。同时,把libmysql.dll复制到C:\Windows。我这里给出的是我的路径,你要改成你自己的对应路径。如果有文件缺失的可以去网上搜,有很多。

    完成这三步基本就可以连接上数据库了。

    登录注册

    登录

    1. 首先新建一个ui,右击界面文件,添加新文件:

    文件就新建好了:

    1. 登录的本质就是将用户的数据与数据库中的数据进行匹配,对应“查”的功能。
      参考界面:

    在设计界面中右击按钮,点击“转到槽函数”,选择clicked(),即可生成按钮对应的槽函数。

    /*login.cpp的头文件*/
    #include "login.h"
    #include "ui_login.h"
    #include <QMEssageBox>
    #include <qDebug>
    #include <QSqlQuery>
    #include <mainwindow.h>
    #include "userinterface.h"
    #include "edit.h"
    #include <QLineEdit>
    /*login.cpp的头文件*/
    void login::on_loginButton_clicked()//按下登录按钮后的动作
    {
        ui->lineEdit_2->setEchoMode(QLineEdit::Password);
        login::number=ui->lineEdit->text();
        QString password=ui->lineEdit_2->text();
        QSqlQuery query;//很关键,这可以看作是一个操作数据库的工具
        if(login::number.length()!=0&&password.length()!=0){
            //写下将要执行的SQL语句
            QString instruction=QString("select password from users where number='%1'").arg(login::number);
            /*%1,百分号后面数字并没有什么特别含义,但是需要按照从小到大的顺序写,从前到后依次与后面.arg(对应)
            根据sql语句的格式可得,如果字段为字符串则需要加单引号,如果是数,则不需要加单引号*/
            query.exec(instruction);//用工具执行这个语句
            while(query.next())//循环执行结果的集合
            {//开始判定
                if(login::number=="0000"&&password=="123456"){//此处是我设定的管理员账号,如果是管理员,会跳转到MainWindow
                    this->close();
                    MainWindow* w=new MainWindow();
                    w->show();
                    break;
                }
                else//如果不是管理员,则跳转到userinterface
                 if(login::number!="0000"&&query.value(0).toString()==password){
                    this->close();
                    userinterface* w2=new userinterface();
                    w2->show();
                    break;
                }
                else{
                    QMessageBox::information(this, "登录失败", "用户名或者密码错误");
                    break;
                }
            }
        }
        else{
            QMessageBox::warning(this,"登录失败","不能为空!");
        }
        //在登录时获得登录用户的id,后面要用
        QString getId=QString("select id from users where number='%1'").arg(login::number);
        query.exec(getId);
        while(query.next()){
            login::id=query.value(0).toInt();
        }
       
    
    }
    

    这样,就基本实现了用户的登录功能,权限分为管理员和普通用户。

    注册

    1. 第一步仍然是新建一个界面文件(edit.ui),同上。
    2. 参考界面(一开始做可以不用考虑那么多限制条件,能成功注册就可以了):
    1. 注册的本质是插入一条数据,对应“增”的功能。
    /*edit.cpp的头文件*/
    #include "edit.h"
    #include "ui_edit.h"
    #include <QDebug>
    #include <QMessageBox>
    #include <QByteArray>
    #include <QtCore/QChar>
    #include <QComboBox>
    /*edit.cpp的头文件*/
    void edit::on_EditResultButton_clicked()
    {
        QString number=ui->lineEdit->text();
        QString password=ui->lineEdit_2->text();
        QString password2=ui->lineEdit_7->text();
        QString name=ui->lineEdit_3->text();
        QString sex;
        QString department=ui->comboBox->currentText();
        QString grade=ui->lineEdit_6->text();
        QSqlQuery query;
        QString n;
        BG->addButton(ui->radioButton,0);//单选按钮
        BG->addButton(ui->radioButton_2,1);
        switch (BG->checkedId()) {
        case 0:
            sex="女";
            break;
        case 1:
            sex="男";
            break;
        }
    if(!iscard(number))//此处我添加了很多判断函数,刚开始写可以不考虑
    {
            QMessageBox::warning(NULL,"注册失败","您的证号不符合规定,请重新输入!");
        }
        else{
            if(!ispassword(password))
    {
                QMessageBox::warning(NULL,"注册失败","您的密码不符合规定,请重新输入!");
            }
            else{
                if(QString::compare(password,password2)!=0){
                    QMessageBox::warning(NULL,"注册失败","两次密码输入不相同!");
                }
                else{
                    QString InsertStr=QString("insert into users(number,password,name,sex,department,grade,warning)"
                                              "values('%1','%2','%3','%4','%5','%6','no')").arg(number)
                            .arg(password).arg(name).arg(sex).arg(department).arg(grade);//主要是这一句SQL语句
                    
                    if(number!=NULL&&password!=NULL&&name!=NULL&&sex!=NULL&&department!=NULL&&grade!=NULL)
                    {
                        if(isonly(number))
                        {
                            if(query.exec(InsertStr)){//执行这条SQL语句,成功插入数据
                                QMessageBox::information(NULL,"注册成功","注册成功!",QMessageBox::Ok);
                                this->close();
                            }
                            else
                                QMessageBox::warning(NULL,"注册失败","注册失败,请稍后重试!");
                        }
                        else
                        {
                            QMessageBox::warning(NULL,"注册失败","该用户已存在!");
                        }
                    }
                    else
                    {
                        QMessageBox::warning(NULL,"注册失败","信息不能为空!");
                    }
                }
            }
        }
    }
    
    1. 从登录界面点击注册:
    void login::on_EditButton_clicked()
    {
        edit *w =new edit();//新建的注册类
        w->show();
    }
    

    至此,我们便实现了简单的登录注册功能,下一章介绍如何显示图书/用户的数据,并对它们进行增删改查。有什么问题欢迎在评论区讨论呐~~如果觉得这篇文章有帮到你的话,不妨点个赞哦!

    展开全文
  • 推荐使用Mysql Front这个MySQL的前台,支持多句sql语句一起执行,百度第一个链接即可下载。 http://dlsw.baidu.com/sw-search-sp/soft/6c/17997/MySQL-Front_V5.3.4.214_Setup.1435658094.exe Java环境中加入数据库...
  • java图书管理系统struts+jsp+mysql学生借阅归还web项目源码文档,本项目都是亲自运行测过的的,功能正常运行 一、功能介绍: 此项目为struts+javabean+jsp+mysql制作的javaweb图书管理系项目,数据库使用mysql5。 ...
  • 设计图书管理系统,包含学生和图书信息,且图书可以进行分类,学生可以在一个时间范围内借阅 图书,并在这个时间范围内归还图书。 具体内容: (1)查询"计算机"图书分类下的所有图书的借阅信息,包括学生姓名 ...
  • 这次写了一个连接数据库MySQL图书管理系统,功能更全。有登录、注册、忘记密码等功能,登录分为学生登陆和教师登陆。有查询图书,借阅图书、归还图书、图书分类、添加图书、删除图书、预约图书、热书推荐,以及...
  • C/S模式图书管理系统,分层开发,表现出,逻辑层,数据层。对图书信息的管理。
  • IDEA+Java+JSP+Mysql+Tomcat实现Web图书管理系统

    千次阅读 多人点赞 2020-06-01 21:54:18
    实现图书管理系统 Operating System:Windows10 IDEA:2018.2 Java:1.8 Mysql:8.0.13 一、系统介绍 该图书管理系统实现了用户注册与登录功能,实现了实现了图书列表展示,购物车简单的功能。后台表只有三张,一张...
  • 项目名称:基于Java web的图书管理系统(library_system) 当前版本:V2.0.2版本 难度等级:✩✩ 复杂程度:✩✩ 用户类型:普通用户和管理员(双角色) 设计模式:MVC(jsp+servlet+javabean) 项目架构:B/S架构 ...
  • 此项目为jsp+servlet+javabeen+mvc开发模式制作的javaweb图书管理系项目,数据库使用mysql5。 二、技术介绍: 前后端主要应用框架技术:jsp+servlet+javabeen+mysql 开发工具:Myeclipse或Eclipse、jdk1.7、tomcat8...
  • java做图书管理系统

    2019-01-24 14:59:51
    图书管理系统:调查学校图书馆,设计一个图书管理系统图书管理系统具有管理员登陆,图书维护,图书管理和系统维护四个功能模块组成。
  • 第8章综合案例图书管理系统 MySQL 数据库应用实战教 课程名称 项目名称 综合案例图书管理系统 程慕课版 任务名称 综合案例图书管理系统 课时 2 项目性质 演示性 验证性 设计性 综合性 授课班级 授课日期 授课地点 ...
  • 项目要求 要求编写符合下列要求的网站 ...index.jsp:该系统的主页面,用于展示并管理信息 add.jsp:用于添加书籍信息 edit.jsp:用于修改书籍信息 del.jsp:用于删除书籍信息 createbook.jsp:用于进行信息中
  • MySQL程序设计第8章 综合案例-图书管理系统8.1 需求管理8.2 数据库设计8.3 创建数据库8.4 用户信息管理MySQL程序设计第8章 综合案例-图书管理系统8.5 图书管理8.6 借书管理8.7 视图管理MySQL程序设计第8章 综合案例-...
  • 技术:mysql+php+Ajax+Jquery+h5+css3 首先说一下为什么会做这个吧,主要还是因为觉得这个东西之前稍微接触过而且能够理解其原理,起码要是动起手来还是可以理得清思路,于是就动手干起来了。 1.首先是静态页面的...
  • php+apache+mysql实现图书管理系统

    千次阅读 2020-04-06 23:46:27
    Wamp就是Windows Apache Mysql PHP集成安装环境,即在window下的apache、 php和mysql的服务器软件。PHP扩展、Apache模块,开启/关闭鼠标点点就搞定。在端口号被占用的情况下,可以在httpd:conf文件中将端口换端口 ...
  • 一、系统需求分析1.1 系统功能结构模块系统设置:图书馆信息,用户设置,参数设置,书架设置图书借还:图书借阅,图书续借,图书归还系统查询:图书档案查询,图书借阅查询,节约到期查询1.2 功能需求系统管理:定义...
  • wxpython实现简单图书管理系统

    万次阅读 多人点赞 2017-06-03 15:24:40
    用wxpython实现的简单图书管理系统,可以实现增加图书,删除图书,修改图书,查看图书。后台数据库为mysql数据库,采用的pymysql连接数据库。系统界面如下:代码如下:1.书本类代码#author = liuwei date = 2017-06-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,470
精华内容 988
关键字:

mysql制作图书管理系统

mysql 订阅