数据库系统设计综合实验

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

二、实验原理
本实验的任务是设计并实现一个数据库系统。数据库设计的一般步骤包括:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库运行和维护。
(1) 概念结构设计
了解概念结构设计的基本方法,根据需求分析的结果或实验题目给出的要求,能够准确地用实体联系图来描述实体和实体之间的联系。
(2) 逻辑结构设计
理解逻辑结构设计的基本方法,根据实体联系图的设计,转换成合理的关系模式,每个关系模式至少应该满足第三范式的要求。
(3) 物理结构设计
理解物理结构设计的基本方法,选择合理的索引结构和存储结构,优化数据库的存取。
(4) 数据库实施
选择一门熟悉的面向对象程序设计语言,完成应用程序的开发。

三、使用仪器、材料
Oracle 19c,windows10,visual studio 2019

四、实验步骤

假设有“教师”、“学生”、“课程”三个实体,教师的基本信息包括:工号、姓名、职称、工资,课程的基本信息包括:课程号、课程名、学分数,学生的基本信息包括:学号、姓名、性别、年龄。系统必须满足以下要求:
(1) 一门课程只能有一个教师任课,一个教师可以上多门课程;
(2) 一个学生可以选修多门课程,一门课程可以由多个学生来选修,记录不同学生选修不同课程的成绩;
(3) 设置一个管理员,用于维护(添加、删除和修改等基本任务)学生基本信息、教师基本信息和教师所授课程等工作,此外,管理员添加学生时,为其设置初始密码;当学生选修了某门课程,课程成绩由管理员录入;
(4) 学生可以利用学号和密码登录系统,登陆系统后,可以进行选课、修改密码和个人基本信息、查询自己的选课及总学分等操作;
(5) 能够统计不同职称的教师的数量、不同职称的教师的平均工资,可以统计每门课程的平均成绩、最高分、最低分,统计每个学生选修课程的总学分;

根据上述描述,解答下列问题:
(1) 设计并画出E-R 图,要求标注连通词(即联系类型);
(2) 将E-R 图转化为关系模型,并指出各关系的主码和外码;
(3) 在MySql、SQL Server、Oracle 中选择一个数据库管理系统,并完成数据库的逻辑设计;

五、实验过程原始记录(实验过程、数据、图表、计算等)

(1) 设计并画出E-R 图,要求标注连通词(即联系类型);

(2) 将E-R 图转化为关系模型,并指出各关系的主码和外码;
teacher(tno,tname,tposition,tsalary,pwd),其中,tno为teacher表的主码
course(cno,cname,ccredit,tno),其中,cno为course表的主码
student(sno,sname,ssex,sage,pwd),其中,sno为student表的主码
sc(sno,con,grade),其中,(sno,cno)为sc表的主码,sno为外码,参照student(sno),cno为外码,参照course(cno)

(3)选择Oracle数据库管理系统,完成数据库的逻辑设计;

1、创建用户bb,密码为lpw12345

create user bb identified by lpw12345;
Grant connect ,resource,unlimited tablespace to bb;
Grant create view to bb;
 

2、在用户bb下创建表student,teacher,course,sc,视图studentinfo,courseinfo,teacherinfo1,teacherinfo2
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)
);

insert into student(sname,ssex,sno, sage, pwd) values('李天明','男','1906100067',21,'123456');
insert into student(sname,ssex,sno, sage, pwd) values('陈小红','女','1906100068',19,'123456');
insert into student(sname,ssex,sno, sage, pwd) values('王明白','女','1906100069',18,'123456');
insert into student(sname,ssex,sno, sage, pwd) values('张小黑','男','1906100070',19,'123456');
insert into student(sname,ssex,sno, sage, pwd) values('林与','男','1906100071',21,'123456');


insert into teacher(tno,tname, tposition, tsalary, pwd) values('t001','李杰出','教授',8000,'123456');
insert into teacher(tno,tname, tposition, tsalary, pwd) values('t002','郑好','专任教师',5000,'123456');
insert into teacher(tno,tname, tposition, tsalary, pwd) values('t003','刘光明','教授',7000,'123456');
insert into teacher(tno,tname, tposition, tsalary, pwd) values('t004','何小兵','副教授',6000,'123456');
insert into teacher(tno,tname, tposition, tsalary, pwd) values('t005','黄小白','副教授',6500,'123456');
insert into teacher(tno,tname, tposition, tsalary, pwd) values('t006','林峰地','教授',7500,'123456');

insert into course values('6','高等数学',6,'t003');
insert into course values('2','计算机组成原理',3,'t004');
insert into course values('7','java语言',4,'t003');
insert into course values('5','操作系统',3,'t005');
insert into course values('1','数据库',2,'t001');
insert into course values('3','计算机网络',4,'t002');
insert into course values('4','数据结构',5,'t002');

insert into sc values('1906100067','1',92);
insert into sc values('1906100068','2',85);
insert into sc values('1906100069','4',88);
insert into sc values('1906100070','2',90);
insert into sc values('1906100071','5',80);

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;
Commit;

(4)选择C#语言,完成系统开发





学生类student.cs
using Oracle.ManagedDataAccess.Client;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace byd001_app
{
   
    class student
    {
   
        public string sno {
    get; set; }
        public string sname {
    get; set; }
        public string ssex {
    get; set; }
        public int sage {
    get; set; }
        public string pwd {
    get; set; }
        public static List<student> Selectstudent(string sname)
        {
   
            string sql = "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 + "%";
            //MessageBox.Show(tname+"%");
            List<student> list = new List<student>();
            //创建链接,打开连接,创建命令对象,执行命令,关闭连接
            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())
                {
   
                    student s = new student();
                    //c.Cno = odr.GetString(0); //ord["cno'].
                    s.sno = odr["sno"].ToString();
                    //t.tno = odr.GetString(0);
                    s.sname = odr.GetString(1);
                    s.ssex= odr.GetString(2);
                    s.sage = odr.GetInt32(3);
                    if (common.ID == "0")
                        s.pwd = odr.GetString(4);
                    else
                        s.pwd = "******";
                    list.Add(s);

                }
            }
            catch (Exception ex<
  • 1
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库是一个用来存储和管理数据的系统,数据库系统设计综合实验C主要是指在数据库系统设计方面的综合实验。这个实验通常会包括数据库设计、搭建、测试和优化等多个环节,旨在让学生在实际操作中掌握数据库系统设计的全流程。 数据库系统设计综合实验C的主要内容包括: 1. 数据库设计:根据实际需求,对数据库进行设计,包括确定数据表的结构、设置主键、外键等约束条件,设计适当的索引等。 2. 数据库搭建:根据设计好的数据库结构,使用数据库管理系统(如MySQL、Oracle等)搭建数据库,创建数据表,插入数据等。 3. 数据库测试:对搭建好的数据库进行系统测试,包括对数据的增删改查操作、性能测试、安全性测试等。 4. 数据库优化:通过分析数据库性能瓶颈等问题,进行适当的优化,包括修改索引设计、优化SQL语句等。 通过这个实验,学生将能够掌握数据库系统设计的基本原理和方法,了解数据库设计的实际应用,为将来从事数据库相关工作打下坚实的基础。同时,实验还将培养学生的团队合作能力和问题解决能力,提高他们的实际操作能力。 总的来说,数据库系统设计综合实验C是一个重要的实践环节,对于学生来说具有非常重要的意义,是他们将理论知识应用到实际工作中的一个非常好的机会。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值