数据库课程设计学生宿舍管理系统
- 格式:doc
- 大小:706.00 KB
- 文档页数:51
学生宿舍管理系统课程设计摘要:学生宿舍管理系统是应对学生宿舍管理的现代化、网络化,逐步摆脱当前学生宿舍管理的人工管理方式,提高学生宿舍管理效率而开发的,它包括宿舍学生基本信息管理、楼道工人基本信息管理、宿舍楼基本信息管理、宿舍基本信息管理、宿舍事故基本信息管理、宿舍楼物品出入基本信息管理、宿舍楼保卫处基本信息管理、宿舍配备物品及处理管理等八大功能模块,并提供了对各功能模块的查询和更新功能,且这两种功能基本上是通过存储过程来实现的,其中宿舍学生基本信息管理、宿舍基本信息管理是系统开发的重点。
该系统开发由系统需求分析、概念设计、逻辑设计、数据库实施、系统调试和测试阶段组成。
目录1、概述: (1)2、课程设计的需求分析 (1)2.1、设计任务: (1)2.1、设计要求: (2)3、概念结构设计 (3)3.1、概念结构设计工具(E-R模型) (3)3.2、入住登记子系统(局部) (3)3.2.1、子系统描述 (3)3.2.2、分E-R图 (4)3.2.3、说明 (4)3.3、外出登记子系统 (4)3.3.1、子系统描述 (4)3.3.2、分E-R图 (5)3.3.3、说明 (5)3.4、调整宿舍子系统 (5)3.4.1、子系统描述 (5)3.4.2、分E-R图 (6)3.4.3、说明 (6)3.5、宿舍智能分配子系统 (6)3.5.1、子系统描述 (6)3.5.2、分E-R图 (7)3.5.3、说明 (7)3.6、信息查询子系统 (7)3.6.1、子系统描述 (7)3.6.2、分E-R图 (7)3.6.3、说明 (8)3.7、总体E-R图 (8)4、逻辑结构设计 (9)4.1、关系数据模式 (9)4.1.1、学生信息(stu_info) (9)4.1.2、宿舍信息(dorm_info) (9)4.1.3、出入信息(inout_info) (9)4.1.4、入住信息(stay_info) (10)4.1.5、调整信息 (10)4.2视图的设计 (10)4.2.1宿舍信息表视图 (10)5、数据库物理设计与实施 (12)5.1、数据库应用的硬件、软件环境介绍 (12)5.2、物理结构设计 (12)5.3、索引的设计 (12)5.4、建立数据库 (13)5.4.1、创建宿舍信息表 (13)5.4.2、创建学生信息表 (14)5.4.3、创建出人登记信息表 (14)5.4.4、创建入住信息登记表 (15)5.4.5、创建宿舍调整登记表 (16)5.5、加载测试数据 (16)5.5.1、加载住宿信息 (16)5.5.2、记载学生信息 (17)5.5.3、加载宿舍信息 (19)6、数据操作与实现 (20)6.1、数据查询操作 (21)6.2、数据更新操作 (22)6.3、数据维护操作 (24)6.3.1同步更新触发器 (24)6.3.2、按学院分配宿舍存储过程 (26)7、收获、体会和建议 (28)8、主要参考文献。
目录之马矢奏春创作摘要2一需求分析21.1 需求分析21.1.1 基本信息21.1.2 用户对系统要求31.2 系统功能分析:41.3 业务流程概述41.4 数据流程图51.5 数字字典10二概念结构设计14三逻辑结构设计143.2.2 逻辑结构定义15四物理结构设计17五数据实施和维护185.1建立数据库、数据表、视图、索引、导入数据185.1.3 建立视图205.1.4 建立索引215.1.5 导入数据225.2 记录和约束条件的的增加、删除和修改245.2.1 记录的增加、删除、修改245.2.2 约束条件的增加、删除、修改245.4 建立存储过程,触发器26六总结27附件28摘要学生宿舍管理系统是应对学生宿舍管理的现代化、网络化,逐步解脱当前学生宿舍管理的人工管理方式,提高学生宿舍管理效率而开发的,它包含基本信息管理、住宿管理、服务管理、来访者管理等四大功能模块。
该系统开发由需求分析阶段、概念结构设计阶段、逻辑结构设计阶段、物理结构设计阶段、数据库实施与维护阶段等阶段组成。
一需求分析目前,我们学校的宿舍管理都是由人工管理的,信息都是由文本记录的。
针对这一实际情况,我们设计了学生宿舍管理系统。
1.1 需求分析经过实际分析调查,一个学生宿舍管理系统主要是要方便宿舍管理人员的工作,提高其工作效率,不但可以方便广大学生,而且还可以方便于教师和相关人员。
1.1.1 基本信息学生住在宿舍楼中,每幢宿舍楼都会有若干名老师负责本宿舍楼的日常管理。
(1)学生的基本信息:入校时,每位同学都有唯一的学号,并被分配到指定的宿舍楼和指定的宿舍,也会有一个宿舍号,其入校时间就是他的入住时间。
(2)宿舍的基本信息:每间宿舍都有唯一的楼号和宿舍号,入校时,宿舍会装公用电话机,相应地就有宿舍电话号码。
(3)工作人员基本信息:每幢宿舍都有驻楼阿姨和保洁阿姨的编号。
(4)报修的基本信息:宿舍楼中经常出现财富的损坏,比方灯泡坏了,茅厕的马桶出故障了等,这时,同学们需要将财富损坏情况陈述给宿舍楼管理员,以便学校派人进行维修。
学生宿舍管理系统数据库程序设计一、需求分析1.目标和任务(1)了解目前宿舍管理的现状以及SQL Server 2008的功能和特点。
(2)练习E-R模型与关系模型的转换。
2.数据库应有的功能①学生基本信息存储和查询②每一栋宿舍楼中宿舍信息的存储和查询③宿舍基本信息的存储和查询④宿舍楼基本信息查询与修改⑤宿舍楼物品出入审批及记录二、概念设计1.实体学生:Student(StuNo,DepName,StuName,StuSex,StuClass);宿舍:Room(RNo,RHeader,ROne,RTwo ,RClass,RThree,RFour,RFive,RSix);宿舍楼:Dormitory(DorNo,DorCmpus,DorLocation,DorPhNo,DorAdminist);宿管人员:DorAdminist (WorNo,WorName,WorSex,WorPhNo,WorTime);住宿:Stay(Rno, StuNo,Time)2.数据字典(二)表结构1、Dormitory2、Room3、Student4、DorAdminist表4 Worker表结构5.Stay表5 Stay表结构3.实体间的联系(ER图)三、操作结果Ⅰ、表的创建1. Dormitory2. Room3. Student4. DorAdminist5. StayⅡ、数据输入1.Dormitory2.Room3.Student4.DorAdminist5. StayⅢ、关系图四、实验总结这个学期我们一共做了四次实验。
而这四次实验让我们对SQL系统有了一个初步的了解,使我们通过学习可以自己建立一些简单的信息系统。
而这次的课设我们是根据近期经常谈论的话题,分宿舍的问题而想到的一个宿舍管理系统。
本次课设的主体以及属性是由我们小组共同讨论协商而定下的,由李坤同学做最终的实体之间关系的确定,以及ER图的设计。
而我负责表格的建立,王雅娜同学负责表格的输入,最后的关系图由我们共同完成。
数据库课程设计项目名称: 学生宿舍管理系统设计学生:学号: 33110208专业: 机制02班指导教师:2011年12 月22 日南京农业大学教务处制学生公寓管理系统的设计1引言:1.1相关技术背景随着时代的发展,计算机技术越来越深入各行各业,为广大的用户提供了更为周到和便捷的服务。
目前各行各业广泛使用专用系统,其内容范围跨越了教育科研、文化事业、金融、商业、新闻出版、娱乐、体育等各个领域,其用户群十分庞大,因此,设计开发好一个专用系统对一个机构(或部门)的发展十分重要。
近年来,随着用户要求的不断提高及计算机科学的迅速发展,特别是数据库技术的广泛应用,向用户提供的服务将越来越丰富,越来越人性化。
1.2学校背景当然,计算机技术在学校管理中也得到了快速的发展,可是就学校后勤管理来说,学生宿舍管理是必不可少的组成部分。
目前仍然存在有学校停留在宿舍管理部门人员手工记录数据的阶段,手工记录对于规模小的学校来说勉强可以接受;但对于学生信息量比较庞大,需要记录存档的数据比较多的高校来说,人工记录是相当麻烦的,而且当查找某条记录时,由于数据量庞大,只能依靠人工去一条一条地查找,这样不但麻烦而且浪费许多时间,工作效率比较低。
一直以来,在宿舍管理中,设备的利用和效益的发挥上存在了很多问题,影响了我们后勤人员的办事效率。
而在国外,很多学校后勤都有自己独特的技术应用。
而就我们国家来说,学校宿舍是学生的居住场所,是学校的基层单位。
但是从长远眼光来看,科学技术是第一生产力,而科学技术的竞争,归根到底是人才的竞争,因此,科技强国,提高人才的重视程度,刻不容缓。
为此我们现在所做的课题就是根据目前的情形下,根据现有的条件出发,利用计算机设备,从身边的一些实事做起,从思想上,工作思维和工作方式做起,实现一整套关于学生宿舍管理软件,为我们的宿管阿姨减少点负担。
2相关技术:SQL Server2000简介:SQL Server是一个关系数据库管理系统。
数据库系统及应用课程学生宿舍管理系统课程设计一、概述在当今社会,随着高校学生数量的不断增加,学生宿舍管理工作变得越来越繁重。
为了提高学生宿舍管理工作的效率和质量,本课程设计旨在利用数据库系统及应用知识,设计并实现一套学生宿舍管理系统,以满足学生宿舍管理的需求。
二、需求分析1. 整体需求(1)系统应该具有良好的用户界面,方便用户进行操作。
(2)系统应该能够实现对学生宿舍信息的录入、修改、查询和删除等基本功能。
(3)系统应该能够对学生宿舍进行信息统计和报表生成等功能。
(4)系统应该能够实现对学生宿舍人员的管理,包括入住、退房、换房等操作。
(5)系统应该能够实现对学生宿舍设备的管理,包括设备的维护、报废、购置等操作。
2. 功能需求(1)学生宿舍信息管理- 学生宿舍基本信息的录入、修改、查询和删除- 学生宿舍信息的统计分析和报表生成(2)学生宿舍人员管理- 学生宿舍人员的入住、退房、换房等操作- 学生宿舍人员信息的录入、修改、查询和删除(3)学生宿舍设备管理- 学生宿舍设备的维护、报废、购置等操作- 学生宿舍设备信息的录入、修改、查询和删除三、系统设计1. 数据库设计(1)学生宿舍信息表- 宿舍编号- 宿舍名称- 宿舍类型- 宿舍价格- 入住情况(2)学生宿舍人员信息表- 学生尊称- 学号- 宿舍编号- 入住时间- 退房时间(3)学生宿舍设备信息表- 设备编号- 设备名称- 设备型号- 设备数量- 设备状态2. 系统界面设计(1)登入界面:用户输入用户名和密码进行登入(2)主界面:包括学生宿舍信息管理、学生宿舍人员管理、学生宿舍设备管理等功能模块(3)子界面:每个功能模块包括录入、修改、查询和删除等操作3. 系统功能设计(1)学生宿舍信息管理功能- 提供录入、修改、查询和删除学生宿舍信息的功能- 提供学生宿舍信息统计分析和报表生成的功能(2)学生宿舍人员管理功能- 提供入住、退房、换房等操作功能- 提供录入、修改、查询和删除学生宿舍人员信息的功能(3)学生宿舍设备管理功能- 提供设备维护、报废、购置等操作功能- 提供录入、修改、查询和删除学生宿舍设备信息的功能四、系统实现1. 开发工具(1)数据库:MySQL(2)编程语言:Java(3)界面设计:JavaFX(4)开发工具:IntelliJ IDEA2. 系统架构(1)前端:使用JavaFX实现用户界面(2)后端:使用Java编写业务逻辑,通过JDBC连接MySQL数据库(3)数据库:使用MySQL存储学生宿舍相关信息3. 系统测试(1)功能测试:对系统各项功能进行测试,确保功能能够正常运行(2)性能测试:对系统进行压力测试,评估系统性能是否满足需求(3)兼容性测试:测试系统在不同操作系统和浏览器上的兼容性五、系统部署和使用1. 系统部署(1)环境准备:安装MySQL数据库、配置Java开发环境(2)部署步骤:将系统部署到预先准备好的服务器上(3)系统配置:对系统进行相关配置,确保系统能够正常运行2. 系统使用(1)注册登入:用户进行注册并登入系统(2)操作指南:系统提供操作指南,介绍各项功能的使用方法(3)使用反馈:用户对系统使用过程中遇到的问题进行反馈六、总结与展望本课程设计基于数据库系统及应用的知识,设计并实现了一套学生宿舍管理系统。
数据库宿舍管理系统课程设计1. 引言数据库宿舍管理系统是一个用于管理大学宿舍信息的软件系统。
该系统旨在提供一个便捷、高效的方式来记录和管理宿舍成员的信息,包括学生信息、房间信息、设备维修、安全检查等。
通过该系统,管理人员可以更好地了解宿舍情况,实施科学的宿舍管理政策,提高宿舍的管理运作效率。
本文档将详细介绍数据库宿舍管理系统的设计。
首先,我们将讨论系统的需求,然后进行数据库设计和系统架构设计。
最后,我们将介绍系统的功能和使用方法。
2. 系统需求数据库宿舍管理系统需要满足以下需求:2.1 学生信息管理系统需要能够记录学生的个人信息,包括学号、姓名、性别、年龄、专业等。
同时,系统还需要支持学生信息的增删改查功能,以方便管理员对学生信息进行管理。
2.2 房间信息管理系统需要能够记录宿舍的房间信息,包括房间号、楼层、容纳人数等。
管理员可以使用系统对房间信息进行管理,并能够查询特定楼层、特定房间号的房间信息。
2.3 设备维修管理系统需要支持设备维修管理功能,包括记录维修设备的信息、维修人员的信息以及维修日期等。
管理员可以使用系统查询维修设备的历史记录,以便及时维修和更换设备。
2.4 安全检查管理系统需要支持宿舍安全检查功能,记录安全检查的日期、检查人员和检查结果等信息。
管理员可以使用系统查询安全检查的历史记录,并及时处理检查中发现的问题。
2.5 系统管理系统需要提供用户账户管理功能,包括管理员账户和学生账户。
管理员可以对用户账户进行管理,包括添加、删除和修改用户账户。
同时,系统还需要提供权限管理功能,以确保不同的用户角色只能访问其具备权限的功能。
3. 数据库设计数据库宿舍管理系统的核心是一个关系型数据库,用于存储和管理系统的数据。
以下是数据库中的关键表格设计:3.1 学生表格(Students)学生表格用于存储学生的个人信息,包括学号、姓名、性别、年龄和专业等字段。
其中,学号为主键字段,用于唯一标识每个学生的记录。
数据库学生宿舍管理系统课程设计引言数据库学生宿舍管理系统是一个重要的课程设计项目,旨在帮助学生掌握数据库设计与管理的基本原理,以及实现一个真实场景下的数据管理系统。
在这个课程设计中,学生将学习如何规划数据库结构、设计合适的数据模型,并实现对学生宿舍信息进行管理。
项目背景随着学生人数的增多,学校管理学生宿舍的任务变得越来越繁重。
为了提高宿舍管理效率,减少人力资源投入,开发一个数据库学生宿舍管理系统势在必行。
这个系统将会方便宿舍管理员对学生信息、宿舍分配情况等数据进行管理和查询,提高管理效率,减少错误发生。
数据库设计在数据库学生宿舍管理系统中,我们需要考虑的实体包括学生信息、宿舍信息、宿舍管理员信息等。
通过规划合适的数据表,我们可以实现对这些实体的有效管理和查询。
下面是我们设计的一些主要数据表:•学生表:包括学生编号、姓名、性别、年龄、联系方式等字段。
•宿舍表:包括宿舍编号、楼栋号、宿舍类型(男生宿舍、女生宿舍等)、宿舍容量等字段。
•宿舍分配表:记录学生被分配到的宿舍信息,包括学生编号、宿舍编号、入住时间等字段。
•宿舍管理员表:包括宿舍管理员编号、姓名、联系方式等字段。
功能需求数据库学生宿舍管理系统应具备如下功能: - 学生信息管理:实现学生信息的添加、修改、删除、查询等操作。
- 宿舍信息管理:对宿舍信息进行增、删、改、查操作。
- 宿舍分配管理:实现学生对应宿舍的分配和调整功能。
- 宿舍管理员信息管理:对宿舍管理员信息进行管理。
技术实现在技术层面上,我们将采用MySQL数据库来存储数据,并通过编程语言如Java、Python等来实现系统功能。
我们将利用数据库的增删改查操作实现对数据表的管理,同时通过编程语言的逻辑处理来实现系统的各项功能。
系统界面可以采用命令行界面或简单的图形界面。
总结通过本次课程设计项目,学生将学习数据库设计的基本原理和实践操作,掌握数据库管理系统的开发流程,锻炼数据处理和管理的能力。
数据库宿舍管理系统课程设计一、概述本课程设计旨在开发一个基于数据库的宿舍管理系统,实现宿舍信息的管理、查询和统计功能。
该系统将采用面向对象的程序设计方法,利用数据库技术实现数据的存储和访问,方便管理员对宿舍信息进行管理和维护。
二、设计目标1. 能够实现对宿舍信息的管理,包括添加、修改、查询和删除宿舍信息。
2. 能够实现对宿舍成员的管理,包括添加、修改、查询和删除宿舍成员信息。
3. 能够实现对宿舍水电费的统计和管理,包括查询和统计宿舍水电费信息。
4. 提供用户界面,方便管理员操作和使用。
5. 系统安全性和稳定性得到保障,能够应对一定规模的数据量和并发访问。
三、系统架构本系统采用C/S架构,由客户端和服务器端组成。
客户端负责用户界面和数据输入,服务器端负责数据处理和数据存储。
系统将采用面向对象的程序设计方法,利用数据库技术实现数据的存储和访问。
四、功能模块1. 宿舍信息管理模块:包括添加宿舍、修改宿舍、查询宿舍和删除宿舍等功能。
2. 宿舍成员管理模块:包括添加成员、修改成员、查询成员和删除成员等功能。
3. 水电费统计模块:包括查询水电费和统计水电费等功能。
4. 用户界面模块:提供友好的用户界面,方便管理员操作和使用。
五、数据库设计本系统将采用关系型数据库,如MySQL或SQL Server等。
数据库表包括宿舍信息表、宿舍成员信息表、水电费信息表等。
表结构设计将根据系统的需求和数据特点进行,确保数据的完整性和一致性。
六、技术实现1. 编程语言:本系统将使用C++或Java等面向对象的编程语言,便于实现面向对象的程序设计方法。
2. 数据库技术:使用数据库技术实现数据的存储和访问,包括SQL语句的编写和数据库连接的实现等。
3. 界面设计:使用GUI库或第三方库实现用户界面,方便管理员操作和使用。
4. 并发访问控制:考虑到系统的并发访问量,需要进行一定的并发访问控制和优化,确保系统的稳定性和安全性。
七、测试与优化系统开发完成后,需要进行充分的测试,包括功能测试、性能测试和安全测试等。
《数据库原理》课程设计说明书学生宿舍管理系统学院:计算机与信息科学学院专业:网络工程班级:网络1402姓名学号:吴琳琳1420140231姓名学号:周岐浪1420140217指导教师:高金华职称讲师完成时间:2016年12月1、管理系统设计的背景、意义及目标●设计背景●设计意义●设计目标2、系统开发环境3、系统需求分析●基本功能需求●功能模块●数据字典4、概念结构设计●概念设计●E_R模型设计5、逻辑结构设计●将E_R图转换为关系模型●各表关系模型图6、数据实施和维护●功能实现代码●系统实现效果7、个人实现的功能8、总结1、管理系统设计的背景、意义及目标●设计背景随着IT事业的发展,如今,我们已经全面跨入信息时代。
计算机被广泛的应用于各个行业,人工战略已经转化为信息战略,如何在短时间内获取大量信息并整合信息,成为立足于时代的关键。
为了适应考生人数的急剧增长,当今社会各大高校都在进行扩招政策,学生数量的急剧增加带来信息量的成倍增长,由于信息管理的不善与疏忽,各大高校大小事故时有发生。
进行正确的信息管理,对于信息及时处理和反应,能够最大程度的减少学校以及在校学生的损失,减小潜在危机。
学生宿舍是学生生活的基本单位,是同学休息与学习的地方,为了保障同学入住学生宿舍的安全性,信息的处理和管理极为重要。
据了解,本校的宿舍信息管理仍然使用传统的手工方式,主要方式是基于文本、表格等纸介质的手工处理,用人工手抄对男女生信宿信息进行处理登记。
数据信息处理工作量大,容易出错且不易修改;由于数据繁多,容易丢失,逐条查找记录的方式不易操作,浪费了大量的时间,效率极低。
学校的宿舍管理缺乏系统,规范的信息管理手段。
建立学生宿舍管理系统,使宿舍管理工作系统化,规范化,便捷化,程序化,避免宿舍管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改宿舍情况。
●设计的意义高校规模的扩大,在校学生的基本情况随之层次化、多样化、复杂化,相应的,学生管理工作面临严峻的挑战。
高校学生信息日渐庞大,相应的宿舍管理工作变得复杂而困难。
传统的账本化工作模式,手工记录学生信息并存档,这样的人工管理方式费时、费事、费力,信息获取慢,更新滞后,查阅困难,容易出错。
为了给学生提供一个安全舒适的工作、生活、学习环境,方便宿舍管理工作的同时为学生、教师提供准确实时的信息至关重要。
本校的宿舍信息管理,主要方式是基于文本、表格等纸介质的手工处理,用人工手抄对男女生信宿信息进行处理登记。
数据信息处理工作量大,容易出错且不易修改;由于数据繁多,容易丢失,逐条查找记录的方式不易操作,浪费了大量的时间,效率极低。
以上的管理缺陷对学生宿舍管理造成了相当大的阻力,工作进展困难,问题解决的周期过长,资料整改工作量过大。
为了改善学生宿舍管理情况,运用数据库技术对学生信息进行处理和统一管理,在校园内实现宿舍无纸化办公。
利用计算机的特点,利用互联网进行远程操作,制定学生客户端,教师客户端,管理员客户端,实现有针对性信息化管理,充分发挥计算机的高效性、可靠性、保密性、大容量、低成本等特点,建立学生宿舍管理系统,对宿舍相关信息进行统一管理。
新型管理方式——学生宿舍管理系统,将帮助宿舍管理人员提高工作效率,全面地掌握宿舍情况,提高宿舍安全系数,快速解决学生入住学生宿舍遇到的问题,帮助管理人员与教师及时掌握学生情况。
设计目标开发设计学生宿舍管理系统,运用简单的计算机操作实现快速检索和快速查找,方便信息录入和更新,本系统仅针对管理员进行使用。
实现信息查询、日常管理、宿舍管理、信息维护几个方面的系统化管理:1、信息查询:a)宿舍信息:包括宿舍楼编号、寝室编号、入住人数、寝室入住人员学号、用水量、用电量、水费、电费。
b)学生信息:包括学生姓名、学号、宿舍号c)宿舍基本配置:包括床、柜子、灯、风扇、电视机2、宿舍管理:学生管理(入住、更换宿舍、);房间管理(增加、删除、查询)3、信息维护:学生个人信息更新、宿舍信息更新、宿舍设备信息更新。
2、系统开发环境开发所使用数据库系统:MySql开发环境:windows 7开发工具:Microsoft VisualStudio 2010开发语言:C++、SQL3、系统需求分析●基本功能需求学生宿舍管理系统为了更好的进行宿舍管理而设计。
用户的需求具体体现在各种信息的输入、修改和查询。
系统功能实现如下:1、提供学生的入住信息的录入,更换宿舍信息登记。
提供各宿舍的具体信息,如宿舍楼栋、宿舍号、水费、电费等。
并可通过查询宿舍号得到宿舍的具体信息、入住的学生信息、宿舍的设备信息等。
2、提供管理员增加、删除各信息的功能。
●功能模块本宿舍管理系统的主要功能为:学生管理、宿舍信息管理、宿舍设备信息管理、信息查询、息更新、信息维护。
●数据字典(1)宿舍设备情况数据字典(2)宿舍信息情况数据字典(3)学生信息情况数据字典4、概念结构设计●概念设计(1)学生实体:用于显示学生的属性,包括姓名、学号、宿舍编号。
(2)宿舍实体:用于显示宿舍的属性,包括楼号、宿舍号、入住学生学号、可住人数、已住人数、用水量、水费、用电量、电费。
(3)宿舍设备实体:用于显示宿舍设备的属性,包括床、柜子、风扇、灯、电视机。
●E_R模型设计(1)学生实体E_R图(2)宿舍实体E_R图(3)宿舍物品设备实体E_R图5、逻辑结构设计●将E-R图转换为关系模型:(1)Student:(num、name、dormitoryCat);(2)Room:(dormitoryCat、dormitory、room、studentNum、water、waterCharge、electricity、electricityCharge);(3)Item:(dormitoryCat、bed、cabinet、light、fan、tv)●各表关系模型图:(1)I tem表外键设计:(2)Student表外键设计:(3)各表之间的关系模型图,Item表与Student表通过外键与Room 联系:6、数据实施和维护功能实现的代码//dbstruct.h#pragma onceclass dbStruct{public:MYSQL my;char errMsg[300];//学生表char StudentNum[9];char StudentName[20];//宿舍char dormitoryCat[6];char dormitory[3];char room[4];double water;double electricity;double waterCharge;double electricityCharge;unsigned int members;//物件bool bed;bool cabinet;bool light;bool fan;bool tv;dbStruct();~dbStruct();bool Init();bool GetStruct();//添加学生表一项bool InsertStudentTable();//改变一项bool SetStudentTable(char num[9]);//主键为num, vachar(8) //获取一项bool GetStudent(char num[9]);//******************删除一项bool DeleteStudent(char num[9]);//添加宿舍表一项bool InsertDormitoryTable();//改变一项bool SetDormitoryTable(char dormitoryCat[6]);//主键为dormitoryCat, varchar(6) //获得一项bool GetDormitory(char dormitoryCat[6]);//删除一项bool DeleteDormitory(char dormitoryCat[6]);//添加物品表一项bool InsertItemTable();//改变一项bool SetItemTable(char dormitoryCat[6]);//主键为dormitoryCat, varchar(6)//获得一项bool GetItem(char dormitoryCat[6]);//******************删除一项bool DeleteItem(char dormitoryCat[6]);void ErrMB();};//dbStruct.cpp#include "stdafx.h"dbStruct::dbStruct(){this->water = 0.0;this->electricity = 0.0;this->waterCharge = 0.0;this->electricityCharge = 0.0;this->members = 4;this->bed = TRUE;this->cabinet = TRUE;this->light = TRUE;this->fan = TRUE;this->tv = TRUE;}dbStruct::~dbStruct(){mysql_close(&my);}bool dbStruct::Init(){mysql_init(&this->my);if(!mysql_real_connect(&this->my, "localhost", "root", "fast", "dormitory", 0, NULL, 0)) {StringCchPrintfA(errMsg, 300, "获取寝室物件信息错误: %s\n", mysql_error(&this->my));return false;}mysql_query(&this->my, "SET NAMES gbk");return true;}////////////////////////////////////////////////////////bool dbStruct::InsertStudentTable(){if(this->dormitoryCat == NULL ||this->StudentName == NULL || this->StudentNum == NULL) {StringCchPrintfA(errMsg, 100, "添加学生信息错误: 值不完整\n");return FALSE;}char query[300];//获得该寝室已住人数数StringCchPrintfA(query, 300,"SELECT count(dormitoryCat) FROM student WHERE dormitoryCat = \"19425\"",this->dormitoryCat);mysql_query(&this->my, query);//可以确保在数据库工作正常的情况下,能够查询到惟一的一条数据MYSQL_RES * res;res = mysql_use_result(&this->my);MYSQL_ROW row;int i; //i为已住人数while((row = mysql_fetch_row(res)) != NULL){i = row[0][0] - '0';}mysql_free_result(res);if(++i > 4){//超过了寝室最大人员数量StringCchPrintfA(errMsg, 300, "添加学生信息错误: 此寝室已满\n");//**********是否自动添加宿舍信息return FALSE;}//可以添加学生信息StringCchPrintfA(query, 300,"INSERT INTO student(num, name, dormitoryCat) VALUES(\"%s\", \"%s\", \"%s\")",this->StudentNum, this->StudentName, this->dormitoryCat);if(mysql_query(&this->my, query) != 0){StringCchPrintfA(errMsg, 300, "添加学生信息错误: %s\n", mysql_error(&this->my));//**********是否需要自动添加宿舍信息return FALSE;}return TRUE;}bool dbStruct::DeleteStudent(char num[9]){char query[300];StringCchPrintfA(query, 300,"DELETE FROM student WHERE num = \"%s\"", num);if(mysql_query(&this->my, query) != 0)StringCchPrintfA(errMsg, 300, "删除学生信息错误: %s\n", mysql_error(&this->my));//**********是否需要自动添加宿舍信息return FALSE;}return TRUE;}bool dbStruct::GetStudent(char num[9]){char query[300];StringCchPrintfA(query, 300, "SELECT * FROM student WHERE num = \"%s\"", num);if(mysql_query(&this->my, query) != NULL){StringCchPrintfA(errMsg, 300, "获取学生信息错误: %s\n", mysql_error(&this->my));return FALSE;}MYSQL_RES * res;MYSQL_ROW row;res = mysql_use_result(&this->my);while((row = mysql_fetch_row(res)) != NULL){StringCchPrintfA(this->StudentNum, 9, row[0]);StringCchPrintfA(this->StudentName, 20, row[1]);StringCchPrintfA(this->dormitoryCat, 6, row[2]);}mysql_free_result(res);return TRUE;}////////////////////////////////////////////////////////bool dbStruct::InsertDormitoryTable(){if(this->dormitoryCat == NULL || this->room == NULL || this->dormitory == NULL){StringCchPrintfA(errMsg, 300, "添加宿舍信息错误: 值不完整\n");return FALSE;}char query[300];StringCchPrintfA(query, 300,"INSERT INTO room(dormitoryCat, dormitory, room, \studentsNum, water, electricity, waterCharge, \electricityCharge) VALUES(\"%s\", \"%s\", \"%s\", %d, %.2lf, %.2lf, %.2lf, %.2lf)",this->dormitoryCat, this->dormitory, this->room,this->members, this->water, this->electricity,this->waterCharge, this->electricityCharge);if(mysql_query(&this->my, query) != 0){StringCchPrintfA(errMsg, 300, "添加宿舍信息错误: %s\n", mysql_error(&this->my));return FALSE;}this->InsertItemTable();return TRUE;}bool dbStruct::DeleteDormitory(char dormitoryCat[6]){//由于外键约束,删除此寝室时,相应的student和item表中的此寝室信息自动删除.char query[300];StringCchPrintfA(query, 300, "DELETE FROM room WHERE dormitoryCat =\"%s\"", dormitoryCat);if(mysql_query(&this->my, query) != 0){StringCchPrintfA(errMsg, 300, "删除宿舍信息错误: %s\n", mysql_error(&this->my));return FALSE;}return TRUE;}bool dbStruct::GetDormitory(char dormitoryCat[6]){char query[300];StringCchPrintfA(query, 300, "SELECT * FROM room WHERE dormitoryCat = \"%s\"", dormitoryCat);if(mysql_query(&this->my, query) != NULL){StringCchPrintfA(errMsg, 300, "获取寝室信息错误: %s\n", mysql_error(&this->my));return FALSE;}MYSQL_RES * res;MYSQL_ROW row;res = mysql_use_result(&this->my);while((row = mysql_fetch_row(res)) != NULL){StringCchPrintfA(this->dormitoryCat, 6, row[0]);StringCchPrintfA(this->dormitory, 3, row[1]);StringCchPrintfA(this->room, 4, row[2]);this->members = atoi(row[3]);this->water = atof(row[4]);this->electricity = atof(row[5]);this->waterCharge = atof(row[6]);this->electricityCharge = atof(row[7]);}mysql_free_result(res);return TRUE;}////////////////////////////////////////////////////////bool dbStruct::InsertItemTable(){if(this->dormitoryCat == NULL){StringCchPrintfA(errMsg, 300, "添加宿舍信息错误: 值不完整\n");return FALSE;char query[300];StringCchPrintfA(query, 300,"INSERT INTO item(dormitoryCat,bed, cabinet, light, fan, tv) VALUES(\"%s\", %d, %d, %d, %d, %d)",this->dormitoryCat, this->bed, this->cabinet, this->light,this->fan, this->tv);if(mysql_query(&this->my, query) != 0){StringCchPrintfA(errMsg, 300, "添加宿舍物件信息错误: %s\n", mysql_error(&this->my));return FALSE;}return TRUE;}bool dbStruct::GetItem(char dormitoryCat[6]){char query[300];StringCchPrintfA(query, 300, "SELECT * FROM item WHERE dormitoryCat = \"%s\"", dormitoryCat);if(mysql_query(&this->my, query) != NULL)StringCchPrintfA(errMsg, 300, "获取寝室物件信息错误: %s\n", mysql_error(&this->my));return FALSE;}MYSQL_RES * res;MYSQL_ROW row;res = mysql_use_result(&this->my);while((row = mysql_fetch_row(res)) != NULL){StringCchPrintfA(this->dormitoryCat, 6, row[0]);this->bed = (atoi(row[3]) == 1? true: false);this->cabinet = (atof(row[4]) == 1? true: false);this->light = (atof(row[5]) == 1? true: false);this->fan = (atof(row[6]) == 1? true: false);this->tv = (atof(row[7]) == 1? true: false);}mysql_free_result(res);return TRUE;}void dbStruct::ErrMB(){MessageBoxA(GetActiveWindow(), this->errMsg, "发生错误!", MB_ICONERROR); }//stdafx.h#pragma once#include "targetver.h"// Windows 头文件:#include <windows.h>#include <mysql.h>#include <WindowsX.h>#include <CommCtrl.h>// C 运行时头文件#include <stdlib.h>#include <malloc.h>#include <memory.h>#include <tchar.h>#include <strsafe.h>// TODO: 在此处引用程序需要的其他头文件#include "dbStruct.h"#pragma comment(lib, "libmysql.lib")#pragma comment(lib, "comctl32.lib")//stdafx.cpp// stdafx.cpp : 只包括标准包含文件的源文件// DormitoryMng.pch 将作为预编译头// stdafx.obj 将包含预编译类型信息#include "stdafx.h"//dormitoryMng.h#pragma once#include "resource.h"#define MAX_LOADSTRING 100//dormitoryMng.cpp(部分代码)bool QueryStart(bool flag){char query[300];if(flag == true)//查询寝室信息{GetWindowTextA(GetDlgItem(g_hWndQuery, IDC_EDITBUILD), m_db.dormitory, 3);GetWindowTextA(GetDlgItem(g_hWndQuery, IDC_EDITROOM), m_db.room, 4);if(strcmp(m_db.dormitory, "") == 0 && strcmp(m_db.room,"") == 0){StringCchCopyA(query, 300,"SELECT room.dormitoryCat,dormitory, room, studentsNum, \count(student.dormitoryCat), water, electricity, waterCharge, \electricityCharge FROM room LEFT JOIN student ON room.dormitoryCat = \student.dormitoryCat GROUP BY room.dormitoryCat");}else if(strcmp(m_db.dormitory, "") != 0 && strcmp(m_db.room,"") == 0){StringCchPrintfA(query, 300,"SELECT room.dormitoryCat,dormitory, room, studentsNum, \count(student.dormitoryCat), water, electricity, waterCharge, \electricityCharge FROM room LEFT JOIN student ON room.dormitoryCat = \room.dormitoryCat",m_db.dormitory);}else if(strcmp(m_db.dormitory, "") == 0 && strcmp(m_db.room,"") != 0){StringCchPrintfA(query, 300,"SELECT room.dormitoryCat,dormitory, room, studentsNum, \count(student.dormitoryCat), water, electricity, waterCharge, \electricityCharge FROM room LEFT JOIN student ON room.dormitoryCat = \student.dormitoryCat WHERE room = \"%s\" GROUP BY room.dormitoryCat",m_db.room);}else{StringCchPrintfA(query, 300,"SELECT room.dormitoryCat,dormitory, room, studentsNum, \count(student.dormitoryCat), water, electricity, waterCharge, \electricityCharge FROM room LEFT JOIN student ON room.dormitoryCat = \GROUP BY room.dormitoryCat",m_db.dormitory, m_db.room);}if(true != QueryInput(L"寝室号.楼栋号.寝室号.可住人数.当前人数.用水量.用电量.水费.电费", 9, query)){m_db.ErrMB();}}else//查询学生信息{GetWindowTextA(GetDlgItem(g_hWndQuery, IDC_EDITSTUNO), m_db.StudentNum, 9);GetWindowTextA(GetDlgItem(g_hWndQuery, IDC_EDITSTUNAME), m_db.StudentName, 20);if(strcmp(m_db.StudentNum, "") == 0 && strcmp(m_db.StudentName, "") == 0){StringCchCopyA(query, 300,"SELECT num, name, dormitoryCat FROM student");}else if(strcmp(m_db.StudentNum, "") != 0 && strcmp(m_db.StudentName, "") ==0){StringCchPrintfA(query, 300,"SELECT num, name, dormitoryCat FROM student WHERE num = \"%s\"",m_db.StudentNum);}else if(strcmp(m_db.StudentNum, "") == 0 && strcmp(m_db.StudentName, "") != 0){StringCchPrintfA(query, 300,"SELECT num, name, dormitoryCat FROM student WHERE name = \"%s\"",m_db.StudentName);}else{StringCchPrintfA(query, 300,"SELECT num, name, dormitoryCat FROM student WHERE name = \"%s\" AND num = \"%s\"",m_db.StudentName, m_db.StudentNum);}if(true != QueryInput(L"学号.姓名.所住寝室", 3, query)){m_db.ErrMB();}}return TRUE;}LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){int wmId, wmEvent;PAINTSTRUCT ps;HDC hdc;switch (message){case WM_CREATE:{if(!m_db.Init()){m_db.ErrMB();//*********填写错误信息break;}//创建列表CreateList(hWnd);//查询填充if(false == QueryInput(L"寝室号.楼栋号.寝室号.可住人数.当前人数.用水量.用电量.水费.电费", 9,"SELECT room.dormitoryCat,dormitory, room, studentsNum,\count(student.dormitoryCat),water,electricity, waterCharge,\electricityCharge FROM room LEFT JOIN student ON room.dormitoryCat \= student.dormitoryCat GROUP BY room.dormitoryCat")){m_db.ErrMB();}}break;case WM_NOTIFY:{LPNMITEMACTIVATE nc = (LPNMITEMACTIVATE)lParam;if(nc->hdr.code == NM_RCLICK && nc->iSubItem != 0){HMENU hMenu = CreatePopupMenu();InsertMenu(hMenu, 0, MF_ENABLED, 10023, _T("删除"));InsertMenu(hMenu, 0, MF_ENABLED, 10024, _T("详细信息"));ClientToScreen(hWnd, &nc->ptAction);int result = TrackPopupMenu(hMenu,TPM_RETURNCMD | TPM_LEFTBUTTON| TPM_NOANIMATION,nc->ptAction.x + 5, nc->ptAction.y + 30, 0, hWnd, NULL);if(result == 10023){wchar_t str[9];ListView_GetItemText(g_hWndList, nc->iItem, 2, str, 9);int iSize;char * szMultiByte;//宽字符转换成多字节型iSize = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);szMultiByte = new char[iSize];WideCharToMultiByte(CP_ACP, 0, str, -1, szMultiByte, iSize, NULL, NULL);if(iSize == 6){if(!m_db.DeleteDormitory(szMultiByte)){m_db.ErrMB();delete szMultiByte;break;}//刷新ListView_DeleteAllItems(g_hWndList);while(ListView_DeleteColumn(g_hWndList, 1)){}if(true != QueryInput(L"寝室号.楼栋号.寝室号.可住人数.当前人数.用水量.用电量.水费.电费", 9,"SELECT room.dormitoryCat,dormitory, room, studentsNum,\count(student.dormitoryCat),water,electricity, waterCharge,\electricityCharge FROM room LEFT JOIN student ON room.dormitoryCat \= student.dormitoryCat GROUP BY room.dormitoryCat")){m_db.ErrMB();}}else{if(!m_db.DeleteStudent(szMultiByte)){m_db.ErrMB();delete szMultiByte;break;}//刷新ListView_DeleteAllItems(g_hWndList);while(ListView_DeleteColumn(g_hWndList, 1)){}if(true != QueryInput(L"学号.姓名.所住寝室", 3, "SELECT * FROM student")){m_db.ErrMB();}}delete szMultiByte;RedrawWindow(g_hWnd, NULL, NULL, RDW_INVALIDATE);}}break;}case WM_COMMAND:{wmId = LOWORD(wParam);wmEvent = HIWORD(wParam);// 分析菜单选择:switch (wmId){case IDC_REFRESH://刷新ListView_DeleteAllItems(g_hWndList);while(ListView_DeleteColumn(g_hWndList, 1)){}if(true != QueryInput(L"寝室号.楼栋号.寝室号.可住人数.当前人数.用水量.用电量.水费.电费", 9,"SELECT room.dormitoryCat,dormitory, room, studentsNum,\count(student.dormitoryCat),water,electricity, waterCharge,\electricityCharge FROM room LEFT JOIN student ON room.dormitoryCat \= student.dormitoryCat GROUP BY room.dormitoryCat")){m_db.ErrMB();}RedrawWindow(g_hWnd, NULL, NULL, RDW_INVALIDATE);break;case IDC_DELETE:{int itemCount;itemCount = ListView_GetItemCount(g_hWndList);for(int i = 0; i < itemCount; i++){if(ListView_GetCheckState(g_hWndList, i)){wchar_t str[9];ListView_GetItemText(g_hWndList, i, 2, str, 9);int iSize;char * szMultiByte;//宽字符转换成多字节型iSize = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);szMultiByte = new char[iSize];WideCharToMultiByte(CP_ACP, 0, str, -1, szMultiByte, iSize, NULL, NULL);if(iSize == 6){if(!m_db.DeleteDormitory(szMultiByte)){m_db.ErrMB();delete szMultiByte;break;}//刷新ListView_DeleteAllItems(g_hWndList);while(ListView_DeleteColumn(g_hWndList, 1)){}if(true != QueryInput(L"寝室号.楼栋号.寝室号.可住人数.当前人数.用水量.用电量.水费.电费", 9,"SELECT room.dormitoryCat,dormitory, room,studentsNum,\count(student.dormitoryCat),water,electricity, waterCharge,\electricityCharge FROM room LEFT JOIN student ON room.dormitoryCat \= student.dormitoryCat GROUP BY room.dormitoryCat")){m_db.ErrMB();}}else{if(!m_db.DeleteStudent(szMultiByte)){m_db.ErrMB();delete szMultiByte;break;}//刷新ListView_DeleteAllItems(g_hWndList);while(ListView_DeleteColumn(g_hWndList, 1)){}if(true != QueryInput(L"学号.姓名.所住寝室", 3, "SELECT * FROM student")){m_db.ErrMB();}}delete szMultiByte;break;}}break;}case IDC_DELETESOME:{int itemCount;int iSize;int i = 0;while(i < (itemCount = ListView_GetItemCount(g_hWndList))){if(ListView_GetCheckState(g_hWndList, i)){wchar_t str[9];ListView_GetItemText(g_hWndList, i, 2, str, 9);char * szMultiByte;//宽字符转换成多字节型iSize = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);szMultiByte = new char[iSize];WideCharToMultiByte(CP_ACP, 0, str, -1, szMultiByte, iSize, NULL, NULL);if(iSize == 6){if(!m_db.DeleteDormitory(szMultiByte)){m_db.ErrMB();delete szMultiByte;return 0;}}else{if(!m_db.DeleteStudent(szMultiByte)){m_db.ErrMB();delete szMultiByte;return 0;}}delete szMultiByte;break;}elsei++;}if(iSize == 6){//刷新ListView_DeleteAllItems(g_hWndList);while(ListView_DeleteColumn(g_hWndList, 1)){}if(true != QueryInput(L"寝室号.楼栋号.寝室号.可住人数.当前人数.用水量.用电量.水费.电费", 9,"SELECT room.dormitoryCat,dormitory, room,studentsNum,\count(student.dormitoryCat),water,electricity, waterCharge,\electricityCharge FROM room LEFT JOIN student ON room.dormitoryCat \= student.dormitoryCat GROUP BY room.dormitoryCat")){m_db.ErrMB();}}else{//刷新ListView_DeleteAllItems(g_hWndList);while(ListView_DeleteColumn(g_hWndList, 1)){}if(true != QueryInput(L"学号.姓名.所住寝室", 3, "SELECT * FROM student")){m_db.ErrMB();}}}case IDM_ABOUT:DialogBox(g_hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);break;case IDM_EXIT:DestroyWindow(g_hWndQuery);DestroyWindow(g_hWndAddStu);DestroyWindow(g_hWndAddRoom);DestroyWindow(hWnd);break;case IDM_QUERY:{if(firstQuery){g_hWndQuery = CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_DLGQUERY), hWnd, Query);firstQuery = false;}ShowWindow(g_hWndQuery, SW_NORMAL);break;}case IDM_ADDSTU:{if(firstAddStu){g_hWndAddStu = CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_STU), hWnd, AddStu);firstAddStu = false;}elseShowWindow(g_hWndAddStu, SW_NORMAL);break;}case IDM_ADDROOM:{if(firstAddRoom){g_hWndAddRoom = CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_ROOM), hWnd, AddRoom);firstAddRoom = false;}elseShowWindow(g_hWndAddRoom, SW_NORMAL);break;}default:return DefWindowProc(hWnd, message, wParam, lParam);}break;}case WM_PAINT:{hdc = BeginPaint(hWnd, &ps);// TODO: 在此添加任意绘图代码...HFONT guiFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);SelectObject(hdc, guiFont);SetBkMode(hdc, TRANSPARENT);SendDlgItemMessage(hWnd, IDC_DELETE, WM_SETFONT,(WPARAM)guiFont, TRUE);SendDlgItemMessage(hWnd, IDC_DELETESOME, WM_SETFONT, (WPARAM)guiFont, TRUE);SendDlgItemMessage(hWnd, IDC_REFRESH, WM_SETFONT, (WPARAM)guiFont, TRUE);char m[6],n[6];mysql_query(&m_db.my, "SELECT count(dormitoryCat) FROM room"); MYSQL_RES * res;MYSQL_ROW row;res = mysql_use_result(&m_db.my);while((row = mysql_fetch_row(res)) != NULL){StringCchPrintfA(m, 6, "%s", row[0]);}mysql_free_result(res);mysql_query(&m_db.my, "SELECT count(num) FROM student");res = mysql_use_result(&m_db.my);while((row = mysql_fetch_row(res)) != NULL){StringCchPrintfA(n, 6, "%s", row[0]);}mysql_free_result(res);char str[100];StringCchPrintfA(str, 100,"宿舍信息如下:当前共有%s 间寝室, 共有%s 名学生", m, n);RECT rect;rect.left = 10;rect.top = 8;rect.right = 510;rect.bottom = 35;DrawTextA(hdc ,str, strlen(str), &rect, DT_TOP | DT_LEFT);SetWindowText(g_hWndDelete, _T("删除"));SetWindowText(g_hWndDeleteSome, _T("删除选中"));SetWindowText(g_hWndRefresh, _T("刷新"));EndPaint(hWnd, &ps);break;}case WM_SIZE:{RECT rectList;int cxClient = LOWORD(lParam);int cyClient = HIWORD(lParam);if(cxClient <= 420 || cyClient <= 300)return TRUE;GetClientRect(g_hWndList, &rectList);SetWindowPos(g_hWndList, NULL,0, 0,cxClient, cyClient - rectList.top - 80,SWP_NOMOVE);SetWindowPos(g_hWndDelete, NULL,10, cyClient - 35, 0, 0, SWP_NOSIZE);SetWindowPos(g_hWndDeleteSome, NULL,95, cyClient - 35, 0, 0, SWP_NOSIZE);SetWindowPos(g_hWndRefresh, NULL,cxClient - 100, cyClient - 35, 0, 0, SWP_NOSIZE);break;}case WM_CLOSE:DestroyWindow(g_hWndQuery);DestroyWindow(g_hWndAddStu);DestroyWindow(g_hWndAddRoom);DestroyWindow(hWnd);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0;}系统实现效果7、总结通过这个系统的设计,我了解了做一个数据库开发的简要过程。