📄 stkfile.c
字号:
#include <unistd.h>#include <fcntl.h>#include <sys/stat.h>#include "jszb.h"#include "gmclient.h"#include "stocksql.h"#include "stockclient.h"//股票初始化结构STOCKINIT stockinit;/*股票明细结构*/STOCKGPMX gpmx;//股票排行榜列表结构,取出标志,取出数量STOCKGPMXLIST *gpmxlist;int frechgpmxlistflag;int gpmxlistsum;/*股票分时数据结构(包含四小时数据量)*/STOCKFS fs[MAXFSLINENUM];/*取出的分时线数量*/int fssum;/*分时数据取出标志 0--未取出 1-取出*/int frechfsflag;/*上海.深圳股票名称表*/STOCKNAMETBL *shtbl;STOCKNAMETBL *sztbl;/*股票代码表取出标志 0--未取出 1--取出*/int frechtblflag;/*上海.深圳股票总数*/int shstocksum;int szstocksum;/* stock k line struct*/STOCK *stock;/*是否取出K线结构 0--no 1--yes*/int frechflag;/* the sum for frech stock k line从文件中取出K线总数*/int stocksum;/*股票买卖分笔明细*/STOCKTRACE trace[MAXTRACENUM];/*股票买卖分笔明细数目*/int tracesum;/*股票代码和名称*/char stockcode[10];char stockname[20];/* 区间内股票最高价*/int areazgj;/* 区间内股票最低价*/int areazdj;/* 区间内成交量最大值*/long areacjl;/*分时数据最高价,最低价,最大成交量*/int fspricezgj;int fspricezdj;int fsmaxcolume;/*k线结构起始位址*/int areastart;/*股票日线文件路径*/char stockpath[50];void stock_init(){ int i,cur,total; frechtblflag=0; frechflag=0; frechfsflag = 0; fssum = 0; stocksum=0; frechgpmxlistflag = 0; gpmxlistsum = 0; tracesum = 0; areazgj=10000; areazdj=0; areastart=1; strcpy(stockpath,"./day/"); stocksql->getSqlInitData();//判断是否已登录服务器 if(stkcli->isLoginServer()){//判断股票代码表是否已更新 if(stockinit.nametblbz == 0){ if(stkcli->dealNameTbl()){ frechtblflag = 1; stockinit.nametblbz = 1; } } else{ frechStockNameTbl(); } //判断当日是否已做初始化 if(stockinit.initflag == 0){//初始化股票明细表 if(!stocksql->isExistGpmxTable(SHBZ)) stocksql->createGpmxTable(SHBZ); else stocksql->deleteGpmxData(SHBZ); if(!stocksql->isExistGpmxTable(SHBZ)) stocksql->createGpmxTable(SZBZ); else stocksql->deleteGpmxData(SZBZ); stocksql->insertGpmxDataFromNameTblWithZsp();//初始化股票分时,分笔成交表 StartProgress ("正在进行初始化,请稍候...");
total=2*(shstocksum+szstocksum); cur=1; if(stocksql->selectFsDatabase()){ for(i=1;i<=shstocksum;i++,cur++){ stocksql->quickCreateFsTable(shtbl[i].code); stocksql->quickDeleteFsData(shtbl[i].code); UpdateProgress (cur, total); } for(i=1;i<=szstocksum;i++,cur++){ stocksql->quickCreateFsTable(sztbl[i].code); stocksql->quickDeleteFsData(sztbl[i].code); UpdateProgress (cur, total); } } if(stocksql->selectTraceDatabase()){ for(i=1;i<=shstocksum;i++,cur++){ stocksql->quickCreateTraceTable(shtbl[i].code); stocksql->quickDeleteTraceData(shtbl[i].code); UpdateProgress (cur, total); } for(i=1;i<=szstocksum;i++,cur++){ stocksql->quickCreateTraceTable(sztbl[i].code); stocksql->quickDeleteTraceData(sztbl[i].code); UpdateProgress (cur, total); } } stockinit.initflag = 1; EndProgress ();
} stocksql->updateInitData(stockinit); } else{//如果未登录服务器,取本地股票代码表 frechStockNameTbl(); } return; }void stock_quit(){ if(frechtblflag){ g_free(shtbl); g_free(sztbl); } if(frechflag){ g_free(stock); } }int getFileDayKline(char *code){ char filename[50]; FILE *id; int i=1; int p1,p2,p3,p4; int day; long cjje,cjl; int recsum; if(!frechtblflag){ printf("frech tbl fail.\n"); return FAIL; } if(strlen(code) != SHCODELEN && strlen(code) != SZCODELEN) return FAIL; if(strlen(code) == SHCODELEN){ if(!codeToName(SHBZ,code)) return FAIL; strcpy(filename,SHDAYPATH); strcat(filename,code); strcat(filename,".Day"); } if(strlen(code) == SZCODELEN){ if(!codeToName(SZBZ,code)) return FAIL; strcpy(filename,SZDAYPATH); strcat(filename,code); strcat(filename,".Day"); } id=fopen(filename,"r"); if(id == NULL){ printf("open file %s error.\n",filename); return FAIL; } if(frechflag){ g_free(stock); } fseek(id,0,SEEK_END); recsum=(ftell(id))/40; stock=(STOCK *)g_malloc(sizeof(STOCK)*(recsum+10)); fseek(id,0,SEEK_SET);// printf("date kpj zgj zdj spj cjje cjl\n"); while(i<=recsum && !feof(id)){ fread(&day,1,sizeof(int),id); fread(&p1,1,sizeof(int),id); fread(&p2,1,sizeof(int),id); fread(&p3,1,sizeof(int),id); fread(&p4,1,sizeof(int),id); fread(&cjje,1,sizeof(int),id); fread(&cjl,1,sizeof(int),id);// fread(bz,3,sizeof(int),id); stock[i].jydate=day; stock[i].kpj=p1/10; stock[i].zgj=p2/10; stock[i].zdj=p3/10; stock[i].spj=p4/10; stock[i].cjje=cjje; stock[i].cjsl=cjl;// printf("%d %3.2f %3.2f %3.2f %3.2f %d %d\n",day,r1,r2,r3,r4,cjje,cjl); fseek(id,i*40,SEEK_SET); i++; } frechflag=1; stocksum=recsum; strcpy(stockcode,code); klinewidth=9; areastart=stocksum-50; mouselinex=stocksum; createJszbData(); fclose(id); return recsum; }/* frech stock day record from stock file filename.day */int frechStock(char *code){// return getFileDayKline(code);// return stocksql->getSqlDayKline(code); return stocksql->getSqlStockData(code);}//取得分时数据int frechFsData(char *code){ return stocksql->getSqlFsData(code);}int getFileNameTbl(){ char shfilename[256]; char szfilename[256]; strcpy(shfilename,SHTBLPATH); strcat(shfilename,"nametbl.sha"); strcpy(szfilename,SZTBLPATH); strcat(szfilename,"nametbl.szn"); if(frechShStockTbl(shfilename) && frechSzStockTbl(szfilename)){ frechtblflag=1; return SUCCESS; } else{ frechtblflag=0; return FAIL; } }/*取出股票代码表*/int frechStockNameTbl(){// return getFileNameTbl(); return stocksql->getSqlNameTbl(); }gint frechShStockTbl(gchar *filename){ FILE *id; int i=1; char end; char code[8]; char name[10]; id=fopen(filename,"r"); if(id == NULL){ printf("open file nametbl.sha error.\n"); return FAIL; } fseek(id,0,SEEK_END); shstocksum=(ftell(id))/16;// printf(" %d %d \n",shstocksum,sizeof(STOCKNAMETBL)); if(shtbl) g_free(shtbl); shtbl=(STOCKNAMETBL *) g_malloc(sizeof(STOCKNAMETBL)*(shstocksum+10)); if(shtbl == NULL){ printf("shtbl memory alloc error.\n"); return FAIL; } fseek(id,0,SEEK_SET); while(i<=shstocksum && !feof(id)){ fread(&shtbl[i].type,1,sizeof(char),id); fread(code,6,sizeof(char),id); fread(name,8,sizeof(char),id); fread(&end,1,sizeof(char),id); code[6]='\0'; name[8]='\0'; strcpy(shtbl[i].code,code); strcpy(shtbl[i].name,name); // printf("%d. %s %s\n",i,shtbl[i].code,shtbl[i].name); fseek(id,i*16,SEEK_SET); i++; } fclose(id); return SUCCESS; }gint frechSzStockTbl(gchar *filename){ FILE *id; int i=1; char end; char code[8]; char name[10]; id=fopen(filename,"r"); if(id == NULL){ printf("open file nametbl.szn error.\n"); return FAIL; } fseek(id,0,SEEK_END); szstocksum=(ftell(id))/16;// printf(" %d \n",shstocksum*sizeof(STOCKNAMETBL)); if(sztbl) g_free(sztbl); sztbl=(STOCKNAMETBL *) g_malloc(sizeof(STOCKNAMETBL)*(szstocksum+10)); if(sztbl == NULL){ printf("sztbl memory alloc error"); return FAIL; } fseek(id,0,SEEK_SET); i=1; while(i<=szstocksum && !feof(id)){ fread(&sztbl[i].type,1,sizeof(char),id); fread(code,6,sizeof(char),id); fread(name,8,sizeof(char),id); fread(&end,1,sizeof(char),id); code[4]='\0'; name[8]='\0'; // printf("%d. %s %s\n",i,code,name); strcpy(sztbl[i].code,code); strcpy(sztbl[i].name,name); fseek(id,i*16,SEEK_SET); i++; } fclose(id); return SUCCESS; }/*----------------------------------------/股票代码转化股票名称/ BZ -- 上海,深圳标志/ CODE -- 股票代码/--------------------------------------------------*/int codeToName(int bz,char *code){ int i; int iffind=FAIL; int recsum; if(!frechtblflag){ printf("tbl not frech success."); return FAIL; } if(bz == SHBZ) recsum = shstocksum;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -