1)实验目的

通过实验,使学生掌握数据库系统设计和开发的一般方法,能够设计并实现简单的数据库系统。

2)实验要求

熟悉实验室实验环境,掌握实验预备知识,了解实验中故障排除的基本方法。实验中根据实验要求完成相应的任务,并独立完成实验报告。

3)实验环境

Oracle 11g,windows 10;

4)实验内容和步骤

假设有“教师”、“学生”、“课程”三个实体,教师的基本信息包括:工号、姓名、职称、工资,课程的基本信息包括:课程号、课程名、学分数,学生的基本信息包括:学号、姓名、性别、年龄。系统必须满足以下要求:

  1. 一门课程只能有一个教师任课,一个教师可以上多门课程;
  2. 一个学生可以选修多门课程,一门课程可以由多个学生来选修,记录不同学生选修不同课程的成绩;
  3. 系统包含两类用户,即管理员和学生,管理员登录系统后具有如下功能:
    • 维护(添加、删除和修改等基本任务)学生基本信息、教师基本信息和课程基本信息等工作;
    • 管理员可以为学生重置密码;
    • 当学生选修了某门课程,课程成绩由管理员录入;
    • 能够统计不同职称的教师的数量、不同职称的教师的平均工资,可以统计每门课程的平均成绩、最高分、最低分;统计每个学生选修课程的总学分;
    • 修改密码和个人基本信息。
  4. 学生利用学号和密码登录系统后具有如下功能:
    • 修改密码和个人基本信息;
    • 选修课程、退选课程;
    • 查询选修课程的成绩;
    • 统计全部选修课程以及已经完成的(即60分以上)选修课程的总学分。

根据上述描述,解答下列问题:

  1. 设计并画出E-R图,要求标注连通词(即联系类型);
  2. 将E-R图转化为关系模型,并指出各关系的主码和外码;
  3. 在MySql、SQL Server、Oracle中选择一个数据库管理系统,并设计数据库的物理结构;
  4. 选择一门熟悉的面向对象程序设计语言,完成系统开发。

注:实验报告最低要求必须包括以下内容:(1)E-R图;(2)转变为关系模型得到的关系模式,即逻辑结构设计;(3)相关表的SQL语句,包括创建表的语句、创建相关视图的语句、创建相关索引的语句等。

对于完成开发的同学,实验报告应该包括主要界面的功能测试(需要截图)以及相关的实现代码。

1E-R

正在上传…重新上传取消

2)将E-R图转化为关系模型

学生(学号,姓名,性别,年龄);

课程(课程号,课程名,学分数);

老师(工号,姓名,工资,职称);

选修(学号课程号,成绩);外码学号引用学生(学号),外码课程号引用课程(课程号);

授课(工号课程号);外码工号引用老师(工号),外码课程号引用课程(课程号);

3)学生管理系统功能

正在上传…重新上传取消

4)登录功能介绍

正在上传…重新上传取消

public partial class FrmLogin : Form

{

public static string loginName = null;

public FrmLogin()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

//判断用户名和密码是否正确,如果登录成功,设置登录框的DialogResult.OK

//否则显示"用户名或密码错误"

string username = tbUsername.Text;

string pwd=tbPwd.Text;

string sql = "select sno,sname from student where sno like :sno and pwd=:pwd";

OracleParameter[] para = new OracleParameter[]

{

new OracleParameter(":sno",OracleDbType.Varchar2,9),

new OracleParameter(":pwd",OracleDbType.Varchar2,20)

};

para[0].Value = username;

para[1].Value = pwd;

OracleConnection con = new OracleConnection(Program.strCon);//1.建立连接

try

{

con.Open(); //2.打开连接对象

OracleCommand cmd = new OracleCommand(sql, con);  //3.创建命令对象

cmd.Parameters.AddRange(para);

OracleDataReader odr = cmd.ExecuteReader(); //4.执行命令

if (odr.Read())

{   loginName=odr.GetString(0);

this.DialogResult = DialogResult.OK;

}

else MessageBox.Show("用户名或者密码错误");

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

con.Close();//5.关闭连接

}

}

}

5)管理员功能介绍

 (1)首页

正在上传…重新上传取消

public partial class MainFrm : Form

{

public MainFrm()

{

InitializeComponent();

}

private void 查询学生ToolStripMenuItem_Click(object sender, EventArgs e)

{

FrmStuQuery frm = new FrmStuQuery();

frm.MdiParent = this;

frm.Show();

}

private void 添加学生ToolStripMenuItem_Click(object sender, EventArgs e)

{

FrmStuInsert frm = new FrmStuInsert();

frm.MdiParent = this;

frm.Show();

}

private void 查询课程ToolStripMenuItem_Click(object sender, EventArgs e)

{

FrmCourseQuery frm = new FrmCourseQuery();

frm.MdiParent = this;

frm.Show();

}

private void 添加课程ToolStripMenuItem_Click(object sender, EventArgs e)

{

FrmCourseInsert frm = new FrmCourseInsert();

frm.MdiParent= this;

frm.Show();

}

private void 统计ToolStripMenuItem_Click(object sender, EventArgs e)

{

//显示统计窗体

FrmStatistics frm = new FrmStatistics();

frm.MdiParent=this;

frm.Show();

}

private void MainFrm_Load(object sender, EventArgs e)

{

this.Text = "学生信息管理系统,当前登录用户名是:" + FrmLogin.loginName;

}

private void 查询教师ToolStripMenuItem_Click(object sender, EventArgs e)

{

FrmTeaQuery frm = new FrmTeaQuery();

frm.MdiParent =this;

frm.Show();

}

private void 添加教师ToolStripMenuItem_Click(object sender, EventArgs e)

{

FrmTeaInsert frm = new FrmTeaInsert();

frm.MdiParent = this;

frm.Show();

}

private void 选修情况ToolStripMenuItem_Click(object sender, EventArgs e)

{

FrmScQuery frm = new FrmScQuery();

frm.MdiParent = this;

frm.Show();

}

}

(2)学生管理

正在上传…重新上传取消

public partial class FrmStuQuery : Form

{

public FrmStuQuery()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)   //查询

{

//string sql = this.textBox1.Text;

string sql = string.Format("select sno,sname,ssex,sage,pwd from student where sname like '{0}%'",textBox1.Text);

//连接到数据库执行sql命令的一般步骤

OracleConnection con = new OracleConnection(Program.strCon);//1.建立连接

try

{

con.Open(); //2.打开连接对象

OracleCommand cmd = new OracleCommand(sql, con);  //3.创建命令对象

OracleDataReader odr = cmd.ExecuteReader(); //4.执行命令

if (odr.HasRows)

{

BindingSource bs = new BindingSource();

bs.DataSource = odr;

dataGridView1.DataSource = bs;

}

else dataGridView1.DataSource = null;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

con.Close();//5.关闭连接

}

}

private void button2_Click(object sender, EventArgs e)  //删除

{

if (dataGridView1.SelectedRows.Count == 0) return;

if (MessageBox.Show("是否删除数据", "请确认信息", MessageBoxButtons.OKCancel) == DialogResult.Cancel) return;

DataGridViewRow row =dataGridView1.SelectedRows[0];

string sno = row.Cells[0].Value.ToString();

string sql = string.Format("delete from student where sno='{0}'", sno);

//建立连接

OracleConnection con = new OracleConnection(Program.strCon);

try

{

con.Open();

OracleCommand cmd = new OracleCommand(sql, con);

if (1 == cmd.ExecuteNonQuery())

{

MessageBox.Show("删除成功");

dataGridView1.Rows.Remove(row);

}

else

MessageBox.Show("没有找到对应的学号的学生");

}

catch(Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

con.Close();

}

}

private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)

{

//用户双击了DataGridView的单元格内容,打开新的窗体,修改选择学生信息

if(dataGridView1.SelectedRows.Count == 0) return;

FrmStuUpdate frm = new FrmStuUpdate();

//把选中的行内容依次填写到窗体的文本框

DataGridViewRow row = dataGridView1.SelectedRows[0];

frm.tbSno.Text = row.Cells[0].Value.ToString();

frm.tbSname.Text = row.Cells[1].Value.ToString();

frm.tbSsex.Text = row.Cells[2].Value.ToString();

frm.tbSage.Text = row.Cells[3].Value.ToString();

frm.tbPwd.Text = row.Cells[4].Value.ToString();

frm.ShowDialog(this);

}

public partial class FrmStuUpdate : Form

{

public FrmStuUpdate()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

string sql = string.Format("update student set sname='{0}',ssex='{1}',sage={2},pwd={3} where sno='{4}'",

tbSname.Text,tbSsex.Text,tbSage.Text,tbPwd.Text,tbSno.Text);

OracleConnection con = new OracleConnection(Program.strCon);

try

{

con.Open();

OracleCommand cmd = new OracleCommand(sql, con);

if (1 == cmd.ExecuteNonQuery())

{

MessageBox.Show("修改成功");

this.Close();

}

else

MessageBox.Show("没有找到对应的学号的学生");

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

con.Close();

}

}

private void FrmStuUpdate_Load(object sender, EventArgs e)

{

}

}

}

public partial class FrmStuInsert : Form

{

public FrmStuInsert()

{

InitializeComponent();

}

private void FrmStuInsert_Load(object sender, EventArgs e)

{

}

private void button1_Click(object sender, EventArgs e)

{

string sql = string.Format("insert into student(sno,sname,ssex,sage) values('{0}','{1}','{2}','{3}')"

, tbSno.Text, tbSname.Text, tbSsex.Text, tbSage.Text);

OracleConnection con = new OracleConnection(Program.strCon);

try

{

con.Open();

OracleCommand cmd = new OracleCommand(sql, con);

if (1 == cmd.ExecuteNonQuery())

{

MessageBox.Show("插入成功");

}

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

con.Close();

}

}

(3)课程管理

正在上传…重新上传取消

public class Course

{

public string Cno { get; set; }

public string Cname { get; set; }

public string Ctno { get; set; }

public int Ccredit { get; set; }

//与course表相关的数据库操作实现在course类中

//根据输入的课程号查找课程列表

public static List<Course> SelectCourse(string canme)

{

List<Course> list = new List<Course>();

string sql = "select cno,cname,tno,ccredit from course where cname like:cname";

OracleParameter[] para = new OracleParameter[]

{

new OracleParameter(":cname",OracleDbType.Varchar2,4)

};

para[0].Value = canme+"%";

OracleConnection con = new OracleConnection(Program.strCon);

try

{

con.Open();

OracleCommand cmd = new OracleCommand(sql, con);

cmd.Parameters.AddRange(para);

OracleDataReader odr = cmd.ExecuteReader();

while (odr.Read())

{

Course c = new Course();

c.Cno = odr.GetString(0);

c.Cname = odr.GetString(1);

c.Ctno = odr.GetString(2);

c.Ccredit = odr.GetInt16(3);

list.Add(c);

}

}

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.Varchar2,4)

};

para[0].Value=cno;

OracleConnection con= new OracleConnection(Program.strCon);

try

{

con.Open();

OracleCommand cmd = new OracleCommand(sql, con);

cmd.Parameters.AddRange(para);

result = cmd.ExecuteNonQuery();

}

finally

{

con.Close();

}

return result;

}

public static int UpdateCourse(Course c)

{

string sql = "update course set cname=:canme,tno=:ctno,ccredit=:ccredit where cno=:cno";

OracleParameter[] para = new OracleParameter[]

{

new OracleParameter(":cname",OracleDbType.Varchar2,40),

new OracleParameter(":ctno",OracleDbType.Varchar2,4),

new OracleParameter(":ccredit",OracleDbType.Int16),

new OracleParameter(":cno",OracleDbType.Varchar2,4)

};

para[0].Value = c.Cname;

para[1].Value = c.Ctno;

para[2].Value = c.Ccredit;

para[3].Value = c.Cno;

int result = 0;

OracleConnection con = new OracleConnection(Program.strCon);

try

{

con.Open();

OracleCommand cmd = new OracleCommand(sql, con);

cmd.Parameters.AddRange(para);

result = cmd.ExecuteNonQuery();

}

finally

{

con.Close();

}

return result;

}

public static int InsertCourse(Course c)

{

string sql = "insert into course (cno,cname,tno,ccredit) values(:cno,:cname,:ctno,:ccredit)";

OracleParameter[] para = new OracleParameter[]

{

new OracleParameter(":cno", OracleDbType.Varchar2, 4),

new OracleParameter(":cname",OracleDbType.Varchar2,40),

new OracleParameter(":ctno",OracleDbType.Varchar2,4),

new OracleParameter(":ccredit",OracleDbType.Int16)

};

para[0].Value = c.Cno;

para[1].Value = c.Cname;

para[2].Value = c.Ctno;

para[3].Value = c.Ccredit;

int result = 0;

OracleConnection con = new OracleConnection(Program.strCon);

try

{

con.Open();

OracleCommand cmd = new OracleCommand(sql, con);

cmd.Parameters.AddRange(para);

result = cmd.ExecuteNonQuery();

}

finally

{

con.Close();

}

return result;

}

}

public partial class FrmCourseQuery : Form

{

public FrmCourseQuery()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

try

{

this.dataGridView1.DataSource = Course.SelectCourse(this.textBox1.Text);

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)

{

//用户单击了datagridview1的单元格,参数e会记录你单击的是哪一行,哪一列

// MessageBox.Show(e.RowIndex.ToString() + "," + e.ColumnIndex.ToString());

if (e.RowIndex < 0) return;

DataGridViewRow row= dataGridView1.Rows[e.RowIndex];

Course c = (Course)row.DataBoundItem;

try

{

if (e.ColumnIndex == 4)

{ //点击了第e.RowIndex行的删除按钮,删除课程号等于c.cno的课程

if (MessageBox.Show("是否删除数据", "请确认信息", MessageBoxButtons.OKCancel) == DialogResult.Cancel)

return;

if (1 == Course.DeleteCourse(c.Cno))

MessageBox.Show("删除成功");

else MessageBox.Show("没有找到对应的课程号的课程");

}

if (e.ColumnIndex == 5)

{ //点击了第e.RowIndex行的修改按钮,那么打开一个窗体修改课程c

FrmCourseUpdate frm= new FrmCourseUpdate();

frm.tbCno.Text = c.Cno;

frm.tbCname.Text = c.Cname;

frm.tbCtno.Text = c.Ctno;

frm.tbCcredit.Text=c.Ccredit.ToString();

frm.ShowDialog(this);

}

}

catch(Exception ex)

{

MessageBox.Show(ex.Message);

}

}

public partial class FrmCourseUpdate : Form

{

public FrmCourseUpdate()

{

InitializeComponent();

}

private void label3_Click(object sender, EventArgs e)

{

}

private void button1_Click(object sender, EventArgs e)

{   //把修改后的磕碜信息存储到数据库

Course c = new Course();

c.Cno=this.tbCno.Text;

c.Cname=tbCname.Text;

c.Ctno=tbCtno.Text;

c.Ccredit=Convert.ToInt32(tbCcredit.Text);

//调用course类的函数,把修改后的课程c的信息更新到数据库

try

{

if (1 == Course.UpdateCourse(c))

{

MessageBox.Show("修改成功");

this.Close();

}

else MessageBox.Show("没有找到对应的课程号的课程");

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

public partial class FrmCourseInsert : Form

{

public FrmCourseInsert()

{

InitializeComponent();

}

private void FrmCourseInsert_Load(object sender, EventArgs e)

{

}

private void button1_Click(object sender, EventArgs e)

{   //把用户输入的课程信息存储到数据库

Course c = new Course();

c.Cno = tbCno.Text;

c.Cname = tbCname.Text;

c.Ctno = tbCtno.Text;

c.Ccredit = Convert.ToInt32(tbCcredit.Text);

//调用course.insertCourse(c)插入数据到数据库

try

{

Course.InsertCourse(c);

MessageBox.Show("插入成功");

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

}

}

正在上传…重新上传取消

public partial class FrmScQuery : Form

{

public FrmScQuery()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

string sql = string.Format("select sno,cno,grade from sc where sno like '{0}%'", textBox1.Text);

//连接到数据库执行sql命令的一般步骤

OracleConnection con = new OracleConnection(Program.strCon);//1.建立连接

try

{

con.Open(); //2.打开连接对象

OracleCommand cmd = new OracleCommand(sql, con);  //3.创建命令对象

OracleDataReader odr = cmd.ExecuteReader(); //4.执行命令

if (odr.HasRows)

{

BindingSource bs = new BindingSource();

bs.DataSource = odr;

dataGridView1.DataSource = bs;

}

else dataGridView1.DataSource = null;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

con.Close();//5.关闭连接

}

}

private void button2_Click(object sender, EventArgs e)

{

if (dataGridView1.SelectedRows.Count == 0) return;

if (MessageBox.Show("是否删除数据", "请确认信息", MessageBoxButtons.OKCancel) == DialogResult.Cancel) return;

DataGridViewRow row = dataGridView1.SelectedRows[0];

string sno = row.Cells[0].Value.ToString();

string cno = row.Cells[1].Value.ToString();

string sql = string.Format("delete from sc where sno='{0}' and cno='{1}'", sno,cno);

//建立连接

OracleConnection con = new OracleConnection(Program.strCon);

try

{

con.Open();

OracleCommand cmd = new OracleCommand(sql, con);

if (1 == cmd.ExecuteNonQuery())

{

MessageBox.Show("删除成功");

dataGridView1.Rows.Remove(row);

}

else

MessageBox.Show("没有找到对应的学号的学生");

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

con.Close();

}

}

private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)

{

//用户双击了DataGridView的单元格内容,打开新的窗体,修改选择学生信息

if (dataGridView1.SelectedRows.Count == 0) return;

FrmScUpdate frm = new FrmScUpdate();

//把选中的行内容依次填写到窗体的文本框

DataGridViewRow row = dataGridView1.SelectedRows[0];

frm.tbSno.Text = row.Cells[0].Value.ToString();

frm.tbCno.Text = row.Cells[1].Value.ToString();

frm.tbGrade.Text = row.Cells[2].Value.ToString();

frm.ShowDialog(this);

}

public partial class FrmScUpdate : Form

{

public FrmScUpdate()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

string sql = string.Format("update sc set grade={0} where sno='{1}' and cno='{2}'",

tbGrade.Text, tbSno.Text, tbCno.Text);

OracleConnection con = new OracleConnection(Program.strCon);

try

{

con.Open();

OracleCommand cmd = new OracleCommand(sql, con);

if (1 == cmd.ExecuteNonQuery())

{

MessageBox.Show("登入成绩成功");

this.Close();

}

else

MessageBox.Show("登入成绩失败");

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

con.Close();

}

}

(4)教师管理

正在上传…重新上传取消

public partial class FrmTeaQuery : Form

{

public FrmTeaQuery()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

//string sql = this.textBox1.Text;

string sql = string.Format("select tno,tname,tsalary,tposts from teacher where tname like '{0}%'", textBox1.Text);

//连接到数据库执行sql命令的一般步骤

OracleConnection con = new OracleConnection(Program.strCon);//1.建立连接

try

{

con.Open(); //2.打开连接对象

OracleCommand cmd = new OracleCommand(sql, con);  //3.创建命令对象

OracleDataReader odr = cmd.ExecuteReader(); //4.执行命令

if (odr.HasRows)

{

BindingSource bs = new BindingSource();

bs.DataSource = odr;

dataGridView1.DataSource = bs;

}

else dataGridView1.DataSource = null;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

con.Close();//5.关闭连接

}

}

private void button2_Click(object sender, EventArgs e)

{

if (dataGridView1.SelectedRows.Count == 0) return;

if (MessageBox.Show("是否删除数据", "请确认信息", MessageBoxButtons.OKCancel) == DialogResult.Cancel) return;

DataGridViewRow row = dataGridView1.SelectedRows[0];

string tno = row.Cells[0].Value.ToString();

string sql = string.Format("delete from teacher where tno='{0}'",tno);

//建立连接

OracleConnection con = new OracleConnection(Program.strCon);

try

{

con.Open();

OracleCommand cmd = new OracleCommand(sql, con);

if (1 == cmd.ExecuteNonQuery())

{

MessageBox.Show("删除成功");

dataGridView1.Rows.Remove(row);

}

else

MessageBox.Show("没有找到对应的学号的老师");

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

con.Close();

}

}

private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)

{

//用户双击了DataGridView的单元格内容,打开新的窗体,修改选择学生信息

if (dataGridView1.SelectedRows.Count == 0) return;

FrmTeaUpdate frm = new FrmTeaUpdate();

//把选中的行内容依次填写到窗体的文本框

DataGridViewRow row = dataGridView1.SelectedRows[0];

frm.tbTno.Text = row.Cells[0].Value.ToString();

frm.tbTname.Text = row.Cells[1].Value.ToString();

frm.tbTsalary.Text = row.Cells[2].Value.ToString();

frm.tbTposts.Text = row.Cells[3].Value.ToString();

frm.ShowDialog(this);

}

public partial class FrmTeaUpdate : Form

{

public FrmTeaUpdate()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

string sql = string.Format("update teacher set tname='{0}',tsalary={1},tposts='{2}' where tno='{3}'",

tbTname.Text, tbTsalary.Text, tbTposts.Text, tbTno.Text);

OracleConnection con = new OracleConnection(Program.strCon);

try

{

con.Open();

OracleCommand cmd = new OracleCommand(sql, con);

if (1 == cmd.ExecuteNonQuery())

{

MessageBox.Show("修改成功");

this.Close();

}

else

MessageBox.Show("没有找到对应的学号的学生");

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

con.Close();

}

}

}

public partial class FrmTeaInsert : Form

{

public FrmTeaInsert()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

string sql = string.Format("insert into teacher(tno,tname,tsalary,tposts) values('{0}','{1}',{2},'{3}')"

, tbTno.Text, tbTname.Text, tbTsalary.Text, tbTposts.Text);

OracleConnection con = new OracleConnection(Program.strCon);

try

{

con.Open();

OracleCommand cmd = new OracleCommand(sql, con);

if (1 == cmd.ExecuteNonQuery())

{

MessageBox.Show("插入成功");

}

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

con.Close();

}

}

}

(5)统计信息

正在上传…重新上传取消

正在上传…重新上传取消

正在上传…重新上传取消

public partial class FrmStatistics : Form

{

public FrmStatistics()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)

{

string sql = "select * from studentinfo";

OracleConnection con = new OracleConnection(Program.strCon);//1.建立连接

try

{

con.Open(); //2.打开连接对象

OracleCommand cmd = new OracleCommand(sql, con);  //3.创建命令对象

OracleDataReader odr = cmd.ExecuteReader(); //4.执行命令

if (odr.HasRows)

{

BindingSource bs = new BindingSource();

bs.DataSource = odr;

dataGridView1.DataSource = bs;

}

else dataGridView1.DataSource = null;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

con.Close();//5.关闭连接

}

}

private void button2_Click(object sender, EventArgs e)  //显示课程信息

{

string sql = "select * from courseinfo";

OracleConnection con = new OracleConnection(Program.strCon);//1.建立连接

try

{

con.Open(); //2.打开连接对象

OracleCommand cmd = new OracleCommand(sql, con);  //3.创建命令对象

OracleDataReader odr = cmd.ExecuteReader(); //4.执行命令

if (odr.HasRows)

{

BindingSource bs = new BindingSource();

bs.DataSource = odr;

dataGridView1.DataSource = bs;

}

else dataGridView1.DataSource = null;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

con.Close();//5.关闭连接

}

}

private void button3_Click(object sender, EventArgs e)

{

string sql = "select * from teacherinfo";

OracleConnection con = new OracleConnection(Program.strCon);//1.建立连接

try

{

con.Open(); //2.打开连接对象

OracleCommand cmd = new OracleCommand(sql, con);  //3.创建命令对象

OracleDataReader odr = cmd.ExecuteReader(); //4.执行命令

if (odr.HasRows)

{

BindingSource bs = new BindingSource();

bs.DataSource = odr;

dataGridView1.DataSource = bs;

}

else dataGridView1.DataSource = null;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

con.Close();//5.关闭连接

}

}

}

6)学生功能介绍

 (1)首页

正在上传…重新上传取消

(2)个人信息

正在上传…重新上传取消

private void button7_Click(object sender, EventArgs e) //显示个人信息

{

string sql = string.Format("select sno,sname,ssex,sage,pwd from student where sno like {0}", FrmLogin.loginName);

//连接到数据库执行sql命令的一般步骤

OracleConnection con = new OracleConnection(Program.strCon);//1.建立连接

try

{

con.Open(); //2.打开连接对象

OracleCommand cmd = new OracleCommand(sql, con);  //3.创建命令对象

OracleDataReader odr = cmd.ExecuteReader(); //4.执行命令

if (odr.HasRows)

{

BindingSource bs = new BindingSource();

bs.DataSource = odr;

dataGridView1.DataSource = bs;

}

else dataGridView1.DataSource = null;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

con.Close();//5.关闭连接

}

}

private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)

{

if (dataGridView1.SelectedRows.Count == 0) return;

FrmStuUpdate frm = new FrmStuUpdate();

//把选中的行内容依次填写到窗体的文本框

DataGridViewRow row = dataGridView1.SelectedRows[0];

frm.tbSno.Text = row.Cells[0].Value.ToString();

frm.tbSname.Text = row.Cells[1].Value.ToString();

frm.tbSsex.Text = row.Cells[2].Value.ToString();

frm.tbSage.Text = row.Cells[3].Value.ToString();

frm.tbPwd.Text = row.Cells[4].Value.ToString();

frm.ShowDialog(this);

}

(3)选课情况

正在上传…重新上传取消

private void button2_Click(object sender, EventArgs e)  //选课情况

{

string sql = string.Format("select cno,grade from sc where sno like '{0}'", FrmLogin.loginName);

//连接到数据库执行sql命令的一般步骤

OracleConnection con = new OracleConnection(Program.strCon);//1.建立连接

try

{

con.Open(); //2.打开连接对象

OracleCommand cmd = new OracleCommand(sql, con);  //3.创建命令对象

OracleDataReader odr = cmd.ExecuteReader(); //4.执行命令

if (odr.HasRows)

{

BindingSource bs = new BindingSource();

bs.DataSource = odr;

dataGridView2.DataSource = bs;

}

else dataGridView2.DataSource = null;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

con.Close();//5.关闭连接

}

}

(3)查看课程

正在上传…重新上传取消

private void button3_Click(object sender, EventArgs e)  //查看课程

{

string sql = string.Format("select * from course");

//连接到数据库执行sql命令的一般步骤

OracleConnection con = new OracleConnection(Program.strCon);//1.建立连接

try

{

con.Open(); //2.打开连接对象

OracleCommand cmd = new OracleCommand(sql, con);  //3.创建命令对象

OracleDataReader odr = cmd.ExecuteReader(); //4.执行命令

if (odr.HasRows)

{

BindingSource bs = new BindingSource();

bs.DataSource = odr;

dataGridView3.DataSource = bs;

}

else dataGridView3.DataSource = null;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

con.Close();//5.关闭连接

}

}

(4)选修课程

正在上传…重新上传取消

private void button4_Click(object sender, EventArgs e)   //选修课程

{

if (dataGridView3.SelectedRows.Count == 0) return;

if (MessageBox.Show("是否选修课程", "请确认信息", MessageBoxButtons.OKCancel) == DialogResult.Cancel) return;

DataGridViewRow row = dataGridView3.SelectedRows[0];

string cno = row.Cells[0].Value.ToString();

string sql = string.Format("insert into sc(cno,sno) values('{0}','{1}')",cno, FrmLogin.loginName);

//建立连接

OracleConnection con = new OracleConnection(Program.strCon);

try

{

con.Open();

OracleCommand cmd = new OracleCommand(sql, con);

if (1 == cmd.ExecuteNonQuery())

{

MessageBox.Show("选修成功");

dataGridView3.Rows.Remove(row);

}

else

MessageBox.Show("选修失败");

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

con.Close();

}

}

(5)退选课程

正在上传…重新上传取消

private void button5_Click(object sender, EventArgs e)   //退选课程

{

if (dataGridView2.SelectedRows.Count == 0) return;

if (MessageBox.Show("是否退选课程", "请确认信息", MessageBoxButtons.OKCancel) == DialogResult.Cancel) return;

DataGridViewRow row = dataGridView2.SelectedRows[0];

string cno = row.Cells[0].Value.ToString();

string sql = string.Format("delete from sc where sno='{0}' and cno='{1}'", FrmLogin.loginName, cno);

//建立连接

OracleConnection con = new OracleConnection(Program.strCon);

try

{

con.Open();

OracleCommand cmd = new OracleCommand(sql, con);

if (1 == cmd.ExecuteNonQuery())

{

MessageBox.Show("退选成功");

dataGridView2.Rows.Remove(row);

}

else

MessageBox.Show("退选失败");

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

con.Close();

}

}

(6)已修学分

正在上传…重新上传取消

private void button6_Click(object sender, EventArgs e)   //已修学分

{

string sql = string.Format("select * from scinfo where sno='{0}'", FrmLogin.loginName);

//连接到数据库执行sql命令的一般步骤

OracleConnection con = new OracleConnection(Program.strCon);//1.建立连接

try

{

con.Open(); //2.打开连接对象

OracleCommand cmd = new OracleCommand(sql, con);  //3.创建命令对象

OracleDataReader odr = cmd.ExecuteReader(); //4.执行命令

if (odr.HasRows)

{

BindingSource bs = new BindingSource();

bs.DataSource = odr;

dataGridView4.DataSource = bs;

}

else dataGridView4.DataSource = null;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

con.Close();//5.关闭连接

}

}

7)主函数

internal static class Program

{

public static readonly string strCon = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)"

+ "(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)));"

+ "User Id=C##DBLESSON;Password=D123";

/// <summary>

/// 应用程序的主入口点。

/// </summary>

[STAThread]

static void Main()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

FrmLogin frm=new FrmLogin();

if(frm.ShowDialog() == DialogResult.OK)

{

if (FrmLogin.loginName == "110")

{

Application.Run(new MainFrm());

}

else Application.Run(new FrmStudent());

}

else

Application.Exit();

}

}

8)相关Sql语句

(1)创建表

create table Student

(

SNO                  VARCHAR2(9)         not null,

SName                CHAR(20)        not null,

Ssex                NUMBER(38,0),

Sage                 CHAR(20),

Pwd                 VARCHAR(20)     not null,

constraint PK_STUDENT primary key (SNO)

)

create table Course

(

CNO                  CHAR(4)         not null,

CName                CHAR(20)        not null,

CCredit                NUMBER(38,0),

TNO                 CHAR(9),

constraint PK_COURSE primary key (CNO)

)

alter table Teacher

add constraint FK_COURSE_COURSE_TEACHER foreign key (TNO)

references TEACHER (TNO);

create table Teacher

(

TNO                  VARCHAR2(9)         not null,

TName                CHAR(20)        not null,

TSalary                NUMBER(38,0),

TPosts                 CHAR(20),

constraint PK_TEACHER primary key (TNO)

)

create table SC

(

CNO                  CHAR(4)         not null,

SNO                VARCHAR2(20)        not null,

Grade               NUMBER(38,0),

constraint PK_SC primary key (SNO,CNO)

)

alter table SC

add constraint FK_SC_SC_STUDENT foreign key (SNO)

references STUDENT (SNO);

alter table SC

add constraint FK_SC_SC2_COURES foreign key (CNO)

references COURSE (CNO);

(2)创建视图

create view studentinfo

as

select student.sno,student.sname,

(select sum(grade) from sc where sc.sno=Student.sno) 总分,

(select sum(ccredit) from sc,course where sc.cno=course.cno and sno=student.sno) 总学分

from student;

create view courseinfo

as

select couser.cno,avg(grade) as 平均分,max(grade) as 最高分 ,min(grade) as 最低分 from course,sc where course.cno=sc.cno;

select * from courseinfo;

select *  from sc;

create view teacherinfo

as

select tposts,avg(tsalary) as 平均工资,count(tno) as 人数

from teacher group by tposts;

5)实验总结

(简要总结)

1. 在实验中,学会了如何连接数据库,以及掌握两种方法去控制数据库,

2. 更加熟练运用SQL语言进行数据查询和数据更新,以及对基本表、视图的管理。

3. 明白了varchar和char两种类型的区别

(1)char 表示定长,长度固定,char如果插入的长度小于定义长度时,则用空格填充;

(2)varchar表示变长,即长度可变,varchar小于定义长度时,还是按实际长度存储,插入多长就存多长

数据库实验报告3-数据库系统设计相关推荐

  1. access计算机实验报告,Access数据库实验报告

    Access数据库实验报告 <数据库及其应用> (课程编号:B0901000) 实验报告 (2013-2014学年第2学期) 实验成绩: 学 号: 姓 名: 专业班级: 课 堂 号: 任课 ...

  2. mysql视图 实验报告_数据库实验报告(视图).doc

    数据库实验报告(视图) 实验报告(视图) 课程数据库原理与应用技术日期 2012 年 5月 17日学号实验项目 名 称有关视图的数据库操作姓名一.实验目的 本次试验就是要掌握基本的SQL Server ...

  3. 数据库实验报告【学会使用企业管理器和查询分析器管理工具】

    Hello各位,本系列为数据库实验报告的合集,是我按照<数据库系统概论习题解析与实验指导第5版>中的实验指导写出来的所有报告.这个系列的每一份报告都是我滴原创于是想把自己的劳动成果发出来共 ...

  4. oracle空间数据库实验报告,Oracle数据库实验报告六 PL/SQL基础

    Oracle数据库实验报告六 PL/SQL基础 -by QQC from BTBU [实验目的] PL/SQL的安装网上有很多教程这里就不做赘述了,如果后序需求大的话我再考虑做一期PL/SQL安装使用 ...

  5. 数据库实验报告【太原理工大学】

    数据库实验报告 温馨提示:仅供参考! 目录 数据库实验报告 一.交互式 SQL 语句的使用 1.数据定义 2.数据操作 3.数据查询操作 二.用户鉴别与数据控制 1.使用 SSMS 的图形界面创建用户 ...

  6. mysql实验报告2_数据库实验报告二

    <数据库实验报告二>由会员分享,可在线阅读,更多相关<数据库实验报告二(24页珍藏版)>请在人人文库网上搜索. 1.XIAN TECHNOLOGICAL UNIVERSITY ...

  7. oracle实验六杨艳华_工作报告之oracle数据库实验报告

    oracle 数据库实验报告 [篇一:大型数据库 oracle 10g 实验教程实验五实验报 告] 集美大学计算机工程学院实验报告 课程名称: oracle 10g 数据库基础教程 指导教师:杨艳华 ...

  8. 计算机基础数据库实验报告,北航计算机软件技术基础实验报告实验报告4-2——数据库应用系统的开发...

    <北航计算机软件技术基础实验报告实验报告4-2--数据库应用系统的开发>由会员分享,可在线阅读,更多相关<北航计算机软件技术基础实验报告实验报告4-2--数据库应用系统的开发(10页 ...

  9. mysql实验索引和视图_数据库实验报告 索引和视图

    数据库实验报告 索引和视图 (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 1西北师范大学计算机科学与工程学院学生实验报告西北师范大 ...

  10. mysql的安全性实验报告_数据库实验报告3-SQL Server 安全性验证

    数据库实验报告 JNU本科实验报告专用纸 课程名称 数据库上机实验 成绩评定 实验项目名称 SQL Server 安全性验证 指导教师 实验项目编号 08060113 实验项目类型 验证性 实验地点 ...

最新文章

  1. Nvidia推边缘运算平台EGX 未来将提供企业AI模型参考框架
  2. 基于Ajax的Web框架Echo2 2.0发布
  3. codeforces D Santa Claus and a Palindrome(hash+贪心)
  4. 怎么样用vue ui来创建一个vue项目
  5. cookbook_数据结构和算法
  6. c语言清空输入缓冲区函数,c语言:C语言清空输入缓冲区在标准输入(stdin)情况 -电脑资料...
  7. 利用C语言实现计算机图像处理的方法
  8. python正则表达式中的转义字符_python 正则表达式之转义字符
  9. 【陆勤阅读】参加kaggle数据挖掘竞赛是怎样一种体验?
  10. 在Zephyr RTOS上实现一个轮询系统
  11. 关于Ubuntu下firefox无法观看视频的解决
  12. coreldraw16开三折页_cdr怎么制作三折页?cdrX6制作三折页模板教程
  13. 密码学专题 对称加密算法
  14. 特征探索性分析Exploring_features
  15. CAN报错BUSLIGHT,BUSHEVAY,BUSOFF什么意思
  16. 普中51控制火焰传感器_火焰传感器的应用
  17. Unity 实现蓄力攻击
  18. 七面蚂蚁金服,超硬核面经,已拿Offer!!
  19. 学ajax要学php吗,javascript – Ajax新手学习(PHP JQuery)
  20. 小米新机红米与QNAP NAS TS-212P易迅网同时首发

热门文章

  1. QT中鼠标移动到时会出现小手
  2. JavaScript 入门教程||javascript 简介||JavaScript 用法
  3. Android 4.1 (Jelly Bean) 源码编译过程总结
  4. 10年java 工作难找吗_对比3-5年和10年的Java程序员,差距在哪里?
  5. office Excel中的vlookup函数的使用
  6. Ae:文本图层操作基础
  7. Node + Express 后台开发 —— 登录标识
  8. docker run 命令详解
  9. 2019年,人工智能领域有哪些突破值得期待?
  10. ONF组织的SDN架构文档——原理与架构构件(二/二)