关于C语言编程实现数据的查询计算及插入的问题

和过去说再见 2019-04-04 09:58:18
实习的时候有这样一个任务,就是有一个数据库存放的是列车的路程、速度、时间、经纬度等数据,这些数据理论上是需要每5秒以内传送一次的,但是有时可能会超过5秒,那么问题来了,如果两条数据超过5s,就根据已经有的数据(如相邻的两个数据)进行计算,再插入到数据库中,这样两个数据之间就小于5s了,不过有个问题就是,两个数据之间相差20的话,比如一个是10 然后是30,中间插15, 15到30之间就不插了,循环我也没循环明白,递归也不咋熟,纯小白一个,恳请各位大神帮帮忙。

这是我自己建的一个测试用数据库:
mysql> select * from test4;
+----+---------------------+-------+----------+
| id | time | speed | distance |
+----+---------------------+-------+----------+
| 1 | 2017-05-03 17:12:20 | 22 | 3847 |
| 2 | 2017-05-03 17:12:26 | 22 | 3847 |
| 3 | 2017-05-03 17:12:40 | 22 | 3847 |
+----+---------------------+-------+----------+


这是我的代码:

#include <mysql/mysql.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
long GetTick(char *str_time)
{
struct tm stm;
int iY, iM, iD, iH, iMin, iS;

memset(&stm,0,sizeof(stm));

iY = atoi(str_time);
iM = atoi(str_time+5);
iD = atoi(str_time+8);
iH = atoi(str_time+11);
iMin = atoi(str_time+14);
iS = atoi(str_time+17);

stm.tm_year=iY-1900;
stm.tm_mon=iM-1;
stm.tm_mday=iD;
stm.tm_hour=iH;
stm.tm_min=iMin;
stm.tm_sec=iS;

/*printf("%d-%0d-%0d %0d:%0d:%0d\n", iY, iM, iD, iH, iMin, iS);*/

return mktime(&stm);
}
char* itstr(time_t value,char*a)
{


struct tm t;
time_t result;
t.tm_year = 70;
t.tm_mon = 1;
t.tm_mday = 0;
t.tm_hour = -8;
t.tm_min = 0;
t.tm_sec = 0;
result = mktime(&t);
result += value;
memcpy(&t, localtime(&result), sizeof(struct tm));
sprintf(a,"%d-%02d-%02d %02d:%02d:%02d", t.tm_year + 1900, t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec);
return a;
}
int main()
{
MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;
char query[512] = {0};
int flag, t;
char sql[512] = {0};
char *sql1;
mysql_init(&mysql);
if(!mysql_real_connect(&mysql, "localhost", "root", "yang5716", "test", 3306, NULL, 0)) {
printf("Failed to connect to Mysql!\n");fprintf(stderr,"Failedtoconnecttodatabase:Error:%s\n",mysql_error(&mysql)); return 0;
}else {
printf("Connected to Mysql successfully!\n");
}

sprintf(query,"SELECT time,speed,distance from test4;");


/*查询,成功则返回0*/
flag = mysql_real_query(&mysql, query, (unsigned int)strlen(query));
if(flag) {
printf("Query failed!\n");
return 0;
}else {
printf("[%s] made...\n", query);
}

long savetime,savespeed,savedistance=0;
/*mysql_store_result讲全部的查询结果读取到客户端*/
res = mysql_store_result(&mysql);
/*mysql_fetch_row检索结果集的下一行*/
while(row = mysql_fetch_row(res)) {


if(savetime&&savespeed&&savedistance)
{


while(GetTick(row[0])-savetime>5)
{
char a[256]={0};
time_t time1=savetime;
time_t time2=GetTick(row[0]);
int speed1=savespeed,speed2=atoi(row[1]);
int distance=savedistance;
int fspeed,fdistance=0;
time_t ftime;
ftime = time1 + 5;
fspeed = (speed1+speed2)/2;
fdistance =5 * fspeed+distance;
printf("time1 %d time2 %d speed1 %d\n",time1,GetTick(row[0]),speed1);
//printf("%d %d %d\n",ftime,fspeed,fdistance);
printf("%s\n",itstr(ftime,a));
sprintf(sql,"insert into test4(time,speed,distance) values('%s',%d,%d);",itstr(ftime,a),fspeed,fdistance);
printf("%s\n",sql);

flag = mysql_real_query(&mysql, sql, (unsigned int)strlen(sql));
savetime=GetTick(row[0]);savespeed=atoi(row[1]);savedistance=atoi(row[2]);



}
}
else
savetime=GetTick(row[0]);savespeed=atoi(row[1]);savedistance=atoi(row[2]);





}
mysql_close(&mysql);
return 0;
}




执行之后这样:
+----+---------------------+-------+----------+
| id | time | speed | distance |
+----+---------------------+-------+----------+
| 1 | 2017-05-03 17:12:20 | 22 | 3847 |
| 2 | 2017-05-03 17:12:26 | 22 | 3847 |
| 3 | 2017-05-03 17:12:40 | 22 | 3847 |
| 14 | 2017-05-02 17:12:25 | 22 | 3957 |
| 15 | 2017-05-02 17:12:31 | 22 | 3957 |
+----+---------------------+-------+----------+
5 rows in set (0.00 sec)
...全文
102 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
C语言是一门广泛应用于系统编程、嵌入式软件和高性能应用开发的高级编程语言。本课程旨在向你介绍C语言的基本概念、语法和编程技巧,使你能够掌握C语言的核心知识,并能够用C语言编写简单到中等复杂程度的程序。课程针对0基础初学者,所以课程会由浅入深,由表及里的探索C语言知识框架,慢慢触及C语言本质,课程结构先由简单程序引入,然后拆分程序各个细节,让你逐渐掌握C语言编程的精髓。也会讲解C语言编译过程,怎样将人类描述的语言让计算机能够识别并按我们的意愿运行。C语言程序怎样运行也会详细介绍,了解程序由静到动的过程。课程注重基础理论与实践结合,在重点关注C语言的基础理论知识的同时,我们会结合大量的实际编程练习,对每个重要的知识点和易错的地方都有代码演示并查看程序运行结果,深入理解C语言的运作原理。课程中一半内容是理论知识的讲解,另外一半是代码实操。课程由本人全部从0开始编写,从课程架构思考,内容组织,难易程度,章节划分,都融入了本人对C语言的思考,几乎全是干货,如果你渴望成为一名优秀的C语言编程者,那么不要犹豫!欢迎报名参加我们的课程,让我们一起踏上编程的旅程,共同学习和进步!课程源码:https://gitee.com/sliaowalker/c-language-programming

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧