生活随笔
收集整理的這篇文章主要介紹了
C++实现一个基于mfc的学生信息管理系统
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、系統概述
本文設計的是學生信息管理系統,能夠實現權限管理即不同的用戶角色能夠擁有不同的限,角色主要是學生、教師和管理員,針對不同的用戶,有著不同的操作權限,學生角色只能夠查看到學生基礎信息,不能夠進行刪除和添加的操作,而教師和管理員則能夠實現學生基礎信息的增加、刪除等。 本系統設計采用的是c++語言,使用的軟件是VS2017,數據庫使用的是MYSQL數據庫,數據庫可用Navicat 進行可視化操作。 系統的主要架構如下圖: 用戶首先進入到登錄界面,輸入用戶名和密碼,并選擇角色,進行身份的驗證,通過連接數據庫進行用戶名和密碼進行驗證,當用戶輸入的用戶名和密碼與數據庫中的一致的話就可以登陸進去,同時記錄用戶的角色,驗證用戶角色,判斷是否顯示學生成績的頁面,在對學生基礎信息與學生成績信息進行操作都需要進行用戶角色的驗證,驗證不通過則會提示權限不足,驗證通過則可以進行學生信息的增加、刪除等操作。
二、系統實現
1.環境搭建
安裝VS2017軟件,比2017版本高的應該都可以,如果軟件版本比較2017低的話可能會導致兼容的問題。 安裝MYSQL數據庫,我使用的是5.5.56版,5.5.*版本應該是很穩定的一個版本了。 VS2017軟件連MYSQL接數據庫的配置,由于時間比較長了,在這里就不詳細說了,大家可以根據網上的教程自行配置。
2.數據庫構建以及數據源的配置
利用Navicat軟件連接MYSQL,之后可以對數據庫進行可視化的操作。 首先創建一個連接,連接你本地的MYSQL數據庫;連接之后創建一個數據庫managersystem,名字自己取即可;然后在數據庫創建三張表,三張表如下圖。 第一張表是用戶表,主要有三個字段,userName,userPassword和role,三個字段分別存儲用戶的用戶名、用戶密碼和角色名稱(用戶權限)。 另外兩張表就是學生信息表和學生成績表,主要是存儲學生基本信息和學生成績信息,就不作詳細說明了。 學生信息表t_student: 學生成績表t_mark:
2.配置MYSQL數據源,首先在電腦中的【控制面板】---->【管理工具】里打開MYSQL數據庫ODBC驅動,找不到則去網上下載ODBC驅動程序,如下圖所示。 3. 創建一個MYSQL數據源,選擇MySQLODBC 5.1 Driver 驅動程序,如下圖所示。 之后會彈出一個配置數據庫連接信息的界面,按照提示填寫,如下圖所示。 4. 登錄界面 登錄界面能夠實現三種角色的登錄,當用戶輸入賬戶和密碼之后,通過連接數據庫對用戶賬戶和密碼進行判斷,驗證之后,如果用戶名和密碼正確,則能夠登錄到系統中,如果驗證失敗,則提示錯誤信息。登錄界面如圖。 登錄界面實現數據庫驗證的主要代碼是:
mysql_query ( & m_sqlCon
, "SET NAMES GB2312" ) ; query
. Format ( "select userName,userPassword,role from t_user where userName = \'%s\' and userPassword=\'%s\'" , this - > userName
, this - > userPassword
) ; int ress
= mysql_query ( & m_sqlCon
, ( char * ) ( LPCSTR
) query
) ; if ( ress
== 0 ) { res
= mysql_store_result ( & m_sqlCon
) ; if ( mysql_num_rows ( res
) == 0 ) { AfxMessageBox ( "用戶不存在" ) ; } else { row
= mysql_fetch_row ( res
) ; if ( strIdentify
== row
[ 2 ] ) { mysql_free_result ( res
) ; CDialog
:: OnOK ( ) ; MAINLOG mianlog
; mianlog
. DoModal ( ) ; UpdateData ( false ) ; mysql_close ( & m_sqlCon
) ; } else { AfxMessageBox ( "密碼錯誤!" ) ; } } }
在登錄之后同時將登錄的用戶身份信息記錄,以便后續使用,程序主要為:
UpdateData ( true ) ; int nIndex
= identify
. GetCurSel ( ) ; strIdentify
= str
[ nIndex
] ;
其中
static CString str
[ 3 ] = { "管理員" , "教師" , "學生" } ;
static CString strIdentify
;
5.學生基礎信息界面 登錄到系統界面后,顯示學生基礎信息,學生角色只可查詢,教師和管理員則可以進行增加和刪除學生基礎信息。用戶可自己選擇每頁顯示的數據數。也可以通過學號查詢該學生信息。顯示界面如圖。 用戶可以按“學號”進行查詢,也可以進行添加、刪除、選擇每頁顯示的個數等操作; 操作數據庫實現分頁查詢的主要程序為:
mysql_query ( & m_sqlCon
, "SET NAMES GB2312" ) ; sql
. Format ( "SELECT studentId,studentNumber,name,sex,age,class,phone,qq,college FROM t_student LIMIT %d,%d" , intStart
, pageSize
) ; int ress
= mysql_query ( & m_sqlCon
, ( char * ) ( LPCSTR
) sql
) ; if ( ress
== 0 ) { res
= mysql_store_result ( & m_sqlCon
) ; mysql_close ( & m_sqlCon
) ;
學生是沒有添加和刪除的權限,會提示警告: 當切換用戶到教師或者管理員的角色時,就能夠實現學生信息的添加和刪除操作,如圖所示: 實現添加學生基礎信息的程序主要為:
mysql_init ( & m_sqlCon
) ; if ( ! mysql_real_connect ( & m_sqlCon
, "localhost" , "root" , "4321" , "managersystem" , 3306 , NULL , 0 ) ) { AfxMessageBox ( _T ( "數據庫連接失敗!" ) ) ; return ; } else { UpdateData ( true ) ; char * studentNumber1
= ( char * ) studentNumber
. GetBuffer ( ) ; char * studentName1
= ( char * ) studentName
. GetBuffer ( ) ; char * studentSex1
= ( char * ) studentSex
. GetBuffer ( ) ; char * studentAge1
= ( char * ) studentAge
. GetBuffer ( ) ; char * studClass1
= ( char * ) studClass
. GetBuffer ( ) ; char * telephone1
= ( char * ) telephone
. GetBuffer ( ) ; char * stuQQ1
= ( char * ) stuQQ
. GetBuffer ( ) ; char * college1
= ( char * ) college
. GetBuffer ( ) ; mysql_query ( & m_sqlCon
, "SET NAMES GB2312" ) ; sql
. Format ( "INSERT INTO t_student(studentNumber,name,sex,age,class,phone,qq,college)VALUES(\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\')" , studentNumber1
, studentName1
, studentSex1
, studentAge1
, studClass1
, telephone1
, stuQQ1
, college1
) ; int ress
= mysql_query ( & m_sqlCon
, ( char * ) ( LPCSTR
) sql
) ; if ( ress
== 0 ) { AfxMessageBox ( _T ( "插入數據成功!" ) ) ; CDialog
:: OnOK ( ) ; INFORADD inforAdd
; inforAdd
. DoModal ( ) ; OnInitDialog ( ) ; UpdateData ( false ) ; mysql_close ( & m_sqlCon
) ; } else { AfxMessageBox ( _T ( "插入數據失敗!" ) ) ; } }
同樣地,點擊“按鈕”輸入學號,就可以實現刪除的操作,如圖為實現刪除操作: 6.學生成績顯示界面 當角色為“教師”或者“管理員”時,在學生基礎信息界面就能夠顯示“學生成績表”的按鈕。點擊“學生成績表”,就可以跳轉到學生成績的界面。 學生成績界面同樣有刪除、添加的操作,有可以實現按添加查詢,可以按照時間查詢和按照學號查詢。 按照年份實現查詢的主要程序為:
mysql_query ( & m_sqlCon2
, "SET NAMES GB2312" ) ; sql2
. Format ( "SELECT id,studentId,objectOriented,english,matrixAnalysis,term,SUM(objectOriented+english+matrixAnalysis) AS markSum,AVG((objectOriented+english+matrixAnalysis)/3) AS average FROM t_mark WHERE YEAR(term)=\'%s\' GROUP by id" , this - > term
) ; int ress
= mysql_query ( & m_sqlCon2
, ( char * ) ( LPCSTR
) sql2
) ; if ( ress
== 0 ) { res2
= mysql_store_result ( & m_sqlCon2
) ; mysql_close ( & m_sqlCon2
) ; while ( ( row2
= mysql_fetch_row ( res2
) ) ) { stuMark1
. setId ( row2
[ 0 ] ) ; stuMark1
. setsId ( row2
[ 1 ] ) ; stuMark1
. setsObjectOriented ( row2
[ 2 ] ) ; stuMark1
. setsEnglish ( row2
[ 3 ] ) ; stuMark1
. setsMatrixAnalysis ( row2
[ 4 ] ) ; stuMark1
. setTerm ( row2
[ 5 ] ) ; stuMark1
. setSumMark ( row2
[ 6 ] ) ; stuMark1
. setAverage ( row2
[ 7 ] ) ; stuMarkInfor
. push_back ( stuMark1
) ; }
在這里并沒有寫的很詳細,寫細的話東西還是挺多的,就不一一贅述了。 總結一下,這個簡單的mfc程序,原理很簡單,涉及到了C++語言基礎、mfc相關操作知識和MYSQL數據庫的知識,在最后附上源碼。 源碼:mfc工程文件含數據庫文件 提取碼:k35x
總結
以上是生活随笔 為你收集整理的C++实现一个基于mfc的学生信息管理系统 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。