首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

完整 ODBC 資料庫範例:學生資料管理系統

     編輯:關於VC++

專案特色

  • 採用 CRecordView 架構 + CListCtrl (Report 模式) 顯示資料
  • 功能完整:新增/刪除/修改/查詢/排序/顯示全部
  • 密碼保護刪除與修改操作
  • Access 資料庫(可換 Oracle 等)

系統介面

關鍵實作

1. ListCtrl 初始化

m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_ListCtrl.InsertColumn(0, "學號"); m_ListCtrl.InsertColumn(1, "姓名");
m_ListCtrl.InsertColumn(2, "數學"); m_ListCtrl.InsertColumn(3, "英語");
for(int i=0;i<4;i++) m_ListCtrl.SetColumnWidth(i, 90);

2. 通用顯示函式 Show()

int Show() {
    int i=0; m_pSet->MoveFirst();
    do {
        CString s; s.Format("%d", m_pSet->m_column1); // 學號
        m_ListCtrl.InsertItem(i, s);
        m_ListCtrl.SetItemText(i,1, m_pSet->m_column2); // 姓名
        s.Format("%d", m_pSet->m_column3); m_ListCtrl.SetItemText(i,2,s); // 數學
        s.Format("%d", m_pSet->m_column4); m_ListCtrl.SetItemText(i,3,s); // 英語
        i++; m_pSet->MoveNext();
    } while(!m_pSet->IsEOF());
    m_pSet->MoveFirst(); return i;
}

3. 新增記錄

void OnAdd() {
    CAddDlg dlg; if(dlg.DoModal()!=IDOK) return;
    if(dlg.m_No==0) { AfxMessageBox("學號不可為零"); return; }
    m_pSet->AddNew();
    m_pSet->m_column1=dlg.m_No; m_pSet->m_column2=dlg.m_Name;
    m_pSet->m_column3=dlg.m_Math; m_pSet->m_column4=dlg.m_Eng;
    m_pSet->Update(); m_pSet->Requery(); m_pSet->MoveLast();
    // 同步更新 ListCtrl...
}

4. 刪除/修改(需密碼 1234)

void OnDelete() {
    CDelDlg dlg; if(dlg.DoModal()!=IDOK) return;
    if(dlg.m_Pwd!=1234) { AfxMessageBox("密碼錯誤"); return; }
    m_pSet->MoveFirst();
    while(!m_pSet->IsEOF()) {
        if(dlg.m_No==m_pSet->m_column1) {
            m_ListCtrl.DeleteAllItems();
            m_pSet->Delete(); m_pSet->Requery(); Show(); break;
        }
        m_pSet->MoveNext();
    }
}

5. 查詢(依數學成績)

void OnFind() {
    CFindDlg dlg; if(dlg.DoModal()!=IDOK) return;
    m_pSet->MoveFirst(); m_ListCtrl.DeleteAllItems(); BOOL found=FALSE;
    while(!m_pSet->IsEOF()) {
        if(dlg.m_Math==m_pSet->m_column3) {
            found=TRUE; /* InsertItem... */ m_pSet->MoveNext();
        } else m_pSet->MoveNext();
    }
    if(!found) AfxMessageBox("無符合記錄");
}

6. 排序與顯示全部

void OnSort()  { m_ListCtrl.DeleteAllItems(); m_pSet->m_strSort="[學號]"; m_pSet->Requery(); Show(); }
void OnAll()   { m_ListCtrl.DeleteAllItems(); Show(); }

ODBC 設定提醒

// CLhwySet.cpp
CString GetDefaultConnect() { return "ODBC;DSN=not"; } // 控制台建立 DSN 名為 not
CString GetDefaultSQL() { return "[fen]"; }           // 資料表名

或參考《用 Visual C++ 程式實現設定 ODBC 資料源》動態建立 DSN。

擴充建議

  • 統計功能:總分、平均、及格率、優秀率
  • 多條件查詢:學號/姓名/科目/等第
  • 多欄位排序
  • 改造為通訊記錄、庫存管理等實務專案
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved