基于JAVA和MYSQL数据库的大学生社团管理系统

Withdrawn

发布日期: 2018-11-07 16:58:55 浏览量: 1912
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

1 概述

1.1 设计目标

  • 熟悉数据库设计基本原理

  • 熟悉数据库设计基本过程及方法

  • 掌握数据库设计基本技巧及设计工具

  • 掌握数据库设计相应的 SQL 语句操作

  • 增强数据库建模能力和分析能力

  • 通过大学生社团系统的实现增强特定领域的编程能力

1.2 设计要求

对大学生社团管理系统进行数据库设计,要包括以下内容:

  • 分析大学生社团管理应包含的实体、实体包含的属性。分析实体之间的关系,如强制参与、可选参与等,实体数应不低于 6 个

  • 对实体中相应的数据项给出详细的数据字典描述,语义要合理

  • 以 PowerDesigner 为建模工具,对数据库进行逻辑设计,图中含实体、属性、多样性、实体联系、主键、外键等

  • 设计的关系模式需进行规范化处理,每个关系模式应能达到 3NF

  • 针对选定的系统设计不低于 20 个事务,涉及到检索和更新等,事务要合理

  • 绘制事务图,使用路径指示 ER 模型支持的用户事务

  • 根据逻辑设计原则(多样性),转化为相应数据表,并标明主键、外键等

  • 相应的事务要求用 SQL 语言实现,并用到触发器、完整性约束、存储过程、视图、索引等技术和方法,以及查询、插入和修改等数据操作

  • 应用自己熟悉的高级程序设计语言,实现系统主要功能

2 需求分析

2.1 系统需求和必要性分析

通过对各大高校实地的调查可知,一般高校的学生社团信息管理主要是依据纸质和

手工作业处理,人工的对大量会员的基本资料进行档案式管理,此种处理方式数据量大,管理模式和方法滞后,存放时间不能长久和数据更新速度慢。

考虑现存的情况,建立一个系统化的学生社团管理系统是十分必要的。比如由原来的档案式保存会员信息变为将信息存入数据库中进行系统管理;利用海报或者板报宣传社团活动变为直接在网上发布社团活动的时间和地点等;文件式申请社团的创建变为规范格式的网上申请,提交表格,再由系统管理员审核、批准;此系统还可以方便会员对社团动态进行查看、为社团评价打分、进行留言和会员之间的交流等。

2.2 系统描述

学生社团管理信息系统是一个操作简单、使用方便的系统。它的建立既是为了更加高效、规范地实现对社团动态进行管理,又是为了方便用户及时查看社团信息,保证信息的时效性和高效性。

此学生社团管理信息系统应达到以下七个目标:

  • 系统采用人机对话操作模式,界面设计简单大方,操作简单,效率高,安全性能高,同时便于维护和管理

  • 在登录界面,可根据界面中的权限来选择不同用户可以对系统调用不同的功能

  • 迅速发布社团动态,对社团活动申请、会费管理、校外社团合作进行规范化和程序化管理

  • 能够大量存储社团会员信息,方便会员查看社团信息、留言、进行评分等操作

  • 社团管理员可以通过后台登录,对社团信息、活动、留言板和注册的用户进行查看和管理,同时对用户加入社团的申请进行审核

  • 通过查询、添加、修改等操作,对社团信息、用户资料、财务管理等模块进行管理

  • 系统管理员可以修改个人密码,可以对社团的各项活动进行管理和监督

系统采用 MySQL 数据库,开发语言为 Java,数据库的存储容量足够大,而且比较稳定,能够较长时间保存数据。

2.3 系统功能需求分析

根据系统描述可以初步总结出系统的基本功能。

学生社团管理系统开发任务树

数据库设计阶段任务

大学生社团系统模块图

2.4 数据字典

2.4.1 数据项

描述格式为:数据项描述={数据项名,数据项含义说明,数据类型,长度}

  • 系统管理用户

    • 编号描述={编号,系统用户的编号,int,11}

    • 登录用户名描述={登陆用户名,系统用户的用户名,varchar,25}

    • 登录密码描述={登录密码,系统用户登陆系统的密码,varchar,10}

  • 大学学校学生

    • 学生编号描述={学生编号,大学生的学号编号,int,11}

    • 专业描述={专业,学生的专业班级,varchar,32}

    • 地址描述={地址,学生的学校和家庭地址,varchar,128}

    • 姓名描述{姓名,大学生的姓名,varchar,12}

    • 密码描述={密码,大学生登陆系统查询信息的登录密码,varchar,32}

  • 社团

    • 社团编号描述={社团编号,特定社团的编号,int,11}

    • 社团名称描述={社团名称,社团的名字,varchar,32}

    • 所属学院描述={所属学院,社团所属的学院名称,varchar,32}

    • 社费描述={社费,加入社团需要交纳的费用,double,64}

    • 社团建立时间描述={建立时间,社团开始运行的时间,tinyblob,32}

  • 活动

    • 活动编号描述={活动编号,活动的编号,int,11}

    • 地址描述={地址,活动开展的地址,varchar,64}

    • 标题描述={标题,活动开展的标题描述,varchar,64}

    • 内容描述={内容,活动开展的具体内容描述,varchar,256}

    • 开始时间描述={开始时间,活动开展的开始时间,tinyblob,32}

    • 结束时间描述={结束时间,活动开展的结束时间,tinyblob,32}

  • 社团评价

    • 评价编号描述={评价编号,社团评价的编号,int,11}

    • 评价星级描述={评价星级,对社团评价的星级,int,11}

    • 时间描述={时间,做出评价的时间,tinyblob,32}

    • 内容描述={内容,评价的具体内容描述,varchar,256}

    • 用户编号描述={用户编号,做出评价的用户编号,int,11}

    • 社团编号描述={社团编号,评价针对的社团编号,int,11}

  • 社团公告

    • 社团公告编号描述={社团公告编号,某一条社团公告记录的编号,int,11}

    • 社团公告标题描述={社团公告标题,某一条社团公告纪录的标题,varchar,32}

    • 社团公告详情描述={社团公告详情,某一条社团公告纪录的详情,varchar,255}

    • 社团公告发表时间描述={社团公告发表时间,某一条社团公告纪录的发表时间,datetime,10}

    • 社团公告发表社团编号描述={社团公告的发表社团编号,某一条社团公告的发表社团的编号,int,11}

2.4.2 数据结构

描述格式为:数据结构描述={数据结构名,含义说明,组成:{数据项或数据结构}}

  • 系统管理员用户数据结构描述={管理员用户,管理员用户,组成:{编号 登录用户名 登录密码}}

  • 大学学生结构描述={学生,学生,组成:{专业编号 姓名 性别 密码 学院 专业}}

  • 社团结构描述={社团,社团和成员活动等信息,组成:{社团编号 社团名称 所属专业 建立时间 社团费 社团成员社团活动 社团公告 社团评价}}

  • 活动结构描述={活动,社团所举行的活动描述,组成:{活动编号 活动标题 活动内容 活动开始时间 活动结束时间 活动地址 活动参与社团}}

  • 社团评价结构描述={社团评价,对社团的评价信息管理,组成:{社团评价编号评价星级 评价内容 评价时间 做出评价的学生 被评价的社团}}

  • 社团公告结构描述={社团公告,社团发出的公告信息管理,组成:{社团公告编号 公告标题 公告内容详情 公告发出时间 公告发出社团}}

2.5 事务需求分析

根据系统需求设计了 31个事务:

  • 数据输入事务

    • 添加社团信息

    • 添加社团评价信息

    • 添加社团公告信息

    • 添加社团

    • 添加社团活动项

    • 添加社团用户

    • 添加系统管理者

    • 添加普通大学生用户

  • 数据更新删除

    • 更新/删除社团信息

    • 更新/删除社团评价信息

    • 更新/删除社团公告信息

    • 更新/删除社团

    • 更新/删除社团活动项

    • 更新/删除社团用户

    • 更新/删除系统管理者

    • 更新/删除普通大学生用户

  • 数据输出事务

    • 管理员查询所有社团活动

    • 管理员查询某个社团所拥有的活动

    • 管理员查询某活动对应的所有参与社团

    • 管理员通过起止时间查询社团活动信息

    • 管理员查看某社团的社团评价信息

    • 管理员查查看特定星级的社团评级信息

    • 管理员查看某用户所有发表的评价信息

    • 管理员查看所有社团基本信息

    • 管理员查看某社团的用户列表

    • 管理员查询所有管理员信息

    • 管理员查询某社团的公告

    • 管理员查询某学生所参加的社团

    • 学生查看所有的社团基本信息

    • 学生查看所有社团的评价信息

    • 学生查看加入社团的公告

3 概念结构设计

3.1 实体关系

  • 一个社团会有多个活动,一个活动会有多个参与社团,所以社团和活动的关系是N:N

  • 一个社团评价只针对一个社团,一个社团会有多条评价,所以社团和评价的关系是 1:N

  • 一个社团评价只能是一个人提出,一个人可以提多条评价信息,所以社团评价和用户的关系是 N:1

  • 一个社团公告只可能属于一个社团,一个社团可能会发表多条公告,所以社团和公告的关系是 1:N

  • 一个学生可能参加多个社团,一个社团可能有多个学生,所以社团和学生的关系是 N:N

3.2 实体间依赖关系

  • 添加一条社团评价时,必须指定做出评价的学生,同时必须制定评价针对的社团

  • 添加一条社团公告时,必须指定做出公告的社团

  • 添加一条社团参与记录时,必须指定学生,同时必须指定对应社团

3.3 E-R 图

4 逻辑结构设计

4.1 关系模型

1:N 关系的转换方法:在 N 端实体集中增加新属性,新属性由联系对应的 1 端实体集的码和联系自身的属性构成,新增属性后原关系的码不变。具体 E-R 图转换为关系模型如下:

  • 大学生:(学号,专业班级,登录密码,姓名,地址)

  • 管理员:(管理员编号,登陆用户名,密码)

  • 社团:(社团编号,社团所属学院,社团费,名称,建立时间)

  • 活动:(活动编号,活动地址,活动名称,活动内容,开始时间,结束时间)

  • 评价:(评价编号,评价星级,评价内容,评价时间,评价用户编号,针对社团编号)

  • 公告(公告编号,公告标题,公告内容,公告发表时间,公告发表社团编号)

  • 活动参与(活动编号,社团编号)

  • 社团用户(社团编号,学生学号)

4.2 规范化

数据库逻辑设计的结果不是唯一的。为了进一步提高数据库应用系统的性能,还应该根据应用需要适当的修改、调整数据模型的结构,这就是数据模型的优化。数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生增删改查(CRUD)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。

1NF-无重复的列

所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的个属性不能有多个值或者不能有重复的属性。

经检查,上面所得到的表的属性都是不可分割的。

2NF-属性完全依赖于主键

第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键、主码。

我们所设计的 8 个表中,每个表都只有一个主键,所以每个表的属性都完全依赖于主键,即满足 2NF。

3NF-属性不依赖于其他非主属性

如果关系模式 R 是第二范式,且每个非主属性都不传递依赖于 R 的候选键,则称 R为第三范式模式。

我们所设计的 8 个表中,没有非主属性对于码的传递函数依赖,即满足 3NF。

4.3 数据表

社团活动

社团评价

社团

系统管理员

社团公告

社团用户

社团活动参与

社团用户参与

5 物理结构设计

5.1 索引

  • 由于社团名经常出现在查询和表连接中,并且系统中社团名唯一不重复,所以在该属性上建立 B-tree 索引

  • 由于管理员经常登录,经常出现在表查询中,并且系统中管理员登录名唯一不重复,所以在该属性上建立 B-tree 索引

  • 由于大学生信息表中的学生学号经常出现在查询和表连接中,并且作为主键,它的值唯一,所以在这个属性上建立 B-tree 索引。

B-tree索引物理原理:

B+树是数据库系统实现索引的首选数据结构。评价一个数据结构作为索引的优劣最重要的指标是在查找过程中磁盘 IO 操作次数的渐进复杂度。

根据 BTree 的定义,可知检索一次最多需要访问 h 个节点。数据库系统的设计者巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次IO 就可以完全载入。为了达到这样的目的,每次新建节点时,直接申请一个页的空间, 这样就保证一个节点无力上也存储在一个页里,加之计算机硬盘存储分配都是按照页对齐的,就实现了一个 node 只需要一次 IO。

6 数据库实现与维护

6.1 数据库表结构建立

6.1.1 活动表 Activity

  1. -------------------------------
  2. -- Table structure for activity
  3. -------------------------------
  4. DROP TABLE IF EXISTS `activity`; CREATE TABLE `activity` (
  5. `id` int(11) NOT NULL AUTO_INCREMENT,
  6. `address` varchar(255) DEFAULT NULL,
  7. `content` varchar(255) DEFAULT NULL,
  8. `end_date` tinyblob,
  9. `name` varchar(255) DEFAULT NULL,
  10. `start_date` tinyblob, PRIMARY KEY (`id`)
  11. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

6.1.2 社团评价表evaluation

  1. ---------------------------------
  2. -- Table structure for evaluation
  3. ---------------------------------
  4. DROP TABLE IF EXISTS `evaluation`; CREATE TABLE `evaluation` (
  5. `id` int(11) NOT NULL AUTO_INCREMENT,
  6. `content` varchar(255) DEFAULT NULL,
  7. `star` int(11) DEFAULT NULL,
  8. `time` tinyblob,
  9. `by_user_id` int(11) DEFAULT NULL,
  10. `to_league_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`),
  11. KEY `FKh2hatsg8lg8ydngqgql0unxpx` (`by_user_id`),
  12. KEY `FK89ib103ndnixgyus1ut5jr02e` (`to_league_id`),
  13. CONSTRAINT `FK89ib103ndnixgyus1ut5jr02e` FOREIGN KEY (`to_league_id`) REFERENCES `league` (`id`),
  14. CONSTRAINT `FKh2hatsg8lg8ydngqgql0unxpx` FOREIGN KEY (`by_user_id`) REFERENCES `user` (`id`)
  15. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

6.1.3 社团表 league

  1. -----------------------------
  2. -- Table structure for league
  3. -----------------------------
  4. DROP TABLE IF EXISTS `league`; CREATE TABLE `league` (
  5. `id` int(11) NOT NULL AUTO_INCREMENT,
  6. `academy` varchar(255) DEFAULT NULL,
  7. `club_due` double DEFAULT NULL,
  8. `name` varchar(255) NOT NULL,
  9. `start_date` tinyblob, PRIMARY KEY (`id`),
  10. UNIQUE KEY `UK_n8qcbpi2pjf8bbenfm9le3v36` (`name`)
  11. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

6.1.4 社团活动参与纪录表league_activity

  1. --------------------------------------
  2. -- Table structure for league_activity
  3. --------------------------------------
  4. DROP TABLE IF EXISTS `league_activity`; CREATE TABLE `league_activity` (
  5. `league_id` int(11) NOT NULL,
  6. `activity_id` int(11) NOT NULL,
  7. KEY `FK7g2y827hegkltuycaffg8sl5c` (`activity_id`), KEY `FKgsuul4o7bix397rlv0nh2g6wm` (`league_id`),
  8. CONSTRAINT `FK7g2y827hegkltuycaffg8sl5c` FOREIGN KEY (`activity_id`) REFERENCES `activity` (`id`),
  9. CONSTRAINT `FKgsuul4o7bix397rlv0nh2g6wm` FOREIGN KEY (`league_id`) REFERENCES `league` (`id`)
  10. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

6.1.5 社团用户参与纪录表league_user

  1. ----------------------------------
  2. -- Table structure for league_user
  3. ----------------------------------
  4. DROP TABLE IF EXISTS `league_user`;
  5. CREATE TABLE `league_user` (
  6. `league_id` int(11) NOT NULL,
  7. `user_id` int(11) NOT NULL,
  8. KEY `FK2a17bp9p71ipbpwotxuhc5q6h` (`user_id`), KEY `FKh7auyvlq2pg4ms5q011220v25` (`league_id`),
  9. CONSTRAINT `FK2a17bp9p71ipbpwotxuhc5q6h` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`),
  10. CONSTRAINT `FKh7auyvlq2pg4ms5q011220v25` FOREIGN KEY (`league_id`) REFERENCES `league` (`id`)
  11. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

6.1.6 管理员表 manager

  1. -------------------------------
  2. -- Table structure for manager
  3. -------------------------------
  4. DROP TABLE IF EXISTS `manager`; CREATE TABLE `manager` (
  5. `id` int(11) NOT NULL AUTO_INCREMENT,
  6. `password` varchar(255) NOT NULL,
  7. `username` varchar(255) NOT NULL, PRIMARY KEY (`id`),
  8. UNIQUE KEY `UK_o0yekye62maw0eia889dcxyk7` (`username`)
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

6.1.7 社团公告表 post

  1. ---------------------------
  2. -- Table structure for post
  3. ---------------------------
  4. DROP TABLE IF EXISTS `post`;
  5. CREATE TABLE `post` (
  6. `id` int(11) NOT NULL AUTO_INCREMENT,
  7. `content` varchar(255) DEFAULT NULL,
  8. `post_time` tinyblob,
  9. `title` varchar(255) DEFAULT NULL,
  10. `by_league_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`),
  11. KEY `FKdkqk8bryl5tlyugncimdkxg0s` (`by_league_id`),
  12. CONSTRAINT `FKdkqk8bryl5tlyugncimdkxg0s` FOREIGN KEY (`by_league_id`) REFERENCES `league` (`id`)
  13. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

6.1.8 大学生用户信息表 user

  1. ---------------------------
  2. -- Table structure for user
  3. ---------------------------
  4. DROP TABLE IF EXISTS `user`;
  5. CREATE TABLE `user` (
  6. `id` int(11) NOT NULL AUTO_INCREMENT,
  7. `address` varchar(255) DEFAULT NULL,
  8. `major` varchar(255) DEFAULT NULL,
  9. `password` varchar(255) NOT NULL,
  10. `username` varchar(255) NOT NULL, PRIMARY KEY (`id`),
  11. UNIQUE KEY `UK_sb8bbouer5wak8vyiiy4pf2bx` (`username`)
  12. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

6.2 数据库视图建立

6.2.1 五星级评价社团视图

创建五星级评价社团查询的视图,简化了数据库查询操作,将表连接的操作隐藏起来。当管理员查询时,可以直接查询视图。

  1. CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `five_star` AS
  2. select `evaluation`.`to_league_id` AS `to_league_id`,
  3. `league`.`id` AS `id`,
  4. `evaluation`.`star` AS `star` from (`evaluation` join `league`
  5. on((`evaluation`.`to_league_id` = `league`.`id`))) where (`evaluation`.`star` = 5)

6.2.2 某学院所有社团发表公告视图

创建某学院所有社团发表公告的视图,简化了数据库查询操作,将表连接的操作隐藏起来。当管理员查询记录时,可以直接查询视图。

  1. CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `academy_post` AS
  2. select `post`.`by_league_id` AS `by_league_id`,
  3. `league`.`id` AS `id`,
  4. `league`.`academy` AS `academy`,
  5. `post`.`title` AS `title`,
  6. `post`.`content` AS `content`,
  7. `post`.`post_time` AS `post_time` from (`post` join `league` on(
  8. (`post`.`by_league_id` = `league`.`id`))
  9. )

6.3 数据库存储过程建立

6.3.1 社团公告查询存储过程

为了方便查询某社团所有的公告信息和社团本身的信息,并且方便进行过滤,所以创建存储过程。

  1. CREATE DEFINER=`root`@`localhost` PROCEDURE `v2`()
  2. BEGIN
  3. SELECT *
  4. FROM post, league
  5. WHERE post.by_league_id = league.id;
  6. END

7 社团系统 Java部分代码和运行

7.1 系统实体类实现

7.1.1 社团活动类 Activity实现

  1. @Entity
  2. public class Activity implements Serializable {
  3. @Id
  4. @GeneratedValue(strategy = GenerationType.IDENTITY)
  5. private Integer id;
  6. private String name; private String content; private String address;
  7. private LocalDate startDate; private LocalDate endDate;
  8. @ManyToMany(mappedBy = "activityList")
  9. private List<League> leagueList = new ArrayList<>();
  10. @Override
  11. public String toString() {
  12. return "Activity{" +
  13. "id=" + id +
  14. ", name='" + name + '\'' +
  15. ", content='" + content + '\'' + ", address='" + address + '\'' + ", startDate=" + startDate +
  16. ", endDate=" + endDate +
  17. '}';
  18. }
  19. }

7.1.2 社团评价 Evaluation 类实现

  1. @Entity
  2. public class Evaluation implements Serializable {
  3. @Id
  4. @GeneratedValue(strategy = GenerationType.IDENTITY)
  5. private Integer id;
  6. private Integer star; private String content; private LocalDateTime time;
  7. @ManyToOne(cascade = CascadeType.PERSIST) @JoinColumn(name = "to_league_id") private League toLeague;
  8. @ManyToOne(cascade = CascadeType.PERSIST) @JoinColumn(name = "by_user_id")
  9. private User byUser;
  10. @Override
  11. public String toString() {
  12. return "Evaluation{" +
  13. "id=" + id +
  14. ", star=" + star +
  15. ", content='" + content + '\'' +
  16. ", time=" + time +
  17. '}';
  18. }
  19. }

7.1.3 社团 League 类实现

  1. @Entity
  2. public class League implements Serializable {
  3. @Id
  4. @GeneratedValue(strategy = GenerationType.IDENTITY)
  5. private Integer id;
  6. @Column(unique = true, nullable = false) private String name;
  7. private String academy; private Double clubDue; private LocalDate startDate;
  8. @ManyToMany(cascade = CascadeType.PERSIST)
  9. @JoinTable(name = "league_activity",
  10. joinColumns = {@JoinColumn(name = "league_id", referencedColumnName = "id")},
  11. inverseJoinColumns = {@JoinColumn(name = "activity_id",
  12. referencedColumnName = "id")})
  13. private List<Activity> activityList = new ArrayList<>();
  14. @OneToMany(mappedBy = "toLeague")
  15. private List<Evaluation> evaluationList = new ArrayList<>();
  16. @OneToMany(mappedBy = "byLeague")
  17. private List<Post> postList = new ArrayList<>();
  18. @ManyToMany(cascade = CascadeType.PERSIST) @JoinTable(name = "league_user",
  19. joinColumns = {@JoinColumn(name = "league_id", referencedColumnName =
  20. "id")},
  21. "id")})
  22. inverseJoinColumns = {@JoinColumn(name = "user_id", referencedColumnName =
  23. private List<User> userList = new ArrayList<>();
  24. @Override
  25. public String toString() {
  26. return "League{" +
  27. "id=" + id +
  28. ", name='" + name + '\'' +
  29. ", academy='" + academy + '\'' +
  30. ", clubDue=" + clubDue +
  31. ", startDate=" + startDate +
  32. '}';
  33. }
  34. }

7.1.4 系统管理员 Manager 实现

  1. @Entity
  2. public class Manager implements Serializable {
  3. @Id
  4. @GeneratedValue(strategy = GenerationType.IDENTITY)
  5. private Integer id;
  6. @Column(unique = true, nullable = false) private String username;
  7. @Column(nullable = false) private String password;
  8. public Integer getId() {
  9. return id;
  10. }
  11. public void setId(Integer id) {
  12. this.id = id;
  13. }
  14. public String getUsername() {
  15. return username;
  16. }
  17. public void setUsername(String username) {
  18. this.username = username;
  19. }
  20. public String getPassword() {
  21. return password;
  22. }
  23. public void setPassword(String password) {
  24. this.password = password;
  25. }
  26. @Override
  27. public String toString() {
  28. return "Manager{" +
  29. "id=" + id +
  30. ", username='" + username + '\'' + ", password='" + password + '\'' + '}';
  31. }
  32. }

7.1.5 社团公告 Post 类实现

  1. @Entity
  2. public class Post implements Serializable {
  3. @Id
  4. @GeneratedValue(strategy = GenerationType.IDENTITY)
  5. private Integer id;
  6. private String title; private String content;
  7. private LocalDateTime postTime;
  8. @ManyToOne(cascade = CascadeType.PERSIST) @JoinColumn(name = "by_league_id") private League byLeague;
  9. @Override
  10. public String toString() {
  11. return "Post{" +
  12. "id=" + id +
  13. ", title='" + title + '\'' +
  14. ", content='" + content + '\'' +
  15. ", postTime=" + postTime +
  16. '}';
  17. }
  18. }

7.1.6 学生用户 User 类实现

  1. @Entity
  2. public class User implements Serializable, Comparable<User> {
  3. @Id
  4. @GeneratedValue(strategy = GenerationType.IDENTITY)
  5. private Integer id;
  6. @Column(unique = true, nullable = false) private String username;
  7. @Column(nullable = false) private String password;
  8. private String major; private String address;
  9. @OneToMany(mappedBy = "byUser")
  10. private List<Evaluation> evaluationList = new ArrayList<>();
  11. @ManyToMany(mappedBy = "userList")
  12. private List<League> leagueList = new ArrayList<>();
  13. @Override
  14. public int compareTo(User o) {
  15. return id.compareTo(o.id);
  16. }
  17. @Override
  18. public String toString() {
  19. return "User{" +
  20. "id=" + id +
  21. ", username='" + username + '\'' + ", password='" + password + '\'' + ", major='" + major + '\'' +
  22. ", address='" + address + '\'' +
  23. '}';
  24. }
  25. }

7.2 系统界面设计与实现

7.2.1 启动类实现

  1. package com.zzkun;
  2. import com.zzkun.view.MainView;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.boot.CommandLineRunner;
  5. import org.springframework.boot.SpringApplication;
  6. import org.springframework.boot.autoconfigure.SpringBootApplication;
  7. @SpringBootApplication
  8. public class LeagueManagerApplication implements CommandLineRunner {
  9. @Autowired private MainView mainView;
  10. public static void main(String[] args) {
  11. SpringApplication.run(LeagueManagerApplication.class, args);
  12. }
  13. @Override
  14. public void run(String... strings) throws Exception {
  15. mainView.run();
  16. }
  17. }

7.2.2 主界面实现

  1. package com.zzkun.view;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.stereotype.Component;
  4. import java.util.Scanner; @Component
  5. public class MainView {
  6. @Autowired private Scanner cin;
  7. @Autowired private ActivityView activityView;
  8. @Autowired private EvaluationView evaluationView;
  9. @Autowired private LeagueView leagueView;
  10. @Autowired private ManagerView managerView;
  11. @Autowired private PostView postView;
  12. @Autowired private UserView userView;
  13. public void run() {
  14. System.out.print("请输入管理员账号:"); String username = cin.nextLine();
  15. System.out.print("请输入管理员密码:"); String password = cin.nextLine();
  16. while (!("root".equals(username) && "root".equals(password))) {
  17. System.out.println("用户名或密码输入错误,请重新输入(默认 root, root)");
  18. }
  19. mainControl();
  20. }
  21. private void mainControl() {
  22. while (true) {
  23. printMainMenu();
  24. int num = cin.nextInt();
  25. switch (num) {
  26. case 1:
  27. userView.run(); break;
  28. case 2:
  29. leagueView.run(); break;
  30. case 3:
  31. activityView.run(); break;
  32. case 4:
  33. postView.run(); break;
  34. case 5:
  35. evaluationView.run(); break;
  36. case 6:
  37. managerView.run(); break;
  38. case 0:
  39. return;
  40. }
  41. }
  42. }
  43. private void printMainMenu() {
  44. System.out.println("========主菜单========");
  45. System.out.println("1.学生用户管理");
  46. System.out.println("2.社团管理");
  47. System.out.println("3.社团活动管理");
  48. System.out.println("4.社团公告管理");
  49. System.out.println("5.社管质量(评价体系)管理");
  50. System.out.println("6.管理员账号管理");
  51. System.out.println("0.退出社团管理系统");
  52. System.out.println("=====================");
  53. }
  54. }

7.2.3 学生管理功能界面实现

  1. package com.zzkun.view;
  2. import com.zzkun.dao.UserDao;
  3. import com.zzkun.model.User;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Component;
  6. import java.util.List;
  7. import java.util.Scanner;
  8. @Component
  9. public class UserView {
  10. @Autowired private Scanner cin; @Autowired private UserDao userDao;
  11. public void run() {
  12. while (true) {
  13. printMenu();
  14. int num = cin.nextInt();
  15. if (num == 1) {
  16. showAllUser();
  17. } else if (num == 2) {
  18. addUser();
  19. } else {
  20. return;
  21. }
  22. }
  23. }
  24. private void showAllUser() {
  25. List<User> users = userDao.findAll();
  26. System.out.println("所有用户信息:");
  27. for (User user : users) {
  28. System.out.println(user);
  29. }
  30. }
  31. private void addUser() {
  32. User user = new User();
  33. System.out.print("输入新用户学号:"); user.setUsername(cin.next());
  34. System.out.print("输入新用户密码:"); user.setPassword(cin.next());
  35. System.out.print("输入新用户专业:"); user.setMajor(cin.next());
  36. System.out.print("输入新用户家庭地址:"); user.setAddress(cin.next());
  37. try {
  38. userDao.save(user);
  39. } catch (Exception e) {
  40. System.out.println("添加新用户失败!");
  41. }
  42. }
  43. private void printMenu() {
  44. System.out.println(" ");
  45. System.out.println("1.查看当前所有学生信息");
  46. System.out.println("2.添加新的学生用户");
  47. System.out.println("3.修改学生用户信息");
  48. System.out.println("4.修改学生密码");
  49. System.out.println("5.修改学生专业信息");
  50. System.out.println("6.修改学生家庭地址信息");
  51. System.out.println("0.返回上一层");
  52. System.out.println(" ");
  53. }
  54. }

7.2.4 Bean 配置类实现

  1. package com.zzkun.config;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. import java.util.Scanner; @Configuration
  5. public class BaseConfiguration {
  6. @Bean
  7. public Scanner scanner() {
  8. return new Scanner(System.in);
  9. }
  10. }

7.2.5 MySQL 连接配置文件

  1. spring.datasource.url=jdbc:mysql://localhost:3306/league_manager?characterEncoding
  2. =utf8&useSSL=true spring.datasource.username=root spring.datasource.password=123456
  3. spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.initialize=true spring.jpa.properties.hibernate.hbm2ddl.auto=create logging.level.root=error

7.3 系统部分功能截图

系统启动

管理员登陆和系统主要功能菜单

用户管理功能

添加学生用户

社团管理和社团添加

社团查看

社团系统退出

上传的附件 cloud_download 基于JAVA和MYSQL数据库的大学生社团管理系统.7z ( 8.33kb, 272次下载 )
error_outline 下载需要8点积分

发送私信

一帘红雨桃花谢,十里清阴柳影斜

13
文章数
35
评论数
最近文章
eject