高校人员信息管理系统-课程设计说明书

目   录

  • 项目分析………………………………………………………………………………1

1.1问题描述………………………………………………………………………1

1.2功能概述………………………………………………………………………1

1.3技术选型………………………………………………………………………2

  • 项目设计与开发………………………………………………………………………2

2.1总体设计………………………………………………………………………2

2.2功能模块设计…………………………………………………………………2

2.3总体UML类图…………………………………………………………………3

2.4关键方法流程图………………………………………………………………5

2.5界面设计………………………………………………………………………6

2.6系统测试………………………………………………………………………6

三.总结反思………………………………………………………………………………11

  • 设计任务分析
    1. 功能模块设计
  • 基础功能
  • 员工类别:教师、实验员、行政人员、教师兼行政人员
  • 基础信息:编号、姓名、性别、年龄
  • 教师信息所在系部、专业、职称
  • 实验员信息所在实验室、职务
  • 行政人员信息:政治面貌、职称
  • 教师兼行政人员信息:所在系部、专业、职称政治面貌

  • 人员信息管理模块
  • 添加人员信息:输入人员的基本信息包括编号、姓名、性别、年龄等,并根据不同角色选择填写对应的附加信息(如所在系部、专业、职称等)。
  • 编辑人员信息:根据人员的编号或姓名进行查询,并允许修改相关信息,注意编号的唯一性。
  • 删除人员信息:根据人员的编号或姓名进行查询,并删除相应的人员记录。
  • 查询人员信息:根据不同的条件(如编号、姓名)进行人员信息的查询,如果未找到,则给出相应的提示信息,如果找到,则显示相应的记录信息。

  • 人员信息展示模块
  • 显示所有人员信息:以表格或列表形式展示当前系统中所有的人员记录,每条记录占据一行。

  • 统计功能模块
  • 统计四类人员数量:计算并展示教师、实验员、行政人员和教师兼行政人员的数量。
  • 统计性别数量:计算并展示男、女员工的数量。

  • 保存与读取功能模块
  • 保存人员信息:将当前系统中各类人员记录存入文件中,以便后续读取和使用。
  • 读取人员信息:从文件中读取保存的人员信息,并加载到当前系统中。

  • 总结与反思

本项目实现了高校人员信息管理系统的设计与开发,完成了对教师、实验员、行政人员和教师兼行政人员等四类员工信息的管理。该系统包括添加、查询、显示、编辑、删除、统计、保存和读取等功能。

在项目开发过程中,我们首先进行了需求分析,确保我们完全理解用户的期望和需求。

在实现功能方面,我们实现了添加功能,允许用户随意添加四类员工的记录。为了确保数据的完整性,我们要求员工的编号必须唯一。如果用户尝试添加重复编号的记录,则系统会给出警告并取消添加。

另外,我们还实现了查询功能,用户可以根据编号、姓名等信息对已添加的记录进行查询。如果查询结果为空,系统会给出相应的提示信息。如果找到匹配的记录,系统将显示相应的记录信息。

系统还提供了显示功能,能够展示当前系统中所有的员工记录,每条记录占据一行。这样,用户可以在一览无余的情况下查看所有记录。

为了满足用户的修改需求,我们实现了编辑功能。用户可以根据查询结果对相应的记录进行修改,需要注意的是,修改时必须保证编号的唯一性。

此外,系统还提供了删除功能,用户可以选择删除已添加的员工记录。如果当前系统中没有相应的人员记录,系统会提示"记录为空!"并返回操作。如果找到匹配的记录,用户可以输入要删除的员工编号或姓名,系统将根据输入的信息删除该员工记录。如果没有找到匹配的员工信息,系统会提示相应的记录不存在。

为了满足统计需求,我们实现了统计功能,可以根据多种参数对员工进行统计。包括四类员工数量的统计以及总数的统计,还能统计男、女员工的数量。

为了方便数据的保存和读取,系统提供了保存功能和读取功能。用户可以将当前系统中各类员工记录存入文件中,并随时从文件中读取员工信息到当前系统中使用。

在项目开发的过程中,我学到了需求分析的重要性。同时,我们也注重异常处理和错误提示机制的设计,提升系统的容错性和用户体验。另外,使用面向对象编程(OOP)的思想,并采用继承关系,简化代码结构,提高系统的可拓展性。

同时,我还学到了在项目开发中,不能仅仅只关注代码的编写和盲目的一味的完成任务需求,应该注重规范和条理——也就是开发的设计也很重要。因为对于项目而言,设计的工程量大,一气呵成式的完成任务可能会十分困难,而且会出现很多意想不到的错误,这样反而效率更低。

因此,应该先设计好程序,注意流程图和UML图,以及类图的设计,帮助我们清晰的清楚项目所需,以及清晰自己应该如何编写代码。这样使得程序设计更加直观简洁,就可以大大提高项目开发的效率。

以下是一些实际开发中的具体例子:

如设计

//用equals语句来判断是否存在重复id

private boolean idExists(String id)//判断id是否存在的方法

{

for(int i=0;i<count;i++)

if(persons[i].id.equals(id))

return true;

return false;

}

private int findIndexById(String id)//查找id的方法

{

for(int i=0;i<count;i++)

if(persons[i].id.equals(id))

return i;

return -1;

}

这两个方法时,我学会了使用equals和遍历对象数组的方式来实现查找和判断是否存在。

对于不同数据对应不同的对象的输入和储存,我学会了使用Instanceof来判断指定类,对象,这样就能确保数据的对应存放

同时在编写中我也注意到了一些逻辑错误,并且提高了思维的严密性如:

编辑的人只有编号是唯一确定的,不能用名字不然会冲突;

不改编号,因为编号是唯一的!

记得写break;免得一直遍历下去

private会让外界无法访问变量,必须要用方法来设置!

所以索性直接改为protected

男和女的员工跟职业角色是互相交错的,所以要重新设一个if,不能再继续else if等等...

另外,我还学会了强制转化类的用法:

`(Teacher) persons[index]` 是 Java 中的强制类型转换语法,将 `persons[index]` 强制转换为 `Teacher` 类型。这是因为 `persons` 数组中的元素类型是 `Person`,但我们需要访问其中 `Teacher` 类型的属性 `major`。

在进行强制类型转换之后,我们就可以使用点号(`.`)来访问 `Teacher` 类中的 `major` 属性了,即 `((Teacher) persons[index]).major`。

请注意,强制类型转换也可能会导致运行时错误。如果 `persons[index]` 不是 `Teacher` 类或其子类的实例,则转换会失败并抛出 `ClassCastException`。

进一步理解和概括:前面是因为persons中有display,但是我们现在想要修改子类中的数据,又没有实例子类,而父类中又没有那些成员,所以就要强制转化来实现直接修改的功能。

同时,我也学会了如何实现删除的操作——使用人的类的对象,循环将当前数据后的所有数据向前一位,做到覆盖。更学会了如何读取和保存文件,

具体来说:“首先使用 `FileOutputStream` 类创建了一个输出流 `fos`,用于写入文件。然后,将 `fos` 对象作为参数创建了一个 `ObjectOutputStream` 对象 `oos`,用于将 Java 对象序列化并写入输出流中。

接下来,通过调用 `oos.writeObject(persons)` 方法将 `persons` 数组序列化并写入输出流中。在这里,需要注意的是 `Persons` 类必须实现 `Serializable` 接口,才能被序列化成二进制流。

一个是创造文件,一个是转化成二进制的方式储存。”

同时也明白了,执行文件的操作需要引入Serializable接口,于import java.io.*的库函数中。

   下面是详细分析:

(写入文件时,应该先判断文件是否存在,若不存在则创建文件。

根据报错信息,发现 `Teacher` 类没有实现 `Serializable` 接口,无法被序列化写入文件。

要解决这个问题,可以让 `Teacher` 类实现 `Serializable` 接口。步骤如下:

1. 在 `Teacher` 类的定义处,添加 `implements Serializable`。

2. 如果 `Teacher` 类中包含其他对象,这些对象也需要实现 `Serializable` 接口。

修改后的 `Teacher` 类代码如下:

```java

import java.io.Serializable;

public class Teacher implements Serializable {

    //成员变量和方法的定义

}

假设你也有其他类,也需要将它们实现 `Serializable` 接口,然后重新运行程序即可。)

在项目开发过程中,我遇到以下的困难,以及相应的解决方式:

1.技术挑战和难题:项目开发中需要复杂的技术实现或面临技术上的困难。这些功能的实现不是这么轻易的直接实现的。它需要扎实的编程技术和算法理解。在这种情况下,我进行了技术研究和评估,寻找最佳的解决方案。我通过阅读文档和技术资料,进行原型开发和验证的方式解决,以不断提升我的技术能力和解决问题的能力,来解决这些问题。

2.缺乏专业知识和技能:面对多个技术难关和挑战,我需要具备广泛的知识和技能。我通过自学、在线教育资源等方式,以提升自己在相关领域的专业知识和技能。此外,我还积极参与社区和技术论坛,与其他开发者交流和分享经验,来完成对于项目需求的代码实现。

3. 时间管理和任务规划:时间管理和任务规划是至关重要的。在对于一个项目的多个问题中,我发现我遇到了不知道如何分配自己的时间,去解决问题而无从下手,手足无措的情况。面对多个任务时,我通过时间管理工具如日历、任务列表等,合理安排时间和设置优先级的方式,制定清晰的项目计划,并坚持执行,可以帮助我有效管理时间和提高工作效率。

  1. 缺乏资源和技术支持:相比于团队开发,我面临着资源和技术支持方面的限制。我通过利用开源软件、第三方库和工具来提高开发效率,参与开发社区以获取技术支持和解答疑问,积极寻求资源和技术。

以下是实际遇到的困难的具体例子:

  void display() {  //显示员工信息

        System.out.println("编号:" + id + ",姓名:" + name + ",性别:" + gender + ",年龄:" + age);

    }

    //这竟然是必要的,为什么?

解释:

 persons[count++] = new Teacher(id, name, gender, age, department, major, title);

{

因为你在增添数据的时候就是使用了类的联通这个方法

这个意思就是,你在使用person类的方法时,具体用Teacher的方法代替!

好处就是因为persons的变量是通用的,而职业是有多个的,职业的方法不同因此要这么设计

这么写我就不需要开辟一堆对象的空间,我只需要通过继承的方式实现新的不同对象即可。

因为我们输出的时候

 persons[i].display();

 是这样,也就是根本上来说我们使用的是persons的对象,因为也只开辟了persons的对象空间,

所以当然persons本身要有display方法,只不过具体方法是后面的对象而已,

例如Teacher的display重载

当然可以改进的就是基本数据是不可能被直接输出的,每个人都有自己的职业。所以我们可以写一个空的方法即可。代表persons有该方法,只不过具体实现是看new 的对象!

Ps:你persons都没有display当然不能使用!}

总结起来,我面临的困难可以通过积极学习和提升专业知识、合理管理时间和任务、利用资源和技术支持方式来解决。同时,与其他开发者建立联系、参与社区和团队,可以获得更多支持和帮助,提升自身的开发能力和经验。

整个项目开发过程中得到如下反思与经验:

  1. 清晰的需求定义是成功的关键:一个明确、清晰、完整的需求定义对于项目的顺利开展非常重要。在项目初期花费更多时间理解项目需求,确保需求的准确性,可以避免后期的返工和调整。确保明确项目的目标和范围也是是非常重要的。清楚地定义项目要达到的结果,并限定好项目的范围,避免过度扩大或模糊的目标。这有助于项目的计划和资源管理,确保项目能够按时完成。

因此,在项目开始之前,我应该尽可能的掌握用户需求,进行需求的确认。

2. 划分任务和设置里程碑:应该将整个项目划分为小的可管理的任务,并设置适当的里程碑。这样能够帮助我更好地掌握进度、跟踪工作完成情况,并及时调整计划以应对可能出现的问题。同时,任务拆分和里程碑设定有助于提高我的工作效率。

3. 提前预估时间和资源:在项目初期,应该尽可能准确地预估项目所需的时间和资源。考虑到各种因素(如技术难度、),为每个任务和阶段设置合理的时间和资源预算。这样可以避免出现时间和资源不足的情况,提高项目的可控性和成功率。

4. 学会寻求帮助:遇到问题时不要害怕寻求帮助。可以借助社区、论坛、教程、博客等资源来获取技术支持和解决方案。与其他开发者交流,并积极参与相关的讨论和活动,这不仅可以解决问题,还可以扩大自己的知识和网络。

5. 制定明确的计划和时间表:在项目开始之前,应该制定一个明确的计划和时间表。明确项目里程碑和关键任务,并为其设置合理的时间和优先级。这样可以帮助我们更好地组织工作和管理时间,及时发现延迟和问题,并做出相应的调整。

6. 引入版本控制:使用版本控制工具(如Git)进行代码管理是非常重要的。通过使用版本控制,我们可以记录代码的变更历史,并轻松地回退到以前的版本。这有助于避免代码丢失或出现错误,提高代码质量和开发效率。

7. 不断测试和调试:我们应该始终保持对项目进行测试和调试的习惯。通过编写单元测试、集成测试以及手动测试,可以及早发现和修复潜在的问题,提高代码的稳定性和可靠性。

  1. 注重文档编写:在项目开发过程中,注重编写清晰的文档是至关重要的。因为编写适当的注释和说明,可以让自己和其他人能够理解代码的功能和设计。此外,编写用户文档和技术文档,有助于项目交接和后续维护工作。

9.

写代码量大,工程大的项目,可以先用自己风格的伪代码把思路理清楚,然后在把正确的代码敲出来这样效率更高!这样就不会因为语法总是打断自己的思路!

10.因为教师和教师行政有相同点,所以case前三个可以合并在一起写.

通过这个项目,我不仅掌握了相关的技术和知识,还深入理解了软件开发过程中的各个环节。持续学习在项目中发挥了重要作用,只有通过不断学习和进步,面对和克服种种技术难关,才能取得更好的成果。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、问题描述 某高校有四类员工教师、实验员、行政人员教师兼行政人员共有的信息包括编号、姓名、性别、年龄等。其中教师还包含的信息有所在系部、专业、职称实验员还包含的信息由所在实验室、职务行政人员还包含的信息有政治面貌、职称等。 2、功能要求 (1)添加功能程序能够任意添加上述四类人员的记录可提供选择界面供用户选择所要添加的人员类别要求员工的编号要唯一如果添加了重复编号的记录时则提示数据添加重复并取消添加。 (2)查询功能可根据编号、姓名等信息对已添加的记录进行查询如果未找到给出相应的提示信息如果找到则显示相应的记录信息。 (3)显示功能可显示当前系统中所有记录每条记录占据一行。 (4)编辑功能可根据查询结果对相应的记录进行修改修改时注意编号的唯一性。 (5)删除功能主要实现对已添加的人员记录进行删除。如果当前系统中没有相应的人员记录则提示“记录为空”并返回操作否则输入要删除的人员的编号或姓名根据所输入的信息删除该人员记录如果没有找到该人员信息则提示相应的记录不存。 (6)统计功能能根据多种参数进行人员的统计。能统计四类人员数量以及总数,统计男、女员工的数量。 (7)保存功能可将当前系统中各类人员记录存入文件中存入方式任意。 (8)读取功能可将保存在文件中的人员信息读入到当前系统中供用户进行使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值