📄 mainunit.cpp
字号:
//---------------------------------------------------------------------------
#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 + -