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