學生成績管理系統(tǒng)(軟件工程)_第1頁
學生成績管理系統(tǒng)(軟件工程)_第2頁
學生成績管理系統(tǒng)(軟件工程)_第3頁
學生成績管理系統(tǒng)(軟件工程)_第4頁
學生成績管理系統(tǒng)(軟件工程)_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

課程設計課程名稱軟件工程Ⅰ課程設計題目學生成績管理系統(tǒng)的設計與開發(fā)專業(yè)班級姓名成績指導老師2020年6月15日至2020年6月19日一、課程設計目的與任務軟件工程課程設計是《軟件工程Ⅰ》課程的后續(xù)實踐課程,是軟件工程專業(yè)必修的實踐教學模塊。在前導課程中學生學會了系統(tǒng)的需求分析和設計建模,根據軟件開發(fā)生命周期,理應進入軟件開發(fā)階段。本課程設計擬通過一周的實踐訓練,在前導課基礎上優(yōu)化選定系統(tǒng)的分析設計、完成軟件開發(fā)階段工作。使學生經歷一個軟件從問題定義、分析、設計到開發(fā)的全過程和軟件系統(tǒng)開發(fā)的綜合訓練,以便能熟練掌握軟件開發(fā)的完整生命周期過程,較全面地理解、掌握和綜合運用所學的軟件工程知識。通過課程設計的綜合訓練,培養(yǎng)學生實際分析問題、編程和動手的能力,讓學生理解、掌握需求分析、系統(tǒng)設計、系統(tǒng)實施的主要環(huán)節(jié)、步驟以及軟件文檔的制作能力,進一步提高解決問題和開發(fā)一個完整系統(tǒng)的能力。二、課程設計的內容與基本要求本課題是一個用C++和SQLServer實現的高校學生成績管理系統(tǒng),功能包括用戶登錄注冊、設備管理、耗材維護、開放實驗室預約等。系統(tǒng)的特色是界面簡單明了,使用方便,系統(tǒng)有較好的網絡適應性。具體功能模塊如下:學生成績管理系統(tǒng)包括學生成績查詢模塊和學生成績管理模塊。其中學生成績管理模塊又包括登陸模塊,系統(tǒng)管理模塊,系統(tǒng)設置模塊三個子模塊。學生成績查詢模塊實現學生成績和信息查詢及瀏覽功能;登陸模塊實現用戶管理,注冊管理功能;系統(tǒng)管理模塊實現錄入、修改、刪除成績管理,統(tǒng)計管理功能;1.設計報告要求課程設計報告要求邏輯清晰、層次分明、書寫整潔。格式包括標題、提要、正文(包括①項目背景和意義。②可行性分析和需求分析。③總體設計。④詳細設計。⑤編碼測試。⑥答辯。⑦成績評定。)附錄(圖紙、程序清單等)。設計報告須每人一份,獨立完成。2.圖紙要求系統(tǒng)功能模塊圖、流程圖、數據流圖、E-R圖、用例圖、類圖、時序圖等。3.評分標準評分依據評分成績1.選題合理、目的明確10分2.態(tài)度認真、學習刻苦、遵守紀律20分3.設計方案正確,具有可行性15分4.系統(tǒng)調試與結果(功能操作使用正常、軟件程序完整)20分5.設計報告撰寫規(guī)范15分6.答辯20分總分100分注:成績等級:優(yōu)(90分—100分)、良(80分—89分)、中(70分—79分)、及格(60分—69分)、60分以下為不及格。五、指導時間目錄TOC\o"1-2"\h\u1.項目背景和意義 62.可行性分析 62.1技術可行性 72.2經濟可行性 73.需求分析 73.1系統(tǒng)需求 73.2系統(tǒng)功能 73.3數據流圖 83.4用例 104.總體設計 124.1系統(tǒng)設計思想 124.2數據庫設計 134.3接口設計 145.詳細設計 155.1功能模塊 155.2系統(tǒng)主程序流程圖 155.3登陸模塊的設計 155.4學生成績查詢設計 165.5學生成績管理管理設計 175.6學生成績管理系統(tǒng)時序圖 186.編碼實現 187.測試運行 207.1測試用例設計 207.2運行測試 208.評價與修訂 219.設計體會 22參考文獻 23附錄 24致謝 46課程設計成績評定表 47項目背景和意義當今時代是飛速發(fā)展的信息時代,在各行各業(yè)中離不開信息管理處理,這正是計算機被廣泛應用于管理系統(tǒng)的原因。隨著科學技術的不斷提高,計算機科學技術的日漸成熟與普及,其強大的功能已被人們深刻認同,并且已經進入人類社會的各個領域中,發(fā)揮著各式各樣且越來越重要的作用。作為計算機應用的一部分,使用計算機對學員成績信息進行管理,具有手工管理所無法比擬的優(yōu)點。建立完善的學生成績管理系統(tǒng),可以方便的管理學生成績,有助于學生成績的存儲和查詢。項目小組已完成了全面的可行性分析和需求分析,同時與目標用戶進行了多次深入溝通,并在此基礎上著手開發(fā)題庫管理系統(tǒng)軟件。因此,開發(fā)這樣一套學員成績管理系統(tǒng)幫助處理管理學員成績信息的軟件系統(tǒng)是很有必要的。管理系統(tǒng)是進行信息的采集、存儲、加工、維護和使用的系統(tǒng),它是隨著管理科學和技術科學的發(fā)展而形成的。學生成績管理系統(tǒng)是一個教育單位不可缺少的部分,它的內容對于學校的決策者和管理者來說都至關重要,所以學生成績管理系統(tǒng)能為用戶提供充足的管理手段,對學生來說可以輕松的查閱自己在校的成績及排名。學生成績管理系統(tǒng)提供了強大的學生成績管理功能,方便系統(tǒng)管理員對學生成績等信息的添加、修改、刪除、查詢等操作。當今時代是飛速發(fā)展的信息時代,在各行各業(yè)中離不開信息管理處理,這正是計算機被廣泛應用于管理系統(tǒng)的原因。隨著科學技術的不斷提高,計算機科學技術的日漸成熟與普及,其強大的功能已被人們深刻認同,并且已經進入人類社會的各個領域中,發(fā)揮著各式各樣且越來越重要的作用。作為計算機應用的一部分,使用計算機對學員成績信息進行管理,具有手工管理所無法比擬的優(yōu)點。建立完善的學生成績管理系統(tǒng),可以方便的管理學生成績,有助于學生成績的存儲和查詢。項目小組已完成了全面的可行性分析和需求分析,同時與目標用戶進行了多次深入溝通,并在此基礎上著手開發(fā)題庫管理系統(tǒng)軟件。因此,開發(fā)這樣一套學員成績管理系統(tǒng)幫助處理管理學員成績信息的軟件系統(tǒng)是很有必要的。管理系統(tǒng)是進行信息的采集、存儲、加工、維護和使用的系統(tǒng),它是隨著管理科學和技術科學的發(fā)展而形成的。學生成績管理系統(tǒng)是一個教育單位不可缺少的部分,它的內容對于學校的決策者和管理者來說都至關重要,所以學生成績管理系統(tǒng)能為用戶提供充足的管理手段,對學生來說可以輕松的查閱自己在校的成績及排名。學生成績管理系統(tǒng)提供了強大的學生成績管理功能,方便系統(tǒng)管理員對學生成績等信息的添加、修改、刪除、查詢等操作。2.可行性分析學生成績管理工作是高校教育工作的一項重要內容。教務管理工作是指學校管理人員按照一定教育方針,運用先進的管理手段,組織、協(xié)調、指揮并指導各用戶活動,以便高效率、高質量地完成各項教學任務,完成國家所制定的教育目標。學生成績管理工作是學校教學工作的中樞,是保證高校教學機制正常運轉的樞紐,它是一項目的性、計劃性、適用性、創(chuàng)造性和科學性很強的工作。學生成績工作關系到高校教學秩序的穩(wěn)定。大中型院校人員眾多,如果沒有好的管理,就不能取得很好的成果,應用數據庫來管理,在這方面能夠取得很好的效果。2.1技術可行性設置不同權限,提高了數據的安全性。2.2經濟可行性務端及客戶端的支出使用原有設備即可。但是對軟件有一次性軟件費用支出和定期性軟件維護支出。軟件使用后,能夠減少人力的支出和維護。3.需求分析3.1系統(tǒng)需求信息社會的高科技,商品經濟化的高效益,使計算機的應用已普及到經濟和社會生活的各個領域。計算機雖然與人類的關系愈來愈密切,還有人由于計算機操作不方便繼續(xù)用手工勞動。為了適應現代社會人們高度強烈的時間觀念,學籍管理系統(tǒng)軟件為教學辦公室?guī)砹藰O大的方便。該軟件是以漢語編程語言為實現語言,其功能在系統(tǒng)內部有源代碼直接完成。通過操作手冊,使用者可以了解本軟件的基本工作原理。操作人員只需輸入一些簡單的漢字、數字,即可達到自己的目標。3.2系統(tǒng)功能每學期考試結束后,教務工作人員的工作很繁忙,這便要求本成績管理系統(tǒng)對數據的輸入要簡便而且高效,所以系統(tǒng)中有方便的數據查詢和瀏覽;整個系統(tǒng)有嚴密的權限管理,增強了系統(tǒng)數據的安全性;刪除修改數據方便快捷,并且能夠保持一定的安全;完善的數據出錯處理,減少了用戶使用中的麻煩。學生成績管理系統(tǒng)系統(tǒng)功能總體結構圖:圖3-1生成績管理系統(tǒng)系統(tǒng)功能總體結構圖3.3數據流圖圖3-2數據流頂層圖圖3-3數據流細化圖圖3-4學生成績管理一層數據流圖圖3-5學生成績管理二層數據流圖3.4用例1.主要參與者及用例表表3-1學生成績管理系統(tǒng)用例表2.學生成績系統(tǒng)用例圖圖3-6學生成績系統(tǒng)用例圖3.類圖圖3-7類圖的初步設計4.總體設計4.1系統(tǒng)設計思想總模塊軟件結構圖4-1學生成績管理系統(tǒng)主模塊根據上面的需求分析,可以將這個系統(tǒng)分為以下模塊:學生成績查詢模塊和學生成績管理模塊圖4-2學生成績管理系統(tǒng)層次圖4.2數據庫設計1.學生成績管理概念模型(E—R圖):圖4-3成績管理系統(tǒng)E-R圖2.數據字典字段號字段名字節(jié)長度數據類型說明1用戶名6Char主碼2密碼6Char3身份6Char表4-1登錄權限表結構表字段號屬性名字節(jié)長度數據類型是否允許空值說明1學號7Char否主碼2姓名8Char是3性別4Char是4班級5Char是表4-2學生信息表結構字段號屬性名字節(jié)長度數據類型是否允許空值說明1課程名8Char是2課程號8Char否主碼表4-3課程信息表結構字段號屬性名字節(jié)長度數據類型是否允許空值說明1課程號8Char否主碼2學號8Char否主碼3學期8Int否主碼4成績4Float是0~100表4-4成績信息表結構4.3接口設計1.外部接口與用戶界面在用戶界面部分,根據需求分析的結果,用戶需要一個用戶友善界面。在界面設計上,應做到簡單明了,易于操作,并且要注意到界面的布局,應突出的顯示重要以及出錯信息。外觀上也要做到合理化,考慮到用戶多對WINDOW風格較熟悉,應盡量向這一方向靠攏。在設計語言上,已決定使用VisualC++進行編程??偟膩碚f,系統(tǒng)的用戶界面應作到可靠性、簡單性、易學習和使用。2.內部接口內部接口方面,各模塊之間采用函數調用、參數傳遞、返回值的方式進行信息傳遞。具體參數的結構將在下面數據結構設計的內容中說明。接口傳遞的信息將是以數據結構封裝了的數據,以參數傳遞或返回值的形式在各模塊間傳輸。5.詳細設計5.1功能模塊學生成績管理系統(tǒng)主要以管理學生成績信息為目的,設置了嚴密的權限管理。主要功能包括用戶管理、查詢管理、成績錄入管理、更新管理、統(tǒng)計管理、注冊管理、密碼管理等。用戶管理模塊:設置了權限管理功能,學生用戶只能查詢成績信息,管理員可以完成其他操作。查詢管理模塊:包括查詢成績和基本信息。可以顯示單獨一條記錄,也可以顯示所有信息。成績錄入管理模塊:每次考試結束,管理員錄入學生成績信息。更新管理模塊:當有需要時,管理員可以進行成績和信息的刪除和修改操作。統(tǒng)計管理模塊:統(tǒng)計學生人數,缺考人數,平均成績和不及格人數。注冊管理模塊:設置了驗證功能。輸入用戶名后可檢驗是否可以使用,輸入密碼必須為6位。密碼管理模塊:用戶可以根據需求修改密碼。5.2系統(tǒng)主程序流程圖圖5-1主程序流程圖5.3登陸模塊的設計功能:設置了權限管理,登陸成功后,對各個模塊進行操作。操作:歡迎窗體消失后自動生成該窗體,輸入用戶名和密碼,選擇登陸模式。圖5-2登陸模塊控制流程圖5.4學生成績查詢設計功能:查詢、瀏覽學生信息。可以查詢單一記錄,也可以瀏覽所有信息。操作:單擊顯示即可瀏覽所有學生信息或成績信息,輸入學號點擊查詢可查詢單獨記錄。圖5-3學生成績查詢模塊流程圖5.5學生成績管理管理設計(1)學生成績錄入功能:設置權限管理,管理人員可以錄入學生成績和信息。操作:在文本框處填寫信息后點擊添加實現錄入成績功能,輸入學號點擊實現成績錄入功能。(2)學生成績修改。功能:修改學生成績信息。操作:填寫信息后,輸入新的成績,點擊修改。(3)成績統(tǒng)計功能:統(tǒng)計學生人數,考試人數,不及格人數,優(yōu)秀人數,計算平均成績。操作:分別輸入根元素統(tǒng)計學生人數和成績人數,點擊不及格人數、平均成績、優(yōu)秀人數會連接相應的計算窗體,點擊確定進行計算。圖5-4學生成績管理流程圖5.6學生成績管理系統(tǒng)時序圖圖5-5學生成績管理系統(tǒng)順序圖6.編碼實現圖6-1主界面關鍵代碼如下:intPrintMainMenu(){ intiInput; do { cout<<"歡迎使用成績管理系統(tǒng)!"<<endl; cout<<"1)學生成績查詢;"<<endl; cout<<"2)學生成績管理;"<<endl; cout<<"0)退出。"<<endl; cout<<"請選擇(0-2):;"<<endl; cin>>iInput; }while(iInput>2||iInput<0); returniInput;}intPrintManage(){ intiInput; do { cout<<"【管理模塊】"<<endl; cout<<"1)學生成績單錄入;"<<endl; cout<<"2)學生成績修改;"<<endl; cout<<"3)學生成績刪除;"<<endl; cout<<"0)退出。"<<endl; cout<<"請選擇(0-3):;"<<endl; cin>>iInput; }while(iInput>3||iInput<0); returniInput; }intPrintStatis(){ intiInput; do { cout<<"【管理模塊】"<<endl; cout<<"1)學生人數;"<<endl; cout<<"2)缺考人數;"<<endl; cout<<"3)平均成績;"<<endl; cout<<"4)不及格人數;"<<endl; cout<<"0)退出。"<<endl; cout<<"請選擇(0-4):;"<<endl; cin>>iInput; }while(iInput>4||iInput<0); returniInput;}7.測試運行7.1測試用例設計測試對象“學生成績管理”功能用例目的測試學生成績管理系統(tǒng)的功能是否正確實現輸入/動作過程結果選擇教師登錄,輸入賬號,輸入密碼進入學生成績查詢按學號查詢顯示學生成績信息進入學生成績管理系統(tǒng)學生成績錄入錄入成功進入學生成績管理學生成績修改修改成功進入學生成績管理學生成績刪除刪除成功進入學生統(tǒng)計模塊成績平均分成功顯示所有學生成績的平均分表7-1測試用例表7.2運行測試圖7-1運行測試圖圖7-2運行測試圖圖7-3運行測試圖評價與修訂在本次課程設計中,經歷了無數次調試失敗,修改,再調試的過程。本系統(tǒng)基本實現了關鍵的功能模塊,在功能上基本滿足了用戶的需求,但是由于時間較緊,有些模塊以及整個系統(tǒng)還有許多不完善的地方,如界面不太美觀,操作性不太友好等。學習和實踐了分析和設計軟件系統(tǒng)的各種知識,包括結構化分析設計、面向對象的系統(tǒng)分析與設計,編碼和測試方面的知識。毋庸置疑,在實踐的過程中也遇到了一些問題,但是通過我自己的努力,以及查找資料,包括同學的幫助,很大限度的提高了自己的自身學習能力,自我獨立解決問題的能力。這次課程設計是我第一次獨立完成的,但還是得到了大家的幫助,我很開心。在今后的學習生活中,我會將這種精神繼續(xù)發(fā)揚。并且更加努力,認真學習,將在這過程中得到的經驗與同伴分享,享受這個學習過程9.設計體會通過此次課設讓我明白了最重要的就是做好課設的預習,認真的研究自己的題目。首先,開始對老師的講解藥認真去聽,因為只有都明白了,做起設計就會事半功倍,如果沒弄明白,就迷迷糊糊的去選題目做設計,到頭來一點收獲也沒有。我在最開始自己選擇題目時候,由于沒有認真聽老師講解而是盲目去百度然后按照網上資料的思路設計出了一個自己都沒有弄明白的代碼,最后代碼漏洞百出,同樣還有很多功能沒有實現。于是我只能自己去一些編程網站看一些大咖的貼子其中就有很多帖子對我設計很有幫助,然后我慢慢的先編寫界面,慢慢其他功能都完善了,最后系統(tǒng)按照理想的設計思路運行并得到了正確的結果。同時還需要數據庫知識,對于我上學期數據庫學的比較好,所以數據庫方面不是很難解決,唯一很難的就是無法實現將C++與數據庫結合起來。最終完成了設計我這時候的心情是十分激動地,靠自己勞動努力得到的東西就是不一樣。當然,還得感謝給予幫助的同學和老師,這是我們共同努力的結果!其實開始選題時比較迷茫,因為從來沒有獨立完成過一個系統(tǒng)的開發(fā)。確定課題后,就去詢問同學,先看看他們是怎么做的。一步一步,慢慢地跟上了步伐。在開發(fā)過程中又遇到很多不懂的技術,查閱了很多的文獻。在不斷的解決問題中我取得了很大的進步。在老師細心指導下,在同學的無私幫助下終于順利完成了此次設計。參考文獻[1]張林等《軟件工程》中國鐵道出版社2009年12月[2]宣振國.基于Mysql的數據庫集群設計與實現[D].北京:北京郵電大學[3]譚浩強《C程序設計》清華大學出版社2010年6月1日[4]王立峰,延偉東,章華軟件工程理論與實踐北京清華大學出版社,2003年[5]刁成嘉,UML系統(tǒng)建模與分析設計,北京機械工業(yè)出版社,2007.附錄#include"execsql.h"#include"ModifyOp.h"#include<iostream>usingnamespacestd;//登陸-1失敗,1老師2教師intLogIn();//菜單intPrintMainMenu();intPrintManageScore();intPrintLogIn();intPrintManage();intPrintStatis();intPrintQueryMenu();//功能函數intQueryScore();//成績查詢intManageScore();//成績管理intManageLogIn();//登陸模塊intManageMng();//管理模塊intManageStatis();//統(tǒng)計模塊intQueryUser();intModifyPassWord();intRegister();intRecordScoreList();//錄入成績單intModifyScoreList();//修改成績單intDeleteScoreList();//刪除成績單intStaticStuNum();intStaticAbsentNum();intStaticAveScore();intStaticFailNum();voidmain(){ ConnectDatabase(); //登錄模塊 intiRet=LogIn(); if(iRet!=1&&iRet!=2) { return; } intiRole=iRet;//角色 //主菜單 intiSel=1; while(iSel) { iSel=PrintMainMenu(); if(iSel==2&&iRole==2) { cout<<"您的角色是學生,沒有權限做此類操作!"<<endl; continue; } switch(iSel) { case1:QueryScore();break;//學生成績查詢 case2:ManageScore();break;//學生成績管理 case0: default:return; } } system("pause");}intLogIn(){ cout<<"歡迎使用成績管理系統(tǒng)!"<<endl; cout<<"UserName:"<<endl; stringuserName; cin>>userName; cout<<"PassWord:"<<endl; stringpassWord; cin>>passWord; //嘗試用教師身份登陸 vector<CModifyOp>objList; CModifyOp::FetchBy("Permissions","USERNAME",userName,objList); if(objList.size()>0) { if(objList[0].get("PASSWORD")==passWord) { if(objList[0].get("ROLE")=="teacher") { return1; } elseif(objList[0].get("ROLE")=="student") { return2; } } } return-1;}#if1//菜單intPrintMainMenu(){ intiInput; do { cout<<"歡迎使用成績管理系統(tǒng)!"<<endl; cout<<"1)學生成績查詢;"<<endl; cout<<"2)學生成績管理;"<<endl; cout<<"0)退出。"<<endl; cout<<"請選擇(0-2):;"<<endl; cin>>iInput; }while(iInput>2||iInput<0); returniInput;}intPrintManageScore(){ intiInput; do { cout<<"【成績管理】"<<endl; cout<<"1)登陸模塊;"<<endl; cout<<"2)管理模塊;"<<endl; cout<<"3)統(tǒng)計模塊;"<<endl; cout<<"0)退出。"<<endl; cout<<"請選擇(0-3):;"<<endl; cin>>iInput; }while(iInput>3||iInput<0); returniInput;}intPrintLogIn(){ intiInput; do { cout<<"【登陸模塊】"<<endl; cout<<"1)用戶管理;"<<endl; cout<<"2)密碼管理;"<<endl; cout<<"3)注冊管理;"<<endl; cout<<"0)退出。"<<endl; cout<<"請選擇(0-3):;"<<endl; cin>>iInput; }while(iInput>3||iInput<0); returniInput;}intPrintManage(){ intiInput; do { cout<<"【管理模塊】"<<endl; cout<<"1)學生成績單錄入;"<<endl; cout<<"2)學生成績修改;"<<endl; cout<<"3)學生成績刪除;"<<endl; cout<<"0)退出。"<<endl; cout<<"請選擇(0-3):;"<<endl; cin>>iInput; }while(iInput>3||iInput<0); returniInput; }intPrintStatis(){ intiInput; do { cout<<"【管理模塊】"<<endl; cout<<"1)學生人數;"<<endl; cout<<"2)缺考人數;"<<endl; cout<<"3)平均成績;"<<endl; cout<<"4)不及格人數;"<<endl; cout<<"0)退出。"<<endl; cout<<"請選擇(0-4):;"<<endl; cin>>iInput; }while(iInput>4||iInput<0); returniInput;}intPrintQueryMenu(){ intiInput; do { cout<<"【查詢方式】"<<endl; cout<<"1)查詢全部;"<<endl; cout<<"2)按CODE查詢;"<<endl; cout<<"3)按NAME查詢;"<<endl; cout<<"0)退出。"<<endl; cout<<"請選擇(0-3):;"<<endl; cin>>iInput; }while(iInput>3||iInput<0); returniInput;}#endif#if1//處理intQueryScore(){ intiMothed=PrintQueryMenu(); vector<CModifyOp>objStuList; stringstrInput; if(iMothed==1) { CModifyOp::FetchAll("Student",objStuList); } elseif(iMothed==2) { cout<<"請輸入學生CODE:"<<endl; cin>>strInput; CModifyOp::FetchBy("Student","CODE",strInput,objStuList); } elseif(iMothed==3) { cout<<"請輸入學生姓名:"<<endl; cin>>strInput; CModifyOp::FetchBy("Student","NAME",strInput,objStuList); } else { return0; } if(objStuList.size()>0) { vector<string>keyList=objStuList[0].getKeyList(); for(inti=0;i<objStuList.size();++i) { cout<<"學生信息:"<<endl; for(intj=0;j<keyList.size();++j) { cout<<keyList[j]<<"\t"; } cout<<endl; for(intj=0;j<keyList.size();++j) { cout<<objStuList[i].get(keyList[j])<<"\t"; } cout<<endl; vector<CModifyOp>objScoreList; CModifyOp::FetchBy("Scores","CODE",objStuList[i].get("CODE"),objScoreList); if(objScoreList.size()>0) { for(intj=0;j<objScoreList.size();++j) { vector<CModifyOp>objCourseList; CModifyOp::FetchBy("Courses","CODE",objScoreList[j].get("COURSECODE"),objCourseList); if(objScoreList.size()>0) { cout<<objScoreList[j].get("COURSECODE")<<"\t"<<objCourseList[0].get("NAME")<<"\t"<<objScoreList[j].get("GOAL")<<endl; } } } else { cout<<"無成績信息!"<<endl; } } } else { cout<<"學生"<<strInput<<"未找到!"<<endl; } return0;}intManageScore(){ //成績管理 intiSel=1; while(iSel) { iSel=PrintManageScore(); switch(iSel) { case1:ManageLogIn();break;//登陸模塊 case2:ManageMng();break;//管理模塊 case3:ManageStatis();break;//統(tǒng)計模塊 case0: default:return0; } } return0;}intManageLogIn(){ //登陸模塊 intiSel=1; while(iSel) { iSel=PrintLogIn(); switch(iSel) { case1:QueryUser();break; case2:ModifyPassWord();break; case3:Register();break; case0: default:return0; } } return0;}intManageMng(){ //管理模塊 intiSel=PrintManage(); switch(iSel) { case1:RecordScoreList();break; case2:ModifyScoreList();break; case3:DeleteScoreList();break; case0: default:return0; } return0;}intManageStatis(){ //統(tǒng)計模塊 intiSel=PrintStatis(); switch(iSel) { case1:StaticStuNum();break; case2:StaticAbsentNum();break; case3:StaticAveScore();break; case4:StaticFailNum();break; case0: default:return0; } return0;}intQueryUser(){ vector<CModifyOp>objList; CModifyOp::FetchAll("Permissions",objList); if(objList.size()>0) { cout<<"USERNAME ROLE"<<endl; for(inti=0;i<objList.size();++i) { cout<<objList[i].get("USERNAME")<<" "<<objList[i].get("ROLE")<<endl; } } else { cout<<"您輸入的用戶名不存在!"<<endl; } return0;}intModifyPassWord(){ //修改用戶密碼 cout<<"請輸入用戶名:"<<endl; stringuserName; cin>>userName; vector<CModifyOp>objList; CModifyOp::FetchBy("Permissions","USERNAME",userName,objList); if(objList.size()>0) { cout<<"USERNAME ROLE"<<endl; cout<<objList[0].get("USERNAME")<<" "<<objList[0].get("ROLE")<<endl; } else { cout<<"您輸入的用戶名不存在!"<<endl; } cout<<"請輸入修改后的密碼:"<<endl; stringpassWord; cin>>passWord; objList[0].set("PASSWORD",passWord); if(objList[0].store(STORE_MODIFY)) { cout<<"密碼修改成功!"<<endl; } else { cout<<"密碼修改失??!"<<endl; } return0;}intRegister(){ //注冊用戶 cout<<"請輸入用戶名:"<<endl; stringuserName; cin>>userName; vector<CModifyOp>objList; CModifyOp::FetchBy("Permissions","USERNAME",userName,objList); if(objList.size()>0) { cout<<"您輸入的用戶名已存在!"<<endl; return0; } cout<<"請輸入密碼:"<<endl; stringpassWord; cin>>passWord; cout<<"請輸入角色(teacher,student):"<<endl; stringrole; cin>>role; CModifyOpop("Permissions"); op.set("USERNAME",userName); op.set("PASSWORD",passWord); op.set("ROLE",role); if(op.store(STORE_INSERT)) { cout<<"注冊成功!"<<endl; } else { cout<<"注冊失??!"<<endl; } return0;}intRecordScoreList(){ stringstrInput; //是否錄入課程 vector<CModifyOp>objCourseList; CModifyOp::FetchAll("Courses",objCourseList); cout<<"現有如下課程("<<objCourseList.size()<<"):"<<endl; if(objCourseList.size()>0) { vector<string>keyList=objCourseList[0].getKeyList(); cout<<keyList[0]<<"\t"<<keyList[1]<<endl; for(inti=0;i<objCourseList.size();++i) { for(intj=0;j<keyList.size();++j) { cout<<objCourseList[i].get(keyList[j])<<"\t"; } cout<<endl; } } do { cout<<"是否新錄入課程?(Y/N)"<<endl; cin>>strInput; if(strInput=="Y"||strInput=="y") { vector<string>keyList; keyList.push_back("CODE"); keyList.push_back("NAME"); CModifyOpop("Courses"); op.setKeyList(keyList); for(inti=0;i<keyList.size();++i) { cout<<"請輸入"<<keyList[i]<<":"<<endl; stringstemp; cin>>stemp; op.set(keyList[i],stemp); } if(op.store(STORE_INSERT)) { cout<<"錄入課程成功!"<<endl; } else { cout<<"錄入課程失??!"<<endl; } } }while(strInput=="Y"||strInput=="y"); //是否錄入學生 vector<CModifyOp>objStuList; CModifyOp::FetchAll("Student",objStuList); cout<<"現有如下學生("<<objStuList.size()<<"):"<<endl; if(objStuList.size()>0) { vector<string>keyList=objStuList[0].getKeyList(); cout<<keyList[0]<<"\t"<<keyList[1]<<endl; for(inti=0;i<objStuList.size();++i) { for(intj=0;j<keyList.size();++j) { cout<<objStuList[i].get(keyList[j])<<"\t"; } cout<<endl; } } do { cout<<"是否新錄入學生?(Y/N)"<<endl; cin>>strInput; if(strInput=="Y"||strInput=="y") { vector<string>keyList; keyList.push_back("CODE"); keyList.push_back("NAME"); keyList.push_back("SEX"); keyList.push_back("CLASS"); CModifyOpop("Student"); op.setKeyList(keyList); for(inti=0;i<keyList.size();++i) { cout<<"請輸入"<<keyList[i]<<":"<<endl; stringstemp; cin>>stemp; op.set(keyList[i],stemp); } if(op.store(STORE_INSERT)) { cout<<"錄入學生成功!"<<endl; //選修課程 cout<<"現有如下課程("<<objCourseList.size()<<"):"<<endl; if(objCourseList.size()>0) { vector<string>keyList=objCourseList[0].getKeyList(); cout<<keyList[0]<<"\t"<<keyList[1]<<endl; for(inti=0;i<objCourseList.size();++i) { for(intj=0;j<keyList.size();++j) { cout<<objCourseList[i].get(keyList[j])<<"\t"; } cout<<endl; } } while(true) { cout<<"請輸入選修課編碼(輸入exit結束選擇):"<<endl; stringstemp; cin>>stemp; if(stemp=="exit") { break; } //查看選修課是否存在 boolisCourseExist=false; for(inti=0;i<objCourseList.size();++i) { if(stemp==objCourseList[i].get("CODE")) { isCourseExist=true; break; } } if(!isCourseExist) { cout<<"您輸入的編碼不存在,請重新輸入!"<<endl; continue; } CModifyOpn2m("Student_N2M"); n2m.set("FROMCODE",op.get("CODE")); n2m.set("TOCODE",stemp); n2m.set("LINKNAME","course"); if(n2m.store(STORE_INSERT)) { cout<<"添加選修課成功!"<<endl; } else { cout<<"添加選修課失??!"<<endl; } } } else { cout<<"錄入課程失??!"<<endl; } } }while(strInput=="Y"||strInput=="y"); //錄入成績(按學生錄入成績) objStuList.clear(); CModifyOp::FetchAll("Student",objStuList); vector<CModifyOp>objStuN2MList; CModifyOp::FetchAll("Student_N2M",objStuN2MList); if(objStuList.size()>0) { cout<<"請輸入學期:"<<endl; stringterm; cin>>term; vector<string>keyList=objStuList[0].getKeyList(); for(inti=0;i<objStuList.size();++i) { cout<<"學生信息:"<<endl; for(intj=0;j<keyList.size();++j) { cout<<objStuList[i].get(keyList[j])<<"\t"; } cout<<endl; cout<<"錄入成績:"<<endl; for(intj=0;j<objStuN2MList.size();++j) { if(objStuN2MList[j].get("LINKNAME")=="course" &&objStuN2MList[j].get("FROMCODE")==objStuList[i].get("CODE")) { stringcourseCode=objStuN2MList[j].get("TOCODE"); objCourseList.clear(); CModifyOp::FetchBy("Courses","CODE",courseCode,objCourseList); if(objCourseList.size()>0) { CModifyOpsc("Scores"); sc.set("COURSECODE",courseCode); sc.set("CODE",objStuList[i].get("CODE")); sc.set("TERM",term); vector<string>keyList; keyList.push_back("CODE"); keyList.push_back("COURSECODE"); keyList.push_back("TERM"); sc.setKeyList(keyList); vector<CModifyOp>scList; CModifyOp::FetchBy(sc,scList); if(scList.size()>0) { continue; } cout<<"錄入"<<objCourseList[0].get("NAME")<<"成績:"<<endl; stringtmp; cout<<"得分:"<<endl; cin>>tmp; sc.set("GOAL",tmp); if(sc.store(STORE_INSERT)) { cout<<"錄入成績成功!"<<endl; } else { cout<<"錄入成績失??!"<<endl; } } } } } } else { cout<<"學生個數為0,請先錄入學生,再錄入成績!"<<endl; } return0;}intModifyScoreList(){ stringstrInput; cout<<"請輸入學生姓名:"<<endl; cin>>strInput; vector<CModifyOp>objStuList; CModifyOp::FetchBy("Student","NAME",strInput,objStuList); if(objStuList.size()>0) { cout<<"學生信息:"<<endl; vector<string>keyList=objStuList[0].getKeyList(); for(inti=0;i<objStuList.size();++i) { for(intj=0;j<keyList.size();++j) { cout<<keyList[j]<<"\t"; } cout<<endl; for(intj=0;j<keyList.size();++j) { cout<<objStuList[i].get(keyList[j])<<"\t"; } cout<<endl; vector<CModifyOp>objScoreList; CModifyOp::FetchBy("Scores","CODE",objStuList[i].get("CODE"),objScoreList); for(intj=0;j<objScoreList.size();++j) { vector<CModifyOp>objCourseList; CModifyOp::FetchBy("Courses","CODE",objScoreList[j].get("COURSECODE"),objCourseList); if(objScoreList.size()>0) { cout<<objScoreList[j].get("COURSECODE")<<"\t"<<objCourseList[0].get("NAME")<<"\t"<<objScoreList[j].get("GOAL")<<endl; } } cout<<"請輸入修改成績的課程CODE:"<<endl; cin>>strInput; for(intj=0;j<objScoreList.size();++j) { if(strInput==objScoreList[j].get("COURSECODE")) { cout<<"請輸入修改后的成績:"<<endl; cin>>strInput; objScoreList[j].set("GOAL",strInput); if(objScoreList[j].store(STORE_MODIFY)) { cout<<"修改成績成功!"<<endl; } else { cout<<"修改成績失??!"<<endl; } } } } } else { cout<<"學生"<<strInput<<"未找到!"<<endl; } return0;}intDeleteScoreList(){ stringstrInput; cout<<"請輸入學生姓名:"<<endl; cin>>strInput; vector<CModifyOp>objStuList; CModifyOp::FetchBy("Student","NAME",strInput,objStuList); if(objStuList.size()>0) { cout<<"學生信息:"<<endl; vector<string>keyList=objStuList[0].getKeyList(); for(inti=0;i<objStuList.size();++i) { for(intj=0;j<keyList.size();++j) { cout<<keyList[j]<<"\t"; } cout<<endl; for(intj=0;j<keyList.size();++j) { cout<<objStuList[i].get(keyList[j])<<"\t"; } cout<<endl; vector<CModifyOp>objScoreList; CModifyOp::FetchBy("Scores","CODE",objStuList[i].get("CODE"),objScoreList); for(intj=0;j<objScoreList.size();++j) { vector<CModifyOp>objCourseList; CModifyOp::FetchBy("Courses","CODE",objScoreList[j].get("COURSECODE"),objCourseList); if(objScoreList.size()>0) { cout<<objScoreList[j].get("COURSECODE")<<"\t"<<objCourseList[0].get("NAME")<<"\t"<<objScoreList[j].get("GOAL")<<endl; } } cout<<"請輸入刪除成績的課程CODE:"<<endl; cin>>strInput; for(intj=0;j<objScoreList.size();++j) { if(strInput==objScoreList[j].get("C

溫馨提示

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

評論

0/150

提交評論