C# 高校教学管理系统
數(shù)據(jù)庫課設(shè) C# 實(shí)現(xiàn) 高校教學(xué)管理系統(tǒng)
- 高校教學(xué)管理系統(tǒng)
- 一、前言
- 二、系統(tǒng)設(shè)計(jì)
- (一)系統(tǒng)功能設(shè)計(jì)
- (二)系統(tǒng)功能模塊設(shè)計(jì)
- 三、數(shù)據(jù)庫設(shè)計(jì)
- (一)需求分析
- (二)概念結(jié)構(gòu)設(shè)計(jì)
- (三)邏輯結(jié)構(gòu)設(shè)計(jì)
- (1)將各個(gè)實(shí)體轉(zhuǎn)換為關(guān)系模式:
- (2)實(shí)體間的聯(lián)系做以下處理:
- (3)該ER圖轉(zhuǎn)換成以下關(guān)系模式:
- 四、數(shù)據(jù)庫實(shí)現(xiàn)
- 五、系統(tǒng)實(shí)現(xiàn)
- (一)查詢函數(shù)
- (二)修改函數(shù)
- (三)學(xué)分統(tǒng)計(jì)
- (四)選課人數(shù)統(tǒng)計(jì)
- (五)成績(jī)登記,保存修改
- (六)教師信息查詢
- (七)登錄界面
- (八)注冊(cè)界面
- 六、結(jié)束語
高校教學(xué)管理系統(tǒng)
一、前言
教學(xué)管理系統(tǒng)對(duì)于學(xué)校的決策者和管理者來說都至關(guān)重要,所以應(yīng)該能夠?yàn)橛脩籼峁┏渥愕男畔⒑涂旖莸牟樵兪侄巍5恢币詠砣藗兪褂脗鹘y(tǒng)人工的方式管理文件檔案,這種管理方式存在著許多缺點(diǎn),如:效率低、保密性差,另外時(shí)間一長,將產(chǎn)生大量的文件和數(shù)據(jù) ,這對(duì)于查找、更新和維護(hù)都帶來了不少的困難。
?
教學(xué)管理系統(tǒng)主要提供成績(jī)查詢和更新平臺(tái),學(xué)生可以通過該系統(tǒng)查詢到自己各科目的學(xué)習(xí)成績(jī)以及學(xué)籍信息等。利用該系統(tǒng),教師可以清晰全面地了解學(xué)生的學(xué)習(xí)情況和檔案,對(duì)系統(tǒng)的不同部分設(shè)置各自不同的權(quán)限。可以最大限度的利用計(jì)算機(jī)的各種優(yōu)勢(shì),具有手工管理所無法比擬的優(yōu)點(diǎn).例如:檢索迅速、查找方便、可靠性高、存儲(chǔ)量大、保密性好、壽命長、成本低等,又可以利用計(jì)算機(jī)系統(tǒng)對(duì)數(shù)據(jù)的處理能力,方便分析和數(shù)據(jù)規(guī)整。
1、項(xiàng)目背景:數(shù)據(jù)庫原理課程設(shè)計(jì)??
2、編寫目的:掌握數(shù)據(jù)庫設(shè)計(jì)原理及相關(guān)軟件的使用??
3、軟件定義:高校教學(xué)管理系統(tǒng)??
4、開發(fā)環(huán)境:Visual Studio 2017,SQL Server Management Studio2008。
二、系統(tǒng)設(shè)計(jì)
(一)系統(tǒng)功能設(shè)計(jì)
教師模塊 教師模塊是用來管理教師的信息,其中包含教授的管理信息,對(duì)管理教師的一些信息有作用,用來對(duì)教師進(jìn)行記錄和分配。在網(wǎng)上的信息查詢中,教師的系統(tǒng)有著更多的功能,可以瀏覽學(xué)生的一些信息和成績(jī)更正,對(duì)學(xué)生進(jìn)行管理以及對(duì)學(xué)校的一些信息的瀏覽。
學(xué)生模塊 學(xué)生模塊是用來管理學(xué)生的信息,可以將其中分為兩個(gè)模塊,一個(gè)是學(xué)籍管理模塊,一個(gè)是課程管理模塊,這個(gè)模塊可以對(duì)學(xué)生的成績(jī)進(jìn)行查詢和對(duì)課程的查詢,對(duì)學(xué)生進(jìn)行統(tǒng)一的管理,在網(wǎng)上可以通過此模塊對(duì)一些信息進(jìn)行確定和接受一些的學(xué)校的信息,對(duì)此可以進(jìn)行一些必要的操作。
(二)系統(tǒng)功能模塊設(shè)計(jì)
三、數(shù)據(jù)庫設(shè)計(jì)
(一)需求分析
教學(xué)管理是所有高校都應(yīng)具備的最基本的管理功能。高校教學(xué)管理系統(tǒng)可實(shí)現(xiàn)高等院校的簡(jiǎn)單教學(xué)管理,包括學(xué)生人學(xué)登記、學(xué)生選課、教師登記考試成績(jī)、補(bǔ)考處理、學(xué)生成績(jī)統(tǒng)計(jì)、教師教學(xué)工作量統(tǒng)計(jì),可隨時(shí)查詢?cè)合怠⒔處煛W(xué)生、課程、選課、成績(jī)等情況。
(二)概念結(jié)構(gòu)設(shè)計(jì)
(三)邏輯結(jié)構(gòu)設(shè)計(jì)
(1)將各個(gè)實(shí)體轉(zhuǎn)換為關(guān)系模式:
學(xué)院(編號(hào)、院系名、負(fù)責(zé)人)
教師(工號(hào)、姓名、性別、所屬院系、職稱、年齡、 出生年月、基本工資)
學(xué)生(學(xué)號(hào)、姓名、性別、年齡、所屬院系)
課程(課程代號(hào)、課程名、課時(shí)數(shù)、課程類型、學(xué)分)
(2)實(shí)體間的聯(lián)系做以下處理:
1、學(xué)院與學(xué)生間的1:n 屬于聯(lián)系:與學(xué)生關(guān)系模式合并,將學(xué)院號(hào)加入學(xué)生關(guān)系
學(xué)生(學(xué)號(hào)、姓名、性別、年齡、所屬院系,學(xué)院編號(hào))
2、學(xué)院與教師間的1:n 屬于聯(lián)系:與教師關(guān)系模式合并,將學(xué)院號(hào)加入教師生關(guān)系
教師(工號(hào)、姓名、性別、所屬院系、職稱、年齡、 出生年月、基本工資,學(xué)院編號(hào))
3、課程與教師間的1:1 負(fù)責(zé)聯(lián)系:與課程關(guān)系模式合并,將教師工號(hào)加入課程關(guān)系
課程(課程代號(hào)、課程名、課時(shí)數(shù)、課程類型、學(xué)分,負(fù)責(zé)教師工號(hào))
4、課程與教師間的m:n 參與聯(lián)系,轉(zhuǎn)換成一個(gè)獨(dú)立的關(guān)系模式:
教師參與課程(課程號(hào),參與教師工號(hào))
(3)該ER圖轉(zhuǎn)換成以下關(guān)系模式:
學(xué)院(編號(hào)、院系名、負(fù)責(zé)人)
學(xué)生(學(xué)號(hào)、姓名、性別、年齡、所屬院系,學(xué)院編號(hào))
教師(工號(hào)、姓名、性別、所屬院系、職稱、年齡、 出生年月、基本工資,學(xué)院編號(hào))
課程(課程代號(hào)、課程名、課時(shí)數(shù)、課程類型、學(xué)分,負(fù)責(zé)教師工號(hào))
教師參與課程(課程代號(hào),參與教師工號(hào))
四、數(shù)據(jù)庫實(shí)現(xiàn)
數(shù)據(jù)庫由以下表組成:?
Student:學(xué)生信息表?
Teacher:教職工信息表?
Depart : 系信息表?
Class :課程信息表?
Sc : 選課信息表
Tc : 教師課程表
五、系統(tǒng)實(shí)現(xiàn)
(一)查詢函數(shù)
//查詢,返回DataTable public DataTable QuerySQL(string sql) {DataSet ds = new DataSet();using (SqlConnection conn = new SqlConnection()){conn.ConnectionString = @"server=DESKTOP-5T68OT4\SQLEXPRESS;database=jxgl;integrated security=true";conn.Open();using (SqlCommand command = conn.CreateCommand()){command.CommandText = sql;SqlDataAdapter da = new SqlDataAdapter(command);try{da.Fill(ds);}catch{}}}DataTable dt = new DataTable();try{dt = ds.Tables[0].Copy();}catch{}return dt; }(二)修改函數(shù)
//修改數(shù)據(jù) public void AlterSQL(string sql) {// 連接數(shù)據(jù)庫SqlConnection conn = new SqlConnection();conn.ConnectionString = @"server=DESKTOP-5T68OT4\SQLEXPRESS;database=jxgl;integrated security=true";conn.Open();//將數(shù)據(jù)存入數(shù)據(jù)庫SqlCommand cmd = new SqlCommand();cmd.CommandType = CommandType.Text;cmd.CommandText = sql;cmd.Connection = conn;cmd.ExecuteNonQuery();//斷開連接,釋放資源conn.Close(); }(三)學(xué)分統(tǒng)計(jì)
string sql3 = string.Format("select SUM(credit) from class where cno in (select cno from sc where sno = '{0}' and grade >= 60)",Program.loginId); dt3 = linkSql.QuerySQL(sql3); int loginCredit = 0; try {loginCredit = Convert.ToInt32(dt3.Rows[0][0].ToString()); } catch {} label1.Text = string.Format("您已選修學(xué)分為{0}學(xué)分,最高可選修120學(xué)分", loginCredit); //如果學(xué)分大于120,則不能選課 if(loginCredit > 120) {//將復(fù)選框關(guān)閉listView1.CheckBoxes = false; }(四)選課人數(shù)統(tǒng)計(jì)
string sql4 = "select sc.cno,count(distinct sno) as snoCount,count(distinct tno) as tnoCount from sc,tc where sc.cno = tc.cno group by sc.cno"; dt4 = linkSql.QuerySQL(sql4); foreach(DataRow dr in dt4.Rows) {//選課人數(shù)小于教師數(shù)*15,不開課if (Convert.ToInt32(dr["snoCount"].ToString()) < 15 * Convert.ToInt32(dr["tnoCount"].ToString())){Program.startClass = false;}//選課人數(shù)大于教師數(shù)*50,無法選課else if (Convert.ToInt32(dr["snoCount"].ToString()) > 50 * Convert.ToInt32(dr["tnoCount"].ToString())){cnoList.Add(dr["cno"].ToString()); //記錄下課程號(hào)}//正常選課,開課else{Program.startClass = true;} }(五)成績(jī)登記,保存修改
private void button2_Click_1(object sender, EventArgs e) {string SCsno;string SCgrade;string sql;for (int i = 0; i < dt1.Rows.Count; i++){SCsno = dt1.Rows[i]["學(xué)號(hào)"].ToString();SCgrade = dt1.Rows[i]["成績(jī)"].ToString();sql = string.Format("update dbo.sc set grade = {1} where sno = '{0}' and cno = '{2}'", SCsno, SCgrade, comboBox2.SelectedValue);linkSQL.AlterSQL(sql);}MessageBox.Show("保存成功!"); }(六)教師信息查詢
private void button1_Click_1(object sender, EventArgs e) {string sql;if (Program.isTeacher){sql = "select tno as '工號(hào)',tname as '姓名',tsex as '性別',tdept as '所屬院系',title as '職稱',tage as '年齡',wage as '基本工資' from dbo.teacher";}else{sql = "select tname as '姓名',tsex as '性別',tdept as '所屬院系',title as '職稱' from dbo.teacher";}//綁定到datagridview中顯示this.dataGridView1.DataSource = linkSql.QuerySQL(sql); }(七)登錄界面
private void button1_Click(object sender, EventArgs e) {//連接數(shù)據(jù)庫SqlConnection conn = new SqlConnection();conn.ConnectionString = @"server=DESKTOP-5T68OT4\SQLEXPRESS;database=jxgl;integrated security=true";conn.Open();if (textBox1.Text != "" && textBox2.Text != "")?//判斷是否有輸入{if (radioButton1.Checked == false && radioButton2.Checked == false){MessageBox.Show("請(qǐng)選擇登錄類型!");}else{//學(xué)生被選中if(radioButton1.Checked == true){string sql = "select sno,sname from dbo.student";Program.isTeacher = false;LogIn(sql, conn, Program.isTeacher);}//教師被選中else if(radioButton2.Checked == true){string sql = "select tno,tname from dbo.teacher";Program.isTeacher = true;LogIn(sql, conn, Program.isTeacher);}}}else//沒有輸入ID或密碼{MessageBox.Show("請(qǐng)輸入ID和姓名!");} }//與數(shù)據(jù)庫進(jìn)行匹配,若相等則跳轉(zhuǎn)頁面 private void LogIn(string sql, SqlConnection conn, bool isTeacher) {SqlCommand comm = new SqlCommand(sql);comm.Connection = conn;SqlDataReader sdreader = comm.ExecuteReader();if (sdreader.HasRows)//判斷是否有數(shù)據(jù){while (sdreader.Read()){string sno = sdreader.GetString(0).Replace(" ", "");string sname = sdreader.GetString(1).Replace(" ", "");if (sno.Equals(textBox1.Text) && sname.Equals(textBox2.Text)){isFind = true;//記錄ID和姓名Program.loginId = textBox1.Text;Program.loginName = textBox2.Text;if (isTeacher){//跳轉(zhuǎn)頁面t_mainForm t_MainForm = new t_mainForm();t_MainForm.ShowDialog(this);}else{//跳轉(zhuǎn)頁面s_mainForm s_MainForm = new s_mainForm();s_MainForm.ShowDialog(this);}this.Close();break;}}}if (!isFind){textBox1.Text = ("");textBox2.Text = ("");MessageBox.Show("ID或姓名錯(cuò)誤!");}//斷開連接,釋放資源sdreader.Close();conn.Close(); }(八)注冊(cè)界面
private void button1_Click(object sender, EventArgs e) {if (this.textBox1.Text == "" || this.textBox2.Text == "" || this.comboBox1.SelectedIndex == 0 || this.comboBox2.SelectedIndex == 0 || this.comboBox3.SelectedIndex == 0){MessageBox.Show("請(qǐng)輸入完整的學(xué)生信息!");}else{//連接數(shù)據(jù)庫SqlConnection conn = new SqlConnection();conn.ConnectionString = @"server=DESKTOP-5T68OT4\SQLEXPRESS;database=jxgl;integrated security=true";conn.Open();string sql = "select sno from dbo.student";SqlCommand comm = new SqlCommand(sql);comm.Connection = conn;SqlDataReader sdreader = comm.ExecuteReader();if (sdreader.HasRows)//判斷是否有數(shù)據(jù){while (sdreader.Read()){string sno = sdreader.GetString(0).Replace(" ", "");if (sno.Equals(textBox1.Text)){isFind = true;MessageBox.Show("該學(xué)號(hào)已存在!");break;}}}//關(guān)閉sdreadersdreader.Close();if (!isFind){//將數(shù)據(jù)存入數(shù)據(jù)庫SqlCommand cmd = new SqlCommand();cmd.CommandType = CommandType.Text;cmd.CommandText = string.Format("insert into student(sno, sname, ssex, sage, sdept) values('{0}','{1}','{2}',{3},'{4}')", textBox1.Text, textBox2.Text, comboBox1.Text, comboBox3.Text, comboBox2.Text);cmd.Connection = conn;cmd.ExecuteNonQuery();MessageBox.Show("添加成功");ClearStudentBox();//清空輸入欄}//斷開連接,釋放資源conn.Close();} }
六、結(jié)束語
SQL是Structured?Query?Language(結(jié)構(gòu)化查詢語言)的縮寫。SQL是專為數(shù)據(jù)庫而建立的操作命令集,是一種功能齊全的數(shù)據(jù)庫語言。在使用它時(shí),只需要發(fā)出“做什么”的命令,“怎么做”是不用使用者考慮的。SQL功能強(qiáng)大、簡(jiǎn)單易學(xué)、使用方便,已經(jīng)成為了數(shù)據(jù)庫操作的基礎(chǔ),并且現(xiàn)在幾乎所有的數(shù)據(jù)庫均支持SQL。經(jīng)過一個(gè)學(xué)期的數(shù)據(jù)庫課程的學(xué)習(xí),我們掌握了創(chuàng)建數(shù)據(jù)庫以及對(duì)數(shù)據(jù)庫的操作的基礎(chǔ)知識(shí)。老師的教學(xué)耐心細(xì)致,課堂上我們有不理解的地方老師都反復(fù)講解,使我們的基礎(chǔ)知識(shí)掌握的比較牢固。數(shù)據(jù)庫這門課程涉及到以前的知識(shí)不多,是一門從頭學(xué)起的課程,即使基礎(chǔ)不是很好,只要認(rèn)真聽講、復(fù)習(xí)功課,還是一門比較容易掌握的課。簡(jiǎn)單的說下我對(duì)數(shù)據(jù)庫的理解吧。我覺得它就是創(chuàng)建一些表格,然后再用一些語句根據(jù)他們之間的關(guān)系,把它們組合在一起。最基本的就是子查詢了。?我的子查詢經(jīng)驗(yàn)就是先寫出select?*?我們要找什么,然后寫條件,我們要找的東西有什么條件,然后在寫條件,我們的條件涉及那些表,那些字段,再在這些字段中通過我們學(xué)過的簡(jiǎn)單select語句選出來,有時(shí)候還要用到幾層子查詢,不過無所謂,只要思路是清晰的就沒什么問題了。接下來,關(guān)聯(lián)查詢之類的,學(xué)起來也是不難的, 總之,這是一門很值得學(xué)習(xí)的課程,自己學(xué)過獲益匪淺。
總結(jié)
以上是生活随笔為你收集整理的C# 高校教学管理系统的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Straw-Uniapp-uView】
- 下一篇: 深度神经网络DNN