java - 4种不同车辆的预订系统
问题描述
我是一个 Java 初学者,我的课只涉及 if/while/switch 和 do 循环、类和运算符。还没有 SQL 或对象。
我做了一个有 6 个选项的程序,第一个是汽车预订。车辆随机归属(1 到 4),然后用户选择开始预订的时间。用户可以在预订后返回主菜单,从而可以进行另一次预订。
我觉得没必要担心地点的时间(例如,同一辆车在一天的不同时间可以有2个不同的预订),但每辆车只能预订一次. 由于汽车是随机归因的,如果一开始,汽车#4 被归因,那么只有汽车#1-3 可用于第二次运行的归因。
我显然不会要求你为这个函数做所有的编码,但我很乐意接受一些阅读建议,让我知道如何在我的代码中编写这样一个系统。我似乎无法清楚地理解我在其他“预订”相关问题线程中所读到的关于该主题的内容。
PS:如果有帮助,这是我使用学校制作的“Clavier.class”的完整代码,它允许读取用户的键盘输入。
public class Facturation {
public static void main (String [] args) {
while (true) {
int Choix ;
int random;
int HrDebut;
final String MSG_PRESENTATION = "Programme de facturation a la minute pour"
+ "\n" + "la location de vehicules electriques. ";
final String MENU = "----"
+ "\n" + "MENU"
+ "\n" + "----"
+ "\n" + "1. Louer un vehicule"
+ "\n" + "2. Facturer la remise d'un vehicule"
+ "\n" + "3. Annuler une location"
+ "\n" + "4. Afficher le montant des recettes"
+ "\n"+ "5. Reinitialiser le montant des recettes"
+ "\n" + "6. Quitter le programme"
+ "\n" + "\n"+ "Entrez votre choix";
final String MSG1 = "LOCATION" ;
final String MSG_SOLLICITATION1 = "Entrez l'heure du debut de la location";
final String NOCAR1 = "Il n'y a plus de véhicules disponibles.";
final String MSG_ERREUR = "Ceci n'est pas une entree valide";
final String MSG_RTR_MENU = "Appuyez sur <ENTREE> pour revenir au menu principal" ;
System.out.println (MSG_PRESENTATION);
System.out.print (MENU + "\n") ;
while (true) {
Choix = Clavier.lireInt();
switch (Choix) {
case 1:
System.out.println(MSG1);
double randomDouble = Math.random();
randomDouble = randomDouble * 4 + 1;
int randomInt = (int) randomDouble;
System.out.println (MSG_SOLLICITATION1);
while (true ) {
HrDebut= Clavier.lireInt();
int HrHHDebut= HrDebut/100;
int HrMMDebut= HrDebut%100;
if (HrDebut >= 900 && HrDebut < 960 || HrDebut >= 1000 && HrDebut < 1060 ||
HrDebut >= 1100 && HrDebut < 1160 || HrDebut >= 1200 && HrDebut < 1260 ||
HrDebut >= 1300 && HrDebut < 1360 || HrDebut >= 1400 && HrDebut < 1460 ||
HrDebut >= 1500 && HrDebut < 1560 || HrDebut >= 1600 && HrDebut < 1660 ||
HrDebut >= 1700 && HrDebut < 1760 || HrDebut == 1800) {
System.out.println("CONFIRMATION:" + "\n" +
"-Location du vehicule no:" + randomInt +
"\n" + "Debut de la location:" + HrHHDebut + "h" + HrMMDebut
+ "\n" + "\n" + MSG_RTR_MENU) ;
Clavier.lireFinLigne();
break;
} else {
System.out.println (MSG_ERREUR);
System.out.println (MSG_SOLLICITATION1);
}
}
break;
case 2:
System.out.println("test 12");
}
break;
}
}
}
}
解决方案
假设汽车#4 已经被保留,有没有办法让程序记住它,当它返回到它随机属性汽车的段时,现在只有汽车#1、2 和 3 可用于随机属性?
是的,有办法。您使用数组或集合来记录预订;例如
boolean[] reservations = new boolean[4];
// Assuming that cars are numbered from 0 to 3 ...
// To reserve a car:
reservations[carNumber] = true;
// To test if a car is reserved:
if (reservations[carNumber]) {
System.out.println("Car " + carNumber + " is reserved");
}
对于需要记录的有关汽车、预订等的其他信息,您可以执行类似的操作。(收藏会是一个更好的方式,但如果你还没有了解这些...)
我只需要向老师发送一个班级,这意味着我不能将另一个班级导入包含这些对象的第一个班级(除非这不是你试图解释的内容。
您可以在另一个类中声明一个类。例如:
public class Homework { private static class Car { ... } private static class Reservation { ... } }
您可以将两个或多个类放在一个源代码文件中,前提是它们都在同一个包中,并且只有一个被声明为
public
.
所以这意味着您只提交一个文件的要求并不妨碍您以面向对象的方式编写代码。
推荐阅读
- python - 如何使循环更有效
- python - 熊猫合并目前有什么问题吗?
- laravel - Kyslik/column-sortable 不适用于 withCount
- python - Pandas 为什么索引禁止对数据帧进行某些操作(例如 loc 导致 IndexingError :)
- spring-boot - Spring Boot - 无法连接 Azure MySQL 数据库
- postgresql - 在 Rails 中对库存进行分组和计数
- cookies - 通过图像在外部域上设置cookie,似乎不起作用
- batch-file - 任务计划程序未运行交互式批处理文件/如何使批处理文件非交互式
- angular - 试图一起传递两个数据
- javascript - res.send 没有返回预期的数据:JavaScript、Express、Node?