今熱點:基于MFC的學生成績管理系統

2023-01-06 17:10:55 來源:51CTO博客


(資料圖片)

1.基本功能演示?

1.1軟件登陸界面?

為實現多賬戶的登陸方式,故采用了標簽頁組合的方式,每個分頁面指向一個登錄窗口。?

1.2學生界面?

學生界面所需要的功能為課程分數查詢,功能較為簡單,采用了下拉框+編輯框+按鈕的方式實現,需要的特殊功能為學分預警。當科目分數小于60時,彈出彈框,并提示,當前科目分數小于60,要加油啦。?

1.3教師界面?

教師界面相對于學生界面略顯復雜,采用了列表+下拉框+編輯框的方式,首先通過下拉框的方式選擇姓名,隨之與其對應的其他幾項也會出現,可以根據科目下拉框選擇需要修改的科目,寫好后點擊修改?

1.4教務界面?

教務界面相較于教師界面包含了成績修改的功能,同時增加了對學生的增加?

2.部分代碼展示?

2.1標簽頁部分代碼?

BOOL CMySystemDlg::OnInitDialog()?{? CDialogEx::OnInitDialog();? // 將“關于...”菜單項添加到系統菜單中。? // IDM_ABOUTBOX 必須在系統命令范圍內。? ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);? ASSERT(IDM_ABOUTBOX < 0xF000);? CMenu* pSysMenu = GetSystemMenu(FALSE);? if (pSysMenu != nullptr)? {?  BOOL bNameValid;?  CString strAboutMenu;?  bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);?  ASSERT(bNameValid);?  if (!strAboutMenu.IsEmpty())?  {?   pSysMenu->AppendMenu(MF_SEPARATOR);?   pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);?  }? }? // 設置此對話框的圖標。 當應用程序主窗口不是對話框時,框架將自動? // 執行此操作? SetIcon(m_hIcon, TRUE);   // 設置大圖標? SetIcon(m_hIcon, FALSE);  // 設置小圖標? // TODO: 在此添加額外的初始化代碼? theApp.Mymanager.name = TEXT("教務");? theApp.Mymanager.password = "12345678";? theApp.Mystudent.name = TEXT("宋同學");? theApp.Mystudent.password = "12345678";? theApp.Myteacher.name = TEXT("大衛老師");? theApp.Myteacher.password = "12345678";? CRect tabRect; // 標簽控件客戶區的Rect ? // 獲取標簽控件客戶區Rect,并對其調整,以適合放置標簽頁 ? m_Tab.GetClientRect(&tabRect);? tabRect.left += 1;? tabRect.right -= 1;? tabRect.top += 25;? tabRect.bottom -= 1;? m_Tab.InsertItem(0, _T("學生登錄")); // 插入第一個標簽? m_Tab.InsertItem(1, _T("教師登錄")); // 插入第二個標簽? m_Tab.InsertItem(2, _T("教務登錄")); //第三個標簽? m_student.Create(IDD_DIALOG1, &m_Tab); // 創建第一個標簽頁 ? m_teacher.Create(IDD_DIALOG2, &m_Tab); // 創建第二個標簽頁 ? m_manager.Create(IDD_DIALOG3, &m_Tab);//創建第三個標簽頁? // 根據調整好的tabRect放置t1子對話框,并設置為顯示 ? m_student.SetWindowPos(NULL,tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);? // 根據調整好的tabRect放置t2子對話框,并設置為隱藏 ? m_teacher.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);? // 根據調整好的tabRect放置t3子對話框,并設置為隱藏 ? m_manager.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);? return TRUE; // 除非將焦點設置到控件,否則返回 TRUE?}?void CMySystemDlg::OnSysCommand(UINT nID, LPARAM lParam)?{? if ((nID & 0xFFF0) == IDM_ABOUTBOX)? {?  CAboutDlg dlgAbout;?  dlgAbout.DoModal();? }? else? {?  CDialogEx::OnSysCommand(nID, lParam);? }?}?//當用戶拖動最小化窗口時系統調用此函數取得光標?//顯示。?HCURSOR CMySystemDlg::OnQueryDragIcon()?{ return static_cast(m_hIcon);?}void CMySystemDlg::OnTcnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)?{ // TODO: 在此添加控件通知處理程序代碼 CRect tabRect; // 標簽控件客戶區的Rect  // 獲取標簽控件客戶區Rect,并對其調整,以適合放置標簽頁 ? m_Tab.GetClientRect(&tabRect); tabRect.left += 1;? tabRect.right -= 1;? tabRect.top += 25;? tabRect.bottom -= 1;? switch (m_Tab.GetCurSel()) //返回組合框中列表框中當前選中的項的下標。如果沒有選中項,則返回CB_ERR。 ? {?  // 如果標簽控件當前選擇標簽為“測試1”? case 0:?  m_student.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);?  m_teacher.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);?  m_manager.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);?  break;?  // 如果標簽控件當前選擇標簽為“測試2”? case 1:?  m_student.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);?  m_teacher.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);?  m_manager.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);?  break;? case 2:?  m_student.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);?  m_teacher.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW);?  m_manager.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW);?  break;? default:?  break;? }? *pResult = 0;?}

2.2學生登錄頁代碼?

// StudentDlg 對話框?IMPLEMENT_DYNAMIC(StudentDlg, CDialogEx)?StudentDlg::StudentDlg(CWnd* pParent /*=nullptr*/)? : CDialogEx(IDD_DIALOG1, pParent)? , m_name(_T(""))? , m_password(_T(""))?{?}?StudentDlg::~StudentDlg()?{?}?void StudentDlg::DoDataExchange(CDataExchange* pDX)?{? CDialogEx::DoDataExchange(pDX);? DDX_Text(pDX, IDC_EDIT1, m_name);? DDX_Text(pDX, IDC_EDIT2, m_password);?}?BEGIN_MESSAGE_MAP(StudentDlg, CDialogEx)? ON_BN_CLICKED(IDC_BUTTON1, &StudentDlg::OnBnClickedButton1)? ON_BN_CLICKED(IDC_BUTTON2, &StudentDlg::OnBnClickedButton2)?END_MESSAGE_MAP()?// StudentDlg 消息處理程序?//學生登錄?void StudentDlg::OnBnClickedButton1()?{? // TODO: 在此添加控件通知處理程序代碼? UpdateData(TRUE);? if (m_name == theApp.Mystudent.name && m_password == theApp.Mystudent.password)? {?  StuManDlg dlg;?  dlg.DoModal();?  return;? }? MessageBox(TEXT("賬號或密碼輸入錯誤,請重新輸入"));?}?//學生返回?void StudentDlg::OnBnClickedButton2()?{? // TODO: 在此添加控件通知處理程序代碼? exit(1);?}?void StudentDlg::OnOK()?{? // TODO: 在此添加專用代碼和/或調用基類? if (GetFocus() == GetDlgItem(IDC_EDIT1))?  GetDlgItem(IDC_EDIT2)->SetFocus();? else if (GetFocus() == GetDlgItem(IDC_EDIT2))?  return OnBnClickedButton1();? //CDialogEx::OnOK();?}?BOOL StudentDlg::OnInitDialog()?{? CDialogEx::OnInitDialog();? m_name = TEXT("宋同學"); //用戶名? m_password = TEXT("12345678");//密碼? UpdateData(FALSE); //內容更新到對應的控件? // TODO: 在此添加額外的初始化? GetDlgItem(IDC_EDIT1)->SetFocus();? return TRUE; // return TRUE unless you set the focus to a control?     // 異常: OCX 屬性頁應返回 FALSE?}

2.3教師登錄頁代碼?

// TeacherDlg 對話框?IMPLEMENT_DYNAMIC(TeacherDlg, CDialogEx)?TeacherDlg::TeacherDlg(CWnd* pParent /*=nullptr*/)? : CDialogEx(IDD_DIALOG2, pParent)? , m_name(_T(""))? , m_password(_T(""))?{?}?TeacherDlg::~TeacherDlg()?{?}?void TeacherDlg::DoDataExchange(CDataExchange* pDX)?{? CDialogEx::DoDataExchange(pDX);? DDX_Text(pDX, IDC_EDIT1, m_name);? DDX_Text(pDX, IDC_EDIT2, m_password);?}?BEGIN_MESSAGE_MAP(TeacherDlg, CDialogEx)? ON_BN_CLICKED(IDC_BUTTON2, &TeacherDlg::OnBnClickedButton2)? ON_BN_CLICKED(IDC_BUTTON1, &TeacherDlg::OnBnClickedButton1)?END_MESSAGE_MAP()?// TeacherDlg 消息處理程序?//教師登錄?void TeacherDlg::OnBnClickedButton2()?{? // TODO: 在此添加控件通知處理程序代碼? UpdateData(TRUE);? if (m_name == theApp.Myteacher.name && m_password == theApp.Myteacher.password)? {?  TeaManDlg dlg;?  dlg.DoModal();?  return;? }? MessageBox(TEXT("賬號或密碼輸入錯誤,請重新輸入"));?}?//教師返回?void TeacherDlg::OnBnClickedButton1()?{? // TODO: 在此添加控件通知處理程序代碼? exit(1);?}?void TeacherDlg::OnOK()?{? // TODO: 在此添加專用代碼和/或調用基類? if (GetFocus() == GetDlgItem(IDC_EDIT1))?  GetDlgItem(IDC_EDIT2)->SetFocus();? else if (GetFocus() == GetDlgItem(IDC_EDIT2))?  return OnBnClickedButton2();? //CDialogEx::OnOK();?}?BOOL TeacherDlg::OnInitDialog()?{? CDialogEx::OnInitDialog();? m_name = TEXT("大衛老師"); //用戶名? m_password = TEXT("12345678");//密碼? UpdateData(FALSE); //內容更新到對應的控件? // TODO: 在此添加額外的初始化? GetDlgItem(IDC_EDIT1)->SetFocus();? return TRUE; // return TRUE unless you set the focus to a control?     // 異常: OCX 屬性頁應返回 FALSE?}

2.4教務登錄頁代碼?

// ManagerDlg 對話框?IMPLEMENT_DYNAMIC(ManagerDlg, CDialogEx)?ManagerDlg::ManagerDlg(CWnd* pParent /*=nullptr*/)? : CDialogEx(IDD_DIALOG3, pParent)? , m_name(_T(""))? , m_password(_T(""))?{?}?ManagerDlg::~ManagerDlg()?{?}?void ManagerDlg::DoDataExchange(CDataExchange* pDX)?{? CDialogEx::DoDataExchange(pDX);? DDX_Text(pDX, IDC_EDIT1, m_name);? DDX_Text(pDX, IDC_EDIT2, m_password);?}?BEGIN_MESSAGE_MAP(ManagerDlg, CDialogEx)? ON_EN_CHANGE(IDC_EDIT1, &ManagerDlg::OnEnChangeEdit1)? ON_BN_CLICKED(IDC_BUTTON1, &ManagerDlg::OnBnClickedButton1)? ON_BN_CLICKED(IDC_BUTTON2, &ManagerDlg::OnBnClickedButton2)? ON_WM_CTLCOLOR()?END_MESSAGE_MAP()?// ManagerDlg 消息處理程序?BOOL ManagerDlg::OnInitDialog()?{? CDialogEx::OnInitDialog();? m_name = TEXT("教務"); //用戶名? m_password = TEXT("12345678");//密碼? UpdateData(FALSE); //內容更新到對應的控件? // TODO: 在此添加額外的初始化? GetDlgItem(IDC_EDIT1)->SetFocus();? return TRUE; // return TRUE unless you set the focus to a control?     // 異常: OCX 屬性頁應返回 FALSE?}?void ManagerDlg::OnEnChangeEdit1()?{? // TODO: 如果該控件是 RICHEDIT 控件,它將不? // 發送此通知,除非重寫 CDialogEx::OnInitDialog()? // 函數并調用 CRichEditCtrl().SetEventMask(),? // 同時將 ENM_CHANGE 標志“或”運算到掩碼中。?}?//教務登錄?void ManagerDlg::OnBnClickedButton1()?{? // TODO: 在此添加控件通知處理程序代碼? UpdateData(TRUE);? if (m_name == theApp.Mymanager.name && m_password == theApp.Mymanager.password)? {?  MANANGER dlg;?  dlg.DoModal();?  return;? }? MessageBox(TEXT("賬號或密碼輸入錯誤,請重新輸入"));?}?//教務退出?void ManagerDlg::OnBnClickedButton2()?{? // TODO: 在此添加控件通知處理程序代碼? exit(1);?}?void ManagerDlg::OnOK()?{? // TODO: 在此添加專用代碼和/或調用基類? if (GetFocus() == GetDlgItem(IDC_EDIT1))?  GetDlgItem(IDC_EDIT2)->SetFocus();? else if (GetFocus() == GetDlgItem(IDC_EDIT2))?  return OnBnClickedButton1();? //CDialogEx::OnOK();?}?

2.5學生部分?

// StuManDlg 對話框?IMPLEMENT_DYNAMIC(StuManDlg, CDialogEx)?StuManDlg::StuManDlg(CWnd* pParent /*=nullptr*/)? : CDialogEx(IDD_STUDENT, pParent)? , m_grade(0)? , m_num(0)? , m_war(_T(""))?{?}?StuManDlg::~StuManDlg()?{?}?void StuManDlg::DoDataExchange(CDataExchange* pDX)?{? CDialogEx::DoDataExchange(pDX);? DDX_Control(pDX, IDC_COMBO1, m_combo);? DDX_Text(pDX, IDC_EDIT2, m_grade);? DDX_Text(pDX, IDC_EDIT1, m_num);? DDX_Text(pDX, IDC_EDIT3, m_war);?}?BEGIN_MESSAGE_MAP(StuManDlg, CDialogEx)? ON_BN_CLICKED(IDC_BUTTON1, &StuManDlg::OnBnClickedButton1)? ON_CBN_SELCHANGE(IDC_COMBO1, &StuManDlg::OnCbnSelchangeCombo1)?END_MESSAGE_MAP()?BOOL StuManDlg::OnInitDialog()?{? CDialogEx::OnInitDialog();? //讀取文件,獲取課程名稱,給組合框添加字符串? CRect temprect(0, 0, 500, 400);? CWnd::SetWindowPos(NULL, 0, 0, temprect.Width(), temprect.Height(), SWP_NOZORDER | SWP_NOMOVE);? CInfoFile file;? file.ReadDocline_one(); //讀取學生信息? for (list::iterator it = file.ls_one.begin(); it != file.ls_one.end(); it++)? {?  m_combo.AddString((CString)it->sub.c_str());? }? file.ls_one.clear(); //清空list的內容? return TRUE; // return TRUE unless you set the focus to a control?     // 異常: OCX 屬性頁應返回 FALSE?}?void StuManDlg::OnBnClickedButton1()?{? // TODO: 在此添加控件通知處理程序代碼? //獲取控件上的內容,更新到對應關聯的變量中? UpdateData(TRUE);? CString type;? //獲取當前選中項? int index = m_combo.GetCurSel();? //獲取組合框當前內容? m_combo.GetLBText(index, type);? if (m_grade <= 60)? {?  CString str;?  str.Format(_T("科目:%s \r\n當前成績小于60分,要好好學習啦!"), type);?  m_war = str; //銷售信息?  UpdateData(FALSE);?  MessageBox(str);? }? CInfoFile file;? file.ReadDocline(); //讀取商品信息? for (list::iterator it = file.ls_one.begin(); it != file.ls_one.end(); it++)? {?  if (type == it->sub.c_str())?  {?  }? }? file.ls.clear(); //清空list的內容? UpdateData(FALSE); //更新到對應的控件?}?void StuManDlg::OnCbnSelchangeCombo1()?{? // TODO: 在此添加控件通知處理程序代碼? CString text;? //獲取當前選中項? int index = m_combo.GetCurSel();? //獲取當前內容? m_combo.GetLBText(index, text);? CInfoFile file;     //需要包含#include "InfoFile.h"? file.ReadDocline_one();   //讀取科目信息? for (list::iterator it = file.ls_one.begin(); it != file.ls_one.end(); it++)? {?  if (text == it->sub.c_str())?  {?   m_grade = it->grade;?   m_num = it->numb;?   UpdateData(FALSE); //內容更新到對應的控件?  }? }? file.ls_one.clear(); //清空list的內容?}

2.6教師界面實現?

// TeaManDlg 對話框?IMPLEMENT_DYNAMIC(TeaManDlg, CDialogEx)?TeaManDlg::TeaManDlg(CWnd* pParent /*=nullptr*/)? : CDialogEx(IDD_TEACHER, pParent)? , _age(0)? , _grade(0)? , _id(0)?{?}?TeaManDlg::~TeaManDlg()?{?}?BOOL TeaManDlg::OnInitDialog()?{? CDialogEx::OnInitDialog();? CRect temprect(0, 0, 720, 670);? CWnd::SetWindowPos(NULL, 0, 0, temprect.Width(), temprect.Height(), SWP_NOZORDER | SWP_NOMOVE);? _list.SetExtendedStyle(_list.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);? CString str[] = { TEXT("學號"),TEXT("姓名"),TEXT("年齡"),TEXT("VC++"),TEXT("單片機")};? for (int i = 0; i < 5; i++)? {?  _list.InsertColumn(i, str[i], LVCFMT_LEFT, 80);? }? CInfoFile file;? file.ReadDocline();? int i = 0;? for (list::iterator it = file.ls.begin(); it != file.ls.end(); it++)? {?  CString str;?  str.Format(_T("%d"), (it->id));?  _list.InsertItem(i, str);?  str = CString(it->name.c_str());?  _list.SetItemText(i, 1, str);?  str.Format(_T("%d"), it->age);?  _list.SetItemText(i, 2, str);?  str.Format(_T("%d"), it->grade_vc);?  _list.SetItemText(i, 3, str);?  str.Format(_T("%d"), it->grade_mcu);?  _list.SetItemText(i, 4, str);?  i++;?  //選項的下拉框中姓名部分代碼?  _combo.AddString((CString)it->name.c_str());? }? return TRUE; // return TRUE unless you set the focus to a control?     // 異常: OCX 屬性頁應返回 FALSE?}?void TeaManDlg::DoDataExchange(CDataExchange* pDX)?{? CDialogEx::DoDataExchange(pDX);? DDX_Control(pDX, IDC_LIST1, _list);? DDX_Control(pDX, IDC_COMBO4, _combo);? DDX_Text(pDX, IDC_EDIT6, _age);? DDX_Text(pDX, IDC_EDIT7, _grade);? DDX_Text(pDX, IDC_EDIT2, _id);? DDX_Control(pDX, IDC_COMBO1, _combo_sub);?}?BEGIN_MESSAGE_MAP(TeaManDlg, CDialogEx)? ON_CBN_SELCHANGE(IDC_COMBO4, &TeaManDlg::OnCbnSelchangeCombo4)? ON_BN_CLICKED(IDC_BUTTON1, &TeaManDlg::OnBnClickedButton1)? ON_CBN_SELCHANGE(IDC_COMBO1, &TeaManDlg::OnCbnSelchangeCombo1)? ON_BN_CLICKED(IDC_BUTTON2, &TeaManDlg::OnBnClickedButton2)?END_MESSAGE_MAP()?// TeaManDlg 消息處理程序?void TeaManDlg::OnCbnSelchangeCombo4()?{? _grade = 0; //每次切換完之后將成績框歸零? CString text;? int index = _combo.GetCurSel();  //獲取當前選中項? _combo.GetLBText(index, text);  //獲取當前內容? CInfoFile file;    //需要包含#include "InfoFile.h"? file.ReadDocline();   //讀取學生信息? for (list::iterator it = file.ls.begin(); it != file.ls.end(); it++)? {?  if (text == it->name.c_str())?  {?   _age = it->age; ?   _id = it->id;?   UpdateData(FALSE); //內容更新到對應的控件?   _combo_sub.ResetContent();?   _combo_sub.AddString(TEXT("VC++")); //AddString為追加選項?   _combo_sub.AddString(TEXT("單片機"));?  }? }? file.ls.clear(); //清空list的內容?}?void TeaManDlg::OnBnClickedButton1()?{? // TODO: 在此添加控件通知處理程序代碼? UpdateData(TRUE);? CString type;? //獲取當前選中項? int index = _combo.GetCurSel();? //獲取組合框當前內容? _combo.GetLBText(index, type);? //需要包含#include "InfoFile.h"? CInfoFile file;? file.ReadDocline(); //讀取學生信息? for (list::iterator it = file.ls.begin(); it != file.ls.end(); it++)? {?  if (type == it->name.c_str())?  {?   it->age = _age;?   it->id = _id;?   CString text;?   int index = _combo_sub.GetCurSel();//獲取當前下拉框文本內容?   _combo_sub.GetLBText(index, text);?   CInfoFile file;    //需要包含#include "InfoFile.h"?   file.ReadDocline();   //讀取學生信息?   if (text == CString(TEXT("VC++")))?   {?    it->grade_vc = _grade;?    UpdateData(FALSE);  //內容更新到對應的控件?   }?   if (text == CString(TEXT("單片機")))?   {?    it->grade_mcu = _grade;?    UpdateData(FALSE);  //內容更新到對應的控件?   }?  }? }? file.WriteDocline();  //更新文件內容? file.ls.clear();   //清空list的內容? UpdateData(FALSE);   //更新到對應的控件? MessageBox(TEXT("修改成功"));? CDialog::OnCancel();   //關閉當前窗口? TeaManDlg dlg;     //重新打開并刷新? dlg.DoModal();?}?void TeaManDlg::OnCbnSelchangeCombo1()?{? // TODO: 在此添加控件通知處理程序代碼? CString text_all;? int index = _combo.GetCurSel();  //獲取當前內容? _combo.GetLBText(index, text_all);? CInfoFile file;      //需要包含#include "InfoFile.h"? file.ReadDocline();     //讀取學生信息? for (list::iterator it = file.ls.begin(); it != file.ls.end(); it++)? {?  if (text_all == it->name.c_str())?  {?   CString text;?   int index = _combo_sub.GetCurSel();//獲取當前下拉框文本內容?   _combo_sub.GetLBText(index, text);?   CInfoFile file;    //需要包含#include "InfoFile.h"?   file.ReadDocline();   //讀取學生信息?   if (text == CString(TEXT("VC++")))?   {?    _grade = it->grade_vc;?    UpdateData(FALSE);  //內容更新到對應的控件?   }?   if (text == CString(TEXT("單片機")))?   {?    _grade = it->grade_mcu;?    UpdateData(FALSE);  //內容更新到對應的控件?   }?  }? }? file.ls.clear(); //清空list的內容?}?//取消修改?void TeaManDlg::OnBnClickedButton2()?{? // TODO: 在此添加控件通知處理程序代碼? _id = 0;? _age = 0;? _grade = 0;? UpdateData(FALSE);?}

2.7教務界面實現?

// MANANGER 對話框?IMPLEMENT_DYNAMIC(MANANGER, CDialogEx)?MANANGER::MANANGER(CWnd* pParent /*=nullptr*/)? : CDialogEx(IDD_DIALOG4, pParent)? , _id(0)? , _age(0)? , _grade(0)? , _name(_T(""))? , _Addsub(_T(""))?{?}?MANANGER::~MANANGER()?{?}?void MANANGER::DoDataExchange(CDataExchange* pDX)?{? CDialogEx::DoDataExchange(pDX);? DDX_Control(pDX, IDC_LIST2, _list);? DDX_Text(pDX, IDC_EDIT1, _id);? DDX_Text(pDX, IDC_EDIT2, _age);? DDX_Text(pDX, IDC_EDIT7, _grade);? DDX_Control(pDX, IDC_COMBO5, _combo);? DDX_Text(pDX, IDC_EDIT5, _name);? DDX_Control(pDX, IDC_COMBO1, _combo_sub);? DDX_Control(pDX, IDC_COMBO2, _combo_sub2);? DDX_Text(pDX, IDC_EDIT3, _Addsub);?}?BEGIN_MESSAGE_MAP(MANANGER, CDialogEx)? ON_BN_CLICKED(IDC_BUTTON1, &MANANGER::OnBnClickedButton1)? ON_BN_CLICKED(IDC_BUTTON9, &MANANGER::OnBnClickedButton9)? ON_CBN_SELCHANGE(IDC_COMBO5, &MANANGER::OnCbnSelchangeCombo5)? ON_BN_CLICKED(IDC_BUTTON2, &MANANGER::OnBnClickedButton2)? ON_BN_CLICKED(IDC_BUTTON6, &MANANGER::OnBnClickedButton6)? ON_CBN_SELCHANGE(IDC_COMBO2, &MANANGER::OnCbnSelchangeCombo2)? ON_BN_CLICKED(IDC_BUTTON5, &MANANGER::OnBnClickedButton5)?END_MESSAGE_MAP()?// 添加學生信息?void MANANGER::OnBnClickedButton1()?{? // TODO: 在此添加控件通知處理程序代碼? UpdateData(TRUE); //獲取控件內容? if (_age <= 0 || _name.IsEmpty())? {?  MessageBox(TEXT("輸入信息有誤"));?  return;? }? CInfoFile file;     //需要包含#include "InfoFile.h"? file.ReadDocline();    //讀取學生信息? file.Addline(_id,_name,_age); //添加學生? file.WriteDocline(); //寫文件? file.ls.clear();  //清空list的內容? MessageBox(_T("添加成功"));? _name.Empty();? _age = 0;? _grade = 0;? CDialog::OnCancel();   //關閉當前窗口? MANANGER dlg;     //重新打開并刷新? dlg.DoModal();? UpdateData(FALSE);?}?//初始化?BOOL MANANGER::OnInitDialog()?{? CDialogEx::OnInitDialog();? CRect temprect(0, 0, 870, 650);? CWnd::SetWindowPos(NULL, 0, 0, temprect.Width(), temprect.Height(), SWP_NOZORDER | SWP_NOMOVE);? _list.SetExtendedStyle(_list.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);? CString str[] = { TEXT("學號"),TEXT("姓名"),TEXT("年齡"),TEXT("VC++") ,TEXT("單片機") };? for (int i = 0; i < 5; i++)? {?  _list.InsertColumn(i, str[i], LVCFMT_LEFT, 80);? }? CInfoFile file;? file.ReadDocline();? int i = 0;? for (list::iterator it = file.ls.begin(); it != file.ls.end(); it++)? {?  CString str;?  str.Format(_T("%d"), (it->id));?  _list.InsertItem(i, str); //添加列?  str = CString(it->name.c_str());?  _list.SetItemText(i, 1, str);//添加文本內容?  str.Format(_T("%d"), it->age);?  _list.SetItemText(i, 2, str);?  str.Format(_T("%d"), it->grade_vc);?  _list.SetItemText(i, 3, str);?  str.Format(_T("%d"), it->grade_mcu);?  _list.SetItemText(i, 4, str);?  i++;?  _combo.AddString((CString)it->name.c_str());? }? _combo_sub.AddString(TEXT("VC++")); //AddString為追加選項? _combo_sub.AddString(TEXT("單片機"));? return TRUE; // return TRUE unless you set the focus to a control?     // 異常: OCX 屬性頁應返回 FALSE?}?//刪除學生按鈕部分?void MANANGER::OnBnClickedButton9() ?{? // TODO: 在此添加控件通知處理程序代碼? //獲取控件上的內容,更新到對應關聯的變量中? UpdateData(TRUE);? int index = _combo.GetCurSel();? if (index == -1)? {?  MessageBox(TEXT("刪除失敗,您未選中任何人"));?  return;? }? CString type;    ? _combo.GetLBText(index, type);//獲取組合框當前內容? CInfoFile file;    //需要包含#include "InfoFile.h"? file.ReadDocline();   //讀取學生信息? UpdateData(TRUE);? for (list::iterator it = file.ls.begin(); it != file.ls.end(); it++)? {?  CString str;?  str = CString(it->name.c_str());?  if (type == str)?  {?   file.ls.remove(*it);?   _id = 0;?   _name = "";?   _age = 0;?   _grade = 0;?   _combo.DeleteString(_combo.GetCurSel());?   _combo.SetCurSel(-1);?   break;?  }? }? file.WriteDocline(); //更新文件內容? UpdateData(FALSE); //更新到對應的控件? MessageBox(TEXT("刪除成功"));? CDialog::OnCancel();   //關閉當前窗口? MANANGER dlg;     //重新打開并刷新? dlg.DoModal();?}?void MANANGER::OnCbnSelchangeCombo5()?{? // TODO: 在此添加控件通知處理程序代碼? _grade = 0; //每次切換完之后將成績框歸零? CString text;? int index = _combo.GetCurSel(); //獲取當前選中項? _combo.GetLBText(index, text); //獲取當前內容? CInfoFile file;     //需要包含#include "InfoFile.h"? file.ReadDocline(); //讀取學生信息? for (list::iterator it = file.ls.begin(); it != file.ls.end(); it++)? {?  if (text == it->name.c_str()) //姓名比對?  {?   _age = it->age;?   _id = it->id;?   UpdateData(FALSE); //內容更新到對應的控件?   _combo_sub2.ResetContent();?   _combo_sub2.AddString(TEXT("VC++")); //AddString為追加選項?   _combo_sub2.AddString(TEXT("單片機"));?  }? }?}?//修改學生信息?void MANANGER::OnBnClickedButton2()?{? UpdateData(TRUE);? CString type;? //獲取當前選中項? int index = _combo.GetCurSel();? //獲取組合框當前內容? _combo.GetLBText(index, type);? //需要包含#include "InfoFile.h"? CInfoFile file;? file.ReadDocline(); //讀取學生信息? for (list::iterator it = file.ls.begin(); it != file.ls.end(); it++)? {?  if (type == it->name.c_str())?  {?   if (!(_name.IsEmpty()))?   {?    CStringA s_name;?    s_name = _name;?    it->name = s_name.GetBuffer();?   }?   it->age = _age;?   it->id = _id;?   CString text;?   int index = _combo_sub2.GetCurSel();//獲取當前下拉框文本內容?   _combo_sub2.GetLBText(index, text);?   CInfoFile file;    //需要包含#include "InfoFile.h"?   file.ReadDocline();   //讀取學生信息?   if (text == CString(TEXT("VC++")))?   {?    it->grade_vc = _grade;?    UpdateData(FALSE);  //內容更新到對應的控件?   }?   if (text == CString(TEXT("單片機")))?   {?    it->grade_mcu = _grade;?    UpdateData(FALSE);  //內容更新到對應的控件?   }?  }? }? file.WriteDocline();  //更新文件內容? file.ls.clear();   //清空list的內容? MessageBox(TEXT("修改成功"));? UpdateData(FALSE);   //更新到對應的控件? CDialog::OnCancel();   //關閉當前窗口? MANANGER dlg;     //重新打開并刷新? dlg.DoModal();?}?//添加課程信息?int i = 6;?void MANANGER::OnBnClickedButton6()?{? // TODO: 在此添加控件通知處理程序代碼? //獲取編輯框內容 ? UpdateData(TRUE);   //獲取內容? _combo_sub.AddString(_Addsub);? _list.InsertColumn(i,_Addsub,LVCFMT_LEFT,80); //添加列? i++;? UpdateData(FALSE);?}?//添加學生成績信息?void MANANGER::OnCbnSelchangeCombo2()?{? // TODO: 在此添加控件通知處理程序代碼? CString text_all;? int index = _combo.GetCurSel();  //獲取當前內容? _combo.GetLBText(index, text_all);? CInfoFile file;      //需要包含#include "InfoFile.h"? file.ReadDocline();     //讀取學生信息? for (list::iterator it = file.ls.begin(); it != file.ls.end(); it++)? {?  if (text_all == it->name.c_str())?  {?   CString text;?   int index = _combo_sub2.GetCurSel();//獲取當前下拉框文本內容?   _combo_sub2.GetLBText(index, text);?   CInfoFile file;    //需要包含#include "InfoFile.h"?   file.ReadDocline();   //讀取學生信息?   if (text == CString(TEXT("VC++")))?   {?    _grade = it->grade_vc;?    UpdateData(FALSE);  //內容更新到對應的控件?   }?   if (text == CString(TEXT("單片機")))?   {?    _grade = it->grade_mcu;?    UpdateData(FALSE);  //內容更新到對應的控件?   }?  }? }? file.ls.clear(); //清空list的內容?}?void MANANGER::OnBnClickedButton5()?{? // TODO: 在此添加控件通知處理程序代碼? _combo_sub.DeleteString(_combo_sub.GetCurSel()); //刪除當前數據? //_list.DeleteColumn(6);?}?  }?

?

標簽: 處理程序 消息處理

上一篇:微服務系列 1:服務化框架落地的挑戰和核心需求
下一篇:即時焦點:Linux用戶及權限詳解