【MySQL】数据库-图书管理系统(CC++实现)

打印 上一主题 下一主题

主题 1029|帖子 1029|积分 3087

一.预期功能

该图书管理系统计划提供基本的计划模版,涉及数据库的增删查改等操纵,包含登录功能,图书管理功能,图书借阅功能,用户管理功能等基础功能,详细功能检察以下菜单表,共包含三个菜单,登录菜单,管理员菜单和用户菜单。
  1. void Menu()
  2. {
  3.         printf("***************************************
  4. ");
  5.         printf("*      欢迎进入线上图书管理系统!     *
  6. ");
  7.         printf("*                                     *
  8. ");
  9.         printf("*            1.管理员登录             *
  10. ");
  11.         printf("*            2.读者登录               *
  12. ");
  13.         printf("*            3.读者注册               *
  14. ");
  15.         printf("*            0.退出本系统             *
  16. ");
  17.         printf("***************************************
  18. ");
  19. }
  20. void manager_Menu()
  21. {
  22.         printf("***************************************
  23. ");
  24.         printf("*            欢迎你,管理员            
  25. ");
  26.         printf("*                                    
  27. ");
  28.         printf("*            1.添加书籍              
  29. ");
  30.         printf("*            2.显示书籍              
  31. ");
  32.         printf("*            3.查找书籍               
  33. ");
  34.         printf("*            4.修改书籍               
  35. ");
  36.         printf("*            5.显示用户数据            
  37. ");
  38.         printf("*            6.返回主菜单              
  39. ");
  40.         printf("*            7.添加新管理员              
  41. ");
  42.         printf("*            0.退出本系统            
  43. ");
  44.         printf("***************************************
  45. ");
  46. }
  47. void reader_Menu(user* head)
  48. {
  49.         printf("***************************************
  50. ");
  51.         printf("*          欢迎你,读者           
  52. ");
  53.         printf("*                                    
  54. ");
  55.         printf("*          1.借阅书籍                  
  56. ");
  57.         printf("*          2.归还书籍                  
  58. ");
  59.         printf("*          3.修改密码                  
  60. ");
  61.         printf("*          4.返回主菜单               
  62. ");
  63.         printf("*          0.退出本系统               
  64. ");
  65.         printf("*                                    
  66. ");
  67.         printf("***************************************
  68. ");
  69. }
复制代码
二.建表

1.管理员表(manager)
列名
数据范例
束缚
说明
M_ID
INT
PRIMARY KEY
管理员ID编号
M_Account
VARCHAR(30)
NOT NULL
管理员账号
M-Password
VARCHAR(30)
NOT NULL
暗码
2.图书信息表(book)
列名
数据范例
束缚
说明
B_ID
INT
PRIMARY KEY
图书ID编号
B_Name
VARCHAR(30)
NOT NULL
图书名称
Author
VARCHAR(30)
NOT NULL
作者
Publish
VARCHAR(30)
NOT NULL
出书社名称
Price
DECIMAL(10,2)
NOT NULL
价格
Quantity
INT
DEFAULT 0
库存量
3.用户表(user)
列名
数据范例
束缚
说明
U_ID
INT
PRIMARY KEY
用户ID编号
U_Account
VARCHAR(30)
NOT NULL
用户账号
U_Password
VARCHAR(30)
NOT NULL
暗码
4.借书表(borrow_book)
列名
数据范例
束缚
说明
U_ID
INT
FOREIGN KEY
用户ID编号
B_ID
INT
FOREIGN KEY
图书ID编号
Borrow_time
VARCHAR(30)
NOT NULL
借阅时间
Return_time
VARCHAR(30)
NOT NULL
归还时间
State
VARCHAR(30)
NOT NULL
状态
备注1:登录功能利用管理员账号/用户账号+暗码举行登录,在这里省略了管理员/用户昵称。
备注2:价格DECIMAL对应VS中的float(浮点型)举行转化。
备注3:时间可以利用Date范例,但为了方便在VS中添加到数据库利用varchar范例,在VS上将当前时间转化为字符串举行添加。
备注4:借书表中U_ID和B_ID共同构成主码。
附上MySQL建表,数据插入代码:
  1. CREATE TABLE manager(
  2. M_ID INT PRIMARY KEY,
  3. M_Account VARCHAR(30) NOT NULL,
  4. M_Password VARCHAR(30) NOT NULL
  5. );
  6. CREATE TABLE book(
  7. B_ID INT PRIMARY KEY,
  8. B_NAME VARCHAR(30) NOT NULL,
  9. Author VARCHAR(30) NOT NULL,
  10. Publish VARCHAR(30) NOT NULL,
  11. Price DECIMAL(10,2) NOT NULL,
  12. Quantity INT DEFAULT 0
  13. );
  14. CREATE TABLE user(
  15. U_ID INT PRIMARY KEY,
  16. U_Account VARCHAR(30) NOT NULL,
  17. U_Password VARCHAR(30) NOT NULL
  18. );
  19. CREATE TABLE borrow_book(
  20. U_ID INT NOT NULL,       
  21. B_ID INT NOT NULL,
  22. Borrow_time VARCHAR(30) NOT NULL,
  23. Return_time VARCHAR(30),
  24. State VARCHAR(30),
  25. PRIMARY KEY (U_ID,B_ID),
  26. FOREIGN KEY(U_ID) REFERENCES user(U_ID) ON DELETE CASCADE,
  27. FOREIGN KEY(B_ID) REFERENCES book(B_ID) ON DELETE CASCADE
  28. );
  29. -- 管理员表数据
  30. INSERT INTO manager (M_ID, M_Account, M_Password) VALUES
  31. (3, 'alice_admin', 'alice123'),
  32. (4, 'bob_admin', 'bob123'),
  33. (5, 'charlie_admin', 'charlie123');
  34. -- 书籍表数据
  35. INSERT INTO book (B_ID, B_NAME, Author, Publish, Price, Quantity) VALUES
  36. (101, '百年孤独', '加布里埃尔·加西亚·马尔克斯', '南海出版公司', 59.90, 20),
  37. (102, '追风筝的人', '卡勒德·胡赛尼', '上海人民出版社', 39.50, 15),
  38. (103, '解忧杂货店', '东野圭吾', '南海出版公司', 39.00, 30),
  39. (104, '活着', '余华', '北京十月文艺出版社', 35.00, 25),
  40. (105, '哈利·波特与魔法石', 'J.K.罗琳', '人民文学出版社', 69.00, 50);
  41. -- 用户表数据
  42. INSERT INTO user (U_ID, U_Account, U_Password) VALUES
  43. (201, 'diana_user', 'diana123'),
  44. (202, 'eric_user', 'eric123'),
  45. (203, 'fiona_user', 'fiona123'),
  46. (204, 'george_user', 'george123'),
  47. (205, 'hannah_user', 'hannah123');
  48. -- 借阅记录表数据
  49. INSERT INTO borrow_book (U_ID, B_ID, Borrow_time, Return_time, State) VALUES
  50. (201, 101, '2024-06-01', '2024-06-15', 'RETURNED'),
  51. (202, 102, '2024-06-02', NULL, 'BORROWED'),
  52. (203, 103, '2024-06-03', '2024-06-10', 'RETURNED'),
  53. (204, 104, '2024-06-04', NULL, 'BORROWED'),
  54. (205, 105, '2024-06-05', '2024-06-20', 'RETURNED'),
  55. (201, 105, '2024-06-21', NULL, 'BORROWED');
复制代码
三.环境配置

声明:本文利用Visual studio2022 编写,其他编译器可自行考量,下面举行环境配置。
首先,找到项目的属性页面,找到C/C++,在通例的附加包含目录中选中安装的MySQL文件中的Include文件


然后在毗连器的通例中,找到附加库目录,选中mysql文件中的lib文件
在链接器的输入中,选择附加依赖项,手动输入libmysql.lib

末了一步,将MySQL文件lib文件中的libmysql.dll复制到项目的x64目录下。

如许环境就配置好了。
四.数据库毗连

这是链接数据库和编译器的出发点,系统整体的功能都在这个实现内部,注意设置字符编码,否则大概会出现乱码。
  1. //初始化
  2. MYSQL* con = mysql_init(NULL);
  3. //设置字符编码,以防出现乱码
  4. mysql_options(con, MYSQL_SET_CHARSET_NAME, "GBK");
  5. //开始连接
  6. if (!mysql_real_connect(con, host, use, password, database_name, port, NULL, 0))
  7. {
  8.         fprintf(stderr, "connect fail", mysql_error(con));
  9.         return -1;
  10. }
  11. //关闭连接
  12. mysql_close(con);
复制代码
五.添加、删除信息

在编译器中界说表格数据对应的布局体,在编译器中输入的数据存入布局体链表中,在通过sprintf将对应的MySQL插入/删除语句输出实行。本系统在VS上利用布局体链表储存对应表格的全部数据,因此设置三个链表的头指针:book_head,user_head,manager_head,初始化为NULL
  1. //结构体定义
  2. typedef struct manager_table
  3. {
  4.         int M_ID;
  5.         char M_Account[30];
  6.         char M_Password[30];
  7.         struct manager_table* next;
  8. }manager;
  9. typedef struct book_table
  10. {
  11.         int B_ID;
  12.         char B_NAME[30];
  13.         char Author[30];
  14.         char Publish[30];
  15.         float Price;
  16.         int Quantity;
  17.         struct book_table* next;
  18. }book;
  19. typedef struct user_table
  20. {
  21.         int U_ID;
  22.         char U_Account[30];
  23.         char U_Password[30];
  24.         struct user_table* next;
  25. }user;
  26.     //链表头节点指针
  27.         book* book_head = NULL;
  28.         user* user_head = NULL;
  29.         manager* manager_head = NULL;
复制代码
添加新书籍首先找到链表的尾部,创建新节点,将书籍信息输入,随后将mysql语句存入字符数组sql中,利用mysql_query即可。当然在编号输入中可以添加重复检查等功能,实现就是链表的遍历,在此不举行实现该功能。书籍添加实现,其余管理员添加,用户添加也是同理。
  1. book* Add_new_book(book* head, MYSQL* mysql)
  2. {
  3.         book* newbook = (book*)malloc(sizeof(book));
  4.         if (newbook == NULL)
  5.         {
  6.                 perror("malloc fail");
  7.                 exit(1);
  8.         }
  9.         if (head == NULL)
  10.         {
  11.                 head = newbook;
  12.         }
  13.         else
  14.         {
  15.                 //找到尾节点
  16.                 book* pcur = head;
  17.                 while (pcur->next)
  18.                 {
  19.                         pcur = pcur->next;
  20.                 }
  21.                 pcur->next = newbook;
  22.         }
  23.         printf("请输入书籍编号:");
  24.         scanf("%d", &(newbook->B_ID));
  25.         //检测编号重复(未实现)
  26.         printf("请输入名称:");
  27.         scanf("%s", newbook->B_NAME);
  28.         printf("请输入作者:");
  29.         scanf("%s", newbook->Author);
  30.         printf("请输入出版社:");
  31.         scanf("%s", newbook->Publish);
  32.         printf("请输入价格:");
  33.         scanf("%f", &(newbook->Price));
  34.         printf("请输入库存量:");
  35.         scanf("%d", &(newbook->Quantity));
  36.         //将新增书籍信息存入数据库
  37.         char sql[256];
  38.         sprintf(sql, "insert into book values('%d','%s','%s','%s','%f','%d')",
  39.                 newbook->B_ID, newbook->B_NAME, newbook->Author, newbook->Publish, newbook->Price, newbook->Quantity);
  40.         mysql_query(mysql, sql);
  41.         newbook->next = NULL;
  42.         printf("添加成功!
  43. ");
  44.         return head;
  45. }
复制代码
删除书籍需要举行以下两步:找到对应编号的节点,然后释放该节点。防止删除错误,到场了删除时表现书籍信息而且举行二次确认功能。
  1. //删除书籍信息
  2. book* Delete_Book(book* head, MYSQL* mysql)
  3. {
  4.         book* p = head;
  5.         book* pcur = NULL;
  6.         int id, option;
  7.         char sql[256];
  8.         printf("请输入删除书籍的编号:");
  9.         scanf("%d", &id);
  10.         while (p)
  11.         {
  12.                 if (id == p->B_ID)
  13.                 {
  14.                         break;
  15.                 }
  16.                 pcur = p;
  17.                 p = p->next;
  18.         }
  19.         if (p == NULL)
  20.         {
  21.                 printf("未找到此ID编号的书籍
  22. ");
  23.                 return 0;
  24.         }
  25.         else
  26.         {
  27.                 printf("===================================================================================
  28. ");
  29.                 printf("|书名                    |作者            |出版社          |价格  |库存  |编号    |
  30. ");
  31.                 printf("-----------------------------------------------------------------------------------
  32. ");
  33.                 printf("|%-24s|%-16s|%-16s|%-6.2f|%-6d|%-8d|
  34. ", p->B_NAME, p->Author, p->Publish, p->Price, p->Quantity, p->B_ID);
  35.                 printf("===================================================================================
  36. ");
  37.                 printf("================
  38. ");
  39.                 printf("|是否确定删除?|
  40. ");
  41.                 printf("|0.取消  1.确定|
  42. ");
  43.                 printf("================
  44. ");
  45.                 scanf("%d", &option);
  46.                 switch (option)
  47.                 {
  48.                 case 1:
  49.                         sprintf(sql, "delete from book where B_ID = %d;", id);
  50.                         mysql_query(mysql, sql);
  51.                         if (p == head)
  52.                         {
  53.                                 head = head->next;
  54.                                 free(p);
  55.                         }
  56.                         else
  57.                         {
  58.                                 pcur->next = p->next;
  59.                                 free(p);
  60.                         }
  61.                         printf("已成功删除
  62. ");
  63.                         option = 0;
  64.                         break;
  65.                 case 0:
  66.                         printf("取消删除
  67. ");
  68.                         break;
  69.                 default:
  70.                         printf("输入错误
  71. ");
  72.                         break;
  73.                 }
  74.         }
  75.         return head;
  76. }
复制代码
六.加载数据库信息

在加载数据库的信息前需要界说res 和 row来查询结果集和记录布局体,随后将得到的结果插入进链表,将数据库的内容拷贝到编译器的链表中。
  1. MYSQL_RES* res = NULL;//查询结果集
  2. MYSQL_ROW row = NULL;//记录结构体
  3. //从数据库中加载书籍信息
  4. book* load_Book(book* head, MYSQL_RES* res, MYSQL_ROW row, MYSQL* mysql)
  5. {
  6.         book* p = NULL;
  7.         book* pcur = head;
  8.         //查询数据
  9.         mysql_query(mysql, "select * from book;");
  10.         //获取结果集
  11.         res = mysql_store_result(mysql);
  12.         //将值赋为链表
  13.         while (row = mysql_fetch_row(res))
  14.         {
  15.                 p = NULL, pcur = head;
  16.                 p = (book*)malloc(sizeof(book));
  17.                 if (p == NULL)
  18.                 {
  19.                         perror("malloc fail");
  20.                         exit(1);
  21.                 }
  22.                 if (head == NULL)
  23.                 {
  24.                         head = p;
  25.                 }
  26.                 else
  27.                 {
  28.                         while (pcur->next != NULL)
  29.                         {
  30.                                 pcur = pcur->next;
  31.                         }
  32.                         pcur->next = p;
  33.                 }
  34.                 p->B_ID = atoi(row[0]);
  35.                 strcpy(p->B_NAME, row[1]);
  36.                 strcpy(p->Author, row[2]);
  37.                 strcpy(p->Publish, row[3]);
  38.                 p->Price = atoi(row[4]);
  39.                 p->Quantity = atoi(row[5]);
  40.                 p->next = NULL;
  41.         }
  42.         //释放结果集
  43.         mysql_free_result(res);
  44.         return head;
  45. }
复制代码
七.查找与登录

利用者输入账号存入account数组,遍历链表利用strcmp举行比力,匹配乐成后再输入暗码举行对比,暗码有大概输入错误,设置循环再次尝试。
  1. manager* manager_Login(manager* head)
  2. {
  3.         manager* p = head;
  4.         char account[30], password[30];
  5.         printf("请输入账号:");
  6.         scanf("%s", account);
  7.         while (p != NULL)
  8.         {
  9.                 if (!strcmp(account, p->M_Account))
  10.                 {
  11.                         break;
  12.                 }
  13.                 p = p->next;
  14.         }
  15.         if (p == NULL)
  16.         {
  17.                 printf("没有查找到该账号!
  18. ");
  19.                 return NULL;
  20.         }
  21.         else
  22.         {
  23.                 while (1)
  24.                 {
  25.                         printf("请输入密码:");
  26.                         scanf("%s", password);
  27.                         if (strcmp(password, p->M_Password) == 0)
  28.                         {
  29.                                 printf("成功登录!
  30. ");
  31.                                 break;
  32.                         }
  33.                         else {
  34.                                 printf("密码错误!请重新输入!
  35. ");
  36.                         }
  37.                 }
  38.         }
  39.         return p;
  40. }
复制代码
八.借阅与归还

借阅归还中与前面不同的就在于时间,在VS中得到当前日期的字符数组,可以如许实现:
  1. #include<time.h>
  2. time_t rawtime;
  3. struct tm* timeinfo;
  4. char date_str[11]; // 足够存储 "YYYY-MM-DD" 格式的日期字符串
  5. // 获取当前时间的时间戳
  6. time(&rawtime);
  7. // 将时间戳转换为本地时间
  8. timeinfo = localtime(&rawtime);
  9. // 使用sprintf将年、月、日格式化为字符串
  10. // 注意:tm_year是从1900年开始的,所以需要+1900
  11. // tm_mon是从0开始的,所以需要+1
  12. sprintf(date_str, "%d-%02d-%02d",
  13.                                 timeinfo->tm_year + 1900,
  14.                                 timeinfo->tm_mon + 1,
  15.                                 timeinfo->tm_mday);
复制代码
因此在借阅时,填入借阅时间,并将状态改为“BORROWED”,在归还时填入归还时间,并将状态改为“RETURNED”即可。
  1. //借阅图书
  2. int borrow_book(int id, MYSQL_RES* res, MYSQL_ROW row, MYSQL* mysql, book* head)
  3. {
  4.         Show_remaining_book(res, row, mysql);
  5.         char sql[256];
  6.         int b_id;
  7.         book* p = head;
  8.         printf("请输入要借阅的书籍编号:");
  9.         scanf("%d", &b_id);
  10.         while (head != NULL)
  11.         {
  12.                 if (b_id == p->B_ID)
  13.                 {
  14.                         sprintf_s(sql, sizeof(sql), "select * from book where B_ID = %d;", b_id);
  15.                         mysql_query(mysql, sql);
  16.                         res = mysql_store_result(mysql);
  17.                         row = mysql_fetch_row(res);
  18.                         if (atoi(row[5]) <= 0)
  19.                         {
  20.                                 printf("库存量不足!
  21. ");
  22.                                 return 0;
  23.                         }
  24.                         else
  25.                         {
  26.                                 time_t rawtime;
  27.                                 struct tm* timeinfo;
  28.                                 char date_str[11]; // 足够存储 "YYYY-MM-DD" 格式的日期字符串
  29.                                 // 获取当前时间的时间戳
  30.                                 time(&rawtime);
  31.                                 // 将时间戳转换为本地时间
  32.                                 timeinfo = localtime(&rawtime);
  33.                                 // 使用sprintf将年、月、日格式化为字符串
  34.                                 // 注意:tm_year是从1900年开始的,所以需要+1900
  35.                                 // tm_mon是从0开始的,所以需要+1
  36.                                 sprintf(date_str, "%d-%02d-%02d",
  37.                                         timeinfo->tm_year + 1900,
  38.                                         timeinfo->tm_mon + 1,
  39.                                         timeinfo->tm_mday);
  40.                                 sprintf(sql, "insert into borrow_book values (%d,%d,'%s','%s','%s');", id, b_id, date_str, "NULL", "BORROWED");
  41.                                 mysql_query(mysql, sql);
  42.                                 sprintf(sql, "update book set Quantity = Quantity - 1 where B_ID = %d;", b_id);
  43.                                 mysql_query(mysql, sql);
  44.                                 printf("借阅成功!
  45. ");
  46.                                 return 0;
  47.                         }
  48.                 }
  49.                 p = p->next;
  50.         }
  51.         if (p == NULL) {
  52.                 printf("图书编号不存在
  53. ");
  54.         }
  55.         return 0;
  56. }
  57. //归还图书
  58. int return_book(int id, MYSQL_RES* res, MYSQL_ROW row, MYSQL* mysql, book* head)
  59. {
  60.         int b_id;
  61.         book* p = head;
  62.         char sql[256];
  63.         printf("请输入要归还的书籍编号:");
  64.         scanf("%d", &b_id);
  65.         while (p != NULL)
  66.         {
  67.                 if (b_id == p->B_ID)
  68.                 {
  69.                         time_t rawtime;
  70.                         struct tm* timeinfo;
  71.                         char date_str[11];
  72.                         time(&rawtime);
  73.                         timeinfo = localtime(&rawtime);
  74.                         sprintf(date_str, "%d-%02d-%02d",
  75.                                 timeinfo->tm_year + 1900,
  76.                                 timeinfo->tm_mon + 1,
  77.                                 timeinfo->tm_mday);
  78.                         sprintf(sql, "update book set Quantity = Quantity + 1 where B_ID = %d;", p->B_ID);
  79.                         mysql_query(mysql, sql);
  80.                         sprintf(sql, "update borrow_book set Return_time = '%s', State = '%s' where U_ID = %d AND B_ID = %d;"
  81.                                 , date_str, "RETURNED", id, p->B_ID);
  82.                         mysql_query(mysql, sql);
  83.                         printf("归还成功!
  84. ");
  85.                         break;
  86.                 }
  87.                 p = p->next;
  88.         }
  89.         if (p == NULL)
  90.         {
  91.                 printf("不存在该借出的图书!
  92. ");
  93.         }
  94.         return 0;
  95. }
复制代码
九.完整代码

备注:假如是C++要举行封装,可以创建对象book、manager、user等类,放入对应的布局体和函数方法即可实现,以下代码是按照C语言编写。
头文件:Library.h
  1. #pragma once
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<string.h>
  5. #include<mysql.h>
  6. #include<time.h>
  7. //结构体定义
  8. typedef struct manager_table
  9. {
  10.         int M_ID;
  11.         char M_Account[30];
  12.         char M_Password[30];
  13.         struct manager_table* next;
  14. }manager;
  15. typedef struct book_table
  16. {
  17.         int B_ID;
  18.         char B_NAME[30];
  19.         char Author[30];
  20.         char Publish[30];
  21.         float Price;
  22.         int Quantity;
  23.         struct book_table* next;
  24. }book;
  25. typedef struct user_table
  26. {
  27.         int U_ID;
  28.         char U_Account[30];
  29.         char U_Password[30];
  30.         struct user_table* next;
  31. }user;
  32. //函数定义
  33. //展示菜单
  34. void Menu();
  35. void manager_Menu();
  36. void reader_Menu(user* head);
  37. void show_Menu_user(user* head, MYSQL_RES* res, MYSQL_ROW row, MYSQL* mysql);
  38. //从数据库中加载书籍信息
  39. book* load_Book(book* head, MYSQL_RES* res, MYSQL_ROW row, MYSQL* mysql);
  40. //添加新管理员
  41. manager* Add_new_manager(manager* head, MYSQL* mysql);
  42. //添加新借书记录
  43. //borrow_book* Add_new_borrow(borrow_book* head, MYSQL* mysql);
  44. //从数据库中加载书籍信息
  45. book* load_Book(book* head, MYSQL_RES* res, MYSQL_ROW row, MYSQL* mysql);
  46. //从数据库中加载借阅信息
  47. //添加新书籍
  48. book* Add_new_book(book* head, MYSQL* mysql);
  49. //展示书籍信息
  50. void Show_All_book(book* head);
  51. //查找书籍信息
  52. void Search_book(book* head);
  53. //删除书籍信息
  54. book* Delete_Book(book* head, MYSQL* mysql);
  55. //修改书籍信息
  56. book* Change_book(book* head, MYSQL* mysql);
  57. //添加新用户
  58. user* Add_new_user(user* head, MYSQL* mysql);
  59. //展示所有的用户信息
  60. void Show_All_user(user* head);
  61. //从数据库中加载用户信息
  62. user* load_User(user* head, MYSQL_RES* res, MYSQL_ROW row, MYSQL* mysql);
  63. //从数据库中加载管理员信息
  64. user* load_Manager(user* head, MYSQL_RES* res, MYSQL_ROW row, MYSQL* mysql);
  65. //修改用户密码
  66. int Change_User_password(user* head, MYSQL* mysql);
  67. //用户登陆
  68. user* user_Login(user* head);
  69. //管理员登录
  70. manager* manager_Login(manager* head);
  71. //显示有库存的书籍
  72. void Show_remaining_book(MYSQL_RES* res, MYSQL_ROW row, MYSQL* mysql);
  73. //借阅图书
  74. int borrow_book(int id, MYSQL_RES* res, MYSQL_ROW row, MYSQL* mysql, book* head);
  75. //归还图书
  76. int return_book(int id, MYSQL_RES* res, MYSQL_ROW row, MYSQL* mysql, book* head);
复制代码
源文件:Library.c
  1. #define _CRT_SECURE_NO_WARNINGS 1#include"Library.h"//初始菜单void Menu(){        printf("***************************************");        printf("*      接待进入线上图书管理系统!     *");        printf("*                                     *");        printf("*            1.管理员登录             *");        printf("*            2.读者登录               *");        printf("*            3.读者注册               *");        printf("*            0.退出本系统             *");        printf("***************************************");}void manager_Menu(){        printf("***************************************");        printf("*            接待你,管理员            ");        printf("*                                     ");        printf("*            1.添加书籍              ");        printf("*            2.表现书籍              ");        printf("*            3.查找书籍               ");        printf("*            4.修改书籍               ");        printf("*            5.删除书籍               ");        printf("*            6.表现用户数据            ");        printf("*            7.返回主菜单              ");        printf("*            8.添加新管理员              ");        printf("*            0.退出本系统             ");        printf("***************************************");}void reader_Menu(user* head){        printf("***************************************");        printf("*          接待你,读者           ");        printf("*                                     ");        printf("*          1.借阅书籍                  ");        printf("*          2.归还书籍                  ");        printf("*          3.修改暗码                  ");        printf("*          4.返回主菜单                ");        printf("*          0.退出本系统                ");        printf("*                                     ");        printf("***************************************");}//从数据库中加载书籍信息book* load_Book(book* head, MYSQL_RES* res, MYSQL_ROW row, MYSQL* mysql){        book* p = NULL;        book* pcur = head;        //查询数据        mysql_query(mysql, "select * from book;");        //获取结果集        res = mysql_store_result(mysql);        //将值赋为链表        while (row = mysql_fetch_row(res))        {                p = NULL, pcur = head;                p = (book*)malloc(sizeof(book));                if (p == NULL)                {                        perror("malloc fail");                        exit(1);                }                if (head == NULL)                {                        head = p;                }                else                {                        while (pcur->next != NULL)                        {                                pcur = pcur->next;                        }                        pcur->next = p;                }                p->B_ID = atoi(row[0]);                strcpy(p->B_NAME, row[1]);                strcpy(p->Author, row[2]);                strcpy(p->Publish, row[3]);                p->Price = atoi(row[4]);                p->Quantity = atoi(row[5]);                p->next = NULL;        }        //释放结果集        mysql_free_result(res);        return head;}//添加新书籍book* Add_new_book(book* head, MYSQL* mysql){        book* newbook = (book*)malloc(sizeof(book));        if (newbook == NULL)        {                perror("malloc fail");                exit(1);        }        if (head == NULL)        {                head = newbook;        }        else        {                //找到尾节点                book* pcur = head;                while (pcur->next)                {                        pcur = pcur->next;                }                pcur->next = newbook;        }        printf("请输入书籍编号:");        scanf("%d", &(newbook->B_ID));        //检测编号重复        printf("请输入名称:");        scanf("%s", newbook->B_NAME);        printf("请输入作者:");        scanf("%s", newbook->Author);        printf("请输入出书社:");        scanf("%s", newbook->Publish);        printf("请输入价格:");        scanf("%f", &(newbook->Price));        printf("请输入库存量:");        scanf("%d", &(newbook->Quantity));        //将新增书籍信息存入数据库        char sql[256];        sprintf(sql, "insert into book values('%d','%s','%s','%s','%f','%d')",                newbook->B_ID, newbook->B_NAME, newbook->Author, newbook->Publish, newbook->Price, newbook->Quantity);        mysql_query(mysql, sql);        newbook->next = NULL;        printf("添加乐成!");        return head;}//添加新用户user* Add_new_user(user* head, MYSQL* mysql){        user* newuser = (user*)malloc(sizeof(user));        user* pcur = head;        if (newuser == NULL)        {                perror("malloc fail");                exit(1);        }        if (head == NULL)        {                head = newuser;        }        else        {                //找到尾节点                book* pcur = head;                while (pcur->next)                {                        pcur = pcur->next;                }                pcur->next = newuser;        }        printf("请输入用户编号:");        scanf("%d", &(newuser->U_ID));        printf("请输入用户账号:");        scanf("%s", newuser->U_Account);        printf("请输入用户暗码:");        scanf("%s", newuser->U_Password);        char sql[256];        sprintf(sql, "insert into user values('%d','%s','%s')",                newuser->U_ID, newuser->U_Account, newuser->U_Password);        mysql_query(mysql, sql);        newuser->next = NULL;        printf("添加乐成!");        return head;}//添加新管理员manager* Add_new_manager(manager* head, MYSQL* mysql){        manager* newmanager = (manager*)malloc(sizeof(manager));        user* pcur = head;        if (newmanager == NULL)        {                perror("malloc fail");                exit(1);        }        if (head == NULL)        {                head = newmanager;        }        else        {                //找到尾节点                book* pcur = head;                while (pcur->next)                {                        pcur = pcur->next;                }                pcur->next = newmanager;        }        printf("请输入管理员编号:");        scanf("%d", &(newmanager->M_ID));        printf("请输入管理员账号:");        scanf("%s", newmanager->M_Account);        printf("请输入管理员暗码:");        scanf("%s", newmanager->M_Password);        char sql[256];        sprintf(sql, "insert into manager values('%d','%s','%s')",                newmanager->M_ID, newmanager->M_Account, newmanager->M_Password);        mysql_query(mysql, sql);        newmanager->next = NULL;        printf("添加乐成!");        return head;}//展示书籍信息void Show_All_book(book* head){        book* p = head;        printf("===================================================================================");        printf("|书名                    |作者            |出书社          |价格  |库存  |编号    |");        while (p != NULL) {                printf("-----------------------------------------------------------------------------------");                printf("|%-24s|%-16s|%-16s|%-6.2f|%-6d|%-8d|", p->B_NAME, p->Author, p->Publish, p->Price, p->Quantity, p->B_ID);                p = p->next;        }        printf("===================================================================================");}//查找书籍信息void Search_book(book* head){        book* p = head;        char search[100];        int option;        printf("=======================");        printf("|   请输入查询的项目  |");        printf("|    1.图书名         |");        printf("|    2.书作者         |");        printf("|    3.出书社         |");        printf("=======================");        scanf("%d", &option);        while (1)        {                printf("=======================");                printf("|   请输入查询的内容   |");                printf("=======================");                scanf("%s", search);                printf("===================================================================================");                printf("|书名                    |作者            |出书社          |价格  |库存  |编号    |");                int flag = 1;                while (p != NULL)                {                        switch (option)                        {                        case 1:                                if (strstr(p->B_NAME, search))                                {                                        flag = 0;                                        printf("-----------------------------------------------------------------------------------");                                        printf("|%-24s|%-16s|%-16s|%-6.2f|%-6d|%-8d|", p->B_NAME, p->Author, p->Publish, p->Price, p->Quantity, p->B_ID);                                }                                break;                        case 2:                                if (strstr(p->Author, search))                                {                                        flag = 0;                                        printf("-----------------------------------------------------------------------------------");                                        printf("|%-24s|%-16s|%-16s|%-6.2f|%-6d|%-8d|", p->B_NAME, p->Author, p->Publish, p->Price, p->Quantity, p->B_ID);                                }                                break;                        case 3:                                if (strstr(p->Publish, search))                                {                                        flag = 0;                                        printf("-----------------------------------------------------------------------------------");                                        printf("|%-24s|%-16s|%-16s|%-6.2f|%-6d|%-8d|", p->B_NAME, p->Author, p->Publish, p->Price, p->Quantity, p->B_ID);                                }                                break;                        }                        p = p->next;                }                if (flag)                {                        printf("-----------------------------------------------------------------------------------");                        printf("|%-24s|%-16s|%-16s|%-6s|%-6s|%-8s|", "无", "无", "无", "无", "无", "无");                }                printf("===================================================================================");                break;        }}//删除书籍信息
  2. book* Delete_Book(book* head, MYSQL* mysql)
  3. {
  4.         book* p = head;
  5.         book* pcur = NULL;
  6.         int id, option;
  7.         char sql[256];
  8.         printf("请输入删除书籍的编号:");
  9.         scanf("%d", &id);
  10.         while (p)
  11.         {
  12.                 if (id == p->B_ID)
  13.                 {
  14.                         break;
  15.                 }
  16.                 pcur = p;
  17.                 p = p->next;
  18.         }
  19.         if (p == NULL)
  20.         {
  21.                 printf("未找到此ID编号的书籍
  22. ");
  23.                 return 0;
  24.         }
  25.         else
  26.         {
  27.                 printf("===================================================================================
  28. ");
  29.                 printf("|书名                    |作者            |出版社          |价格  |库存  |编号    |
  30. ");
  31.                 printf("-----------------------------------------------------------------------------------
  32. ");
  33.                 printf("|%-24s|%-16s|%-16s|%-6.2f|%-6d|%-8d|
  34. ", p->B_NAME, p->Author, p->Publish, p->Price, p->Quantity, p->B_ID);
  35.                 printf("===================================================================================
  36. ");
  37.                 printf("================
  38. ");
  39.                 printf("|是否确定删除?|
  40. ");
  41.                 printf("|0.取消  1.确定|
  42. ");
  43.                 printf("================
  44. ");
  45.                 scanf("%d", &option);
  46.                 switch (option)
  47.                 {
  48.                 case 1:
  49.                         sprintf(sql, "delete from book where B_ID = %d;", id);
  50.                         mysql_query(mysql, sql);
  51.                         if (p == head)
  52.                         {
  53.                                 head = head->next;
  54.                                 free(p);
  55.                         }
  56.                         else
  57.                         {
  58.                                 pcur->next = p->next;
  59.                                 free(p);
  60.                         }
  61.                         printf("已成功删除
  62. ");
  63.                         option = 0;
  64.                         break;
  65.                 case 0:
  66.                         printf("取消删除
  67. ");
  68.                         break;
  69.                 default:
  70.                         printf("输入错误
  71. ");
  72.                         break;
  73.                 }
  74.         }
  75.         return head;
  76. }
  77. //修改书籍信息book* Change_book(book* head, MYSQL* mysql){        int id;        int option = 0;        book* p = head;        char sql[256];        printf("请输入你要修改的书籍编号:");        scanf("%d", &id);        while (p)        {                if (id == p->B_ID)                {                        break;                }                p = p->next;        }        if (p == NULL)        {                printf("未找到此ID编号的书籍");                return 0;        }        else        {                do                {                        printf("===================================================================================");                        printf("|书名                    |作者            |出书社          |价格  |库存  |编号    |");                        printf("-----------------------------------------------------------------------------------");                        printf("|%-24s|%-16s|%-16s|%-6.2f|%-6d|%-8d|", p->B_NAME, p->Author, p->Publish, p->Price, p->Quantity, p->B_ID);                        printf("===================================================================================");                        printf("================");                        printf("|请选择修改的内容|");                        printf("|     1.书名    |");                        printf("|     2.作者    |");                        printf("|    3.出书社   |");                        printf("|     4.价格    |");                        printf("|    5.库存量   |");                        printf("|   0.退出修改  |");                        printf("================");                        scanf("%d", &option);                        switch (option)                        {                        case 1:                                printf("请输入修改后的书名:");                                scanf("%s", p->B_NAME);                                break;                        case 2:                                printf("请输入修改后的作者:");                                scanf("%s", p->Author);                                break;                        case 3:                                printf("请输入修改后的出书社:");                                scanf("%s", p->Publish);                                break;                        case 4:                                printf("请输入修改后的价格:");                                scanf("%f", &(p->Price));                                break;                        case 5:                                printf("请输入修改后的库存量:");                                scanf("%d", &(p->Quantity));                                break;                        case 0:                                break;                        }                } while (option);        }        sprintf(sql, "update book set B_NAME = '%s', Author = '%s', Publish = '%s', Price = %f, Quantity = %d where B_ID = %d;",                p->B_NAME, p->Author, p->Publish, p->Price, p->Quantity, p->B_ID);        mysql_query(mysql, sql);        printf("修改乐成!");        return 0;}//展示全部的用户信息void Show_All_user(user* head){        user* p = head;        printf("=========================================================");        printf("|用户编号                   |账号          |暗码          |");        while (p != NULL) {                printf("---------------------------------------------------------");                printf("|%-27d|%-14s|%-14s|", p->U_ID, p->U_Account, p->U_Password);                p = p->next;        }        printf("=========================================================");}//从数据库中加载用户信息user* load_User(user* head, MYSQL_RES* res, MYSQL_ROW row, MYSQL* mysql){        user* p = NULL, * pr = head;        mysql_query(mysql, "select * from user;");        res = mysql_store_result(mysql);        while (row = mysql_fetch_row(res))        {                p = NULL, pr = head;                p = (user*)malloc(sizeof(user));                if (p == NULL)                {                        perror("malloc fail");                        exit(1);                }                if (head == NULL)                {                        head = p;                }                else                {                        while (pr->next != NULL)                        {                                pr = pr->next;                        }                        pr->next = p;                }                p->U_ID = atoi(row[0]);                strcpy(p->U_Account, row[1]);                strcpy(p->U_Password, row[2]);                p->next = NULL;        }        mysql_free_result(res);        return head;}//从数据库中加载管理员信息user* load_Manager(user* head, MYSQL_RES* res, MYSQL_ROW row, MYSQL* mysql){        manager* p = NULL, * pr = head;        mysql_query(mysql, "select * from manager;");        res = mysql_store_result(mysql);        while (row = mysql_fetch_row(res))        {                p = NULL, pr = head;                p = (manager*)malloc(sizeof(manager));                if (p == NULL)                {                        perror("malloc fail");                        exit(1);                }                if (head == NULL)                {                        head = p;                }                else                {                        while (pr->next != NULL)                        {                                pr = pr->next;                        }                        pr->next = p;                }                p->M_ID = atoi(row[0]);                strcpy(p->M_Account, row[1]);                strcpy(p->M_Password, row[2]);                p->next = NULL;        }        mysql_free_result(res);        return head;}//修改用户暗码int Change_User_password(user* head, MYSQL* mysql){        char account[30];        char password[30];        char sql[256];        int option;        user* p = head;        printf("请输入用户账号:");        scanf("%s", account);        while (p)        {                if (!strcmp(account, p->U_Account))                {                        break;                }                p = p->next;        }        if (p == NULL)        {                printf("没有查找到该用户");                return 0;        }        else        {                printf("==============================");                printf("|账号                |编号  |");                printf("------------------------------");                printf("|%-20s|%6d|", p->U_Account, p->U_ID);                printf("==============================");        }        while (1)        {                printf("请输入该账号暗码:");                scanf("%s", password);                if (strcmp(password, p->U_Password) == 0)                {                        printf("请输入新暗码:");                        scanf("%s", password);                        sprintf(sql, "update user set U_Password = '%s' where U_ID = %d;", password, p->U_ID);                        mysql_query(mysql, sql);                        printf("修改乐成!");                        break;                }                else                {                        printf("暗码错误,请重试");                }        }}//用户登岸user* user_Login(user* head){        user* p = head;        char account[30], password[30];        printf("请输入账号:");        scanf("%s", account);        while (p != NULL)        {                if (!strcmp(account, p->U_Account))                {                        break;                }                p = p->next;        }        if (p == NULL)        {                printf("没有查找到该账号!");                return 0;        }        else        {                while (1)                {                        printf("请输入暗码:");                        scanf("%s", password);                        if (strcmp(password, p->U_Password) == 0)                        {                                printf("乐成登录!");                                break;                        }                        else {                                printf("暗码错误!请重新输入!");                        }                }        }        return p;}//管理员登录manager* manager_Login(manager* head)
  78. {
  79.         manager* p = head;
  80.         char account[30], password[30];
  81.         printf("请输入账号:");
  82.         scanf("%s", account);
  83.         while (p != NULL)
  84.         {
  85.                 if (!strcmp(account, p->M_Account))
  86.                 {
  87.                         break;
  88.                 }
  89.                 p = p->next;
  90.         }
  91.         if (p == NULL)
  92.         {
  93.                 printf("没有查找到该账号!
  94. ");
  95.                 return NULL;
  96.         }
  97.         else
  98.         {
  99.                 while (1)
  100.                 {
  101.                         printf("请输入密码:");
  102.                         scanf("%s", password);
  103.                         if (strcmp(password, p->M_Password) == 0)
  104.                         {
  105.                                 printf("成功登录!
  106. ");
  107.                                 break;
  108.                         }
  109.                         else {
  110.                                 printf("密码错误!请重新输入!
  111. ");
  112.                         }
  113.                 }
  114.         }
  115.         return p;
  116. }
  117. //表现有库存的书籍void Show_remaining_book(MYSQL_RES* res, MYSQL_ROW row, MYSQL* mysql){        mysql_query(mysql, "select * from book;");        res = mysql_store_result(mysql);        printf("===================================================================================");        printf("|书名                    |作者            |出书社          |库存量         |编号    ");        while (row = mysql_fetch_row(res)) {                //若余量大于0则输出                if (atoi(row[5]) > 0) {                        printf("-----------------------------------------------------------------------------------");                        printf("|%-24s|%-16s|%-16s|%-15d|%-8d", row[1], row[2], row[3], atoi(row[5]), atoi(row[0]));                }        }        printf("===================================================================================");}//借阅图书
  118. int borrow_book(int id, MYSQL_RES* res, MYSQL_ROW row, MYSQL* mysql, book* head)
  119. {
  120.         Show_remaining_book(res, row, mysql);
  121.         char sql[256];
  122.         int b_id;
  123.         book* p = head;
  124.         printf("请输入要借阅的书籍编号:");
  125.         scanf("%d", &b_id);
  126.         while (head != NULL)
  127.         {
  128.                 if (b_id == p->B_ID)
  129.                 {
  130.                         sprintf_s(sql, sizeof(sql), "select * from book where B_ID = %d;", b_id);
  131.                         mysql_query(mysql, sql);
  132.                         res = mysql_store_result(mysql);
  133.                         row = mysql_fetch_row(res);
  134.                         if (atoi(row[5]) <= 0)
  135.                         {
  136.                                 printf("库存量不足!
  137. ");
  138.                                 return 0;
  139.                         }
  140.                         else
  141.                         {
  142.                                 time_t rawtime;
  143.                                 struct tm* timeinfo;
  144.                                 char date_str[11]; // 足够存储 "YYYY-MM-DD" 格式的日期字符串
  145.                                 // 获取当前时间的时间戳
  146.                                 time(&rawtime);
  147.                                 // 将时间戳转换为本地时间
  148.                                 timeinfo = localtime(&rawtime);
  149.                                 // 使用sprintf将年、月、日格式化为字符串
  150.                                 // 注意:tm_year是从1900年开始的,所以需要+1900
  151.                                 // tm_mon是从0开始的,所以需要+1
  152.                                 sprintf(date_str, "%d-%02d-%02d",
  153.                                         timeinfo->tm_year + 1900,
  154.                                         timeinfo->tm_mon + 1,
  155.                                         timeinfo->tm_mday);
  156.                                 sprintf(sql, "insert into borrow_book values (%d,%d,'%s','%s','%s');", id, b_id, date_str, "NULL", "BORROWED");
  157.                                 mysql_query(mysql, sql);
  158.                                 sprintf(sql, "update book set Quantity = Quantity - 1 where B_ID = %d;", b_id);
  159.                                 mysql_query(mysql, sql);
  160.                                 printf("借阅成功!
  161. ");
  162.                                 return 0;
  163.                         }
  164.                 }
  165.                 p = p->next;
  166.         }
  167.         if (p == NULL) {
  168.                 printf("图书编号不存在
  169. ");
  170.         }
  171.         return 0;
  172. }
  173. //归还图书
  174. int return_book(int id, MYSQL_RES* res, MYSQL_ROW row, MYSQL* mysql, book* head)
  175. {
  176.         int b_id;
  177.         book* p = head;
  178.         char sql[256];
  179.         printf("请输入要归还的书籍编号:");
  180.         scanf("%d", &b_id);
  181.         while (p != NULL)
  182.         {
  183.                 if (b_id == p->B_ID)
  184.                 {
  185.                         time_t rawtime;
  186.                         struct tm* timeinfo;
  187.                         char date_str[11];
  188.                         time(&rawtime);
  189.                         timeinfo = localtime(&rawtime);
  190.                         sprintf(date_str, "%d-%02d-%02d",
  191.                                 timeinfo->tm_year + 1900,
  192.                                 timeinfo->tm_mon + 1,
  193.                                 timeinfo->tm_mday);
  194.                         sprintf(sql, "update book set Quantity = Quantity + 1 where B_ID = %d;", p->B_ID);
  195.                         mysql_query(mysql, sql);
  196.                         sprintf(sql, "update borrow_book set Return_time = '%s', State = '%s' where U_ID = %d AND B_ID = %d;"
  197.                                 , date_str, "RETURNED", id, p->B_ID);
  198.                         mysql_query(mysql, sql);
  199.                         printf("归还成功!
  200. ");
  201.                         break;
  202.                 }
  203.                 p = p->next;
  204.         }
  205.         if (p == NULL)
  206.         {
  207.                 printf("不存在该借出的图书!
  208. ");
  209.         }
  210.         return 0;
  211. }
复制代码
源文件:Test.c
在该文件前要界说自己的数据库数据:

  1. Test02()
  2. {
  3.         MYSQL_RES* res = NULL;//查询结果集
  4.         MYSQL_ROW row = NULL;//记录结构体
  5.         //初始化
  6.         MYSQL* con = mysql_init(NULL);
  7.         //设置字符编码,以防出现乱码
  8.         mysql_options(con, MYSQL_SET_CHARSET_NAME, "GBK");
  9.         //开始连接
  10.         if (!mysql_real_connect(con, host, use, password, database_name, port, NULL, 0))
  11.         {
  12.                 fprintf(stderr, "connect fail", mysql_error(con));
  13.                 return -1;
  14.         }
  15.         book* book_head = NULL;
  16.         user* user_head = NULL;
  17.         manager* manager_head = NULL;
  18.         book_head = load_Book(book_head, res, row, con);
  19.         user_head = load_User(user_head, res, row, con);
  20.         manager_head = load_Manager(manager_head, res, row, con);
  21.         //主体
  22.        
  23.         int input = 0;
  24.         do
  25.         {
  26.                 Menu();
  27.                 scanf("%d", &input);
  28.                 switch (input)
  29.                 {
  30.                 case 1:
  31.                         if (manager_Login(manager_head))
  32.                         {
  33.                                 int input2 = 0;
  34.                                 do
  35.                                 {
  36.                                         manager_Menu();
  37.                                         scanf("%d", &input2);
  38.                                         switch (input2)
  39.                                         {
  40.                                         case 1:
  41.                                                 Add_new_book(book_head, con);
  42.                                                 break;
  43.                                         case 2:
  44.                                                 Show_All_book(book_head);
  45.                                                 break;
  46.                                         case 3:
  47.                                                 Search_book(book_head);
  48.                                                 break;
  49.                                         case 4:
  50.                                                 Change_book(book_head,con);
  51.                                                 break;
  52.                                         case 5:
  53.                                                 Delete_Book(book_head, con);
  54.                                                 break;
  55.                                         case 6:
  56.                                                 Show_All_user(user_head);
  57.                                                 break;
  58.                                         case 7:
  59.                                                 input2 = 0;
  60.                                                 break;
  61.                                         case 8:
  62.                                                 Add_new_manager(manager_head, con);
  63.                                                 break;
  64.                                         case 0:
  65.                                                 input2 = 0;
  66.                                                 input = 0;
  67.                                                 break;
  68.                                         }
  69.                                 } while (input2);
  70.                         }
  71.                         break;
  72.                 case 2:
  73.                         printf("
  74. ");
  75.                         user * cur = user_Login(user_head);
  76.                         if (cur)
  77.                         {
  78.                                 int input3 = 0;
  79.                                 do
  80.                                 {
  81.                                         reader_Menu(user_head);
  82.                                         scanf("%d", &input3);
  83.                                         switch (input3)
  84.                                         {
  85.                                         case 1:
  86.                                                 borrow_book(cur->U_ID, res, row, con, book_head);
  87.                                                 break;
  88.                                         case 2:
  89.                                                 return_book(cur->U_ID, res, row, con, book_head);
  90.                                                 break;
  91.                                         case 3:
  92.                                                 Change_User_password(user_head, con);
  93.                                                 break;
  94.                                         case 4:
  95.                                                 input3 = 0;
  96.                                                 break;
  97.                                         case 0:
  98.                                                 input3 = 0;
  99.                                                 input = 0;
  100.                                                 break;
  101.                                         }
  102.                                 } while (input3);
  103.                         }
  104.                         break;
  105.                 case 3:
  106.                         Add_new_user(user_head, con);
  107.                         break;
  108.                 }
  109.         } while (input);
  110.        
  111.         printf("再会!
  112. ");
  113.         //关闭连接
  114.         mysql_close(con);
  115. }
  116. int main()
  117. {
  118.         //Test01();
  119.         Test02();
  120.         return 0;
  121. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表