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

📄 analysis.cpp

📁 我们学校牛人开发的选课外挂源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "stdafx.h"
#include "resource.h"
#include "GLOBAL.h"

PCHAR AnalysisHttpHeader(char *R)
{
	int pos,len;

	if ( Locate(R,"HTTP/1.1 503",0,0,0) )
	{
		lout("503 Service Temporarily Unavailable...\r\n选课服务器故障,请稍候再试...\r\n\r\n");
		return 0;
	}

	if ( Locate(R,"HTTP/1.1 200 OK\r\n",0,&pos,0) )	
	{
		R+=pos;
		if ( Locate(R,"Set-Cookie: ","\r\n",&pos,&len))
		{
			RtlZeroMemory(UserCookie,sizeof(UserCookie));
			lstrcpy(UserCookie,"Cookie: ");
			R+=pos;
			memcpy(UserCookie+8,R,len+2);
			R+=pos;
#ifdef _DEBUG
			lout(UserCookie);
#endif
		}
		
		if (Locate(R,"\r\n\r\n",0,&pos,0))
		{
			R+=pos;
		}
		if (Locate(R,"请您登录后再使用",0,0,0))
		{
			LogOFF("请您登录后再使用");
			return 0;
		}
		else
		{
			return R;
		}		
	}
	return 0;
}
void Analysis1(char *R)
{
	int pos,len,i;
	LV_ITEM lvi;
	char Buff[200];
	
	//首先分析文件头
	EnableDlgItem(hDlgQuery,IDC_PREVIOUS,false);
	EnableDlgItem(hDlgQuery,IDC_NEXT,false);
	SendMessage(hList1,LVM_DELETEALLITEMS,0,0);
	
	RtlZeroMemory(&myget,sizeof(struct_get));
	if ( Locate(R,"\"ctable\" VALUE=\"","\">",&pos,&len) )
	{
		R+=pos;
		memcpy(&myget.ctable [0],R,len);
#ifdef _DEBUG
		lout(&myget.ctable [0]);
#endif
		R=R+len+2;
	}
	else
	{
		//没有找到ntable_type字段
	}
	if ( Locate(R,"\"ntable_type\" VALUE=\"","\">",&pos,&len) )
	{
		R+=pos;
		memcpy(&myget.ntable_type  [0],R,len);
#ifdef _DEBUG
		//	lout(&myget.ntable_type [0]);
#endif
		R=R+len+2;
	}
	else
	{
		//没有找到ctable字段
	}
	if ( Locate(R,"\"ccolumns\" VALUE=\"","\">",&pos,&len) )
	{
		R+=pos;
		memcpy(&myget.ccolumns [0],R,len);
#ifdef _DEBUG
		//	lout(&myget.ccolumns [0]);
#endif
		R=R+len+2;
	}
	else
	{
		//没有找到ccolumns字段
	}
	if ( Locate(R,"\"cclauses\" VALUE=\"","\">",&pos,&len) )
	{
		R+=pos;
		memcpy(&myget.cclauses  [0],R,len);
#ifdef _DEBUG
		//	lout(&myget.cclauses [0]);
#endif
		R=R+len+2;
	}
	else
	{
		//没有找到ccolumns字段
	}
	if ( Locate(R,"\"nrow_min\" VALUE=\"","\">",&pos,&len) )
	{
		R+=pos;
		memcpy(&myget.nrow_min  [0],R,len);
#ifdef _DEBUG
		//	lout(&myget.nrow_min [0]);
#endif
		R=R+len+2;
	}
	else
	{
		//没有找到nrow_min字段
	}
	if ( Locate(R,"\"nrow_max\" VALUE=\"","\">",&pos,&len) )
	{
		R+=pos;
		memcpy(&myget.nrow_max  [0],R,len);
#ifdef _DEBUG
		//	lout(&myget.nrow_max [0]);
#endif
		R=R+len+2;
	}
	else
	{
		//没有找到nrow_max字段
	}
	if ( Locate(R,"<-前纪录",0,&pos,0))
	{
		R+=pos;
		EnableDlgItem(hDlgQuery,IDC_PREVIOUS,true);
	}
	
	if ( Locate(R,"<TH>课程属性</TH>",0,&pos,0) )
	{
		R+=pos;	//此时停在<td 这儿
		
	}
	else
	{
		//没有找到课程
	}
	if ( Locate(R,"No data found",0,&pos,0) )
	{
		MessageBox(0,"没有此门课",szTitle,MB_ICONINFORMATION);
		return;
		//没有此门课
	}
	RtlZeroMemory(&lvi,sizeof(LV_ITEM));
	lvi.mask=LVIF_TEXT;
	lvi.pszText=Buff;
	lvi.cchTextMax=sizeof(Buff);
AGAIN1:
	lvi.iSubItem=0;
	Buff[0]=0;
	//	lvi.iItem=SendMessage(hList1,LVM_GETITEMCOUNT,0,0);
	i=SendMessage(hList1, LVM_INSERTITEM,0, (long)&lvi);
	/*	if (now_http_head==&http_head2)
	{
	i=0;
	}
	else
	{
	i=1;
		}*/
	for (i=1;i<13;i++)
	{
		RtlZeroMemory(Buff,sizeof(Buff));
		if ( Locate(R,"<TD ALIGN=\"LEFT\">","</TD>",&pos,&len) )
		{
			R+=pos;
			memcpy(Buff,R,len);
			R=R+len+5;
			SendMessage(hList1, LVM_SETITEM,0, (long)&lvi);
			
		}
		else
		{
			
		}
		lvi.iSubItem++;
	}
	/*		if (IsDlgButtonChecked(hDlgQuery,IDC_FILTER_AVAILABLE)==BST_CHECKED)
	{
	RtlZeroMemory(Buff,10);
	lvi.iSubItem=9;
	if (now_http_head==&http_head2) lvi.iSubItem++;
	SendMessage(hList1,LVM_GETITEMTEXT,lvi.iItem,(long)&lvi);
	i=atoi(Buff);
	if (i==0) 
	{
	SendMessage(hList1,LVM_DELETEITEM,lvi.iItem,0);
	lvi.iItem--;
	}
	
		}*/
	
	//-------------是否还有下一条记录------------------
	
	if ( Locate(R,"</TR>\n<TR>",0,&pos,0) )
	{
		R+=pos;
		lvi.iItem++;
		//lvi.lParam++;
		goto AGAIN1;
		
	}
	else
	{		
		RtlZeroMemory(Buff,10);
		i=SendMessage(hList1,LVM_GETITEMCOUNT,0,0);
		if (i>20 || IsDlgButtonChecked(hDlgQuery,IDC_FILTER_AVAILABLE)==BST_CHECKED)
		{
			lstrcpy(Buff,"共有");
			_itot(i,&Buff[4],10);
			lstrcat(Buff,"条记录");
			MessageBox(0,Buff,szTitle,MB_ICONINFORMATION);
		}
	}
	SetDlgItemText(hDlgQuery,IDC_QUERY_ALL,"任选课");
	SetDlgItemText(hDlgQuery,IDC_ALL_PE,"体育课");
	SetDlgItemText(hDlgQuery,IDC_ALL_COMPUTER,"计算机课");
	if ( Locate(R,"后纪录-&gt;",0,&pos,0))
	{
		R+=pos;
		EnableDlgItem(hDlgQuery,IDC_NEXT,true);
	}
	
	
}

void Analysis2(char *R)
{
	int pos,len,row=0,i;
	LV_ITEM lvi;
	char Buff[50];
	
	if ( Locate(R,"因学生不足,以下所选课程被取消",0,&pos,0))
	{
		R+=pos;
	}
	else
	{
		MessageBox(0,"无法分析停课信息",0,MB_ICONERROR);
		return;
	}
	
	SendMessage(hList2,LVM_DELETEALLITEMS,0,0);
	if ( Locate(R,"教师名</td></tr>",0,&pos,0))
	{
		R+=pos;
	}
	else
	{
		MessageBox(0,"没有停课信息",0,MB_ICONINFORMATION);
		return;
	}
	lvi.mask=LVIF_TEXT;
	lvi.pszText=Buff;
	
AGAIN2:
	lvi.iItem=row;
	lvi.lParam=row;
	
	if ( Locate(R,"<tr><td>",0,&pos,0))	//还有停课信息
	{
		R+=pos;
	}
	else
	{
		return;
	}
	
	
	
	//----课程号----------------
	RtlZeroMemory(Buff,sizeof(Buff));
	memcpy(Buff,R,7);
	lvi.iSubItem=0;
	SendMessage(hList2, LVM_INSERTITEM,0, (long)&lvi);
	R+=7;
	//----课程名,课序号,开课系所,课程属性----------------
	
	for (i=0;i<4;i++)
	{
		lvi.iSubItem++;
		if ( Locate(R,"</td><td>","</td><td>",&pos,&len))
		{
			R+=pos;
			RtlZeroMemory(Buff,sizeof(Buff));
			memcpy(Buff,R,len);
			R=R+len;
		}
		SendMessage(hList2, LVM_SETITEM,0, (long)&lvi);
	}
	//----教师名----------------
	lvi.iSubItem++;
	if ( Locate(R,"</td><td>","</td></tr>",&pos,&len))
	{
		R+=pos;
		RtlZeroMemory(Buff,sizeof(Buff));
		memcpy(Buff,R,len);
		R=R+len+10;
	}
	SendMessage(hList2, LVM_SETITEM,0, (long)&lvi);
	//是否还有下一条记录
	
	if ( Locate(R,"<tr><td>",0,&pos,0))
	{
		row++;
		goto AGAIN2;
	}
	
	
}

void Analysis3(char *R)
{
/*	int pos,len,i,j,k,row=0;
	bool aDelKch,mode=false;
	char Buffer[1000];
	char Name[20];
	char *B=Buffer;
	//LV_ITEM lvi;
	
	//清除所有IDD_CHOOSEBOX上的窗口
	
	for (i=0;i<MAX_COURSE+8;i++)
	{
		if (CW2[i]) 
		{
			DestroyWindow(CW2[i]);
			CW2[i]=0;
		}
	}
	for (i=0;i<MAX_COURSE;i++)
		for (j=0;j<COLUMN_COUNT;j++)
			if (CW[i][j]) 
			{
				DestroyWindow(CW[i][j]);
				CW[i][j]=0;
			}
			
			RtlZeroMemory(KW,sizeof(KW));
			RtlZeroMemory(KW2,sizeof(KW2));
			//首先是上半部分
			
			if (Locate(R,"你目前没有权限选课",0,0,0) || Locate(R,"现在不是选课时间",0,0,0))
			{
				MessageBox(0,"对不起,现在不是选课时间",szTitle,MB_ICONWARNING);
				return;
			}
			
			if (!Locate(R,"<TH>是否服从调剂</TH>",0,&pos,0))
			{
				if (!Locate(R,"<TH>上课周次</TH>",0,&pos,0))
				{
					MessageBox(0,"对不起,课程选择数据有误",szTitle,MB_ICONERROR);
					return;
				}
				else
				{
					mode=true;
					R+=pos;
				}
			}
			else
			{
				R+=pos;
			}
			while (true)
			{
				B=Buffer;
				if (Locate(R,"aDelCourse value=",0,&pos,0))
				{
					R+=pos;
					memcpy(&KW2[row][0],R,9);
				}
				RtlZeroMemory(Buffer,sizeof(Buffer));
				for (i=0;i<10-mode;i++)
				{
					if (Locate(R,"<TD>","</TD>",&pos,&len))
					{
						R+=pos;
						if (len)
						{
							while ((*R)=='<')
							{
								Locate(R,">","<",&pos,&len);
								R+=pos;
							}
							memcpy(B,R,len);
							B+=len;
							memcpy(B,"   ",3);
							B+=3;
							R=R+len+5;
						}
					}
				}
				
				if (!memcmp(B-9,"&nbsp;",6))
				{
					*(B-12)=0;
				}
				if (!memcmp(B-5,"是",2))
				{
					*(B-3)=0;
				}
				
				
				CW2[row]=CreateWindowEx(0,"button",Buffer, WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX |BS_MULTILINE , 20, 60+20*row, 1000, 20, hDlgChoose, NULL, hInst, NULL);
				SendMessage(CW2[row],WM_SETFONT,(unsigned int)hFont,1);
				row++;
				
				if (row>MAX_COURSE)
				{
					MessageBox(0,"对不起,数据有误,无法继续分析",szTitle,MB_ICONWARNING);
					return;
				}
				//注意,在Unix上比R+1中间是\n,在Windows上比R+2中间是\r\n
				//if ( !wmemcmp(R+2,"</TR>\r\n</TABLE>",15*sizeof(char)) ) break;
				if ( !memcmp(R+1,"</TR>\n</TABLE>",14) ) break;
			}
			
			//	MessageBox(0,"上半部分完成",0,0);
			
			
			//下半部分
			if (mode) goto finish_analysis3;
			
			if (Locate(R,"<TH>第五志愿</TH>",0,&pos,0))
			{
				R+=pos;
			}
			else
			{
				MessageBox(0,"对不起,课程选择数据有误",szTitle,MB_ICONERROR);
				return;
			}
			
			j=0;//j用于存放CW此时的row号,而变量row用于计算cw[0][*]的height属性
			while (true)
			{
				B=Buffer;
				RtlZeroMemory(Buffer,sizeof(Buffer));
				//找到下一个课程的开始处
				//		if (Locate(R,"<tr>",0,&pos,0))
				//			R+=pos;
				//第一个AutoCheckBox跳过
				if (Locate(R,"<TD>","</TD>",&pos,&len))
				{
					R+=pos;
					if (*R=='&')) aDelKch=false;
					if (*R=='<')) aDelKch=true;
				}
				//课程属性、课序号、课程名、限制说明
				for (i=0;i<4;i++)
				{
					if (Locate(R,"<TD>","</TD>",&pos,&len))
					{
						R+=pos;
						while ((*R)=='<'))
						{
							Locate(R,">","<",&pos,&len);
							R+=pos;
						}
						memcpy(B,R,len);
						if (i==0)	//课程属性
						{
							if (memcmp(R,"必修",4)==0)
							{
								KW[j][8]='1');
							}
							else if (memcmp(R,"限选",4)==0)
							{
								KW[j][8]='2');
							}
							else if (memcmp(R,"任选",4)==0)
							{
								KW[j][8]='3');
							}
						}
						
						if (i==2)	//课程号
						{
							memcpy(&KW[j][0],R,7);
							//lout(&KW[j][0]);
							//lout("\r\n";
						}
						
						if (i==3) continue;
						
						
						B+=len;
						memcpy(B,"   ",3);
						B+=3;
						R=R+len+5;
					}
				}
				//是否取消

⌨️ 快捷键说明

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