《数据库技术》课程设计报告 2
目 录
1学生信息管理系统概述 ......................................................... 5 1.1系统的任务 ............................................................... 5 1.2系统的目标 ............................................................... 5 2 系统具体需求分析 ............................................................. 6 2.1系统需求 ................................................................... 6 2.2数据字典 ................................................................... 6 2.3数据流图 .................................................................. 10 3 概念结构设计 ................................................................ 11 4.逻辑结构设计 ............................................................... 14 5.物理结构设计 .............................................................. 15 表汇总 ..................................................................... 15 表A—F ..................................................................... 16 6.数据保护设计 .............................................................. 18 6.1防止用户直接操作数据库的方法 ............................................ 18 6.2用户帐号密码的加密方法 .................................................. 18 6.3角色与权限 .............................................................. 18 7.运行管理与维护说明 ........................................................ 19 8. SQL语句及部分关键JAVA语句 ................................................ 20 9. 心得与体会................................................................. 29 10.参考资料 .................................................................. 29
《数据库技术》课程设计报告 3
计算机与信息工程学院 《数据库应用》 课程设计任务书
班级 商务07乙 学号 0791910234 姓名 职称 张海成 副教授 指导老师 时间 题目 韩培友 2009年9月7日 ~ 2009年9月11日 蓝天大学学生管理系统设计 数据库应用课程设计是计算机技术专业重要的实践课程之一,是在掌握程序设计语言的基础上,学习《数据库原理》课程后的一次综合实践练习。通过本课程设计,将在课堂上了解和掌握的数据库原理以及设计阶段的方法与技术,直接运用到实际系统的开发工作中。并且在项目小组长及成员间的合作和沟通中,体验软件项目管理技能和方法,熟悉软件工具与环境。 本次课程设计要求我们小组成员间加强团队合作和沟通,同时每个成员承担明确的责任,独立按时完成相应任务;按照模版完成相应的文档,语言简洁、通顺,开发的系统功能符合需求规格,并能够准确、稳定地运行。 目的 和 要求 课程设计主要任务 | 包括 研发工具 系统环境 设计任务及其实现技术 成绩 本次课程设计,我们小组选定蓝天大学学生管理系为设计项目,将完成项目的需求分析、设计、开发、测试等任务,并产生各个阶段的文档。 需求分析和系统设计:根据命题要求完成系统的需求分析,应用结构化或面向对象需求分析方法,并完成系统设计,并提出相应的测试方案。 开发系统和测试调试:我们将采用java和SQL语言编写系统代码,使用SQL2000及eclipse软件作为系统实现工具。测试工作包括模块测试、集成测试和系统测试,并按需求规格书的要求调试完成相应的系统。 1、基于此次学生信息管理系统的需求分析,最终确定了用户的实际需求,根据数据流图以及数据字典,设计系统的局部、整体概念结构E-R图,为数据的逻辑设计提供可靠的理论依据。 2、根据逻辑结构设计,从而设计出适合逻辑结构的最佳物理环境,满足用户的应用需求。(详情见下文报告) 指导教师(签名): 年 月 日
《数据库技术》课程设计报告 4
需求分析:
1、 学生信息管理系统概述
学生信息管理系统主要用来管理学生基本信息。本系统是一个简单的学生信息管理系统,系统管理的信息主要是学生基本信息、课程信息和学生选课信息。系统的目的是有效地处理这些信息,同时为用户提供信息检索、信息修改和保护功能。
1.1 系统的任务
学生信息管理系统是学校有效管理学生的重要工具,它的任务主要有以下几项: ◆ 学生基本信息管理,主要负责管理学生基本信息。
◆ 学生选课信息管理,主要负责管理课程信息和学生选课信息。 ◆ 信息 检 索 管 理,主要负责对学生各类信息进行查询和统计。 ◆ 信息 修 改 管 理,主要负责学生信息的增加,删除,更改。
◆ 系 统 管 理,主要负责管理用户信息和用户登陆,以及配置系统参数。
1.2 系统的目标
学生信息管理系统是学校管理学生的有效方法,也是学生学生查询信息的有效
途径。一个好的学生信息管理系统应具有以下这些目标:
◆ 能够管理所有学生的信息。
◆ 能够快速地进行学生的各类信息查询,包括基本信息和选课信息的查询。 ◆ 减少学校管理学生的工作任务,降低管理成本。
2 系统具体需求
2.1系统需求
根据以上对学生信息管理系统的任务和目标的分析,蓝天大学学生信息管理系统的具体需求如下:
(1)学生信息:学号、姓名、性别、出生日期、电话、部门、民族、政治面貌、来源地、入学成绩、备注。
(2)课程信息:课程号、课程名、先选课、学时、考核方式、学分。 (3)选课信息:学号、 课程号、成绩。
(4)教师信息:工号、姓名、性别、职称、学院。 (5)授课信息:工号、课程号和授课效果。 (6)指导信息:工号、学号和成绩。
(7)学生能查询课程信息;自己的学生信息;自己的选课信息;自己选课的最高分、最低分、平均分、和总分。学生选课时,该学生必须是本校学生,课程必须是本校课程;一个学生可以选择多门课程,多个学生可以选择同一门课程。学生选指导老师时,学生必须是本
《数据库技术》课程设计报告 5
校学生,教师必须是本校教师;一个学生只能选择一个指导教师。
(8)教师只能查询课程信息、本人的授课信息、本人授课的选课信息、本人的指导信息等。教师只能修改本人授课的选课成绩、本人指导的成绩等。教师授课时,课程必须使本校课程,教师必须是本校教师;一个教师可以讲授多门课,多个教师可以讲授一门课。教师指导学生时,学生必须使本校学生,教师必须是本校教师;一个教师可以指导多个学生。
(9)DBA拥有所有信息的所有权限。
(10)满足常规的完整性、安全性和数据备份能力。
2.2数据字典
根据系统需求分析,利用表格方式设计的数据字典如下:
1) 数据项
数据字典的数据项如表所示: 属性名 学号 学生姓名 性别 出生日期 电话 部门 民族 政治面貌 来源地 入学成绩 存储代码 SNo SName 类型 宽度 主码 外码 是 否 主码表 学生表 无 含义 年2位学院班级序号各2位 学生的姓名 备注 非空、唯一 非空 只能男(m)女(w),用符号表示 如1988.11.12 部门是学生所在的院系班级 只能是党员、团员、群众之一 字10B 是 符 字20B 否 符 字符 1B 否 SSex 否 无 学生的性别 Sbirth SPhone SColl Snation 整10B 否 型 字12B 否 符 字40B 否 符 字15B 否 符 字符 4B 否 否 否 否 否 无 无 无 无 学生的出生日期 学生的电话 学生所在部门 学生所属的民族 Spaob 否 无 学生的政治面貌 Sbirthplace Ssgrade 字10B 否 符 浮点 4B 否 否 否 无 无 学生的家乡 学生入学时的成绩 《数据库技术》课程设计报告 6
备注 课程号 课程名 先修课 学分 上课地点 学时 考核方式 工号 教师名 教师性别 教师年龄 职称 教龄 教师电话 教师学院 选课成绩 教学效果 毕设成绩
Sremarks CNo CName CPNo Credit Cclass Cperiod Cexamsy TNo TName TSex TAge Title SchAge TPhone TColl Grade TGrade GDsign 字10B 否 符 字符 6B 是 否 是 否 无 课程表 无 课程表 无 无 无 无 教师表 无 无 无 无 无 无 无 无 无 无 学生的其他备注信息 学院专业序号各2位 课程的名字 学院专业序号各2位 课程的学分 课程的上课地点 课程要求的学习时间 课程的考试方式 学院(部门)专业(科室)序号各2位 教师的姓名 教师的性别 教师的年龄 教师的职称 教师的教龄 教师的电话 教师所在学院 学生选课的成绩 教师讲授课程的教学效果 学生毕业设计成绩 非空、唯一 非空 0.5-9 非空 非空 只能C(闭卷)或O(开卷) 非空、唯一 非空 只能男女 10-80岁 0-100分 一般、中等、良好、优秀 (不)及格、中、良、优秀 字20B 否 符 字符 字符 字符 整型 字符 字符 6B 否 是 2B 5B 2B 2B 否 否 否 否 否 否 否 否 6B 是 是 字20B 否 否 符 字符 整型 2B 否 否 1B 否 否 字10B 否 否 符 整型 1B 否 否 字12B 否 否 符 字40B 否 否 符 浮4B 否 否 点 字4B 否 否 符 字4B 否 否 符 《数据库技术》课程设计报告 7
2) 数据结构
数据字典的数据结构如表所示。 结构名称 学生表 存储名称 Student 别名 S 组成 学号、姓名、性别、出生日期、电话、部门、民族、政治面貌、来源地、入学成绩、备注 课程号、课程名、上课地点、学分、学时、考核方式 学号、课程号和成绩 备注 永久存储 永久存储 永久存储 课程表 选课表 教师表 授课表 指导表 学生视图 教师视图 DBA视图
Course StudentCourse Teacher TeacherCourse TeacherStudent StudentView TeacherView DBAView C SC T TC TS SV TV DV 工号、姓名、性别、年龄、职称、永久教龄、电话、学院 存储 工号、课程号和授课效果 工号、学号和成绩 永久存储 永久存储 工号、职称和教龄;选课的最高、临时最低、平均和总学分 使用 本人信息和本人指导、授课的学生信息 所有信息(建议使用多个视图) 临时使用 临时使用 3) 数据流
数据字典的数据流如表所示。 数据流名称 编辑选修信息 编辑授课信息 编辑指导信息 学生查询信息 教师查询信息 DBA编辑信息
数据流来源 S、C、T、TC S、C、T S、T 数据流去向 SC TC TS 组成 学号、课程号、选课成绩 课程号、课程名、授课效果 工号、学号、毕设成绩 备注 SV(S、C、T、SC、S、C、SC、TC、TS、工号、职TempTable 称、教龄 TC、TS) TV(S、C、T、SC、S、C、T、SC、TC、TS TempTable TC、TS) DV(S、C、T、SC、S、C、T、SC、TC、TS TempTable TC、TS) 《数据库技术》课程设计报告 8
4) 数据存储
数据字典的数据存储如表所示。
数据存储名称 学生表 物理存储名称 组成 学号、姓名、性别、出生日期、电话、部门、民族、政治面貌、来源地、入学成绩、备注 备注 Student 实体 课程表 教师表 选课表 授课表 指导表
课程号、课程名、课程导师、上课地点、学分、学时、考核方式 工号、姓名、性别、年龄、职称、Teacher 教龄、电话、学院 StudentCourse 学号、课程号、成绩 工号、课程号和授课效果 TeacherCourse TeacherStudent 工号、学号和成绩 Course 实体 实体 联系 联系 联系 5) 处理过程
数据字典的处理过程如表所示。 处理过程名称 学生统计 教师统计 DBA编辑 输入数据流 处理内容 选课的最高、最低、平均和总学分 成绩的最高、最低、平均和各个分数段的人数 常规统计信息 输出数据流 SV TV DV 备注 S、C、SC S、C、T、SC、TC、TS S、C、SC、T、TC、TS
《数据库技术》课程设计报告 9
3.数据流图
学生登记表 学生选课表 教师登记表
学生信息 选课信息 成绩信息 教师信息 学生登陆 学生信息 选课 登记成绩 教师信息 教师登陆 课程信息 课程登记表 教师信息 课程信息 学生 课程信息 学生信息 教师信息 教师 授课 教师信息 上课 授课登记表 授课信息 授课 选课信息 授课信息 指导登记表
3 概念结构设计
.根据需求分析得到的具体要求,绘制E—R 图如下。
《数据库技术》课程设计报告 10
出生日期 政治面貌 入学成绩 联系方式 学 号 来源地 姓名 学 生 性别 部门 备注 民族 选 课 成 绩 课程号 课 程 课程名 上课地点 学时 考核方式 学分
图1-选课管理局部E-R图
《数据库技术》课程设计报告 11
工号 姓名 性别 年龄 职称 教龄 学院 电话 教师 讲授 授课效果 课程 课程号 课程名 先修课 学分
图2-教授管理局部E-R图
图3-指导管理局部E-R图
《数据库技术》课程设计报告 12
学号 姓名 性别 年龄 职称 教龄 学院 电话 教师 指导 毕设成绩 学生 工号 姓名 年龄 性别 学院 学生 选课 课程 教师 讲授 图4-学生管理系统全局E-R图
《数据库技术》课程设计报告 13
4逻辑结构设计
1)根据系统的概念结构,其逻辑结构设计如下:
学生(学号,姓名,性别,出生日期,电话,部门,民族,政治面貌,来源地,入学成绩,备注)
课程(课程号,课程名,上课地点,学分,学时,考核方式) 选课(学号,课程号,成绩)
2)根据系统的逻辑结构和应用需求,其外模式的视图设计如下:
学生视图(学号,姓名,性别,年龄, 电话,部门,民族,政治面貌,来源地,入学成绩,课程号,课程名,上课地点,学时,考核方式学分,成绩,最高分、最低分、平均分,总学分 )
DBA选课视图(学号,姓名,性别,年龄,电话,部门,民族,政治面貌,来源地,入学成绩,课程号,课程名,上课地点,学时,考核方式,学分,成绩)
3) 根据上述的转换结果,在对关系模式中数据进行规范化处理后,得到了符合第三范式的关系模式如下:
学生:{学号、姓名、性别、年龄、电话、部门、民族、政治面貌、来源地、入学成绩、备注}
课程:{课程号、课程名、上课地点、学时、考核方式、学分} 选修:{学号、课程号、成绩}
4)满足3NF:
(1)学生表(Student)中的属性有 学号(SNo),姓名(Sname),性别(Ssex),出生日期(Sbirth),电话(Sphone),部门(Scoll),民族(Snation),政治面貌(Spaob),来源地(Sbirthplace-Sbplace),入学成绩(Ssgrade-Ssg),备注(Sremarks-Srem)。
Student(U1,F1)
U1={SNo,Sname,SSex,Sbirth,Sphone,SColl,Snation,Spaob,Sbp,Ssg,Srem}
F1={SNo→(Sname.SSex,Sbirth,Sphone,SColl,Snation,Spaob,Sbplace,Ssg,Srem)}
(2)课程表(Course)中的属性有 课程号(CNo),课程名(Cname),上课地点(Cclass),考核方式(Cexamsy),学时(Cperiod),学分(Credit)。 Course(U2,F2)
U2={CNo,CName,Ctname,Cclass,Cexamsy,Cperiod,Credit} F2={CNo→(CName ,Cclass,Cexansy,Cperiod,Credit)}
《数据库技术》课程设计报告 14
(3)选课表(StudentCourse)中的属性有学号(SNo),课程号(CNo),成绩(Grade)。 StudentCourse(U3,F3)
U3={SNo,CNo,Grade} F3={(SNo,CNo)→Grade}
4)教师表(Teacher)中的属性有工号(TNo),教师姓名(TName),教师性别(Tsex),教师年龄(TAge),职称(Title),教龄(SchAge),教师电话(Tphone),教师学院(TColl). Teacher(U4,F4)
U4={TNo,TName,TSex,TAge,Title,SchAge,TPhone,TColl} F4={TNo→(TName,TSex,TAge,Title,SchAge,TPhone,TColl)}
5) 授课表(TeacherCourse)中的属性有教师工号(TNo),课程号(CNo),教学效果(TGrade). TeacherCourse(U5,F5)
U5={TNo,CNo,TGrade} F5={(TNo,CNo)→TGrade}
6) 指导表(TeacherStudent)中的属性有教师工号(TNo),学生学号(SNo),毕设成绩
(GDsign)
TeacherStudent(U6,F6)
U6={TNo,SNo,GDsign} F6={(TNo,SNo)→GDsign}
5.物理结构设计
(1)主要是设计表结构。一般地,实体对应于表,实体的属性对应于表的列,实体之间的关系成为表的约束。逻辑设计中的实体大部分可以转换成物理设计中的表,但是它们并不一定是一一对应的。
(2)对表结构进行规范化处理(第三范式)。
(3)表汇总 表名 表A 表B 表C 表D 表E 表F 功能说明 记录学生的基本信息 记录课程的基本信息 记录教师的基本信息 记录选课的基本信息 记录授课的基本信息 记录教师对学生的指导信息 《数据库技术》课程设计报告 15
表A 表名 列名 学号 姓名 性别 出生日期 电话 部门 民族 政治面貌 来源地 入学成绩 备注 补充说明 类型 char char char char char char Char Char Char Int char 宽度 10 20 1 10 11 40 15 2 10 4 10 学生表 规则 非空、唯一 非空 只能m(男)w(女) 只能群众、党或团员 存储名称Student 别名S 永久存储 注:(1)该表存放全校所有学生的基本信息,每个学生产生一条记录。 表B 表名 列名 课程号 课程名 上课地点 学时 考核方式 学分 补充说明 类型 char char char Int char 宽度 6 20 5 2 1 课程表 规则 非空、唯一 非空 非空 非空 只能C(闭卷)O(开卷) 0.5—9 char 2 存储名称Course 别名C 永久存储 注:该表存放某校所有的课程信息,每门课产生一条记录。 表C
表名 列名 工号 姓名 数据类型(精度范围) 字符 字符 教师表 空/非空 非空 非空 约束条件 唯一 《数据库技术》课程设计报告 16
性别 年龄 职称 教龄 电话 学院 补充说明
字符 整型 字符 整型 字符 字符 只能男女 10-80岁 存储名称Teacher 别名T 永久存储 表D 表名 列名 学号 类型 char 宽度 10 名 课程号 成绩 补充说明 char 20 主键、内容取自课程信息表的课程名称 char 4 0--100 存储名称StudentCourse 别名SC 永久存储 选课表 规则 主键、内容取自学生信息表的学生姓注:该表存放蓝天大学所有学生的成绩信息,每个学生学习每门课程产生一条记录。
表E
表名 列名 工号 课程号 授课效果 补充说明 数据类型(精度范围) 字符 字符 字符 授课表 空/非空 非空 非空 约束条件 唯一 唯一 一般、中等、良好、优秀 存储名称TeacherCourse 别名TC 永久存储 表F
表名 列名 工号 数据类型(精度范围) 字符 指导表 空/非空 非空 约束条件 唯一 《数据库技术》课程设计报告 17
学号 成绩 补充说明
字符 浮点 非空 唯一 (不)及格、中、良、优秀 存储名称TeacherStudent 别名TS 永久存储 6.数据保护设计
6.1防止用户直接操作数据库的方法
采用用户标识和鉴别检测机制。即:用户进入系统时必须首先输入用户的帐号和密码,然后系统对其进行鉴别 ,通过系统鉴别后才能使用系统资源。
6.2用户帐号密码的加密方法
用动态户标识和鉴别,它是使用变化的用户标识信息进行身份鉴别的机制。即:静态用户名和动态密码。采用验证码登陆机制(用户名称+密码+验证码),其基本思想为:验证码是把随机产生的多个数字或者字符组成的字符串,生成一幅图片,同时在图片里加上噪声(防止OCR识别),并由用户肉眼识别其中的验证码信息,提交网站验证。
6.3角色与权限 角色 学生 可以访问的表与列 S,C,SC,SV 操作权限 SELECT 教师
S,C,T,SC,TC,TS TV SELECT SELECT,UPDATE,EXECUTE 7.运行管理与维护说明
(1)转储和恢复。DBA需要定期定时有计划的对数据库及其日志文件进行备份,从而确保发生故障时,利用后备副本,可以把数据库恢复到一致状态,并尽量减少数据库的损失。
(2)安全性控制。随着系统运行,应用环境会发生变化,对安全性的要求会改变,用户的密级也随之改变。因此,需要DBA根据实际情况修改原有的安全性控制。
(3)完整性控制。在系统运行过程中,对实体、参照和用户定义等完整性的要求会发生改变。因此需要DBA根据实际情况修改原有的完整性控制。
(4)性能维护。性能维护是对系统性能的监督、分析和改进。监督系统运行,并对监测数据进行分析,从而找出改进系统性能的方法。同时综合运行管理和评价的改进建议,对系统进行调整和改进。
《数据库技术》课程设计报告 18
(5)重组与重构。随着系统运行,对元组的添加、删除和修改等更新操作,会降低数据库存储空间的利用率和数据的存取效率,使数据库的性能下降。因此,需要对数据库进行重组。重组通常不需要改变逻辑结构和物理结构;如果需要添加新实体,或者实体之间的联系发生了变化,则需要重构数据库的逻辑结构和物理结构。显然重构数据库可能会导致数据库数据丢失。
8.SQL语句及部分关键Java语句
=============================================================== 系统说明书
===============================================================
建立数据库StudentDatabase的SQL Server语句: --------------------------------------------------------------- JavaIDLStudentDatabase-DBTable.txt
---------------------------------------------------------------
数据库
--------------------------------------------------------------- StudentDatabase
---------------------------------------------------------------
数据表
--------------------------------------------------------------- 建立数据库StudentDatabase的SQL Server语句: --------------------------------------------------------------- JavaIDLStudentDatabase-DBTable.txt
--------------------------------------------------------------- 数据库
--------------------------------------------------------------- StudentDatabase
--------------------------------------------------------------- 部分数据表(表Student Course StudentCourse) --------------------------------------------------------------- Student
CREATE TABLE Student(
SNo CHAR(10) PRIMARY KEY NOT NULL, SName CHAR(20) NOT NULL, SSex CHAR(2), Sbirth CHAR(10), Sphone CHAR(11),
SColl CHAR(40), NOT NULL,
《数据库技术》课程设计报告 19
Snation CHAR(15), NOTNULL, Spaob CHAR(4), NOT NULL, Sbplace CHAR(10),
SSgrade CHAR(4), NOTNULL, Srem CHAR(10);
Course
CREATE TABLE Course(
CNo CHAR(10) PRIMARY KEY NOT NULL, CName CHAR(20) NOT NULL, CCredit INT),
Cclass CHAR(4),NOTNULL, Cperiod INT(2), NOTNULL, Ces CHAR(1);
StudentCourse
CREATE TABLE StudentCourse( SNo CHAR(10) NOT NULL, CNo CHAR(10) NOT NULL, Grade FLOAT,
PRIMARY KEY (SNo, CNo),
FOREIGN KEY (SNo) REFERENCES Student(SNo), FOREIGN KEY (CNo) REFERENCES Course(CNo));
TempStudentCourse
CREATE TABLE TempStudentCourse( SNo CHAR(10) NOT NULL, CNo CHAR(10) NOT NULL, Grade FLOAT, SName CHAR(20), CName CHAR(20),
PRIMARY KEY (SNo, CNo),
FOREIGN KEY (SNo) REFERENCES Student(SNo), FOREIGN KEY (CNo) REFERENCES Course(CNo)); --------------------------------------------------------------- 子程序
--------------------------------------------------------------- JavaIDLNameDBMS 其中:Name为模块名称
---------------------------------------------------------------
使用SQL Server 2000建立数据库的说明
《数据库技术》课程设计报告 20
--------------------------------------------------------------- 如果用户使用的是SQL Server 2000,
则只需使用SQL Server 2000的查询分析器, 并把在SQL Server 2000的查询分析器中, 运行本书提供的建立数据库的相应文档即可。 --------------------------------------------------------------- 运行环境设置
--------------------------------------------------------------- 1. 安装JDK6.0 2. 安装JDBC驱动
3. 安装EclipseSDK环境 4. 附加数据库
5. 在Eclipse中导入程序
END
1、 添加
public class add implements ActionListener, ItemListener { JLabel lb[], lable, lable1; JPanel pan[]; JComboBox cmb; JTextField tf1, tf[]; JButton bt, handin; CardLayout card; Connection con; public add() throws IOException { cmb = new JComboBox(); cmb.addItemListener(this); card = new CardLayout(); tf1 = new JTextField(10); tf1.setEditable(false); lable = new JLabel(\"现在进入新增模式\"); lable.setHorizontalAlignment(JLabel.CENTER); //lable.setForeground(Color.red); lable.setFont(new Font(\"华文行楷\ bt = new JButton(\"下一步\"); bt.setIcon(new ImageIcon(\"but1.gif\")); bt.addActionListener(this); handin = new JButton(\"提交\"); handin.addActionListener(this); // 以下初始化各个成员 lb = new JLabel[7]; for (int i = 0; i < lb.length; i++) { lb[i] = new JLabel(\"\ } tf = new JTextField[5]; for (int i = 0; i < tf.length; i++) { tf[i] = new JTextField(3); } // 初始化 pan pan = new JPanel[8]; for (int i = 0; i < pan.length; i++) { pan[i] = new JPanel(); } lb[0].setText(\"您要增加几名学生的信息:\"); lb[1].setText(\"请输入您要增加的学生的数目:\"); // 以下进行初级设置
《数据库技术》课程设计报告 21
}
public void actionPerformed(ActionEvent e) {
// ******************************************************** if (e.getSource() == bt) { card.show(pan[0], \"card2\"); }
// ********************************************************
if (e.getSource() == handin) { try { con = DriverManager.getConnection(\"jdbc:odbc:student\ //con= DriverManager. getConnection(\"jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=student\
} catch (SQLException e2) { JOptionPane.showMessageDialog(studentGUI.cp, \"系统出错11!!\学生信息管理系统\ JOptionPane.WARNING_MESSAGE); }
pan[0].setLayout(card);
pan[1].setLayout(new GridLayout(4, 1, 0, 20)); pan[2].setLayout(new FlowLayout()); pan[3].setLayout(new FlowLayout()); pan[4].setLayout(new FlowLayout()); // 以下进入正题
cmb.addItem(\"只增加一名\"); cmb.addItem(\"增加多名\"); pan[2].add(lb[0]); pan[2].add(cmb); pan[3].add(lb[1]); pan[3].add(tf1); pan[4].add(bt); pan[1].add(lable); pan[1].add(pan[2]); pan[1].add(pan[3]); pan[1].add(pan[4]);
lable1 = new JLabel(\"请输入学生信息\//lable1.setForeground(Color.red);
lable1.setFont(new Font(\"华文行楷\lb[2].setText(\"学号 \"); lb[3].setText(\"姓名 \"); lb[4].setText(\"性别\"); lb[5].setText(\"年龄\"); lb[6].setText(\"专业\");
lb[2].setSize(new Dimension(20, 10)); pan[5].setLayout(new BorderLayout());
pan[6].setLayout(new GridLayout(5, 3, 0, 50)); pan[7].setLayout(new FlowLayout()); pan[6].add(lb[2]); pan[6].add(tf[0]);
pan[6].add(new JLabel(\" \")); pan[6].add(lb[3]); pan[6].add(tf[1]);
pan[6].add(new JLabel(\" \")); pan[6].add(lb[4]); pan[6].add(tf[2]);
pan[6].add(new JLabel(\" \")); pan[6].add(lb[5]); pan[6].add(tf[3]);
pan[6].add(new JLabel(\" \")); pan[6].add(lb[6]); pan[6].add(tf[4]);
pan[7].add(handin);
pan[5].add(\"North\pan[5].add(\"Center\pan[5].add(\"South\//pan[0].add(\"card1\pan[0].add(\"card2\
String id = tf[0].getText(); String name = tf[1].getText(); String ss1 = tf[2].getText();
int ss2 = change(tf[3].getText()); String ss3 = tf[4].getText(); tf[0].setText(\"\"); tf[1].setText(\"\"); tf[2].setText(\"\"); tf[3].setText(\"\"); tf[4].setText(\"\");
try { news(id, name, ss1, ss2, ss3); } catch (SQLException e1) { JOptionPane.showMessageDialog(studentGUI.cp, \"操作失败!!\学生信息管理系统\ JOptionPane.WARNING_MESSAGE); }
《数据库技术》课程设计报告 22
}
} }
// ********************************************************* public void itemStateChanged(ItemEvent e) {
if (cmb.getSelectedIndex() == 1) { tf1.setEditable(true); } else tf1.setEditable(false); }
// ******************************************************** public void news(String id, String name, String ss1, int ss2, String ss3) throws SQLException { }
//******************************************************* public int change(String s) { return (Integer.parseInt(s)); }
//*******************************************************
String sql = \"INSERT INTO student VALUES(?,?,?,?,?)\"; PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, id); ps.setString(2, name); ps.setString(3, ss1); ps.setInt(4, ss2); ps.setString(5, ss3); ps.executeUpdate(); con.close();
JOptionPane.showMessageDialog(studentGUI.cp, \"添加成功\");
2、删除
public class delete implements ActionListener { JLabel lb[], lable, lable1; JPanel pan[]; JComboBox cmb; JTextField tf1, tf[]; JButton bt, handin; CardLayout card; Connection con; Statement s; public delete() throws IOException { cmb = new JComboBox(); card = new CardLayout(); tf1 = new JTextField(10); tf1.setEditable(false); lable = new JLabel(\"现在进入删除模式\"); lable.setHorizontalAlignment(JLabel.CENTER); lable.setForeground(Color.red); lable.setFont(new Font(\"华文行楷\ bt = new JButton(\"下一步\"); bt.setIcon(new ImageIcon(\"but1.gif\")); bt.addActionListener(this); handin = new JButton(\"提交\"); handin.addActionListener(this); // 以下初始化各个成员 lb = new JLabel[7]; for (int i = 0; i < lb.length; i++) { lb[i] = new JLabel(\"\ } tf = new JTextField[2]; for (int i = 0; i < tf.length; i++) { tf[i] = new JTextField(3); } // 初始化 pan pan = new JPanel[7]; for (int i = 0; i < pan.length; i++) { pan[i] = new JPanel(); } lb[0].setText(\"请选择删除方式:\");
《数据库技术》课程设计报告 23
// }
// 以下进行初级设置 pan[0].setLayout(card);
pan[1].setLayout(new GridLayout(3, 1, 0, 20)); pan[2].setLayout(new FlowLayout()); pan[3].setLayout(new FlowLayout()); // 以下进入正题
cmb.addItem(\"删除某一特定学生\");
cmb.addItem(\"删除某一学号段内的学生\"); pan[2].add(lb[0]); pan[2].add(cmb); pan[3].add(bt); pan[1].add(lable); pan[1].add(pan[2]); pan[1].add(pan[3]);
lable1 = new JLabel(\"请输入要删除的学生的信息\//lable1.setForeground(Color.red);
lable1.setFont(new Font(\"华文行楷\lb[1].setText(\"学号 \"); lb[2].setText(\"姓名 \");
pan[4].setLayout(new BorderLayout());
pan[5].setLayout(new GridLayout(4, 3, 0, 70)); pan[6].setLayout(new FlowLayout()); pan[5].add(new JLabel(\" \")); pan[5].add(new JLabel(\" \")); pan[5].add(new JLabel(\" \")); pan[5].add(lb[1]); pan[5].add(tf[0]);
pan[5].add(new JLabel(\" \")); pan[5].add(lb[2]); pan[5].add(tf[1]);
pan[5].add(new JLabel(\" \")); pan[6].add(handin);
pan[4].add(\"North\pan[4].add(\"Center\pan[4].add(\"South\pan[0].add(\"card1\pan[0].add(\"card2\
public void actionPerformed(ActionEvent e) { }
// ******************************************************** if (e.getSource() == bt) { card.show(pan[0], \"card2\"); }
// ******************************************************** if (e.getSource() == handin) { }
try { con = DriverManager.getConnection(\"jdbc:odbc:student\ s = con.createStatement(); } catch (SQLException e2) { JOptionPane.showMessageDialog(studentGUI.cp, \"系统出错!!\ \"学生信息管理系统\}
String id = tf[0].getText(); String name = tf[1].getText(); tf[0].setText(\"\"); tf[1].setText(\"\");
try { del(id, name);
} catch (SQLException e1) { JOptionPane.showMessageDialog(studentGUI.cp, \"系统出错!!\ \"学生信息管理系统\}
// ********************************************************
public void del(String id, String name) throws SQLException { if(name.equals(\"\")&&id.equals(\"\")){ JOptionPane.showMessageDialog(studentGUI.cp, \"学号和姓名不能同时为空!!\学生信息管理系统\ JOptionPane.PLAIN_MESSAGE); } else{ if (name.equals(\"\")) { PreparedStatement ps = con .prepareStatement(\"delete from student where sno=?\"); ps.setString(1, id); ps.executeUpdate(); } else if (id.equals(\"\")) { PreparedStatement ps = con .prepareStatement(\"delete from student where sname=?\"); ps.setString(1, name);
《数据库技术》课程设计报告 24
}
}
} else { }
ps.executeUpdate();
PreparedStatement ps = con
.prepareStatement(\"delete from student where sname=? and sno=?\"); ps.setString(1, name); ps.setString(2, id); ps.executeUpdate();
JOptionPane.showMessageDialog(studentGUI.cp, \"操作成功!!\学生信息管理系统\ JOptionPane.PLAIN_MESSAGE); }
s.close(); con.close();
//*******************************************************
3、查询
public class search implements ActionListener, ItemListener { JLabel lb[], lable, lable1; JPanel pan[]; JComboBox cmb; JTextField tf1, tf[]; JButton bt, handin; CardLayout card; Connection con; Statement s; private RSTable table; private JTextArea jta; public search() throws IOException { cmb = new JComboBox(); cmb.addItemListener(this); card = new CardLayout(); tf1 = new JTextField(10); tf1.setEditable(false); lable = new JLabel(\"现在进入查找模式\"); lable.setHorizontalAlignment(JLabel.CENTER); lable.setForeground(Color.red); lable.setFont(new Font(\"华文行楷\ bt = new JButton(\"下一步\"); bt.setIcon(new ImageIcon(\"but1.gif\")); bt.addActionListener(this); handin = new JButton(\"提交\"); handin.addActionListener(this); // 以下初始化各个成员 lb = new JLabel[7]; for (int i = 0; i < lb.length; i++) { lb[i] = new JLabel(\"\ } tf = new JTextField[2]; for (int i = 0; i < tf.length; i++) { tf[i] = new JTextField(3); } // 初始化 pan pan = new JPanel[7]; for (int i = 0; i < pan.length; i++) { pan[i] = new JPanel(); } lb[0].setText(\"请选择查找方式:\"); // 以下进行初级设置 pan[0].setLayout(card); pan[1].setLayout(new GridLayout(3, 1, 0, 20)); pan[2].setLayout(new FlowLayout()); pan[3].setLayout(new FlowLayout()); // 以下进入正题 cmb.addItem(\"查找某一特定学生\"); cmb.addItem(\"查找某一学号段内的学生\"); pan[2].add(lb[0]); pan[2].add(cmb); pan[3].add(bt);
《数据库技术》课程设计报告 25
}
public void actionPerformed(ActionEvent e) { try { table.setQuery(jta.getText()); }catch (SQLException se) {//显示出错信息 JOptionPane.showMessageDialog( null, se.toString(), \"数据库错误\ } /*
// ******************************************************** if (e.getSource() == bt) { card.show(pan[0], \"card2\"); }
// ******************************************************** if (e.getSource() == handin) { pan[1].add(lable); pan[1].add(pan[2]); pan[1].add(pan[3]);
lable1 = new JLabel(\"请输入要查找的学生的信息\//lable1.setForeground(Color.red);
lable1.setFont(new Font(\"华文行楷\lb[1].setText(\"学号 \"); lb[2].setText(\"姓名 \");
pan[4].setLayout(new BorderLayout());
pan[5].setLayout(new GridLayout(4, 3, 0, 70)); pan[6].setLayout(new FlowLayout()); pan[5].add(new JLabel(\" \")); pan[5].add(new JLabel(\" \")); pan[5].add(new JLabel(\" \")); pan[5].add(lb[1]); pan[5].add(tf[0]);
pan[5].add(new JLabel(\" \")); pan[5].add(lb[2]); pan[5].add(tf[1]);
pan[5].add(new JLabel(\" \")); pan[6].add(handin);
pan[4].add(\"North\pan[4].add(\"Center\pan[4].add(\"South\///////////////////////////
// super( \"JdbcGUI应用程序:显示数据库查询结果\" ); // 设置窗口标题
String qs = \"select * from student\"; // 设置初始显示的SQL语句 try {
table = new RSTable(qs ); // 创建RSTable对象 jta = new JTextArea( qs, 2, 100 );//设置文本区 jta.setWrapStyleWord( true ); // 设置换行属性
jta.setLineWrap( true ); // 设置文本区换行属性 jta.setFont(new Font(\"宋体\设置字体 JScrollPane scrollPane = new JScrollPane(jta,
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER ); // 设置滚动面板 JLabel jl= new JLabel(
\"输入SQL语句:\"); JButton jb = new JButton( \"查询\"); JPanel jp=new JPanel(); // 创建面板对象 jp.setLayout(new BorderLayout()); // 设置面板的布局为BorderLayout jp.add(jl,BorderLayout.WEST); // 添加到面板 jp.add(scrollPane,BorderLayout.CENTER); // 添加到面板 jp.add(jb,BorderLayout.EAST); // 添加到面板 JTable resultTable = new JTable(table); resultTable.getTableHeader().setBackground(Color.blue); //设置表格标题背景色为蓝色 resultTable.getTableHeader().setForeground(Color.orange); //设置表格标题前景色为橙色 pan[4].add( jp, BorderLayout.NORTH ); // 添加面板到窗体 pan[4].add( new JScrollPane(resultTable), BorderLayout.CENTER ); // 添加表格到窗体 jb.addActionListener(this); // 注册动作监听器 }catch ( ClassNotFoundException e) { JOptionPane.showMessageDialog( null, \"数据库驱动程序未找到!\驱动程序未找到\ JOptionPane.ERROR_MESSAGE ); System.exit(1); // 终止应用程序 }catch (SQLException e) { JOptionPane.showMessageDialog( null, \"数据库错误!\ \"数据库错误\ System.exit(1); // 终止应用程序 } pan[0].add(\"card2\ 《数据库技术》课程设计报告 26 } } }*/ try { con = DriverManager.getConnection(\"jdbc:microsoft:sqlserver:127.0.0.1:1433;DatabaseName=student\ s = con.createStatement(); } catch (SQLException e2) { JOptionPane.showMessageDialog(studentGUI.cp, \"系统出错!!\ \"学生信息管理系统\} String id = tf[0].getText(); String name = tf[1].getText(); tf[0].setText(\"\"); tf[1].setText(\"\"); try { lookup(id, name); } catch (SQLException e1) { JOptionPane.showMessageDialog(studentGUI.cp, \"系统出错!!\ \"学生信息管理系统\} JOptionPane.showMessageDialog(studentGUI.cp, \"操作成功!!\学生信息管理系统\ JOptionPane.PLAIN_MESSAGE); // ********************************************************* public void itemStateChanged(ItemEvent e) { } // ******************************************************** public void lookup(String id, String name) throws SQLException { PreparedStatement ps = con .prepareStatement(\"delete from student where sno=?\"); ps.setString(1, id); JOptionPane.showMessageDialog(studentGUI.cp, ps, \"查找结果\ JOptionPane.PLAIN_MESSAGE); if (cmb.getSelectedIndex() == 1) { tf1.setEditable(true); } else tf1.setEditable(false); s.close(); con.close(); } // ******************************************************* 4、修改 public class correct implements ActionListener { JLabel lb[], lable, lable1; JPanel pan[]; JComboBox cmb; JTextField tf1, tf[]; JButton bt, handin; CardLayout card; Connection con; Statement s; public correct() throws IOException { cmb = new JComboBox(); card = new CardLayout(); tf1 = new JTextField(10); tf1.setEditable(false); lable = new JLabel(\"现在进入修改模式\"); lable.setHorizontalAlignment(JLabel.CENTER); lable.setForeground(Color.red); lable.setFont(new Font(\"华文行楷\ bt = new JButton(\"下一步\"); bt.setIcon(new ImageIcon(\"but1.gif\")); bt.addActionListener(this); handin = new JButton(\"提交\"); handin.addActionListener(this); // 以下初始化各个成员 lb = new JLabel[5]; for (int i = 0; i < lb.length; i++) { lb[i] = new JLabel(\"\ } 《数据库技术》课程设计报告 27 } tf = new JTextField[4]; for (int i = 0; i < tf.length; i++) { tf[i] = new JTextField(3); } // 初始化 pan pan = new JPanel[7]; for (int i = 0; i < pan.length; i++) { pan[i] = new JPanel(); } lb[0].setText(\"请选择修改方式:\"); // 以下进行初级设置 pan[0].setLayout(card); pan[1].setLayout(new GridLayout(3, 1, 0, 20)); pan[2].setLayout(new FlowLayout()); pan[3].setLayout(new FlowLayout()); // 以下进入正题 cmb.addItem(\"修改某一特定学生\"); cmb.addItem(\"修改某一学号段内的学生\"); pan[2].add(lb[0]); pan[2].add(cmb); pan[3].add(bt); pan[1].add(lable); pan[1].add(pan[2]); pan[1].add(pan[3]); lable1 = new JLabel(\"请输入要修改的学生的信息\//lable1.setForeground(Color.red); lable1.setFont(new Font(\"华文行楷\lb[1].setText(\"学号 \"); lb[2].setText(\"性别\"); lb[3].setText(\"年龄\"); lb[4].setText(\"专业\"); pan[4].setLayout(new BorderLayout()); pan[5].setLayout(new GridLayout(4, 3, 0, 70)); pan[6].setLayout(new FlowLayout()); pan[5].add(lb[1]); pan[5].add(tf[0]); pan[5].add(new JLabel(\" \")); pan[5].add(lb[2]); pan[5].add(tf[1]); pan[5].add(new JLabel(\" \")); pan[5].add(lb[3]); pan[5].add(tf[2]); pan[5].add(new JLabel(\" \")); pan[5].add(lb[4]); pan[5].add(tf[3]); pan[5].add(new JLabel(\" \")); pan[6].add(handin); pan[4].add(\"North\pan[4].add(\"Center\pan[4].add(\"South\//pan[0].add(\"card1\pan[0].add(\"card2\ public void actionPerformed(ActionEvent e) { // ******************************************************** if (e.getSource() == bt) { card.show(pan[0], \"card2\"); } // ******************************************************** if (e.getSource() == handin) { try { con = DriverManager.getConnection(\"jdbc:odbc:student\ s = con.createStatement(); } catch (SQLException e2) { JOptionPane.showMessageDialog(studentGUI.cp, \"系统出错!!\学生信息管理系统\ JOptionPane.WARNING_MESSAGE); } String id = tf[0].getText(); String sc1 = tf[1].getText(); int sc2 = Integer.parseInt(tf[2].getText()); String sc3 = tf[3].getText(); tf[0].setText(\"\"); tf[1].setText(\"\"); tf[2].setText(\"\"); tf[3].setText(\"\"); try { corr(id, sc1, sc2, sc3); } catch (SQLException e1) { JOptionPane.showMessageDialog(studentGUI.cp, \"系统出错!!\学生信息管理系统\ JOptionPane.WARNING_MESSAGE); 《数据库技术》课程设计报告 28 } } } } // ******************************************************** public void corr(String id, String d1, int d2, String d3) throws SQLException { /*PreparedStatement ps = con .prepareStatement(\"UPDATE student set ssex=? sage=? sdept=? where sno=? \"); } ps.setString(1, d1); ps.setInt(2, d2); ps.setString(3, d3); ps.setString(4, id);*/ String sqlstr=\"UPDATE student set ssex='\"+d1+\"',sage=\"+d2+\//ps.executeUpdate(); System.out.println(sqlstr); Statement st=con.createStatement(); st.executeUpdate(sqlstr); JOptionPane.showMessageDialog(studentGUI.cp, \"操作成功!!\学生信息管理系统\ JOptionPane.PLAIN_MESSAGE); s.close(); con.close(); //******************************************************* 附: import java.awt.*; import java.awt.event.*; import java.io.IOException; import java.sql.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import javax.swing.*; import java.io.FileReader; import javax.swing.table.*; 心得与体会 这次课程设计是数据库课程的课程设计,数据库应用课程设计是计算机技术专业重要的实践课程之一,是在掌握程序设计语言的基础上,学习《数据库原理》课程后的一次综合实践练习。通过本课程设计,将在课堂上了解和掌握的数据库原理以及设计阶段的方法与技术,直接运用到实际系统的开发工作中。 我在本小组中的主要任务是程序的编写及修改。在课程设计初期,我们小组首先确定的课题题目,在细致地讨论了系统的需求,列出了相应的模块,并进行了结构化设计。然后我再根据我们的初步研究结果,确定我的编程方向,开始我的任务。我通过借阅相关书籍,上网查阅资料等方式,完成了我的系统编程初稿。但在系统测试阶段,出现了很多的问题和错误。 比如数据库文件的导入路径出错,导致数据库连接错误;由于在SQL2000平台式运行,还需要装载msbase.jar,mssqlserver.jar,msutil.jar文件;通过学习,了解到Connection(连接),DriverManager(驱动程序管理器),Statement(语句),ResultSet(结果集)的功能及用法。通过这次课程设计,我不仅清楚地知道了自己在数据库原理知识和高级编程语言方面的不足,还认识到了在合作过程中,个人的力量总是不足的,需要大家一起协作。我们真切地体验了软件项目管理技能和方法,熟悉了软件工具与环境,把课堂学习的理论知识很好的在实践中运用了起来。我们小组成员之间合作默契,奋斗虽是艰苦的,但收获是快乐的。我们相信,在大家的不懈努力之下目标一定可以达成,我们也将在学习数据库及其他网络编程语言的道路上更加进步。 《数据库技术》课程设计报告 29 参考资料 1、《Java数据库应用程序编程指南》【美】Kevin Mukhar 、Todd Lauinger、John Carnell著; 2、 《数据库技术》 西北工业大学出版社 韩培友 等著; 3、《Java程序设计》 清华大学出版社 雍俊海 编著; 4、 《Java数据库编程实例》 清华大学出版社 孙一林 彭波 著 因篇幅问题不能全部显示,请点此查看更多更全内容