《數(shù)據(jù)庫學生成績管理系統(tǒng)課程設計報告.doc》由會員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)庫學生成績管理系統(tǒng)課程設計報告.doc(27頁珍藏版)》請在裝配圖網(wǎng)上搜索。
洛 陽 理 工 學 院
課 程 設 計 報 告
課程名稱 數(shù)據(jù)庫課程設計
設計題目 學生成績查詢系統(tǒng)
專 業(yè) 計算機科學與技術(shù)
班 級 B100506
學 號 B10050634
姓 名 孫帥杰
完成日期 2013年1月6號
課 程 設 計 任 務 書
設計題目: 學生成績管理系統(tǒng)
設計內(nèi)容與要求:
設計內(nèi)容:
教務員可以輸入學生、教師、班級、課程信息,一個班級只屬于一個專業(yè),一個學生只屬于一個班級。教務員負責輸入每個專業(yè)、每個班級需要學習哪些課程,指定課程的任課教師。一個教師可以教授多個班的多門課程。
教師可以查看學習該課程的學生名單。課程結(jié)束后,教師可以錄入課程成績。
課程分兩類,必修課和選修課。學生可以選修課程,每學期幾門。學生可以查看自己各門課程的成績。學生還可以進行評教,給老師打分。
系統(tǒng)管理員可以輸入教室信息,并結(jié)合班級、課程、教室信息實現(xiàn)自動排課。
設計要求:
要求完成需求分析,寫出功能需求和數(shù)據(jù)需求描述;
在需求分析的基礎上完成數(shù)據(jù)庫的概念結(jié)構(gòu)設計、邏輯結(jié)構(gòu)設計、物理結(jié)構(gòu)
設計;
用C#語言,完成管理系統(tǒng)的部分程序模塊的界面設計。
指導教師: 陶 榮
2012年12月28日
課 程 設 計 評 語
成績:
指導教師:
年 月 日
目 錄
1.緒論 1
1.1 設計目的 1
1.2 開發(fā)工具選擇 1
1.3 開發(fā)環(huán)境 1
1.4 本報告的主要內(nèi)容 1
2.需求分析 1
2.1 系統(tǒng)需求簡介 1
3.總體設計 2
3.1 設計概述 2
3.2 系統(tǒng)總體結(jié)構(gòu)及功能模塊劃分 2
3.3 系統(tǒng)數(shù)據(jù)庫概念結(jié)構(gòu)設計 4
3.4 邏輯結(jié)構(gòu)設計 7
4.主程序設計 10
4.1 登錄系統(tǒng) 10
4.2 學生信息查詢、保存、及修改 12
4.3 用戶管理 18
5.設計總結(jié)與心得體會 22
6.參考文獻 23
1.緒論
1.1 設計目的
本課程設計的目的是使學生能熟練掌握簡單的簡單Windows窗體應用程序的設計和ADO.net的應用,希望通過本次課程設計鍛煉學生使用C#語言解決實際問題的能力。
1.2 開發(fā)工具選擇
本系統(tǒng)后臺數(shù)據(jù)庫采用Microsoft SQL Server 數(shù)據(jù)庫,該數(shù)據(jù)庫系統(tǒng)在安全性、準確性和運行速度方面有絕對的優(yōu)勢,并且處理數(shù)據(jù)量大,效率高;前臺采用Microsoft 公司的Visual Studio 2010作為主要開發(fā)工具,可與SQL Server 2008數(shù)據(jù)庫無縫鏈接。
1.3 開發(fā)環(huán)境
系統(tǒng)開發(fā)平臺:Microsoft Visual Studio2010
系統(tǒng)開發(fā)語言:C#
數(shù)據(jù)庫管理軟件:SQL Server 2008
1.4 本報告的主要內(nèi)容
本報告詳細的介紹了學生成績管理系統(tǒng)的開發(fā)過程,主要涉及到的工作如下:系統(tǒng)的需求分析、系統(tǒng)的總體設計、系統(tǒng)的概念設計、系統(tǒng)各模塊的詳細設計、系統(tǒng)運行與測試。
2.需求分析
2.1系統(tǒng)需求簡介
(1)系統(tǒng)目標
1.根據(jù)查詢條件實現(xiàn)學生信息的查詢
2.學生選課信息查詢、成績信息的查詢
3.學生信息、課程信息、成績信息的增加、刪除、修改
4.對基本信息完成增加、刪除、修改時,需注意表與表之間的關(guān)聯(lián)
(2)功能需求分析
本系統(tǒng)的功能需求分析如下:
1.學生信息查詢:學生可以根據(jù)學號、姓名、專業(yè)進行查詢.
2.學生信息管理:主要是用于學生信息更新、插入、刪除;
3.學生成績錄入:用于學生成績管理,錄入學生成績,也可以更新;
(3)性能需求分析
1.登錄、用戶界面需求:簡潔、易懂、易用、友好的用戶界面。
2.安全保密性需求:只有憑借用戶名和密碼登陸系統(tǒng),才能進行信息的管理等。
3.總體設計
3.1設計概述
根據(jù)需求把整個系統(tǒng)分化成不同的模塊,每個模塊完成一個特定的子功能。把這些模塊結(jié)合起來組成一個整體。逐一實現(xiàn)各個功能。
3.2系統(tǒng)總體結(jié)構(gòu)及功能模塊劃分
經(jīng)過對系統(tǒng)的需求分析,學生信息管理系統(tǒng)主要劃分為三個部分:學生信息查詢,學生信息管理,學生成績錄入三個功能模塊。系統(tǒng)的總體結(jié)構(gòu)如圖3-1所示。
學
生
成績錄入
學
生
信
息
管理
學生信息管理系統(tǒng)
學
生
信
息
查詢
圖3-1 系統(tǒng)的總體結(jié)構(gòu)示意圖
(1)學生信息查詢模塊
學生信息查詢
學號查詢
姓名查詢
學生信息查詢:學生可以根據(jù)本人學號、姓名進行信息查詢。學生信息查詢模塊結(jié)構(gòu)如圖3-2所示。
圖3-2 學生信息管理模塊結(jié)構(gòu)示意圖
(2)學生信息管理模塊
學生信息管理:主要是用于學生信息更新、插入、刪除。學生管理模塊結(jié)構(gòu)如圖3-3所示。
基本信息錄入
成績錄入
基本信息更新
成績更新
學
生
信息刪除
學
生
信
息
錄入
學生信息管理
學生信息更新
圖3-3 學生信息管理模塊結(jié)構(gòu)示意圖
3.3系統(tǒng)數(shù)據(jù)庫概念結(jié)構(gòu)設計
根據(jù)對數(shù)據(jù)項與數(shù)據(jù)結(jié)構(gòu)的分析,設計出能夠滿足系統(tǒng)需求的各種實體,及它們之間的關(guān)系,為后面的邏輯結(jié)構(gòu)設計打下基礎。
(1)系統(tǒng)E-R圖
系統(tǒng)E-R圖可以將各個實體之間的關(guān)系顯示出來,將各個實體間的屬性依賴表示明白。
教師與課程之間的關(guān)系:
教師與課程之間是m: n的關(guān)系,即一個老師能教多門課程,一門課程可以由多個老師講授。
圖3-4教師與課程實體圖
學生與教師之間的關(guān)系:
學生與教師之間是n:m的關(guān)系,即一名老師可以教授多個學生,而一個學生可以由多個教師來教。
圖3-5教師與學生的實體圖
學生與課程之間的關(guān)系:
學生與課程之間是n:m的關(guān)系,即一個學生可以選修多門課程,一門課程可以被多個學生選學。
圖3-6學生與課程的實體圖
學生與成績之間的關(guān)系是n:m的關(guān)系:
圖3-7學生與成績的實體圖
管理員與用戶的關(guān)系:
圖3-8管理員與用戶的實體圖
圖3-9學生成績管理全局E-R 圖
3.4 邏輯結(jié)構(gòu)設計
(1)將E-R圖轉(zhuǎn)化為關(guān)系模型為:
管理員(用戶名,密碼)
學生(學號,姓名,性別,系名,專業(yè),出生日期)
教師(教師號,姓名,性別,院系,聯(lián)系電話)
課程(課程號,課程名,學分,教師)
成績(學號,課程號,姓名,課程名,成績,授課老師)
管理(教師號,學號,密碼)
教授(教師號,課程號,課程名)
選修(學號,課程號,成績)
講授(教師號,課程號)
(2)將以上數(shù)據(jù)關(guān)系模型進行優(yōu)化處理得關(guān)系模型:
學生信息(學號,姓名,性別,系名,專業(yè),出生日期)
教師信息(教師號,姓名,性別,院系,聯(lián)系電話)
管理員信息(用戶名,密碼,用戶級別)
課程表(課程號,課程名,學分,教師)
成績表(學號、課程號、成績)
(3)物理模型設計
學生信息表具體有學號,姓名,性別,系名,專業(yè),出生日期,如表3-1所示
表3-1學生信息表
字段
類型
長度
約束
索引
學號
字符型
8
主鍵約束
有
姓名
字符型
10
性別
字符型
2
系名
字符型
20
專業(yè)
數(shù)值型
20
出生日期
字符型
8
教師信息具體有教師號,姓名,性別,院系,專業(yè),聯(lián)系電話,如表3-2所示
表3-2教師信息表
字段
類型
長度
約束
索引
教師號
字符型
8
主鍵約束
有
姓名
字符型
10
性別
字符型
2
院系
字符型
20
專業(yè)
數(shù)值型
20
聯(lián)系電話
字符型
11
管理員信息具體有用戶名、密碼、用戶級別,如表3-3所示
字段
類型
長度
備注
用戶名
字符型
8
學號、教師號
密碼
字符型
6
用戶級別
字符型
10
一般操作員/系統(tǒng)管理員
表3-3管理員信息表
課程表信息具體有課程號,課程名,學分,教師,如表3-4所示
表3-4課程表信息
字段
類型
長度
約束
索引
課程號
字符型
10
主鍵約束
有
課程名
字符型
30
學分
字符型
2
教師
字符型
10
成績表具體有學號,課程號,成績,如表3-5所示
表3-5成績表
字段
類型
長度
約束
索引
學號
字符型
8
主鍵
有
課程號
字符型
10
主鍵
有
成績
數(shù)值型
5
4.主程序設計
4.1 登錄系統(tǒng)
namespace CourseDesign
{
public partial class LoginForm : Form
{
#region 屬性
///
/// 是否登錄
///
private bool _isLogin = false;
public bool IsLogin
{
get { return _isLogin; }
set { _isLogin = value; }
}
//用于記錄當前登錄用戶名;
private static string _currentUser;
public static string CurrentUser
{
get { return _currentUser; }
}
//用于記錄當前登錄用戶密碼;
private static string _currentPsw;
public static string CurrentPsw
{
get { return _currentPsw; }
}
#endregion
public LoginForm()
{
InitializeComponent();
this.labelInfo.Text = "";
this.txtBoxUser.Text = "admin";
this.txtBoxPsw.Text = "0";
}
//登錄
private void btnOK_Click(object sender, EventArgs e)
{
if (txtBoxUser.Text.Trim() == "")
{
this.labelInfo.Text = "請輸入您的用戶名!";
}
else if (txtBoxPsw.Text.Trim() == "")
{
this.labelInfo.Text = "請輸入您的密碼!";
//MessageBox.Show("請輸入您的密碼", "錯誤提示:", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
Command com = new Command();
string str = @"select * from UserInfo where userId = " + txtBoxUser.Text.ToString() + "";
DataTable table = com.GetDataSet(str);
if (table.Rows.Count <= 0)
{
this.labelInfo.Text = "用戶名不存在!";
txtBoxUser.Text = "";
txtBoxPsw.Text = "";
return;
}
str = @"select * from UserInfo where userId = " + txtBoxUser.Text.ToString() + " and passWard = " + txtBoxPsw.Text.ToString() + "";
DataTable tableUser = com.GetDataSet(str);
if (tableUser.Rows.Count > 0)
{
_currentUser = txtBoxUser.Text;
_currentPsw = txtBoxPsw.Text;
IsLogin = true;
this.Close();
}
else
{
this.labelInfo.Text = "密碼錯誤!";
txtBoxPsw.Text = "";
}
}
}
//取消
private void btnCencle_Click(object sender, EventArgs e)
{
this.Close();
}
//重置
private void btnReset_Click(object sender, EventArgs e)
{
txtBoxUser.Text = "";
txtBoxPsw.Text = "";
}
private void txtBoxUser_Click(object sender, EventArgs e)
{
this.labelInfo.Text = "";
}
private void txtBoxPsw_Click(object sender, EventArgs e)
{
this.labelInfo.Text = "";
}
}
}
圖4-1用戶登錄界面
4.2 學生信息查詢、保存、及修改
namespace CourseDesign
{
public partial class frmViewInfo : Form
{
#region 屬性
private DBHelper.TypeOfOperationForBill _mOperTypeOfBill = DBHelper.TypeOfOperationForBill.nNull;
public DBHelper.TypeOfOperationForBill OperTypeOfBill
{
get { return _mOperTypeOfBill; }
set { _mOperTypeOfBill = value; }
}
//
private bool _isNew = false;
public bool IsNew
{
get { return _isNew; }
set { _isNew = value; }
}
private bool _isModified = false;
public bool IsModified
{
get { return _isModified; }
set { _isModified = value; }
}
#endregion
public frmViewInfo(DBHelper.TypeOfOperationForBill OperType)
{
_mOperTypeOfBill = OperTypeOfBill;
InitializeComponent();
SetFromText();
}
public virtual void SetFromText()
{
if (OperTypeOfBill == TypeOfOperationForBill.nView)
{
this.Text = "查看學生信息";
}
else
{
this.Text = "編輯學生信息";
}
}
//添加
private void toolStripBtnAdd_Click(object sender, EventArgs e)
{
//this.dataGridViewInfo.Rows.Add();
//_isNew = true;
Command com = new Command();
string strClass = @"select classId from ClassInfo where className = " + dataGridViewInfo.CurrentRow.Cells["classid"].Value.ToString() + "";
string dtClass = com.GetScalar(strClass).ToString();
string strdept = @"select sdeptNo from Sdept where name = " + dataGridViewInfo.CurrentRow.Cells["Sdept"].Value.ToString() + "";
string dtDept = com.GetScalar(strdept).ToString();
string str = "select * from StudentInfo where stuNum = " + dataGridViewInfo.CurrentRow.Cells["stuNum"].Value.ToString() + "";
DataTable dtable = com.GetDataSet(str);
if (dtable.Rows.Count <= 0)
{
if (dataGridViewInfo["stuNum", dataGridViewInfo.CurrentRow.Index].Value != null && dataGridViewInfo["name", dataGridViewInfo.CurrentRow.Index].Value != null &&
dataGridViewInfo["sex", dataGridViewInfo.CurrentRow.Index].Value != null && dataGridViewInfo["birthday", dataGridViewInfo.CurrentRow.Index].Value != null &&
dataGridViewInfo["nation", dataGridViewInfo.CurrentRow.Index].Value != null && dataGridViewInfo["address", dataGridViewInfo.CurrentRow.Index].Value != null &&
dataGridViewInfo["phone", dataGridViewInfo.CurrentRow.Index].Value != null && dataGridViewInfo["classid", dataGridViewInfo.CurrentRow.Index].Value != null &&
dataGridViewInfo["Sdept", dataGridViewInfo.CurrentRow.Index].Value != null && dataGridViewInfo["intoSchoolDate", dataGridViewInfo.CurrentRow.Index].Value != null)
{
string sql = "insert into StudentInfo (stuNum,name,sex ,birthday ,nation,address,phone,classid,intoSchoolDate,Sdept) values";
sql += "(" + dataGridViewInfo.CurrentRow.Cells["stuNum"].Value.ToString() + "," + dataGridViewInfo.CurrentRow.Cells["name"].Value.ToString() + "," + dataGridViewInfo.CurrentRow.Cells["sex"].Value.ToString()
+ "," + dataGridViewInfo.CurrentRow.Cells["birthday"].Value.ToString() + "," + dataGridViewInfo.CurrentRow.Cells["nation"].Value.ToString() + "," + dataGridViewInfo.CurrentRow.Cells["address"].Value.ToString()
+ "," + dataGridViewInfo.CurrentRow.Cells["phone"].Value.ToString() + "," + dtClass + "," + dataGridViewInfo.CurrentRow.Cells["intoSchoolDate"].Value.ToString() + "," + dtDept + ")";
if (com.ExecuteCommand(sql) > 0)
{
dataGridViewInfo.Rows.Clear();
SelectStudentInfo();
MessageBox.Show("數(shù)據(jù)添加成功!");
}
}
else
{
MessageBox.Show("信息填寫不完整!請補充完整!");
}
}
else
{
MessageBox.Show("該學生已存在,請審核信息!");
}
}
protected virtual void frmViewInfo_Load(object sender, EventArgs e)
{
this.dataGridViewInfo.Rows.Clear();
this.dataGridViewInfo.Columns.Clear();
//this.dataGridViewInfo.EditMode = DataGridViewEditMode.EditOnEnter;
DataGridViewColumn col = null;
col = new DataGridViewTextBoxColumn();
col.Name = "stuNum";
col.HeaderText = "學號";
this.dataGridViewInfo.Columns.Add(col);
col = new DataGridViewTextBoxColumn();
col.Name = "name";
col.HeaderText = "姓名";
this.dataGridViewInfo.Columns.Add(col);
DataGridViewComboBoxColumn col0 = new DataGridViewComboBoxColumn();
col0.FlatStyle = FlatStyle.Flat;
col0.HeaderText = "性別";
col0.Name = "sex";
col0.Items.Add("男");
col0.Items.Add("女");
this.dataGridViewInfo.Columns.Add(col0);
col = new DataGridViewTextBoxColumn();
col.Name = "birthday";
col.HeaderText = "出生年月";
this.dataGridViewInfo.Columns.Add(col);
col = new DataGridViewTextBoxColumn();
col.Name = "nation";
col.HeaderText = "民族";
this.dataGridViewInfo.Columns.Add(col);
col = new DataGridViewTextBoxColumn();
col.Name = "address";
col.HeaderText = "籍貫";
this.dataGridViewInfo.Columns.Add(col);
col = new DataGridViewTextBoxColumn();
col.Name = "phone";
col.HeaderText = "聯(lián)系電話";
this.dataGridViewInfo.Columns.Add(col);
col = new DataGridViewTextBoxColumn();
col.Name = "classid";
col.HeaderText = "班級";
this.dataGridViewInfo.Columns.Add(col);
col = new DataGridViewTextBoxColumn();
col.Name = "intoSchoolDate";
col.HeaderText = "入學時間";
this.dataGridViewInfo.Columns.Add(col);
col = new DataGridViewTextBoxColumn();
col.Name = "Sdept";
col.HeaderText = "系別";
this.dataGridViewInfo.Columns.Add(col);
}
//刪除
private void toolStripBtnDelete_Click(object sender, EventArgs e)
{
Command com = new Command();
if (dataGridViewInfo["stuNum", dataGridViewInfo.CurrentRow.Index].Value != null)
{
string numRow = dataGridViewInfo.CurrentRow.Cells["stuNum"].Value.ToString();
string str = "delete from StudentInfo where stuNum = " + dataGridViewInfo.CurrentRow.Cells["stuNum"].Value.ToString() + "";
if (MessageBox.Show("你確定刪除學號為:" + numRow + "的學生么?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
string strScore = "select * from ScoreInfo where stuNo = " + dataGridViewInfo.CurrentRow.Cells["stuNum"].Value.ToString() + "";
DataTable dt = com.GetDataSet(strScore);
if (dt.Rows.Count > 0)
{
MessageBox.Show("請先刪除該學生的成績!");
}
else
{
if (com.ExecuteCommand(str) > 0)
{
//dataGridViewInfo.Rows.Clear();
//SelectStudentInfo();
dataGridViewInfo.Rows.Remove(dataGridViewInfo.CurrentRow);
MessageBox.Show("刪除成功!");
}
}
}
}
else
{
if (MessageBox.Show("該數(shù)據(jù)行為空,是否刪除該行?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
dataGridViewInfo.Rows.Remove(dataGridViewInfo.CurrentRow);
MessageBox.Show("刪除成功!");
}
}
}
///
/// 查詢學生信息
///
public void SelectStudentInfo()
{
Command com = new Command();
string str = "select s.stuNum,s.name,s.sex ,s.birthday ,s.nation,s.address,s.phone,c.className,s.intoSchoolDate,sd.name from StudentInfo s,ClassInfo c,Sdept sd" +
" where s.classid = c.classID and s.Sdept = sd.sdeptNo";
DataTable dt = com.GetDataSet(str);
for (int i = 0; i < dt.Rows.Count; i++)
{
dataGridViewInfo.Rows.Add();
for (int k = 0; k < dt.Columns.Count; k++)
{
dataGridViewInfo.Rows[i].Cells[k].Value = dt.Rows[i][k].ToString();
}
dataGridViewInfo.Rows[i].Tag = false;
}
}
//保存
private void toolStripBtnSave_Click(object sender, EventArgs e)
{
Command com = new Command();
for (int i = 0; i < dataGridViewInfo.Rows.Count - 1; i++)
{
string strClass = @"select classId from ClassInfo where className = " + dataGridViewInfo.Rows[i].Cells["classid"].Value.ToString() + "";
string dtClass = com.GetScalar(strClass).ToString();
string strdept = @"select sdeptNo from Sdept where name = " + dataGridViewInfo.Rows[i].Cells["Sdept"].Value.ToString() + "";
string dtDept = com.GetScalar(strdept).ToString();
string sql = @"update StudentInfo set stuNum = " + dataGridViewInfo.Rows[i].Cells["stuNum"].Value.ToString() + ",name = " + dataGridViewInfo.Rows[i].Cells["name"].Value.ToString()
+ ",sex = " + dataGridViewInfo.Rows[i].Cells["sex"].Value.ToString() + ",birthday = " + dataGridViewInfo.Rows[i].Cells["birthday"].Value.ToString() + ",nation = "
+ dataGridViewInfo.Rows[i].Cells["nation"].Value.ToString() + ",address = " + dataGridViewInfo.Rows[i].Cells["address"].Value.ToString() + ",phone = "
+ dataGridViewInfo.Rows[i].Cells["phone"].Value.ToString() + ",classid = " + dtClass + ",intoSchoolDate = " + dataGridViewInfo.Rows[i].Cells["intoSchoolDate"].Value.ToString() + ",Sdept = " + dtDept + " where stuNum = "
+ dataGridViewInfo.Rows[i].Cells["stuNum"].Value.ToString() + "";
if (com.ExecuteCommand(sql) > 0)
{
dataGridViewInfo.Rows.Clear();
SelectStudentInfo();
MessageBox.Show("數(shù)據(jù)修改成功!");
}
else
{
MessageBox.Show("數(shù)據(jù)修改失??!");
}
}
}
}
}
圖4-2查看學生信息
圖4-3學生信息顯示
4.3 用戶管理
namespace CourseDesign
{
public partial class FormPassword : Form
{
public FormPassword()
{
InitializeComponent();
this.btnOk.Click += new System.EventHandler(this.btnOk_Click);
}
protected void btnOk_Click(object sender, EventArgs e)
{
if (txtBoxOldPsw.Text == null || txtBoxOldPsw.Text.Trim() == "")
{
MessageBox.Show("請輸入舊密碼!。", "提醒", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
if (txtBoxNewPsw.Text == null || txtBoxNewPsw.Text.Trim() == ""
|| txtBoxEnterPsw.Text == null || txtBoxEnterPsw.Text.Trim() == "")
{
MessageBox.Show("請輸入新密碼!。", "提醒", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
string currPwd = LoginForm.CurrentPsw;
if (currPwd == txtBoxOldPsw.Text.Trim())
{
if (isSame())
鏈接地址:http://www.820124.com/p-6492766.html