我正在使用c#设置图书馆系统,该系统包含以下内容:
学生可以远程预订书籍,但是此预订操作仅在24小时内有效。如果该成员在该期限内未出现,该书籍将自动发布,并且如果重复3次,将被禁止15天。
为此,我开始设置一个计时器(使用System.Threading.Timer),但是每当学生预订一本书时,我都需要一个计时器,而我确实对如何执行此操作感到困惑。我有创建计时器列表的想法,每次进行预订操作时,我都会创建一个计时器并将其放入列表中。
private List<Timer> timerList;
private void SetUpTimer(TimeSpan alertTime)
{
DateTime current = DateTime.Now;
TimeSpan timeLeft = alertTime - current.TimeOfDay;
Timer timer = new System.Threading.Timer(x =>
{
this.doWork();
}, null, timeLeft, Timeout.InfiniteTimeSpan);
timerList.Add(timer);
}
private void doWork()
{
}
这是实现该想法的好方法吗?
有没有更好的主意来实现这一点?
编辑1:每次预订一本书时,我都会使用数据库存储所有信息和时间戳。
答案 0 :(得分:0)
我无法评论:(
我认为,正如其他人提到的那样,这不是一个好的设计。最好是事件驱动。又名在检查书籍是否可用时,请确定天气在24小时内有人将其锁定。
即
用户A可以锁定一本书1,并且您可以将此信息保存到某处,如user2864740所指,带有时间戳记(在C#DateTime中)。例如: 书1:2019-01-05 15:00
稍后,可能会发生4种情况: 1.借款人准时来 2.借款人来晚了 3.有人来得比较早,尝试把这本书签出来 4. 24小时后有人来找本书
每个人都可以视为一件大事。
这里的想法在软件中非常笼统:不要打电话给我(提供我可能会/可能不需要的信息),需要时我会打电话给你。
希望这会有所帮助。
因此,如果您要开发一些管理系统,最好从数据库开始。如果只是做完课后练习,您甚至可以使用文件系统,并查看如何在C#中使用与IO相关的类。
玩得开心!
答案 1 :(得分:0)
创建Windows服务
该服务将每1m查询一次数据库并更新预订表
+----------------------+
| |
| |
| +---------+ |
+-------------+ book | | | |
| +-----------------> | Data | |
| User | | | Base | |
| | | | | |
+-------------+ | +-----+---+ |
| ^ |
| | check |
| +----+----+ |
| | | |
| | | |
| | Windows | |
| | Service | |
| | | |
| +---------+ |
| |
| |
| |
+----------------------+
server
答案 2 :(得分:0)
我建议您重新考虑您的问题和解决方案。 如果学生在同一天预订多个物品(比如说5个),却从来没有来预订这些物品,该怎么办?系统是否应禁止该人不收集他的5件物品?还是应该算作1个预订?
对于解决方案,我将建议一个模型,该模型将在一天的其余时间+ 24小时内预订该项目。然后,您可以将预订添加到数据库中的表中,并在学生收集项目时将其删除。在这种情况下,您每天只能检查一次预订表,并在需要时取禁学生。