C调用webservice制作航班查询功能

一直以来,我对C语言充满敬畏,毕竟C语言如同“造物主”般的存在,不少流行的编程语言、数据库等都是由C语言编写出来的,一直梦想自己是使用C语言的高手。记得读书时教C语言的老师曾经说过:“计算机世界里,万物皆C,没学过C语言是一种莫大的遗憾”。毕业参加工作了,虽然不使用C语言开发,心里总有那么一点小遗憾。因此闲暇时就会用C语言去实现一些功能,毕竟C语言没那么多包,很多时候都需要靠自己编写。本次使用...
摘要由CSDN通过智能技术生成
一直以来,我对C语言充满敬畏,毕竟C语言如同“造物主”般的存在,不少流行的编程语言、数据库等都是由C语言编写出来的,一直梦想自己是使用C语言的高手。记得读书时教C语言的老师曾经说过:“计算机世界里,万物皆C,没学过C语言是一种莫大的遗憾”。
毕业参加工作了,虽然不使用C语言开发,心里总有那么一点小遗憾。因此闲暇时就会用C语言去实现一些功能,毕竟C语言没那么多包,很多时候都需要靠自己编写。
本次使用C调用webservice实现了航班查询的功能,大致总结如下:
1、使用开放的webservice接口
2、返回i的数据保存到mariadb数据库中
3、具备日志记录功能,可以记录返回报文、解析数据日志等
4、由于没搞定gsoap和libxml2,因此调用webservice引用了shell命令curl,解析xml时就是采用普通的文件读取方式。换言之,该功能在linux下使用,如fedora31
5、编写过程中,C语言处理字符串真的好忧伤,极其怀念Java,Go,Python对字符串的处理
6、光学会C还没法正常实现,还必须熟练系统。只有熟练系统了才知道如何加载必要的包,比如连接mariadb的h文件
代码如下:
头文件airline.h
// An highlighted block
#include <mysql/mysql.h>
#ifndef AIRLINESCHEDULE_AIRLINE_H
#define AIRLINESCHEDULE_AIRLINE_H
void str_replace(char* cp,int n,char* str);
int produce_time(char* current_time);
void get_regular_data(char* file_name,char* start_city,char* arrive_city,char* query_date);
char *a_trim(char *str);
void save_airline_info(char* text_file,char* start_city,char* arrive_city,char* query_date);
MYSQL con_mariadb();
void close_mariadb_con(MYSQL *con);
void close_mariadb_result(MYSQL_ROW row);

#endif //AIRLINESCHEDULE_AIRLINE_H
// main
main函数
// An highlighted block
/*
 * 程序目的:C和bash联合使用通过webservice获取航班信息
 * 程序版本:C99 and Bash5.0
 * 程序编写:枫叶
 * 编写时间:2020年3月17日
 */
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include "head/airline.h"

int main()
{
   
    printf("----------航班查询系统---------\n");
    //构造文件名并创建文件
    char nowTime[32] = {
   0};
    produce_time(nowTime);
    char file_head[] = "airline";
    char file_suffix[] = ".xml";
    char* file_name;
    file_name = strcat(strcat(file_head,nowTime),file_suffix);
    FILE *fp_write = fopen(file_name,"a");
    //printf("fileName is:%s\n",file_name);
    //构造文件名
    //printf("current time is:%s\n",nowTime);
    //定义查询参数和执行的命令
    char start_city[] = "桂林";
    char arrive_city[] = "杭州";
    char query_date[] = "2020-3-24";
    char command[] = "curl -d \"startCity=${start_city}&lastCity=${arrive_city}&theDate=${query_date}&userID=\" http://ws.webxml.com.cn/webservices/DomesticAirline.asmx/getDomesticAirlinesTime";
    //定义查询参数和执行的命令
    //定义要替换的字符串
    char s_city[] = "${start_city}";
    char a_city[] = "${arrive_city}";
    char q_date[] = "${query_date}";
    char* p;
    int counter = 0;
    //定义要替换的字符串
    //替换起飞城市
    p = strstr(command,s_city);
    while(p)
    {
   
        counter++;
        str_replace(p,strlen(s_city),start_city);
        p = p+strlen(start_city);
        p = strstr(p,s_city);
    }
    //替换抵达城市
    p = strstr(command,a_city);
    counter = 0;
    while(p)
    {
   
        counter++;
        str_replace(p,strlen(a_city),arrive_city);
        p = p+strlen(arrive_city);
        p = strstr(p,a_city);
    }
    //替换查询日期
    p = strstr(command,q_date);
    counter = 0;
    while(p)
    {
   
        counter++;
        str_replace(p,strlen(q_date),query_date);
        p = p+strlen(query_date);
        p = strstr(p,q_date);
    }
    //printf("%s\n",command);
    //printf("----------%s %s至%s航班信息----------\n",query_date,start_city,arrive_city);
    //调用shell命令进行webservice操作
    FILE *fp;
    int buf;
    fp = popen(command,"r");
    buf = fgetc(fp);
    fputc(buf,fp_write);
    while(buf != EOF)
    {
   
        putchar(buf);
        buf = fgetc(fp);
        fputc(buf, fp_write);
    }

    //printf("%c\n",buf);
    fclose(fp);
    printf("关闭webservice连接...\n");
    fclose(fp_write);
    printf("保存并关闭%s...\n",file_name);
    get_regular_data(file_name,start_city,arrive_city,query_date);
    return 0;
}

// get_current_time
get_current_time函数
// An highlighted block
/*
 * 程序目的:获取当前时间
 * 程序版本:C99
 * 程序编写:枫叶
 * 编写时间:2020年3月17日
 */
#include <time.h>
#include <string.h>

int produce_time(char* current_time)
{
   
    char year[5] = {
   0};
    char month[5] = {
   0};
    char day[5] = {
   0};
    char hour[5] = {
   0};
    char min[5] = {
   0};
    char second[5] = {
   0};
    time_t current;
    struct tm* time_now;
    time(&current);
    time_now = localtime(&current);
    strftime(year,sizeof(year),"%Y",time_now);
    strftime
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值