• 1、什么是数据库数据库简称 DB,是按照数据结构来组织、存储和管理数据的仓库,用户可以对文件的数据进行增加、删除、修改、查找等操作。 2、常见的数据库产品 ① Oracle:oracle公司推出的数据库系统。优势:...

    1、什么是数据库?

    数据库简称 DB,是按照数据结构来组织、存储和管理数据的仓库,用户可以对文件的数据进行增加、删除、修改、查找等操作。

    2、常见的数据库产品

      Oracle:oracle公司推出的数据库系统。优势:移植性好、使用方便、功能性强、适用于大、中、小微机环境。

    SQL Server : Microsoft 公司推出的数据库系统,广泛应用于电子商务、银行、保险、电力等行业。 缺点:只能在 Windows 平台上运行。

    ③  MySQL:开放源码数据库。优点:开源、快捷、跨平台性、方便、免费等特点。

    3、DB存储结构

    4、表结构

    数据表的横向被称为“行”,纵向被称为“列”,行列交叉处的数据被称为“值”。数据表中的的每一行内容被称为“记录”,每一列的列名称被称为“字段”。

    5、MySQL数据库

    • 开源的关系型数据库管理系统
    • 由瑞典 MySQL AB公司开发,先后被Sun 和 Oracle 公司收购
    • 在web开发领域,MySQL依然占据着举足轻重的地位

    6、MySQL数据库优点:

    ①  低成本

    MySQL是开源免费的,开发人员自由修改,降低了开发成本。

    ②  跨平台

    不仅可在 Windows 平台上使用,还可以在 Linux、Macos 等14个平台使用。

    ③  高性能

    多线程以及sql算法的设计,使其可以充分使用 CPU 资源。

    ④上手快

    MySQL 使用标准的SQL数据语言形式,方便用户操作。

    ⑤API 接口

    提供多种编程语言的 API ,方便操作数据库。例如 Java、C、C++、php等。

     

    展开全文
  • 1.数据库的系统需求分析原理及方法详解,数据库的范式讲解; 2.数据库子查询 3.数据库编程变量的定义,条件语句,循环语句等编程基础; 4.索引的作用,索引的分类,创建索引的原则,索引的管理,如何优化数据库; 5....
  • 一、 概述 本网上商城是一个综合性的B2C平台,可以在商城浏览商品、下订单、以及参加各种活动 管理员、运营可以在平台后台... 设计一个网购商城的数据库,以实现网购商城网站系统 2.12数据库选择 系统采用MyS...

    一、 概述
    本网上商城是一个综合性的B2C平台,可以在商城浏览商品、下订单、以及参加各种活动
    管理员、运营可以在平台后台管理系统中管理商品、订单、会员等。
    客服可以在后台管理系统中处理用户的询问以及投诉。
    不过,暂时可能技术还不够硬……
    二、需求分析
    2.1 数据库设计目的
    设计一个网购商城的数据库,以实现网购商城网站系统

    2.12数据库选择
    系统采用MySQL作为数据库
    2.13数据库编码
    数据库采用UTF-8编码格式

    2.2需要完成的功能

    功能描述:

    1. 后台管理系统:管理商品、订单、类目、商品规格属性、用户管理以及内容发布等功能。
    2. 前台系统:用户可以在前台系统中进行注册、登录、浏览商品、首页、下单等操作。
    3. 会员系统:用户可以在该系统中查询已下的订单、收藏的商品、我的优惠券、团购等信息。
    4. 订单系统:提供下单、查询订单、修改订单状态、定时处理订单。
    5. 搜索系统:提供商品的搜索功能。
    6. 单点登录系统:为多个系统之间提供用户登录凭证以及查询登录用户的信息。

    2.3数据表设计

    2.30 E-R图的模型设计
    (1)实体集
    用户 商品 商品类目 订单
    (2)实体间联系
    用户与商品多对多关系
    商品与商品类目一对多关系(分类)
    用户与购物车一对一关系(用户只能拥有一购物车)
    用户与订单细节一对多关系
    购物车与商品一对多关系(一购物车可以存放多个商品)
    购物车与订单细节一对多关系

    (3)E-R图
    实体间联系E-R图
    这里写图片描述

    2.31商品表:

    CREATE TABLE `tb_item` (
      `id` bigint(20) NOT NULL COMMENT '商品id,同时也是商品编号',
      `title` varchar(100) NOT NULL COMMENT '商品标题',
      `sell_point` varchar(500) DEFAULT NULL COMMENT '商品卖点',
      `price` bigint(20) NOT NULL COMMENT '商品价格,单位为:分',
      `num` int(10) NOT NULL COMMENT '库存数量',
      `barcode` varchar(30) DEFAULT NULL COMMENT '商品条形码',
      `image` varchar(500) DEFAULT NULL COMMENT '商品图片',
      `cid` bigint(10) NOT NULL COMMENT '所属类目,叶子类目',
      `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '商品状态,1-正常,2-下架,3-删除',
      `created` datetime NOT NULL COMMENT '创建时间',
      `updated` datetime NOT NULL COMMENT '更新时间',
      PRIMARY KEY (`id`),
      KEY `cid` (`cid`),
      KEY `status` (`status`),
      KEY `updated` (`updated`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品表';
    

    2.32商品描述表:

    CREATE TABLE `tb_item_desc` (
      `item_id` bigint(20) NOT NULL COMMENT '商品ID',
      `item_desc` text COMMENT '商品描述',
      `created` datetime DEFAULT NULL COMMENT '创建时间',
      `updated` datetime DEFAULT NULL COMMENT '更新时间',
      PRIMARY KEY (`item_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品描述表';
    

    2.33商品类目表:

    CREATE TABLE `tb_item_cat` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '类目ID',
      `parent_id` bigint(20) DEFAULT NULL COMMENT '父类目ID=0时,代表的是一级的类目',
      `name` varchar(50) DEFAULT NULL COMMENT '类目名称',
      `status` int(1) DEFAULT '1' COMMENT '状态。可选值:1(正常),2(删除)',
      `sort_order` int(4) DEFAULT NULL COMMENT '排列序号,表示同级类目的展现次序,如数值相等则按名称次序排列。取值范围:大于零的整数',
      `is_parent` tinyint(1) DEFAULT '1' COMMENT '该类目是否为父类目,1为true,0为false',
      `created` datetime DEFAULT NULL COMMENT '创建时间',
      `updated` datetime DEFAULT NULL COMMENT '创建时间',
      PRIMARY KEY (`id`),
      KEY `parent_id` (`parent_id`,`status`) USING BTREE,
      KEY `sort_order` (`sort_order`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1183 DEFAULT CHARSET=utf8 COMMENT='商品类目';
    
    

    2.34用户表:

    CREATE TABLE `tb_user` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `username` varchar(50) NOT NULL COMMENT '用户名',
      `password` varchar(32) NOT NULL COMMENT '密码,加密存储',
      `phone` varchar(20) DEFAULT NULL COMMENT '注册手机号',
      `email` varchar(50) DEFAULT NULL COMMENT '注册邮箱',
      `created` datetime NOT NULL,
      `updated` datetime NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `username` (`username`) USING BTREE,
      UNIQUE KEY `phone` (`phone`) USING BTREE,
      UNIQUE KEY `email` (`email`) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8 COMMENT='用户表';
    

    2.35内容表:

    CREATE TABLE `tb_content` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `category_id` bigint(20) NOT NULL COMMENT '内容类目ID',
      `title` varchar(200) DEFAULT NULL COMMENT '内容标题',
      `sub_title` varchar(100) DEFAULT NULL COMMENT '子标题',
      `title_desc` varchar(500) DEFAULT NULL COMMENT '标题描述',
      `url` varchar(500) DEFAULT NULL COMMENT '链接',
      `pic` varchar(300) DEFAULT NULL COMMENT '图片绝对路径',
      `pic2` varchar(300) DEFAULT NULL COMMENT '图片2',
      `content` text COMMENT '内容',
      `created` datetime DEFAULT NULL,
      `updated` datetime DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `category_id` (`category_id`),
      KEY `updated` (`updated`)
    ) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8;
    

    2.36内容分类表:

    CREATE TABLE `tb_content_category` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '类目ID',
      `parent_id` bigint(20) DEFAULT NULL COMMENT '父类目ID=0时,代表的是一级的类目',
      `name` varchar(50) DEFAULT NULL COMMENT '分类名称',
      `status` int(1) DEFAULT '1' COMMENT '状态。可选值:1(正常),2(删除)',
      `sort_order` int(4) DEFAULT NULL COMMENT '排列序号,表示同级类目的展现次序,如数值相等则按名称次序排列。取值范围:大于零的整数',
      `is_parent` tinyint(1) DEFAULT '1' COMMENT '该类目是否为父类目,1为true,0为false',
      `created` datetime DEFAULT NULL COMMENT '创建时间',
      `updated` datetime DEFAULT NULL COMMENT '创建时间',
      PRIMARY KEY (`id`),
      KEY `parent_id` (`parent_id`,`status`) USING BTREE,
      KEY `sort_order` (`sort_order`)
    ) ENGINE=InnoDB AUTO_INCREMENT=98 DEFAULT CHARSET=utf8 COMMENT='内容分类';
    

    2.37订单表:

    CREATE TABLE `tb_order` (
      `order_id` varchar(50) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '订单id',
      `payment` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '实付金额。精确到2位小数;单位:元。如:200.07,表示:200元7分',
      `payment_type` int(2) DEFAULT NULL COMMENT '支付类型,1、在线支付,2、货到付款',
      `post_fee` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '邮费。精确到2位小数;单位:元。如:200.07,表示:200元7分',
      `status` int(10) DEFAULT NULL COMMENT '状态:1、未付款,2、已付款,3、未发货,4、已发货,5、交易成功,6、交易关闭',
      `create_time` datetime DEFAULT NULL COMMENT '订单创建时间',
      `update_time` datetime DEFAULT NULL COMMENT '订单更新时间',
      `payment_time` datetime DEFAULT NULL COMMENT '付款时间',
      `consign_time` datetime DEFAULT NULL COMMENT '发货时间',
      `end_time` datetime DEFAULT NULL COMMENT '交易完成时间',
      `close_time` datetime DEFAULT NULL COMMENT '交易关闭时间',
      `shipping_name` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '物流名称',
      `shipping_code` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '物流单号',
      `user_id` bigint(20) DEFAULT NULL COMMENT '用户id',
      `buyer_message` varchar(100) COLLATE utf8_bin DEFAULT NULL COMMENT '买家留言',
      `buyer_nick` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT '买家昵称',
      `buyer_rate` int(2) DEFAULT NULL COMMENT '买家是否已经评价',
      PRIMARY KEY (`order_id`),
      KEY `create_time` (`create_time`),
      KEY `buyer_nick` (`buyer_nick`),
      KEY `status` (`status`),
      KEY `payment_type` (`payment_type`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
    

    2.38订单项表:

    CREATE TABLE `tb_order_item` (
      `id` varchar(20) COLLATE utf8_bin NOT NULL,
      `item_id` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '商品id',
      `order_id` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '订单id',
      `num` int(10) DEFAULT NULL COMMENT '商品购买数量',
      `title` varchar(200) COLLATE utf8_bin DEFAULT NULL COMMENT '商品标题',
      `price` bigint(50) DEFAULT NULL COMMENT '商品单价',
      `total_fee` bigint(50) DEFAULT NULL COMMENT '商品总金额',
      `pic_path` varchar(200) COLLATE utf8_bin DEFAULT NULL COMMENT '商品图片地址',
      PRIMARY KEY (`id`),
      KEY `item_id` (`item_id`),
      KEY `order_id` (`order_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
    
    展开全文
  • 湖南科技大学计算机科学与工程学院 《数据库系统》 课 程 设 计 题 目: 教学管理系统 专 业:计算机科学与技术 年 级: 2017级 班 级: 计科三班 ...数据库系统课程设计是为了配合数据库原理及应用开发而...

    二话不说,先怼源码:
    gitHub源码地址

    题 目: 教学管理系统 专 业:计算机科学与技术
    作 者: 马志成
    完成时间:2019年1月3日

    一.实验目的

    数据库系统课程设计是为了配合数据库原理及应用开发而设置的,是计算机科学与技术、 网络工程、信息安全、物联网工程、软件工程等专业集中实践的教学环节,是将关系数据库 理论知识转化为解决实际问题能力的重要环节。数据库系统课程设计目的在于加深对关系数 据库理论知识的理解,通过使用具体的 DBMS,掌握一种实际的数据库管理系统并掌握其 操作技术,熟练掌握使用数据库前端开发工具(如 VB、C++、Java、Delphi、PowerBuilder 等),进一步提高同学们运用数据库技术解决实际问题的能力。

    二.实验平台

    数据库:Mysql
    页面及朱语句:java(),开发工具eclipse。

    三.实验内容

    目前市面上流行的数据库管理系统有:适合大型企业的Oracle,适合中小型企业的SQL SERCER,以及开源的Mysql。考虑到数据库管理系统的易操作性以及实验的实际情况,本次课程设计使用的是开源的Mysql。使用的数据库操作语言是java。将数据库操作SQL语言嵌入java语句中完成数据库各项增删改查等操作。同时用户操作界面也是使用java实现。Java加载MySQL的驱动,实现利用java操作数据库。利用两周的时间完成有关数据库的各项原型设计以及有关数据库的模型设计和实现。同时完成前端界面的编写,数据库与java的连接,数据库的安全性的测试,java操作数据库的测试和改善。在完成了对数据库中数据的基本增删改查的功能之后利用多余的时间完成其他操作,包括模糊查询等。本次课程设计的前端界面的编写可以使用任意的工具。可以使用安卓的AS,也可以使用eclipse的windoubuilder插件等等的各种工具。设计的界面采用菜单或对话框的形式,根据自己所选的课程设计题目给出系统分析,设计出概念模型,以及实现最后的运营以及维护。

    四.实验要求

    经典的桌面数据库应用开发是典型的 C/S 计算模式,即应用数据库前端开发工具编写客 户端程序,通过客户端程序来连接和访问后台数据库。考虑到同学们都学习过 Java,因此, 本次选用 Java 作为前台数据库开发工具(也可以选用 VB、Delphi、C/C++等)。 两周的课程设计要求同学们开发一个小型数据库管理信息系统。所设计的小型管理信息 系统应包含查询、插入、删除、修改、统计、用户权限管理等基本功能,界面采用菜单或对 话框的形式。根据同学们所选的设计课题,给出系统需求分析,设计出系统的概念模型、逻 辑模型,用 SQL 语言实现数据库的建立、应用和维护,最后写出详细的设计说明书。 本次课程设计要求同学们充分认识数据库系统课程设计对培养自己动手能力的重要性, 认真做好设计前的各项准备工作。虚心接受老师的指导,充分发挥自学能力和查找资料的能 力。结合课题,独立思考,努力钻研,勤于实践,勇于创新。独立完成规定的工作任务,不 得弄虚作假,不准抄袭他人内容,否则成绩以不及格计。严格要求自己,按时、按质、按量 完成每天的课程设计任务。

    五.实验步骤

    1.系统需求分析

    1系统功能分析本系统主要有以下功能要求:课程设置,包括:增加、删除、查询和修改课程信息。 课程时间和教室的安排,以及课程清单打印输出。 l学生选课和学生课表的打印输出。 l课程学生名单的打印输出和期末成绩输入。 l成绩查询、报表。
    1.2系统功能模块设计系统各功能模块的关系如图 1 所示。 图 1、教学管理信息系统功能模块图 因为使用这套系统的人员不光是教务管理人员,还包括教师和学生。不同的身份对数据 库的操作权限也不同。为了避免管理的混乱,需要针对不同的角色分别设计客户端应用程序, 对同一个数据库进行合理的修改。页面流程图:
    1.3 与其他系统的关系教学管理信息系统同样是校园信息管理系统的一个有机组成部分。需要从学生信息管理 系统获取学生的个人信息,从教师信息管理系统获取任课教师的相关信息。同时,提供的成 绩单为其他系统提供必要的参考。
    1.4数据流程图教学信息管理系统的数据流程如图

    2.数据库设计

    2.1数据库需求分析根据我们前面的分析,教学信息管理系统需要以下数据项:课程:课程号、课程名称、讲课教师、学分、学时、上课时间、上课地点、简介、 课程状态。 l选课结果:记录编号、选课人、所选课程。成绩单:记录编号、学生、课程、成绩。所需的外部数据支持: l 学生:学号、姓名、班级。 l教师:员工号、姓名、课程院系。
    2.2数据库概念结构设计本系统所需数据的 E-R 模型图:
    2.3数据库逻辑结构设计需要3个基本信息表:教师信息、学生信息、课程信息。其中, 教师信息和学生信息在实际系统中是从其它信息管理系统的数据表中直接读取。学生的选课 信息需要用 1 个表来单独保存。由于每学期期末前都要进行选课,因此选课结束后要将这个 表的内容及时保存到成绩单数据表中。使用本系统的不光是教务处的管理人员和教师,每个 学生都需要登录到选课系统进行课程的选择。因此,需要对不同的登录人员进行密码认证和 权限的限制,防止出现越权行为。用户名、密码和权限单独保存在 1 个数据表中。另外需要 一个课程状态代码表,这 7 个数据表的结构如表 1 到表 7 所示(请设计者完成这 7 个数据表 的逻辑结构)。

    3.各个功能模块的设计与实现

    3.1功能说明本系统需要按照不同的用户分别创建 3 个工程:教师课程管理应用程序、教务课程调度 应用程序和学生选课应用程序。 首先,三个模块的用户的权限是有很大的差异的,教务处的用户的权限大于教师的用户权限,教师的用户权限大于学生的用户权限。所以登录不同的模块对于数据的操作的允许范围是不同的。

    一.教务课程调度应用程序功能说明。
    登录教务处权限的模块,可以对所有数据进行操作,包括学生的各项学习的查询。学生的课程的查询,教授的信息查询,教师设置课程的查询以及教师和学生的学习的的增删改查等等。同时此用户权限拥有对所有数据的掌握。
    
    二.教师课程管理应用程序功能说明。

    教师登录模块主要进行的是对于教师信息的修改查询以及对学生信息的查询和学生成绩的设置与查询。以及开设课程。

    三.学生选课应用程序功能说明。

    学生用户的权限较低,他只有对自己的信息的修改以及查询成绩,查询教师所开设课程和选课的去权利。四.实现了用户数据的导入导出。在实现了基本的增删改查的基础上对于自己完成的教务管理系统,新增加了数据导出为Excel格式和从Excel中读取数据至数据库中的新功能。
    3.2用户界面设计根据权限的不同,用户界面分为三类,登录选项也为三类,各模块的界面视图如图所示:
    1.教务管理系统用户权限界面如图,用户可以在界面内选择相应的群像进行登录。
    2.教务处用户登录界面,选择相应的用户权限之后进入相应的用户的登录界面。其它两个用户权限的登录界面与之类似,以下只展示一个登录界面。输入密码或者账号错误会有相应的提示框。
    3.教务处用户的登录后主操作界面。教务处用户登录后进行相应数据的操作。左侧为一个树目录结构,点击各个子节点可以进行各个表之间的转换。右面为各个子操作界面的展示,在子界面内进行各个数据的查看与操作。
    4.教师权限用户的主界面如图所示,教师可以在主界面完成相应的操作,包括学生信息的查询,成绩的添加修改,课程的设置与修改等。
    5.学生用户的登录主界面,进行查课,选课和成绩查询及个人信息修改等操作。教师登录后查询学生的成绩哥信息等,同时可以查询和修改自己的信息。同时在界面内设置和修改自己要开设的课程。
    6.数据库的建立。
    7.数据以Excel的形式导入导出。连接数据库之后可以实现数据的导入和导出为Excel形式。实现数据的导入导出要在java的驱动文件中加载。建立相应的导入导出数据的类,并进行定义,再链接数据库进行定义,就实现数据的导入导出。 导入导出的连接数据库的部分代码如图所示。其主要能容为建立一个workbook的工作部,在工作簿中完成导入导出的各项操作。
    8.代码目录结构的展示,基本文件的分类为是按照各个页面的分类来进行的,即一个页面为一个java文件,其它的辅助文件和数据库连接文件为一个java文件。
    4.1实验中的错误一、 写界面遇到的错误
    1、表格的表头无法显示 我一开始用的String类型的数组储存的表头,表格也是用的数组,表头无法显示;然后我百度发现,表格要先放入一个容器才能显示表头。我按照例子改用vctor类型储存我的表头,但是我一开始是用的add方法把表格加入容器的,所以表头还是无法显示,通过百度我才知道表头的数组显示方法才能让表头显示,而且容器的布局不能为null。然后表格就正常了2、登陆界面(不管我是否输入了信息,都可以正常地登陆)我一开始是用
    user.equals("")||user==null来判断的,没有去掉字符串前后的空格,所以不管怎么判断字符串其实是有空格的,所以不管怎么都可以成功登陆,二、写数据库的错误1、我的数据库一开始不能输入中文安装的时候没有注意Mysql的语言类型,默认的语言不是中文,所以不能输入中文,把每个表改成了utf8,改了之后虽然在navicat可以输入中文,但是如果在mysql里面打开后,发现全部用?替代了。然后就百度,根据百度的方法,我打开mysql查看发现除了一部分的字符属性改成了utf8,其余都没有变,然后把全部都改了以后,还是会乱码。后来我发现是我eclipes这边的代码还是之前的语言类型,然后就把全部都改了,就可以输入了中文。

    六.实验心得

    为期两周的数据库课程设计马上结束,在这两周里面收获颇丰。从课设开始的第一天,我们在老师的指导和阅读指导书的前提下自主完成了一个简单的数据库系统的编写。从系统的分析,到整体的设计,再到数据库的建立,以及java前端页面的编写。数据库驱动的加载。可以说整个的项目开发都是由一个人完成。这是在本学期学习了java课程和数据库课程之后的第一次也是在校的一次很宝贵的实战经验总结。之前对两门课程的学习只是简单的基础学习,没有设计到整个系统的开发。但是在这次的实践中对于整个系统开发有了更深的认识。从专业知识学习的角度说,首先我学会了作为一个系统的整个数据库的建立和完善。学会将SQL语句嵌入java中,对数据库进行操作。也学会了如何利用java的Mysql驱动连接数据库,这为之后的java的其他开发奠定了坚实的基础。其次数据库可课程设计更是提升了java的实战能力。在本次课设中,通过主函数中对其他各个累的调用和 其他设计,更深层次的了解或者说是掌握了java的面向对象这一概念。此次开发总共涉及了自己编写的大大小小的十几个java文件,但正是由于面向对象的思想,对于java的操作却没有想象的那么复杂。系统的维护和改动也只需要在相应的子文件里面做改动。本次实战中具有突出的是在java的主界面的编写中,为了对于各个子文件(子页面)的操作更加的简便,也为了主菜单格式的统一,我使用了树目录结构的方式,使得主界面的操作灵活方便。也使得各个操作在主界面的显示样式更加的统一方便好看。总体来说本次的数据库课程设计从整体上独立完成了一个系统的开发。为之后多项专业课的学习打下了坚实的基础,也是一个检验自己java与数据库知识掌握程度的机会,在此次课程设计中收获颇丰,再次有类似的学习事件机会。
    以下为本人的数据库课设的页面展示。希望对读者有所启迪。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

    展开全文
  • 最近写完了数据库课程设计,想把整个源码的编辑过程发出来。程序很简单,需要有很多完善的地方,在这里,我想和大家分享写这个程序的心路历程。 首先,在开始写程序之前。我们需要先写一些工具类,来辅助完成整个...
    
     

    最近写完了数据库的课程设计,想把整个源码的编辑过程发出来。程序很简单,需要有很多完善的地方,在这里,我想和大家分享写这个程序的心路历程。

    首先,在开始写程序之前。我们需要先写一些工具类,来辅助完成整个程序的构建,在这里我把连接jdbc的代码放在了一个包下面。

    如下图:

    在这里我们先来写最基本的类,jdbcDrive,这是负责和数据库进行连接,并且执行语句的类

     

    public class jdbcDrive {
    	public static Connection connection;
    	public static Statement statement;
    	public static ResultSet  resultset;
    	public static void jdbcConnection(){
    		try {
    		    connection = DriverManager.getConnection(jdbc.dbURL, jdbc.userName,jdbc.userPwd);
    			System.out.println("连接数据库成功!");
    			} catch (Exception e) {
    			System.out.print("SQL Server连接失败!");
    			}
    	}
    	
    	public static void jdbcConnectionClose(){
    		try {
    			connection.close();
    			System.out.println("数据库连接成功关闭");
    		} catch (SQLException e) {
    			System.out.println("数据库连接关闭失败");
    		}
    	}
    	
    	public static void jdbcExecuteUpdate(String s) throws SQLException{
    		jdbcConnection();
    		statement=connection.createStatement();
    		statement.executeUpdate(s);
    	}
    	
    	public static void jdbcExecuteQuery(String s) throws SQLException{
    		jdbcConnection();
    		statement=connection.createStatement();
    		resultset=statement.executeQuery(s);
    	}
    	public static void main(String [] args) {
    	}
    }
    

    在这里我选择的是SQL SERVER 2014,它的jdbc版本已经不需要加载数据库了,可以直接进行连接,在这里分为四个方法。其中两个是负责,数据库的连接和释放。jdbcExecuteUpdate负责传递SQL的增加,修改,删除,不需要有结果集的语句。jdbcExecuteQuery负责进行jdbc的查询,将查询的结果放在resultset里面。Connection类是负责进行数据库的连接,Statement 负责传递查询语句。resultset是结果集,负责保存储存的信息。

     

     

    在进行数据的连接的时候,需要向数据库传递参数。我把参数放在了一个接口里面。

     

    public interface jdbc {
        String dbURL = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Dormitory";
    	String userName = "sa";
    	String userPwd = "123456";
    }

    写完基本的jdbc类之后,我们在进行整个系统的界面搭建。

     

    设计主界面的时候,用到以下几个类,第一个是用于放置菜单选项的JMenuBar,它是放置JMenu的容器,而JMenu是房子JMenuItem的容器。具体的构建过程就是,在JFrame里添加JMenu,用来表示要放置的菜单选项,在JMenu里面放置JMeunItem用来表示菜单的子选项。其中,用了JLabel来存放图片。各个JMenuItem的监听事件放在了一个单独的包里面。具体的搭建界面如下:

     

     

    public class Login extends JFrame {
    	private JButton loginButton,exitButton;
    	private JLabel userNameLabel,passwordLabel;
    	private JTextField userNameText;
    	private JPasswordField passwordText;
    	private HandleAction handleAction;
    	private static JPanel loginPanel;
    	private ManagementUi MainUi;
    	private Toolkit toolKit=null;
    	private Dimension screenSize=null;
    	public static personManage nowPeople;
    	public  Login(){
    		Init();
    	}
    	
    	public void Init(){
    		//获取当前窗口,并且获取屏幕的尺寸
    		toolKit=Toolkit.getDefaultToolkit();
    		screenSize=toolKit.getScreenSize();
    		//加载封装了图片的Panel子类,并添加到当前JFrame容器里面
    	    loginPanel=new LoginPanel();
    		loginPanel.setLayout(null);
    		add(loginPanel);
    		//将整个图框居中
         	setBounds(screenSize.width/2-loginPanel.getWidth()/2
         			,screenSize.height/2-loginPanel.getHeight()/2
         			,loginPanel.getWidth(),loginPanel.getHeight());
    		handleAction=new  HandleAction();
    		this.setIconImage(new ImageIcon("resource/picture.png").getImage());
    		//向loginPanel容器加入两个Jlabel,两个按钮,一个文本框,一个密码框
    		userNameLabel=new JLabel("用户名");
    		userNameLabel.setBounds(100, 120, 200, 18);
    		loginPanel.add(userNameLabel);
    		
    		userNameText=new JTextField();
    		userNameText.setBounds(150, 120, 150, 18);
    		loginPanel.add(userNameText);
    		
    		passwordLabel=new JLabel("密码");
    		passwordLabel.setBounds(100, 180, 200, 18);
    		loginPanel.add(passwordLabel);
    		
    		passwordText=new JPasswordField();
    		passwordText.setBounds(150, 180, 150, 18);
    		loginPanel.add(passwordText);
    		
    		loginButton=new JButton("登录");
    		loginButton.setBounds(150, 230, 60, 18);
    		loginPanel.add(loginButton);
    		
    		exitButton=new JButton("退出");
    		exitButton.setBounds(230, 230, 60, 18);
    		loginPanel.add(exitButton);
    		
    		exitButton.addActionListener(handleAction);
    		loginButton.addActionListener(handleAction);
    		setTitle("宁悦宿舍管理系统");
    		this.setResizable(false);
    		setVisible(true);
    		setDefaultCloseOperation(this.EXIT_ON_CLOSE);
    	}
    	private class HandleAction implements ActionListener{
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			if(e.getSource()==loginButton){
    				String pass=new String(passwordText.getPassword());
    				if(jdbcLogin.Judge(userNameText.getText(),pass)){
    					nowPeople=new personManage(userNameText.getText(),null,null,pass);
    					MainUi=new ManagementUi();
    					Login.this.setVisible(false);
    				}else{
    					JOptionPane.showMessageDialog(Login.this,"不是系统的合法用户或密码错误" );
    				}
    				
    			}else if(e.getSource()==exitButton) {
    				Login.this.dispose();
    			}
    		}
    	}
    	
    	public static void main(String [] args){
    		Login in=new Login();
    	}
    }
    
    class LoginPanel extends JPanel {
    	protected ImageIcon icon = new ImageIcon("resource/login.jpg");
    	public int width = icon.getIconWidth(), height = icon.getIconHeight();
    	public LoginPanel() {
    		super();
    		setSize(width, height);
    	}
    	protected void paintComponent(Graphics g) {
    		super.paintComponent(g);
    		Image img = icon.getImage();
    		 g.drawImage(img, 0, 0, icon.getIconWidth(),
    			      icon.getIconHeight(), icon.getImageObserver());
    	}
    }

    搭建完界面之后,我们按这个顺序来进行代码编码,首先,编写管理员的登录界面,然后写学生的管理界面,在写宿舍的管理界面,最后写调宿的管理界面。

     

    下面先来看登录界面的的截图:

     


     

    下面是整个登录界面的源代码:

     

    public class Login extends JFrame {
    	private JButton loginButton,exitButton;
    	private JLabel userNameLabel,passwordLabel;
    	private JTextField userNameText;
    	private JPasswordField passwordText;
    	private HandleAction handleAction;
    	private static JPanel loginPanel;
    	private ManagementUi MainUi;
    	private Toolkit toolKit=null;
    	private Dimension screenSize=null;
    	public static personManage nowPeople;
    	public  Login(){
    		Init();
    	}
    	
    	public void Init(){
    		//获取当前窗口,并且获取屏幕的尺寸
    		toolKit=Toolkit.getDefaultToolkit();
    		screenSize=toolKit.getScreenSize();
    		//加载封装了图片的Panel子类,并添加到当前JFrame容器里面
    	    loginPanel=new LoginPanel();
    		loginPanel.setLayout(null);
    		add(loginPanel);
    		//将整个图框居中
         	setBounds(screenSize.width/2-loginPanel.getWidth()/2
         			,screenSize.height/2-loginPanel.getHeight()/2
         			,loginPanel.getWidth(),loginPanel.getHeight());
    		handleAction=new  HandleAction();
    		this.setIconImage(new ImageIcon("resource/picture.png").getImage());
    		//向loginPanel容器加入两个Jlabel,两个按钮,一个文本框,一个密码框
    		userNameLabel=new JLabel("用户名");
    		userNameLabel.setBounds(100, 120, 200, 18);
    		loginPanel.add(userNameLabel);
    		
    		userNameText=new JTextField();
    		userNameText.setBounds(150, 120, 150, 18);
    		loginPanel.add(userNameText);
    		
    		passwordLabel=new JLabel("密码");
    		passwordLabel.setBounds(100, 180, 200, 18);
    		loginPanel.add(passwordLabel);
    		
    		passwordText=new JPasswordField();
    		passwordText.setBounds(150, 180, 150, 18);
    		loginPanel.add(passwordText);
    		
    		loginButton=new JButton("登录");
    		loginButton.setBounds(150, 230, 60, 18);
    		loginPanel.add(loginButton);
    		
    		exitButton=new JButton("退出");
    		exitButton.setBounds(230, 230, 60, 18);
    		loginPanel.add(exitButton);
    		
    		exitButton.addActionListener(handleAction);
    		loginButton.addActionListener(handleAction);
    		setTitle("宁悦宿舍管理系统");
    		this.setResizable(false);
    		setVisible(true);
    		setDefaultCloseOperation(this.EXIT_ON_CLOSE);
    	}
    	private class HandleAction implements ActionListener{
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			if(e.getSource()==loginButton){
    				String pass=new String(passwordText.getPassword());
    				if(jdbcLogin.Judge(userNameText.getText(),pass)){
    					nowPeople=new personManage(userNameText.getText(),null,null,pass);
    					MainUi=new ManagementUi();
    					Login.this.setVisible(false);
    				}else{
    					JOptionPane.showMessageDialog(Login.this,"不是系统的合法用户或密码错误" );
    				}
    				
    			}else if(e.getSource()==exitButton) {
    				Login.this.dispose();
    			}
    		}
    	}
    	
    	public static void main(String [] args){
    		Login in=new Login();
    	}
    }
    
    class LoginPanel extends JPanel {
    	protected ImageIcon icon = new ImageIcon("resource/login.jpg");
    	public int width = icon.getIconWidth(), height = icon.getIconHeight();
    	public LoginPanel() {
    		super();
    		setSize(width, height);
    	}
    	protected void paintComponent(Graphics g) {
    		super.paintComponent(g);
    		Image img = icon.getImage();
    		 g.drawImage(img, 0, 0, icon.getIconWidth(),
    			      icon.getIconHeight(), icon.getImageObserver());
    	}
    }


    在的登录的时候,需要连接数据库,在登录模块,我专门为它建立了一个数据库的连接类,来进行数据库的建立。

     

     

     

    public class jdbcLogin {
    	private static HashMap<String,String> people=new HashMap<String,String>();
    	public static boolean Judge(String user,String pass){
    		String SQL = "SELECT * FROM personManage";
    		boolean flag=false;
    		try {
    			jdbcDrive.jdbcConnection();
    			jdbcDrive.statement=jdbcDrive.connection.createStatement();
    			jdbcDrive.resultset=jdbcDrive.statement.executeQuery(SQL);
    		    while (jdbcDrive.resultset.next()) {
    		    	people.put(jdbcDrive.resultset.getString(1).trim(),jdbcDrive.resultset.getString(4).trim());
    		    }
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}finally{
    			jdbcDrive.jdbcConnectionClose();
    		}
    		if(people.containsKey(user)){
    			if(people.get(user).equals(pass)){
    				flag=true;
    			}
    		}else{
    			flag=false;
    		}
    		return flag;
    	}
    }
    


    如果数据库存在对应的账号,则返回true,让用户登录,否则返回false。

     

    数据库建立好了之后,需要进行管理人员的创立,修改,删除。

     

    管理员的界面用表的形式,来进行相应的管理,管理的过程中,点击表中的数据,会相应的显示在下面的文本框里,在这里进行增删改查。每次完成曾删改查,都需要点击查询进行刷新,下面是整体的代码。

     

     

    public class personManageUi {
    	private JFrame mainJframe;
    	private Container con;
    	private JScrollPane JSpane;
    	private MyJTable DataTable;
    	private String [] names={"管理员账号","管理员姓名","管理员性别","管理人员密码"};
    	private JButton btn_Query,btn_Modify,btn_Add,btn_Delete;
    	private JPanel jpn;
    	private JPanel messageJpn;
    	private JTextField nameText,passText,sexText,idText;
    	private personManage personChange;//保存要修改的数据的信息
    	public personManageUi(){
    		mainJframe=new JFrame("管理员管理");
    		mainJframe.setSize(800, 600);
    		mainJframe.setVisible(true);
    		mainJframe.setResizable(false);
    		mainJframe.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    		Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
    		mainJframe.setLocation(screenSize.width/2-400, screenSize.height/2-300);
    		con=mainJframe.getContentPane();
    		con.setLayout(new GridLayout(3,1));
    		DataTable=new MyJTable();
    		DefaultTableModel df=new DefaultTableModel(names,0);
    		df.setRowCount(20);
    		DataTable.setModel(df);
    		DataTable.addMouseListener(new table_selectActionListener());
    		JSpane=new JScrollPane(DataTable);
    		con.add(JSpane);
    		messageJpn=new JPanel();
    		messageJpn.setLayout(new GridBagLayout());
    		setComponent(new JLabel("管理人员账号:"),0,0,1,1,false);
    		idText=new JTextField();
    		setComponent(idText,1,0,1,150,false);
    		setComponent(new JLabel("管理人员姓名:"),2,0,1,1,false);
    		nameText=new JTextField();
    		setComponent(nameText,3,0,1,150,true);
    		setComponent(new JLabel("管理人员性别:"),0,1,1,1,false);
    		sexText=new JTextField();
    		setComponent(sexText,1,1,1,150,false);
    		setComponent(new JLabel("管理人员密码:"),2,1,1,1,false);
    		passText=new JTextField();
    		setComponent(passText,3,1,1,150,true);
    		con.add(messageJpn);
    		jpn=new JPanel();
    		jpn.setLayout(new FlowLayout());
    		con.add(jpn);
    		btn_Add=new JButton("添加");
    		btn_Add.addActionListener(new btn_AddActionListener());
    		jpn.add(btn_Add);
    		jpn.add(new JLabel("     "));
    		btn_Query=new JButton("查询");
    		btn_Query.addActionListener(new btn_QueryActionListener());
    		jpn.add(btn_Query);
    		jpn.add(new JLabel("     "));
    		btn_Modify=new JButton("修改");
    		btn_Modify.addActionListener(new btn_ModifyActionListener());
    		jpn.add(btn_Modify);
    		jpn.add(new JLabel("     "));
    		btn_Delete=new JButton("删除");
    		btn_Delete.addActionListener(new btn_DeleteActionListener());
    		jpn.add(btn_Delete);
    	}
    	/*
    	 * 完成查询按钮的监听事件
    	 */
    	private class btn_QueryActionListener implements ActionListener{
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			// TODO Auto-generated method stub
    			jdbcPersonManage jp=new jdbcPersonManage(null);
    			personManage people;
    			try {
    				jp.personQuery();
    			} catch (SQLException e1) {
    				JOptionPane.showMessageDialog(mainJframe,"无法连接到数据库" );
    			}finally{
    				jdbcDrive.jdbcConnectionClose();
    			}
    			ArrayList<personManage> personlist=jp.getPersonlist();
    			for(int i=0;i<personlist.size();i++){
    				people=personlist.get(i);
    				String [] data={people.getPersonManageId(),people.getPersonManageName(),
    						people.getPersonManageSex(),"**********"};
    				for(int j=0;j<4;j++){
    					DataTable.setValueAt(data[j], i, j);
    				}
    			}
    			for(int i=0;i<4;i++){
    				DataTable.setValueAt("", personlist.size(), i);
    			}
    		}
    	}	
    	/*
    	 * 完成对修改按钮的监听事件
    	 */
    	private class btn_ModifyActionListener implements ActionListener{
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			jdbcPersonManage jpm=new jdbcPersonManage(null);
    			try{
    			if(personChange.getPersonManageName()!=nameText.getText()){
    					jpm.personModify(personChange.getPersonManageId(),
    							"personManageName",nameText.getText());
    			}
    			if(personChange.getPersonManageSex()!=sexText.getText()){
    				    jpm.personModify(personChange.getPersonManageId()
    				    		, "personManageSex", sexText.getText());
    			}
    			if(personChange.getPersonManagepassword()!=passText.getText()){
    				jpm.personModify(personChange.getPersonManagepassword()
    			    		, "personManagepassword",passText.getText());
    			}
    			JOptionPane.showMessageDialog(mainJframe,"修改成功" );
    			 idText.setText("");
                 nameText.setText("");
                 sexText.setText("");
                 passText.setText("");
    		}catch(Exception e1){
    			System.out.println("修改失败");
    			JOptionPane.showMessageDialog(mainJframe,"修改失败" );
    		}finally{
    			jdbcDrive.jdbcConnectionClose();
    		}
    	}
    	}
    	/*
    	 * 完成对表格的监听事件
    	 */
    	private class table_selectActionListener extends  MouseAdapter{
    		public void mouseClicked(MouseEvent event)
            {
                    int row = DataTable.rowAtPoint(event.getPoint());
                    if(row!=-1){
                    personChange=new personManage.personManageBuild()
                    		.addManageId((String) DataTable.getValueAt(row, 0))
                    		.addManageName((String) DataTable.getValueAt(row, 1))
                    		.addManageSex((String) DataTable.getValueAt(row, 2))
                    		.addManagePass((String) DataTable.getValueAt(row, 3))
                    		.CreateManageBuild();
                    idText.setText(personChange.getPersonManageId());
                    nameText.setText(personChange.getPersonManageName());
                    sexText.setText(personChange.getPersonManageSex());
                    passText.setText(personChange.getPersonManagepassword());
                    }
            }
    	}
    	/*
    	 * 完成对增加按钮的监听
    	 */
    	private class btn_AddActionListener implements ActionListener{
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			personManage p=new personManage
    					.personManageBuild()
    					.addManageId(idText.getText().trim())
    					.addManageName(nameText.getText().trim())
    					.addManageSex(sexText.getText().trim())
    					.addManagePass(passText.getText().trim())
    					.CreateManageBuild();
    			jdbcPersonManage jpm;
    			try {
    				jpm = new jdbcPersonManage(p);
    				jpm.personAdd();
    				idText.setText("");
    				nameText.setText("");
    				passText.setText("");
    				sexText.setText("");
    				JOptionPane.showMessageDialog(mainJframe,"添加成功" );
    			} catch (Exception e1) {
    				JOptionPane.showMessageDialog(mainJframe,"无法连接到数据库" );
    			}finally{
    				jdbcDrive.jdbcConnectionClose();
    			}
    		}
    	}
    	/*
    	 * 完成对删除按钮的监听
    	 */
    	private class btn_DeleteActionListener implements ActionListener{
    		@Override
    		public void actionPerformed(ActionEvent e) {
    	
    			personManage p=new personManage
    					.personManageBuild()
    					.addManageId(idText.getText().trim())
    					.CreateManageBuild();
    			jdbcPersonManage jpm=
    					new jdbcPersonManage(p);
    			try {
    				jpm.personDelete();
    				idText.setText("");
    				nameText.setText("");
    				passText.setText("");
    				sexText.setText("");
    				JOptionPane.showMessageDialog(mainJframe, "删除成功");
    			} catch (SQLException e1) {
    				e1.printStackTrace();
    				JOptionPane.showMessageDialog(mainJframe, "删除失败");
    			}
    		}
    	}
    
    	private void setComponent(JComponent component, int gridx, int gridy,
    			int gridwidth, int ipadx, boolean fill) {
    		final GridBagConstraints gridBagConstrains = new GridBagConstraints();
    		gridBagConstrains.gridx = gridx;
    		gridBagConstrains.gridy = gridy;
    		gridBagConstrains.insets = new Insets(10, 15, 3, 1);
    		if (gridwidth > 1)
    			gridBagConstrains.gridwidth = gridwidth;
    		if (ipadx > 0)
    			gridBagConstrains.ipadx = ipadx;
    		if (fill)
    			gridBagConstrains.fill = GridBagConstraints.HORIZONTAL;
    		messageJpn.add(component, gridBagConstrains);
    	}
    	public static void main(String [] args){
    		new personManageUi();
    	}
    }
    

    学生管理部分实现和这个差不多,需要说一下宿舍管理的部分,在宿舍管理的模块,借助树,来进行完整的修改。

     

     

    具体的代码如下:

     

     

    public class dormitoryUpdateUi extends JFrame{
    	private JScrollPane JSPane;
    	private JTree Tree;
    	private JPanel panel;
    	private DefaultMutableTreeNode tmpNode,root;
    	private DefaultTreeModel insert;
    	private ArrayList<Dormitory> dormitory;
    	private JTextField id;
    	private JTextField sex;
    	private JTextField ynumber;
    	private JTextField snumber;
    	private JTextField student;
    	private JTextField money;
    	private JTextField note;
    	private JButton btn_query,btn_Modify,btn_Delete;
    	private String attribute;
    	private String changeAttribute;
    	public dormitoryUpdateUi(){
    		this.setTitle("宿舍更新");
    		this.setVisible(true);
    		this.setSize(800, 600);
    		this.setResizable(false);
    		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    		this.setLocationRelativeTo(null);
    		this.setLayout(new BorderLayout());
    		root=new DefaultMutableTreeNode("文赢13号楼                  ");
    		insert=new DefaultTreeModel(root);
    		Tree=new JTree(root);
    		Tree.addTreeSelectionListener(new treeSelectActionListener());
    		JSPane=new JScrollPane(Tree);
    		this.add(JSPane, BorderLayout.WEST);
    		panel=new JPanel();
    		//panel.setPreferredSize(getPreferredSize());
    		this.add(panel, BorderLayout.CENTER);
    		panel.setLayout(new GridBagLayout());
    		setComponent(new JLabel("宿舍号:"),0,0,1,1,false);
    		id=new JTextField();
    		id.addActionListener(new jf_ActionListener());
    		setComponent(id,1,0,3,1,true);
    		setComponent(new JLabel("住宿性别名:"),0,1,1,1,false);
    		sex=new JTextField();
    		sex.addActionListener(new jf_ActionListener());
    		setComponent(sex,1,1,3,150,true);
    		setComponent(new JLabel("应住人数:"),0,2,1,1,false);
    		ynumber=new JTextField();
    		ynumber.addActionListener(new jf_ActionListener());
    		setComponent(ynumber,1,2,3,150,true);
    		setComponent(new JLabel("实住人数:"),0,3,1,1,false);
    		snumber=new JTextField();
    		snumber.addActionListener(new jf_ActionListener());
    		setComponent(snumber,1,3,3,150,true);
    		setComponent(new JLabel("住宿费:"),0,4,1,1,false);
    		money=new JTextField();
    		money.addActionListener(new jf_ActionListener());
    		setComponent(money,1,4,3,1,true);
    		setComponent(new JLabel("舍长:"),0,5,1,1,false);
    		student=new JTextField();
    		student.addActionListener(new jf_ActionListener());
    		setComponent(student,1,5,3,1,true);
    		setComponent(new JLabel("备注"),0,6,1,1,false);
    		note=new JTextField();
    		note.addActionListener(new jf_ActionListener());
    		setComponent(note,1,6,3,150,true);
    		btn_query=new JButton("查询");
    		btn_query.addActionListener(new btn_queryActionListener());
    		setComponent(btn_query,0,7,1,1,false);
    		btn_Modify=new JButton("修改");
    		btn_Modify.addActionListener(new btn_ModifyActionListener());
    		setComponent(btn_Modify,1,7,1,1,false);
    		btn_Delete=new JButton("删除");
    		btn_Delete.addActionListener(new btn_DeleteActionListener());
    		setComponent(btn_Delete,2,7,1,1,false);
    	}
    	
    	private class btn_queryActionListener implements ActionListener{
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			jdbcDormitory jd=new jdbcDormitory();
    			HashMap<Integer,ArrayList<Dormitory> > number=new HashMap<Integer,ArrayList<Dormitory>>();
    			ArrayList<Dormitory> floordormitory;
    		    int temp;//统计楼数
    			try {
    				jd.dormitoryQuery("");
    				dormitory=jd.getDormitory();
    				for(Dormitory d:dormitory){
    					temp=Integer.parseInt(d.getDormitoryId().substring(2,3));
    					if(!number.containsKey(temp)){
    						floordormitory=new ArrayList<Dormitory>();
    						floordormitory.add(d);
    						number.put(temp, floordormitory);
    					}else{
    					  number.get(temp).add(d);
    					}
    				}
    				Object[] floors;
    				floors=number.keySet().toArray();
    				for(int i=0;i<floors.length;i++)
    				{
    					floordormitory=number.get(floors[i]);
    					tmpNode=new DefaultMutableTreeNode(floors[i]+"楼");
    					insert.insertNodeInto(tmpNode, root, 0);
    					insert.reload();
    					for(int j=0;j<floordormitory.size();j++){
    						tmpNode.add(new DefaultMutableTreeNode(floordormitory.get(j).getDormitoryId()));
    					}
    					floordormitory=null;
    				}
    			} catch (SQLException e1) {
    				e1.printStackTrace();
    			}finally{
    				jdbcDrive.jdbcConnectionClose();
    			}
    		}
    	}
    	private class treeSelectActionListener implements TreeSelectionListener{
    		@Override
    		public void valueChanged(TreeSelectionEvent e) {
    			if(e.getPath().getLastPathComponent().toString().length()==5){
    			Dormitory d=null;
    			String message=e.getPath().getLastPathComponent().toString();
    			for(Dormitory dor: dormitory){
    				if(dor.getDormitoryId().equals(message)){
    					d=dor;
    				}
    			}
    			 id.setText(d.getDormitoryId());
    			 sex.setText(d.getDormitorySex());
    		     ynumber.setText(d.getDormitoryPeople());
    			 snumber.setText(d.getDormitoryPeopleNow());
    			 student.setText(d.getStudentId());
    			 money.setText(d.getMoney());
    			 note.setText(d.getDormitoryNote());
    			}
    		}
    	}
    	
    	private class btn_ModifyActionListener implements ActionListener{
    
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			jdbcDormitory jd=new jdbcDormitory();
    			try{
    				jd.dormitoryModify(id.getText().trim()
    						, attribute,changeAttribute);
    			JOptionPane.showMessageDialog(dormitoryUpdateUi.this,"修改成功" );
    			id.setText("");
    			sex.setText("");
    		    ynumber.setText("");
    		    snumber.setText("");
    			student.setText("");
    		    money.setText("");
    			note.setText("");
    		}catch(Exception e1){
    			e1.printStackTrace();
    			System.out.println("修改失败");
    			JOptionPane.showMessageDialog(dormitoryUpdateUi.this,"修改失败" );
    		}finally{
    			jdbcDrive.jdbcConnectionClose();
    		}
    		}
    	}
    	
    	private class jf_ActionListener implements ActionListener{
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			HashMap<JTextField,String> change=new HashMap<JTextField,String>();
    			change.put(id, "Dnumber");
    			change.put(sex, "Dsex");
    			change.put(ynumber, "Dynumber ");
    			change.put(snumber, "Dsnumber ");
    			change.put(student, "Dstudent ");
    			change.put(money, "Dmoney ");
    			change.put(note, "Dnote");
    			attribute=change.get((JTextField)e.getSource());
    			changeAttribute=((JTextField)e.getSource()).getText().trim();
    		}
    	}
    	private class btn_DeleteActionListener implements ActionListener{
    
    		@Override
    		public void actionPerformed(ActionEvent e) {
    			Dormitory d=new Dormitory
    					.DormitoryBuilder()
    					.addDormitoryId(id.getText().trim())
    					.CreateDormitory();
    			jdbcDormitory js=new jdbcDormitory();
    			try {
    				js.dormitoryQuery("where Dnumber ="+"'"+""+d.getDormitoryId()+"'");
    				if(Integer.parseInt(js.getDormitory().get(0).getDormitoryPeopleNow())!=0){
    					JOptionPane.showMessageDialog(dormitoryUpdateUi.this, "宿舍有成员居住,无法删除");
    				}else{
    				js.dormitoryDelete(d);
    				id.setText("");
    				sex.setText("");
    				ynumber.setText("");
    				snumber.setText("");
    				money.setText("");
    				note.setText("");
    				student.setText("");
    				JOptionPane.showMessageDialog(dormitoryUpdateUi.this, "删除成功");
    				}
    			} catch (SQLException e1) {
    				e1.printStackTrace();
    				JOptionPane.showMessageDialog(dormitoryUpdateUi.this, "删除失败");
    			}
    		}
    		
    	}
    	private void setComponent(JComponent component, int gridx, int gridy,
    			int gridwidth, int ipadx, boolean fill) {
    		final GridBagConstraints gridBagConstrains = new GridBagConstraints();
    		gridBagConstrains.gridx = gridx;
    		gridBagConstrains.gridy = gridy;
    		gridBagConstrains.insets = new Insets(20, 20, 3, 1);
    		if (gridwidth > 1)
    			gridBagConstrains.gridwidth = gridwidth;
    		if (ipadx > 0)
    			gridBagConstrains.ipadx = ipadx;
    		if (fill)
    			gridBagConstrains.fill = GridBagConstraints.HORIZONTAL;
    		panel.add(component, gridBagConstrains);
    	}
    	public static void main(String [] args){
    		dormitoryUpdateUi d=new dormitoryUpdateUi();
    	}
    }
    

     

     

     

     

     

    下面是完整的源代码地址:

    链接:https://pan.baidu.com/s/1zM-sDtoxR07bKydHBh996A 
    提取码:anwn 
     

     

     

     

     

    展开全文
  • 快速掌握Mysql应用,理论为辅,实践为主,本课程属于精简版,目的是让学员快速上手MySQL 本课程是mysql的入门课程,linux  和 windows 下面两种方式对mysql  进行安装,通过sql语句创建数据库,创建...
  • 课程为你讲解数据库开发的用到的技能,数据完整性实现用户只能输入满足要求的数据,创建视图隐藏数据查询的复杂性,使用用户自定义函数,可以在SQL语句中使用自定义函数来加工数据,使用存储过程将复杂的SQL语句...
  • 数据库课程设计个人总结报告 在大二上学期的16周周四,我们小组完成了数据库课程设计,本次课程设计我们小组总共四个人,虽然没有明确谁是组长,但是我感觉分工合作的效率还是挺高的,比预期更快的完成了任务。作为...

    数据库课程设计个人总结报告

       在大二上学期的16周周四,我们小组完成了数据库课程设计,本次课程设计我们小组总共四个人,虽然没有明确谁是组长,但是我感觉分工合作的效率还是挺高的,比预期更快的完成了任务。作为小组的一员,我平时事情比较多,小组分配的任务也没有太多,但还是完美的完成任务,很高兴小组成员一起的共同努力、互相学习。
       在课程设计的开始阶段,老师便给了我们所有人一个实施方案,这比较方便、快速、准确的去完成每天的任务,对于这种分工完成的项目,组员之间的交流是极其必要的。如果组员之间不能很好的沟通,不仅会做很多无用功,而且也会做很多重复的工作。组员之间很好点,我们每天都会在qq上或者见面相互交流。除此之外,我们还相互帮助解决问题,或者共同解决问题,向做概念模型和需求分析的不同任务就是相互帮助的,当然最重要的是我们也常会去与老师沟通,老师也在关键的设计地方也给了很多很多的宝贵意见。
       在完成本次课程设计的阶段,我学到了要多主动积极的思考解决问题。有很多同学比较好学,总是不停的在与别人沟通交流,看似很积极,但是仔细分析他提出的那些问题确实没有太大的价值,稍微思考一下就能解决,只有经过自己不断的思考,才能达到课程设计的效果,没有谁一开始就会,都是后天不断的历练的结果。
       总的看来,要想高效的完成此次数据库课程设计,首先就要有一个扎实的理论基础,掌握课本上的命令操作、重点概念等。其次,团队的合作也是必不可少的,这需要后期的交流锻炼和信任。一个好的团队往往能够起到事半功倍的效果,我就认为我们团队的整体氛围就很好,很和谐,组员能够积极的完成分配的任务。虽然我们小组还有很多不足之处,但是还是值得肯定的,小组成员都很优秀,我自己也要更加努力,这次的课程设计也是一个很好的锻炼,同时也感谢有这么一个机会来提升团队合作的能力。
       今后定将更加积极向前,力争做到更好! 
    
    展开全文
  • 1. 了解和掌握数库基本概念、数据管理技术的发展历程、数据库系统的结构和数据模型等内容。2. 了解数据库的基本特征、生产和发展历程,深入理解和熟连掌握关系数据模型和关系数据库的规范化理论。3. 了解数据库设计...
  • 时间飞逝,转眼之间,数据库课程的学习就要结束了,今天我就对我这一学期以来数据库学习的历程做一个小总结吧。其实,这篇博客的标题已经直接表明今天的内容了。说实话,我本来想起一个高大上一点的名字的,但,奈何...
  • C# 数据库课程设计

    2018-06-28 13:11:14
    数据库课程设计报告 题目:安徽工业大学通讯录管理系统 学号: 159074294姓名: 程效龙班级: 网152指导教师:陈业斌完成日期:2018年6月7日 目录一 引言1.1 通讯录系统设计开发的目的和意义1.2设计通讯录系统...
  • 数据库系统概论数字课程
  • 本学期对“数据库系统概论”的学习已经接近尾声,在这一学期,我深刻理解了数据库的基本概念、基本原理以及SQL语句的使用。通过每周的作业以及数据库实验的大作业,我我对数据库系统的方方面面有了更为清晰的认识。...
  • 数据库课程设计题目

    2010-12-01 13:09:00
    我从周六,11月27日开始做我的数据库课程设计。到现在,做到有点头晕~~~~~开始反省总结 本系列学习日志,将会以三到四天为间隔(或者每天一篇)的进度发表,主要有我在完成这个数据库课程设计中的一些...
  • 在实际的项目开发中,数据库的设计部分是否合理,对于整个项目的成功起着举足轻重的作用。可以不夸张的说,要想成为合格的项目经理、架构师,这个技能你必须掌握----否则你就会成为技术沟通会上的笑柄。 肖老师这...
  • SELECT sname FROM student,sc,course wjere student.sno = `SCHEMA`().sno and sc.cno = course.cno ...SELECT sname FROM student WHERE ...SELECT * FROM WHERE sno=student.sno and cno=1)
  • 数据库课程设计总结

    2008-06-01 19:23:00
    为期两周的数据库课程设计终于完了,现在总结一下,以供自己和大家日后参考1 JSP乱码问题(详见上一篇博客) 不过后来又出新的乱码问题,就是从数据库里面拿出的信息放到JSP页面可以正常显示,但是JSP页面本身的 ...
  • 我从周六,也就是前天,11月27日开始做我的数据库课程设计。到现在,做到有点头晕~~~~~开始反省总结本系列学习日志,将会以三到四天为间隔(或者每天一篇)的进度发表,主要有我在完成这个数据库课程设计中的一些...
  • sqlsever数据库课程设计,内含java(swing)工程+sqlsever数据库+开发文档,可直接食用
  • 1.需求分析 系统需求分析: 随着互联网的发展,计算机的软硬件不断的更新迭代,这时计算机已经可以管理超大规模...随着高校学生人数越来越多,课程越来越丰富,学生多老师少,迫切需要一个数据库管理系统来管理、...
1 2 3 4 5 ... 20
收藏数 147,919
精华内容 59,167