数据库课程设计学生宿舍管理系统

合集下载

数据库课程设计学生宿舍管理系统

数据库课程设计学生宿舍管理系统

目录一、需求分析 (2)【处理对象】 (2)【处理功能要求】 (2)【安全性和完整性要求】 (2)二、概要设计 (3)【功能结构图】 (3)【E-R图】 (4)【建立数据库、数据表、插入数据】 (5)【导入数据】 (6)【数据库的建立】 (10)三、详细设计 (13)四、小结 (18)五、参考文献 (19)宿舍信息管理系统1、需求分析1.1处理对象系统要处理的对象包括学生基本信息、宿舍基本信息、宿舍楼基本信息、楼栋管理员基本信息、来访人员出入基本信息等五个方面,各个对象包括信息如下所示(详细的数据见于数据字典):系统要处理的对象包括宿舍楼基本信息、学生基本信息、宿舍基本信息、楼道工作人员基本信息、宿舍保卫处基本信息、宿舍事故基本信息、物品出入基本信息等七个方面,各个对象包括信息如下所示(详细的数据见于数据字典):1.宿舍楼基本信息(Dor_info):包括宿舍楼编号、、宿舍楼楼管员信息等方面,这样可以方便管理者对宿舍楼的管理,提高查询效率;2.学生基本信息(Student):包括学生编号、学生所在学院信息、学生姓名、学生性别、学生来自省份、学生出生日期、学生入学时间、学生所学专业、所在班级等方面的信息,可以方便学信息的查询和更新;3.宿舍基本信息():宿舍基本信息包括;4.来访人员出入信息(Visit):访问的宿舍楼编号、房间号、来访人的姓名、访问日期、离开日期。

1.2处理功能要求系统主要完成以下几个功能:1.宿舍楼基本信息查询与修改;2.学生基本信息查询与更新以及插入;3.每一幢宿舍楼中宿舍信息的查询与信息更新;4.宿舍楼人员访问出入审批及记录;1.3安全性和完整性要求安全性先通过视图机制,不同的用户只能访问系统授权的视图,这样可提供系统数据一定程度上的安全性,再通过用户授权机制,欲用户登陆来识别用户级别,根据这个级别来分配用户权限,达到数据更高层次的安全保密功能。

完整性要求用于描述宿舍楼基本信息、学生基本信息、宿舍基本信息、楼栋管理员基本信息、访问出人员入基本信息中数据项能否为null,以及一些用户自定义完整性(符合实际要求)。

数据库课程设计-学生宿舍管理系统

数据库课程设计-学生宿舍管理系统

《数据库原理》课程设计说明书学生宿舍管理系统学院:计算机与信息科学学院专业:网络工程班级:网络1402姓名学号:吴琳琳31姓名学号:周岐浪17指导教师:高金华职称讲师完成时间:2016年12月1、管理系统设计的背景、意义及目标●设计背景●设计意义●设计目标2、系统开发环境3、系统需求分析●基本功能需求●功能模块●数据字典4、概念结构设计●概念设计●E_R模型设计5、逻辑结构设计●将E_R图转换为关系模型●各表关系模型图6、数据实施和维护●功能实现代码●系统实现效果7、个人实现的功能8、总结1、管理系统设计的背景、意义及目标●设计背景随着IT事业的发展,如今,我们已经全面跨入信息时代。

计算机被广泛的应用于各个行业,人工战略已经转化为信息战略,如何在短时间内获取大量信息并整合信息,成为立足于时代的关键。

为了适应考生人数的急剧增长,当今社会各大高校都在进行扩招政策,学生数量的急剧增加带来信息量的成倍增长,由于信息管理的不善与疏忽,各大高校大小事故时有发生。

进行正确的信息管理,对于信息及时处理和反应,能够最大程度的减少学校以及在校学生的损失,减小潜在危机。

学生宿舍是学生生活的基本单位,是同学休息与学习的地方,为了保障同学入住学生宿舍的安全性,信息的处理和管理极为重要。

据了解,本校的宿舍信息管理仍然使用传统的手工方式,主要方式是基于文本、表格等纸介质的手工处理,用人工手抄对男女生信宿信息进行处理登记。

数据信息处理工作量大,容易出错且不易修改;由于数据繁多,容易丢失,逐条查找记录的方式不易操作,浪费了大量的时间,效率极低。

学校的宿舍管理缺乏系统,规范的信息管理手段。

建立学生宿舍管理系统,使宿舍管理工作系统化,规范化,便捷化,程序化,避免宿舍管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改宿舍情况。

●设计的意义高校规模的扩大,在校学生的基本情况随之层次化、多样化、复杂化,相应的,学生管理工作面临严峻的挑战。

数据库设计实例-学生宿舍管理系统

数据库设计实例-学生宿舍管理系统
插入效率考虑
对于大量数据的插入,应采用批量插入的方式以提高效率。
数据查询
数据查询
根据条件从数据库中检索记录,如查询某个 宿舍的所有学生信息。
查询条件设置
支持多种查询条件,如学号、姓名、宿舍号 等。
查询优化
使用索引、查询优化器等手段提高查询效率。
查询结果展示
将查询结果以表格、图表等形式展示,方便 用户查看。
恢复策略
制定详细的恢复计划,确 保在数据丢失时能够快速 恢复。
系统性能优化
索引优化
合理使用索引,提高查询效率。
查询优化
优化SQL查询语句,减少不必要的计算和数据检索。
缓存技术
利用缓存技术存储常用数据,减少对数据库的访问次数。
感谢您的观看
THANKS数据库设计实例-学生宿舍 Nhomakorabea 理系统
目录
• 系统概述 • 数据库设计 • 数据表设计 • 数据库操作 • 系统安全与维护
01
系统概述
系统简介
01
数据库设计实例:学生宿舍管理系统
02
背景:随着高校规模的不断扩大,学生宿舍管理面临诸多挑战,如宿舍分配、 学生入住、费用收缴等。为了提高管理效率,减少人为错误,开发一款学生宿 舍管理系统显得尤为重要。
费用收缴管理
记录收缴情况,计 算滞纳金等功能。
学生信息管理
录入、查询、修改 学生基本信息。
入住管理
分配宿舍、调整宿 舍、退宿等功能。
报修管理
学生提交报修申请, 管理员处理申请等 功能。
02
数据库设计
数据库需求分析
确定系统功能需求
01
收集和整理学生宿舍管理系统的功能需求,包括宿舍分配、入
住管理、费用收缴、维修报修等功能。

数据库学生宿舍管理系统

数据库学生宿舍管理系统

数据库学生宿舍管理系统简介数据库学生宿舍管理系统是为了方便学校管理学生宿舍信息而设计和开发的系统。

该系统的目标是提供一个高效、便捷的管理平台,以帮助学校管理者更好地了解和监控学生宿舍的情况,包括宿舍入住情况、维修记录、安全检查等。

功能特点1.学生信息管理:系统可以记录学生的基本信息,包括姓名、学号、性别、联系方式等,在系统中建立学生档案。

2.宿舍信息管理:系统可以记录各个宿舍的基本信息,如宿舍号、宿舍类型、可容纳人数等,并可以将宿舍分配给相应的学生。

3.宿舍入住管理:系统记录学生的宿舍入住情况,可查询某个学生所居住的宿舍,也可以查看某个宿舍的入住学生情况。

4.维修记录管理:系统可以记录宿舍的维修情况,包括维修内容、维修时间、维修人员等信息,方便学校管理人员进行维修记录查询和统计。

5.安全检查管理:系统可以记录宿舍的安全检查情况,包括检查时间、检查内容、安全隐患等信息,有助于学校管理人员及时发现和解决宿舍安全问题。

6.报表生成:系统可以生成各种报表,如宿舍入住情况统计、维修记录报表、安全检查报表等,为学校管理者提供决策参考。

系统架构数据库学生宿舍管理系统采用客户端-服务器架构,客户端提供用户界面,服务器端负责处理业务逻辑和数据存储。

系统采用数据库来存储学生、宿舍、维修记录、安全检查等信息,以保证数据的持久性和安全性。

数据库设计数据库学生宿舍管理系统的数据库设计包括以下表格:1.学生表:用于存储学生的基本信息,如学号、姓名、性别、联系方式等。

2.宿舍表:用于存储宿舍的基本信息,如宿舍号、类型、容纳人数等。

3.入住记录表:用于存储学生的宿舍入住情况,包括学生学号、宿舍号、入住时间等。

4.维修记录表:用于存储宿舍的维修记录,包括宿舍号、维修内容、维修时间等。

5.安全检查记录表:用于存储宿舍的安全检查记录,包括宿舍号、检查时间、检查内容等。

系统实现数据库学生宿舍管理系统的实现主要分为前端界面设计和后端服务实现两部分。

学生宿舍管理系统数据库分析与设计

学生宿舍管理系统数据库分析与设计

学生宿舍管理系统数据库分析与设计一、引言学生宿舍管理系统是大学宿舍管理的重要组成部分,对学生住宿方面的各项工作提供了便利。

为了提高学生生活质量,提高宿舍管理效率,我们设计并分析学生宿舍管理系统数据库,旨在建立一个完善的系统,以满足不同用户的需求。

二、系统需求分析1. 用户角色•学生:具有查看个人信息、查看宿舍信息、报修等功能。

•宿舍管理员:具有分配宿舍、处理报修、查看宿舍信息等功能。

•系统管理员:拥有对系统整体管理的权限,包括添加、删除、修改用户信息等。

2. 功能需求•学生信息管理:包括学号、姓名、性别、联系方式等信息。

•宿舍信息管理:包括宿舍楼号、宿舍号、床位情况等信息。

•报修管理:学生可以提交报修请求,管理员可以进行处理。

•宿舍分配管理:宿舍管理员可以分配宿舍给学生。

•权限管理:系统管理员对用户权限进行管理。

三、数据库设计1. 学生表(students)字段名类型说明student_id int 学号name varchar 姓名gender varchar 性别contact varchar 联系方式2. 宿舍表(dormitories)字段名类型说明dormitory_id int 宿舍号building_id int 宿舍楼号capacity int 可容纳人数occupied_beds int 已被占用床位数3. 报修表(repairs)字段名类型说明repair_id int 报修号student_id int 学号description varchar 报修描述status varchar 报修状态四、总结通过对学生宿舍管理系统数据库的分析和设计,我们实现了学生、宿舍管理员和系统管理员之间的信息交互,提高了宿舍管理的效率和便捷性,为学生提供了更好的住宿体验。

希望这样的数据库设计能够为大学宿舍管理工作带来实质性的帮助。

数据库课程设计学生宿舍管理系统

数据库课程设计学生宿舍管理系统

数据库课程设计学生宿舍管理系统-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN数据库课程设计-学生宿舍管理系统目录一、需求分析 (1)1 确定用户 (1)2 功能需求分析 (1)3 数据需求 (3)4 数据字典 (3)5 系统功能结构图 (9)6 数据流图 (10)二、概念设计 (12)1 分E-R 图 (12)2 合E-R 图 (14)三、逻辑结构设计 (16)1 学生信息表 (16)2 外部人员出入登记表 (16)3 大物品出入登记表 (16)4. 电费管理表 (16)5 报修管理表 (16)6 宿舍管理员基本信息表 (16)7 宿舍违规信息管理表 (16)8 宿舍基本信息管理表 (16)四、数据库的实现 (16)1 表的建立 (16)2 数据的插入 (19)3、建立触发器 (24)4、建立存储过程 (24)5、建立索引 (25)6、建立视图 (26)7、功能的实现 (27)五、参考文献 (28)学生宿舍管理系统一、需求分析1、确定用户该系统的主要用户有宿舍管理员,老师及在校学生.2、功能需求分析可以根据用户的不同来确定不同的功能需求:1)、宿舍管理员:(1)、能输入学生学号、、宿舍号来查询相关数据,如查询的宿舍的入住人数;(2)、当学生信息发生改变时,能及时的修改变动的信息,;(3)、当学生出现离校或退学等情况时,能及时清除该学生的住宿信息;(4)、当有学生报修时,能及时根据报修信息联系相关的维修人员;(5)、当有大物品出入时,能及时记录物品名、进入时间、离开时间、携带者、携带者宿舍号等相关信息;(6)、当有符合条件的外部人员进入时,能及时记录进入时间、访问宿舍号、访问对象、离开时间、人员名字等数据:(7)、当有学生购电时,能实时记录购电量、购电时间、强开时间、强开次数、购电数量、剩余电量、电费单价等;(8)、能及时查询自己的工作编号、、工作类型、性别、联系方式、工作时间等;2)、学生的需求:(1)、能查询与自己相关的信息,如携带物品进出次数、违规次数等;(2)、当有物品需要维修时,能及时上报;(3)、购电时间、强开时间、强开次数、购电数量、剩余电量、电费单价等;3)、老师的需求:(1)、能查询学生的相关信息,;(2)、能查询并修改宿管的工作编号、、工作类型、性别、联系方式、工作时间等。

数据库课程设计学生宿舍管理系统

数据库课程设计学生宿舍管理系统

易用性
系统需要提供简洁明了的 操作界面和流程,方便用 户快速上手和使用。
可维护性
系统需要具备良好的可维 护性,方便后续的功能扩 展和bug修复。
用户群体分析
学生
学生是宿舍管理系统的主要用户群体 ,他们需要使用系统查询和修改个人 信息、申请入住宿舍、缴纳住宿费用 等。
宿舍管理员
学校管理部门
学校管理部门需要使用系统了解学生 宿舍的整体情况,进行数据统计和分 析,以便做出更好的管理决策。
03 促进学校信息化建设
推动学校信息化建设进程,提高学校管理水平和 服务质量。
系统概述
01 系统功能
学生宿舍管理系统主要包括学生信息管理、宿舍 信息管理、住宿费用管理、报表统计等功能模块 。
02 系统用户
系统用户包括学校管理员、宿舍管理员、学生和 教师等。
03 系统特点
采用B/S架构,易于维护和升级;界面友好,操作 简单;支持多用户并发访问;具有良好的安全性 和稳定性。
费用等操作,最后生成报表供管理员查看。
数据库设计
数据库选型
选择适合课程设计的数据库管理系统,如MySQL 、Oracle等。
数据表设计
设计学生信息表、宿舍信息表、入住记录表、费 用记录表等数据表,并定义表之间的关系。
数据字典
定义数据表中每个字段的名称、类型、长度、约 束等信息,确保数据的准确性和一致性。
界面设计
界面风格
采用简洁、清晰的界面风格,符合学生宿舍管理系统 的特点。
界面布局
合理安排界面元素的位置和大小,使界面更加美观和 易用。
交互设计
设计友好的交互方式,如按钮、链接、表单等,方便 用户进行操作和输入。
04
系统实现

数据库学生宿舍管理系统课程设计

数据库学生宿舍管理系统课程设计

数据库学生宿舍管理系统课程设计引言数据库学生宿舍管理系统是一个重要的课程设计项目,旨在帮助学生掌握数据库设计与管理的基本原理,以及实现一个真实场景下的数据管理系统。

在这个课程设计中,学生将学习如何规划数据库结构、设计合适的数据模型,并实现对学生宿舍信息进行管理。

项目背景随着学生人数的增多,学校管理学生宿舍的任务变得越来越繁重。

为了提高宿舍管理效率,减少人力资源投入,开发一个数据库学生宿舍管理系统势在必行。

这个系统将会方便宿舍管理员对学生信息、宿舍分配情况等数据进行管理和查询,提高管理效率,减少错误发生。

数据库设计在数据库学生宿舍管理系统中,我们需要考虑的实体包括学生信息、宿舍信息、宿舍管理员信息等。

通过规划合适的数据表,我们可以实现对这些实体的有效管理和查询。

下面是我们设计的一些主要数据表:•学生表:包括学生编号、姓名、性别、年龄、联系方式等字段。

•宿舍表:包括宿舍编号、楼栋号、宿舍类型(男生宿舍、女生宿舍等)、宿舍容量等字段。

•宿舍分配表:记录学生被分配到的宿舍信息,包括学生编号、宿舍编号、入住时间等字段。

•宿舍管理员表:包括宿舍管理员编号、姓名、联系方式等字段。

功能需求数据库学生宿舍管理系统应具备如下功能: - 学生信息管理:实现学生信息的添加、修改、删除、查询等操作。

- 宿舍信息管理:对宿舍信息进行增、删、改、查操作。

- 宿舍分配管理:实现学生对应宿舍的分配和调整功能。

- 宿舍管理员信息管理:对宿舍管理员信息进行管理。

技术实现在技术层面上,我们将采用MySQL数据库来存储数据,并通过编程语言如Java、Python等来实现系统功能。

我们将利用数据库的增删改查操作实现对数据表的管理,同时通过编程语言的逻辑处理来实现系统的各项功能。

系统界面可以采用命令行界面或简单的图形界面。

总结通过本次课程设计项目,学生将学习数据库设计的基本原理和实践操作,掌握数据库管理系统的开发流程,锻炼数据处理和管理的能力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据库原理》课程设计说明书学生宿舍管理系统学院:计算机与信息科学学院专业:网络工程班级:网络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图room dormitoryCatdormitoryroomsudentsNum waterwaterChargeelectricityelectricityCharge(3)宿舍物品设备实体E_R图(4)各实体关系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)Item表外键设计:(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 <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 将包含预编译类型信息//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 ONroom.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 ONroom.dormitoryCat = \student.dormitoryCat WHERE dormitory = \"%s\" GROUP BY 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 ONroom.dormitoryCat = \student.dormitoryCat WHERE room = \"%s\" GROUP BYroom.dormitoryCat",}else{StringCchPrintfA(query, 300,"SELECT room.dormitoryCat,dormitory, room, studentsNum, \count(student.dormitoryCat), water, electricity, waterCharge, \electricityCharge FROM room LEFT JOIN student ONroom.dormitoryCat = \student.dormitoryCat WHERE dormitory = \"%s\" AND room = \"%s\" GROUP BY room.dormitoryCat",m_db.dormitory, m_db.room);}if(true != QueryInput(L"寝室号.楼栋号.寝室号.可住人数.当前人数.用水量.用电量.水费.电费", 9, query)){}}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 BYroom.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 ONroom.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 BYroom.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 BYroom.dormitoryCat")){m_db.ErrMB();}}else{//刷新。

相关文档
最新文档