基于Qt的教務管理系統(tǒng)的實現(xiàn)本科論文_第1頁
基于Qt的教務管理系統(tǒng)的實現(xiàn)本科論文_第2頁
基于Qt的教務管理系統(tǒng)的實現(xiàn)本科論文_第3頁
基于Qt的教務管理系統(tǒng)的實現(xiàn)本科論文_第4頁
基于Qt的教務管理系統(tǒng)的實現(xiàn)本科論文_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

武漢理工大學武漢理工大學武漢理工大學武漢理工大學基于Qt的教務管理系統(tǒng)的實現(xiàn)摘要近年來,由于計算機網(wǎng)絡與計算機軟件的不斷快速迅猛發(fā)展,人們的生活習慣也由此造成了很大的變化,并且計算機信息管理系統(tǒng)也越來越多的參與到人們的日常生活與工作中來,對于我們學生來說,這種變化尤其巨大。信息的快速更新變化使得學校在學生信息的管理上投入的資源越來越多。所以,為了提高學校教務管理工作的效率,節(jié)約教務資源與經(jīng)費,并且減少教務處理工作中的失誤,有必要開發(fā)一套高效自動化的計算機信息管理系統(tǒng)。本論文中的系統(tǒng)使用的開發(fā)工具是Qt,采用SqLite數(shù)據(jù)庫,是在使用比較廣泛的windows下開發(fā),利用其提供的面向?qū)ο缶幊痰目梢暬ぞ邅砭幹瞥鼋缑嬗押茫僮骱唵蔚某绦?。此教務管理系統(tǒng)由后臺數(shù)據(jù)的處理部分與前臺應用的交互部分組成,并且該系統(tǒng)可以根據(jù)用戶不同的權(quán)限來提供不同的操作,主要包括學生的成績管理、學生的學籍管理、學校的班級管理等。此教務管理系統(tǒng)的開發(fā)目的在于最大限度的節(jié)省人才資源的同時也可以提高管理效率,能夠及時、準確、迅速的滿足不同用戶的不同需求。關(guān)鍵詞:教務管理系統(tǒng);Qt;SqLite;效率TheimplementationofeducationaladministrationsystembasedonQtAbstractInrecentyears,duetothecomputernetworkandcomputersoftwarecontinuouslyrdevelopmentquick,people'slifehabitalsocausedthegreatchanges,andcomputerinformationmanagementsystemisalsomoreandmoreinvolvedinthePeople'sDailylifeandwork,forourstudents,thischangeisespeciallylarge.Updateinformationchangetheschoolinthemanagementofstudentinformationresourcesmoreandmore.So,inordimprovetheefficiencyofschooleducationaladministrationwork,savingtheeducationalresourcesandfunds,andreducethefaultsinoureducationalwork,itisnecessarytoasetofefficientautomaticcomputerinformationmanagementsystem.SystemdevelopmenttoolsusedinthispaperistheQt,usingSqLitedatabase,isuseofmoreextensivedevelopmentundertheWindows,usingtheobject-orientedprogrammingofferedbythevisualtoolstodevelopthefriendlyinterface,simpleopprocedures.Theeducationaladministrationmanagementsystembythebackgrounddataprocessingpartandtheforegroundapplicationoftheinteractionoftheparts,andtcanprovidedifferentaccordingtodifferentuserpermissionstooperation,mainlyincludesthestudentperformancemanagement,studentstatusmanagement,schoolofclassmanagement,etc.Thedevelopmentoftheeducationaladministrationsystemisaimedatmaximumsaveresourcesatthesametimealsocanimprovetheefficiencyofmanagemenabletotimely,accuratelyandquicklytomeetthedifferentneedsofdifferentusers.KeyWords:Educationaladministrationmanagementsystem;Qt;Sqlite;efficienc目錄摘要................................................................................Abstract...............................................................................1系統(tǒng)概述...........................................................................1.1項目背景.....................................................................1.2系統(tǒng)開發(fā)的目的和意義.........................................................1.3目前國內(nèi)外的研究現(xiàn)狀.........................................................1.3.1國外研究現(xiàn)狀.............................................................1.3.2國內(nèi)研究現(xiàn)狀.............................................................2關(guān)鍵技術(shù)...........................................................................2.1開發(fā)工具簡介.................................................................2.1.1QtCreator集成開發(fā)環(huán)境....................................................2.1.2Sqlite簡介................................................................2.2開發(fā)語言簡介.................................................................2.2.1C++......................................................................2.2.2SQL......................................................................系統(tǒng)總體設(shè)計的實現(xiàn).................................................................系統(tǒng)模塊結(jié)構(gòu)的設(shè)計...........................................................3.1.1軟件模塊結(jié)構(gòu)的設(shè)計.......................................................3.1.2軟件模塊總體處理流程.....................................................3.1.3功能分配.................................................................系統(tǒng)功能總體設(shè)計.............................................................3.3系統(tǒng)的總體界面設(shè)計介紹.......................................................3.4數(shù)據(jù)庫的設(shè)計.................................................................3.5數(shù)據(jù)庫表的實體圖.............................................................3.6系統(tǒng)數(shù)據(jù)出錯處理設(shè)計.........................................................3.6.1系統(tǒng)的出錯信息以及處理方法...............................................3.6.2補救措施.................................................................3.6.3安全保密設(shè)計.............................................................4詳細設(shè)計...........................................................................4.1系統(tǒng)的主程序.................................................................4.2程序初始化界面的實現(xiàn).........................................................4.3數(shù)據(jù)庫的操作.................................................................4.4管理員模塊的實現(xiàn).............................................................4.5學生模塊的實現(xiàn)...............................................................4.6教師模塊的實現(xiàn)...............................................................4.7數(shù)據(jù)庫模塊的實現(xiàn).............................................................系統(tǒng)運行界面展示...................................................................登錄界面展示.................................................................5.2管理員操作初始化界面展示.....................................................5.3教師操作界面展示.............................................................武漢理工大學武漢理工大學武漢理工大學武漢理工大學武漢理工大學武漢理工大學5.4學生界面展示.................................................................5.5錯誤處理界面展示.............................................................系統(tǒng)測試...........................................................................測試概述.....................................................................6.2測試過程.....................................................................6.3測試結(jié)果.....................................................................總結(jié)..............................................................................參考文獻..............................................................................致謝..............................................................................外文原文..............................................................................外文翻譯..............................................................................

1系統(tǒng)概述1.1項目背景信息系統(tǒng)的目的是讓人可以高效的進行工作,包括對信息的一系列操作,如添加信息、修改信息、刪除信息、查詢信息等;人們將計算機硬件與軟件相結(jié)合來開發(fā)出信息平臺,在這個平臺中實現(xiàn)信息系統(tǒng)的功能與目的?,F(xiàn)如今,教務發(fā)展越來越快、越來越好,由此引發(fā)的高校教育資源也越來越緊張,因此對于高校的教學管理部門來說一套好的教務管理系統(tǒng)不僅可以解決日漸增大的教學管理量,而且可以降低教學管理的復雜度與難度。此外,對于教育高校來說,教育管理的方式與手段也將從另一個層面體現(xiàn)學校的價值與教育能力,這直接影響到學校的形象。在信息高速發(fā)展的今天各大高校有必要建設(shè)一個完善的教務管理系統(tǒng),這樣高??梢愿雍侠淼睦酶鲗W院的眾多教學實驗資源、更加合理地處理各種教學實驗信息、更加合理優(yōu)化安排各種教學資源,讓各種資源利用都達到最大化。這些日益突出的關(guān)鍵問題儼然已經(jīng)需要各高校教學管理部門花費一定的人力、物力去解決了。借助于計算機信息系統(tǒng)的強大功能,高??梢越鉀Q教務管理的一系列繁瑣問題,計算機有其細致性、準確度高等特點,這些都是教務管理工作中必須的,所以信息化在日常工作中要不斷的體現(xiàn);現(xiàn)階段,各個高校也開始對教務系統(tǒng)加大投資,加快校園的信息化步伐,解放人在教務管理中的繁瑣工作,這樣的改革對教育來說是具有重要意義的。1.2系統(tǒng)開發(fā)的目的和意義高校的教務管理方式在現(xiàn)如今是必須要改革的,而在信息化的浪潮中學校的教務管理系統(tǒng)的修改是必然的趨勢。高校教務管理工作作為高校教育管理的一個重要環(huán)節(jié),它是高校管理工作的核心,也是高校管理的基礎(chǔ)。一個學校的教務管理工作的效率高低直接影響到學校教務工作的是否可以快速的處理,也間接的影響到了學校對于人才的培養(yǎng)質(zhì)量。而且學生對教務管理系統(tǒng)也提出了更高的要求,信息管理系統(tǒng)不再僅僅是看通知的地方,而是學生與學校進行溝通的途徑,學生可以將一些信息反饋給學校,學校也可以通過這個平臺了解學生的動態(tài),這樣的系統(tǒng)對于學校的教育是有促進作用的。高校要適應信息化的發(fā)展,積極的開展教務系統(tǒng)的調(diào)查,滿足學生對信息系統(tǒng)的需求,滿足老師對學生的教育需要,這樣可以快速的將教育資源最大化,避免浪費大量的教育資源。1.3目前國內(nèi)外的研究現(xiàn)狀1.3.1國外研究現(xiàn)狀在信息化浪潮席卷全球、日益滲透到社會生活各個領(lǐng)域的今天,數(shù)字化校園建設(shè)如火如荼。特別是,歐美、日本等發(fā)達國家高度重視信息化建設(shè),早在20世紀90年代初幾乎所有的高校便建成了比較完善的校園網(wǎng),各個職能部門都基本實現(xiàn)了網(wǎng)絡化、信息化管理。目前國外在教務管理軟件的設(shè)計和開發(fā)方面處于領(lǐng)先地位,不論是在開發(fā)的方法上還是在軟件的使用率上都很成功。1.3.2國內(nèi)研究現(xiàn)狀我國的高等教育在近幾年發(fā)展很快,高校在管理工作中需要處理的任務越來越多,這樣不僅工作難度加大了而且落后的教育直接導致教學水平的提高困難。這些問題的出現(xiàn)讓人們開始考慮換種方式來管理高校的教務工作,各高校紛紛啟動并加快了數(shù)字化校園建設(shè)的步伐,相繼建成了校園網(wǎng),為管理軟件的應用提供了硬件平臺。任何新生事物的發(fā)展都離不開啟蒙摸索、初見成效與加快發(fā)展的步驟,所以高校教育的信息化也不例外。通過不斷的摸索,不斷的嘗試,我國的高校教務管理工作逐漸開始不斷步入正規(guī)。現(xiàn)在,我國的各高校的教務管理工作還在不斷的集成發(fā)展,許多高校也建立了各具特色的管理系統(tǒng),這些改革都給高校的管理帶來了一定的好處與方便。譬如人力資源的解放以及工作中的準確度的提高。但是,事物的發(fā)展都具有雙面性,教務管理信息系統(tǒng)的快速發(fā)展還存在一定的缺陷,如功能的不全面,不能將所有的教務管理工作在一個系統(tǒng)中體現(xiàn),而且功能的效率不高,有時候還存在一定的缺陷,對于一些特殊的問題沒有提供很好的解決方案等等的一些問題,這些問題都需要在以后的不斷發(fā)展中做出改進。2關(guān)鍵技術(shù)2.1開發(fā)工具簡介2.1.1QtCreator集成開發(fā)環(huán)境QtCreator是跨平臺的QtIDE,QtCreator是Qt被Nokia收購后推出的一款新的輕量級集成開發(fā)環(huán)境(IDE)。此IDE能夠跨平臺運行,支持的系統(tǒng)包括Linux(32位及64位)、MacOSX以及Windows。根據(jù)官方描述,QtCreator的設(shè)計目標是使開發(fā)人員能夠利用Qt這個應用程序框架更加快速及輕易的完成開發(fā)任務。QtCreator主要是為了幫助新Qt用戶更快速入門并運行項目,還可提高有經(jīng)驗的Qt開發(fā)人員的工作效率。使用強大的C++代碼編輯器可快速編寫代碼。語法標識和代碼完成功能輸入時進行靜態(tài)代碼檢驗以及提示樣式上下文相關(guān)的幫助代碼折疊括號匹配和括號選擇模式高級編輯功能。采用C++語言設(shè)計,編碼規(guī)范清晰,關(guān)鍵算法或處理須加注釋說明。QtCreator是一款跨平臺的集成開發(fā)環(huán)境,特別針對Qt開發(fā)者,是QtSDK組成的一部分,可運行于Windows,Linux/X11及MacOSX等桌面操作系統(tǒng),允許開發(fā)者為多桌面環(huán)境及移動設(shè)備平臺創(chuàng)建應用程序。它包括一個可視化調(diào)試工具和集成的GUI版面和外形設(shè)計師。這個編輯器的功能包括語法高亮度顯示和自動完成。QtCreator在Linux上,使用GCC的C++編譯器。在Windows,默認安裝它可以使用MinGW或MSVC。從源代碼編譯時,也可以使用cdb。QTCreator是一個跨平臺的C++GUI應用構(gòu)架,它提供了豐富的窗口控件,具有面向?qū)ο?、易于擴展、組件編程等特點,最為引人注目的是目前在Linux上最為流行的KDE的桌面環(huán)境,它就是建立在QT庫的基礎(chǔ)之上。QT支持多種平臺,隨著KDE的快速發(fā)展普及,QT很有可能成為Linux系統(tǒng)窗口平臺上進行軟件開發(fā)的GUI首選工具。信號和槽是QT的核心機制,要學會QT編程那么就必須對信號和槽機制有所了解。信號和槽機制是一種接口,應用在對象之間的通信,是QT的核心特性,同時也是QT區(qū)別于其它種類工具包的重要地方。信號和槽機制是QT自行定義的一種通信機制,它獨立于標準的C/C++語言,所以必須要正確的處理好信號和槽機制,這里借助moc(MetaObjectCompiler)工具,該moc工具是一個C++的預處理工具,為事件處理自動生成所需要的附加處理代碼。在我們所熟知的多種GUI工具包中,窗口小控件(widget)都有一個回調(diào)函數(shù)用來響應它們能觸發(fā)的動作,這個回調(diào)函數(shù)通常是一個指針,它指向某個函數(shù)。但是,在QT中信號和槽機制取代了這些函數(shù)指針,使得人們在編寫這些通信程序時更為簡潔明了。信號和槽機制能使用任意數(shù)量、任意類型的參數(shù)。在這里我設(shè)計的主窗口命名為:mainwindow。所有從QObject或其子類(例如Qwidget)派生的類都可以包含信號和槽機制。當對象改變狀態(tài)時,信號就由該對象發(fā)射出去,這就是對象所要做的事情,但它不知道另一端是誰在接收這個信號,這就是所謂的信息封裝,它保證對象被當作一個真正的組件來使用。槽被用來接收信號,它們是對象成員函數(shù),稱為槽函數(shù)。但槽函數(shù)并不知道是否有信號和自己相連。而且,對象也不了解具體的通信機制。在編程時可以將多個信號與單個槽函數(shù)進行連接,也可以將單個信號與多個槽函數(shù)進行連接,甚至也可以將一個信號和另外一個信號相連,這時無論第一個信號在何時發(fā)武漢理工大學武漢理工大學武漢理工大學武漢理工大學武漢理工大學武漢理工大學射,那么都將立刻發(fā)射第二個信號??傊?,信號與槽機制構(gòu)成了一個很強大的控件編程機制。2.1.2Sqlite簡介SQLite,是一款輕型的數(shù)據(jù)庫,是關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它的設(shè)計目標是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時能夠跟很多程序語言相結(jié)合,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源世界著名的數(shù)據(jù)庫管理系統(tǒng)來講,它的處理速度比他們都快。SQLite是遵守ACID[2]的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領(lǐng)域項目。不像常見的客戶-服務器范例,SQLite引擎不是個程序與之通信的獨立進程,而是連接到程序中成為它的一個主要部分。所以主要的通信協(xié)議是在編程語言內(nèi)的直接API調(diào)用。這在消耗總量、延遲時間和整體簡單性上有積極的作用。整個數(shù)據(jù)庫(定義、表、索引和數(shù)據(jù)本身)都在宿主主機上存儲在一個單一的文件中。它的簡單的設(shè)計是通過在開始一個事務的時候鎖定整個數(shù)據(jù)文件而完成的。同時它還支持事務處理功能等等。也有人說它象Microsoft的Access,有時候真的覺得有點象,但是事實上它們區(qū)別很大。比如SQLite支持跨平臺,操作簡單,能夠使用很多語言直接創(chuàng)建數(shù)據(jù)庫,而不象Access一樣需要Office的支持。如果你是個很小型的應用,或者你想做嵌入式開發(fā),沒有合適的數(shù)據(jù)庫系統(tǒng),那么你可以考慮使用SQLite。到2013年10月17日最新版本是3.8.1。它的官方網(wǎng)站是:或者,能在上面獲得源代碼和文檔。同時因為數(shù)據(jù)庫結(jié)構(gòu)簡單,系統(tǒng)源代碼也不是很多,也適合想研究數(shù)據(jù)庫系統(tǒng)開發(fā)的專業(yè)人士。2.2開發(fā)語言簡介2.2.1C++C++語言是一種使用非常廣泛的計算機編程語言。C++是一種基于靜態(tài)數(shù)據(jù)類型檢查的、支持多重編程范式的程序設(shè)計語言。C++語言支持過程化程序設(shè)計、數(shù)據(jù)抽象、面向?qū)ο蟪绦蛟O(shè)計、泛型程序設(shè)計等多種程序設(shè)計風格。C++語言的設(shè)計目標,就是要讓C++既具有適合于系統(tǒng)程序設(shè)計的C語言所具有的可適應性和高效性,又能在其程序組織結(jié)構(gòu)方面具有像Simula那樣的語言設(shè)施(Simula所支持的這種程序組織結(jié)構(gòu)通常被稱為面向?qū)ο蟪绦蛟O(shè)計風格)。在設(shè)計的時候,還做了很大的努力,使得引借自Simula的高層次的程序設(shè)計技術(shù)能夠應用于系統(tǒng)程序設(shè)計之中。這即是說,C++所提供的抽象機制能夠被應用于那些對效率和可適應性具有極高要求的程序設(shè)計任務之中。采用C++面向?qū)ο笳Z言,利用抽象和封裝等機制,借助類、對象、繼承、傳遞等技術(shù)進行構(gòu)造的軟件開發(fā)方法,它的出發(fā)點和目標就是使人們在想一個問題的過程和方法時與分析、設(shè)計和實現(xiàn)系統(tǒng)的過程和方法盡最大可能的一致,即描述問題的認知空間以及解決問題的方法空間要在結(jié)構(gòu)上盡可能的一致,這樣面向?qū)ο蠓椒ㄗ匀坏啬M了人類認知世界的方式,所以這是一個很好的思維認知的方法,也是特別好的一種軟件開發(fā)方法。1998的C++標準分為兩個部分:核心語言和C++標準程序庫;后者包含了大部分標準模板庫和C標準程序庫的稍加修改版本。存在許多不屬于標準部分的C++程序庫,且使用外部鏈接,程序庫甚至可以用C撰寫。C++標準程序庫充分吸收了C標準程序庫,并佐以少許的修改,使其與C++良好的運作。另一個大型的程序庫部分,是以標準模板庫(STL)為基礎(chǔ),STL于1994年2月正式成為ANSI/ISOC++。它提供了實用的工具,如容器(如:矢量和鏈表),迭代器(廣義指針)提供容器以類似數(shù)組的訪問方式,以及算法進行搜索和排序的運算。此外還提供了(multi)map(關(guān)系數(shù)組)和(multi)set,它們都使用兼容的界面。因此,以下成為可能,使用模板撰寫泛型算法,它可以和任何容器或在任何以迭代器定義的串行上運作。如同C,使用#include指令包含標準表頭,即可訪問程序庫里的功能。C++提供69個標準表頭,其中19個不再贊成使用。使用標準庫(例如:使用std::vector或std::string來取代C風格的數(shù)組)有助于導向更安全和更靈活的軟件。STL在納入C++標準以前,是來自HP和后來的SGI的第三方程式庫,標準中并未稱之為“STL”,它只是標準庫中的一部分,但仍有許多人使用這個名稱,以別于其它的標準庫(輸入/輸出流、國際化、診斷、C程序庫子集,等等)。和C語言相比,C++引入了更多的特性,包括:陳述性聲明,類似函數(shù)的強制轉(zhuǎn)型,new/delete操作符,布林類型,參考類型,默認參數(shù),函數(shù)重載,命名空間,類型(包括所有和類型相關(guān)的特性,如繼承、成員函數(shù)、虛函數(shù)、抽象類型和構(gòu)造函數(shù)),操作符重載,模板,::操作符,異常處理和運行時期識別。和普遍認為的相反,C++不是第一個正式引入const關(guān)鍵字的語言。80年代早期,BjarneStroustrup和DennisRetchie討論之后提供了在C語言中readonly/writeonly的實現(xiàn)機制,并在帶類型的C中取得了一定經(jīng)驗。關(guān)鍵字const正式引入C語言是在ANSIC89。這早于第一個C++國際標準近十年,但此時const已被C++實現(xiàn)普遍采用。C++在某些案例中(見下“與C不兼容之處”),進行比C還要多的類型檢查。以“//起始”作為注解起源自C的前身BCPL,而后被重新引入到C++。C++的一些特性,C不久之后也采用了,包括在for循環(huán)的括號中聲明,C++風格的注解(使用//符號,和inline,雖然C99定義的inline關(guān)鍵字與C++的定義不兼容。不過,C99也引入了不存在于C++的特性,如:可變參數(shù)宏,和以數(shù)組作為參數(shù)的較佳處理;某些C++編譯器可能實現(xiàn)若干特性,以作為擴展,但其余部分并不符合現(xiàn)存的C++特性)一個常見的混淆其實只是一個微妙的術(shù)語問題:由于它的演化來自C,在C++中的術(shù)語對象和C語言一樣是意味著存儲器區(qū)域,而不是類的實例,在其它絕大多數(shù)的面向?qū)ο笳Z言也是如此。舉例來說,在C和C++中,語句inti;定義一個int類型的對象,這就是變量的值i將在賦值時,所存入的存儲器區(qū)域。C++主要有三個編譯階段:預處理、轉(zhuǎn)譯成目標代碼和鏈接(最后的兩個階段一般才視為真正的“編譯”)。在第一階段,預處理,會將預處理器指令替換成源代碼,然后送到下一個編譯階段。預處理指令的運作方式是根據(jù)用戶定義的規(guī)則,簡單的把記號字符串行置換成其它的記號字符串行。它們進行宏置換、含入其它的文件(由底層至高級的特性,例如包含模塊/包/單元/組件)、條件式編譯和條件式含入。2.2.2SQLSQL全稱是“結(jié)構(gòu)化查詢語言(StructuredQueryLanguage)”。SQL語言結(jié)構(gòu)簡潔,功能強大,簡單易學,所以自從IBM公司1981年推出以來,SQL語言得到了廣泛的應用。目前,SQL語言已被確定為關(guān)系數(shù)據(jù)庫系統(tǒng)的國際標準,被絕大多數(shù)商品化關(guān)系數(shù)據(jù)庫系統(tǒng)采用,如Oracle、Sybase、DB2、Informix、SQLServer這些數(shù)據(jù)庫管理系統(tǒng)都支持SQL語言作為查詢語言。結(jié)構(gòu)化查詢語言SQL是一種介于關(guān)系代數(shù)與關(guān)系演算之間的語言,其功能包括查詢、操縱、定義和控制四個方面,是一個通用的功能極強的關(guān)系數(shù)據(jù)庫標準語言。在SQL語言中不需要告訴SQL如何訪問數(shù)據(jù)庫,只要告訴SQL需要數(shù)據(jù)庫做什么。結(jié)構(gòu)化查詢語言包含6個部分:一:數(shù)據(jù)查詢語言(DQL:DataQueryLanguage)其語句,也稱為“數(shù)據(jù)檢索語句”,用以從表中獲得數(shù)據(jù),確定數(shù)據(jù)怎樣在應用程序給出。保留字SELECT是DQL(也是所有SQL)用得最多的動詞,其他DQL常用的保留字有WHERE,ORDERBY,GROUPBY和HAVING。這些DQL保留字常與其他類型的SQL語句一起使用。二:數(shù)據(jù)操作語言(DML:DataManipulationLanguage)其語句包括動詞INSERT,UPDATE和DELETE。它們分別用于添加,修改和刪除表中的行。也稱為動作查詢語言。三:事務處理語言(TPL)它的語句能確保被DML語句影響的表的所有行及時得以更新。TPL語句包括BEGINTRANSACTION ,COMMIT和ROLLBACK。四:數(shù)據(jù)控制語言(DCL)它的語句通過GRANT或REVOKE獲得許可,確定單個用戶和用戶組對數(shù)據(jù)庫對象的訪問。某些RDBMS可用GRANT或REVOKE控制對表單個列的訪問。五:數(shù)據(jù)定義語言(DDL)其語句包括動詞CREATE和DROP。在數(shù)據(jù)庫中創(chuàng)建新表或刪除表(CREATTABLE或DROPTABLE);為表加入索引等。DDL包括許多與人數(shù)據(jù)庫目錄中獲得數(shù)據(jù)有關(guān)的保留字。它也是動作查詢的一部分。六:指針控制語言(CCL)它的語句,像DECLARECURSOR ,F(xiàn)ETCHINTO和UPDATEWHERECURRENT用于對一個或多個表單獨行的操作。3系統(tǒng)總體設(shè)計的實現(xiàn)3.1系統(tǒng)模塊結(jié)構(gòu)的設(shè)計3.1.1軟件模塊結(jié)構(gòu)的設(shè)計根據(jù)系統(tǒng)分析的結(jié)果,按照結(jié)構(gòu)化的系統(tǒng)設(shè)計方法,教學事務管理系統(tǒng)從功能由課程管理子系統(tǒng)、學籍管理子系統(tǒng)、成績管理子系統(tǒng)組成。各子系統(tǒng)的簡要功能說明如表3-1。表3-1各子系統(tǒng)的簡要功能概述模塊名模塊名功能簡介班級管理維護學校的每個班級的基本信息,包括班級名、班級號、專業(yè)、輔導員等相關(guān)信息。學籍管理完成對學生的學籍管理,包括學籍錄入、學籍修改、學籍查詢等相關(guān)功能。成績管理管理每個學生所修課程的成績,包括成績錄入、成績修改、成績查詢、成績修改等相關(guān)功能。教師信息管理每個老師的基本信息,包括老師基本信息錄入、修改、查詢等相關(guān)功能。系統(tǒng)管理功能包括系統(tǒng)的一些基本功能,如修改密碼、查詢用戶基本信息、重新登陸等。3.1.2軟件模塊總體處理流程根據(jù)各個子系統(tǒng)的功能劃分,畫出本軟件的頂層數(shù)據(jù)流圖,如圖3-1所示。用戶在登陸界面登陸中輸入所需的登陸信息后需要在程序的后臺進行用戶身份的驗證,當這些驗證都通過后才可以由用戶去操作相應的功能,主要有學生管理、教師管理、成績管理、班級管理和系統(tǒng)管理。在這些管理模塊中需要設(shè)計到數(shù)據(jù)庫的交互的操作,需要進行數(shù)據(jù)的操作后將輸出結(jié)果更新數(shù)據(jù)庫文件,如果需要的話,操作結(jié)果也會在用戶操作界面中進行展示。圖圖3-1頂層數(shù)據(jù)流程本軟件的二層數(shù)據(jù)流圖如圖3-2所示,在這個數(shù)據(jù)流圖中詳細的描述了程序中數(shù)據(jù)的處理流程,從得到數(shù)據(jù)到數(shù)據(jù)的處理以及數(shù)據(jù)的輸出都做了詳細的描述。用戶登錄用戶驗證用戶名密碼錯誤信息數(shù)據(jù)庫文件判斷用戶類別數(shù)據(jù)庫操作學生管理系統(tǒng)管理班級管理成績管理教師管理教師資料管理學生資料管理系統(tǒng)資料管理添加,刪除添加,刪除添加,刪除班級資料管理學生成績查詢教師表教師信息單學生信息表學生信息單系統(tǒng)信息表系統(tǒng)信息班級信息表成績信息表班級信息成績信息學號添加刪除圖3-2二層數(shù)據(jù)流程圖3.1.3功能分配本系統(tǒng)中各功能需求與程序模塊(組件)之間的關(guān)系如下表3-2所示。表3-2功能需求與程序模塊關(guān)系表功能需求功能需求課程管理系統(tǒng)管理教師信息查詢教師添加教師修改教師刪除學生信息查詢學生添加學生修改學生刪除成績錄入成績修改成績刪除成績信息查詢班級信息查詢班級錄入班級刪除班級修改用戶信息修改密碼重新登陸如表3-2所示,使用表的形式將各個管理模塊的功能進行了描述,通過這個表可以快速直觀的了解各個管理模塊的功能,不同的模塊對應著不同的功能,有些功能模塊在其它的管理模塊中可以借用,只需要將這個模塊的實現(xiàn)函數(shù)進行封裝,并且向外部模塊提供一個接口,外部模塊通過這個接口來調(diào)用這個功能來實現(xiàn)另外的功能。3.2系統(tǒng)功能總體設(shè)計根據(jù)對系統(tǒng)的分析,將系統(tǒng)的功能機構(gòu)圖再次細分,得到如下結(jié)構(gòu),如圖3-3所示。教務管理系統(tǒng)教務管理系統(tǒng)管理員管理學生信息管理通用功能模塊教師信息管理查看學籍信息查看成績信息查看班級信息教師信息操作賞罰管理學生信息操作添加用戶教師相關(guān)信息查詢班級信息查詢學生相關(guān)信息查詢學生成績信息操作查看幫助信息修改當前用戶密碼學生信息查詢學生信息修改學生信息刪除學生信息增加教師信息查詢教師信息修改教師信息刪除教師信息增加學生成績信息查詢學生成績信息修改學生成績信息刪除學生成績信息增加圖3-3系統(tǒng)的總體功能圖在這個教務管理系統(tǒng)中,主要分為了四大模塊,分別是學生管理模塊、教師管理模塊、管理員管理模塊以及通用模塊。在通用模塊中是一些所有用戶都有的操作,在后面代碼的具體實現(xiàn)中為了布局的美觀這個通用模塊中的功能會分散開來安排;其余的三個模塊都是對信息的一些處理,但他們最大的區(qū)別在于有嚴格的操作權(quán)限控制,不同的用戶不能對信息的處理越級,這樣會有很大的安全隱患。學生的功能主要集中在查看,查看成績、查看學籍、查看班級等一些普通的操作,教師的主要任務是對學生成績的操作,這類用戶對學生的成績有最大的權(quán)限。管理員用戶擁有學生與老師的全部權(quán)限,但管理員用戶最大的功能是管理用戶,即管理員來控制可以什么樣的人登錄到系統(tǒng)中來,這樣管理員就可以通過修改用戶的登錄信息或者是刪除登錄信息來控制系統(tǒng)的使用權(quán)的歸屬問題,這樣的設(shè)計對與系統(tǒng)的安全性有積極的作用。此外,系統(tǒng)的設(shè)計還要考慮數(shù)據(jù)庫的問題,設(shè)計一個安全可靠的數(shù)據(jù)庫是非常有必要的。此外,作為一個教務管理系統(tǒng),獎懲模塊是必須的。在這個系統(tǒng)中,獎懲模塊只有管理員可以操作,其它用戶是沒法進行管理的,其它用戶可以進行查詢這些獎懲,包括獎學金、助學金、以及其它的一些獎勵;也可以將對學校的懲罰寫入系統(tǒng)中,如作弊、打架、以及其它的一些違法學校規(guī)章制度的行為。3.3系統(tǒng)的總體界面設(shè)計介紹如圖3-4所示是系統(tǒng)的總體初步界面。圖3-4圖3-4系統(tǒng)的總體初步界面控件,這個控件提供用戶登錄類型的選擇,分別有管理員、學生、教師。在界面上會有來個Qlabel標簽來提示用戶輸入用戶名與密碼,代碼部分會獲得它們的text(),通過與數(shù)據(jù)庫中的記錄相比對來判斷用戶是否有權(quán)限來登錄系統(tǒng)。此外還有確認登錄與取消登錄的QpushButton按鈕。在代碼的實現(xiàn)部分會給這倆個按鈕注冊槽函數(shù)來響應它們的點擊事件clicked()。根據(jù)不同的用戶提供不同的界面,但是在操作的主界面中界面的總體設(shè)計是一樣的,或者是說不同的用戶是通過對控件的可用與否來達到權(quán)限的控制,但控件在不同的界面中會有相同的位置。將不同屬性的控件放在不同的QWidget中,這樣在布局中是很好操作的,也是很方便的。不同的用戶類型type對應著不同的操作界面,管理員的登錄會給提供最全面的操作,包括一組管理員特有的按鈕QPushButton,包括對用戶的管理與老師、學生信息的增加、修改、刪除等,在這些操作中都會操作到數(shù)據(jù)庫文件,所以數(shù)據(jù)庫文件的安全設(shè)計是非常至關(guān)重要的。此外在程序的主界面的左下角會有一個QtoolBox控件,通過這個控件可以達到功能集中化的效果,QToolBox可以容納不同的控件,這里我添加的是QlistWidget,這是為了讓QlistWidget的不同選擇條目對于與界面右下角部分的QStackWidget的不同界面,這樣就達到了不同的條目對于與不同的功能操作界面,也回避了彈出式的界面操作,那樣的界面容易造成操作紊亂。程序界面的右下角我設(shè)計的是在一個QWidget的加入一個QStackWidget控件,然后用QStackWidget的頁面數(shù)對應于我左下角的QToolBox控件的條目數(shù),這樣就可以利用這倆個控件的currentRowChanged(int)事件與相應setCurrentIndex(int)槽函數(shù)來達到界面功能的跳轉(zhuǎn)。在QstackWidget的每個界面中可以繼續(xù)添加QstackWdiget控件,這樣又可以對應于左邊中QToolBox控件的子界面中添加的QlistWidget的條目數(shù),使得功能再加以細化,界面的功能設(shè)計也更加的完善與合理。如果是學生與老師登錄到系統(tǒng),代碼部分的設(shè)計會使得這倆類的用戶無法使用左下角的控件,這時,在程序界面的中間部分會給用戶提供相應的操作按鈕。這樣的設(shè)計不僅會使得程序的安全性得到保障,也會使得系統(tǒng)用戶的功能得到完整的體現(xiàn)。但是學生與老師的操作權(quán)限還是有所區(qū)別,所以可以用QpushButton的enable()函數(shù)來設(shè)置按鈕是否可用,如果登錄到系統(tǒng)的用戶沒有使用該控件功能的權(quán)限,這時可以將QpushButton的enable()參數(shù)值設(shè)置為false,這樣就保障了權(quán)限的不外露。在此系統(tǒng)中,管理員有倆個獨特的功能,管理用戶與獎賞功能模塊。在這倆個模塊實現(xiàn)中,將所有的功能集中化處理,使用QsqlTableModel的對象的特性,將它與Qtableview綁定到一起,在Qtableview中將信息進行直觀的操作,然后點擊下方的QpushButton來實現(xiàn)數(shù)據(jù)的操作,這樣的設(shè)計可以方便、直觀的進行操作,并且將功能集中起來操作簡單。在功能區(qū)域中左邊是一個類似與QQ分類的設(shè)計,這樣的設(shè)計是將功能集中化并且可以節(jié)省空間,在系統(tǒng)功能區(qū)的上半部分是一排按鈕,這些按鈕提供的一些常用的功能,并且這些按鈕是與其它系統(tǒng)用戶所共同擁有的。將他們分離出來一方面是為了方便操作;另一方面也可以比較方便的進行操作限制,通過設(shè)置這些按鈕是否能用來區(qū)別系統(tǒng)的其它用戶,這點會在接下來的圖片中所展示。系統(tǒng)中將會使用背景色與背景圖片來使系統(tǒng)達到美觀的目的,并且控制控件的大小以及控件的擴展策略,這樣可以防止窗口的大小變化的時候圖片的沒規(guī)律的擴展。在文本框中需要輸入內(nèi)容的時候需要控制輸入的內(nèi)容,在這個系統(tǒng)中,我設(shè)計的是只能輸入數(shù)字,并且是10位的數(shù)字,這樣可以減少后期數(shù)據(jù)的處理與數(shù)據(jù)庫中數(shù)據(jù)的紊亂。此外,在系統(tǒng)界面的整體布局中要特別注意對布局管理器的使用,將控件加到容器中,再對容器界面設(shè)計布局管理器,最后設(shè)計整體容器的布局管理器,盡最大的努力來使得界面達到整潔美觀的效果。在界面出現(xiàn)后有的時候需要改變界面的大小,這種就需要在界面的控件上設(shè)置控件的擴展策略,保證界面中的控件能夠正常的顯示,并且在縮放界面的時候界面中的控件保持它們的相對位置不變。3.4數(shù)據(jù)庫的設(shè)計數(shù)據(jù)庫設(shè)計是構(gòu)建一個系統(tǒng)的關(guān)鍵。這是因為數(shù)據(jù)庫設(shè)計的優(yōu)劣將直接影響系統(tǒng)數(shù)據(jù)的安全性、可靠性。在數(shù)據(jù)庫設(shè)計過程中,需要遵循的一般原則是:數(shù)據(jù)庫各表的設(shè)計要反應現(xiàn)實中的事物。數(shù)據(jù)表中的字段類型和大小要符合使用習慣。較少數(shù)據(jù)庫的榮譽和數(shù)據(jù)的不一致性。書庫應用的一個特點是對數(shù)據(jù)庫的頻繁操作,每次操作可能只會設(shè)計一個表,也可以同時設(shè)計多個表,也有可能對一個數(shù)據(jù)表進行多個操作,在這種情況下,由于數(shù)據(jù)冗余和數(shù)據(jù)不一致時,可能會引起錯誤。要有助于提高數(shù)據(jù)處理速度。程序訪問數(shù)據(jù)庫的速度依賴于硬件的速度,數(shù)據(jù)量的大小和數(shù)據(jù)表設(shè)計的優(yōu)劣,而前兩個因素是很難更改的。要包成數(shù)據(jù)庫的安全。安全性是數(shù)據(jù)庫應用軟件的重要要求。本教務管理系統(tǒng)涉及的實體包括:用戶:用戶類型、用戶名、密碼。學生:學號、姓名、性別、年齡、班級、聯(lián)系電話、家庭住址、備注。教師:職工號、姓名、性別、年齡、職稱、聯(lián)系電話。班級:班級id、班級名、年級、學制、專業(yè)、班主任、備注。成績單:課程編號、學號、學年、學期、分數(shù)。獎懲信息:學號、獎懲名、獎懲內(nèi)容。3.5數(shù)據(jù)庫表的實體圖概念結(jié)構(gòu)設(shè)計是將需求分析得到的用戶需求抽象為信息結(jié)構(gòu)的過程。它是整個數(shù)據(jù)庫設(shè)計的關(guān)鍵。為了把問題清楚的表達出來,通常要建立一個概念性的數(shù)據(jù)模型。概念性的數(shù)據(jù)模型是面向問題的數(shù)據(jù)模型。最常用的表示概念性數(shù)據(jù)模型的方法是實體-聯(lián)系方法。這種方法用實體圖描述現(xiàn)實世界中的實體,而不涉及這些實體在系統(tǒng)中的實現(xiàn)方法。用這種方法表示的概念性數(shù)據(jù)模型又稱為實體模型。實體模型中包含“實體”,“聯(lián)系”和“屬性”。描述各個實體的實體圖如下所示。圖3-5用戶實體圖如圖3-5所示是用戶的實體圖,實體用戶的屬性有用戶類型type、用戶名id以及密碼passwd。圖3-6學生信息實體圖如圖3-6所示是學生的實體圖,實體學生的屬性有學號id、姓名name、性別sex、年齡age、班級classname、聯(lián)系電話telnum、家庭住址address和備注remark。圖3-7教師信息實體圖如圖3-7所示是教師的實體圖,實體教師的屬性有職工號id、姓名teachname、性別teachsex、年齡teachage、職稱teachjob以及聯(lián)系電話teachtelnum。圖3-8班級信息實體圖如圖3-8所示是班級的實體圖,實體班級的屬性有班級號id、班級名classname、年級grade、學制schoolsystem、專業(yè)major、班主任boss、備注remark。圖3-9獎罰信息的實體圖如圖3-9所示是懲罰信息的實體圖,實體獎懲信息的屬性有學號id、獎懲類型type、獎懲內(nèi)容content。圖3-10成績信息的實體圖如圖3-10所示是學生成績單的實體圖,實體學生成績單的屬性有學生學號id、課程編號Sid、學年schoolyear、學期term、分數(shù)score。對于這些數(shù)據(jù)庫表中的屬性,根據(jù)它們的實際情況在實現(xiàn)數(shù)據(jù)庫表的時候?qū)崿F(xiàn)每個表的屬性,并且在表中設(shè)置它們接收數(shù)據(jù)的條件,使存入數(shù)據(jù)庫中的數(shù)據(jù)更加合理化。圖3-10中所示的學生成績單的實體圖在實現(xiàn)的時候根據(jù)實際情況將課程編號與學號設(shè)置為這個表的復合主鍵,防止出現(xiàn)了學生成績錯誤的情況。所以,在實際的開發(fā)過程中需要建立名為manage.db的數(shù)據(jù)庫,然后在這個數(shù)據(jù)庫中加入這五張表,信息從這些數(shù)據(jù)表中取出,然后經(jīng)過程序使用再寫入數(shù)據(jù)庫中。由于使用的是SQLite數(shù)據(jù)庫,可以使用可視化界面來查看數(shù)據(jù)庫中的信息是否正確的設(shè)置。3.6系統(tǒng)數(shù)據(jù)出錯處理設(shè)計3.6.1系統(tǒng)的出錯信息以及處理方法如表3-3所示,系統(tǒng)的出錯信息以及處理方法一覽表。 表3-3系統(tǒng)的出錯信息以及處理方法出錯名出錯名稱系統(tǒng)輸出信息處理方法用戶名輸入錯誤“登陸信息有誤”進入登錄頁面前三次密碼錯誤“登陸信息有誤”進入登錄頁面密碼錯數(shù)次數(shù)超過三次“信息有誤,請您確認信息后登陸”進入默認登錄頁,并半小時內(nèi)禁止該用戶進行登錄。輸入數(shù)據(jù)格式錯誤禁止用戶輸入不允許為空的輸入框輸入空字符彈回原輸入頁面的輸入處在表3-3中描述了一些系統(tǒng)中需要處理的一些出錯信息,系統(tǒng)中有各種各樣的不同錯誤信息,系統(tǒng)需要有相應的錯誤處理方法,如果用戶在使用系統(tǒng)的時候出現(xiàn)了錯誤,系統(tǒng)可以提供相應的錯誤提示或者系統(tǒng)自動的進行錯誤處理。3.6.2補救措施由于數(shù)據(jù)在數(shù)據(jù)庫中已經(jīng)有備份,故在系統(tǒng)出錯后可以依靠數(shù)據(jù)庫的恢復功能,并且依靠日志文件使系統(tǒng)再啟動,就算系統(tǒng)崩潰用戶數(shù)據(jù)也不會丟失或遭到破壞。但有可能占用更多的數(shù)據(jù)存儲空間,權(quán)衡措施由用戶來決定。3.6.3安全保密設(shè)計數(shù)據(jù)庫安全保密就是保證數(shù)據(jù)庫中數(shù)據(jù)的保密性、正確性。即保護數(shù)據(jù)庫中的數(shù)據(jù)不被非法用戶獲取,不因為操作員失誤或者軟硬件故障導致數(shù)據(jù)錯誤。當前,數(shù)據(jù)庫受到的主要威脅有:對數(shù)據(jù)庫的不正確訪問,引起數(shù)據(jù)庫數(shù)據(jù)的錯誤;為了某種目的,故意破壞數(shù)據(jù)庫,使其不能恢復;非法訪問數(shù)據(jù)庫信息;用戶通過網(wǎng)絡進行數(shù)據(jù)庫訪問時,有可能受到種技術(shù)的攻擊;未經(jīng)授權(quán)非法修改數(shù)據(jù)庫數(shù)據(jù),使其失去正確性;硬件毀壞、自然災害、磁干擾等。本系統(tǒng)用戶管理保證了只有授權(quán)的用戶才能進入系統(tǒng)進行數(shù)據(jù)操作,而且對一些重要數(shù)據(jù),系統(tǒng)設(shè)置為只有更高權(quán)限的人員方可讀取或是操作。系統(tǒng)安全保密性較高。武漢理工大學武漢理工大學武漢理工大學武漢理工大學武漢理工大學武漢理工大學4詳細設(shè)計4.1系統(tǒng)的主程序intmain(intargc,char*argv[]){QApplicationa(argc,argv);QFontfont("Times",15,QFont::Bold);a.setFont(font);//添加一下四行代碼用來解決中文顯示亂碼的問題QTextCodec*codec=QTextCodec::codecForName("GB2312");QTextCodec::setCodecForLocale(codec);QTextCodec::setCodecForCStrings(codec);QTextCodec::setCodecForTr(codec);RegActionw;//不需要w.show();否則會生成一個空白的界面。returna.exec();}這是系統(tǒng)的主函數(shù),系統(tǒng)所有的運行都是從這個函數(shù)開始,所以在這個函數(shù)中的設(shè)置都是全局的,將會影響到整個系統(tǒng)的設(shè)置。所以對于一些在整個系統(tǒng)中都需要進行設(shè)計的參數(shù)一般都會在這里進行設(shè)計。系統(tǒng)在運行時會有系統(tǒng)默認的字體,如果需要可以在這個函數(shù)中進行設(shè)置,這樣可以使系統(tǒng)看起來更加美觀;此外,系統(tǒng)在運行時由于語言環(huán)境的不同或者文化的差異,這將導致系統(tǒng)的字體在顯示時與設(shè)計的初衷不一樣,所以在這個主函數(shù)中進行設(shè)置,這樣就不會出現(xiàn)顯示亂碼的情況。4.2程序初始化界面的實現(xiàn)界面的初始化是通過QtCreator來拖拽來實現(xiàn)的,再加上后期代碼中對界面的修飾,這樣就成了最后的效果圖。this->setWindowFlags(Qt::Dialog|Qt::WindowMinimizeButtonHint);this->setAutoFillBackground(true);QPalettepalette;QPixmappixmap(":/D:/5.jpg");palette.setBrush(QPalette::Window,QBrush(pixmap));this->setPalette(palette);對setWindowFlags()函數(shù)參數(shù)的設(shè)置來控制界面中大小的設(shè)置,屏蔽還原按鈕,這樣的設(shè)計對于只提供登錄的窗口來說是比較好的,其次可以通過控制QPalette的屬性來設(shè)置窗口的背景圖片,但前提是界面的自動填充得設(shè)置為真,否則設(shè)置不會生效。在使用圖片的時候需要注意將圖片做成資源文件,這樣就可以很好的進行移植,當系統(tǒng)在其它電腦上運行的時候也可以顯示出圖片。信號與槽函數(shù):connect(ui->quit_btm,SIGNAL(clicked()),this,SLOT(close()));退出按鈕的clicked()信號與本界面的close()函數(shù)相結(jié)合來達到窗口的退出功能。connect(this->loginwidget->ui->log_btm,SIGNAL(clicked()),this,SLOT(log_fun()));新建一個類,在這個類中的公有部分設(shè)置一個登錄窗口的對象,這樣可以通過這個對象來操作登錄類中的控件,這樣的設(shè)計符合邏輯結(jié)構(gòu)的分層,避免太多的數(shù)據(jù)堆積到一起造成數(shù)據(jù)操作時紊亂。在這個教務系統(tǒng)中,有大量的點擊信號與槽函數(shù),對于發(fā)出這些信號的控件都有自己獨特的名字,然后根據(jù)它們的名字進行函數(shù)的命名,并且在編程中信號與槽函數(shù)的連接都有相應的注釋。信號和槽機制是QT的主流核心技術(shù),在程序運行的時候,有的信號槽就沒有指到恰當?shù)牡胤?,所以導致的結(jié)果就是在點擊按鍵的時候沒有出現(xiàn)預期的結(jié)果,所以每一個都有對應的信號和槽,代碼量比較多,在編寫的時候稍微不小心就會導致connect()函數(shù)的實效,所以一定要小心每個按鍵在編寫時要保證它的有效。圖4-1登錄流程圖如圖4-1所示的流程圖所示,登錄按鈕的槽函數(shù)log_fun()負責采集登錄窗口的數(shù)據(jù),并且對數(shù)據(jù)進行判斷,對于不正確的登錄信息予以拒絕訪問。這時就要與數(shù)據(jù)庫中的表進行交互,本程序使用的Sqlite數(shù)據(jù)庫,并且調(diào)用QT中封裝的數(shù)據(jù)庫的操作來完成與數(shù)據(jù)庫的數(shù)據(jù)交流。voidRegAction::log_fun(){QStringtype=this->loginwidget->ui->type_combobox->currentText();QStringname_string=this->loginwidget->ui->name_LineTxt->text();QStringpasswd=this->loginwidget->ui->passwd_LineTxt->text();if(!sql.connectionDB()){QMessageBox::warning(this,"fail","數(shù)據(jù)庫打開失敗!");}if(this->loginwidget->ui->type_combobox->currentIndex()==0||this->loginwidget->ui->name_LineTxt->text().isEmpty()||this->loginwidget->ui->passwd_LineTxt->text().isEmpty()){QMessageBox::warning(this,"fail","登錄信息有誤");}else{if(!sql.selectuser(type,name_string,passwd))QMessageBox::warning(this,"fail","登錄失敗");else{sql.db.close();QStringtype=this->loginwidget->ui->type_combobox->currentText();intid=this->loginwidget->ui->name_LineTxt->text().toInt();QSqlTableModel*model=sql.queryuserinfo(id,type);this->mainface->ui->usertable->setModel(model);this->mainface->show();if(pare("學生")==0){this->mainface->ui->left_widget->setEnabled(false);this->mainface->ui->queryAllClass->setEnabled(false);this->mainface->ui->queryAllRecord->setEnabled(false);this->mainface->ui->queryAllScore->setEnabled(false);this->mainface->ui->updscore_btm->setEnabled(false);this->mainface->ui->addscore_btm_2->setEnabled(false);this->mainface->ui->delscore_btm->setEnabled(false);this->mainface->ui->managuser_btm->setEnabled(false);mainface->show();}elseif(pare("管理員")==0){this->mainface->ui->left_widget->setEnabled(true);this->mainface->ui->queryAllClass->setEnabled(true);this->mainface->ui->queryAllRecord->setEnabled(true);this->mainface->ui->queryAllScore->setEnabled(true);this->mainface->ui->updscore_btm->setEnabled(true);this->mainface->ui->addscore_btm_2->setEnabled(true);this->mainface->ui->delscore_btm->setEnabled(true);this->mainface->ui->managuser_btm->setEnabled(true);mainface->show();}elseif(pare("教師")==0){this->mainface->ui->left_widget->setEnabled(false);this->mainface->ui->queryAllClass->setEnabled(true);this->mainface->ui->queryAllRecord->setEnabled(true);this->mainface->ui->queryAllScore->setEnabled(true);this->mainface->ui->updscore_btm->setEnabled(true);武漢理工大學武漢理工大學武漢理工大學武漢理工大學武漢理工大學武漢理工大學this->mainface->ui->addscore_btm_2->setEnabled(true);this->mainface->ui->delscore_btm->setEnabled(true);this->mainface->ui->managuser_btm->setEnabled(false);mainface->show();}}}}由以上代碼可以看出,不同的登錄對象對應于不同的操作界面的設(shè)置是在頁面的顯示時動態(tài)生成的,在界面重新登錄時可以保證提供給用戶正確的界面。系統(tǒng)先獲得在登錄界面中Qlineedit中的數(shù)據(jù),然后將這些用戶信息跟數(shù)據(jù)庫中存放的用戶信息相比對,并且使用if嵌套來判斷不同的情況。對于信息錯誤的信息,系統(tǒng)會彈出一個QMessageBox來提示用戶輸入有誤,并且用戶可以重新輸入;對于正確的信息,系統(tǒng)將對信息做出判斷,根據(jù)不同的用戶來配置不同的用戶界面,即通過將一些控件禁用來實現(xiàn)。QRegExpregExp("[0-9]{1,10}");QRegExpValidator*pRegExpValidator=newQRegExpValidator(regExp,this);ui->name_LineTxt->setValidator(pRegExpValidator);ui->passwd_LineTxt->setEchoMode(QLineEdit::Password);在登錄界面中需要輸入用戶名以及密碼,出于安全的考慮,在輸入用戶名的文本框中設(shè)置了輸入限制,根據(jù)正則表達式的規(guī)范,在這個文本框中將無法輸入數(shù)字之外的其它字符,并且有字數(shù)限制,此處根據(jù)我的實際情況設(shè)置成了最多十位的輸入。而且密碼框的輸入字符會顯示為小黑點,這樣就可以避免密碼在無意之間泄漏。4.3數(shù)據(jù)庫的操作上面的代碼中涉及到了數(shù)據(jù)庫的操作,對于數(shù)據(jù)庫的操作,可以新建一個封裝數(shù)據(jù)庫操作的類,在這個類中完成對數(shù)據(jù)庫的交互部分。一般數(shù)據(jù)庫鏈接有五大步驟,分別是:1.加載(注冊)數(shù)據(jù)庫2.建立鏈接3.執(zhí)行SQL語句4.處理結(jié)果5.關(guān)閉數(shù)據(jù)庫boolsql_reg::connectionDB(){db=QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("manager.db");if(db.open()){qDebug()<<"數(shù)據(jù)庫打開成功";returntrue;}else{qDebug()<<"數(shù)據(jù)庫打開失敗";db.lastError();qDebug()<<"****************";returnfalse;}}這是一個連接數(shù)據(jù)庫的函數(shù)。對于要執(zhí)行數(shù)據(jù)操作的程序來說,所有的操作都是基于數(shù)據(jù)庫的連接成功,所以將數(shù)據(jù)庫的連接部分單獨分為一個函數(shù),并且在這個函數(shù)中添加了一些輸出語句;如果出錯,可以通過db.lastError()來提供出錯的信息,并且可以通過使用qdebug來定外錯誤的位置,這樣可以給程序員的檢錯提供幫助,使程序員快速的發(fā)現(xiàn)錯誤以至解決錯誤。boolsql_reg::selectuser(QStringtype,QStringid,QStringpasswd){bool*ok;id.toInt(ok,10);QSqlQueryquery;query.exec(QString("select*fromuserwheretype='%1'andid=%2andpasswd='%3'").arg(type).arg(id).arg(passwd));//qDebug()<<QString("select*fromuserwheretype='%1'andid=%2andpasswd='%3'").arg(type).arg(id).arg(passwd);if(!query.next()){qDebug()<<"none";qDebug()<<"selectusererror";qDebug()<<query.lastError();qDebug()<<"************";returnfalse;}else{qDebug()<<query.value(0).toInt()<<query.value(1).toString();returntrue;}} 查詢用戶,這是點擊登錄按鈕后的槽函數(shù)要調(diào)用的函數(shù),將用戶在登錄界面提供的信息傳參到這個函數(shù),這個函數(shù)負責將傳入的信息與數(shù)據(jù)庫中的信息進行比對,并且返回比對結(jié)果;如果比對結(jié)果發(fā)現(xiàn)數(shù)據(jù)正確,返回true,否則返回false,程序根據(jù)函數(shù)的不同返回結(jié)果來選擇不同的程序流程走向。//查詢用戶信息QSqlTableModel*sql_reg::queryuserinfo(intid,QStringtype){QSqlTableModel*model=newQSqlTableModel;model->setTable("user");model->setEditStrategy(QSqlTableModel::OnManualSubmit);//添加過濾器model->setFilter(QObject::tr("id=%1andtype='%2'").arg(id).arg(type));model->select();//選取整個表的所有行model->lastError();//ui->tableView->setModel(model);returnmodel;} 這個函數(shù)查詢用戶在數(shù)據(jù)庫中的信息,程序根據(jù)函數(shù)返回結(jié)果QsqlTab

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論