1. 程式人生 > >c語言小項目-使用mysql數據庫的圖書管理系統

c語言小項目-使用mysql數據庫的圖書管理系統

ble n) 工具 author 是否 錄取 sql mysql window 行數據

VS2013通過MySQL方式連接到MySQL

MySQL官網上C++的API有兩個。一個是很成熟的mysql++,另一個是MySQL Connector/C++,近兩年才出的,模仿JDBC做的,封裝得很方便使用。這裏使用的是mysql方式。

1.新建bookAdminSys工程

2.將文件夾MySQL目錄下的include添加到VC++目錄中的包含目錄中,另外將文件夾MySQL目錄下的lib添加到VC++目錄中的庫目錄中

技術分享圖片

技術分享圖片

3.添加附加依賴項,將MySQL目錄下的libmysql.lib添加到Linker(鏈接器)——Input(輸入)——Additional Dependencies(附加依賴項)中

技術分享圖片

4.修改工程運行平臺 ,由於windows系統是64位的,故mysql也是64位的,而我們創建的工程是win32控制臺程序,無法直接使用64位的libmysql.lib,所以要修改為x64

技術分享圖片

5.將MySQL目錄中的libmysql.dll,libmysql.lib拷到所建工程的根目錄下,並將libmysql.dll拷到system32和syswow64這兩個系統文件夾下

6.從官方網站http://dev.mysql.com下載到mysql安裝包並安裝,安裝完成後打開MySQL 5.6 Command Client窗口,如下圖所示:

技術分享圖片

第1步:創建一個名為db_books的數據庫;

第2步:創建完成數據庫之後,使用use語句來改變當前的數據庫;

第3步:使用create table語句來創建數據表。

使用mysql的圖書管理系統源代碼(在VS2013上已測試通過):

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h> //包含了其它window頭文件,為mmysql.h服務,且必須聲明在mysql.h前面
#include <mysql.h> //mysql數據庫頭文件

#pragma warning( disable : 4996)

/*
定義數據庫相關操作變量*/ MYSQL mysql; //定義mysql對象 MYSQL_RES *result; //定義結果集變量 MYSQL_ROW row; //定義行變量 char ch[2]; void ShowAll(); //顯示所有的圖書信息 void AddBook(); //添加圖書信息 void ModifyBook(); //修改圖書信息 void DeleteBook(); //刪除圖書信息 void QueryBook(); //查詢圖書信息 //顯示菜單 void showmenu() { printf("\n\n\n\n\n"); printf("\t╔═══════════════════════════╗\n"); printf("\t║ Welcome To Lemon Books System ║\n"); printf("\t╠═══════════════════════════╣\n"); printf("\t║\t\t 1 - 顯示所有圖書信息 ║\n"); printf("\t║\t\t 2 - 添加圖書信息 ║\n"); printf("\t║\t\t 3 - 修改圖書信息 ║\n"); printf("\t║\t\t 4 - 刪除圖書信息 ║\n"); printf("\t║\t\t 5 - 查詢圖書信息 ║\n"); printf("\t║\t\t 6 - 退出 ║\n"); printf("\t╚═══════════════════════════╝\n"); printf("\n ENTER YOUR CHOICE(1-6):"); } void inquire() /*詢問用戶是否顯示主菜單*/ { printf("\t 顯示主菜單?(y/n):"); scanf("%s", ch); if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)/*判斷是否要顯示查找到的信息*/ { showmenu(); /*顯示菜單*/ } else { exit(0); } } /*顯示主菜單,連接數據庫*/ int main() { int n; //定義變量 存儲用戶輸入的編號 showmenu(); /*顯示菜單*/ scanf("%d", &n);/*輸入選擇功能的編號*/ while (n) { mysql_init(&mysql); //初始化mysql結構 switch (n) { case 1: ShowAll(); /*調用顯示所有圖書數據的過程*/ break; case 2: AddBook(); /*添加圖書信息*/ break; case 3: ModifyBook(); /*修改圖書信息*/ break; case 4: DeleteBook(); /*刪除圖書信息*/ break; case 5: QueryBook(); /*查詢圖書信息*/ break; case 6: exit(0); /*退出*/ default:break; } system("PAUSE"); system("CLS"); inquire(); scanf("%d", &n); } } //顯示所有的圖書信息 void ShowAll() { //連接數據庫 if (!mysql_real_connect(&mysql,"localhost","root","root","db_books",0,NULL,0)) //連接數據庫成功,返回true { printf("連接數據庫失敗!\n"); } else { //連接數據庫成功 if (mysql_query(&mysql, "select * from db_books")) //查詢數據表tb_books中的所有字段 查詢成功,返回false { printf("\n 查詢 tb_books 失敗!\n"); //連接數據庫失敗 } else { result = mysql_store_result(&mysql); //獲得結果集 if (mysql_num_rows(result) != NULL) //獲得結果集的行數,若行數不為0,則進入if { //有記錄數據時,才顯示記錄數據 printf("\t ════════════════════════════ \n"); printf("\t 顯 示 所 有 圖 書 信 息 \n"); printf("\t ════════════════════════════ \n"); printf("\t 圖書編號 圖書名 作者 出版社 \n"); printf("\t -------------------------------------------------------- \n"); while (row = mysql_fetch_row(result)) //取出結果集中的下一行數據 { //取出結果集中記錄 fprintf(stdout, "\t %s %s %s %s \n", row[0], row[1], row[2], row[3]); //輸出這行記錄 [相當於從文件中取出數據,所以使用了fprintf] } printf("\t ════════════════════════════ \n"); } else { printf("\n 沒有記錄數據! \n"); } mysql_free_result(result); //釋放結果集 } mysql_close(&mysql); //釋放連接 } } void AddBook() /*添加圖書信息*/ { int rowcount; /*結果集中的行數*/ char id[10]; /*編號*/ char *bookname; //圖書名稱 char *author; //圖書作者 char *bookconcern; char *sql; //數據庫字符串 char dest[500] = { " " }; /*連接數據庫*/ if (!mysql_real_connect(&mysql, "localhost", "root", "root", "db_books", 0, NULL, 0)) { printf("\n\t 不能連接數據庫!\n"); } else { /*數據庫連接成功,插入數據*/ printf("\t ════════════════════════════ \n"); printf("\t 添 加 圖 書 信 息 \n"); printf("\t ════════════════════════════ \n"); if (mysql_query(&mysql, "select * from db_books")) { //如果查詢失敗 printf("\n\t 查詢 db_books 數據表失敗!\n"); } else { result = mysql_store_result(&mysql); //獲得結果集 rowcount = (int)mysql_num_rows(result); //獲得行數 row = mysql_fetch_row(result); //獲取結果集的行 printf("\t 圖書編號:"); scanf("%s", id); /*輸入圖書編號*/ if (mysql_num_rows(result) != NULL) { /*判斷輸入的編號是否存在*/ do { //存在相同編號 if (!strcmp(id, row[0])) //row[0]為每行的第一個元素,即ID,則row[1]則為bookname { // printf("%s",row[0]); printf("\n\t 記錄存在,按任意鍵繼續!\n"); getch(); mysql_free_result(result); /*釋放結果集*/ mysql_close(&mysql); /*釋放連接*/ return; } } while (row = mysql_fetch_row(result)); } //給字符指針分配內存 bookname = (char*)malloc(50); author = (char*)malloc(50); bookconcern = (char*)malloc(50); //不存在相同的編號 printf("\t 請輸入圖書名:"); scanf("%s", bookname); /*輸入圖書名*/ //將要寫入數據庫的字符串添加到dest後 sql = "insert into db_books (ID,bookname,author,bookconcern) values ("; strcat(dest, sql); strcat(dest, ""); strcat(dest, id); strcat(dest, "‘, ‘"); strcat(dest, bookname); /*將圖書編號追加到sql語句後面*/ printf("\t 請輸入作者:"); scanf("%s", author); /*輸入作者*/ strcat(dest, "‘, ‘"); strcat(dest, author); printf("\t 請輸入出版社:"); scanf("%s", bookconcern); /*輸入出版社*/ strcat(dest, "‘, ‘"); strcat(dest, bookconcern); strcat(dest, "‘)"); printf("%s",dest); if (mysql_query(&mysql, dest) != 0) //將dest插入到數據庫中(db_books) { fprintf(stderr, "\t 不能插入記錄!", mysql_error(&mysql)); } else { printf("\t 插入成功!\n"); } mysql_free_result(result); //釋放結果集 } mysql_close(&mysql); //釋放連接 } } void QueryBook() /*查詢圖書信息*/ { char id[10]; /*結果集中的行數*/ char *sql; char dest[100] = { " " }; if (!mysql_real_connect(&mysql, "127.0.0.1", "root", "root", "db_books", 0, NULL, 0)) { printf("\t 不能連接數據庫!\n"); } else { printf("\t 請輸入您想要查詢的圖書編號:"); scanf("%s", id); /*輸入圖書編號*/ sql = "select * from db_books where id="; //查詢條件 strcat(dest, sql); strcat(dest, id); /*將圖書編號追加到sql語句後面*/ if (mysql_query(&mysql, dest)) { //如果查詢失敗 printf("\n 查詢 tb_book 數據表失敗!\n"); } else { result = mysql_store_result(&mysql); //獲得結果集 if (mysql_num_rows(result) != NULL) { //有記錄的情況,只有有記錄取數據才有意義 printf("\t ════════════════════════════ \n"); printf("\t 顯示圖書信息 \n"); printf("\t ════════════════════════════ \n"); printf("\t圖書編號 圖書名 作者 出版社 \n"); printf("\t -------------------------------------------------------- \n"); while ((row = mysql_fetch_row(result))) { //取出結果集中記錄 fprintf(stdout, "\t %s %s %s %s \n", row[0], row[1], row[2], row[3]); //輸出這行記錄 } printf("\t ════════════════════════════ \n"); } else { printf("\t 沒有發現要查詢的信息!\n"); } mysql_free_result(result); //釋放結果集 } mysql_close(&mysql); //釋放連接 } } //修改圖書信息 void ModifyBook() { char id[10]; /*結果集中的行數*/ char *sql; char dest[500] = { " " }; char dest1[500] = { " " }; char *bookname; char *author; char *bookconcern; if (!mysql_real_connect(&mysql, "127.0.0.1", "root", "root", "db_books", 0, NULL, 0)) { printf("\t 不能連接數據庫!\n"); } else { /*數據庫連接成功*/ // printf("連接成功"); printf("\t 請輸入您想要修改的圖書編號."); scanf("%s", id); /*輸入圖書編號*/ sql = "select * from db_books where id="; strcat(dest, sql); strcat(dest, id); /*將圖書編號追加到sql語句後面*/ //printf("%s\n",dest); /*查詢該圖書信息是否存在*/ if (mysql_query(&mysql, dest)) { //如果查詢失敗 printf("\n 查詢 db_books 數據表失敗! \n"); } else { result = mysql_store_result(&mysql); //獲得結果集 if (mysql_num_rows(result) != NULL) { //有記錄的情況,只有有記錄取數據才有意義 printf("\t 發現記錄信息,是否顯示?(y/n) "); scanf("%s", ch); if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)/*判斷是否要顯示查找到的信息*/ { printf("\t ════════════════════════════ \n"); printf("\t ***** 顯示圖書信息 ***** \n"); printf("\t ════════════════════════════ \n"); printf("\t圖書編號 圖書名 作者 出版社 \n"); printf("\t -------------------------------------------------------- \n"); while ((row = mysql_fetch_row(result))) { //取出結果集中記錄 fprintf(stdout, "\t %s %s %s %s \n", row[0], row[1], row[2], row[3]); //輸出這行記錄 } printf("\t ════════════════════════════ \n"); } printf("\t Modify?(y/n)"); scanf("%s", ch); if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0) /*判斷是否需要錄入*/ { sql = "update db_books set bookname= ‘"; strcat(dest1, sql); // printf("%s",sql); bookname = (char*)malloc(20); author = (char*)malloc(20); bookconcern = (char*)malloc(20); printf("\t 圖書名:"); scanf("%s", bookname); /*輸入圖書名*/ strcat(dest1, bookname); // printf("%s",&bookname); printf("\t 作者:"); scanf("%s", author); /*輸入作者*/ strcat(dest1, "‘, author= ‘"); strcat(dest1, author); /*追加sql語句*/ printf("\t 出版社:"); scanf("%s", bookconcern); /*輸入出版社*/ strcat(dest1, "‘, bookconcern = ‘"); strcat(dest1, bookconcern); /*追加sql語句*/ strcat(dest1, "‘ where id= "); strcat(dest1, id); //printf("%s",dest1); if (mysql_query(&mysql, dest1) != 0) { fprintf(stderr, "\t 不能修改記錄!\n", mysql_error(&mysql)); } else { printf("\t 修改成功!\n"); } } } else { printf("\t 沒有發現要修改的信息!\n"); } } mysql_free_result(result); //釋放結果集 } mysql_close(&mysql); //釋放連接 } void DeleteBook() /*刪除圖書信息*/ { char id[10]; /*結果集中的行數*/ char *sql; char dest[100] = { " " }; char dest1[100] = { " " }; if (!mysql_real_connect(&mysql, "127.0.0.1", "root", "root", "db_books", 0, NULL, 0)) { printf("\t 不能連接數據庫!\n"); } else { printf("\t 請輸入您想要刪除的圖書編號. "); scanf("%s", id); /*輸入圖書編號*/ sql = "select * from tb_book where id="; strcat(dest, sql); strcat(dest, id); /*將圖書編號追加到sql語句後面*/ //printf("%s\n",dest); /*查詢該圖書信息是否存在*/ if (mysql_query(&mysql, dest)) { //如果查詢失敗 printf("\n 查詢 tb_book 數據表失敗! \n"); } else { result = mysql_store_result(&mysql); //獲得結果集 if (mysql_num_rows(result) != NULL) { //有記錄的情況,只有有記錄取數據才有意義 printf("\t 發現記錄信息,是否顯示?(y/n) "); scanf("%s", ch); if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)/*判斷是否要顯示查找到的信息*/ { printf("\t ════════════════════════════ \n"); printf("\t ***** 顯示圖書信息 ***** \n"); printf("\t ════════════════════════════ \n"); printf("\t圖書編號 圖書名 作者 出版社 \n"); printf("\t -------------------------------------------------------- \n"); while ((row = mysql_fetch_row(result))) { //取出結果集中記錄 fprintf(stdout, "\t %s %s %s %s \n", row[0], row[1], row[2], row[3]); //輸出這行記錄 } printf("\t ════════════════════════════ \n"); } printf("\t 是否刪除?(y/n) "); scanf("%s", ch); if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0) /*判斷是否需要錄入*/ { sql = "delete from tb_book where ID= "; printf("%s", dest1); strcat(dest1, sql); strcat(dest1, id); // printf("%s",dest1); if (mysql_query(&mysql, dest1) != 0) { fprintf(stderr, "\t 不能刪除記錄! \n", mysql_error(&mysql)); } else { printf("\t 刪除成功!\n"); } } } else { printf("\t 沒有發現要刪除的信息!\n"); } } mysql_free_result(result); //釋放結果集 } mysql_close(&mysql); }

顯示效果:

技術分享圖片

MySQL工具:MySQL Workbench

技術分享圖片

c語言小項目-使用mysql數據庫的圖書管理系統