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

📄 user.cpp

📁 学校考试信息管理,一项评估学生知识掌握程度及教师工作质量的重要手段
💻 CPP
字号:
// User.cpp : 实现文件
//

#include "stdafx.h"
#include "StudentScore.h"
#include "User.h"

//CADOStorage
CADOStorage::CADOStorage():CADODataset()
{ 
	SetConnection(theApp.m_pDBCon);
}

CADOStorage::~CADOStorage()
{
}

void CADOStorage::ExecInsertSql(CString TblName,
								CString Fldlist,
								CString ValueList)
{
	CString Sqlstr;
	Sqlstr="Insert into " + TblName + " (" + Fldlist + 
		") values("+ValueList+")";
    ExecSql(Sqlstr);
}

void CADOStorage::ExecUpdateSql(CString TblName,
								CString UpdateStr,
								CString Constr)
{
	CString Sqlstr;
	Sqlstr="UPdate " + TblName + " set " + UpdateStr + " " + Constr;
    ExecSql(Sqlstr);
}

void CADOStorage::ExceDeleteSql(CString TblName,CString Constr)
{
	CString Sqlstr;
	Sqlstr="delete from " + TblName + " " + Constr;
    ExecSql(Sqlstr);
}

// CUser
CUser::CUser()
{ 	
	m_pStorage=NULL; 
    m_TblName="SysUser"; 
	m_pStorage=new CADOStorage();
    ASSERT(m_pStorage!=NULL);
	 
	m_pStorage->OpenSql(m_TblName); 	
}

CUser::~CUser()
{
	if (m_pStorage!=NULL)
	{
	  delete m_pStorage;
	  m_pStorage=NULL; 
	}
    m_NameList.RemoveAll(); 
}

void CUser::GetUserNames()
{ 
	CString name;
	
	m_NameList.RemoveAll();  
	m_pStorage->MoveFirst();
	while(!m_pStorage->IsEof())
	{
		m_pStorage->GetFieldValue("用户名",name); 
		m_NameList.AddTail(name);
		m_pStorage->MoveNext(); 
	}	
}

// CUser 成员函数
bool CUser::Check(CString UserName,CString Password)
{
	m_pStorage->OpenSql(m_TblName,"*","where 用户名='"+UserName+"'");  
	m_pStorage->GetFieldValue("密码",m_Password);
    if(m_Password==Password)
	{
	  m_pStorage->GetFieldValue("用户名",m_UserName); 
	  m_pStorage->GetFieldValue("权限",m_Right);
	  m_LoginDate=CTime::GetCurrentTime(); 
	  return true;
	}
	else
	{
	  return false;
	}
}

//CBaseTbl
CBaseTbl::CBaseTbl()
{
	m_TblName="表说明"; 
}

CBaseTbl::~CBaseTbl()
{
}

void CBaseTbl::GetTblnames()
{
	m_TblList.RemoveAll();
    m_Storage.OpenSql(m_TblName,"中文名称","where 表属性=0","order by 编号");
	m_Storage.MoveFirst();
	CString name;
	while(!m_Storage.IsEof())
	{
		m_Storage.GetFieldValue(0,name);
        m_TblList.AddTail(name);
		m_Storage.MoveNext(); 
	}
}

bool CBaseTbl::SelectUnionTbl(CString StrTblname,
							  CString& Realtbl,
							  bool ByRealTblName)
{
	//1.取得真实表名
	if(!ByRealTblName)
	{
	   m_Storage.OpenSql(m_TblName,"*","where 中文名称='"+StrTblname+"'");
	   m_Storage.GetFieldValue("表名称",Realtbl);
	}
	else
	{
	   m_Storage.OpenSql(m_TblName,"*","where 表名称='"+Realtbl+"'");	
	}
    //2.生成联合sql语句
	CString sqlstr;
	bool IsSingleTbl;
    m_Storage.GetFieldValue("独立表",IsSingleTbl);
	if(IsSingleTbl)
	{
		sqlstr="select * from "+Realtbl;
	}
	else
	{
    	CString  ExtraTblname=Realtbl;//外部表字符串
		CString  FTblname;
    	CString  fldname;             //字段字符串
        CString  Dispfldname;
		CString  MKName,FKName;       //主字段,对应字段
		CString  ConStr;              //条件
		int      FKCount;             //外键个数
		m_Storage.GetFieldValue("外键个数",FKCount);
		sqlstr="select "+Realtbl+".* ";
		for(int i=0;i<FKCount;i++)
		{
            fldname="显示字段"+IntToStr(i);
            m_Storage.GetFieldValue(fldname,Dispfldname);
            fldname="外部表"+IntToStr(i);
		    m_Storage.GetFieldValue(fldname,FTblname);
            fldname="字段"+IntToStr(i);
		    m_Storage.GetFieldValue(fldname,MKName);
            fldname="外键"+IntToStr(i);
		    m_Storage.GetFieldValue(fldname,FKName);
            
			sqlstr=sqlstr+","+FTblname+"."+Dispfldname+" ";
			ExtraTblname+=","+FTblname;
			if(i==0)
			{
			   ConStr+=Realtbl+"."+MKName+"="+FTblname+"."+FKName;
			}
			else
			{
			   ConStr+=" and "+Realtbl+"."+MKName+"="+FTblname+"."+FKName;
			}
		}
		sqlstr+=" from "+ExtraTblname+" where "+ConStr;
	}
	//3.查询得出结果
	if(!Realtbl.IsEmpty()&&(Realtbl!=""))
	{
		m_Storage.Open(sqlstr,CADODataset::openQuery); 
    	  return true;
	}
	else
	 return false;
}

void CBaseTbl::RefreshList(CListCtrl& List1)
{
	if(m_Storage.IsOpen())
	{
	   m_Storage.FillList(List1);
	}
}

bool CBaseTbl::GetFieldRecord(CPtrArray& FieldArray,
							  CString ctblname,
							  CString constr) //单表记录数组 
{
	ASSERT(ctblname!="");
	//1.判断及清理工作
	if (m_Storage.IsOpen())
	{
		m_Storage.Close();
	}
	int ArrayCount=(int)FieldArray.GetSize();
	for(int j=0;j<ArrayCount;j++)
	{
		delete FieldArray.GetAt(j);
	}
	FieldArray.RemoveAll();
	
	CFieldRecord* fldrec;
	CADOFieldInfo fldinfo;
	CString fldvalue;
	//2.判断记录位置
	bool IsZeroRecord;//记录数为0
	if(constr == "")//添加记录
	{
		m_Storage.OpenSql(ctblname);
		if (m_Storage.GetRecordCount()>0)
		{
			m_Storage.MoveLast();
			IsZeroRecord=false;
		}
		else
			IsZeroRecord=true;
	}
	else
	{
		m_Storage.OpenSql(ctblname,"*",constr);
		if(m_Storage.GetRecordCount()>0)
		{
			m_Storage.MoveFirst();
			IsZeroRecord=false;
		}
		else
		{
			IsZeroRecord=true;
			return false;
		}
	}
	int count=m_Storage.GetFieldCount();
	//3.添加字段记录到指针数组
	for(int i=0;i<count;i++)
	{  
		fldrec=new CFieldRecord();
		if(IsZeroRecord)
		{
			fldvalue="";
		}
		else
		{
			m_Storage.GetFieldValue(i,fldvalue);
		}
		m_Storage.GetFieldInfo(i,&fldinfo);
		strcpy(fldrec->FKtbl,ctblname);
		
		strcpy(fldrec->FieldName,fldinfo.m_strName);
		strcpy(fldrec->Value,fldvalue);
		
		switch(fldinfo.m_nType)
		{
		case VT_DATE:
			fldrec->IsStrType=true;
			fldrec->IsBool =false; 
			break;
		case VT_BSTR:
			fldrec->IsStrType=true;
			fldrec->IsBool =false; 
			break;
		case 202:
			fldrec->IsStrType=true;
			fldrec->IsBool =false; 
			break;
		case VT_BOOL:
			fldrec->IsBool=true;
			fldrec->IsStrType=false; 
			break;
		default:
			fldrec->IsStrType=false; 
			fldrec->IsBool =false;  
			break;
		}
		fldrec->pFK=NULL; 	  
		fldrec->IsVisible=true;
		FieldArray.Add(fldrec);
	}
	//添加外键信息
	AddExtraFieldRecord(FieldArray,ctblname);
	return true;
}

bool CBaseTbl::RemoveRecord(int CurRecordPos)
{
	  if(!m_Storage.IsOpen())
	  {return false;} 
	  ASSERT(CurRecordPos>=0);
      if (m_Storage.GetRecordCount()>0) 
	  {
          m_Storage.MoveFirst();
		  while(CurRecordPos-->0)
		  { m_Storage.MoveNext();} 
	  }
	  m_Storage.Delete();
	  return true;
}

void CBaseTbl::ReQuery(CString TblName)
{
	m_Storage.OpenSql(TblName);
}

void CBaseTbl::ExecSql(CString SqlStr)
{
  m_Storage.ExecSql(SqlStr);
}

void CBaseTbl::AddExtraFieldRecord(CPtrArray& FieldArray,
								   CString ctblname) 
{
	CADOStorage mk;
	CFieldRecord* fldrec;//外键信息指针
	CFieldRecord* pMfldrec;//主键信息指针
	mk.OpenSql("表说明","*","where 表名称='"+ctblname+"'");
	if(mk.GetRecordCount()==0)
	{
		return ;
	}
	else
	{
		bool IsSingleTbl;
		mk.GetFieldValue("独立表",IsSingleTbl);
		if(IsSingleTbl)//是独立表
		{
			return ;
		}
		else
		{
			//添加外键列表
			int fkcount=0;
			mk.GetFieldValue("外键个数",fkcount);
			CString name,value;//
			char a[10];
			for(int i=0;i<fkcount;i++)
			{ //添加外键列表
				fldrec=new CFieldRecord();
				itoa(i,a,10);
				name="外键";
				name=name+a;
				mk.GetFieldValue(name,value);
				strcpy(fldrec->FieldName,value); 
				name="外部表";
				name=name+a;
				mk.GetFieldValue(name,value);
				strcpy(fldrec->FKtbl,value); 
				name="显示字段";
				name=name+a;
				mk.GetFieldValue(name,value);
				strcpy(fldrec->DisplayName ,value); 
				//确定	
				name="字段";
				name=name+a;
				mk.GetFieldValue(name,value);
				fldrec->pFK=NULL; 
				//确定主字段,添加到链表尾部
				for(int j=0;j<FieldArray.GetSize();j++)
				{  
					pMfldrec=(CFieldRecord*)FieldArray.GetAt(j);  
					if(_stricmp(value,pMfldrec->FieldName)==0)
					{
						pMfldrec->pFK=fldrec;
						break; 
					}
				}		   
			}
		}
	}
}

⌨️ 快捷键说明

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