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

📄 mainunit.cpp

📁 EasyClass是针对某大学Web选课子系统一个自动的课程检索程序。EasyClass允许用户对希望关注的课程自动检测空位
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include "MMSystem.h"
#include "MainUnit.h"
#include "OptionUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma link "trayicon"
#pragma link "SHDocVw_OCX"
#pragma resource "*.dfm"
#include <Inifiles.hpp>
//目标页地址格式
String Stu_no="";//学号
String Passwd="";//密码
TMainForm *MainForm;
TStrings *CODE=new TStringList();//接收网页代码
/////////////////////////////////////////////////////////////////////////
/////////////////////////////参数设置///////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//取得课程情况的地址
String ViewURL="http://mis-acaf1.szu.edu.cn/mis_home/education/sele_count.asp?course_no=";
//登录选课系统地址
String LoginURL="http://mis-acaf1.szu.edu.cn/mis_home/education/entrance.asp";
//选课操作地址
String ChooseURL="http://mis-acaf1.szu.edu.cn/mis_home/education/choose.asp";
//其他参数可在TMainForm::TimerTimer(TObject *Sender)中修改
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
        : TForm(Owner)
{
 //获得空闲的热键ID
 HotkeyID=GlobalAddAtom("EasyClassHotkey");
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::ADDCLASSChange(TObject *Sender)
{ //控制"添加"按钮是否有效
 if(ADDCLASS->Text!=""&&BeginScan->Enabled==1) ClassAdd->Enabled=1;
 else ClassAdd->Enabled=0;
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::ClassClearClick(TObject *Sender)
{ //清除"被关注课程号"
 if(MessageDlg("确实要清除所有课程号吗?",mtConfirmation, TMsgDlgButtons() << mbYes <<mbNo, 0)==mrYes) NUMBERS->Clear();
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::BeginScanClick(TObject *Sender)
{ //开始检索
 if(NUMBERS->Items->Count == 0) return;
 StatusBar->Panels->Items[0]->Text = "检索中";
 TrayIcon->Animate=0;
 TrayIcon->IconIndex=0;

 EndScan->Enabled=1;
 E1->Enabled=1;
 N8->Enabled=1;
 ClassDelete->Enabled=0;
 ClassClear->Enabled=0;
 ClassAdd->Enabled=0;
 BeginScan->Enabled=0;
 N3->Enabled=0;
 N7->Enabled=0;

 HZ->Enabled=0;

 ClassView->Clear();
 CANGOON=1;
 for(int j=0;j<NUMBERS->Items->Count;j++)
  {
   ClassView->AddItem(NULL,NULL);
   ClassView->Items->Item[j]->SubItems->Add("");
   ClassView->Items->Item[j]->SubItems->Add("");
   ClassView->Items->Item[j]->SubItems->Add("");
   ClassView->Items->Item[j]->SubItems->Add("");
   ClassView->Items->Item[j]->SubItems->Add("");
   ClassView->Items->Item[j]->SubItems->Add("");
  }
  if(HZ->Value<60) HZ->Value=60;
  Timer->Interval = HZ->Value * 1000;
  //启动检索循环的Timer
  TimerTimer(Sender);
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::EndScanClick(TObject *Sender)
{ //停止检索
 CANGOON=0;
 Timer->Enabled = 0;
 EndScan->Enabled=0;
 E1->Enabled=0;
 N8->Enabled=0;
 ClassDelete->Enabled=1;
 ClassClear->Enabled=1;
 if(ADDCLASS->Text!="") ClassAdd->Enabled=1;
 BeginScan->Enabled=1;
 N3->Enabled=1;
 N7->Enabled=1;
 HZ->Enabled=1;
 TrayIcon->Animate = 0;
 TrayIcon->IconIndex=0;
 StatusBar->Panels->Items[0]->Text = "就绪";
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::ClassAddClick(TObject *Sender)
{ //添加新的课程号
 if(ADDCLASS->Text.Trim()==""){Beep();return;}
 TListItem *temp;
 temp=NUMBERS->Items->AddItem(NULL,NULL);
 temp->Caption = ADDCLASS->Text;
 temp->SubItems->Add(TYPE->Text);
 temp->SubItems->Add(STRING->Text);
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::ClassDeleteClick(TObject *Sender)
{
 //删除指定课程
 NUMBERS->DeleteSelected();        
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
{
 CANGOON=0;
 delete CODE;

 //保存设置
 TIniFile* SETS = new TIniFile(ExtractFileDir(Application->ExeName)+"\\EasyClassInfo.ini");
 SETS->WriteBool("Sets","UseRing",UseRing);
 SETS->WriteInteger("Sets","Delay",HZ->Value);
 SETS->WriteString("Sets","RingFile",RingFile);
 SETS->WriteBool("Sets","UseAutoCopy",UseAutoCopy);
 SETS->WriteBool("Sets","UseAutoRelink",UseAutoRelink);
 SETS->WriteInteger("Sets","Hotkey",Hotkey);
 SETS->EraseSection("Classes");
 SETS->WriteInteger("Classes","COUNT",NUMBERS->Items->Count);

 for(int i=1;i<=NUMBERS->Items->Count;i++)
 {
  SETS->WriteString("Classes",IntToStr(i)+"_ClassNo",NUMBERS->Items->Item[i-1]->Caption);
  SETS->WriteString("Classes",IntToStr(i)+"_ClassType",NUMBERS->Items->Item[i-1]->SubItems->Strings[0]);
  SETS->WriteString("Classes",IntToStr(i)+"_ClassString",NUMBERS->Items->Item[i-1]->SubItems->Strings[1]);
 }

 delete SETS;
 //注销热键
 UnregisterHotKey(Handle,HotkeyID);
 GlobalDeleteAtom(HotkeyID);

 exit(0);
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::FormCreate(TObject *Sender)
{
 //读取设置
 TIniFile* SETS = new TIniFile(ExtractFileDir(Application->ExeName)+"\\EasyClassInfo.ini");
 HZ->Value=SETS->ReadInteger("Sets","Delay",60);
 UseRing=SETS->ReadBool("Sets","UseRing",1);
 RingFile=SETS->ReadString("Sets","RingFile","SYSTEMBEEP");
 UseAutoCopy=SETS->ReadBool("Sets","UseAutoCopy",1);
 UseAutoRelink=SETS->ReadBool("Sets","UseAutoRelink",1);
 Hotkey=SETS->ReadInteger("Sets","Hotkey",0);
 int COUNT = SETS->ReadInteger("Classes","COUNT",0);
 if(COUNT>0)
 {
  TListItem *temp;
  String CLASSID;
  String CLASSTYPE;
  String CLASSSTRING;
  for(int i=COUNT;i>=1;i--)
  {
   CLASSID = SETS->ReadString("Classes",IntToStr(i)+"_ClassNo","");
   CLASSTYPE = SETS->ReadString("Classes",IntToStr(i)+"_ClassType","必修");
   CLASSSTRING = SETS->ReadString("Classes",IntToStr(i)+"_ClassString","");
   if(CLASSID!="")
   {
    temp=NUMBERS->Items->AddItem(NULL,NULL);
    temp->Caption = CLASSID;
    temp->SubItems->Add(CLASSTYPE);
    temp->SubItems->Add(CLASSSTRING);
   }
  }
 }
 delete SETS;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::APPMessage(tagMSG &Msg, bool &Handled)
{
 //接受热键信息
 if(Msg.message!=WM_HOTKEY) return;
 TrayIcon->Restore();
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::A1Click(TObject *Sender)
{
 //关于窗口
 ShowMessage("免责声明:\n本程序并不对外发布,只作为2005年2月朱槿斋首届原创软件设计大赛参赛作品,若作品被流传出去造成影响,本人概不负责!");
 ShellAbout(Handle,MainForm->Caption.c_str(),"曾楚 02计算机B班 2002131128\n朱槿斋首届原创软件设计大赛参赛作品",Application->Icon->Handle);
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::TimerTimer(TObject *Sender)
{
 Timer->Enabled = 0;//暂停计算,直到检索完成再继续
 bool AllFinished=1;//判断是否全部要选的课都完成
 if(!CANGOON) return;   //停止检索

 //执行检索循环
 String CLASSNO;//课程号
 String CLASSNAME;//课程名
 String LIMIT;//限选
 String USED;//已选
 String EACH_TYPE;//类型
 String EACH_STRING;//备注
 int BEGIN,LENGTH;//字段截获位置
 bool HaveSeat=0;//此次扫描中有有空位课程

  for(int i=0;i<NUMBERS->Items->Count;i++)
  {
   if(ClassView->Items->Item[i]->SubItems->Strings[3]=="选课成功") continue;//跳过已经成功选课的课程
   CODE->Clear();
   try //尝试获得记录指定课程的选课情况
   {
    HTTP->Get(ViewURL+NUMBERS->Items->Item[i]->Caption);
   }
   catch (Exception &exception)
   {
    if(!UseAutoRelink) //不使用自动重新连接
    {
     EndScan->OnClick;

⌨️ 快捷键说明

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