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

📄 sj.cpp

📁 DOS下一个完整的大型程序源代码
💻 CPP
字号:
#if !defined( __STDIO_H )
#include <StdIO.h>
#endif  // __STDIO_H

#if !defined( __STRING_H )
#include <String.h>
#endif  // __STRING_H

#if !defined( __STDLIB_H )
#include <StdLib.h>
#endif  // __STDLIB_H

#define Uses_Window
#define Uses_Menu
#define Uses_DBase
#include <ly.h>

#include "sj.h"
#include "sjcfg.h"
#include "sjmenu.h"
#include "sjdbf.h"

Config config;

char szSJDbf[] = "SJ.DBF";
char szQfDbf[] = "QF.DBF";
char fnCjDbf[] = "CJ.DBF";

static char szCfgName[] = "SJ.CFG";

SJ::SJ()
{
   InitGraph();
   SetPageLength( 30 );

   static char szTytle[]="   ~A电话费现场收缴系统 ~D版本2.2 ~B四川省高新通讯工程公司 ~F版权所有 ~E作者:杨千栋";
   sjWin = new Window( 0, 640, 479, szTytle, tpNoSave );

   AddMenu();

   ClearStatus();
   ShowStatus();
   SetIdle( ShowClock );

   FILE *fp = fopen( szCfgName, "rb" );
   if( fp == NULL ) Error( "配置丢失,需要管理员重新配置" );
   fread( &config, sizeof( Config ), 1, fp );
   fclose( fp );
   InitPassword( config.szPassword );
   ReadZnjFree();

   dbfSJ = new DBase( szSJDbf, tpNoLoad );
   dbfQf = new DBase( szQfDbf, tpNoLoad );
   dbfLog = new DBase( "LOG.DBF", tpNoLoad );
   dbfDuty = new DBase( "DUTY.DBF" );

   InitNet();
}

void SaveConfig()
{
   FILE *fp = fopen( szCfgName, "wb" );
   fwrite( &config, sizeof( Config ), 1, fp );
   fclose( fp );
}

BOOL DateCmp( date& d1, date& d2 )
{
   if( d1.da_year < d2.da_year ) return -1;
   else if( d1.da_year == d2.da_year )
   {
      if( d1.da_mon < d2.da_mon ) return -1;
      else if( d1.da_mon == d2.da_mon ) return d1.da_day - d2.da_day;
      else return 1;
   }
   else return 1;
}

static BOOL CheckDate( char* szDate, date& d )
{                  // 012345678901234567890
   char str[ 11 ]; // 1997/02/05-1997/02/13
   strcpy( str, szDate );
   str[ 4 ] = str[ 7 ] = 0;

   d.da_year = atoi( str );
   if( d.da_year < 1996 && d.da_year > 2100 ) return FALSE;
   d.da_mon = atoi( str + 5 );
   if( d.da_mon < 1 && d.da_mon > 12 ) return FALSE;
   d.da_day = atoi( str + 8 );
   if( d.da_day < 1 && d.da_day > 31 ) return FALSE;
   return TRUE;
}

void SJ::ReadZnjFree()
{
   nZnjFree = 0;
   FILE* fp = fopen( "SJ.ZNJ", "r" );
   if( fp == NULL ) return;
   char str[ 201 ];
   while( fgets( str, 200, fp ) )
   {
      if( *str < '0' || *str > '9' ) continue;
      str[ strlen( str ) - 1 ] = 0;
      str[ 10 ] = 0;
      if( !CheckDate( str, dZnjFree1[ nZnjFree ] ) ||
          !CheckDate( str + 11, dZnjFree2[ nZnjFree ] ) ||
          DateCmp( dZnjFree1[ nZnjFree ], dZnjFree2[ nZnjFree ] ) > 0 )
         Error( "文件SJ.ZNJ中存在错误的日期" );
      nZnjFree ++;
   }
   fclose( fp );
}

SJ::~SJ()
{
   SaveConfig();
   delete dbfSJ;
   delete dbfQf;
   delete dbfLog;
   delete dbfDuty;

   delete sjMenu;
   delete sjWin;
   CloseGraph();
}

void SJ::HandleEvent()
{
   if( DoSJ() ) return;
   ShowStatus();

   Event event;
   for(;;)
   {
      while( !GetEvent( event ) );

      sjMenu->HandleEvent( event );
      sjWin->HandleEvent( event );

      if( event.what == evCommand )
      {
         switch( event.command )
         {
            case cmDoSJ:
              if( DoSJ() ) return;
              break;
            case cmPrintQf:
              //if( CheckPassword() ) PrintQf();
              PrintQf();
              break;
            case cmPrintUser:
              PrintUser();
              break;
            case cmClose:
            case cmQuit:
              return;

            case cmBrowLog:
              BrowLog();
              break;
            case cmPrintLog:
              PrintLog();
              break;

            case cmDayCount:
              DayCount();
              break;
            case cmMonthCount:
              MonthCount();
              break;
            case cmYearCount:
              YearCount();
              break;

            case cmSetPassword:
              if( CheckPassword() ) SetPassword();
              break;
            case cmRegisterDuty:
              if( CheckPassword() ) RegisterDuty();
              break;
            case cmInputQf:
              if( CheckPassword() ) InputQf();
              break;

            case cmLoadDbf:
              if( CheckPassword() ) LoadDbf();
              break;
            case cmSetFree:
              if( CheckPassword() ) SetFree();
              break;
            case cmPrintStop:
              //if( CheckPassword() ) PrintStop();
              PrintStop();
              break;
            case cmReloadDbf:
              if( CheckPassword() ) ReloadDbf();
              break;
            case cmSendYyDbf:
              //if( CheckPassword() ) SendYyDbf();
              SendYyDbf();
              break;

            case cmCancel:
            case cmAbout:
              About();
              break;
            case cmHelp:
              Help();
              break;
         }
         ShowStatus();
      }
   }
}

void SJ::About()
{
   static char *szAboutText[] =
   {
      "话费现场收缴系统",
      "版本: 2.2",
      "四川省高新通讯工程公司 版权所有",
      "(c)1996-1999",
      "作者: 杨千栋",
      NULL
   };
   extern char szAboutIcon[];
   ShowMessage( "关于", szAboutText, szAboutIcon );
}

void SJ::Help()
{
   static char *szHelp[] =
   {
      "■您可以按 ALT-X 键或选择菜单项〔收缴〕 ",
      "  下的〔退出〕以退出本系统。            ",
      "■窗口上部为标题栏,标题栏下为菜单条,本",
      "  系统的所有功能都可以通过用鼠标选择菜单",
      "  来完成。使用每个功能都可以获取帮助。  ",
      "■窗口底部为提示栏,提示几个常用的功能键",
      "  还显示出当前的日期和时间。            ",
      NULL
   };
   ShowHelp(szHelp);
}

void SJ::ShowStatus()
{
   ::ShowStatus( "~CF2~0收缴 ~CF3~0查询日志 ~CALT+X~0退出" );
}

void main()
{
   StartUp( "\\SJ" );
   static SJ sj;
   sj.HandleEvent();
}

void SJ::PrintQf()
{
   MessageBox( "正在打印,按Esc退出..." );
   int nFields[] = { fdTel, fdCNo, fdName, fdRChg, -1 };
   if( PrnReady() && dbfSJ->PrintTytle( nFields ) )
   {
      for( long i = 0; i < dbfSJ->GetRecordNum(); i++ )
      {
         char szOk[ flBool ];
         dbfSJ->GetField( i, fdOk, szOk );
         if( *szOk == 'F' )
           if( !dbfSJ->PrintRecord( i, nFields ) ) break;
      }
   }
   NewPage();
   DeleteMsgBox();
}

void SJ::PrintUser()
{
   MessageBox( "正在打印,按Esc退出..." );
   LoadIndex();
   char szTel[ flTel + 1 ];
   szTel[ flTel ] = 0;
   int nFields[] = { fdQfTel, fdQfDate, fdQfRChg, -1 };
   if( PrnReady() && dbfQf->PrintTytle( nFields ) )
   {
      for( long i = 0; i < dbfQf->GetRecordNum(); i++ )
      {
         dbfQf->GetField( i, fdQfTel, szTel );
         if( SearchTel( szTel ) == 0xffff )
           if( !dbfQf->PrintRecord( i, nFields ) ) break;
      }
   }
   NewPage();
   CloseIndex();
   DeleteMsgBox();
}

⌨️ 快捷键说明

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