当前位置: 首页 > news >正文

java求职学习day20

1 在线考试系统

1.1 软件开发的流程
需求分析文档、概要设计文档、详细设计文档、编码和测试、安装和调试、维护和升级
1.2 软件的需求分析
在线考试系统的主要功能分析如下:
1 )学员系统
(1.1)用户模块:登录、修改密码、退出
(1.2)考试模块:开始考试、查询成绩、导出成绩(选)
2 )管理员系统
(1.3)学员管理模块:增加学员、删除学员、修改学员、查找学员
(1.4)考题管理模块:增加考题、删除考题、修改考题、查找考题、导入考题(选)
1.3 软件的概要设计
在线考试系统采用 C(Client 客户端 )/S(Server 服务器 ) 架构进行设计,具体如下:
(1)客户端 (Client) - 主要用于提供字符界面供用户选择并将处理结果显示出来。
(2)服务器 (Server) - 主要用于针对字符界面的选择实现真正业务功能的处理。
(3)数据库 (Database) - 主要用于进行数据的存取。
分析:

因为我们刚提到客户端的主要作用,实际上就是提供一个界面,让用户选择。那用户根据这个界面呢进行选择,而真正的这个选择之后的业务处理实际上,是不还得交给服务器来实现真正的功能处理?

这有点像我们现实中的什么呢?ATM机。就是我们取钱的时候,可能是通过ATM机来取款。但是我们的这个账户信息,我们的个人账户信息是在ATM机里面存着吗?当然不是,对不对?

那ATM机坏了,岂不是我们的账说不清了吗?那在哪儿啊?哎,这个我们的这个账户信息实际上实际上是不是都在后台的服务器

1.4 软件的详细设计
(1)客户端和服务器之间采用基于 tcp 协议的编程模型进行通信。
(2)客户端的对象输出流连接服务器的对象输入流。
(3)服务器的对象输出流连接客户端的对象输入流。
(4)客户端采用消息的类型作为具体业务的代表,伴随着账户信息等一并发送给服务器。
(5)当客户端发来的消息类型为 "managerCheck" 时,则表示要实现管理员账户信息的校验功
能。
(6)当客户端发来的消息类型为 "userCheck" 时,则表示要实现学员账户信息的校验功能。
(7)服务器采用消息的类型作为是否校验成功的标志发送给客户端。
(8)当客户端收到的消息类型为 "success" 时,则表示账户信息正确。
(9)当客户端收到的消息类型为 "fail" 时,则表示账户信息错误。
1.5 软件的编码流程
1 )管理员登录功能
(1)编写基于 tcp 协议的服务器端,也就是初始化服务器;
(2)编写基于 tcp 协议的客户端,来连接服务器;
(3)编写客户端的字符界面并提示客户进行业务的选择;
(4)将客户的选择和输入的相关信息通过对象输出流发送给服务器;
(5)服务器通过对象输入流接收客户端发来的消息并进行功能处理,将处理结果发送给客户端;
(6)客户端通过对象输入流接收服务器的处理结果并给出提示;
2 )学员管理系统的功能
(1)当项目启动时,将文件中的所有学员账户信息全部读取出来放到一个 List 集合中。
(2)客户端输入要增加学员的用户名和密码信息,通过对象输出流发送给服务器。
(3)服务器接收客户端发来的消息,判断集合中是否存在该学员账户信息并实现具体添加功能。
  (4)服务器将增加学员功能的处理结果发送给客户端,客户端给出对应的提示。
  (5)当项目退出时,将集合中的所有学员账户信息整体写入到文件中
服务器的初始化和关闭以及测试
客户端的初始化和关闭以及测试
 客户端主界面的绘制和测试
break只是用来跳出switch嘛?循环是不是结束不了?那我要想真正的退出,是不是应该把这个方法都结束了?所以我用return可以结束这个方法
客户端扫描器工具类的封装

我们的客户端主界面其实已经绘制完了。但是这里面呢,遗留了一个小小的问题,什么问题就是我们扫描器创建完了,但是没有关闭。对不对?那有的小伙伴呢?在想说那简单呀,那就在这个switch的后面儿关了呗。那不行,

我循环过来,是不是还要用。有的说那放在循环的外面关呗?那也不行,因为return会直接把方法结束了。对不对?而且我们这个扫描器啊,不仅仅在当前主界面的绘制中要用到,我们到了学员登录跟管理员儿登录的时候,是不是也都得需要入这个用户名密码。那意味着我们的这个scanner是不都得用?那既然这个scanner呢?在我们客户端好多的地方呃,都要用,那这个时候我们如果说在每个地方都去new都去关闭。是不是那就太啰嗦了,

又会出现代码的什么冗余,那问大家怎么办呢?这个时候其实我们是不是就可以把scanner提炼出来,打包成一个工具类,然后让所有的地方是不是都拿着这个工具类去用就可以了。

但这样写还是有问题的,或者说不太完美,为啥呢?因为你如果这样写的话,这个扫描器实际上是不是相当于是作为这个类的成员变量啊?那要想访问这个扫描器,我是不是又得new这个类对象,那反而复杂了嘛,所以这个时候应该加一个static关键字之后,意味着隶属于类层级,我们要再访问的时候是不是类名点访问就可以了。对不对?但是因为我们学了封装之后啊,就得private。啊private就得封装。封装的话,意味着在类外是不是就不能直接使用了?那怎么办?提供公有的get方法呗。public static,然后叫scanner,然后get哎scanner。

可以吗?好,然后呢?紧接着一段大括号里面returns c呗,这不就行了吗?对不对哎?这儿写错了啊,不是system叫scanner。对不对?好了,然后这儿写一下注释。叫编程实现扫描器,或者说叫这样叫自定义成员方法方法。实现扫描器的返回或者说获取。可以吧,

那这里面的return是不是返回的就是扫描器啊?当然,除了它之外,我们说扫描器还得需要怎么办?关闭叫自定义成员方法,实现扫描器的关闭。

客户端将管理员相关信息发送出去

我们在这里面再封装一个方法进行调用。

有同学为啥报错了呀?当然报错了,因为这个方法我们并没有写嘛,我只是在这是不是调用啊?那怎么办?根据错误提示,是不是创建一个这样的方法就行了?好,

然后一点,你看这不就创建完了吗?而且默认的这个方法是不是私有,私有的意思就是说这个方法只能在本类中使用,不能在类外中使用,而且这个方法确实是在我本类中的方法中调用,所以我用private是没问题。

当客户端发来的消息类型为 "managerCheck" 时,则表示要实现管理员账户信息的校验功
能。 当客户端发来的消息类型为"userCheck" 时,则表示要实现学员账户信息的校验功能。
因为上面两句话需要创建User类和 UserMessage类

另外问一下大家user,这个类需不需要?进行客户端就是user类型的对象,要不要在客户端跟服务器之间传输啊?要。那传输,而且用对象流传输,那意味着我们是不是就得需要实现一个接口java.io.Serializable。然后实现series里边接口之后是不是还得需要指定一个版本号。

这样一来,我们的账号密码有了之后,接下来我们说是不是加上消息类型一起打包成一个user message类型对象。

而对象输出流在我们的哪个类中?collect in it close里面,而且还是私有的,外面能直接用吗?不能用,为了让外面能用,是不还得提供get方法?所以out insert这里面选择生成get方法给谁啊?给这两个输出输出流提供get方法是不是就可以了。

但要调这个get方法,是不是又得拿着这个类的对象引用点儿?是不是才能调。怎么办?合成复用原则。那有了这个cic之后,那现在我们是不是就可以拿到这个输出流。

就是我原来在collect view这个类中没有写构造方法的时候,所以我用无参的方式new对象没问题,但是现在我在这里面实际上是不是写了构造之后编译器就不再提供了,而且是有参构造参数要的是collect in it close类型引用。所以这边new对象的时候,是不是就得传参数,穿一个cic就行了。

服务器接收客户端发来的消息并打印

那接下来我们是不是该实现服务器啊,使用对象数流接收客户端发来的这个对象相关的信息呀。在我们服务器端啊啊server的上面儿,你有一个新的类,你这个类的名字叫什么呢?客户端不是叫clientview吗?那我们服务器这边呢?我们就叫server view。

这里面简单写一下注释,叫编程实现服务器的主功能,当然它没有主界面嘛,所以我们就叫主功能吧。好,然后呢?在这里面呢?我们写一下方法,叫自定义成员方法方法,

然后实现客户端发来消息的接收并处理。

然后接下来写一下这个方法吧,那方法名儿我们就叫serverReceive,然后紧接着那这边儿的话呢,要想接收就得用对象输入流,而对象输入流是不是在server init close这里面?对不对?好,那在server int close这里面的话,而且这里面是不是还是私有的?

要想用还得公有的get方法。提供了get方法之后,紧接着切回来,这边是不还得使用合成复用原则。

当然默认生成的是不是object呀?但其实那边发的是不是应该是一个user message类型的?对不对?那我就用user message去接,这是它真实的数据类型,那这块儿报错是因为有异常抛一下。然后呢?这儿还报错,是因为我们是不是要做一个类型转换呀?因为这里面默认返回的是object,我现在用user message接嘛。对不对?好了,那么接完之后呢?你看这样一来,我们这边儿的这个接收就完事儿。

服务器校验后发送给客户端

客户端接收结果并打印

相关文章:

java求职学习day20

1 在线考试系统 1.1 软件开发的流程 需求分析文档、概要设计文档、详细设计文档、编码和测试、安装和调试、维护和升级 1.2 软件的需求分析 在线考试系统的主要功能分析如下: ( 1 )学员系统 (1.1)用户模块&…...

Python NumPy(8):NumPy 位运算、NumPy 字符串函数

1 NumPy 位运算 位运算是一种在二进制数字的位级别上进行操作的一类运算,它们直接操作二进制数字的各个位,而不考虑数字的整体值。NumPy 提供了一系列位运算函数,允许对数组中的元素进行逐位操作,这些操作与 Python 的位运算符类似…...

日志2025.1.30

日志2025.1.30 1.简略地做了一下交互系统 public class Interactable : MonoBehaviour { private MeshRenderer renderer; private Material defaultMaterial; public Material highlightMaterial; private void Awake() { renderer GetComponentInChildren<Me…...

实战:如何快速让新网站被百度收录?

本文来自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/22.html 要让新网站快速被百度收录&#xff0c;可以采取以下实战策略&#xff1a; 一、网站基础优化 网站结构清晰&#xff1a;确保网站的结构简洁清晰&#xff0c;符合百度的抓取规则。主…...

PhotoShop中JSX编辑器安装

1.使用ExtendScript Tookit CC编辑 1.安装 打开CEP Resource链接&#xff1a; CEP-Resources/ExtendScript-Toolkit at master Adobe-CEP/CEP-Resources (github.com) 将文件clone到本地或者下载到本地 点击AdobeExtendScriptToolKit_4_Ls22.exe安装&#xff0c;根据弹出的…...

01-时间与管理

时间与效率 一丶番茄时钟步骤好处 二丶86400s的财富利用时间的方法每天坚持写下一天计划 自我管理体系计划-行动-评价-回顾 一丶番茄时钟 一个计时器 一份任务清单,任务 步骤 每一个25分钟是一个番茄时钟 将工作时间划分为若干个25分钟的工作单元期间只专注于当前任务,遇到…...

MiniMax-01技术报告解读

刚刚MiniMax发布了MiniMax-01&#xff0c;简单测试了效果&#xff0c;感觉不错。于是又把它的技术报告看了一下。这种报告看多了&#xff0c;就会多一个毛病&#xff0c;越来越觉得自己也能搞一个。 这篇文章我觉得最有意思的一句是对数据质量的强调“低质量数据在训练超过两个…...

多头潜在注意力(MLA):让大模型“轻装上阵”的技术革新——从DeepSeek看下一代语言模型的高效之路

多头潜在注意力&#xff08;MLA&#xff09;&#xff1a;让大模型“轻装上阵”的技术革新 ——从DeepSeek看下一代语言模型的高效之路 大模型的“内存焦虑” 当ChatGPT等大语言模型&#xff08;LLM&#xff09;惊艳世界时&#xff0c;很少有人意识到它们背后隐藏的“内存焦虑”…...

哈希表实现

目录 1. 哈希概念 1.1 直接定址法 1.2 哈希冲突 1.3 负载因子 1.4 将关键字转为整型 1.5 哈希函数 1.5.1 除法散列法/除留余数法 1.5.2 乘法散列法 1.5.3 全域散列法 1.5.4 其他方法 1.6 处理哈希冲突 1.6.1 开放定址法 1.6.1.1 线性探测 1.6.1.2 二次探测 1.6.…...

Linux的常用指令的用法

目录 Linux下基本指令 whoami ls指令&#xff1a; 文件&#xff1a; touch clear pwd cd mkdir rmdir指令 && rm 指令 man指令 cp mv cat more less head tail 管道和重定向 1. 重定向&#xff08;Redirection&#xff09; 2. 管道&#xff08;Pipes&a…...

Ubuntu安装VMware17

安装 下载本文的附件&#xff0c;之后执行 sudo chmod x VMware-Workstation-Full-17.5.2-23775571.x86_64.bundle sudo ./VMware-Workstation-Full-17.5.2-23775571.x86_64.bundle安装注意事项&#xff1a; 跳过账户登录的办法&#xff1a;断开网络 可能出现的问题以及解决…...

什么是线性化PDF?

线性化PDF是一种特殊的PDF文件组织方式。 总体而言&#xff0c;PDF是一种极为优雅且设计精良的格式。PDF由大量PDF对象构成&#xff0c;这些对象用于创建页面。相关信息存储在一棵二叉树中&#xff0c;该二叉树同时记录文件中每个对象的位置。因此&#xff0c;打开文件时只需加…...

每日一题——序列化二叉树

序列化二叉树 BM39 序列化二叉树题目描述序列化反序列化 示例示例1示例2 解题思路序列化过程反序列化过程 代码实现代码说明复杂度分析总结 BM39 序列化二叉树 题目描述 请实现两个函数&#xff0c;分别用来序列化和反序列化二叉树。二叉树的序列化是将二叉树按照某种遍历方式…...

Transformer+vit原理分析

目录 一、Transformer的核心思想 1. 自注意力机制&#xff08;Self-Attention&#xff09; 2. 多头注意力&#xff08;Multi-Head Attention&#xff09; 二、Transformer的架构 1. 整体结构 2. 编码器层&#xff08;Encoder Layer&#xff09; 3. 解码器层&#xff08;Decoder…...

「AI学习笔记」深度学习的起源与发展:从神经网络到大数据(二)

深度学习&#xff08;DL&#xff09;是现代人工智能&#xff08;AI&#xff09;的核心之一&#xff0c;但它并不是一夜之间出现的技术。从最初的理论提出到如今的广泛应用&#xff0c;深度学习经历了几乎一个世纪的不断探索与发展。今天&#xff0c;我们一起回顾深度学习的历史…...

【漫话机器学习系列】069.哈达马乘积(Hadamard Product)

哈达马乘积&#xff08;Hadamard Product&#xff09; 哈达马乘积&#xff08;Hadamard Product&#xff09;是两个矩阵之间的一种元素级操作&#xff0c;也称为逐元素乘积&#xff08;Element-wise Product&#xff09;。它以矩阵的对应元素相乘为规则&#xff0c;生成一个新…...

2025一区新风口:小波变换+KAN!速占!

今天给大家分享一个能让审稿人眼前一亮&#xff0c;好发一区的idea&#xff1a;小波变换KAN&#xff01; 一方面&#xff1a;KAN刚中稿ICLR25&#xff0c;正是风口上&#xff0c;与小波变换的结合还处于起步阶段&#xff0c;正是红利期&#xff0c;创新空间广阔。 另一方面&a…...

相同的树及延伸题型(C语言详解版)

从LeetCode 100和101看二叉树的比较与对称性判断 今天要讲的是leetcode100.相同的树&#xff0c;并且本文章还会讲到延伸题型leetcode101.对称二叉树。本文章编写用的是C语言&#xff0c;大家主要是学习思路&#xff0c;学习过后可以自己点击链接测试&#xff0c;并且做一些对…...

【Redis】 String 类型的介绍和常用命令

1. 介绍 Redis 中的 key 都是字符串类型Redis 中存储字符串是完全按照二进制流的形式保存的&#xff0c;所以 Redis 是不处理字符集编码的问题&#xff0c;客户端传入的命令中使用的是什么编码就采用什么编码&#xff0c;使得 Redis 能够处理各种类型的数据&#xff0c;包括文…...

LLM - 大模型 ScallingLaws 的设计 100B 预训练方案(PLM) 教程(5)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/145356022 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Scaling Laws (缩放法则) 是大模型领域中,用于描述 模型性能(Loss) 与…...

Docker/K8S

文章目录 项目地址一、Docker1.1 创建一个Node服务image1.2 volume1.3 网络1.4 docker compose 二、K8S2.1 集群组成2.2 Pod1. 如何使用Pod(1) 运行一个pod(2) 运行多个pod 2.3 pod的生命周期2.4 pod中的容器1. 容器的生命周期2. 生命周期的回调3. 容器重启策略4. 自定义容器启…...

32、【OS】【Nuttx】OSTest分析(1):stdio测试(二)

背景 接上篇wiki 31、【OS】【Nuttx】OSTest分析&#xff08;1&#xff09;&#xff1a;stdio测试&#xff08;一&#xff09; 继续stdio测试的分析&#xff0c;上篇讲到标准IO端口初始化&#xff0c;单从测试内容来说其实很简单&#xff0c;没啥可分析的&#xff0c;但这几篇…...

git push到远程仓库时无法推送大文件

一、错误 remote: Error: Deny by project hooks setting ‘default’: size of the file ‘scientific_calculator’, is 164 MiB, which has exceeded the limited size (100 MiB) in commit ‘4c91b7e3a04b8034892414d649860bf12416b614’. 二、原因 本地提交过大文件&am…...

Vue.js路由管理与自定义指令深度剖析

Vue.js 是一个强大的前端框架,提供了丰富的功能来帮助开发者构建复杂的单页应用(SPA)。本文将详细介绍 Vue.js 中的自定义指令和路由管理及导航守卫。通过这些功能,你可以更好地控制视图行为和应用导航,从而提升用户体验和开发效率。 1 自定义指令详解 1.1 什么是自定义…...

NVIDIA GPU介绍:概念、序列、核心、A100、H100

概述 入职一家大模型领域创业公司&#xff0c;恶补相关知识。 概念 一些概念&#xff1a; HPC&#xff1a;High Performance Computing&#xff0c;高性能计算SoC&#xff1a;System on Chip&#xff0c;单片系统FLOPS&#xff1a;Floating Point Operations Per Second&am…...

【PyTorch】6.张量运算函数:一键开启!PyTorch 张量函数的宝藏工厂

目录 1. 常见运算函数 个人主页&#xff1a;Icomi 专栏地址&#xff1a;PyTorch入门 在深度学习蓬勃发展的当下&#xff0c;PyTorch 是不可或缺的工具。它作为强大的深度学习框架&#xff0c;为构建和训练神经网络提供了高效且灵活的平台。神经网络作为人工智能的核心技术&…...

C语言练习(31)

有5个学生&#xff0c;每个学生有3门课程的成绩&#xff0c;从键盘输入以上数据&#xff08;包括学号、姓名、3门课程成绩&#xff09;&#xff0c;计算出平均成绩&#xff0c;将原有数据和计算出的平均分数存放在磁盘文件stud中。 设5名学生的学号、姓名和3门课程成绩如下&am…...

什么是长短期记忆网络?

一、概念 长短期记忆网络&#xff08;Long Short-Term Memory, LSTM&#xff09;是一种特殊的循环神经网络&#xff08;RNN&#xff09;&#xff0c;旨在解决标准RNN在处理长序列时的梯度消失和梯度爆炸问题。LSTM通过引入三个门&#xff08;输入门、遗忘门和输出门&#xff09…...

git中有关old mode 100644、new mode 10075的问题解决小结

在 Git 版本控制系统中&#xff0c;文件权限变更是一种常见情况。当你看到类似 old mode 100644 和 new mode 100755 的信息时&#xff0c;这通常表示文件的权限发生了变化。本文将详细解析这种情况&#xff0c;并提供解决方法和注意事项。 问题背景 在 Git 中&#xff0c;文…...

Jenkins上生成的allure report打不开怎么处理

目录 问题背景&#xff1a; 原因&#xff1a; 解决方案&#xff1a; Jenkins上修改配置 通过Groovy脚本在Script Console中设置和修改系统属性 步骤 验证是否清空成功 进一步的定制 也可以使用Nginx去解决 使用逆向代理服务器Nginx&#xff1a; 通过合理调整CSP配置&a…...