数据库系统设计综合实验
实验目的
通过实验,使学生掌握数据库系统设计和开发的一般方法,能够设计并实现简单的数据库系统。
实验要求
熟悉实验室实验环境,掌握实验预备知识,了解实验中故障排除的基本方法。实验中根据实验要求完成相应的任务,并独立完成实验报告。
实验内容
设计的数据库系统可从以下题目中选择,但不限定于以下题目,可自由选择。
需提供系统简要的需求分析,给出大体的功能介绍;完成数据库的概念结构设计,建议用PowerDesigner画出系统的逻辑结构图或物理结构图(也可以使用其他工具);任选自己熟悉的数据库管理系统和编程语言完成系统主要功能模块的开发。
系统题目参考:
1、学生成绩管理系统
一:E-R图的建立
我选择的题目是学生成绩管理系统。用c#语言来实现对窗口的创建、与数据库的连接,将程序实现。
首先需要梳理一个学生、课程、教师的e-r图
二:创建数据库,建立表格以及所涉及到的视图:
因为该程序需要实现的功能有:
学生:查成绩、选课、退课、改密码、查询学生信息
教师:查询教师信息、查询学生信息,改密码、给学生登成绩、查询自己教授的课程、
退掉被安排的课程
管理员:增加/删除/查询 学生、增加/删除/查询 老师、增加/删除/查看课程、修改学生/老师信息、给老师排课、解散课程、给学生选/退课程。
因为管理员是一个全局的成员,所以这里不单独为管理员建立一个信息表
在MySql、SQL Server、Oracle中选择一个数据库管理系统,并设计数据库的物理结构;
创建用户bb密码:bct88788502
creat user bb identified by bct88788502
Grant connect ,resource,unlimited tablespace to bb;
Grant create view to bb;
(1)student表
学号是主键,其他不为空。姓名可以重复`
create table student
( sno varchar(10) primary key,
sname varchar(10) not null unique,
ssex varchar(10) check(ssex in ('男','女')),
sage varchar(10) not null,
sprof varchar(20) not null,
pwd varchar(20) not null
);
(2)teacher表
工号为主键,其他不为空
create table teacher
( tno varchar(10) primary key,
tname varchar(10) not null,
tsex varchar(10) check(tsex in ('男','女')),
pwd varchar(10) not null
);
(3)course课程表
课程号为主键,其他不为空。
( cno varchar(10) primary key,
cname varchar(10) not null,
ccredit varchar(10) not null,
tno varchar(10) not null,
tname varchar(10) not null
);
(4)选修表
create table sc
( sname varchar(10) not null,
sno varchar(10) not null,
cname varchar(10) not null,
cno varchar(10) not null,
grade number(10) not null
);
(5)课程库表
create table courselibrary
( 课程号 varchar(10) primary key,
课程 varchar(10) not null,
学分 varchar(10) not null
);
所以为实现以上功能还需要建立两个视图
(6)scnifo
这个视图用来给老师提供等成绩的服务
(1)create view scnifo as select sc.sno 学号,sc.sname 姓名,sc.cname 课程,
(select tname from course where course.cname=sc.cname) 老师,(select tno from course where course.cname=sc.cname) 工号,
sc.grade 成绩,(select ccredit from course where course.cname=sc.cname) 学分 from sc;
(7)Studentnifo
这个视图用来显示学生的成绩,为学生查成绩提供服务
(2)create view studentinfo as select student.sno 学号,student.sname 姓名,
(select sum(ccredit) from course where cno in (select cno from sc where sno=student.sno)) 总学分 ,
(select sum(grade) from sc where sno=student.sno)总分 from student;
向数据库中插入数据:
insert into student(sno,sname,ssex,sage,sprof,pwd)values('1','小王','男','20','计算机科学与技术','123456');
insert into student(sno,sname,ssex,sage,sprof,pwd)values('2','小白','男','20','网络工程','123456');
insert into student(sno,sname,ssex,sage,sprof,pwd)values('3','小刘','男','20','计算机科学与技术','123456');
insert into student(sno,sname,ssex,sage,sprof,pwd)values('4','小黎','男','19','计算机科学与技术','123456');
insert into student(sno,sname,ssex,sage,sprof,pwd)values('5','小舒','男','20','软件工程','123456');
insert into student(sno,sname,ssex,sage,sprof,pwd)values('6','大哥','男','20','修仙艺术','123456');
insert into teacher(tno,tname,tsex,pwd)values('001','李老师','男','123456');
insert into teacher(tno,tname,tsex,pwd)values('002','王老师','女','123456');
insert into teacher(tno,tname,tsex,pwd)values('003','张老师','男','123456');
insert into teacher(tno,tname,tsex,pwd)values('004','林老师','女','123456');
insert into course(cno,cname,ccredit,tno,tname) values('1','数据结构','5','001','李老师');
insert into course(cno,cname,ccredit,tno,tname) values('2','操作系统','4','001','李老师');
insert into course(cno,cname,ccredit,tno,tname) values('3','计算机导论','2','002','王老师');
insert into course(cno,cname,ccredit,tno,tname) values('4','汇编语言','2','003','张老师');
insert into course(cno,cname,ccredit,tno,tname) values('5','数据库','3','004','林老师');
insert into courselibrary(课程号,课程,学分) values('1','数据结构','5');
insert into courselibrary(课程号,课程,学分) values('2','操作系统','4');
insert into courselibrary(课程号,课程,学分) values('3','计算机导论','2');
insert into courselibrary(课程号,课程,学分) values('4','汇编语言','2');
insert into courselibrary(课程号,课程,学分) values('5','数据库','3');
insert into courselibrary(课程号,课程,学分) values('6','心理催眠','3');
insert into courselibrary(课程号,课程,学分) values('7','大学体育','4');
insert into sc(sname,sno,cname,cno,grade)values('小白','2','数据结构','1','100');
insert into sc(sname,sno,cname,cno,grade)values('小白','2','操作系统','2','90');
insert into sc(sname,sno,cname,cno,grade)values('小白','2','数据库','5','97');
insert into sc(sname,sno,cname,cno,grade)values('小王','1','操作系统','2','95');
insert into sc(sname,sno,cname,cno,grade)values('小王','1','计算机导论','3','96');
insert into sc(sname,sno,cname,cno,grade)values('小刘','3','计算机导论','3','97');
insert into sc(sname,sno,cname,cno,grade)values('小刘','3','数据库','5','95');
insert into sc(sname,sno,cname,cno,grade)values('小舒','4','计算机导论','3','96');
insert into sc(sname,sno,cname,cno,grade)values('小舒','4','汇编语言','4','98');
insert into sc(sname,sno,cname,cno,grade)values('小黎','5','计算机导论','3','96');
insert into sc(sname,sno,cname,cno,grade)values('大哥','6','操作系统','2','89');
三:使用C#连接数据库必知:
首先需要建立一个C#项目:
然后添加一个连接数据库拓展引用:
OracleManagedDataAccess.dll 下载安装方式如下:
右键点击引用,选择管理nuget程序包,搜索oracle.ManagetDataAccess 程序包直接安装即可
连接数据库时,需要添加上oracle.ManageDataAccess 头文件。
具体语句:
OracleConnection con=new OracleConnection
con.ConnetionString=”DataSource=(DESCRTPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=xxxx))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));persist Security Info=True;User ID=bb;Password=bct88788502;”
第二种简单方便的方法:
在app.config中添加如下代码
OracleConnection con =new OracleConnection(ConfigurationManager.ConnectionStrings[“strCon”].ConnectionString);
四:C#代码部分:
(1)学生类部分代码(student)
public class 学生类
{
public string sno {
get; set; }
public string sname {
get; set; }
public string ssex {
get; set; }
public string sage {
get; set; }
public string sprof {
get; set; }
public string pwd {
get; set; }
public static List<学生类> Selectstudent(string sno)//显示学生信息
{
string sql = "select sno,sname,ssex,sage,sprof,pwd from student where sno like :sno";
OracleParameter[] para = new OracleParameter[] {
new OracleParameter(":sno", OracleDbType.Varchar2, 10) };
para[0].Value = sno + "%";
//MessageBox.Show(tname+"%");
List<学生类> list = new List<学生类>();
//创建链接,打开连接,创建命令对象,执行命令,关闭连接
OracleConnection con = new OracleConnection(ConfigurationManager.ConnectionStrings["strCon"].ConnectionString);
try
{
con.Open();
OracleCommand cmd = new OracleCommand(sql, con);
cmd.Parameters.AddRange(para);
OracleDataReader odr = cmd.ExecuteReader();
while (odr.Read())
{
学生类 s = new 学生类();
//c.Cno = odr.GetString(0); //ord["cno'].
s.sno = odr.GetString(0);
s.sname = odr.GetString(1);
s.ssex = odr.GetString(2);
s.sage = odr.GetString(3);
s.sprof = odr.GetString(4);
if(user.use=="administrator"||stu.stu1==s.sno)
{
s.pwd = odr.GetString(5);
}
else
s.pwd = "******";
list.Add(s);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
con.Close();
}
return list;
}
public static int changescode(学生类 s)//学生修改学生密码
{
int result = 0;
string sql = "update student set pwd=:pwd where sno=:sno ";
OracleParameter[] para = new OracleParameter[] {
new OracleParameter(":pwd",OracleDbType.Varchar2,20),
new OracleParameter(":sno",OracleDbType.Varchar2,10) };
para[0].Value = s.pwd;
para[1].Value = s.sno;
OracleConnection con = new OracleConnection(ConfigurationManager.ConnectionStrings["strCon"].ConnectionString);
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 changestudent(学生类 s)//管理员修改学生信息
{
int result = 0;
string sql = "update student set sname=:sname,ssex=:ssex,sage =:sage,sprof =:sprof,pwd =:pwd where sno =:sno";
OracleParameter[] para = new OracleParameter[]
{
new OracleParameter(":sname",OracleDbType.Varchar2,10),
new OracleParameter(":ssex",OracleDbType.Varchar2,10),
new OracleParameter(":sage",OracleDbType.Varchar2,10),
new OracleParameter(":sprof",OracleDbType.Varchar2,10),
new OracleParameter(":pwd",OracleDbType.Varchar2,10),
new OracleParameter(":sno",OracleDbType.Varchar2,10),
};
para[0].Value = s.sname;
para[1].Value = s.ssex;
para[2].Value = s.sage;
para[3].Value = s.sprof;
para[4].Value = s.pwd;
para[5].Value = s.sno;
OracleConnection con = new OracleConnection(ConfigurationManager.ConnectionStrings["strCon"].ConnectionString);
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 deletesutdent(学生类 s)//根据学号删除学生
{
int result = 0;
string sql= "delete from student where sno=:sno";
OracleParameter[] para = new OracleParameter[]
{
new OracleParameter(":sno",OracleDbType.Varchar2,10),
};
para[0].Value = s.sno;
OracleConnection con = new OracleConnection(ConfigurationManager.ConnectionStrings["strCon"].ConnectionString);
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 addstudent(学生类 s)//添加学生
{
int result = 0;
string sql = "insert into student(sno,sname,ssex,sage,sprof,pwd)values(:sno,:sname,:ssex,:sage,:sprof,:pwd)";
OracleParameter[] para = new OracleParameter[]
{
new OracleParameter(":sno",OracleDbType.Varchar2,10),
new OracleParameter(":sname",OracleDbType.Varchar2,10),
new OracleParameter(":ssex",OracleDbType.Varchar2,10),
new OracleParameter(":sage",OracleDbType.Varchar2,10),
new OracleParameter(":sprof",OracleDbType.Varchar2,10),
new OracleParameter(":pwd",OracleDbType.Varchar2,10)
};
para[0].Value = s.sno;
para[1].Value = s.sname;
para[2].Value = s.ssex;
para[3].Value = s.sage;
para[4].Value = s.sprof;
para[5].Value = s.pwd;
OracleConnection con = new OracleConnection(ConfigurationManager.ConnectionStrings["strCon"