1、数据库系统概论课程设计实验报告书姓名:学号:专业:软件工程班级:软093班学院:计算机一 概述1。1.1 问题的提出随着科技的发展,基本上所有的具有一定数量数据的机构都开始使用计算机数据库来做管理.几乎所有学校也都已经在使用计算机管理数据的机制,大大减少了学校学生成绩管理的工作量。系统概述:通过对学校日常教学管理中的课程、选课、学生、教师、成绩等相关内容进行分析,完成具有学生管理、成绩管理、课程管理等相关功能的小型数据库管理应用系统.基本要求:完成学生、班级、课程表的维护。 完成成绩表的维护、浏览查找 。 按班级、按课程计算平均成绩、最高成绩、最低成绩、及格率.统计某学生、某学期的所有课程的平
2、均成绩.完成用户管理功能。 完成数据备份与恢复功能,1。1.2 本课题的意义通过该课程设计,可以达到把数据库理论知识更加的巩固加深,加强动手能力与实践能力,学以致用,与现实生活中的应用充分的结合起来。1.2设计环境Oracle 11GC .net平台二 需求分析2.1 系统功能要求设计此系统实现如下系统功能:(1)使得学生的成绩管理工作更加清晰、条理化、自动化。(2)通过用户名和密码登录系统,查询课程基本资料,学生所选课程成绩,修改用户密码等功能。 容易地完成学生信息的查询操作。(3) 设计人机友好界面,功能安排合理,操作使用方便,并且进一步考虑系统在安全性,完整性,并发控制,备份和恢复等方面
3、的功能要求.登陆失败学生管理课程管理退出系统用户验证成绩查询登陆成功教师管理2.2 系统模块设计成绩管理系统大体可以分成二大模块如, 一是学生的基本信息模块,里面应该包含学生的各方面的基本信息;再者便是课程管理模块, 在该模块中应该包含有对学生成绩信息的查询和处理,如平均成绩、最好成绩、最差成绩以及不及格学生的统计等功能模块;再其次还有教师、课程等相关信息的模块;2。3 数据字典 数据项是数据库的关系中不可再分的数据单位,下表分别列出了数据的名称、数据类型、长度、取值能否为空。利用SQL Server 2000建立“学生选课数据库,其基本表清单及表结构描述如下:数据库中用到的表:数据库表名关系
4、模式名称备注Student学生表学生学籍信息表Course课程表课程基本信息表Teach教师表教师基本信息Stu_Cour选课表学生选课信息Score成绩选课成绩信息表Student基本情况数据表,结构如下:字段名字段类型Not Null说明SnoCharPrimary key学号SnamecharNot Null学生姓名Sdeptchar学院Sclasschar班级Sageintr年龄Ssexchar性别Teach基本情况数据表,结构如下字段名字段类型Not Null说明TnoCharPrimary key教师号TnamecharNot Null教师姓名Tsexchar性别Cnochar外部
5、码所授课程Tageint年龄Tdeptchar学院Course数据表,结构如下:字段名字段类型约束控制说明Cnochar主键(primary key)课程号Cnamecharnot null课程名称Ctimeintnot null课时Stu_cour情况数据表,结构如下:字段名字段类型约束控制说明Cnochar外部键课程号Snochar外部键学号Score情况数据表,结构如下:字段名字段类型约束控制说明Cnochar外部键课程号Snochar外部键学号scoreint成绩三 概念模型设计由需求分析的结果可知,本系统设计的实体包括:(1)学生基本信息:学号,姓名,学院,班级,年龄,性别。(2)课
6、程基本信息: 课程名,课程号,学时.(3)教师基本信息:教师号,教师姓名,职称,年龄,性别,学院(4)学院基本信息:学院名、学院号、院长姓名这些实体间的联系包括:(1) 每位学生可以学习多门课程,每门课程可供多位学生学习.(2) 每门课可以由多个老师教,每个老师可以教多门课程(3) 学生每选一门课就可以得到一个成绩,不选此课就不能取得该课程成绩由上述分析可得到系统的ER图:选修课程成绩学生课程号课程名学时学分分数学号姓名性别系别 地址年龄教授拥有学院代码拥有学院职称教师教师号学院名学院性别教师名院长名四 逻辑和物理结构设计4。1由系统ER图转化而得到的关系模式如下:(1)学生(学号,姓名,性别
7、,年龄,学院,班级),其主关键字为学号;(2)课程(课程名,课程号,学时),其中主关键字为课程号;(3)教师(教师号,教师姓名,职称,年龄,性别,学院,所授课程号)(4)选课(课程号,学号)其中主关键字为学号和课程号(4)成绩(课程号,学号,分数)其中主关键字为学号和课程号。4。2 确定关系模型的存取方法在将概念模型转换成物理模型之后,我们可以对物理模型进行设计,双击物理模型的关系,可以对该关系的名称、注释等信息进行查询。可对该关系的属性列进行设计,可分别设置其名称、码、数据类型以及主码、是否为空等。在实际设计中最常用的存取方法是索引发,使用索引可以大大减少数据的查询时间,在建立索引时应遵循:
8、在经常需要搜索的列上建立索引; 在主关键字上建立索引;在经常用于连接的列上建立索引,即在外键上建立索引;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的等规则。才能充分利用索引的作用避免因索引引起的负面作用。4.3 确定数据库的存储结构确定数据库的存储结构主要指确定数据的存放位置和存储结构,包括确定关系、索引、日志、备份等的存储安排及存储结构,以及确定系统存储参数的配置.因为该成绩管理系统的数据量小,所以我们只用把数据存储在使用的电脑硬盘上,不用作更多的安排。(1)创建学生基本信息表:CREATE TABLE Student ( SNO CHAR(5) , SN
9、AME CHAR(10) NOT NULL, SDEPT CHAR(2) NOT NULL, SCLASS CHAR(2) NOT NULL, SAGE NUMBER(2), SSEX CHAR(2),CONSTRAINT SNO_PK PRIMARY KEY(SNO));2,创建表CourseCREATE TABLE Course(CNO CHAR(3),CNAME VARCHAR2(16) ,CTIME NUMBER(3),CONSTRAINT CNO_PK PRIMARY KEY(CNO)3,创建表TeachCREATE TABLE Teach( TNO VARCHAR(6), TNAM
10、E VARCHAR(8), TSEX CHAR(2), CNO CHAR(3), TAGE NUMBER(2), TDEPT CHAR(2), CONSTRAINT TT_PK PRIMARY KEY(TNO), CONSTRAINT CNO_FK FOREIGN KEY(CNO) REFERENCES Course(CNO)4,创建表Stu_cnoCREATE TABLE Score(SNO CHAR(5),CNO CHAR(3),CONSTRAINT SC_PK PRIMARY KEY(SNO,CNO),CONSTRAINT SNO_FK FOREIGN KEY(SNO) REFERENC
11、ES Student(SNO),CONSTRAINT CNOM_FK FOREIGN KEY(CNO) REFERENCES Course(CNO)5。创建成绩表CREATE TABLE Score(SNO CHAR(5),CNO CHAR(3),SCORE NUMBER(5,2),CONSTRAINT SC_PK PRIMARY KEY(SNO,CNO),CONSTRAINT SNO_FK FOREIGN KEY(SNO) REFERENCES Student(SNO),CONSTRAINT CNOM_FK FOREIGN KEY(CNO) REFERENCES Course(CNO)CON
12、STRAINT Score_FK FOREIGN KEY(SNO,CNO) REFERENCES Stu_cno(SNO,CNO)二、插入数据1,StudentINSERT INTO Student VALUES(96001,马小燕,CS,01,21,女);INSERT INTO Student VALUES(96002,黎明,CS,01,18,男);INSERT INTO Student VALUES(96003,刘东明,MA,01,18,男);INSERT INTO Student VALUES(96004,赵志勇,IS,02,20,男);INSERT INTO Student VALUE
13、S(97001,马蓉,MA,02,19,女);INSERT INTO Student VALUES(97002,李成功,CS,01,20,男);INSERT INTO Student VALUES(97003,黎明,IS,03,19,女);INSERT INTO Student VALUES(97004,李丽,CS,02,19,女);INSERT INTO Student VALUES(96005,司马志明,CS,02,18,男);2,CourseINSERT INTO Course VALUES(001,数学分析,144);INSERT INTO Course VALUES(002,普通物理
14、,144);INSERT INTO Course VALUES(003,微机原理,72);INSERT INTO Course VALUES(004,数据结构,72);INSERT INTO Course VALUES(005,操作系统,64);INSERT INTO Course VALUES(006,数据库原理,64);INSERT INTO Course VALUES(007,DB_Design,48);INSERT INTO Course VALUES(008,程序设计,56);3,TeachINSERT INTO Teach VALUES(9401,王成钢,男,004,35,CS);
15、INSERT INTO Teach VALUES(9402,李正科,男,003,40,CS);INSERT INTO Teach VALUES(9403,严敏,女,001,33,MA);INSERT INTO Teach VALUES(9404,赵高,男,004,28,IS);INSERT INTO Teach VALUES(9405,李正科,男,003,32,MA);INSERT INTO Teach VALUES(9406,李玉兰,女,006,43,CS);INSERT INTO Teach VALUES(9407,王成钢,男,004,49,IS);INSERT INTO Teach VA
16、LUES(9408,马悦,女,008,35,CS);INSERT INTO Teach VALUES(9409,王成钢,男,007,48,CS);4,ScoreINSERT INTO Score VALUES(96001,001,77。5);INSERT INTO Score VALUES(96001,003,89);INSERT INTO Score VALUES(96001,004,86);INSERT INTO Score VALUES(96001,005,82);INSERT INTO Score VALUES(96002,001,88);INSERT INTO Score VALUE
17、S(96002,003,92。5);INSERT INTO Score VALUES(96002,006,90);INSERT INTO Score VALUES(96005,004,92);INSERT INTO Score VALUES(96005,005,90);INSERT INTO Score VALUES(96005,006,89);INSERT INTO Score VALUES(96005,007,76);INSERT INTO Score VALUES(96003,001,69);INSERT INTO Score VALUES(97001,001,96);INSERT IN
18、TO Score VALUES(97001,008,95);INSERT INTO Score VALUES(96004,001,87);INSERT INTO Score VALUES(96003,003,91);INSERT INTO Score VALUES(97002,003,91);INSERT INTO Score VALUES(97002,004,);INSERT INTO Score VALUES(97002,006,92);INSERT INTO Score VALUES(97004,005,90);INSERT INTO Score VALUES(97004,006,85)
19、;INSERT INTO Score VALUES(97004,008,75);INSERT INTO Score VALUES(97003,001,59);INSERT INTO Score VALUES(97003,003,58)五 数据库的实施与维护5.1 数据库的实施:此阶段主要任务包括创建数据库,加载初始数据,数据库试运行,数据库的安全性和完整性控制数据库的备份与恢复,数据库性能的监督分析和改仅,数据库的重组和重构等.首先在数据库中建立一个学生成绩管理系统数据库,然后新建一个数据源。部分截图和代码如下:学生表的增删改查:增加学生信息更新学生信息删除学生信息学生表增加、删除、修改代码(
20、部分)using System;using System.Collections。Generic;using System.ComponentModel;using System。Data;using System。Data。OracleClient;using System。Drawing;using System.Linq;using System。Text;using System。Windows。Forms;namespace MyProgram public partial class Form3 : Form private string ConnectionString = ”D
21、ata Source=ahut;” + User ID=Scott;Password=123456; private OracleConnection conn = null; private OracleDataAdapter DataAdapter = null; private DataSet dataset = null; / private OracleCommand command= null; public Form3() InitializeComponent(); private void Form3_Load(object sender, EventArgs e) conn
22、 = new OracleConnection(ConnectionString); showData(); private void showData() string tname = ”; try if (conn = null) conn。Open(); DataAdapter = new OracleDataAdapter(”select from student”, conn); dataset = new DataSet(); DataAdapter。Fill(dataset); dataGridView1.DataSource = dataset; dataGridView1.D
23、ataMember = dataset。Tables0.ToString(); tname = dataset.Tables0。ToString(); /先清除所有绑定,然后再重新绑定 textBox1.DataBindings。Clear(); textBox2。DataBindings.Clear(); textBox3.DataBindings。Clear(); textBox4。DataBindings。Clear(); textBox5。DataBindings。Clear(); textBox6.DataBindings。Clear(); textBox1。DataBindings
24、.Add(”Text, dataset, ”table.sno”); textBox2.DataBindings.Add(”Text”, dataset, table。sname”); textBox3。DataBindings。Add(”Text, dataset, table.sdept”); textBox4。DataBindings。Add(”Text”, dataset, ”table。sclass”); textBox5.DataBindings。Add(”Text, dataset, ”table。sage); textBox6。DataBindings。Add(”Text, d
25、ataset, table.ssex); catch (Exception ex) MessageBox.Show(ex。ToString()); private void button1_Click(object sender, EventArgs e) string strOracle = insert into student values(; strOracle += ” + textBox1。Text;/学号 strOracle += ”,” + textBox2。Text;/姓名 strOracle += ,” + textBox3。Text;/学院 strOracle += ”,
26、” + textBox4。Text;/班级 strOracle += ”, + textBox5.Text;/年龄 strOracle += ”, + textBox6。Text + ”)”;/性别 OracleCommand command = null; try command = new OracleCommand(); command。Connection = conn; command。CommandText = strOracle; conn。Open(); int n = command.ExecuteNonQuery();/执行Insert语句 if (n 0) Message
27、Box.Show(成功插入数据!”); catch (Exception ex) MessageBox.Show(ex.Message); finally if (conn != null) conn。Close(); command.Dispose(); showData(); private void button2_Click(object sender, EventArgs e) Form7 f7 = new Form7(); f7。Show(); private void button3_Click(object sender, EventArgs e) try OracleComm
28、andBuilder builder = new OracleCommandBuilder(DataAdapter); int n = DataAdapter。Update(dataset, ”Table”); MessageBox。Show(”成功更新数据,有” + n。ToString() + ”行受到更新!”); catch MessageBox。Show(”更新不成功!); private void button4_Click(object sender, EventArgs e) string curNo = ”; if (dataGridView1。Rows。Count = 1)
29、return; int index = dataGridView1.CurrentRow。Index; dataGridView1.Rowsindex。Selected = true; curNo = this。dataGridView1。Rowsindex。Cells0。Value。ToString(); OracleCommand command = null; string strOracle = ”delete from student where sno= + curNo + ”; try command = new OracleCommand(); command。Connecti
30、on = conn; command.CommandText = strOracle; conn.Open(); int n = command。ExecuteNonQuery(); catch (Exception ex) MessageBox.Show(ex。Message); finally if (conn != null) conn.Close(); command.Dispose(); showData(); MessageBox.Show(”成功删除一行!”); 选择检索条件(学生表查询)学生表查询代码using System;using System.Collections.G
31、eneric;using System。ComponentModel;using System。Data;using System。Data.OracleClient;using System。Drawing;using System.Linq;using System。Text;using System.Windows.Forms;namespace MyProgram public partial class Form7 : Form private string ConnectionString = ”Data Source=ahut;” + ”User ID=Scott;Passwor
32、d=123456”; private OracleConnection conn = null; private OracleDataAdapter DataAdapter = null; private DataSet dataset = null; private OracleCommand cmd = null; public Form7() InitializeComponent(); private void Form7_Load(object sender, EventArgs e) try conn = new OracleConnection(ConnectionString)
33、; conn.Open(); DataAdapter = new OracleDataAdapter(); dataset = new DataSet(); cmd = new OracleCommand(); cmd.Connection = conn; cmd。CommandText = ”SELECT from student; DataAdapter.SelectCommand = cmd; DataAdapter.Fill(dataset, ”t1); comboBox1。Items。Clear(); for (int i = 0; i ”); comboBox2.Items。Add
34、(”like”); catch (Exception ex) MessageBox。Show(ex。Message); private void button1_Click(object sender, EventArgs e) string tb1 = textBox1。Text; if (comboBox2。Text = ”like”) tb1 = ” + textBox1。Text + ”; string strOracle = ”select * from student where; strOracle += ” + comboBox1.Text + + comboBox2。Text
35、 + ” ” + ” + tb1 + ; try cmd。CommandText = strOracle; DataAdapter.SelectCommand = cmd; dataset.Clear(); DataAdapter。Fill(dataset, t1”); dataGridView1。DataSource = dataset; dataGridView1。DataMember = t1; catch MessageBox.Show(”请正确设置检索条件!”); finally if (conn != null) conn。Close(); 教师表信息成绩表信息学生成绩检索(单表操
36、作)按照课程检索最高分、最低分和平均分按照课程检索选课总数按照个人检索最高分、最低分和平均分按照班级检索最高分、最低分和平均分按照班级检索选课总数成绩表查询代码#include ”stdafx。husing System;using System。Collections.Generic;using System。ComponentModel;using System。Data;using System.Data。OracleClient;using System。Drawing;using System。Linq;using System.Text;using System.Windows.Forms;namespace MyProgram public partial class Form9 :