同学们,从本周开始,我们将逐步开发一个网上交易平台(Transaction Management System)。每两周,我们都会添加新的需求,来不断完善系统功能。例如,TMS-1 阶段需要大家完成账号注册和登录系统,而 TMS-2 阶段则需要在 TMS-1 的基础上实现商品上架和购买等功能。
在开始编写代码之前,建议大家先仔细阅读需求说明和文末的 HINTS,再开始编写代码,编写好的代码需要经过 patpat 评测。通过所有的测试点后,需将整个项目文件打包上传到云平台,即可完成本次实验。希望大家能够认真完成,不作弊不抄袭。
patpat 的下载和使用说明请参考:patpat 使用指南。
咔啡国因其得天独厚的咖啡资源而极度繁荣昌盛。随着商业的蓬勃发展,人们意识到开发一款高效且便捷的交易平台系统的重要性。这个交易平台系统将为咔啡国的从业者提供一个全面的市场,使得他们能够方便地买卖各种产品。通过这个系统,店家可以将自己的货品以公正的价格出售,顾客可以方便地购买到高品质的产品。这款交易平台系统的开发将进一步推动咔啡国商业的发展,而这个任务将由你来完成!
本次迭代需要你完成如下命令:
命令符 | 说明 |
---|---|
quit | 关机 |
register 卡号 姓名 密码 确认密码 身份类型 | 用户注册 |
login 卡号 密码 | 用户登录 |
logout | 用户登出 |
printInfo | 打印用户个人信息 |
printInfo 卡号 | 打印其他用户信息 |
实现基本的命令读入和退出功能。
首先,你的任务是编写一个 Test
类,当程序启动时,进入main
方法,等待用户输入,输入命令的基本格式为
1 | 命令 [参数1] [参数2] [参数3] ... [参数n] |
其中
1 | Command '命令' not found |
在所有的错误信息中,该条信息的优先级最高。
1 | command arg1 arg2 arg3 arg4 |
当终端输入 quit
时,系统退出(程序退出状态为0),并在终端输出如下内容
1 | ----- Good Bye! ----- |
quit
命令也需要检查参数数量是否合法!
交易平台提供三类身份:管理员、店主以及顾客。在注册时,用户需要选择自己的身份。
xx 国的居民使用的身份证称为“Kakafee 卡”,注册交易平台账号时需要填写 Kakafee 卡号、姓名、密码、确认密码以及身份类型。
命令格式为
命令符 | 参数 1 | 参数 2 | 参数 3 | 参数 4 | 参数 5 |
---|---|---|---|---|---|
register | 卡号 | 姓名 | 密码 | 确认密码 | 申请身份类型 |
姓名
由英文字母(大小写均可)和下划线构成。
第一位不能为下划线。
长度在 4-16 字符之间。
Kakafee 卡号
密码
@
,_
,%
,$
)三类构成,每类至少有一个字符。确认密码
身份类型
2.2.1 注册成功
当所有条件都满足时,注册成功并在终端输出
1 | Register success |
2.2.2 参数格式不符合规定
在 register
命令中,共有 5 个参数。如果参数数量不等于 5 ,那么输出
1 | Illegal argument count |
如果参数数量合法,那么按照如下顺序检查信息
2.2.3 用户已登录
如果系统有用户在线时,无法注册,输出如下信息
1 | Already logged in |
2.2.4 卡号格式不合法
1 | Illegal Kakafee number |
2.2.5 用户已注册
用户已经注册过,再次注册应在终端输出如下信息
1 | Kakafee number exists |
2.2.6 姓名格式不合法
1 | Illegal name |
2.2.7 密码格式不合法
1 | Illegal password |
2.2.8 确认密码与密码不一致
1 | Passwords do not match |
2.2.9 身份类型不合法
1 | Illegal identity |
如果存在多种不合法情况,按上述顺序只输出最先发生的非法信息。
对于已注册的用户,登录平台时需要输入 Kakafee 卡号以及密码
命令符 | 参数1 | 参数2 |
---|---|---|
login | Kakafee 卡号 | 密码 |
3.2.1 登录成功
1 | Welcome to TMS |
3.2.2 参数数量不合法
1 | Illegal argument count |
3.2.3 用户已登录
该系统只允许一个用户在线。
1 | Already logged in |
如果一个人重复登录,那么同样输出上述信息。
3.2.4 卡号格式不合法
1 | Illegal Kakafee number |
3.2.5 用户未注册
1 | Kakafee number not exists |
3.2.6 密码错误
无论密码格式是否正确,只要与注册时的密码不一致,均输出
1 | Wrong password |
命令符 | 参数 |
---|---|
logout | 无 |
4.2.1 登出成功
当系统有在线用户时,输入该命令则(迫使在线用户)成功登出。
终端输出
1 | Bye~ |
4.2.2 参数数量不合法
logout
命令后不带有参数,如果命令符后带有参数,仍输出
1 | Illegal argument count |
4.2.3 无用户在线
1 | Please log in first |
建议同学们重写 Object
类的 toString()
方法完成这项功能,当然也可以通过设计专门的格式化类来实现。
命令符 | 可选参数 |
---|---|
printInfo | [Kakafee卡号] |
5.2.1 成功
输出信息应包括:姓名、卡号以及身份。
1 | Name: username |
冒号为英文冒号,且冒号后有一个空格。
5.2.2 参数格式不符合规定
参数只能为空或者 1 个。
1 | Illegal argument count |
5.2.3 未登录
1 | Please log in first |
5.2.4 权限不足
商家或顾客调用带有参数的 printInfo 时,提示权限不足。
1 | Permission denied |
5.2.5 Kakafee 卡号不合法
1 | Illegal Kakafee number |
5.2.6 用户不存在
当 Kakafee 卡号对应的用户未注册时,提示 Kakafee 卡号不存在。
1 | Kakafee number not exist |
首先,输入命令未定义时,输出命令不存在,替换下面的 cmd
为具体的命令名称。
1 | Command 'cmd' not found |
例如输入 logged out
,由于命令 logged
未定义,所以输出
1 | Command 'logged' not found |
其次,当输入命令有定义但参数个数不合法时,输出
1 | Illegal argument count |
当命令有定义,参数个数正确时,才会进一步输出 Already logged in
、Bye ~
等成功或失败信息。
当一句命令存在多种非法情况,按上述顺序只输出最先发生的非法信息。
Info
这里的实现思路仅供参考,具体同学们可以自行发挥。🙂
对于用户,你可以设计一个 User
类(不限定类的名字,但一个好的名字是十分重要的),该类至少包括如下属性:
卡号
姓名
密码
身份类型(可以通过一个字段表示,也可以设计为三种身份继承自一个 User
基类)
建议将属性设置为私有属性(private
),并为其编写相应的 getter
/setter
。
对于一些具有一定通用性或者不依附实体对象的方法,例如检查卡号格式、检查密码格式、判断登录状态、判断注册状态、格式化输出实体类等,可以设计一些工具类,在其中实现这些方法,一般设计为静态方法即可。
为了完成实验,同学们不免要设计一些全局变量。对于全局变量的管理,同学们可以设计一个类,相关的全局变量设置为 static
;也可以设计一个类,而将全局变量设置为成员变量,之后通过创建一个对象来操作全局变量。
在判断姓名,密码是否合法时,建议大家用正则表达式来判断。例如,想要判断名字是否合法时,可以参考下列代码
1 | public boolean judgeName(String name) { |
正则表达式通常用于匹配字符串模式,不太适合处理范围验证,所以对于卡号的判断,可以分割字符串后再验证范围。正则表达式的更多用法,大家可以查看:正则表达式 - 教程。
在开发时, 合理使用List
和Map
加快我们的开发效率。
对于List
,常用的方式如下
1 | public class Test { |
对于Map
,常用的方式如下
1 | public class Test { |
更多的使用方法同学们可以查阅相关资料,这里就不展开了。List
和Map
还涉及到“泛型”,感兴趣的同学可以提前了解了解。
每次迭代有测试样例,测试样例也是 patpat 评测数据,大家可以参考样例修改自己的代码。
1 | QUisnjfg 7856 |