首先MySQL基础语法就不说了就增删改查,网上一找一大堆。API函数在MySQL官网上面都有。下面会主要介绍几个常用的。
MYSQL C语言API

1、云服务器选择

我选择的是腾讯云服务器,学生认证后很便宜,一年才90多人民币。
3月起租才27RMB。如果同时用腾讯云服务器的小伙伴注意咯,购买时候选择的是Ubuntu18.04的,但是不知道怎么回事,默认的c/c++开发环境是用不了的,测试你会发现提示找不到函数头文件。解决方法:
删除gcc安装和配置文件。

sudo apt-get --purge remove gcc

重新安装

sudo apt-get install gcc

一般上述操作执行完就行了,g++同理。

2、MySQL的安装

1.服务器的安装:
sudo apt-get install mysql-server
2、客户端的安装
sudo apt-get install mysql-client
3.  开发包的安装
sudo apt-get install libmysqlclient-dev

注意在安装的时候会有账户和密码的确认,但是xhsell连接服务器没有界面,所以直接enter跳过就行,Ubuntu下安装的时候要注意。

这个地方填写你的密码就行了。
安装完成检测一下:
ps:MySQL要以root身份运行

netstat -tap | grep mysql


服务器端安装方法就是同上一样,除了密码确认。默认是你的root和root密码,密码不是root密码的话就123456试一下。

启用MySQL:

service mysql start

进入MySQL:

mysql -u 用户名(root) -p


简单测试一下:

修改配置

#号注释掉只能本地连接,允许网络连接

进入MySQL设置用户访问权限:
这部分我试了好几次没成功,网上找了一个大佬写的博客成功了。
grant all privileges on *.* to root@"%" identified by "password" with grant option;

.:第一个代表数据库名;第二个代表表名。这里的意思是所有数据库里的所有表都授权给用户

root:授予root账号

“%”:表示授权的用户IP可以指定,这里代表任意的IP地址都能访问MySQL数据库。

“password”:分配账号对应的密码,这里密码自己替换成你的mysql root帐号密码。

flush privileges;
刷新权限信息,也即是让我们所作的设置马上生效。


测试:

重启MySQL服务/etc/init.d/mysql restart

连接成功
下面讲一些常用的API函数:

函数头文件:#include "mysql.h"/usr/include/mysql 头文件路径-lmysqlclient //这个库路径是已经在系统变量中了
函数原型:MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)
函数参数:mysql : 数据库需要的结构体 需要用 mysql_init(&mysql);//初始化数据库结构体这个结构体不需要了解 你只需要申请一个变量取地址给函数传进去即可了相当于 FILE * 指针  回头给后续函数用的东西host  :主机名 --- "localhost" NULLuser  : "root"  用户名passwd: "1"    密码db    : 数据库的名字 "my_data"port  : 端口号--负责网络连接数据库的时候需要提供的不需要提供直接填 0即可unix_socket :网络套接字 也不需要提供 填 NULL即可client_flag :直接 填  0
/**********************************************************************/
函数功能:操作数据库的函数,相当于之前见过system()
函数头文件 :"mysql.h"
函数原型:int mysql_query(MYSQL *mysql, const char *query)
函数参数:    mysql:连接成功后返回的数据库句柄query :数据的指令
函数返回值:0  成功-1 失败/********************************************************************/
函数功能:关闭数据库的连接
函数头文件:#include "mysql.h"
函数原型:    void mysql_close(MYSQL *mysql)
函数参数:        连接函数返回的数据库结构体句柄
函数返回值:   空
/******************************************************************/
如何查看数据库返回的信息?
函数功能:专门查看数据库返回的信息的
函数原型:    MYSQL_RES *mysql_store_result(MYSQL *mysql)
函数参数:MYSQL *mysql : 数据库句柄
函数返回值:把数据库操作返回的内容存到 MYSQL_RES *  结构体里面/********************************************************************/
函数功能:通过数据返回的结构体得到内容的行和列
函数原型:    unsigned int mysql_num_fields(MYSQL_RES* res) // 列my_ulonglong mysql_num_rows(MYSQL_RES *result) //行
函数参数:result : 数据库返回信息的结构体
函数返回值:返回的就是行和列
/***********************************************************************/
函数功能:得到返回信息的下一行整行信息
函数原型:    MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
函数参数:    result : 数据库返回信息的结构体
函数返回值:   就是这一行内容的双重指针char ** 这样一行内容的指针数组

数据库示例:
我的ip地址是服务器ip就给屏蔽了哈

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "unistd.h"
#include "fcntl.h"
#include "sys/types.h"
#include "mysql.h"
#include "stdint.h"
int main(void)
{MYSQL mysql;MYSQL * mysql_con=NULL;my_ulonglong row;unsigned int columns;MYSQL_RES * mysql_rel;MYSQL_ROW row_str;MYSQL_FIELD * columns_name;//初始化数据库结构体mysql_init(&mysql);//连接数据库mysql_con=mysql_real_connect(&mysql,"****.****.****.****","root","123456","jason_data",3306,NULL,0);if(mysql_con==NULL){perror("mysql_real_connect");return 0;}printf("数据库jason_data连接成功\n");mysql_query(mysql_con,"select * from jason");//获得数据库查询到的信息mysql_rel=mysql_store_result(mysql_con);//根据数据库查询的信息获取行号row=mysql_num_rows(mysql_rel);//根据数据库查询的消息获得列号columns=mysql_num_fields(mysql_rel);printf("jason表的行号为:%lld \n",row);printf("jason表的列号为:%d \n",columns);for(int k=0;k<columns;k++){columns_name=mysql_fetch_field(mysql_rel);printf("%-8s\t",columns_name->name);}printf("\n");for(int i=0;i<row;i++){//检索表的下一行row_str=mysql_fetch_row(mysql_rel);for(int j=0;j<columns;j++){printf("%-8s\t",row_str[j]); }printf("\n");}mysql_free_result(mysql_rel);mysql_close(mysql_con);return 0;}

3、数据库实战

模拟银行管理系统,用户开户,登陆,查询余额,转账等。
数据库端在腾讯云服务器。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql.h>
#include <unistd.h>
#include <sys/types.h>
char name[20]={0};
char tel[20]={0};
char passwd[20]={0};
char log_tel[200]={0};//登录tel
char log_passwd[200]={0};//登录密码
char myself_money[1024]={0};
char trans_dol[20]={0};
int log_in(void);
int menu(void);
int balance(void);//余额查询
int sava(void);//存钱
int transfer(void);//转账
int main(void)
{if(log_in()){menu();}return 0;
}
int log_in(void)
{while(1){int n=0;char passwd_verify[20]={0};char mysql_buf[200]={0};MYSQL mysql;MYSQL * mysql_con=NULL;//连接数据库返回值my_ulonglong row=0;//查询行号unsigned int columns=0;//查询列号MYSQL_RES * mysql_rel=NULL;//数据库查询状态MYSQL_ROW row_str=NULL;//检索表下一行MYSQL_FIELD * columns_name=NULL;//列名printf("     Welcome to Jason Banking System        \n");printf("********************************************\n");printf("      开户[1]               登录[2]           \n");printf("                 退出[0]                   \n "); scanf("%d",&n);  if(n==1){int passwd_flag=0;printf("请输入您的真实姓名\n");scanf("%s",name);getchar();printf("请输入您的电话号码\n");scanf("%s",tel);getchar();while (1){printf("请输入您的密码\n");scanf("%s",passwd);getchar();printf("请再次输入您的密码\n");scanf("%s",passwd_verify);getchar();if(strcmp(passwd,passwd_verify)!=0){printf("您输入的两次密码不相同,请重新输入\n");memset(passwd,0,sizeof(passwd));memset(passwd_verify,0,sizeof(passwd_verify));continue;}else{break;}}//初始化数据库结构体mysql_init(&mysql);//连接数据库mysql_con=mysql_real_connect(&mysql,"***.***.***.***","root","123456","jason_data",3306,NULL,0);if(mysql_con==NULL){perror("mysql_real_connect");return 0;}//将数据插入数据库sprintf(mysql_buf,"insert into bank_list values(\"%s\",\"%s\",\"%s\",\"0\");",name,tel,passwd);int flag=mysql_query(mysql_con,mysql_buf);if(flag==0){printf("开户成功,可登录\n");sleep(1);//mysql_free_result(mysql_rel);//mysql_close(mysql_con);system("clear");continue;}}else if (n==2){while(1){int tel_flag;int wd_flag;MYSQL mysql;MYSQL * mysql_con=NULL;//连接数据库返回值my_ulonglong row=0;//查询行号unsigned int columns=0;//查询列号MYSQL_RES * mysql_rel=NULL;//数据库查询状态MYSQL_ROW row_str=NULL;//检索表下一行MYSQL_FIELD * columns_name=NULL;//列名memset(log_tel,0,sizeof(log_tel));memset(log_passwd,0,sizeof(log_passwd));printf("请输入您的tel\n");scanf("%s",log_tel);getchar();printf("请输入您的passwd\n");scanf("%s",log_passwd);getchar();//初始化数据库结构体mysql_init(&mysql);//连接数据库mysql_con=mysql_real_connect(&mysql,"***.***.***.***","root","123456","jason_data",3306,NULL,0);if(mysql_con==NULL){perror("mysql_real_connect");return 0;}mysql_query(mysql_con,"select tel,passwd from bank_list");//获得数据库查询到的信息mysql_rel=mysql_store_result(mysql_con);//根据数据库查询的信息获取行号row=mysql_num_rows(mysql_rel);//根据数据库查询的消息获得列号columns=mysql_num_fields(mysql_rel);for(int i=0;i<row;i++){//检索表的下一行row_str=mysql_fetch_row(mysql_rel);for(int j=0;j<columns;j++){if(j==0){tel_flag=strcmp(log_tel,row_str[j]);}if(j==1){wd_flag=strcmp(log_passwd,row_str[j]);}if((tel_flag==0)&&(wd_flag==0)){break;}}if(tel_flag==0){break;}}if((tel_flag==0)&&(wd_flag==0)){printf("登录成功\n");sleep(1);system("clear");return 1;}else{printf("帐号或者密码错误,请重新输入\n");printf("重新输入[1]      退出请输入[0]\n");int p;scanf("%d",&p);getchar();if(p==0){return 0;}else{sleep(1);system("clear");continue;                    }}}}else{return 0;}}}
int menu(void)
{while(1){int n=0; printf("****************************************\n");printf("     余额查询[1]        现金存入[2]        \n");printf("     转账[3]            退出[0]           \n");scanf("%d",&n);getchar();if(n==1){balance();}else if (n==2){sava();}else if (n==3){transfer();}else if (n==0){system("clear");printf("     *************************\n");printf("     *        Bey-Bey        *\n");printf("     *************************\n");return 0;}else{printf("输入错误请重新输入\n");}}}
int balance(void)
{MYSQL mysql;MYSQL * mysql_con=NULL;//连接数据库返回值my_ulonglong row=0;//查询行号unsigned int columns=0;//查询列号MYSQL_RES * mysql_rel=NULL;//数据库查询状态MYSQL_ROW row_str=NULL;//检索表下一行MYSQL_FIELD * columns_name=NULL;//列名char buff[300]={0};memset(myself_money,0,sizeof(myself_money));//初始化数据库结构体mysql_init(&mysql);//连接数据库mysql_con=mysql_real_connect(&mysql,"***.***.***.***","root","123456","jason_data",3306,NULL,0);if(mysql_con==NULL){perror("mysql_real_connect");return 0;}sprintf(buff,"select name,money from bank_list where tel = \"%s\";",log_tel);mysql_query(mysql_con,buff);//获得数据库查询到的信息mysql_rel=mysql_store_result(mysql_con);//根据数据库查询的信息获取行号row=mysql_num_rows(mysql_rel);//根据数据库查询的消息获得列号columns=mysql_num_fields(mysql_rel);for(int i=0;i<row;i++){//检索表的下一行row_str=mysql_fetch_row(mysql_rel);for(int j=0;j<columns;j++){if(j==0){printf("尊敬的用户:%s  ",row_str[j]);}if(j==1){printf("您的余额为: %s\n",row_str[j]);strcpy(myself_money,row_str[j]);}}}mysql_free_result(mysql_rel);mysql_close(mysql_con);}
int sava(void)
{MYSQL mysql;MYSQL * mysql_con=NULL;//连接数据库返回值my_ulonglong row=0;//查询行号unsigned int columns=0;//查询列号MYSQL_RES * mysql_rel=NULL;//数据库查询状态MYSQL_ROW row_str=NULL;//检索表下一行MYSQL_FIELD * columns_name=NULL;//列名double money=0;char buff[300]={0};printf("请输入您需要存入的金额\n");scanf("%lf",&money);getchar();//初始化数据库结构体mysql_init(&mysql);//连接数据库mysql_con=mysql_real_connect(&mysql,"***.***.***.***","root","123456","jason_data",3306,NULL,0);if(mysql_con==NULL){perror("mysql_real_connect");return 0;}sprintf(buff,"select money from bank_list where tel = \"%s\";",log_tel);mysql_query(mysql_con,buff);//获得数据库查询到的信息mysql_rel=mysql_store_result(mysql_con);//根据数据库查询的信息获取行号row=mysql_num_rows(mysql_rel);//根据数据库查询的消息获得列号columns=mysql_num_fields(mysql_rel);memset(buff,0,sizeof(buff));for(int i=0;i<row;i++){//检索表的下一行row_str=mysql_fetch_row(mysql_rel);for(int j=0;j<columns;j++){strcpy(buff,row_str[j]);}}double a=0;char sum[30]={0};//a=atoi(buff);//字符串转整数a=atof(buff);a=a+money;//最终金额sprintf(sum,"%lf",a);//整数转字符串memset(buff,0,sizeof(buff));sprintf(buff,"update bank_list set money = \"%s\" where tel=\"%s\";",sum,log_tel);mysql_query(mysql_con,buff);printf("%lf元已存入\n",money);mysql_free_result(mysql_rel);mysql_close(mysql_con);
}
int transfer(void)
{int tra_flag=0;balance();printf("可用余额为%s\n",myself_money);MYSQL mysql;MYSQL * mysql_con=NULL;//连接数据库返回值my_ulonglong row=0;//查询行号unsigned int columns=0;//查询列号MYSQL_RES * mysql_rel=NULL;//数据库查询状态MYSQL_ROW row_str=NULL;//检索表下一行MYSQL_FIELD * columns_name=NULL;//列名char transfer_tel[20]={0};char buf1[200]={0};char buf2[200]={0};char nuf1[200]={0};char nuf2[200]={0};printf("请输入对方账户tel\n");scanf("%s",transfer_tel);getchar();//初始化数据库结构体mysql_init(&mysql);//连接数据库mysql_con=mysql_real_connect(&mysql,"***.***.***.***","root","123456","jason_data",3306,NULL,0);if(mysql_con==NULL){perror("mysql_real_connect");return 0;}mysql_query(mysql_con,"select name,tel,money from bank_list");//获得数据库查询到的信息mysql_rel=mysql_store_result(mysql_con);//根据数据库查询的信息获取行号row=mysql_num_rows(mysql_rel);//根据数据库查询的消息获得列号columns=mysql_num_fields(mysql_rel);for(int i=0;i<row;i++){//检索表的下一行row_str=mysql_fetch_row(mysql_rel);for(int j=0;j<columns;j++){if(j==1){if(strcmp(transfer_tel,row_str[j])==0){printf("转账人:%s 转账人帐号:%s\n",row_str[j-1],row_str[j]);strcpy(trans_dol,row_str[j+1]);tra_flag=1;break;}}}if(tra_flag==1){break;}}mysql_free_result(mysql_rel);if(tra_flag!=1){printf("此帐号不存在\n");return 0;}while(1){double trans_money=0;double trans_num=0;double num=0;double doc_num=0;printf("请输入您要转账的金额\n");trans_num=atof(myself_money);//自己余额doc_num=atof(trans_dol);//转账人余额scanf("%lf",&trans_money);getchar();if(trans_money<=0){printf("转账金额不许为0或负数\n");sleep(1);system("clear");continue;}else if(trans_money>trans_num){printf("余额不足无法转账\n");sleep(1);system("clear");continue;}else{num=trans_num-trans_money;//余额doc_num=doc_num+trans_money;//转账人余额sprintf(buf1,"%lf",num);sprintf(buf2,"%lf",doc_num);sprintf(nuf1,"update bank_list set money = \"%s\" where tel=\"%s\";",buf1,log_tel);mysql_query(mysql_con,nuf1);sprintf(nuf2,"update bank_list set money = \"%s\" where tel=\"%s\";",buf2,transfer_tel);mysql_query(mysql_con,nuf2);printf("转账成功\n");sleep(1);break;}}mysql_close(mysql_con);}

运行结果:


服务器端数据库:





写的比较简陋,欢迎交流指正!
——END——

Ubuntu下使用C语言和MySQL模拟一个银行管理系统相关推荐

  1. lamp 重启mysql_lamp常用命令 --Ubuntu下启动/重启/停止apache,mysql服务器

    lamp常用命令 --Ubuntu下启动/重启/停止apache,mysql服务器 (2011-08-19 16:20:35)转载▼标签: it 分类: LINUX Ubuntu下启动/重启/停止ap ...

  2. Ubuntu下配置FreeRADIUS + PPTP/L2TP + Mysql + daloRADIUS

    PPTP/L2TP安装方法就不写了,前面好多文章都介绍了安装方法. 下面先安装FreeRADIUS-server Shell 1 2 3 4 5 6 7 #sudo apt-get install m ...

  3. account表里有什么 银行_模拟一个银行账户类Account,账户类中包括所有者、账号、余额、账户总数、存款、取款等信息。_学小易找答案...

    [单选题]廉价磁盘冗余阵列RAID利用冗余技术实现高可靠性,其中RAID1的磁盘利用率为() . [简答题]与直流调速相比,交流调速有何优点? [论述题]方法 [单选题]以<老子注>一书驰 ...

  4. hive导数据到mysql 自增主键出错_python+mysql做一个图书管理系统?

    开发一个图书管理系统,首先需要对此项目进行一个简单的需求分析: 主要功能包括: 图书信息 图书分类 用户信息 用户借阅统计 管理员 管理员权限 接下来可以进行数据库的设计,在这里我提供一个简单的数据库 ...

  5. 用Mysql写一个图书管理系统并且可视化

    要用MySQL写一个图书管理系统需要先创建数据库和表,然后编写Java代码进行连接,查询,插入等操作.同时,为了方便用户操作,可以通过可视化工具将数据以表格或者图形的形式展示出来.以下是一个简单的My ...

  6. 用Java模拟一个银行ATM系统

    用Java模拟一个银行ATM系统 系统功能介绍: 全部代码 示例截图 系统功能介绍: 使用面向对象的编程思想,尽可能模拟真实世界中的银行ATM业务流程. main方法里通过调用一行代码,完成整个业务流 ...

  7. 如何用C语言和Python编写一个BMI指数计算器

    写在前面   前些日子在学习C语言和Python的循环语句的时候,我心血来潮,想编写一个实用性较高的程序.想来想去,我决定编写一个BMI指数计算器.接下来,我将分享一下我编写这个程序的过程,希望给大家 ...

  8. python做数据库管理系统_python+mysql做一个图书管理系统?

    开发一个图书管理系统,首先需要对此项目进行一个简单的需求分析: 主要功能包括:图书信息 图书分类 用户信息 用户借阅统计 管理员 管理员权限 接下来可以进行数据库的设计,在这里我提供一个简单的数据库表 ...

  9. c语言和mysql区别是什么_java和c语言的区别是什么

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程语言的代表 ...

最新文章

  1. linux实战案例作业(1)
  2. json和pickle模块
  3. Xtreme ToolkitPro 编译过程详解
  4. java格式化输出双精度小数,用Java格式化双精度类型
  5. guido python正式发布年份_Python语言适合哪些领域的计算问题? (1.3分)_学小易找答案...
  6. 我为什么在这里写博客
  7. c语言 指正判断字符串大小
  8. 这款能够生成文档的接口测试软件,为什么越来越受欢迎?
  9. SQL触发器编写与查看
  10. 你不知道的JavaScript(上中下)全册
  11. 申请并部署阿里云SSL免费证书详细流程
  12. nordic 52832 键盘
  13. Autojs 3.0文档学习之设备信息
  14. Exception in thread Thread-0 java.lang.NullPointerException
  15. 学生表mysql查询语句
  16. 【ESP 保姆级教程】疯狂传感器篇 —— 案例:ESP8266 + MQ3酒精传感器 + 串口输出
  17. Android全屏和强制横屏竖屏设置
  18. 【云原生 | Kubernetes 系列】----污点与容忍
  19. 无人机自动悬停的实现方法(大疆无人机为例)
  20. 这才叫爷们! --转载

热门文章

  1. Python进行ffmpeg推流和拉流rtsp、rtmp
  2. php post如何获取数据,php获取POST数据的三种方法
  3. 一、K3 WISE 开发插件《K3 WISE常用数据表整理》
  4. extern使用方法总结
  5. Node 最老 npm 包 request 将废弃;中国首条 3D 刷脸乘车地铁开通
  6. 发现TCP的一种错误----客户端连接失败(10055错误号)
  7. ★★★ | MySQL | Can‘t connect to MySQL server on ‘XXXX‘ (10055) 解决方案
  8. RestClient操作文档四
  9. 自学java 答答租车系统
  10. 2021-10-22 学习笔记:FastAPI基础使用指南