百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

来读读30年前的程序,看是什么意思呢?

mhr18 2024-12-23 11:10 15 浏览 0 评论


三十年前编写MIS中的一段程序,把前端设备中的数据收集上来,然后汇总传给后台Oracle,同时把后台变动数据从Oracle提出传进前端设备。当时前端还不是PC,需要通过串口通讯。

#include <stdlib.h>

#include <stdio.h>

#include <process.h>

#include <string.h>

#include <dos.h>

EXEC SQL BEGIN DECLARE SECTION; /* SQL变量定义*/

VARCHAR uid[80]; /* 用户名 */

VARCHAR pwd[20]; /* 口令 */

VARCHAR date[9];

EXEC SQL END DECLARE SECTION;

EXEC SQL INCLUDE SQLCA; /* SQL通讯区 */

char input_file_name[20],line_buffer[80];

short int ma19busy()

{

FILE *par_file;

int i;

char ch[17];

EXEC SQL BEGIN DECLARE SECTION; /* SQL变量定义*/

VARCHAR ecrno[2];

EXEC SQL END DECLARE SECTION;

EXEC SQL WHENEVER SQLERROR GOTO err;

EXEC SQL DECLARE cu CURSOR

FOR SELECT ecrno

FROM tci_ecr

WHERE ztbz='*';

EXEC SQL OPEN cu;

EXEC SQL WHENEVER NOT FOUND GOTO EXITloop;

strcpy(ch,"");

while(1)

{

EXEC SQL FETCH cu INTO :ecrno;

ecrno.arr[ecrno.len]='\0';

i=atoi(ecrno.arr);

itoa(i,ecrno.arr,10);

strcat(ch,ecrno.arr);

strcat(ch,",");

}

EXITloop:

EXEC SQL CLOSE cu;

par_file=fopen("para0410.dat","w");

fputs("#BEGIN\n",par_file);

fputs("#COMMAND = 0410\n",par_file);

fputs("#TERMINAL_ID = ",par_file);

ch[strlen(ch)-1]='\0';

fputs(ch,par_file);

fputs("\n",par_file);

fputs("#OUTPUT_FILE=ADD_U.DAT,MAIN_U.DAT,LINK_U\n",par_file);

fputs("#LOG_FILE=LOGFILE.DAT\n",par_file);

fputs("#DISP_LINE = 25\n",par_file);

fputs("#APL_RETRY = 100\n",par_file);

fputs("#END\n",par_file);

fclose(par_file);

puts(" \n");

goto end;

err:

puts("ma19busy() function");

printf("%.70s\n",sqlca.sqlerrm.sqlerrmc);

end:

return(i);

}

short plu_zt()

{

char PL[3];

int i,k;

long l;

char c[14];

EXEC SQL BEGIN DECLARE SECTION; /* SQL变量定义*/

VARCHAR spbm[14],spmc[21],gzbm[3],plums[17],pluno[14],ljplu[14],xglx[2];

float lsdj;

EXEC SQL END DECLARE SECTION;

l=atol(line_buffer);

ltoa(l,pluno.arr,10);

k=strlen(pluno.arr);

strcpy(c,"");

for(i=1;i<=13-k;i++) strcat(c,"0");

strcat(c,pluno.arr);

strcpy(pluno.arr,c);

pluno.len=strlen(pluno.arr);

for(i=15;i<=30;i++)

plums.arr[i-15]=line_buffer[i];

plums.arr[16]='\0';

plums.len=strlen(plums.arr);

switch (line_buffer[35])

{

case 'A':i=10*16;break;

case 'B':i=11*16;break;

case 'C':i=12*16;break;

case 'D':i=13*16;break;

case 'E':i=14*16;break;

case 'F':i=15*16;break;

default :PL[0]=line_buffer[35];PL[1]='\0';i=atoi(PL)*16;

}

switch (line_buffer[36])

{

case 'A':i+=10;break;

case 'B':i+=11;break;

case 'C':i+=12;break;

case 'D':i+=13;break;

case 'E':i+=14;break;

case 'F':i+=15;break;

default :PL[0]=line_buffer[36];PL[1]='\0';i+=atoi(PL);

}

itoa(i,ljplu.arr,10);

ljplu.len=strlen(ljplu.arr);

if(line_buffer[41]=='4') strcpy(xglx.arr,"2");

else if(line_buffer[42]=='2') strcpy(xglx.arr,"1");

else strcpy(xglx.arr,"0");

xglx.len=strlen(xglx.arr);

lsdj=atof(line_buffer+44)/100;

EXEC SQL WHENEVER SQLERROR CONTINUE;

EXEC SQL WHENEVER NOT FOUND CONTINUE;

strcpy(spbm.arr,"");

spbm.len=strlen(spbm.arr);

strcpy(spmc.arr,"");

spmc.len=strlen(spmc.arr);

strcpy(gzbm.arr,"");

gzbm.len=strlen(gzbm.arr);

EXEC SQL SELECT spbm,spmc,gzbm INTO :spbm,:spmc,:gzbm

FROM tci_plub WHERE pluno=:pluno AND xglx=:xglx;

spbm.arr[spbm.len]='\0';

spmc.arr[spmc.len]='\0';

gzbm.arr[gzbm.len]='\0';

EXEC SQL INSERT INTO tci_ztb(spbm,spmc,gzbm,pluno,lsdj,ljplu,xglx,plums,rq)

VALUES(:spbm,:spmc,:gzbm,:pluno,:lsdj,:ljplu,:xglx,:plums,:date);

goto end;

err:

printf("%.70s\n",sqlca.sqlerrm.sqlerrmc);

end:

return(0);

}

void main(int argc,char *argv[])

{

short int i;

char *cc;

struct dosdate_t rq;

FILE *input_file;

if(argc!=3)

{

puts("usage: in_ora user_name password ");

exit(1);

}

strcpy(uid.arr,argv[1]);

uid.len = strlen(uid.arr);

strcpy(pwd.arr,argv[2]);

pwd.len = strlen(pwd.arr);

EXEC SQL WHENEVER SQLERROR GOTO errexit; /* 出错检测 */

EXEC SQL CONNECT :uid IDENTIFIED BY :pwd; /* ORACLE登录 */

i=ma19busy();

if(i) exit;

i=spawnl(P_WAIT,"ma19drv.exe","ma19drv.exe","para0410.dat",NULL);

if(i==147)

i=spawnl(P_WAIT,"ma19drv.exe","ma19drv.exe","para0410.dat",NULL);

if(i==129)

{

puts("参数文件没有找到!");

exit;

}

else if(i==147)

{

puts("发送错!");

exit;

}

puts("发送完成! \n");

strcpy(input_file_name,"MAIN_U.DAT");

input_file=fopen(input_file_name,"r");

if(!input_file)

{

puts("没有数据文件!!"); exit(1);

}

puts("请等待...");

EXEC SQL WHENEVER NOT FOUND CONTINUE;

EXEC SQL DELETE FROM tci_ztb;

_dos_getdate(&rq);

itoa(rq.year,date.arr,10);

itoa(rq.month,cc,10);

strcat(date.arr,cc);

itoa(rq.day,cc,10);

strcat(date.arr,cc);

date.len=strlen(date.arr);

while( fgets(line_buffer,80,input_file)!=NULL ) /* 读一行 */

{

plu_zt();

fgets(line_buffer,80,input_file);

}

EXEC SQL COMMIT WORK RELEASE; /* 提交并释放资源 */

puts("OK");

exit(0);

errexit:

puts("ORACLE DATEBASE ERROR");

printf("%.70s\n",sqlca.sqlerrm.sqlerrmc);

EXEC SQL WHENEVER SQLERROR STOP; /* 出错检测 */

EXEC SQL ROLLBACK WORK RELEASE; /* 放弃并释放资源 */

exit(1);

}


 #C程序# #程序猿# #程序猿糟心事#

相关推荐

一文读懂Prometheus架构监控(prometheus监控哪些指标)

介绍Prometheus是一个系统监控和警报工具包。它是用Go编写的,由Soundcloud构建,并于2016年作为继Kubernetes之后的第二个托管项目加入云原生计算基金会(C...

Spring Boot 3.x 新特性详解:从基础到高级实战

1.SpringBoot3.x简介与核心特性1.1SpringBoot3.x新特性概览SpringBoot3.x是建立在SpringFramework6.0基础上的重大版...

「技术分享」猪八戒基于Quartz分布式调度平台实践

点击原文:【技术分享】猪八戒基于Quartz分布式调度平台实践点击关注“八戒技术团队”,阅读更多技术干货1.背景介绍1.1业务场景调度任务是我们日常开发中非常经典的一个场景,我们时常会需要用到一些不...

14. 常用框架与工具(使用的框架)

本章深入解析Go生态中的核心开发框架与工具链,结合性能调优与工程化实践,提供高效开发方案。14.1Web框架(Gin,Echo)14.1.1Gin高性能实践//中间件链优化router:=...

SpringBoot整合MyBatis-Plus:从入门到精通

一、MyBatis-Plus基础介绍1.1MyBatis-Plus核心概念MyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提...

Seata源码—5.全局事务的创建与返回处理

大纲1.Seata开启分布式事务的流程总结2.Seata生成全局事务ID的雪花算法源码3.生成xid以及对全局事务会话进行持久化的源码4.全局事务会话数据持久化的实现源码5.SeataServer创...

Java开发200+个学习知识路线-史上最全(框架篇)

1.Spring框架深入SpringIOC容器:BeanFactory与ApplicationContextBean生命周期:实例化、属性填充、初始化、销毁依赖注入方式:构造器注入、Setter注...

OpenResty 入门指南:从基础到动态路由实战

一、引言1.1OpenResty简介OpenResty是一款基于Nginx的高性能Web平台,通过集成Lua脚本和丰富的模块,将Nginx从静态反向代理转变为可动态编程的应用平台...

你还在为 Spring Boot3 分布式锁实现发愁?一文教你轻松搞定!

作为互联网大厂后端开发人员,在项目开发过程中,你有没有遇到过这样的问题:多个服务实例同时访问共享资源,导致数据不一致、业务逻辑混乱?没错,这就是分布式环境下常见的并发问题,而分布式锁就是解决这类问题的...

近2万字详解JAVA NIO2文件操作,过瘾

原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。从classpath中读取过文件的人,都知道需要写一些读取流的方法,很是繁琐。最近使用IDEA在打出.这个符号的时候,一行代...

学习MVC之租房网站(十二)-缓存和静态页面

在上一篇<学习MVC之租房网站(十一)-定时任务和云存储>学习了Quartz的使用、发邮件,并将通过UEditor上传的图片保存到云存储。在项目的最后,再学习优化网站性能的一些技术:缓存和...

Linux系统下运行c++程序(linux怎么运行c++文件)

引言为什么要在Linux下写程序?需要更多关于Linux下c++开发的资料请后台私信【架构】获取分享资料包括:C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastdf...

2022正确的java学习顺序(文末送java福利)

对于刚学习java的人来说,可能最大的问题是不知道学习方向,每天学了什么第二天就忘了,而课堂的讲解也是很片面的。今天我结合我的学习路线为大家讲解下最基础的学习路线,真心希望能帮到迷茫的小伙伴。(有很多...

一个 3 年 Java 程序员 5 家大厂的面试总结(已拿Offer)

前言15年毕业到现在也近三年了,最近面试了阿里集团(菜鸟网络,蚂蚁金服),网易,滴滴,点我达,最终收到点我达,网易offer,蚂蚁金服二面挂掉,菜鸟网络一个月了还在流程中...最终有幸去了网易。但是要...

多商户商城系统开发全流程解析(多商户商城源码免费下载)

在数字化商业浪潮中,多商户商城系统成为众多企业拓展电商业务的关键选择。这类系统允许众多商家在同一平台销售商品,不仅丰富了商品种类,还为消费者带来更多样的购物体验。不过,开发一个多商户商城系统是个复杂的...

取消回复欢迎 发表评论: