zoukankan      html  css  js  c++  java
  • 一个简单用c和mysql的示范程序

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <string.h>
      4 #include <mysql/mysql.h>
      5 #include <signal.h>
      6 
      7 #define  error(x) printf("ERROR %d: %s\n", mysql_errno(x), mysql_error(x))
      8 #define SQL_LEN 256
      9 
     10 /*
     11  * create table BEAL(
     12  * NAME CHAR(8) NOT NULL,
     13  * MONEY INTEGER NOT NULL,
     14  * DATE DATE NOT NULL,
     15  * TIME TIME NOT NULL
     16  * )
     17  */
     18 
     19 
     20 
     21 MYSQL mysql;
     22 
     23 void DEAL();
     24 void insert(MYSQL *mysql);
     25 void delete(MYSQL *mysql);
     26 void show_user(MYSQL *mysql);
     27 void show(MYSQL *mysql, char *name);
     28 void help();
     29 void bye();
     30 
     31 void help()
     32 {
     33         printf("\n------------------------------------------\n");
     34         printf("输入 0    : 显示用户\n");
     35         printf("输入 1    : 显示数据\n");
     36         printf("输入 2    : 插入数据\n");
     37         printf("输入 3    : 删除数据\n");
     38         printf("输入用户名: 显示该用户的数据\n");
     39         printf("Ctrl + C  : 退出\n");
     40         printf("------------------------------------------\n");
     41 
     42 }
     43 
     44 void bye()
     45 {
     46         mysql_close(&mysql);
     47         printf("\nbye!\n");
     48         exit(0);
     49 }
     50 
     51 void insert(MYSQL *mysql)
     52 {
     53         char sql[SQL_LEN];
     54         char name[8];
     55         float money;
     56 
     57         printf("插入格式: lulu 100\n");
     58         scanf("%s%f", name, &money);
     59         memset(sql, 0, SQL_LEN);
     60         sprintf(sql, "insert into DEAL values('%s', %f, curdate(), curtime())", name, money);
     61         printf("插入数据 [%s]\n", sql);
     62 
     63         if(mysql_real_query(mysql, sql, strlen(sql)))
     64         {
     65                 error(mysql);
     66                 return;
     67         }
     68 }
     69 
     70 void delete(MYSQL *mysql)
     71 {
     72         char sql[SQL_LEN];
     73         char name[8];
     74         char date[16];
     75         char time[16];
     76 
     77         printf("删除格式: lulu 2012-11-06 09:45:10\n");
     78         scanf("%s%s%s", name, date, time);
     79         memset(sql, 0, SQL_LEN);
     80         sprintf(sql, "delete from DEAL where NAME = '%s' AND DATE = '%s' AND TIME = '%s'", name, date, time);
     81 
     82         printf("删除数据 [%s]\n", sql);
     83 
     84         if(mysql_real_query(mysql, sql, strlen(sql)))
     85         {
     86                 error(mysql);
     87                 return;
     88         }
     89 }
     90 
     91 void show(MYSQL *mysql, char *name)
     92 {
     93         MYSQL_RES *res;
     94         MYSQL_ROW row;
     95         char sql[SQL_LEN];
     96         memset(sql, 0, SQL_LEN);
     97         if(name == NULL)
     98                 sprintf(sql, "select * from DEAL");
     99         else
    100                 sprintf(sql, "select * from DEAL where NAME = '%s'", name);
    101         printf("显示数据 [%s]\n", sql);
    102 
    103         if(mysql_real_query(mysql, sql, strlen(sql)))
    104         {
    105                 error(mysql);
    106                 return;
    107         }
    108 
    109         res = mysql_store_result(mysql);
    110         printf("+----------+------------+--------------+------------+\n");
    111         printf("|  %8s  |   %8s   |    %8s    |   %8s   |\n",  "用户", "金额", "日期", "时间");
    112         printf("+----------+------------+--------------+------------+\n");
    113         float sum = 0;
    114         while ((row = mysql_fetch_row(res)))
    115         {
    116                 printf("|");
    117                 int i;
    118                 int num = mysql_num_fields(res);
    119                 for(i = 0; i < num; i++)
    120                 {
    121                         if(i == 1)
    122                                 sum += atof(row[i]);
    123                         printf("%8s  |  ", row[i]);
    124                 }
    125                 printf("\n");
    126         }
    127         printf("+----------+------------+--------------+------------+\n");
    128         printf("%s 总金额: %.2f\n\n", (name == NULL ? "" : name), sum);
    129         mysql_free_result(res);
    130 }
    131 
    132 void show_user(MYSQL *mysql)
    133 {
    134         MYSQL_RES *res;
    135         MYSQL_ROW row;
    136         char sql[SQL_LEN];
    137         memset(sql, 0, SQL_LEN);
    138                 sprintf(sql, "select NAME from DEAL GROUP BY NAME");
    139         printf("显示数据 [%s]\n", sql);
    140 
    141         if(mysql_real_query(mysql, sql, strlen(sql)))
    142         {
    143                 error(mysql);
    144                 return;
    145         }
    146 
    147         res = mysql_store_result(mysql);
    148         printf("+----------+\n");
    149         printf("|  %8s  |\n",  "用户");
    150         printf("+----------+\n");
    151         float sum = 0;
    152         while ((row = mysql_fetch_row(res)))
    153         {
    154                 printf("|");
    155                 int i;
    156                 int num = mysql_num_fields(res);
    157                 for(i = 0; i < num; i++)
    158                 {
    159                         if(i == 1)
    160                                 sum += atof(row[i]);
    161                         printf("%8s  |  ", row[i]);
    162                 }
    163                 printf("\n");
    164         }
    165         printf("+----------+\n");
    166         mysql_free_result(res);
    167 }
    168 
    169 void DEAL()
    170 {
    171         mysql_init(&mysql);
    172         if(!mysql_real_connect(&mysql, 
    173                                 "localhost", "coolulu", "猜猜看", "BANK", 0, NULL, 0))
    174                 error(&mysql);
    175         else
    176                 printf("success connect...\n");
    177         help();
    178         char name[8];
    179 
    180         while(1)
    181         {
    182                 printf("$ 输入数字或用户名:");
    183                 scanf("%s", name);
    184 
    185                 switch(name[0])
    186                 {
    187                 case '0':
    188                         show_user(&mysql);break;
    189                 case '1':
    190                         show(&mysql, NULL);break;
    191                 case '2':
    192                         insert(&mysql);break;
    193                 case '3':
    194                         delete(&mysql);break;
    195                 default:
    196                         show(&mysql, name);
    197                 }
    198 
    199                 memset(name, 0, strlen(name));
    200         }
    201 }
    202 
    203 int main()
    204 {
    205         signal(SIGINT, bye);
    206         DEAL();
    207         return 0;
    208 }
     1 create database BANK;
     2 
     3 use BANK;
     4 
     5 create table DEAL( 
     6 NAME CHAR(8) NOT NULL, 
     7 MONEY INTEGER NOT NULL, 
     8 DATE DATE NOT NULL, 
     9 TIME TIME NOT NULL 
    10 );
    11 
    12 insert into DEAL values('A', 10, curdate(), curtime());
    13 insert into DEAL values('B', 11, curdate(), curtime());
    14 insert into DEAL values('C', 12, curdate(), curtime());
    15 insert into DEAL values('D', 13, curdate(), curtime());
    16 insert into DEAL values('E', 14, curdate(), curtime());
    17 insert into DEAL values('F', 15, curdate(), curtime());

    数据库叫 BANK

    表 DEAL

    1. /*
    2.  * create table DEAL( 
    3.  * NAME CHAR(8) NOT NULL, 
    4.  * MONEY INTEGER NOT NULL, 
    5.  * DATE DATE NOT NULL, 
    6.  * TIME TIME NOT NULL 
    7.  * ) 
    8.  */ 

     

    coolulu@ubuntu:~/code/mysql/BANK$ cat makefile
    deal:
            gcc -o deal deal.c `mysql_config --cflags --libs`
    clean:
            rm deal

    或者

     $gcc -o deal deal.c -I/usr/include/mysql -lmysqlclient -L/usr/lib/mysql

  • 相关阅读:
    面试题15 链表中倒数第k个结点
    面试题14 调整数组顺序使奇数位于偶数前面
    面试题13 在O(1)时间删除链表结点
    面试题12 打印1到最大的N位数
    面试题11 数值的整数次方
    面试题10 二进制中1的个数
    面试题9 斐波那契数列
    面试题8 旋转数组的最小数字
    关于神经网络训练的一些建议笔记
    两篇将rf和boosting方法用在搜索排序上的paper
  • 原文地址:https://www.cnblogs.com/coolulu/p/4084902.html
Copyright © 2011-2022 走看看