高級數(shù)據(jù)庫技術(shù)課程設(shè)計報告_第1頁
高級數(shù)據(jù)庫技術(shù)課程設(shè)計報告_第2頁
高級數(shù)據(jù)庫技術(shù)課程設(shè)計報告_第3頁
高級數(shù)據(jù)庫技術(shù)課程設(shè)計報告_第4頁
高級數(shù)據(jù)庫技術(shù)課程設(shè)計報告_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目錄1. 設(shè)計目的和任務(wù)12.開發(fā)環(huán)境12.1硬件環(huán)境12.2軟件環(huán)境13.設(shè)計題目13.1題目名稱13.2題目詳細描述13.3功能要求24.相關(guān)技術(shù)及知識點34.1 SqlConnection對象34.2 SqlCommand對象34.3 SqlDataAdapter對象44.4 DataTable對象44.5 DataSet對象55.設(shè)計與實現(xiàn)65.1登錄界面65.2教師管理界面75.3管理員管理界面125.4學(xué)生考試界面146.總結(jié)187.參考資料1918 / 20文檔可自由編輯打印1. 設(shè)計目的和任務(wù) 綜合運用 相關(guān)知識,設(shè)計一個具有實用價值的學(xué)生考試管理系統(tǒng)。 (1)鞏固和加深對本課

2、程基本知識的理解和掌握; (2)掌握C#編程和程序調(diào)試的基本技能; (3)掌握設(shè)計應(yīng)用軟件的基本思路和方法; (4)提高運用解決實際問題的能力; (5)培養(yǎng)撰寫設(shè)計報告的能力。 2.開發(fā)環(huán)境2.1硬件環(huán)境筆記本電腦硬件概要CPU 英特爾 Genuine Intel(R) CPU T2130 1.86GHz主板Wistron - 英特爾 945PM (Calistoga-PM) + ICH7-M/U內(nèi)存金士頓 2G DDR2-SDRAM 666 MHz 顯卡nVIDIA GeForce Go 7200 (G72)主硬盤希捷 120GB 聲卡英特爾 82801GB ICH7 - High Defi

3、nition Audio B0網(wǎng)卡英特爾 PRO/Wireless 3945ABG Network Connection (HP - RoW)2.2軟件環(huán)境Microsoft Windows XP操作系統(tǒng);Microsoft SQL Server 2005;Microsoft Visual Studio 2005;3.設(shè)計題目3.1題目名稱學(xué)生考試管理系統(tǒng)3.2題目詳細描述1、登錄界面 2、新用戶注冊 3、教師管理界面 4、管理員管理界面 5、學(xué)生在線考試 3.3功能要求登錄界面 功能: 1) 用戶對應(yīng)相應(yīng)的權(quán)限進行登錄,分教員、學(xué)生、管理員。登錄后根據(jù)選擇的權(quán)限進入相應(yīng)的界面; 2) 輸入用

4、戶名框非空,密碼框非空,權(quán)限選擇判斷; 3) 新學(xué)員用戶注冊。注冊后需管理員激活才能登錄。教師管理界面 功能(按菜單項說明): 1) 試題管理,子菜單如下: 增加試題; 查詢試題:按科目查詢試題; 試題列表:按難度查詢試題列表,并可增加、修改試題。 2) 考試管理,子菜單如下: 生成試卷; 試卷管理:查看試卷信息、激活/取消試卷。 3) 成績管理,按試卷名查尋成績。要算出平均分。管理員管理界面功能(按菜單項說明): 1) 用戶管理,子菜單如下: 新建用戶:新建學(xué)員用戶,新建教員用戶。 查詢及修改學(xué)員。 用戶信息列表,包括查詢以及教員學(xué)員信息 2) 題庫管理,管理試題庫 學(xué)生在線考試 1) 維護

5、個人信息 對個人信息進行查詢, 修改2)在線答題。功能:可以選擇已激活試卷答題。 在線評分。 保存考試成績可供教師查詢。4.相關(guān)技術(shù)及知識點提供了多種對象模型,比較典型的以下有五種,它們?nèi)繗w類System.Data.SqlClient名稱空間下。4.1 SqlConnection對象使用SqlConnection對象與SQL Server進行連接。連接字符串的常用形式有兩種:1.使用Windows集成安全身份認證, 例如:string connectionString ="IntegratedSecurity=SSPI;Database=MySchool.mdf;Server=lo

6、calhost;"2.在連接字符串中指定服務(wù)器名、用戶id、用戶口令、數(shù)據(jù)庫名等信息。 例如:string connectionString = "server=localhost; uid=sa; pwd=123; database=MySchool.mdf"然后通過連接字符串直接創(chuàng)建SqlConnection對象,如SqlConnection conn = new SqlConnection(connectionString);4.2 SqlCommand對象 在中,有兩種操作數(shù)據(jù)庫的方式:1.無連接的方式;2.保持連接的方式。不論哪種都可以通過SqlComm

7、and對象提供的方法傳遞對數(shù)據(jù)庫操作的命令,并返回命令執(zhí)行結(jié)果。在保持連接的方式下操作數(shù)據(jù)庫的一般步驟為:1.創(chuàng)建SqlConnection的實例;2.創(chuàng)建SqlCommand的實例;3.打開連接;4.執(zhí)行命令;5.關(guān)閉連接。SqlCommand對象提供了多種完成對數(shù)據(jù)庫操作的方法。常用有:1.ExecuteNonQuery該方法執(zhí)行SQL語句的結(jié)果,但不返回命令執(zhí)行的表數(shù)據(jù),僅返回操作所影響的行數(shù)。2.ExecuteReaderExecuteReader方法提供了只向前的、順序的快速讀取數(shù)據(jù)庫中數(shù)據(jù)的方法。3.ExecuteScaler()該方法用于執(zhí)行SELECT查詢,得到的返回結(jié)果為一個

8、值的情況,比如使用count函數(shù)求表中記錄個數(shù)或者使用sum函數(shù)求和等。4.3 SqlDataAdapter對象 SqlDataAdapter對象通過無連接的方式完成數(shù)據(jù)庫和本地DataSet之間的交互。使用這種方式操作數(shù)據(jù)庫的一般步驟為:1.創(chuàng)建SqlConnection的實例;2.創(chuàng)建SqlDataAdapter的實例,需要的話,根據(jù)select語句生成其他SQL語句;3.創(chuàng)建DataSet的實例;4.使用Fill方法將數(shù)據(jù)庫中的表填充到DataSet的表中;5.利用DataGridView或者其他控件對象編輯或顯示數(shù)據(jù);6.需要的話,使用Update方法更新數(shù)據(jù)庫。SqlDataAdap

9、ter對象通過SelectCommand、InsertCommand、UpdateCommand和DeleteCommand屬性為后臺數(shù)據(jù)庫提供對應(yīng)的操作命令,并傳遞需要的參數(shù)。一般情況下,只需要提供SELECT語句和連接字符串創(chuàng)建SqlDataAdapter對象,然后利用SqlCommandBuilder對象生成InsertCommand、UpdateCommand和DeleteCommand屬性。4.4 DataTable對象 可以在與數(shù)據(jù)庫斷開連接的方式下通過DataSet或DataTable對象進行數(shù)據(jù)處理,當(dāng)需要更新數(shù)據(jù)時才重新與數(shù)據(jù)源進行連接,并更新數(shù)據(jù)源。DataTable對象表

10、示保存在本機內(nèi)存中的表,它提供了對表中行列數(shù)據(jù)對象的各種操作??梢灾苯訉?shù)據(jù)從數(shù)據(jù)庫填充到DataTable對象中,也可以將DataTable對象添加到現(xiàn)有的DataSet對象中。在斷開連接的方式下,DataSet對象提供了和關(guān)系數(shù)據(jù)庫一樣的關(guān)系數(shù)據(jù)模型,代碼中可以直接訪問DataSet對象中的DataTable對象,也可以添加、刪除DataTable對象。1. 創(chuàng)建DataTable對象可以通過以下兩種方式創(chuàng)建DataTable對象:1) 通過DataTable類的構(gòu)造函數(shù)創(chuàng)建DataTable對象,例如:DataTable table = new DataTable();2) 通過Data

11、Set的Tables對象的Add方法創(chuàng)建DataTable對象,例如:DataSet dataset = new DataSet();DataTable table = dataset.Tables.Add("MyTableName");2. 在DataTable對象中添加列在DataTable對象中添加列的最常用的方法是通過DataTable對象的Column屬性中的Add方法。添加后的每一列都是一個DataColumn對象。3. 設(shè)置DataTable對象的主鍵關(guān)系數(shù)據(jù)庫中的表一般都有一個主鍵,用來惟一標(biāo)識表中的每一行記錄。通過DataTable對象的PrimaryKe

12、y屬性可以設(shè)置Datatable的主鍵。主鍵可以是一個或者多個DataColumn對象組成的數(shù)組。例如:DataColumn key = new DataColumn1;/dt是一個DataTable對象key0 = dt.Columns0;dt.PrimaryKey = key;4. 在DataTable對象中創(chuàng)建行DataTable對象的每一行都是一個DataRow對象,所以創(chuàng)建行時可以先利用DataTable對象的NewRow方法創(chuàng)建一個DataRow對象,并設(shè)置新行中各列的數(shù)據(jù),然后利用Add方法將DataRow對象添加到表中5. 將SQL Server數(shù)據(jù)庫中的表填充到DataTab

13、le中除了可以直接創(chuàng)建DataTable對象的行列信息外,也可以通過DateAdapter對象的Fill方法將SQL Server數(shù)據(jù)庫中的表填充到DataTable對象中。4.5 DataSet對象1. 創(chuàng)建DataSet對象使用創(chuàng)建的DataSet對象可以完成各種數(shù)據(jù)操作,利用向?qū)傻臄?shù)據(jù)庫數(shù)據(jù)源是一個強類型的DataSet以及一對或多對強類型的DataTable和TableAdapter的組合。類型化的DataSet是一個生成的類,是從.NET Framework的一般DataSet類衍生來的,但提供了已定義的架構(gòu)以及特定于該架構(gòu)的屬性和方法。同時,對于DataSet中的每個表,還生成

14、了特定于該DataSet的附加衍生類,而且每個類都為相關(guān)的表提供了特定的架構(gòu)、屬性和方法。當(dāng)然,也可以直接創(chuàng)建一般的DataSet對象,例如:DataSet myDataset = new DataSet();2. 填充DataSet對象創(chuàng)建DataSet后,就可以使用SqlDataAdapter對象把數(shù)據(jù)導(dǎo)入到DataSet對象中,比如通過Fill方法將數(shù)據(jù)填充到DataSet中的某個表中。5.設(shè)計與實現(xiàn)(包括每個設(shè)計點的文字描述,圖表,關(guān)鍵代碼) (該說明在最終報告里面要刪除!)5.1登錄界面在登錄界面(圖5-1)用戶對應(yīng)相應(yīng)的權(quán)限選擇用戶類型進行登錄,分教員、學(xué)生、管理員。登錄后根據(jù)選擇

15、的權(quán)限進入相應(yīng)的界面。輸入用戶名框非空,密碼框非空,權(quán)限選擇判斷;登錄界面還有新用戶注冊,同樣是選擇不同用戶類型進行注冊。注冊后需管理員激活才能登錄。還有一個就是找回密碼,用戶通過輸入用戶名和姓名等信息找回密碼。 圖5-1登錄界面代碼: if (ValidateInput() / 驗證輸入成功 string message = "" / 驗證輸入的密碼 if (loginBll.ValidateUser(txtLoginId.Text.Trim(), txtLoginPwd.Text, cboLoginType.Text, ref message) / 記錄登錄用戶名和登錄

16、類型 UserHelper.loginId = txtLoginId.Text; UserHelper.loginType = cboLoginType.Text; if (cboLoginType.Text = "教師") / 創(chuàng)建教員主窗體對象 TeacherForm teacherForm = new TeacherForm(); / 顯示窗體 teacherForm.Show(); else if (cboLoginType.Text = "學(xué)生") StudentForm studentForm = new StudentForm(); stu

17、dentForm.Show(); else AdminForm adminForm = new AdminForm(); adminForm.Show(); / 登錄窗體隱藏 this.Visible = false; 5.2教師管理界面在教師管理界面(圖5-2)中有以下菜單和按鈕:*選擇題目(圖5-3):右鍵選擇題目加入到新建的試卷中;*成績管理(圖5-4)選擇不同的試卷進行查詢,讀取數(shù)據(jù)到DataSet,然后用DataSet中數(shù)據(jù)計算該試卷的平均分;也可以直接修改DataSet中表的數(shù)據(jù),然后保存。增加試題:先輸入好題目,然后提交,將數(shù)據(jù)插入數(shù)據(jù)庫中;還有一些其它的功能,查詢試題:按科目查

18、詢試題;試題管理:按難度查詢試題列表,并可增加、修改試題。試題列表,按難度查詢試題列表,并可增加、修改試題然后保存,將數(shù)據(jù)保存到數(shù)據(jù)庫; 圖5-2 圖5-3 圖5-4教師管理界面代碼:/ 點擊時,打開新增試題窗體 private void tsmiAddQuestion_Click(object sender, EventArgs e) / 創(chuàng)建窗體對象 AddQuestionForm addQuestionForm = new AddQuestionForm(); / 設(shè)置 MDI 主窗體 addQuestionForm.MdiParent = this; / 顯示窗體 addQuestio

19、nForm.Show(); / 點擊菜單中的“幫助”->”關(guān)于”,以模式窗口顯示 About 窗體 private void tsmiAbout_Click(object sender, EventArgs e) AboutForm aboutForm = new AboutForm(); aboutForm.MdiParent = this; aboutForm.Show(); / 以模式窗口顯示 / 窗體加載事件處理 private void TeacherForm_Load(object sender, EventArgs e) / 設(shè)置狀態(tài)欄標(biāo)簽顯示的文字 lblTeacher.

20、Text = string.Format("教員0登錄了!", UserHelper.loginId); private void TeacherForm_FormClosed(object sender, FormClosedEventArgs e) Application.Exit(); private void btnSearchQuestion_Click(object sender, EventArgs e) CheckTitles CT = new CheckTitles(); CT.Show(); private void btnQuestionList_Cl

21、ick(object sender, EventArgs e) / 創(chuàng)建窗體對象 TestList tForm = new TestList(); / 設(shè)置 MDI 主窗體 tForm.MdiParent = this; / 顯示窗體 tForm.Show(); 選擇題目代碼: /選擇題目窗口 private void TestList_Load(object sender, EventArgs e) dataSet=getDataSetBll.GetAllQuestion(ref dataAdapter); dataSet2 = getDataSetBll.GetSelectedQuesti

22、on(ref dataAdapter2, ExamId); dgvTest.DataSource =dataSet.Tables"Question" txtExamName.Text = CreateTestForm.ExamName; ExamId = CreateTestForm.ExamId; /刷新 private void button1_Click_1(object sender, EventArgs e) dataSet.Tables"Question".Clear(); dgvTest.DataSource = getDataSetBll

23、.GetQuestionByDifficulty(cboDifficulty.Text.Trim(), ref dataAdapter); /將選中的題目加入試卷中 private void tsmAddQuestion_Click(object sender, EventArgs e) string message="" int sum = dgvTest.SelectedCells.Count; for (int i = 0; i < sum;i+) string QuestionId = dgvTest.SelectedCellsi.Value.ToString

24、(); message = createTestBll.AddQuestion(ExamId, QuestionId, ref ExamSum); txtExamSum.Text = ExamSum.ToString(); MessageBox.Show(message); /將選中的題目從試卷中刪除 private void tsmDeleteQuestion_Click(object sender, EventArgs e) string message="" int sum = dgvTest.SelectedCells.Count; for (int i = 0;

25、i < sum; i+) string QuestionId = dgvTest.SelectedCellsi.Value.ToString(); message = createTestBll.DeleteQuestion(ExamId, QuestionId, ref ExamSum); txtExamSum.Text = ExamSum.ToString(); MessageBox.Show(message); /已選擇題目列表 private void btn_Click(object sender, EventArgs e) dataSet2.Tables"Quest

26、ion".Clear(); dataSet2 = getDataSetBll.GetSelectedQuestion(ref dataAdapter2,ExamId); dgvSelectedQuestion.DataSource = dataSet2.Tables"Question" private void button3_Click(object sender, EventArgs e) this.Close(); 成績管理代碼:/成績管理的窗口 private void TestGradeManageForm_Load(object sender, Eve

27、ntArgs e) ExamId = cboExamId.Text.ToString(); dataSet = getDataSetBll.GetScore(ref dataAdapter,ExamId); /加載examId foreach (DataRow row in dataSet.Tables"Score".Rows) foreach(string item in cboExamId.Items) if (item.ToString().Equals(row"examId".ToString() goto con; cboExamId.Item

28、s.Add(row"examId".ToString(); con: ; dgvScore.DataSource = dataSet.Tables"Score" private void btnSearch_Click(object sender, EventArgs e) /查詢成績 ExamId = cboExamId.Text.ToString(); dataSet.Tables"Score".Clear(); dataSet = getDataSetBll.GetScore(ref dataAdapter, ExamId);

29、dgvScore.DataSource = dataSet.Tables"Score" int sum = 0,i=0,avgScore=0; foreach (DataRow row in dataSet.Tables"Score".Rows) sum += int.Parse(row"scorevalue".ToString(); i+; if(i!=0) avgScore = sum / i; txtAvgScore.Text = avgScore.ToString(); /刷新 private void btnRefresh_

30、Click(object sender, EventArgs e) dataSet.Tables"Score".Clear(); dataSet = getDataSetBll.GetScore(ref dataAdapter, ExamId); /保存 private void btnSave_Click(object sender, EventArgs e) DialogResult result = MessageBox.Show("確定"); if (result = DialogResult.OK) SqlCommandBuilder buil

31、der = new SqlCommandBuilder(dataAdapter); dataAdapter.Update(dataSet, "Score"); 5.3管理員管理界面管理員管理界面(圖5-5):通過選擇不同的菜單和按鈕進入不同的界面,用戶管理,其中有新建用戶(新學(xué)員用戶,新建教員用戶)。 查詢及修改學(xué)員(圖5-6):用DataSet讀取數(shù)據(jù)到DataGridView。 用戶信息列表,包括查詢以及教員學(xué)員信息。 題庫管理,管理試題庫 。 圖5-5 圖5-6學(xué)員信息界面代碼:/學(xué)員窗口 private void TestList_Load(object sende

32、r, EventArgs e) dataSet=StudentListBll.GetAllQuestion(ref dataAdapter); dgvTest.DataSource = dataSet.Tables"Student" /刷新 private void button1_Click(object sender, EventArgs e) dataSet.Tables"Student".Clear(); dataAdapter.Fill(dataSet, "Student"); /保存 private void button

33、2_Click(object sender, EventArgs e) DialogResult result = MessageBox.Show("確定"); if (result = DialogResult.OK) SqlCommandBuilder builder = new SqlCommandBuilder(dataAdapter); dataAdapter.Update(dataSet, "Student"); /按性別查詢 private void cboDifficulty_SelectedIndexChanged(object sen

34、der, EventArgs e) dataSet.Tables"Student".Clear(); dgvTest.DataSource = StudentListBll.GetQuestionByDifficulty(cboDifficulty.Text.Trim(), ref dataAdapter); private void button3_Click(object sender, EventArgs e) this.Close(); 5.4學(xué)生考試界面學(xué)生在線考試界面(圖5-8):通過選擇不同的菜單和按鈕進入不同的界面:在線答題界面(圖5-9):可以選擇已激活試

35、卷答題。還有維護個人信息 :對個人信息進行查詢,修改 ;在線評分。保存考試成績可供教師查詢。 圖5-8 圖5-9學(xué)生在線考試界面代碼: public partial class StudentForm : Form public StudentForm() InitializeComponent(); private void tsbOnlineAnswer_Click(object sender, EventArgs e) SelectExamForm sExamForm = new SelectExamForm(); sExamForm.MdiParent = this; sExamFor

36、m.Show(); private void tsbOnlineAnswer_Click(object sender, EventArgs e) AnswerQuestionForm aQuestionForm = new AnswerQuestionForm(); aQuestionForm.MdiParent = this; aQuestionForm.Show(); 回答問題界面代碼: /“答題卡”按鈕 private void btnAnswerCard_Click(object sender, EventArgs e) AnswerCardForm answerCardForm=ne

37、w AnswerCardForm(); answerCardForm.Show(); /窗體加載事件 private void AnswerQuestionForm_Load(object sender, EventArgs e) dataSet = getDataSetBll.ExamLoad(ref dataAdapter, ref ExamId); /將題目放入strExam中 foreach (DataRow row in dataSet.Tables"Question".Rows) strExamj, 0 = row"Question".ToS

38、tring(); strExamj, 1 = row"OptionA".ToString(); strExamj, 2 = row"OptionB".ToString(); strExamj, 3 = row"OptionC".ToString(); strExamj, 4 = row"OptionD".ToString(); strExamj, 5 = row"Answer".ToString(); j+; lblQuestion.Text += Convert.ToString(questi

39、onIndex + 1); DisplayQuestion(questionIndex); /顯示題目及選項 public void DisplayQuestion(int i) txtQuestion.Text = strExami,0; rdoA.Text = rdoA.Text+strExami,1; rdoB.Text = rdoB.Text+strExami,2; rdoC.Text = rdoC.Text+strExami,3; rdoD.Text = rdoD.Text+strExami,4; /“下一題”按鈕事件,為studentAnswers數(shù)組賦值 private void

40、 btnNext_Click(object sender, EventArgs e) lblQuestion.Text = "問題" rdoA.Text = "A." rdoB.Text = "B." rdoC.Text = "C." rdoD.Text = "D." if (questionIndex < QuizHelper.questionNum) QuizHelper.studentAnswersquestionIndex = GetStudentAnswer(); questio

41、nIndex+; rdoA.Checked = false; rdoB.Checked = false; rdoC.Checked = false; rdoD.Checked = false; if (questionIndex > j-1) MessageBox.Show("試題已答完,你可以點擊<答題卡>按鈕進行查看", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; lblQuestion.Text += Convert.ToString(quest

42、ionIndex + 1); DisplayQuestion(questionIndex); /記時器控件的Tick事件 private void tmrCostTime_Tick(object sender, EventArgs e) int minute; int second; if (QuizHelper.remainSeconds > 0) QuizHelper.remainSeconds-; minute = QuizHelper.remainSeconds / 60; second = QuizHelper.remainSeconds % 60; lblTimer.Text

43、 = string.Format("0:00:1:00", minute, second); else tmrCostTime.Stop(); MessageBox.Show("時間到了,該交卷了!","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning); QuizResultForm quizResultForm=new QuizResultForm(); quizResultForm.MdiParent=this.MdiParent; quizResultForm.Show(); this.Close(); /判斷用戶選擇的答案 public string GetStudentAnswer() string answer = "" if (rdoA.Checked) answer = "A" else if (rdoB.Checked) answer = "B" else if (rdoC.Checked) answer = "C" else if (r

溫馨提示

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

評論

0/150

提交評論