-2
votes

J'ai besoin d'un conseil concernant les minuteries en C #?

Je configurais un système de bibliothèque à l'aide de C #, ce système consiste sur le suivant:

Les étudiants peuvent réserver des livres à distance, mais cette opération de réservation n'est valable que 24h, si le membre ne s'affiche pas dans ce délai imparti, Le livre est automatiquement publié et s'ils le répètent pendant 3 fois, ils sont bannis pendant 15 jours.

Pour cela, j'ai commencé à configurer une minuterie (à l'aide de System.threading.Timer) mais j'ai besoin d'une minuterie à chaque fois Un étudiant livre un seul livre et je suis vraiment coincé sur la façon de faire cela. J'ai cette idée de créer une liste de minuteries et à chaque fois qu'une opération de réservation se produit, j'ai créé une minuterie et je l'ai mise dans la liste. xxx

est-ce un bon moyen mettre en œuvre l'idée?

Y a-t-il une meilleure idée de mettre en œuvre cela?

Editer 1: J'ai utilisé une base de données pour mettre toutes les informations et une horodatage à chaque fois qu'un livre est réservé.


13 commentaires

Vous allez créer une liste de minuteries? Que se passe-t-il si votre programme se bloque? Oups, il va de votre système. Non, cela n'a pas de sens du tout.


oui c'est pourquoi je pose des conseils que je ne sais pas vraiment comment définir cela


Utilisez une date d'heure à enregistrer lorsqu'un livre est .. Réservé. Le stockage de ces informations est séparé pour établir des minuteries / traitement pour «faire une action» après l'expiration. Habituellement, une forme de base de données est utilisée pour persister les informations. Une minuterie peut ensuite être utilisée, tandis que le service est en cours d'exécution, pour envoyer des alertes de rappel (ou tout ce qui est requis). Une conception prudente permettrait la réconciliation de l'état avec des mises à jour minimes ou non qui se chevauchent.


Eh bien, il est clair que vous ne pouvez pas faire confiance à un programme d'exécution et de fonctionnement tout le temps. Les programmes se bloquent ou descendent des mises à jour, ou le serveur est redémarré. Vous devez donc stocker les informations de réservation en dehors de la mémoire de l'application. Cela signifie généralement la base de données. Ensuite, vous pouvez avoir quelque chose qui vérifie la base de données de temps en temps et traite les enregistrements de plus de 24 heures.


Vous n'avez pas besoin de minuteries pour cela du tout. Vous n'avez même pas besoin de vérifier périodiquement ... stockez simplement la date / heure de réservation pour chaque livre réservé. Chaque fois que quelqu'un d'autre veut réserver un livre, vérifiez si le livre a déjà une date / heure de réservation stockée. Sinon, le livre n'est pas déjà réservé. S'il a une date / heure de réservation, vérifiez si cette date / heure est trop ancienne (c'est-à-dire plus âgée de 24h). Si oui, supprimez les informations de réservation obsolètes et traitez le livre comme non réservé. Si la date / heure de réservation n'est pas trop ancienne, continuez à traiter le livre comme déjà réservé.


@ Mason J'ai pensé à créer une seule minuterie qui vérifie si souvent, mais ce que je veux faire est exactement après que la limite de temps a passé le livre est effacée car peut-être à cette heure exacte, un autre élève souhaitait réserver ce même livre ou quelque chose.


Vous devez décider de ce que signifie "heure exacte". S'il y a un délai de 5 secondes, est-ce acceptable? Qu'en est-il 30 secondes? Je ne suis pas allé dans une bibliothèque depuis des années, les livres sont-ils vraiment de la demande qu'un délai d'une minute est inacceptable? Quoi qu'il en soit, décidez de la quantité de retard acceptable, puis de déterminer si vous avez un seul chronomètre, vérifiez que le système est assez bon.


@ Mason Comme j'ai dit que le livre est automatiquement publié si l'emprunteur ne se présentait pas à la bibliothèque dans les 24h de 24h et s'ils le répètent pendant 3 fois, ils sont interdits pendant 15 jours à cette fin, le délai a été mis.


" S'ils répètent cela pendant 3 fois " C'est un peu comment-ya-doin "... une telle règle devra être plus précise pour être juste et juste. Après tout, faire une réservation 3x sans ramassage en période de deux ans est plutôt différente de faire la même chose en un mois ou même une semaine, non?


@elgonzo oui je suis d'accord mais je fais juste un projet universitaire à ce sujet et que la règle était l'une des tâches qui nous ont demandé de faire, également merci de me dire que je n'y pensais pas vraiment, je vais la mettre en œuvre comme vous l'avez dit. (faire une réservation 3x sans ramassage en période d'un mois)


Merci à tous pour votre aide ^^


À propos, si votre projet / système doit promulguer une interdiction comme vous l'avez mentionné, ma suggestion de ne pas avoir besoin de chèques périodiques (ou de minuteries) ne s'applique plus, car vous auriez maintenant besoin de vérifier périodiquement pour voir si le marteau Bed être balund ;-)


Oui merci pour l'aide.


3 Réponses :


0
votes

Je ne peux pas commenter: (

Je pense que comme les autres ont mentionné, ce n'est pas un bon design. Il vaut mieux être axé sur l'événement. alias. Lorsque vous vérifiez si un livre est disponible, décidez que vous êtes enfermé par une personne dans les 24 heures.

I.e.

Un utilisateur A pourrait verrouiller un livre 1 et vous pouvez enregistrer ces informations quelque part avec, comme Météo par User2864740, un horodatage (en C # DateTime). Par example: Réserver 1: 2019-01-05 15:00

Plus tard, 4 choses pourraient arriver: 1. L'emprunteur est arrivé à l'heure 2. L'emprunteur est arrivé en retard 3. Quelqu'un est venu plus tôt et essayez de vérifier ce livre 4. Quelqu'un est venu 24 heures plus tard et essayez de vérifier ce livre

Chacun pourrait être considéré comme un événement.

L'idée ici est très générale dans le logiciel: ne m'appelle pas (avec des informations que je peux / peut ne pas avoir besoin), je vous appellerai si nécessaire.

J'espère que cela aide.

Donc, si vous développez un système de gestion, il est préférable de commencer par une base de données. Si juste une exercice après la classe, vous pouvez même utiliser le système de fichiers, à la caisse pour utiliser les classes liées à IO en C #.

amusez-vous!


3 commentaires

Merci de votre réponse, j'ai utilisé une base de données et j'ai utilisé la chose à l'horodatage, mais si l'emprunteur n'est pas venu du tout et après cela, il a fait la même chose plus tard, c'est pourquoi j'ai ajouté le système interdit après cela pendant 3 fois ils sont bannis pendant 15 jours.


Je crois que vous pourriez facilement enregistrer cela dans une autre table. ex. La deuxième fois où il vient, vous avez mis un disque comme: l'utilisateur 1-book1-1 défaillance obtenez et lorsque l'échec obtenez-vous à un seuil, vous l'interdisez de verrouiller le livre. Vous pouvez faire le chèque avant chaque atténuation de la serrure et la vérification contre le nombre d'échecs. Et n'oubliez pas de l'effacer une fois qu'il vérifie vraiment le livre.


Oh ouais c'est un bon moyen de le mettre, merci de votre réponse.



0
votes
  1. Créer un service Windows


1 commentaires

Je pense que cela aide beaucoup la meilleure idée de vous remercier de votre réponse



0
votes

Je vous suggère de repenser votre problème et votre solution. Et si un étudiant fait une réservation sur plusieurs articles, disons 5, le même jour et ne vient jamais pour les obtenir. Le système interdire-t-il la personne pour ne pas collecter ses 5 articles? Ou devraient-ils compter comme 1 réservation?

Pour la solution, je vais suggérer un modèle où l'article est réservé pour le reste de la journée + 24 heures. Ensuite, vous pouvez ajouter la réservation à une table dans votre base de données et supprimez-les lorsque les élèves collectent leurs articles. Dans ce cas, vous pouvez vérifier votre table de réservation qu'une fois par jour et prendre des étudiants à interdire si nécessaire.


0 commentaires