console的mysql简单图书馆

7 篇文章 0 订阅

C的MySql简单图书馆

MySql中的表

create table book_information(
ISBN varchar(30) primary key,
book_name varchar(50) not null,
author varchar(20) not null,
publisher varchar(20) not null,
pub_date date not null,
book_price double not null,
book_id int(4) not null,
book_status BOOLEAN not null
);

insert into book_information values(
20180120,'q','q','q','1999.10.10',10,1,1
);

console的图书馆

#define _CRT_SECURE_NO_WARNINGS

#include <WinSock2.h> /*socket通信,系统头文件,必须放在第一个*/
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "mysql.h"
#include "zlog.h"

#define MAX_LENGTH 200
#define HOST "localhost"
#define USERNAME "root"
#define PASSWORD "root"
#define DATABASE "db1"
#define BOOKTABLE "book_information"
MYSQL* mysql = NULL;
MYSQL_RES *res_ptr = NULL; /*指向查询结果的指针*/
MYSQL_FIELD *field = NULL; /*字段结构指针*/
MYSQL_ROW result_row; /*按行返回的查询信息*/
zlog_category_t *zc = NULL;
void setConsole();
void showAll();
void addBook();
void modifyBook();
void deleteBook();
void queryBook();

void showMenu();
int inquire();
void insertBookIntoDB();
void log_init();
void log_finish();

int main(){

    int num;
    setConsole();
    log_init();

    mysql = mysql_init(NULL);
    if (mysql == NULL){
        zlog_info(zc,"mysql_init failed\n");
        zlog_fini();
        exit(1);
    }
    if (NULL == mysql_real_connect(mysql, HOST, USERNAME, PASSWORD, DATABASE, 0, NULL, 0)){
        zlog_info(zc, "mysql_real_connect failed\n");
        zlog_fini();
        exit(1);
    }
    showMenu();
    scanf("%d", &num);
    fflush(stdin);
    while (num){
        switch (num){
        case 1:
            showAll();
            break;
        case 2:
            addBook();
            break;
        case 3:
            modifyBook();
            break;
        case 4:
            deleteBook();
            break;
        case 5:
            queryBook();
            break;
        case 6:
            printf("\t 欢迎再次访问图书馆!\n");
            Sleep(100);
            exit(0);
            break;
        default:
            break;
        }
        if (inquire()){
            scanf("%d", &num);
            fflush(stdin);
        }
        else{
            break;
        }
    }
    mysql_close(mysql);
    log_finish();
    return 0;
}
void setConsole(){
    SetConsoleTitle(L"xiaolixi library");
    system("mode con cols=100 lines=30");//改变宽高
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); // 获取标准输出设备句柄
    WORD att = FOREGROUND_RED | FOREGROUND_GREEN |
        FOREGROUND_INTENSITY | BACKGROUND_BLUE;
    // 背景是蓝色,文本颜色是黄色(代码中黄色是使用红色和绿色混合得到的)
    SetConsoleTextAttribute(hOut, att);

}

void showAll(){
    const char* query_str = "select * from " BOOKTABLE;
    my_ulonglong row;
    unsigned int column; /*查询返回的行数和列数*/
    int i;
    MYSQL_FIELD* field;
    MYSQL_ROW result_row;
    /*if (NULL == mysql_real_connect(mysql, HOST, USERNAME, PASSWORD, DATABASE, 0, NULL, 0)){
        zlog_info(zc, "mysql_real_connect failed\n");
        return;
    }
    else{*/
        if (0 != mysql_real_query(mysql, query_str, strlen(query_str))){
            zlog_info(zc, "mysql_real_query failed\n");
        }
        else{
            res_ptr = mysql_store_result(mysql);
            if (res_ptr){
                row = mysql_num_rows(res_ptr);
                column = mysql_num_fields(res_ptr);
                printf("\t检索到%10d行 %10d列\n", row, column);
                while (field = mysql_fetch_field(res_ptr)){
                    printf("%-10s", field->name);
                }
                printf("\n");
                while (result_row = mysql_fetch_row(res_ptr)){
                    for (i = 0; i < column; ++i){
                        printf("%-10s", result_row[i]);
                    }
                    printf("\n");
                }
                printf("\n");
                mysql_free_result(res_ptr);
            }
        }
    //}
    //mysql_close(mysql);   
}
void addBook(){
    /*
                        ISBN varchar(30) primary key,
                        book_name varchar(50) not null,
                        author varchar(20) not null,
                        publisher varchar(20) not null,
                        pub_date date not null,
                        book_price double not null,
                        book_id int(4) not null,
                        book_status BOOLEAN not null
    */
    char ch;
    /*if (NULL == mysql_real_connect(mysql, HOST, USERNAME, PASSWORD, DATABASE, 0, NULL, 0)){
        zlog_info(zc, "mysql_real_connect failed\n");
        return;
    }
    else{*/
        do{
            insertBookIntoDB();
            printf("\ncontinue add book(y/n)");
            scanf("%c", &ch);
            fflush(stdin);
        } while (ch == 'y' || ch == 'Y' );
    //}
    //mysql_close(mysql);
}
void modifyBook(){
    char modify[MAX_LENGTH];
    char modify_str[MAX_LENGTH];
    char ch;
    const char* modifybook = "update " BOOKTABLE " %s";
    /*if (NULL == mysql_real_connect(mysql, HOST, USERNAME, PASSWORD, DATABASE, 0, NULL, 0)){
        zlog_info(zc, "mysql_real_connect failed\n");
        return;
    }
    else{*/
        do{
            printf("update " BOOKTABLE);
            fgets(modify, MAX_LENGTH, stdin);
            fflush(stdin);
            modify[strlen(modify) - 1] = '\0';
            sprintf(modify_str, modifybook, modify);
            if (0 == mysql_real_query(mysql, modify_str, strlen(modify_str))){
                printf("update book success\n");
            }
            else{
                zlog_info(zc, "mysql_real_query failed");
                zlog_info(zc, mysql_error(mysql));
            }
            printf("\ncontiune modify(y/n)");
            scanf("%c", &ch);
            fflush(stdin);
        } while (ch == 'y' || ch == 'Y');
    //}
    //mysql_close(mysql);
}

void deleteBook(){
    char isbn[MAX_LENGTH];
    char delete_str[MAX_LENGTH];
    char ch;
    const char* deletebook = "delete from " BOOKTABLE " %s" ;
    /*if (NULL == mysql_real_connect(mysql, HOST, USERNAME, PASSWORD, DATABASE, 0, NULL, 0)){
        zlog_info(zc, "mysql_real_connect failed\n");
        return;
    }
    else{*/
        do{
            printf("delete from " BOOKTABLE);
            fgets(isbn, MAX_LENGTH, stdin);
            fflush(stdin);
            isbn[strlen(isbn) - 1] = '\0';
            fflush(stdin);
            sprintf(delete_str, deletebook, isbn);
            if (0 == mysql_real_query(mysql, delete_str, strlen(delete_str))){
                printf("delete book success\n");
            }
            else{
                zlog_info(zc, "mysql_real_query failed");
                zlog_info(zc, mysql_error(mysql));
            }
            printf("\ndelete again(y/n)");
            scanf("%c", &ch);
            fflush(stdin);
        } while(ch == 'y' || ch == 'Y');
    //}
    //mysql_close(mysql);
}


void showMenu(){
    system("cls");
    printf("\n\n");
    printf("\t\t========================================\n");
    printf("\t\t=     welcome to xiaolixi library      =\n");
    printf("\t\t========================================\n");
    printf("\t\t=   1: show all informations       =\n");
    printf("\t\t=   2: add books                   =\n");
    printf("\t\t=   3: modify books                =\n");
    printf("\t\t=   4: delete books                =\n");
    printf("\t\t=   5: query books                 =\n");
    printf("\t\t=   6: exit books system           =\n");
    printf("\t\t========================================\n");
    printf("enter your choice:");
}
int inquire(){
    char ch = 0;
    printf("\t 返回到主菜单?(y/n)");
    scanf("%c", &ch);
    fflush(stdin);
    if (ch == 'y' || ch == 'Y'){
        showMenu();
        return 1;
    }
    else{
        printf("\t 欢迎再次访问图书馆!\n");
        Sleep(20);
        return 0;
        //exit(0);
    }

}
void queryBook(){
    char query[MAX_LENGTH];
    char query_str[MAX_LENGTH];
    char ch;
    const char* querybook = "select %s";
    MYSQL_RES *res_ptr; /*指向查询结果的指针*/
    MYSQL_FIELD *field; /*字段结构指针*/
    MYSQL_ROW result_row; /*按行返回的查询信息*/
    int row, column; /*查询返回的行数和列数*/
    int i;
    /*if (NULL == mysql_real_connect(mysql, HOST, USERNAME, PASSWORD, DATABASE, 0, NULL, 0)){
        zlog_info(zc, "mysql_real_connect failed\n");
        return;
    }
    else{*/
        do{
            printf("select ");
            fgets(query, MAX_LENGTH, stdin);
            fflush(stdin);
            query[strlen(query) - 1] = '\0';
            sprintf(query_str, querybook, query);
            if (0 == mysql_real_query(mysql, query_str, strlen(query_str))){
                //printf("update book success\n");
                res_ptr = mysql_store_result(mysql);
                if (res_ptr){
                    row = mysql_num_rows(res_ptr);
                    column = mysql_num_fields(res_ptr);
                    printf("\t\t检索到%10d行 %10d列\n", row, column);
                    while (field = mysql_fetch_field(res_ptr)){
                        printf("%-10s", field->name);
                    }
                    printf("\n");
                    while (result_row = mysql_fetch_row(res_ptr)){
                        for (i = 0; i < column; ++i){
                            printf("%-10s", result_row[i]);
                        }
                        printf("\n");
                    }
                    printf("\n");
                    mysql_free_result(res_ptr);
                }
            }
            else{
                zlog_info(zc, "mysql_real_query failed");
                zlog_info(zc, mysql_error(mysql));
            }
            printf("query again(y/n)");
            scanf("%c", &ch);
            fflush(stdin);
        } while (ch == 'y' || ch == 'Y');
//  }
    //mysql_close(mysql);
}


void log_init(){
    int rc;
    rc = zlog_init("test_default.conf");
    if (rc) {
        printf("init failed\n");
        exit(1);
    }
    zc = zlog_get_category("my_cat");
    if (!zc) {
        printf("get cat fail\n");
        zlog_fini(); 
        exit(1);
    }
}
void log_finish(){
    zlog_fini();
}

void insertBookIntoDB(){
    static char isbn[31];
    static char book_name[50];
    static char author[50];
    static char publisher[50];
    static char pub_date[50];
    static char book_price[50];
    static char book_id[50];
    static char book_status[50];

    static char query_str[MAX_LENGTH];
    static const char* insert_str = "insert into " BOOKTABLE " values(\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",%s,%s,%s)";
    static const char* isbn_query_str = "select ISBN from " BOOKTABLE " where ISBN=\"%s\"";
    MYSQL_RES* res_ptr = NULL;

    printf("input book's ISBN:");
    scanf("%s", isbn);
    fflush(stdin);
    sprintf(query_str, isbn_query_str, isbn);
    //printf("%s%d", isbn,strlen(query_str));
    if (0 != mysql_real_query(mysql, query_str, strlen(query_str))){
        zlog_info(zc, "mysql_real_query failed\n");
        zlog_info(zc, mysql_error(mysql));
    }
    else{
        res_ptr = mysql_store_result(mysql);
        if (res_ptr){
            //int num = mysql_num_rows(res_ptr);
            //printf("%d", num);
            if (0 == mysql_num_rows(res_ptr)){
                printf("input information:\n\tbook_name:");
                scanf("%s", book_name);
                printf("\tauthor:");
                scanf("%s", author);
                printf("\tpublisher:");
                scanf("%s", publisher);
                printf("\tpub_date:");
                scanf("%s", pub_date);
                printf("\tbook_price:");
                scanf("%s", book_price);
                printf("\tbook_id:");
                scanf("%s", book_id);
                printf("\tbook_status:");
                scanf("%s", book_status);
                fflush(stdin);
                sprintf(query_str, insert_str, isbn, book_name, author, publisher, pub_date, book_price, book_id, book_status);
                //printf("%s\nsuccess\n", query_str);
                if (0 != mysql_real_query(mysql, query_str, strlen(query_str))){
                    zlog_info(zc, "insert book failed. please try again and the error reason is \n");
                    zlog_info(zc, mysql_error(mysql));
                }
                else{
                    printf("%s\nsuccess\n", query_str);
                }
            }
            else{
                zlog_info(zc, "book already existing\n");
            }
        }
        else{
            zlog_info(zc, mysql_error(mysql));
        }
        mysql_free_result(res_ptr);
    }
}

用到了MySql和zlog的c接口动态库

您提到的是使用MySQL数据库构建的图书管理系统,并且希望在WebStorm中进行开发。以下是对该图书管理系统的关键点总结: ### 1. 系统功能模块 图书管理系统主要包括以下几个功能模块: - **用户管理**:包括用户登录、用户信息修改、删除用户信息、查看用户信息。 - **图书管理**:包括查看图书库存、图书信息录入、修改图书信息、查看图书信息。 - **借阅管理**:包括图书借阅处理、图书归还处理。 - **系统设置**:涉及系统的配置和维护。 ### 2. 用户管理功能 - **用户登录**:支持不同类型的用户(学生、教师)通过学号或教工号登录。 - **用户信息修改**:用户可以查看和编辑个人信息,如联系电话、地址、邮箱、登录密码。 - **删除用户信息**:用户可以删除部分个人信息,如联系电话、地址、邮箱。 - **查看用户信息**:用户可以查看自己的个人信息和图书借阅情况。 ### 3. 图书管理功能 - **查看图书库存**:管理员可以查看当前库存状况,并生成图书库存报表。 - **图书信息录入**:管理员可以录入新图书的信息,包括书名、作者、ISBN、出版社等。 - **修改图书信息**:管理员可以编辑现有图书的信息,如更新库存、修改分类。 - **查看图书信息**:管理员可以查看图书的详细信息。 ### 4. 借阅管理功能 - **图书借阅处理**:用户登录系统后,可以搜索并借阅图书。系统生成借阅编号,用户凭借借阅编号由管理员进行借阅操作。 - **图书归还处理**:用户登录系统后,可以选择归还的图书。系统生成归还编号,管理员计算逾期费用和损坏费用(如有),更新图书库存,恢复可借状态。 ### 5. 数据库设计 - **数据库表结构**: - `users` 表:存储用户信息,包括用户账户、姓名、性别、年龄、联系方式、地址、邮箱、职业、密码。 - `books` 表:存储图书信息,包括ISBN、书名、作者、出版社、库存数量、状态、类别。 - `admins` 表:存储管理员信息,包括工号、姓名、密码。 - `borrowings` 表:存储借阅信息,包括ISBN、用户账户、借阅编号、归还编号、逾期费用、损坏费用、借阅日期、归还日期。 - `borrow_application` 表:存储借阅申请信息,包括ISBN、用户账户、管理员工号、审核标志、审核时间。 - `bookclassify` 表:存储图书分类信息,包括分类编号、类别名称。 ### 6. 在WebStorm中开发 - **环境准备**: - 安装Node.js和npm。 - 安装Express框架用于后端开发。 - 安装MySQL连接器(如`mysql2`)。 - 安装前端框架(如React或Vue)。 - **项目结构**: - `src/` 目录下分别创建前后端文件夹。 - `backend/` 目录下放置后端代码,包括路由、控制器、模型等。 - `frontend/` 目录下放置前端代码,包括组件、页面、样式等。 - **示例代码**: - **后端**(Express + MySQL): ```javascript const express = require('express'); const mysql = require('mysql2'); // 创建连接池 const pool = mysql.createPool({ host: 'localhost', user: 'root', password: 'your_password', database: 'library' }); const app = express(); app.use(express.json()); // 获取所有图书 app.get('/books', (req, res) => { pool.query('SELECT * FROM books', (err, results) => { if (err) throw err; res.json(results); }); }); // 启动服务器 app.listen(3000, () => { console.log('Server is running on port 3000'); }); ``` - **前端**(React): ```jsx import React, { useEffect, useState } from 'react'; import axios from 'axios'; function BookList() { const [books, setBooks] = useState([]); useEffect(() => { fetchBooks(); }, []); const fetchBooks = async () => { try { const response = await axios.get('http://localhost:3000/books'); setBooks(response.data); } catch (error) { console.error('Error fetching books:', error); } }; return ( <div> <h1>Book List</h1> <ul> {books.map((book) => ( <li key={book.book_id}> {book.title} by {book.author} </li> ))} </ul> </div> ); } export default BookList; ``` ### 7. 数据库初始化 - 使用SQL脚本创建数据库和表: ```sql create database library; use library; CREATE TABLE users ( user_account int PRIMARY KEY, user_name VARCHAR(50), gender ENUM('男', '女'), age INT, contact_info char(11), password VARCHAR(30), email VARCHAR(100), user_type ENUM('学生', '老师'), address VARCHAR(200) ); CREATE TABLE books ( book_id int PRIMARY KEY, title VARCHAR(100), author VARCHAR(50), publisher VARCHAR(50), quantity INT, status ENUM('可借', '不可借'), class_id VARCHAR(50) ); -- 其他表的创建类似 ``` ### 8. 运行项目 - 启动后端服务: ```sh node backend/server.js ``` - 启动前端服务: ```sh npm start ``` 通过以上步骤,您可以在WebStorm中搭建一个基于MySQL的图书管理系统。希望这些信息对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值