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

📄 querydata.cpp

📁 一个详细的学籍管理系统源码,支持数据查找、排序、导入、导出
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// QueryData.cpp : 实现文件
//

#include "stdafx.h"
#include "StudentRecords.h"
#include "QueryData.h"
#include "afxdlgs.h"


// CQueryData 对话框

IMPLEMENT_DYNAMIC(CQueryData, CDialog)

CQueryData::CQueryData(CWnd* pParent /*=NULL*/)
	: CDialog(CQueryData::IDD, pParent)
{

}

CQueryData::~CQueryData()
{
}

void CQueryData::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_CLASS, m_class);
	DDX_Control(pDX, IDC_SEX, m_sex);
	DDX_Control(pDX, IDC_SCORESEG, m_scoreseg);
	DDX_Control(pDX, IDC_XUEKE, m_xueke);
	DDX_Control(pDX, IDC_LIST1, m_list1);
	DDX_Control(pDX, IDC_READEM1, m_readem);
}


BEGIN_MESSAGE_MAP(CQueryData, CDialog)
	ON_BN_CLICKED(IDC_QUERY, &CQueryData::OnBnClickedQuery)
	ON_BN_CLICKED(IDC_MODIFY, &CQueryData::OnBnClickedModify)
	ON_BN_CLICKED(IDC_DEL, &CQueryData::OnBnClickedDel)
	ON_BN_CLICKED(IDC_SAVETXT, &CQueryData::OnBnClickedSavetxt)
	ON_WM_MOUSEWHEEL()
	ON_WM_SHOWWINDOW()
	ON_CBN_SELCHANGE(IDC_CLASS, &CQueryData::OnCbnSelchangeClass)
END_MESSAGE_MAP()


// CQueryData 消息处理程序

BOOL CQueryData::PreTranslateMessage(MSG* pMsg)
{
	if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)
	{
		OnBnClickedQuery();
		return   true;
	}
	if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_ESCAPE)
		return   true;

	return CDialog::PreTranslateMessage(pMsg);
}

BOOL CQueryData::OnInitDialog()
{
	CDialog::OnInitDialog();

	m_sex.AddString("不选");
	m_sex.AddString("男");
	m_sex.AddString("女");
	m_readem.AddString("无");
	m_readem.AddString("缺考");
	m_readem.AddString("舞弊");
	
	UpdateFlexGrid(3,9,2,1);

	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}

void CQueryData::UpdateFlexGrid(int m,int n,int fm,int fn)
{
	m_list1.Clear();
	m_list1.SetRows(m);
	m_list1.SetCols(n);
	m_list1.SetFixedRows(fm);
	m_list1.SetFixedCols(fn);
	m_list1.SetSelectionMode(0); 
	m_list1.SetMergeCells(3);//此风格的设定与上一句联合使用,后面用m_list1.SetMergeCol(x,TRUE);可合并单元格
	m_list1.SetRowHeightMin(260);
	int i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			m_list1.SetRow(long(i));
			m_list1.SetCol(long(j));
			m_list1.SetCellAlignment(4);
		}
	}
	CString str;
	str="序号";
	m_list1.SetTextMatrix(0,0,str);
	m_list1.SetTextMatrix(1,0,str);
	m_list1.SetColWidth(0,480);
	str="学        校";
	m_list1.SetTextMatrix(0,1,str);
	m_list1.SetTextMatrix(1,1,str);
	m_list1.SetColWidth(1,2200);
	str="年    级";
	m_list1.SetTextMatrix(0,2,str);
	m_list1.SetTextMatrix(1,2,str);
	m_list1.SetColWidth(2,1200);
	str="班";
	m_list1.SetTextMatrix(0,3,str);
	m_list1.SetTextMatrix(1,3,str);
	m_list1.SetColWidth(3,720);
	str="系      别";
	m_list1.SetTextMatrix(0,4,str);
	m_list1.SetTextMatrix(1,4,str);
	m_list1.SetColWidth(4,1600);
	str="学  籍  号";
	m_list1.SetTextMatrix(0,5,str);
	m_list1.SetTextMatrix(1,5,str);
	m_list1.SetColWidth(5,1400);
	str="姓    名";
	m_list1.SetTextMatrix(0,6,str);
	m_list1.SetTextMatrix(1,6,str);
	m_list1.SetColWidth(6,800);
	str="性别";
	m_list1.SetTextMatrix(0,7,str);
	m_list1.SetTextMatrix(1,7,str);
	m_list1.SetColWidth(7,540);
	str="年龄";
	m_list1.SetTextMatrix(0,8,str);
	m_list1.SetTextMatrix(1,8,str);
	m_list1.SetColWidth(8,540);
	m_list1.SetRowHeight(m_list1.GetRows()-1,320);
	for(int c=0;c<n;c++)
		m_list1.SetMergeCol(c,TRUE);
}

void CQueryData::OnBnClickedQuery()
{
	CString temp;
	CStringArray strquery;
	if(m_class.GetCurSel()<0)
	{
		GotoDlgCtrl(GetDlgItem(IDC_CLASS));
		MessageBox("请选择班级!","错误",MB_OK|MB_ICONERROR);
		return;
	}
	GetDlgItemText(IDC_NUMBER,temp);
	strquery.Add(temp);
	GetDlgItemText(IDC_NAME,temp);
	strquery.Add(temp);
	if(m_sex.GetCurSel()>0)
		m_sex.GetLBText(m_sex.GetCurSel(),temp);
	else
		temp=_T("");
	strquery.Add(temp);
	GetDlgItemText(IDC_SEG,temp);
	strquery.Add(temp);
	if(m_scoreseg.GetCurSel()>0)
		m_scoreseg.GetLBText(m_scoreseg.GetCurSel(),temp);
	else
		temp=_T("");
	strquery.Add(temp);
	if(m_xueke.GetCurSel()>0)
		m_xueke.GetLBText(m_xueke.GetCurSel(),temp);
	else
		temp=_T("");
	strquery.Add(temp);
	GetDlgItemText(IDC_SCORE,temp);
	strquery.Add(temp);
	if(m_readem.GetCurSel()>0)
		m_readem.GetLBText(m_readem.GetCurSel(),temp);
	else
		temp=_T("");
	strquery.Add(temp);
	if(theApp.bExist)//如果找开依据配置文件所与选班级构造文件名
	{
		theApp.IniFile.GetItemString("SCHOOL","name",temp);//获取学校名称
		if(m_class.GetCurSel()>=0)
		{
			CString str;
			m_class.GetLBText(m_class.GetCurSel(),str);//获得年级班
			temp+=str;
			temp+="学籍.bin";
			CString records="";
			//检验文件是否存在
			CString path;
			path=AfxGetApp()->m_pszHelpFilePath;
			str=AfxGetApp()->m_pszExeName;
			path=path.Left(path.GetLength()-str.GetLength()-4);
			CFileFind find;
			BOOL have=find.FindFile(path+temp,0);
			find.Close();
			if(have)
			{
				CFileRandom filerandom;
				filerandom.Read(path+temp);
				filerandom.Display(records);
				m_list1.ShowWindow(SW_HIDE);
				//对表初始化为3行,并清空除表头的单元格
				m_list1.SetRows(3);
				for(int c=0;c<m_list1.GetCols();c++)
					m_list1.SetTextMatrix(2,c,"");
				//初始化完毕
				int r=2,no=0;
				while(records.Find('/',0)>=0)
				{
					//获取记录
					temp=records.Left(records.Find('/',0)+1);
					records=records.Right(records.GetLength()-temp.GetLength());
					temp=temp.Left(temp.GetLength()-1);
					BOOL query=TRUE;
					for(int q=0;q<strquery.GetCount();q++)
						if(!strquery[q].IsEmpty())
							if(temp.Find(strquery[q])<0)
								query=FALSE;//如果要查找的关键字不为空但没找到将条件置为假
					if(query)//如果在获取的记录中查找到指定数值则显示
					{
						//将获取的一条记录以分隔符为标志拆分开并填入表中
						if(m_list1.GetRows()>3)//大于初始行数时增加1行,行高为320
						{
							m_list1.SetRows(m_list1.GetRows()+1);
							m_list1.SetRowHeight(m_list1.GetRows()-1,320);
						}
						//填序号
						no++;
						CString nostr;
						nostr.Format("%d",no);
						m_list1.SetTextMatrix(m_list1.GetRows()-1,0,nostr);

						CString strleft;
						for(int c=0;c<m_list1.GetCols();c++)
						{
							m_list1.SetRow(r);
							m_list1.SetCol(c);
							m_list1.SetCellAlignment(4);
							if(c>0)//开始从已获取的字符串变量(temp)中获取单个以分号分隔的子串填充相应单元格
							{
								if(temp.Find(';',0)>0)//找到分隔符并且不位于首端
								{
									strleft=temp.Left(temp.Find(';',0)+1);//截取左子串(包含找到的分隔符)
									m_list1.SetTextMatrix(r,c,strleft.Left(strleft.Find(';')));//对相应单元格赋值为左子串(但不含分隔符)
									temp=temp.Right(temp.GetLength()-strleft.GetLength());//迭代改变本身值为右串
								}
								else
									if(temp.Find(';',0)==0)
										temp=temp.Right(temp.GetLength()-1);//分隔符位于首端时不截取左串,迭代改变本身值为去除首端分隔符后的右串,此时不对相应单元格赋值。
									else
										m_list1.SetTextMatrix(r,c,temp);//此时没找到分隔符,说明已经是末尾字串,所以对相应单元格直接用其赋值之
							}
						}
						m_list1.SetRows(m_list1.GetRows()+1);
						m_list1.SetRowHeight(m_list1.GetRows()-1,0);//增加一行高为0的空行
						r+=2;
					}
				}
				strquery.RemoveAll();
				m_list1.ShowWindow(SW_SHOW);
				if(m_list1.GetTextMatrix(2,1).IsEmpty())
					MessageBox("文件内无指定数据!","提示",MB_OK|MB_ICONASTERISK);
			}
			else
				MessageBox("["+path.Left(path.GetLength()-1)+"] 目录下不存在文件 <"+temp+">","提示",MB_OK|MB_ICONASTERISK|MB_DEFBUTTON2);
		}
		else
		{
			MessageBox("请选择班级后再进行!","提示",MB_OK|MB_ICONASTERISK);
			return;
		}
	}
	else
	{
		MessageBox("当前目录下没有发现配置文件!","提示",MB_OK|MB_ICONASTERISK);
		return;
	}
}

void CQueryData::OnBnClickedModify()
{
	if(theApp.bExist)
	{
		CString temp;
		CStringArray itemstr;
		theApp.IniFile.GetItemString("SCHOOL","name",temp);//从INI文件中获取学校名称
		itemstr.Add(temp);
		if(m_class.GetCurSel()>=0)//构造年级及班字串
		{
			m_class.GetLBText(m_class.GetCurSel(),temp);
			itemstr.Add(temp.Left(temp.Find("级",0)+2));//一个汉字占2字节,找到的是所处的起始位置,所以加2
			itemstr.Add(temp.Right(temp.GetLength()-temp.Find("级",0)-2));
		}
		else
		{
			GotoDlgCtrl(GetDlgItem(IDC_CLASS));
			MessageBox("请选择班级!","错误",MB_OK|MB_ICONERROR);
			itemstr.RemoveAll();
			return;
		}
		if(m_scoreseg.GetCurSel()>=0)
		{
			m_scoreseg.GetLBText(m_scoreseg.GetCurSel(),temp);
			itemstr.Add(temp);
		}
		else
		{
			GotoDlgCtrl(GetDlgItem(IDC_SCORESEG));
			MessageBox("请选择系别!","错误",MB_OK|MB_ICONERROR);
			itemstr.RemoveAll();
			return;
		}
		GetDlgItemText(IDC_NUMBER,temp);
		if(temp.IsEmpty())
		{
			GotoDlgCtrl(GetDlgItem(IDC_NUMBER));
			MessageBox("请填写学籍号!","错误",MB_OK|MB_ICONERROR);
			itemstr.RemoveAll();
			return;
		}
		if(!ExamNumber(temp))//检验学籍号的有效性
		{
			GotoDlgCtrl(GetDlgItem(IDC_NUMBER));
			MessageBox("非法学籍号,请检查!","错误",MB_OK|MB_ICONERROR);
			itemstr.RemoveAll();
			return;
		}
		////对学籍号添加前缀
		if(theApp.bExist)
		{
			int row;
			theApp.IniFile.GetItemInt("SCHOOL","row",row);//获取班级行数
			CString str,strnumber;
			BOOL per=FALSE;//是否找到对应班级的标志
			int r=1;
			CString ttemp=temp;//暂存学籍号
			while(r<=row && !per)//当未查找完并且没找到对应班级时继续,否则退出
			{
				str.Format("var%d",r);
				r++;
				theApp.IniFile.GetItemString("CLASS",str,temp);
				if(temp.Find(itemstr[1],0)>=0 && temp.Find(itemstr[2],0)>=0)//找到年级及班级时取出学籍号前缀
				{
					per=TRUE;
					temp=temp.Left(temp.ReverseFind(';'));
					temp=temp.Right(temp.GetLength()-temp.ReverseFind(';')-1);
					temp=temp+ttemp;//将取得的前缀与学籍号相连
				}
			}
		}
		////添加前缀完毕
		itemstr.Add(temp);
		GetDlgItemText(IDC_NAME,temp);
		if(temp.IsEmpty() || temp.Find(" ",0)>=0)
		{
			GotoDlgCtrl(GetDlgItem(IDC_NAME));
			MessageBox("请如实填写学生姓名!","错误",MB_OK|MB_ICONERROR);
			itemstr.RemoveAll();
			return;
		}
		else
			itemstr.Add(temp);
		if(m_sex.GetCurSel()>=0)
		{
			m_sex.GetLBText(m_sex.GetCurSel(),temp);
			itemstr.Add(temp);
		}
		else
		{
			GotoDlgCtrl(GetDlgItem(IDC_SEX));
			MessageBox("请选择学生性别!","错误",MB_OK|MB_ICONERROR);
			itemstr.RemoveAll();
			return;
		}
		GetDlgItemText(IDC_SEG,temp);
		if(temp.IsEmpty() || atoi(temp)<=0 || atoi(temp)>100)
		{
			GotoDlgCtrl(GetDlgItem(IDC_SEG));
			MessageBox("非法的学生年龄!","错误",MB_OK|MB_ICONERROR);
			itemstr.RemoveAll();
			return;
		}
		else
			itemstr.Add(temp);
		if(m_xueke.GetCurSel()>=0)
		{
			m_xueke.GetLBText(m_xueke.GetCurSel(),temp);
			itemstr.Add(temp);
		}
		else
		{
			GotoDlgCtrl(GetDlgItem(IDC_XUEKE));
			MessageBox("请选择学科!","错误",MB_OK|MB_ICONERROR);
			itemstr.RemoveAll();
			return;
		}
		GetDlgItemText(IDC_SCORE,temp);
		if(temp.IsEmpty() || atoi(temp)<0 || atoi(temp)>1000)
		{
			GotoDlgCtrl(GetDlgItem(IDC_SCORE));
			MessageBox("非法成绩!","错误",MB_OK|MB_ICONERROR);
			itemstr.RemoveAll();
			return;
		}
		else
			itemstr.Add(temp);
		if(m_readem.GetCurSel()>=0)
		{
			m_readem.GetLBText(m_readem.GetCurSel(),temp);
			itemstr.Add(temp);
		}
		else
		{
			GotoDlgCtrl(GetDlgItem(IDC_READEM));
			MessageBox("备注信息不能为空!","错误",MB_OK|MB_ICONERROR);
			itemstr.RemoveAll();
			return;
		}
		if(m_readem.GetCurSel()>0 && atoi(itemstr[(int)itemstr.GetCount()-2])>0)
		{
			if(MessageBox("缺考学生或舞弊考生不应有成绩,是否继续?","提示",MB_YESNO|MB_ICONASTERISK|MB_DEFBUTTON2)==IDNO)
			{
				GotoDlgCtrl(GetDlgItem(IDC_SCORE));
				itemstr.RemoveAll();
				return;

⌨️ 快捷键说明

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