java设计按月每天签到_java实现连续签到(打卡)天数
时间: 2023-12-23 20:18:58 浏览: 44
你好!针对你的问题,我可以提供以下思路:
1. 首先,需要定义一个签到记录表,记录用户的签到情况。该表可以包括用户ID、签到日期、签到状态等字段。
2. 在用户签到时,需要进行如下操作:
a. 判断用户当天是否已经签到。
b. 如果当天已经签到,则返回签到失败。
c. 如果当天没有签到,则将签到状态更新为已签到。
d. 判断用户是否连续签到,如果是,则将用户的连续签到天数加1,否则连续签到天数清零。
3. 在查询用户签到信息时,需要返回用户当月的签到情况,以及用户的连续签到天数。
下面是一个简单的 Java 实现:
```
import java.time.LocalDate;
import java.util.HashMap;
import java.util.Map;
public class SignInSystem {
// 签到记录表
private Map<String, Map<LocalDate, Boolean>> records = new HashMap<>();
// 用户签到
public boolean signIn(String userId) {
// 获取当前日期
LocalDate today = LocalDate.now();
// 获取用户签到记录
Map<LocalDate, Boolean> userRecords = records.getOrDefault(userId, new HashMap<>());
// 判断用户是否已经签到
if (userRecords.containsKey(today) && userRecords.get(today)) {
return false;
}
// 更新用户签到记录
userRecords.put(today, true);
records.put(userId, userRecords);
// 计算连续签到天数
int consecutiveDays = 0;
for (LocalDate date = today.minusDays(6); date.isBefore(today.plusDays(1)); date = date.plusDays(1)) {
if (userRecords.containsKey(date) && userRecords.get(date)) {
consecutiveDays++;
} else {
consecutiveDays = 0;
}
}
// 返回签到结果
return true;
}
// 查询用户签到情况
public Map<LocalDate, Boolean> getSignInRecords(String userId) {
return records.getOrDefault(userId, new HashMap<>());
}
// 查询用户连续签到天数
public int getConsecutiveDays(String userId) {
// 获取当前日期
LocalDate today = LocalDate.now();
// 获取用户签到记录
Map<LocalDate, Boolean> userRecords = records.getOrDefault(userId, new HashMap<>());
// 计算连续签到天数
int consecutiveDays = 0;
for (LocalDate date = today.minusDays(6); date.isBefore(today.plusDays(1)); date = date.plusDays(1)) {
if (userRecords.containsKey(date) && userRecords.get(date)) {
consecutiveDays++;
} else {
consecutiveDays = 0;
}
}
// 返回连续签到天数
return consecutiveDays;
}
}
```
使用示例:
```
public static void main(String[] args) {
SignInSystem signInSystem = new SignInSystem();
// 用户A签到
signInSystem.signIn("A");
// 查询用户A的签到情况
Map<LocalDate, Boolean> recordsA = signInSystem.getSignInRecords("A");
System.out.println(recordsA);
// 查询用户A的连续签到天数
int consecutiveDaysA = signInSystem.getConsecutiveDays("A");
System.out.println(consecutiveDaysA);
// 用户A连续签到7天
signInSystem.signIn("A");
signInSystem.signIn("A");
signInSystem.signIn("A");
signInSystem.signIn("A");
signInSystem.signIn("A");
signInSystem.signIn("A");
// 查询用户A的连续签到天数
consecutiveDaysA = signInSystem.getConsecutiveDays("A");
System.out.println(consecutiveDaysA);
}
```
希望能对你有所帮助!