📄 成绩管理系统dlg.cpp
字号:
m_list.SetItemText(i,2,(char*)(_bstr_t)holder);
holder=prst->GetCollect("课程号");
if(holder.vt!=VT_NULL)
m_list.SetItemText(i,3,(char*)(_bstr_t)holder);
holder=prst->GetCollect("课程名");
if(holder.vt!=VT_NULL)
m_list.SetItemText(i,4,(char*)(_bstr_t)holder);
holder=prst->GetCollect("学分");
if(holder.vt!=VT_NULL)
m_list.SetItemText(i,5,(char*)(_bstr_t)holder);
holder=prst->GetCollect("总评成绩");
if(holder.vt!=VT_NULL)
m_list.SetItemText(i,6,(char*)(_bstr_t)holder);
prst->MoveNext();
}
prst->Close();
}
catch(_com_error&e)
{
AfxMessageBox("操作异常!");
return;
}
}
void CMyDlg::OnDel()
{
// TODO: Add your control notification handler code here
CString lb;
m_LB.GetLBText(m_LB.GetCurSel(),lb);
if(lb=="学生资料")delstu();
if(lb=="课程表")delcourse();
if(lb=="选修课成绩表")delsc();
if(lb=="补考通知单")delbukaotongzhi();
if(lb=="重修通知单")delchongxiutongzhi();
//if(m_lb=="学生资料")delbukaochengji();
//if(m_lb=="学生资料")delchongxiuchengji();
}
void CMyDlg::delstu()
{
CString sID,strsQL;
int item;
_RecordsetPtr prst=NULL;
prst.CreateInstance(__uuidof(Recordset));
try
{
_bstr_t strsql("select * from student");
prst=m_DBCnt->Execute(strsql,NULL,adCmdText);
if(!prst->BOF)
prst->MoveFirst();
else
{
AfxMessageBox("表内数据为空");
return;
}
POSITION pos=m_list.GetFirstSelectedItemPosition();
if(pos==NULL)
{
AfxMessageBox("没有选中记录!");
return;
}
else while(pos)
{
item=m_list.GetNextSelectedItem(pos);
sID=m_list.GetItemText(item,0);
if(AfxMessageBox("是否删除?",MB_YESNO) == IDYES)
{
strsQL.Format("delete from v_student where 学号='"+sID+"'");
prst=m_DBCnt->Execute(_bstr_t(strsQL),NULL,adCmdText);
}
Readstudent();
}
}
catch(_com_error& e)
{
AfxMessageBox("操作异常或者是你所在的用户组无此权限!");
return;
}
}
void CMyDlg::delcourse()
{
CString sID,strsQL;
int item;
_RecordsetPtr prst=NULL;
prst.CreateInstance(__uuidof(Recordset));
try
{
_bstr_t strsql("select * from v_course");
prst=m_DBCnt->Execute(strsql,NULL,adCmdText);
if(!prst->BOF)
prst->MoveFirst();
else
{
AfxMessageBox("表内数据为空");
return;
}
POSITION pos=m_list.GetFirstSelectedItemPosition();
if(pos==NULL)
{
AfxMessageBox("没有选中记录!");
return;
}
else while(pos)
{
item=m_list.GetNextSelectedItem(pos);
sID=m_list.GetItemText(item,0);
if(AfxMessageBox("是否删除?",MB_YESNO) == IDYES)
{
strsQL.Format("delete from v_course where 课程号='%s'",sID);
prst=m_DBCnt->Execute(_bstr_t(strsQL),NULL,adCmdText);
}
Readcourse();
}
}
catch(_com_error e)
{
AfxMessageBox("操作异常或者是你所在的用户组无此权限!");
return;
}
}
void CMyDlg::delsc()
{
CString sID,strsQL;
int item;
_RecordsetPtr prst=NULL;
prst.CreateInstance(__uuidof(Recordset));
try
{
_bstr_t strsql("select * from v_sc");
prst=m_DBCnt->Execute(strsql,NULL,adCmdText);
if(!prst->BOF)
prst->MoveFirst();
else
{
AfxMessageBox("表内数据为空");
return;
}
POSITION pos=m_list.GetFirstSelectedItemPosition();
if(pos==NULL)
{
AfxMessageBox("没有选中记录!");
return;
}
else while(pos)
{
item=m_list.GetNextSelectedItem(pos);
sID=m_list.GetItemText(item,0);
if(AfxMessageBox("是否删除?",MB_YESNO) == IDYES)
{
strsQL.Format("delete from v_sc where 学号='%s'",sID);
prst=m_DBCnt->Execute(_bstr_t(strsQL),NULL,adCmdText);
}
ReadSC();
}
}
catch(_com_error& e)
{
AfxMessageBox("操作异常或者是你所在的用户组无此权限!");
return;
}
}
void CMyDlg::delbukaotongzhi()
{
}
void CMyDlg::delchongxiutongzhi()
{
}
void CMyDlg::OnCx()
{
// TODO: Add your control notification handler code here
_RecordsetPtr prst;
CHAXUN dlg;
if(dlg.DoModal()==IDOK)
{
zcxlb=cxlb;
ZSQL=CXSQL;
key=k;
cxinit(ZSQL);
}
}
typedef struct tagColAtt
{
int nColIndex;
CString strColText;
int nPrintX;
int nSubItemIndex;
}COLATT;
BOOL PrintListCtrl(CListCtrl &m_list)
{
PRINTDLG pd;
pd.lStructSize = sizeof(PRINTDLG);
pd.Flags = PD_RETURNDC;
pd.hDC = NULL;
pd.hwndOwner = NULL;
pd.hInstance = NULL;
pd.nMaxPage = 1;
pd.nMinPage = 1;
pd.nFromPage = 1;
pd.nToPage = 1;
pd.nCopies = 1;
pd.hDevMode = NULL;
pd.hDevNames = NULL;
//显示打印对话框,由用户来设定纸张大小等。
if(!PrintDlg(&pd)) return FALSE;
ASSERT(pd.hDC!=NULL);
int nHorRes = GetDeviceCaps(pd.hDC, HORZRES);
int nVerRes = GetDeviceCaps(pd.hDC, VERTRES);
int nXMargin = 8;
int nYMargin = 8;
TEXTMETRIC tm;
GetTextMetrics(pd.hDC, &tm);
int nCharHeight = tm.tmHeight;
int nCharWidth = tm.tmAveCharWidth;
CHeaderCtrl* pHeader = m_list.GetHeaderCtrl();
//获得行,列的个数
int nColCount = pHeader->GetItemCount();
int nLineCount = m_list.GetItemCount();
int ColOrderArray[100];
COLATT ca[100];
m_list.GetColumnOrderArray(ColOrderArray, nColCount);
int nColX =nXMargin*nCharWidth;
//检索各列的信息,确定列标题的内容长度。
for(int i =0 ; i< nColCount; i++)
{
ca[i].nColIndex = ColOrderArray[i];
LVCOLUMN lvc;
char text[100];
lvc.mask = LVCF_TEXT|LVCF_SUBITEM;
lvc.pszText = text;
lvc.cchTextMax = 100;
m_list.GetColumn(ca[i].nColIndex, &lvc);
ca[i].strColText = lvc.pszText;
ca[i].nSubItemIndex = lvc.iSubItem;
ca[i].nPrintX = nColX;
nColX += nCharWidth * strlen(ca[i].strColText);
if(nColX > nHorRes)
{
DeleteDC(pd.hDC);
AfxMessageBox("字段太多,无法在一行内打印,请试用较大的纸,或横向打印。");
return FALSE;
}
}
DOCINFO di;
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = "ListCtrl Data Printing";
di.lpszOutput = (LPTSTR) NULL;
di.lpszDatatype = (LPTSTR) NULL;
di.fwType = 0;
StartDoc(pd.hDC, &di);
StartPage(pd.hDC);
//调整各列的宽度,以使各列在后面的打印输出时更均匀的打印在纸上。
int space = (nHorRes-nXMargin*nCharWidth-nColX) / (nColCount -1);
for(i =1; i<nColCount; i++)
{
ca[i].nPrintX += i*space;
}
//输出列标题
for(i =0; i<nColCount; i++)
TextOut(pd.hDC, ca[i].nPrintX, nYMargin,
ca[i].strColText, strlen(ca[i].strColText));
int nMaxLinePerPage = nVerRes/nCharHeight -3;
int nCurPage =1;
//输出各列的数据
for(i =0; i<nLineCount; i++)
{
for(int j =0; j<nColCount; j++)
{
if(i+1-(nCurPage-1)*nMaxLinePerPage > nMaxLinePerPage)
{
//新的一页
EndPage(pd.hDC);
StartPage(pd.hDC);
nCurPage ++;
}
CString subitem = m_list.GetItemText(i,j);
TextOut(pd.hDC, ca[j].nPrintX,
nYMargin+(i+1-(nCurPage-1)*nMaxLinePerPage)*nCharHeight,
subitem, strlen(subitem));
}
}
EndPage(pd.hDC);
EndDoc(pd.hDC);
//打印结束
DeleteDC(pd.hDC);
return TRUE;
}
void CMyDlg::OnDy()
{
// TODO: Add your control notification handler code here
PrintListCtrl(m_list);
}
void CMyDlg::OnMenuStuCx()
{
// TODO: Add your command handler code here
CHAXUN dlg;
if(dlg.DoModal()==IDOK)
{
zcxlb=cxlb;
ZSQL=CXSQL;
key=k;
cxinit(ZSQL);
}
}
void CMyDlg::OnMenuBf()
{
// TODO: Add your command handler code here
CFile file;
CString strPath;
TCHAR lpstrFilename[MAX_PATH]="";
CFileDialog filedlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"BAK Files(*.bak)|*.bak|All files(*.*)|*.*||",NULL);
filedlg.m_ofn.lpstrFile= lpstrFilename;
filedlg.m_ofn.lStructSize =88;
if(filedlg.DoModal()==IDOK)
{
strPath=filedlg.GetPathName();
CString strsql;
_RecordsetPtr prst=NULL;
prst.CreateInstance(__uuidof(Recordset));
try
{
strsql.Format("BACKUP DATABASE StuGrade TO DISK ='%s'",strPath);
prst=m_DBCnt->Execute(_bstr_t(strsql),NULL,adCmdText);
MessageBox("备份数据库成功!");
}
catch(_com_error& e)
{
AfxMessageBox("备份数据库失败,可能是你所在的用户组没有此权限!");
return;
}
}
}
void CMyDlg::OnMenuHf()
{
// TODO: Add your command handler code here
CFile file;
CString strPath;
TCHAR lpstrFilename[MAX_PATH]="";
CFileDialog filedlg(TRUE,".bak","*",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"BAK Files(*.bak)|*.bak|All files(*.*)|*.*||",NULL);
filedlg.m_ofn.lpstrFile= lpstrFilename;
filedlg.m_ofn.lStructSize =88;
if(filedlg.DoModal()==IDOK)
{
strPath=filedlg.GetPathName();
CString strsql;
_RecordsetPtr prst=NULL;
prst.CreateInstance(__uuidof(Recordset));
try
{
strsql.Format("RESTORE FILELISTONLY FROM DISK='%s' WITH NORECOVERY",strPath);
prst=m_DBCnt->Execute(_bstr_t(strsql),NULL,adCmdText);
MessageBox("恢复数据库成功!");
}
catch(_com_error& e)
{
AfxMessageBox("恢复数据库失败!");
return;
}
}
}
void CMyDlg::cxinit(CString s)
{
CString lb;
m_LB.GetLBText(m_LB.GetCurSel(),lb);
/////////////////////列表加线和整行选择/////////////////////////////////
LONG lStyle = m_list.SendMessage
(LVM_GETEXTENDEDLISTVIEWSTYLE);
lStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES|
LVS_EX_HEADERDRAGDROP;
m_list.SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0,
(LPARAM)lStyle);
m_list.SetExtendedStyle(lStyle);
/////////////////////////////////////////////////////////////
int nWidth=100;
int nColumnCount = m_list.GetHeaderCtrl()->GetItemCount();
m_dy.EnableWindow(true);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -