📄 viewstu.cpp
字号:
// ViewStu.cpp : implementation file
//
#include "stdafx.h"
#include "STUGRADE.h"
#include "ViewStu.h"
#include "DLGAddStu.h"
#include "MainFrm.h"
//Excel
#include "afxdb.h"
#include "odbcinst.h"
#include "TlHelp32.h" //关闭进程
#include "TlHelp32.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CViewStu
extern CMainFrame *pFrame;
IMPLEMENT_DYNCREATE(CViewStu, CFormView)
CViewStu::CViewStu()
: CFormView(CViewStu::IDD)
{
//{{AFX_DATA_INIT(CViewStu)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
CViewStu::~CViewStu()
{
}
void CViewStu::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CViewStu)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CViewStu, CFormView)
//{{AFX_MSG_MAP(CViewStu)
ON_BN_CLICKED(IDC_ADDnew_Stu, OnADDnewStu)
ON_BN_CLICKED(IDC_Query_Stu, OnQueryStu)
ON_BN_CLICKED(IDC_Choose, OnChoose)
ON_BN_CLICKED(IDC_DEL_Stu, OnDELStu)
ON_WM_SIZE()
ON_BN_CLICKED(IDC_Modify_Stu, OnModifyStu)
ON_COMMAND(ID_LIST_NEXT, OnListNext)
ON_COMMAND(ID_LIST_PRV, OnListPrv)
ON_COMMAND(IDC_DELETE_GRADE, OnDeleteGrade)
ON_COMMAND(IDC_BUTTON_refresh, OnBUTTONrefresh)
ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST_Stu, OnColumnclickLISTStu)
ON_NOTIFY(NM_RDBLCLK, IDC_LIST_Stu, OnRdblclkLISTStu)
ON_BN_CLICKED(IDC_OUTExcel, OnOUTExcel)
ON_COMMAND(ID_FILE_PRINT, OnFilePrint)
ON_NOTIFY(NM_DBLCLK, IDC_LIST_Stu, OnDblclkLISTStu)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CViewStu diagnostics
#ifdef _DEBUG
void CViewStu::AssertValid() const
{
CFormView::AssertValid();
}
void CViewStu::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CViewStu message handlers
void CViewStu::OnADDnewStu() //新增学生
{
CString Sno,Sname,Cno,Sex,Phone,Birth;
CDLGAddStu dlg;
dlg.m_Flag=1; //增加
dlg.m_Sno = &Sno;
dlg.m_Sname = &Sname;
dlg.m_Cno = &Cno;
dlg.m_Sex = &Sex;
dlg.m_Phone = &Phone;
dlg.m_Birth = &Birth;
int ask = dlg.DoModal();
if (ask==IDOK) //add
{
//选查下有无这个学号的学生
CString szSQL,quSQL;
int flg=1;
quSQL.Format("SELECT * FROM 学生基本信息 where 学号 = '%s'",Sno);
_RecordsetPtr pT_set;
pT_set.CreateInstance(__uuidof( Recordset ));
pT_set->Open((LPCSTR)quSQL,RS_PARAM);
if (!pT_set->adoEOF)
{ //表示已有此学生
int ans = MessageBox("已存在这个学生,要把它修改为这个值吗?","增加出错",MB_YESNO|MB_ICONQUESTION);
if (ans == IDYES)
{
szSQL.Format("UPDATE 学生基本信息 SET 学号 = '%s', 姓名 = '%s', 所属班级 = '%s', 性别 = '%s', 手机 = '%s', 出生日期 = '%s' WHERE (学号 = '%s')",Sno,Sname,Cno,Sex,Phone,Birth,Sno);
flg=0;
}
else
return;
}
if (flg) szSQL.Format("INSERT INTO 学生基本信息(学号, 姓名, 所属班级, 性别, 手机, 出生日期) VALUES ('%s', '%s', '%s', '%s', '%s','%s')", Sno,Sname,Cno,Sex,Phone,Birth);
try{
pFrame->ExecSQL(szSQL);
if (flg)
MessageBox("增加成功!","增加学生",MB_OK|MB_ICONINFORMATION);
else
MessageBox("修改成功!","增加学生",MB_OK|MB_ICONINFORMATION);
}catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("无法增加学生!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
curSQL = "SELECT 学号,姓名,性别,出生日期,总得学分,班级名称,专业名称,系名,手机,政治面貌 FROM 学生基本信息,班级信息,专业信息,系别信息 WHERE 学生基本信息.所属班级 = 班级信息.班级代码 AND 班级信息.所属专业 = 专业信息.专业代码 AND 专业信息.所属系别 = 系别信息.系别代码";
RefreshStuList(curSQL + " order by 学号,姓名");
}
}
void CViewStu::OnModifyStu() //修改学生
{
CListCtrl *pList = (CListCtrl*)GetDlgItem(IDC_LIST_Stu);
if(pList->GetSelectedCount()!=1)
MessageBox("请先选择一项记录!","修改出错",MB_OK|MB_ICONQUESTION);
else
{
CString Sno,Sname,Cno,Sex,Phone,Birth; //取得返回值
int nItem; CString gSno,gSname,gCname,gSex;//取表格值
nItem = pList->GetSelectionMark();
gSno = pList->GetItemText(nItem,0);
gSname = pList->GetItemText(nItem,1);
gSex = pList->GetItemText(nItem,2);
gCname = pList->GetItemText(nItem,5);
CDLGAddStu dlg;
dlg.m_Flag = 0; //修改
dlg.m_Msno = gSno;
dlg.m_Msname = gSname;
dlg.m_Mcname = gCname;
dlg.m_Msex = gSex;
dlg.m_Sno = &Sno;
dlg.m_Sname = &Sname;
dlg.m_Cno = &Cno;
dlg.m_Sex = &Sex;
dlg.m_Phone = &Phone;
dlg.m_Birth = &Birth;
int ask = dlg.DoModal();
if (ask==IDOK) //add
{
CString szSQL;
szSQL.Format("UPDATE 学生基本信息 SET 学号 = '%s', 姓名 = '%s', 所属班级 = '%s', 性别 = '%s', 手机 = '%s', 出生日期 = '%s' WHERE (学号 = '%s')",Sno,Sname,Cno,Sex,Phone,Birth,gSno);
try{
pFrame->ExecSQL(szSQL);
MessageBox("修改成功!","修改学生",MB_OK|MB_ICONINFORMATION);
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("无法修改学生!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
curSQL = "SELECT 学号,姓名,性别,出生日期,总得学分,班级名称,专业名称,系名,手机,政治面貌 FROM 学生基本信息,班级信息,专业信息,系别信息 WHERE 学生基本信息.所属班级 = 班级信息.班级代码 AND 班级信息.所属专业 = 专业信息.专业代码 AND 专业信息.所属系别 = 系别信息.系别代码";
RefreshStuList(curSQL + " order by 学号,姓名");
}
}
}
void CViewStu::OnDELStu() //删除
{
CListCtrl *pList = (CListCtrl*)GetDlgItem(IDC_LIST_Stu);
if(pList->GetSelectedCount()!=1)
MessageBox("请先选择一项记录!","删除出错",MB_OK|MB_ICONQUESTION);
else
{
CString Sno,Sname; //取得表格值
int nItem;
nItem = pList->GetSelectionMark();
Sno = pList->GetItemText(nItem,0);
Sname = pList->GetItemText(nItem,1);
CString Msg;
Msg.Format("确定要删除学号<%s>姓名<%s>的学生吗?",Sno,Sname);
int ask = MessageBox(Msg,"确定删除",MB_YESNO|MB_ICONQUESTION);
if (ask==IDYES) //add
{
CString szSQL;
szSQL.Format("DELETE FROM 学生基本信息 WHERE (学号 = '%s')",Sno);
try{
pFrame->ExecSQL(szSQL);
MessageBox("删除成功!","删除学生",MB_OK|MB_ICONINFORMATION);
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("无法删除学生!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
curSQL = "SELECT 学号,姓名,性别,出生日期,总得学分,班级名称,专业名称,系名,手机,政治面貌 FROM 学生基本信息,班级信息,专业信息,系别信息 WHERE 学生基本信息.所属班级 = 班级信息.班级代码 AND 班级信息.所属专业 = 专业信息.专业代码 AND 专业信息.所属系别 = 系别信息.系别代码";
RefreshStuList(curSQL + " order by 学号,姓名");
}
}
}
void CViewStu::OnQueryStu() //查询学生
{
CString Sno,Sname,Cno,Sex,Phone,Birth;bool m_CHECK=false;
CDLGAddStu dlg;
dlg.m_Flag=2; //查询
dlg.m_CHECKED=&m_CHECK;
dlg.m_Sno = &Sno;
dlg.m_Sname = &Sname;
dlg.m_Cno = &Cno;
dlg.m_Sex = &Sex;
dlg.m_Phone = &Phone;
dlg.m_Birth = &Birth;
int ask = dlg.DoModal();
CString szSQL;
if (ask==IDOK) //add
{
CString szSQLlast,sql1,sql2,sql3,sql4,sql5,sql6;
szSQL="SELECT 学号,姓名,性别,出生日期,总得学分,班级名称,专业名称,系名,手机,政治面貌 FROM 学生基本信息,班级信息,专业信息,系别信息 WHERE 学生基本信息.所属班级 = 班级信息.班级代码 AND 班级信息.所属专业 = 专业信息.专业代码 AND 专业信息.所属系别 = 系别信息.系别代码 ";
if (m_CHECK) //模糊
{
if (Sno!="NULL")
{
szSQLlast.Empty();
szSQLlast =" AND (学号 like '";
szSQLlast += "%";
szSQLlast += Sno;
szSQLlast+="%')";
szSQL+=szSQLlast;
// AfxMessageBox(szSQL);
}
if (Sname!="NULL")
{
szSQLlast.Empty();
szSQLlast = " AND (姓名 like '";
szSQLlast += "%";
szSQLlast+=Sname;
szSQLlast+="%')";
szSQL+=szSQLlast;
// AfxMessageBox(szSQL);
}
if (Cno!="NULL")
{
szSQLlast.Empty();
szSQLlast = " AND (班级代码 like '";
szSQLlast += "%";
szSQLlast += Cno;
szSQLlast+="%')";
szSQL+=szSQLlast;
//AfxMessageBox(szSQL);
}
if (Sex!="NULL")
{
szSQLlast.Empty();
szSQLlast=" AND (性别 like '";
szSQLlast += "%";
szSQLlast += Sex;
szSQLlast+="%')";
szSQL+=szSQLlast;
// AfxMessageBox(szSQL);
}
if (Phone!="NULL")
{
szSQLlast.Empty();
szSQLlast = " AND (手机 like '";
szSQLlast += "%";
szSQLlast +=Phone;
szSQLlast+="%')";
szSQL+=szSQLlast;
// AfxMessageBox(szSQL);
}
}
else //不是模糊查询
{
if (Sno!="NULL")
{
szSQLlast.Format(" AND (学号 = '%s')",Sno);
szSQL+=szSQLlast;
}
if (Sname!="NULL")
{
szSQLlast.Format(" AND (姓名 = '%s')",Sname);
szSQL+=szSQLlast;
}
if (Cno!="NULL")
{
szSQLlast.Format(" AND (班级代码 = '%s')",Cno);
szSQL+=szSQLlast;
}
if (Sex!="NULL")
{
szSQLlast.Format(" AND (性别 = '%s')",Sex);
szSQL+=szSQLlast;
}
if (Phone!="NULL")
{
szSQLlast.Format(" AND (手机 = '%s')",Phone);
szSQL+=szSQLlast;
}
}
}
else
szSQL="SELECT 学号,姓名,性别,出生日期,总得学分,班级名称,专业名称,系名,手机,政治面貌 FROM 学生基本信息,班级信息,专业信息,系别信息 WHERE 学生基本信息.所属班级 = 班级信息.班级代码 AND 班级信息.所属专业 = 专业信息.专业代码 AND 专业信息.所属系别 = 系别信息.系别代码 ";
curSQL = szSQL;
// AfxMessageBox(szSQL);
RefreshStuList(szSQL + " order by 学号,姓名");
}
void CViewStu::OnChoose()
{
MessageBox("还没有时间完成:)","保留功能嘻",MB_ICONINFORMATION);
}
void CViewStu::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
CListCtrl *pctrl = (CListCtrl*)GetDlgItem(IDC_LIST_Stu);
::SetWindowLong(*pctrl,GWL_STYLE,::GetWindowLong(*pctrl,GWL_STYLE)&~LVS_SORTASCENDING&~LVS_SORTDESCENDING);
pctrl->SetExtendedStyle(pctrl->GetExStyle()&~LVS_EX_CHECKBOXES |
LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|
LVS_EX_GRIDLINES|LVS_EX_TRACKSELECT);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -