全體起立!廣州大學數據庫綜合設計實驗

全體起立!你一個數據庫能秒殺我?你要是能秒殺我,我當場,把Oracle給買下然後解散。

廣州大學數據庫綜合實驗

實驗內容: 設計的數據庫系統可從以下題目中選擇,但不限定於以下題目,可自由選擇。
需提供系統簡要的需求分析,給出大體的功能介紹;完成數據庫的概念結構設計,建議用PowerDesigner畫出系統的邏輯結構圖或物理結構圖(也可以使用其他工具);任選自己熟悉的數據庫管理系統和編程語言完成系統主要功能模塊的開發。
系統題目參考:
1、學生成績管理系統
2、網上書城系統
3、進銷存系統
4、酒店客房管理系統
5、圖書館管理系統

我這裏選的是學生成績管理系統。
本博客部分參考師兄的博客
參考博客

具體內容

1、數據庫的建立
2、數據庫每個表和視圖對應類的建立
3、C#窗口的開發

----------------------------------------------------------------------------------------

一、數據庫的建立

E-R圖:
在這裏插入圖片描述

主要步驟:

1 創建用戶lsz,密碼是lsznb

create user Lsz identified by Lsznb;

grant connect,resource,unlimited tablespace to Lsz;

grant create view to Lsz;

2建表

create table student
(
sno varchar2(10) primary key,
sname varchar2(20) not null unique,
ssex char(3) check(ssex in('男','女')),
sage smallint not null,
pwd varchar(20) not null
);
create table teacher
(
tno varchar(7) primary key,
tname varchar(20) not null unique,
tposition varchar(20) not null,
tsalary smallint not null,
pwd varchar(20) not null
);
create table course
(
cno varchar(4) primary key,
cname varchar(40) not null unique,
ccredit smallint not null,
tno varchar(7) not null,
foreign key (tno) references teacher(tno)
);
create table sc
(
sno varchar(10) not null,
cno varchar(4) not null,
grade smallint not null,
primary key(sno,cno),
foreign key (sno) references student(sno),
foreign key (cno) references course(cno)
);

3插入數據

insert into student(sname,ssex,sno, sage, pwd) values('王志偉','男','180610001',20,'123456');

insert into student(sname,ssex,sno, sage, pwd) values('劉旋啓','女','180610002',19,'123456');

insert into student(sname,ssex,sno, sage, pwd) values('薯餅','女','180610011',18,'123456');

insert into student(sname,ssex,sno, sage, pwd) values('白曹彤','男','180610012',19,'123456');

insert into student(sname,ssex,sno, sage, pwd) values('黎樣寧','男','180610021',19,'123456');

insert into teacher(tno,tname, tposition, tsalary, pwd) values('t001','張三','教授',20000,'123456');

insert into teacher(tno,tname, tposition, tsalary, pwd) values('t002','李四','副教授',15000,'123456');

insert into teacher(tno,tname, tposition, tsalary, pwd) values('t003','王五','教授',35000,'123456');

insert into teacher(tno,tname, tposition, tsalary, pwd) values('t004','王八蛋','副教授',38000,'123456');

insert into teacher(tno,tname, tposition, tsalary, pwd) values('t005','李冰冰','副教授',42000,'123456');

insert into teacher(tno,tname, tposition, tsalary, pwd) values('t006','張芬芳','教授',60000,'123456');

insert into course values('6','數值分析',2,'t001');

insert into course values('2','高等數學',4,'t002');

insert into course values('7','C++語言',4,'t003');

insert into course values('5','數據結構',4,'t002');

insert into course values('1','數據庫',4,'t003');

insert into course values('3','彙編語言',3,'t004');

insert into course values('4','操作系統',3,'t005');

insert into sc values('180610001','1',92);

insert into sc values('180610001','2',85);

insert into sc values('180610001','3',88);

insert into sc values('180610002','2',90);

insert into sc values('180610002','3',80);

留部分數據後面建立視圖沒問題再插入
4建立視圖

create view courseinfo as select course.cno 課程編號,course.cname 課程名稱,teacher.tname 任課老師,course.ccredit 課程學分,countnum 選修人數,
avg_grade 平均分,max_grade 最高分,min_grade 最低分 from teacher,
course left outer join (select cname, count(*) countnum,avg(grade) avg_grade,max(grade) max_grade,min(grade) min_grade from sc,course 
where course.cno=sc.cno group by cname)a1 on (course.cname=a1.cname) where teacher.tno=course.tno;

create view studentinfo as select student.sno 學號,student.sname 姓名,(select sum(grade) from sc where sno=student.sno) 總分 ,
(select sum(ccredit) from course where cno in (select cno from sc where sno=student.sno)) 總學分 ,
(select max(grade) from sc where sc.sno in (student.sno)) 最高分,(select min(grade) from sc where sc.sno in (student.sno)) 最低分 from student;

create view teacherinfo1 as select tposition 職位,count(tno) 在任人數,avg(tsalary) 平均工資 from teacher group by tposition;

create view teacherinfo2 as select tno 教師工號,tname 教師名稱,(select count(student.sno) from student,sc,course where student.sno=sc.sno and sc.cno=course.cno and course.tno=teacher.tno) 授課學生總人數 from teacher;

5保存

Commit

建成後的大概樣式:
數據庫表

二、數據庫每個表和視圖對應類的建立

我一共建立了8個類(還有一個是User類,用於用戶登錄) 不過再建立類之前有個操作是下載oracle的插件

鏈接oracle的語句是

OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=xxxx))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";

注意在app裏面查看自己的主機地址號(xxxx)

Student.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Oracle.ManagedDataAccess.Client;
using System.Configuration;
using System.Windows;
using System.Security.AccessControl;

namespace StudentOracleMangement
{
    class Student
    {
        public string sno { get; set; }
        public string sname { get; set; }
        public string ssex { get; set; }
        public string sage { get; set; }
        public string pwd { get; set; }   
        public static void Copy()//鏡像
        {
            UserInformation.cs.Clear();//初始化
            string SelectSQL = "select sno,sname,ssex,sage,pwd from student where " +
                "sname like :sname";
            OracleParameter[] para = new OracleParameter[] { new OracleParameter(":sname",
                OracleDbType.Char, 20) };
            para[0].Value = "%";
            List<Student> list = new List<Student>();
            //創建連接,創建對象
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(SelectSQL, con);
                cmd.Parameters.AddRange(para);
                OracleDataReader odr = cmd.ExecuteReader();
                while (odr.Read())
                {
                    Student s = new Student();
                    s.sno = odr["sno"].ToString();
                    s.sname = odr.GetString(1);
                    s.ssex = odr.GetString(2);
                    s.sage = Convert.ToString(odr.GetInt32(3));
                    s.pwd = odr.GetString(4);
                    list.Add(s);
                    //拷貝鏡像                    
                    CopyStudent ns = new CopyStudent();
                    ns.sno = s.sno;
                    ns.sname = s.sname;
                    ns.ssex = s.ssex;
                    ns.sage = s.sage;
                    ns.pwd = s.pwd;
                    UserInformation.cs.Add(ns);

                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();//關閉連接
            }
        }
        public static List<Student> SelectStudent(string sname)//查詢學生
        {           
            string SelectSQL = "select sno,sname,ssex,sage,pwd from student where " +
                "sname like :sname";
            OracleParameter[] para = new OracleParameter[] { new OracleParameter(":sname",
                OracleDbType.Char, 20) };
            para[0].Value = sname + "%";
            List<Student> list = new List<Student>();
            //創建連接,創建對象
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();     
                OracleCommand cmd = new OracleCommand(SelectSQL, con);
                cmd.Parameters.AddRange(para);
                OracleDataReader odr = cmd.ExecuteReader();
                while(odr.Read())
                {
                    Student s = new Student();                   
                    s.sno = odr["sno"].ToString();
                    s.sname = odr.GetString(1);
                    s.ssex = odr.GetString(2);
                    s.sage = Convert.ToString(odr.GetInt32(3));
                    s.pwd = odr.GetString(4);                 
                    list.Add(s);                   
                }
            }catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }finally
            {
                con.Close();//關閉連接
            }
            return list;
        }
        public static List<Student> SelectStudent2(string sno)//根據學號查詢學生
        {
            string SelectSQL = "select sno,sname,ssex,sage,pwd from student where " +
                "sno like :sno";
            OracleParameter[] para = new OracleParameter[] { new OracleParameter(":sno",
                OracleDbType.Char, 20) };
            para[0].Value = sno + "%";
            List<Student> list = new List<Student>();
            //創建連接,創建對象
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(SelectSQL, con);
                cmd.Parameters.AddRange(para);
                OracleDataReader odr = cmd.ExecuteReader();
                while (odr.Read())
                {
                    Student s = new Student();
                    s.sno = odr["sno"].ToString();
                    s.sname = odr.GetString(1);
                    s.ssex = odr.GetString(2);
                    s.sage = Convert.ToString(odr.GetInt32(3));
                    s.pwd = odr.GetString(4);
                    list.Add(s);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();//關閉連接
            }
            return list;
        }
        public static List<Student> SelectStudent3(string sno)//根據學號查詢學生(不顯示密碼)
        {
            string SelectSQL = "select sno,sname,ssex,sage,pwd from student where " +
                "sno like :sno";
            OracleParameter[] para = new OracleParameter[] { new OracleParameter(":sno",
                OracleDbType.Char, 20) };
            para[0].Value = sno + "%";
            List<Student> list = new List<Student>();
            //創建連接,創建對象
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(SelectSQL, con);
                cmd.Parameters.AddRange(para);
                OracleDataReader odr = cmd.ExecuteReader();
                while (odr.Read())
                {
                    Student s = new Student();
                    s.sno = odr["sno"].ToString();
                    s.sname = odr.GetString(1);
                    s.ssex = odr.GetString(2);
                    s.sage = Convert.ToString(odr.GetInt32(3));
                    s.pwd = "******";
                    list.Add(s);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();//關閉連接
            }
            return list;
        }
        public static int DeleteStudent(string sno)//刪除
        {
            int result = 0;
            string sql = "delete from student where sno=:sno";
            OracleParameter[] para = new OracleParameter[] { new OracleParameter(":sno", OracleDbType.Char, 10) };
            para[0].Value = sno;
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(sql, con);
                cmd.Parameters.AddRange(para);
                result = cmd.ExecuteNonQuery();
            }catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }finally
            {
                con.Close();
            }
            return result;
        }
        public static int InsertStudent(Student s)//插入
        {
            int result = 0;
            string sql = "insert into student(sno,sname,ssex,sage,pwd) values(:sno,:sname,:ssex,:sage,:pwd)";
            OracleParameter[] para = new OracleParameter[] {new OracleParameter(":sno",OracleDbType.Char,10),
            new OracleParameter(":sname",OracleDbType.Char,20),
            new OracleParameter(":ssex",OracleDbType.Char,3),
            new OracleParameter(":sage",OracleDbType.Int32),
            new OracleParameter(":pwd",OracleDbType.Char,20)};
            para[0].Value = s.sno;
            para[1].Value = s.sname;
            para[2].Value = s.ssex;
            para[3].Value = s.sage;
            para[4].Value = s.pwd;
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(sql, con);
                cmd.Parameters.AddRange(para);
                result = cmd.ExecuteNonQuery();

            } catch (Exception ex){
                MessageBox.Show(ex.Message);
            }finally
            {
                con.Close();
            }
            return result;
        }
        public static int UpdateStudent(Student s)//更新數據
        {
            int result = 0;
            string sql = "update student set sname=:sname,ssex=:ssex,sage=:sage,pwd=:pwd where sno=:sno";
            OracleParameter[] para = new OracleParameter[] {new OracleParameter(":sname",OracleDbType.Char,20),
            new OracleParameter(":ssex",OracleDbType.Char,20),
            new OracleParameter(":sage",OracleDbType.Int32),
            new OracleParameter(":pwd",OracleDbType.Char,20),   
            new OracleParameter(":sno",OracleDbType.Char,10)};//接口
            para[0].Value = s.sname;
            para[1].Value = s.ssex;
            para[2].Value = s.sage;
            para[3].Value = s.pwd;
            para[4].Value = s.sno;
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(sql, con);
                cmd.Parameters.AddRange(para);
                result = cmd.ExecuteNonQuery();
            }catch (Exception ex){
                MessageBox.Show(ex.Message);
            }finally
            {
                con.Close();
            }
            return result;
        }
    }
}

StudentInfo.cs

using Oracle.ManagedDataAccess.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace StudentOracleMangement
{
    class StudentInfo
    {
        public string 學號 { get; set; }
        public string 姓名 { get; set; }
        public double 總分 { get; set; }
        public double 總學分 { get; set; }
        public double 最高分 { get; set; }
        public double 最低分 { get; set; }
        public static List<StudentInfo> SelcetStudentInfo(string sno)
        {
            string sql = "select *from studentinfo where 學號 like :學號";
            OracleParameter[] para = new OracleParameter[] { new OracleParameter(":學號", OracleDbType.Char, 20) };
            para[0].Value =sno+ "%";
            //MessageBox.Show(tname+"%");
            List<StudentInfo> list = new List<StudentInfo>();
            //創建鏈接,打開連接,創建命令對象,執行命令,關閉連接
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(sql, con);
                cmd.Parameters.AddRange(para);
                OracleDataReader odr = cmd.ExecuteReader();
                while (odr.Read())
                {
                    StudentInfo s = new StudentInfo();
                    s.學號 = odr["學號"].ToString();
                    s.姓名 = odr.GetString(1);
                    if (odr.IsDBNull(2))
                    {
                        s.總分 =0;
                    }
                    else
                    {
                        s.總分 = odr.GetDouble(2);
                    }
                    if (odr.IsDBNull(3))
                    {
                        s.總學分 = 0;
                    }
                    else
                    {
                        s.總學分 = odr.GetDouble(3);
                    }
                    if (odr.IsDBNull(4))
                    {
                        s.最高分 = 0;
                    }
                    else
                    {
                        s.最高分 = odr.GetDouble(4);
                    }
                    if (odr.IsDBNull(5))
                    {
                        s.最低分 = 0;
                    }
                    else
                    {
                        s.最低分 = odr.GetDouble(5);
                    }                                                   
                    list.Add(s);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();
            }
            
            return list;
        }
    }
}

Teachers.cs

using Oracle.ManagedDataAccess.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace StudentOracleMangement
{
    
    class Teachers
    {
        public string tno { get; set; }
        public string tname { get; set; }
        public string 職位 { get; set; }
        public double 工資 { get; set; }
        public string pwd { get; set; }
        public static List<Teachers> SelectTeacher(string tname)//查詢老師
        {            
            string SelectSQL = "select tno,tname,tposition,tsalary,pwd from teacher where " +
                "tname like :tname";
            OracleParameter[] para = new OracleParameter[] { new OracleParameter(":tname",
                OracleDbType.Char, 20) };
            para[0].Value = tname + "%";
            List<Teachers> list = new List<Teachers>();
            //創建連接,創建對象
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(SelectSQL, con);
                cmd.Parameters.AddRange(para);
                OracleDataReader odr = cmd.ExecuteReader();
                while (odr.Read())
                {
                    Teachers s = new Teachers();
                    s.tno = odr["tno"].ToString();
                    s.tname = odr.GetString(1);
                    s.職位 = odr.GetString(2);
                    s.工資 = Convert.ToDouble(odr.GetInt32(3));
                    s.pwd = odr.GetString(4);
                    list.Add(s);                    
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();//關閉連接
            }
            return list;
        }
        public static List<Teachers> SelectTeacher2(string tname)//查詢老師(不顯示密碼)
        {
            string SelectSQL = "select tno,tname,tposition,tsalary,pwd from teacher where " +
                "tname like :tname";
            OracleParameter[] para = new OracleParameter[] { new OracleParameter(":tname",
                OracleDbType.Char, 20) };
            para[0].Value = tname + "%";
            List<Teachers> list = new List<Teachers>();
            //創建連接,創建對象
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(SelectSQL, con);
                cmd.Parameters.AddRange(para);
                OracleDataReader odr = cmd.ExecuteReader();
                while (odr.Read())
                {
                    Teachers s = new Teachers();
                    s.tno = odr["tno"].ToString();
                    s.tname = odr.GetString(1);
                    s.職位 = odr.GetString(2);
                    s.工資 = Convert.ToDouble(odr.GetInt32(3));
                    s.pwd = "******";
                    list.Add(s);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();//關閉連接
            }
            return list;
        }
        public static int DeleteTeacher(string tno)//刪除
        {
            int result = 0;
            string sql = "delete from teacher where tno=:tno";
            OracleParameter[] para = new OracleParameter[] { new OracleParameter(":tno", OracleDbType.Char, 10) };
            para[0].Value = tno;
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(sql, con);
                cmd.Parameters.AddRange(para);
                result = cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();
            }
            return result;
        }

        public static void Copy()//鏡像教師信息
        {
            UserInformation.ts.Clear();//初始化
            string SelectSQL = "select tno,tname,tposition,tsalary,pwd from teacher where " +
                "tname like :tname";
            OracleParameter[] para = new OracleParameter[] { new OracleParameter(":tname",
                OracleDbType.Char, 20) };
            para[0].Value = "%";            
            //創建連接,創建對象
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(SelectSQL, con);
                cmd.Parameters.AddRange(para);
                OracleDataReader odr = cmd.ExecuteReader();
                while (odr.Read())
                {
                    Teachers s = new Teachers();
                    s.tno = odr["tno"].ToString();
                    s.tname = odr.GetString(1);
                    s.職位 = odr.GetString(2);
                    s.工資 = Convert.ToDouble(odr.GetInt32(3));
                    s.pwd = odr.GetString(4);                   
                    //拷貝鏡像

                    CopyTeacher ns = new CopyTeacher();
                    ns.tno = s.tno;
                    ns.tname = s.tname;
                    ns.職位 = s.職位;
                    ns.工資 = s.工資;
                    ns.pwd = s.pwd;
                    UserInformation.ts.Add(ns);

                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();//關閉連接
            }
        }

        public static int InsertTeacher(Teachers s)//插入
        {
            int result = 0;
            string sql = "insert into teacher(tno,tname,tposition,tsalary,pwd) values(:tno,:tname,:職位,:工資,:pwd)";
            OracleParameter[] para = new OracleParameter[] {new OracleParameter(":tno",OracleDbType.Char,10),
            new OracleParameter(":tname",OracleDbType.Char,20),
            new OracleParameter(":職位",OracleDbType.Char,3),
            new OracleParameter(":工資",OracleDbType.Double),
            new OracleParameter(":pwd",OracleDbType.Char,20)};
            para[0].Value = s.tno;
            para[1].Value = s.tname;
            para[2].Value = s.職位;
            para[3].Value = s.工資;
            para[4].Value = s.pwd;
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(sql, con);
                cmd.Parameters.AddRange(para);
                result = cmd.ExecuteNonQuery();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();
            }
            return result;
        }
        public static int UpdateTeacher(Teachers s)//更新數據
        {
            int result = 0;
            string sql = "update teacher set tname=:tname,tposition=:職位,tsalary=:工資,pwd=:pwd where tno=:tno";
            OracleParameter[] para = new OracleParameter[] {new OracleParameter(":tname",OracleDbType.Char,20),
            new OracleParameter(":職位",OracleDbType.Char,20),
            new OracleParameter(":工資",OracleDbType.Int32),
            new OracleParameter(":pwd",OracleDbType.Char,20),
            new OracleParameter(":tno",OracleDbType.Char,10)};//接口
            para[0].Value = s.tname;
            para[1].Value = s.職位;
            para[2].Value = s.工資;
            para[3].Value = s.pwd;
            para[4].Value = s.tno;
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(sql, con);
                cmd.Parameters.AddRange(para);
                result = cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();
            }
            return result;
        }
    }
}

TeacherInfo.cs

using Oracle.ManagedDataAccess.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace StudentOracleMangement
{
    class TeacherInfo
    {
        public string 職位 { get ; set ; }
        public int 在任人數 { get; set; }
        public double 平均工資 { get; set; }
        public string 教師工號{ get; set; }
        public string 教師姓名 { get; set; }
        public int 授課學生總人數 { get; set; }
        public static List<TeacherInfo> SelectTeacher()
        {
            string sql = "select *from teacherinfo1 where 職位 like :職位";
            OracleParameter[] para = new OracleParameter[] { new OracleParameter(":職位", OracleDbType.Char, 7) };
            para[0].Value = "%";
            //MessageBox.Show(tname+"%");
            List<TeacherInfo> list = new List<TeacherInfo>();
            //創建鏈接,打開連接,創建命令對象,執行命令,關閉連接
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(sql, con);
                cmd.Parameters.AddRange(para);
                OracleDataReader odr = cmd.ExecuteReader();
                while(odr.Read())
                {
                    TeacherInfo s = new TeacherInfo();
                    s.職位 = odr["職位"].ToString();
                    s.在任人數 = odr.GetInt32(1);
                    if(odr.IsDBNull(2))
                    {
                        s.平均工資 = 0;
                    }
                    else
                    {
                        s.平均工資 = odr.GetDouble(2);
                    }
                    list.Add(s);
                }
            }catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }finally
            {
                con.Close();
            }
            return list;
        }
        public static List<TeacherInfo> SelectTeacher2(string tno)
        {
            string sql = "select *from teacherinfo2 where 教師工號 like :教師工號";
            OracleParameter[] para = new OracleParameter[] { new OracleParameter(":教師工號", OracleDbType.Char, 7) };
            para[0].Value = tno + "%";
            List<TeacherInfo> list = new List<TeacherInfo>();
            //創建鏈接,打開連接,創建命令對象,執行命令,關閉連接
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(sql, con);
                cmd.Parameters.AddRange(para);
                OracleDataReader odr = cmd.ExecuteReader();
                while (odr.Read())
                {
                    TeacherInfo s_infon = new TeacherInfo();
                    //c.Cno = odr.GetString(0); //ord["cno'].
                    s_infon.教師工號 = odr["教師工號"].ToString();
                    //t.tno = odr.GetString(0);
                    s_infon.教師姓名 = odr.GetString(1);
                    if (odr.IsDBNull(2))
                        s_infon.授課學生總人數 = 0;
                    else
                        s_infon.授課學生總人數 = odr.GetInt32(2);

                    list.Add(s_infon);
                }
            }catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();
            }
            return list;
        }
    }
}

Course.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using Oracle.ManagedDataAccess.Client;
namespace StudentOracleMangement
{
    class Course
    {
        //對Course表操作
        public string cno { get; set; }
        public string cname { get; set; }
        public double ccredit { get; set; }
        public string tno { get; set; }
        public static List<Course> SelectCourse(string cname)//查詢課程
        {
            string SelectSQL = "select cno,cname,ccredit,tno from course where " +
                "cname like :cname";
            OracleParameter[] para = new OracleParameter[] { new OracleParameter(":cname",
                OracleDbType.Char, 20) };
            para[0].Value = cname + "%";
            List<Course> list = new List<Course>();
            //創建連接,創建對象
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(SelectSQL, con);
                cmd.Parameters.AddRange(para);
                OracleDataReader odr = cmd.ExecuteReader();
                while (odr.Read())
                {
                    Course s = new Course();
                    s.cno = odr["cno"].ToString();
                    s.cname = odr.GetString(1);                   
                    s.ccredit = odr.GetDouble(2);                   
                    s.tno =odr.GetString(3);               
                    list.Add(s);

                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();//關閉連接
            }
            return list;
        }
        public static int DeleteCourse(string cno)//刪除
        {
            int result = 0;
            string sql = "delete from course where cno=:cno";
            OracleParameter[] para = new OracleParameter[] { new OracleParameter(":cno", OracleDbType.Char, 10) };
            para[0].Value = cno;
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(sql, con);
                cmd.Parameters.AddRange(para);
                result = cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();
            }
            return result;
        }
        public static int InsertCourse(Course s)//插入
        {
            int result = 0;
            string sql = "insert into course(cno,cname,ccredit,tno) values(:cno,:cname,:ccredit,:tno)";
            OracleParameter[] para = new OracleParameter[] {new OracleParameter(":cno",OracleDbType.Char,10),
            new OracleParameter(":cname",OracleDbType.Char,20),
            new OracleParameter(":ccredit",OracleDbType.Double),
            new OracleParameter(":tno",OracleDbType.Char,10)};
            para[0].Value = s.cno;
            para[1].Value = s.cname;
            para[2].Value = s.ccredit;
            para[3].Value = s.tno;
            
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(sql, con);
                cmd.Parameters.AddRange(para);
                result = cmd.ExecuteNonQuery();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();
            }
            return result;
        }
        public static int UpdateCourse(Course s)//更新數據
        {
            int result = 0;
            string sql = "update course set cname=:cname,ccredit=:ccredit,tno=:tno where cno=:cno";
            OracleParameter[] para = new OracleParameter[] {new OracleParameter(":cname",OracleDbType.Char,20),
            new OracleParameter(":ccredit",OracleDbType.Double),
            new OracleParameter(":tno",OracleDbType.Char,10),           
            new OracleParameter(":cno",OracleDbType.Char,10)};//接口
            para[0].Value = s.cname;
            para[1].Value = s.ccredit;
            para[2].Value = s.tno;
            para[3].Value = s.cno;

            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(sql, con);
                cmd.Parameters.AddRange(para);
                result = cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();
            }
            return result;
        }
    }
}

*CourseInfo.cs

using Oracle.ManagedDataAccess.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace StudentOracleMangement
{
    class CourseInfo
    {
        public string 課程編號 { get; set; }
        public string 課程名稱 { get; set; }
        public string 任課老師 { get; set; }
        public double 課程學分 { get; set; }
        public int 選修人數 { get; set; }
        public double 平均分 { get; set; }
        public double 最高分 { get; set; }
        public double 最低分 { get; set; }
        public static List<CourseInfo> SelectCourseInfo(string cno)
        {
           
            string sql = "select *from courseinfo where 課程編號 like :課程編號";
            OracleParameter[] para = new OracleParameter[] { new OracleParameter(":課程編號", OracleDbType.Char, 20) };
            para[0].Value = cno + "%";
            //MessageBox.Show(tname+"%");
            List<CourseInfo> list = new List<CourseInfo>();
            //創建鏈接,打開連接,創建命令對象,執行命令,關閉連接
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(sql, con);
                cmd.Parameters.AddRange(para);
                OracleDataReader odr = cmd.ExecuteReader();
                while (odr.Read())
                {
                    CourseInfo s = new CourseInfo();
                    s.課程編號 = odr["課程編號"].ToString();
                    s.課程名稱 = odr.GetString(1);
                    s.任課老師 = odr.GetString(2);
                    if (odr.IsDBNull(3))
                    {
                        s.課程學分 = 0;
                    }
                    else
                    {
                        s.課程學分 = odr.GetDouble(3);
                    }
                    if (odr.IsDBNull(4))
                    {
                        s.選修人數 = 0;
                    }
                    else
                    {
                        s.選修人數 = odr.GetInt32(4);
                    }
                    if (odr.IsDBNull(5))
                    {
                        s.平均分 = 0;
                    }
                    else
                    {
                        s.平均分 = odr.GetDouble(5);
                    }
                    if (odr.IsDBNull(6))
                    {
                        s.最高分 = 0;
                    }
                    else
                    {
                        s.最高分 = odr.GetDouble(6);
                    }
                    if (odr.IsDBNull(7))
                    {
                        s.最低分 = 0;
                    }
                    else
                    {
                        s.最低分 = odr.GetDouble(7);
                    }
                    list.Add(s);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();
            }

            return list;
        }

    }
}

SC.cs

using Oracle.ManagedDataAccess.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Remoting.Metadata.W3cXsd2001;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace StudentOracleMangement
{
    class SC
    {
        //對SC表操作    可以用於學生選課和老師給學生成績
        public string sno { get; set; }//學號
        public string cno { get; set; }//課程號
        public double grade { get; set; }//成績
        public static List<SC> SelectSC(string sno)//查詢學生選課成績
        {
            string SelectSQL = "select sno,cno,grade from sc where " +
                "sno like :sno";
            OracleParameter[] para = new OracleParameter[] { new OracleParameter(":sno",
                OracleDbType.Char, 10) };
            para[0].Value = sno + "%";
            List<SC> list = new List<SC>();
            //創建連接,創建對象
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(SelectSQL, con);
                cmd.Parameters.AddRange(para);
                OracleDataReader odr = cmd.ExecuteReader();
                while (odr.Read())
                {
                    SC s = new SC();
                    s.sno = odr["sno"].ToString();
                    s.cno = odr.GetString(1);
                    if (odr.IsDBNull(2))
                    {
                        s.grade = 0;
                    }
                    else
                    {
                        s.grade = odr.GetDouble(2);
                    }
                    list.Add(s);

                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();//關閉連接
            }
            return list;
        }
        public static int DeleteSC(string sno)//根據學號刪除學生成績
        {
            int result = 0;
            string sql = "delete from sc where sno=:sno";
            OracleParameter[] para = new OracleParameter[] { new OracleParameter(":sno", OracleDbType.Char, 10) };
            para[0].Value = sno;
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(sql, con);
                cmd.Parameters.AddRange(para);
                result = cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();
            }
            return result;
        }
        public static int DeleteSC2(string cno)//根據課程號刪除學生成績
        {
            int result = 0;
            string sql = "delete from sc where cno=:cno";
            OracleParameter[] para = new OracleParameter[] { new OracleParameter(":sno", OracleDbType.Char, 10),
                new OracleParameter(":cno", OracleDbType.Char, 10) };
            para[1].Value = cno;
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(sql, con);
                cmd.Parameters.AddRange(para);
                result = cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();
            }
            return result;
        }
        public static int InsertSC(SC s)//插入
        {
            int result = 0;
            string sql = "insert into sc(sno,cno,grade) values(:sno,:cno,:grade)";
            OracleParameter[] para = new OracleParameter[] {new OracleParameter(":sno",OracleDbType.Char,10),
            new OracleParameter(":cno",OracleDbType.Char,10),
            new OracleParameter(":grade",OracleDbType.Double)};
            para[0].Value = s.sno;
            para[1].Value = s.cno;
            para[2].Value = s.grade;      
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(sql, con);
                cmd.Parameters.AddRange(para);
                result = cmd.ExecuteNonQuery();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();
            }
            return result;
        }
        public static int InsertSC2(string Ssno,string Scno)//學生選課,添加sno和cno,grade爲0
        {
            int result = 0;
            string sql = "insert into sc(sno,cno,grade) values(:sno,:cno,:grade)";
            OracleParameter[] para = new OracleParameter[] {new OracleParameter(":sno",OracleDbType.Char,10),
            new OracleParameter(":cno",OracleDbType.Char,10),
            new OracleParameter(":grade",OracleDbType.Double)};
            para[0].Value = Ssno;
            para[1].Value = Scno;
            para[2].Value = 0;
            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(sql, con);
                cmd.Parameters.AddRange(para);
                result = cmd.ExecuteNonQuery();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();
            }
            return result;
        }
        public static int UpdateSC(SC s)//更新數據
        {
            int result = 0;
            string sql = "update sc set grade=:grade where sno=:sno and cno=:cno";
            OracleParameter[] para = new OracleParameter[] {new OracleParameter(":grade",OracleDbType.Double),          
            new OracleParameter(":sno",OracleDbType.Char,10),
             new OracleParameter(":cno",OracleDbType.Char,10)};//接口
            para[0].Value = s.grade;
            para[1].Value = s.sno;
            para[2].Value = s.cno;
           

            OracleConnection con = new OracleConnection(/*ConfigurationManager.ConnectionStrings["strCon"].ConnectionString*/);
            con.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));Persist Security Info=True;User ID=lsz;Password=Lsznb;";
            try
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(sql, con);
                cmd.Parameters.AddRange(para);
                result = cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con.Close();
            }
            return result;
        }
    }
}

UserInformation.cs(用於用戶登錄)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace StudentOracleMangement
{
    //鏡像,用於存放學生和老師的基本信息
    //學生類鏡像
    public class CopyStudent
    {

        public string sno { get; set; }
        public string sname { get; set; }
        public string ssex { get; set; }
        public string sage { get; set; }
        public string pwd { get; set; }
    }
    public class CopyTeacher
    {

        public string tno { get; set; }
        public string tname { get; set; }
        public string 職位 { get; set; }
        public double 工資 { get; set; }
        public string pwd { get; set; }
    }

    public class UserInformation
    {
        public static List<CopyStudent> cs = new List<CopyStudent>();//存放student表裏面的信息
        public static List<CopyTeacher> ts = new List<CopyTeacher>();//存放teacher表裏面的信息
        public UserInformation()
        {           
        }
    } 
}


小總結:

  1. 基本思路一致(查找函數、添加函數、刪除函數、更新函數)
  2. 注意的地方是有的表比如sc表裏面有兩個外鍵,那麼在窗口實現的時候注意不要修改。
  3. 在存用戶信息的時候用委託的方式可以在管理員操作後及時載入,避免添加了新用戶,其卻登不了系統。

三、C#窗口的開發

登錄界面預覽:
登錄界面
cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Oracle.ManagedDataAccess.Client;
using static StudentOracleMangement.登錄界面;
using static StudentOracleMangement.Teacher;
using static StudentOracleMangement.Manger;
namespace StudentOracleMangement
{
    /// <summary>
    /// MainWindow.xaml 的交互邏輯
    /// </summary>
    public partial class MainWindow : Window
    {
        public 登錄界面 form1 = new 登錄界面();
        public Teacher form2 = new Teacher();
        public Manger form3 = new Manger();
        public MainWindow()
        {
            InitializeComponent();
        }
        private void 登錄界面_RMW()
        {
            form1.Hide();
            this.Show();
        }
        private void 教師界面_RMW()
        {
            form2.Hide();
            this.Show();
        }
        private void 管理界面_RMW()
        {
            form3.Hide();
            this.Show();
        }

        private void login_Click(object sender, RoutedEventArgs e)//登錄
        {
            if (xStudent.IsChecked == true) //跳轉到學生管理界面
            {
                bool flag1 = false;
                foreach (var a in UserInformation.cs)
                {
                    if (a.sname == user.Text && a.pwd == password.Password)//找到了
                    {
                        flag1 = true;form1.s = a;form1.Title ="學生 :"+ user.Text;
                        form1.Show();
                        this.Hide();//當前窗口隱藏
                        form1.RMW += new ReturnMainWindow(登錄界面_RMW);
                    }
                }
                if(!flag1)//沒找到
                {
                    System.Windows.MessageBox.Show("賬號或者密碼錯誤!");
                }
            }
            else if (Teacher.IsChecked == true)//跳轉到教師管理界面
            {
                bool flag1 = false;
                foreach (var a in UserInformation.ts)
                {
                    if (a.tname == user.Text && a.pwd == password.Password)
                    {
                        flag1 = true;form2.t = a;form2.Title = "教師 :"+user.Text;
                        form2.Show();
                        this.Hide();//當前窗口隱藏  
                        form2.RMW += new ReturnMainWindow3(教師界面_RMW);
                    }
                }
                if (!flag1)//沒找到
                {
                    System.Windows.MessageBox.Show("賬號或者密碼錯誤!");
                }
            }
            else if (user.Text == "manger" && password.Password == "333" && Manger.IsChecked == true)//跳轉到管理員界面
            {
                form3.Show();
                this.Hide();//當前窗口隱藏              
                form3.RMW += new ReturnMainWindow2(管理界面_RMW);
            }
            else
            {
                System.Windows.MessageBox.Show("賬號或者密碼錯誤!");
            }
        }
        private void Out_Click(object sender, RoutedEventArgs e)//退出程序
        {
            Application.Current.Shutdown();
        }

        private void Close_EnD(object sender, System.ComponentModel.CancelEventArgs e)
        {
            Application.Current.Shutdown();
        }

        private void Load_Information(object sender, RoutedEventArgs e)//導入學生數據
        {
            Student.Copy();
            Teachers.Copy();
        }
    }
}

學生界面預覽:
學生
cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using static StudentOracleMangement.Student;
namespace StudentOracleMangement
{
    /// <summary>
    /// 登錄界面.xaml 的交互邏輯
    /// </summary>
    public partial class 登錄界面 : Window
    {
        //定義委託返回主窗口
        public event ReturnMainWindow RMW;
        public delegate void ReturnMainWindow();
        public CopyStudent s = new CopyStudent();        
        public 登錄界面()
        {
            InitializeComponent();
        }

        private void Return_Click(object sender, RoutedEventArgs e)
        {
            RMW();
        }

        private void Select_Click(object sender, RoutedEventArgs e)//查詢
        {          
            this.dataGridView1.ItemsSource = Student.SelectStudent3(this.textbox1.Text);
            this.dataGridView2.ItemsSource = StudentInfo.SelcetStudentInfo(this.textbox1.Text);
        }

        private void dataGridView1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {            
        }

        private void Student_Load(object sender, RoutedEventArgs e)//導入學生信息
        {
            this.dataGridView1.ItemsSource = Student.SelectStudent3(s.sno);
            this.dataGridView2.ItemsSource = StudentInfo.SelcetStudentInfo(s.sno);
        }

        private void Button_Click(object sender, RoutedEventArgs e)//選課
        {
            StudentSelectCourse form1 = new StudentSelectCourse();
            form1.SetSno(s.sno);
            form1.Show();
        }

        private void Close_Es(object sender, System.ComponentModel.CancelEventArgs e)
        {
            Application.Current.Shutdown();
        }
    }
}

教師界面預覽:
教師界面
cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace StudentOracleMangement
{
    /// <summary>
    /// Teacher.xaml 的交互邏輯
    /// </summary>
    public partial class Teacher : Window
    {
        public event ReturnMainWindow3 RMW;
        public delegate void ReturnMainWindow3();
        public CopyTeacher t = new CopyTeacher();
        public Teacher()
        {
            InitializeComponent();
        }

        private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {

        }

        private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
        {

        }

        private void Button_Click(object sender, RoutedEventArgs e)//返回
        {
            RMW();
        }

        private void Close_Et(object sender, System.ComponentModel.CancelEventArgs e)
        {
            Application.Current.Shutdown();
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)//查詢
        {
            this.dataGridView1.ItemsSource = Teachers.SelectTeacher2(textbox1.Text);
        }

        private void Load_Teacher(object sender, RoutedEventArgs e)//導入
        {
            TZW.Text = t.職位;
            TGZ.Text = t.工資.ToString();
            TNAME.Text = t.tname;
            this.dataGridView1.ItemsSource = Teachers.SelectTeacher2(t.tname);
        }

        private void MSG_Click(object sender, RoutedEventArgs e)//給學生賦成績
        {
            MangeSC form1 = new MangeSC();
            form1.Show();
        }
    }
}

管理員界面預覽:
管理員
cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using static StudentOracleMangement.MangeStudent;
using static StudentOracleMangement.MangeTeacher;
using static StudentOracleMangement.MangeCourse;
using static StudentOracleMangement.MangeSC;
namespace StudentOracleMangement
{
    /// <summary>
    /// Manger.xaml 的交互邏輯
    /// </summary>
    public partial class Manger : Window
    {
        //定義委託返回主窗口
        public event ReturnMainWindow2 RMW;
        public delegate void ReturnMainWindow2();
        public MangeStudent form1=new MangeStudent();
        public MangeTeacher form2 = new MangeTeacher();
        public MangeCourse form3 = new MangeCourse();
        public MangeSC form4 = new MangeSC();
        public Manger()
        {
            InitializeComponent();
        }

        private void MS_Click(object sender, RoutedEventArgs e)//學生
        {
            if(form1.IsDisposed)
            {
                form1 = new MangeStudent();
            }           
            form1.Show();
        }

        private void MT_Click(object sender, RoutedEventArgs e)//教師
        {
            if (form2.IsDisposed)
            {
                form2 = new MangeTeacher();
            }
            form2.Show();
        }

        private void MC_Click(object sender, RoutedEventArgs e)//課程
        {
            if (form3.IsDisposed)
            {
                form3 = new MangeCourse();
            }
            form3.Show();
        }

        private void Button_Click(object sender, RoutedEventArgs e)//返回
        {
            Student.Copy();
            Teachers.Copy();
            RMW();
        }

        private void MSC_Click(object sender, RoutedEventArgs e)//成績
        {
            if (form4.IsDisposed)
            {
                form4 = new MangeSC();
            }
            form4.Show();
        }

        private void Close_Em(object sender, System.ComponentModel.CancelEventArgs e)
        {
            Application.Current.Shutdown();
        }
    }
}

下面的窗口幾乎換湯不換藥,差不都那個思路,有手就行
學生管理窗口:
學生管理窗口
這裏要注意導入方式和DataGridView裏面列的添加按鈕,反正我覺得wpf的gridview有時不如dgv方便。
在這裏插入圖片描述
點擊添加項目數據源
在這裏插入圖片描述
在這裏插入圖片描述
在這裏添加你寫的類
然後記得添加按鈕(添加類)
在這裏插入圖片描述
添加完後不要忘記調整屬性
在這裏插入圖片描述
cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static StudentOracleMangement.Student;
using static StudentOracleMangement.InsertStudent;
using static StudentOracleMangement.StudentUpData;
namespace StudentOracleMangement
{
    public partial class MangeStudent : Form
    {
        public MangeStudent()
        {
            InitializeComponent();
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void MangeStudent_Load(object sender, EventArgs e)
        {
            this.dataGridView1.DataSource = Student.SelectStudent(this.textBox1.Text);
        }

        private void button1_Click(object sender, EventArgs e)//添加學生
        {
            InsertStudent form1 = new InsertStudent();
            form1.Show();
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (this.dataGridView1.Rows.Count == 0)
                return;
            if (e.RowIndex < 0)
                return;
            DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex];
            if(e.ColumnIndex==5)
            {
                //刪除按鈕
                string sno = row.Cells[0].Value.ToString();
                if(Student.DeleteStudent(sno)==1)
                {
                    MessageBox.Show("刪除學生成功!");
                }
            }
            else
            {
                if (e.ColumnIndex == 6)
                {
                    //修改
                    Student s = (Student)row.DataBoundItem;
                    StudentUpData form1 = new StudentUpData();
                    form1.SetTextBox_Text(s.sno, s.sname, s.ssex, s.sage, s.pwd);
                    form1.Show();
                }
            }
        }

        private void Select_Click(object sender, EventArgs e)//查詢
        {
            this.dataGridView1.DataSource = Student.SelectStudent(this.textBox1.Text);
        }

        private void button2_Click(object sender, EventArgs e)//統計
        {
            StudentTable form1 = new StudentTable();
            form1.Show();
        }
    }
}

這裏面有些新窗口添加和更新差不多,統計則是導入視圖的表
添加窗口:
在這裏插入圖片描述
cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static StudentOracleMangement.Student;
namespace StudentOracleMangement
{
    public partial class InsertStudent : Form
    {
        public InsertStudent()
        {
            InitializeComponent();
        }

        private void 添加_Click(object sender, EventArgs e)//添加
        {
            Student s = new Student();
            s.sno = SNO.Text;
            s.sname = SNAME.Text;
            s.ssex = SSEX.Text;
            s.sage = SAGE.Text;
            s.pwd = SPWD.Text;
            //存入數據庫
            if(Student.InsertStudent(s)==1)
            {
                MessageBox.Show("插入學生數據成功!");
            }
        }

        private void label5_Click(object sender, EventArgs e)
        {

        }

        private void label4_Click(object sender, EventArgs e)
        {

        }

        private void label3_Click(object sender, EventArgs e)
        {

        }

        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void SPWD_TextChanged(object sender, EventArgs e)
        {

        }

        private void SAGE_TextChanged(object sender, EventArgs e)
        {

        }

        private void SSEX_TextChanged(object sender, EventArgs e)
        {

        }

        private void SNO_TextChanged(object sender, EventArgs e)
        {

        }

        private void SNAME_TextChanged(object sender, EventArgs e)
        {

        }
    }
}

統計窗口:
在這裏插入圖片描述
cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static StudentOracleMangement.StudentInfo;
namespace StudentOracleMangement
{
    public partial class StudentTable : Form
    {
        public StudentTable()
        {
            InitializeComponent();
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void Load_Student(object sender, EventArgs e)//導入學生視圖信息
        {
            this.dataGridView1.DataSource = StudentInfo.SelcetStudentInfo(this.textBox1.Text);
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void Select_Click(object sender, EventArgs e)//查詢
        {
            this.dataGridView1.DataSource = StudentInfo.SelcetStudentInfo(this.textBox1.Text);
        }
    }
}

其餘的教師、課程、成績類似。

有手就行

當然,學生界面還有選課功能,教師界面還有給學生評分功能(得一個教師只能評他自己教的學生的成績)
下面舉例選課功能:
在這裏插入圖片描述
裏面有兩個按鈕,一個選課,一個退選
cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace StudentOracleMangement
{
    public partial class StudentSelectCourse : Form
    {
        public string sno;
        public StudentSelectCourse()
        {
            InitializeComponent();
        }
        public void SetSno(string a)
        {
            sno = a;
        }
        private void Load_course(object sender, EventArgs e)//導入課程信息
        {
            this.dataGridView1.DataSource = Course.SelectCourse(this.textBox1.Text);
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)//表格button
        {
            if (this.dataGridView1.Rows.Count == 0)
                return;
            if (e.RowIndex < 0)
                return;
            DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex];
            if (e.ColumnIndex == 4)
            {
                //選課
                string cno = row.Cells[0].Value.ToString();
                if (SC.InsertSC2(sno,cno) == 1)
                {
                    MessageBox.Show("選課成功!");
                }
            }
            else
            {
                //退課
                if (e.ColumnIndex == 5)
                {
                    string cno = row.Cells[0].Value.ToString();
                    if (SC.DeleteSC2(cno) == 1)
                    {
                        MessageBox.Show("退課成功!");
                    }
                }
            }
        }

        private void Select_Click(object sender, EventArgs e)//查詢
        {
            this.dataGridView1.DataSource = Course.SelectCourse(this.textBox1.Text);
        }
    }
}

部分總結:

  1. 就是一個學生表,裏面可以添加、修改、刪除學生,還能打包學生的數據,統計成新的表格(前面建立的學生視圖)。
  2. 其餘的教師、課程、成績類似。
  3. 管理員返回時因爲伴隨數據的修改應當通過委託的方式來更新用戶信息,通過學生類和教師類的Copy()

總結

0.整個運行結果圖:

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

  1. 主要耗時點:(數據庫的建立_E-R圖,連接數據的接口,用戶類的建立_要在需要鏡像的類裏面copy_可能是我想多了,試了幾種辦法,發現解決問題還挺簡單的)
  2. 數據結構的上下級關係(程序運行的順序)

程序流程圖

  1. 實驗報告一個個截圖貼代碼比較費時
  2. 比較繁瑣,但是基本思路差不多。本次實驗也是多虧了師兄的數據庫建立思路才能順利完成。

評價:建庫一時爽,編程火葬場

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章