⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 network.cpp

📁 C++写的POS前台程序
💻 CPP
字号:
#include <dos.h>
#include <fcntl.h>
#include <io.h>
#include <stdlib.h>
#include <sys\stat.h>
#include <string.h>
#include "salewin.h"
#include "sysinfo.h"
#include "def.h"

static int diskError;

#ifdef __cplusplus
	#define __CPPARGS ...
#else
	#define __CPPARGS
#endif
//原来中断处理程序指针。
void interrupt (*oldHandler)(__CPPARGS);
//新中断处理程序。
int myHandler( int errval, int , int , int )
{
	diskError = ((int)errval) &0xff;
	hardretn( _HARDERR_ABORT );
	return 0;
}

//测试网络是否连通。
int test_drive()
{
	char fname[64];
	strcpy(fname, sys->PubSPath);
	strcat(fname, "\\t.t");
	int fhandle;
	oldHandler  = _dos_getvect(0x24);
	harderr( myHandler );
	diskError = -1;
	fhandle = open( fname, O_CREAT, S_IREAD|S_IWRITE );
	_dos_setvect( 0x24, oldHandler );
	if ( fhandle >= 0 )
	{
		close( fhandle );
		unlink( fname );
		return L_YES;//成功.
	}
	return L_NO;//失败.
}

//测试网络状态并且发送数据。
void
SaleWin::TestNetwork()
{
	if(sys->NetSW==L_NO)
	{
		IsNetwork->SetText("不联网");
		return;
	}
	IsNetwork->SetText("测网络");
	if(test_drive() == L_YES)
	{
		IsNetwork->SetText("联  网");
		PutDataToNet();
	}
	else
	{
		IsNetwork->SetText("不联网");
	}
}

//将本地缓冲中的数据发送到网络上。
void
SaleWin::PutDataToNet()
{
	char temp[80];
	MoveData("Sales",149);
	MoveData("Total",100);
	MoveData("Mulpay",96);

	strcpy(temp, "copy ");
	strcat(temp, sys->PubRPath);
	strcat(temp, "\\CodeNew.dat Data >NULL");
	system(temp);

	strcpy(temp, "copy ");
	strcat(temp, sys->PubRPath);
	strcat(temp, "\\CodeNew.dax Data >Null");
	system(temp);
}

int
SaleWin::MoveData(char *filename, int reclen)
{
	char FName[64];
	char Buff[200];
	FILE *fp1,*fpa;
	long len1,lena,len;
	//产生临时文件名。
	strcpy(FName, ".\\data\\");
	strcat(FName, filename);
	strcat(FName, ".tmp");
	//打开临时文件。
	if((fp1 = fopen(FName, "rb"))==NULL)
	{
		printf("\007\007");
		return L_ERROR;
	}
	fseek(fp1, 0, 0);
	len1 = filelength(fileno(fp1));
	//产生网络文件名。
	strcpy(FName, sys->PubSPath);
	strcat(FName, "\\");
	strcat(FName, filename);
	strcat(FName, ".dat");
	//打开网络文件,如果文件不存在,先产生它。
	if((fpa = fopen(FName, "a+b"))==NULL)
	{
		printf("\007\007");
		fclose(fp1);
		return L_ERROR;
	}
	fclose(fpa);
	//以修改模式打开文件。
	if((fpa = fopen(FName, "r+b"))==NULL)
	{
		printf("\007\007");
		fclose(fp1);
		return L_ERROR;
	}
	//获取文件长度。
	fseek(fpa, 0, 0);
	lena = filelength(fileno(fpa));

	for(int i=0; i<len1/reclen; i++)
	{
		//从临时文件读取数据.
		if(fread(Buff, reclen, 1, fp1)!=1)
		{
			printf("\007\007");
			chsize(fileno(fpa), lena);
			fclose(fpa);
			fclose(fp1);
			return L_ERROR;
		}
		fseek(fpa, 0, 2);
		//向网络文件写数据.
		if(fwrite(Buff, reclen, 1, fpa)!=1)
		{
			printf("\007\007");
			chsize(fileno(fpa), lena);
			fclose(fpa);
			fclose(fp1);
			return L_ERROR;
		}
	}
	//重新获取文件长度,以便验证写文件是否正确.
	fseek(fpa,0,0);
	len = filelength(fileno(fpa));
	//验证文件长度.
	if(len != lena + len1)
	{
		//文件长度不符,将文件改为原来长度。
		printf("\007\007");
		chsize(fileno(fpa), lena);
		fclose(fp1);
		fclose(fpa);
		return L_ERROR;
	}
	fclose(fp1);
	fclose(fpa);
	//产生临时文件名.
	strcpy(FName, ".\\data\\");
	strcat(FName, filename);
	strcat(FName, ".tmp");
	//删除临时文件.
	remove(FName);
	return L_OK;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -