步骤一、

  1. 集成日志框架、用于后期记录日志信息;
  2. 定义一个电影类,Movie类包含:片名、主演、评分、时长、票价、余票;
  3. 系统包含2种角色类型:商家、客户,存在大量相同属性信息;
  4. 定义User类作为父类,属性:登录名称、密码、真实名称、性别、电话、账户金额;
  5. 定义Business类代表客户角色,继承User类,独有属性:店铺名称、地址;
  6. 定义Customer类代表客户角色,继承User类,独有属性:暂无;
  7. 定义集合List<User>用户存放系统注册的用户对象信息;
  8. 定义集合Map<Business,List<Movie>>存放商家和其拍片信息。

步骤二、

  1. 首页需要包含登录,商家入驻,客户注册功能;
  2. 商家和客户可以共用一个登录功能;
  3. 判断登录成功的用户的真实类型,根据用户类型完成对应的操作界面设计;

步骤三、【商家功能--展示详情、影片下架、退出】

  1. 展示本商家的信息和其拍片情况;
  2. 提供影片上架功能:就是创建一个影片对象,存入到商家的集合中去;
  3. 退出:回到登录的首页

 步骤四、【影片修改、影片下架】

  1. 影片修改功能:拿到需要修改的影片对象,修改里边的数据后重新将改影片上架;
  2. 影片下架功能:从商家集合中移除改影片对象

步骤五、【展示全部影片信息、用户购票功能】

  1. 其实就是遍历全部商家和其拍片信息并展示出来;
  2. 用户可以选择需要购买票的商家和其电影信息;
  3. 选择购买数量,购买成功后需要支付金额,并更新商家金额和客户金额

示例代码部分:

1 package com.companyName.bean;
 2 /**
 3  * 用户类(客户和商家的父类)
 4  * */
 5 public class User {
 6     private String loginName;
 7     private String realName;
 8     private String password;
 9     private char sex;
10     private String phone;
11     private double money;
12 
13     public User() {
14     }
15 
16     public User(String loginName, String realName, String password, char sex, String phone, double money) {
17         this.loginName = loginName;
18         this.realName = realName;
19         this.password = password;
20         this.sex = sex;
21         this.phone = phone;
22         this.money = money;
23     }
24 
25     public String getLoginName() {
26         return loginName;
27     }
28 
29     public void setLoginName(String loginName) {
30         this.loginName = loginName;
31     }
32 
33     public String getRealName() {
34         return realName;
35     }
36 
37     public void setRealName(String realName) {
38         this.realName = realName;
39     }
40 
41     public String getPassword() {
42         return password;
43     }
44 
45     public void setPassword(String password) {
46         this.password = password;
47     }
48 
49     public char getSex() {
50         return sex;
51     }
52 
53     public void setSex(char sex) {
54         this.sex = sex;
55     }
56 
57     public String getPhone() {
58         return phone;
59     }
60 
61     public void setPhone(String phone) {
62         this.phone = phone;
63     }
64 
65     public double getMoney() {
66         return money;
67     }
68 
69     public void setMoney(double money) {
70         this.money = money;
71     }
72 }
1 package com.companyName.bean;
 2 //商家类
 3 public class Business extends User{
 4     //店铺名称
 5     private String shopName;
 6     //店铺地址
 7     private String address;
 8 
 9     public String getShopName() {
10         return shopName;
11     }
12 
13     public void setShopName(String shopName) {
14         this.shopName = shopName;
15     }
16 
17     public String getAddress() {
18         return address;
19     }
20 
21     public void setAddress(String address) {
22         this.address = address;
23     }
24 }
1 package com.companyName.bean;
2 //客户类
3 public class Customer extends User{
4 
5 }
1 package com.companyName.run;
  2 
  3 import com.companyName.bean.Business;
  4 import com.companyName.bean.Customer;
  5 import com.companyName.bean.Movie;
  6 import com.companyName.bean.User;
  7 import org.slf4j.Logger;
  8 import org.slf4j.LoggerFactory;
  9 
 10 import java.math.BigDecimal;
 11 import java.text.ParseException;
 12 import java.text.SimpleDateFormat;
 13 import java.util.*;
 14 
 15 public class MovieSystem {
 16     /**
 17      * 定义系统的数据容器用于存储用户的数据
 18      * @param args
 19      * //1、存储用户(商家对象、客户对象)
 20      */
 21     public static final List<User> USERS = new ArrayList<>();
 22 
 23     //定义一个系统扫描器
 24     public static final Scanner SYS_SCAN = new Scanner(System.in);
 25     //定义一个静态的User类型的变量记住当前登录成功的用户对象(同一时刻只能有一个人处于登录状态<单线程>)
 26     public static User loginUser;
 27     //定义一个日期格式化类的对象用于格式化时间为我们的自定义形式
 28     public static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
 29     //日志记录
 30     public static Logger logger = LoggerFactory.getLogger("MovieSystem");
 31     /**
 32      * 2、存储系统全部商家和其拍片信息
 33      * 商家1 = [m1,m2,m3...]
 34      * 商家2 = [m1,m2,m3...]
 35      * 商家3 = [m1,m2,m3...]
 36      * ......
 37      * @param args
 38      */
 39     public static Map<Business, List<Movie>> MOVIES = new HashMap<>();
 40 
 41     /**
 42      * 3、准备一些测试数据
 43      * @param args
 44      */
 45     static {
 46         Business c_b = new Business();
 47         c_b.setLoginName("阿飞");
 48         c_b.setRealName("佐菲");
 49         c_b.setPassword("123");
 50         c_b.setSex('男');
 51         c_b.setPhone("03718512");
 52         c_b.setMoney(100);
 53         c_b.setShopName("泰华国际影视中心");
 54         c_b.setAddress("影院街26号3楼");
 55         List<Movie> c_movies = new ArrayList<>();
 56         try {
 57             Movie m = new Movie("我不是药神","徐峥",9.8,125,35,
 58                     150,SDF.parse("2021/02/05 15:30:00"));
 59             c_movies.add(m);
 60             USERS.add(c_b);
 61             MOVIES.put(c_b,c_movies);
 62         } catch (ParseException e) {
 63             System.out.println("解析时间出现异常");
 64             e.printStackTrace();
 65         }
 66 
 67         Customer c = new Customer();
 68         c.setLoginName("用户1号");
 69         c.setPassword("123456");
 70         c.setRealName("张楠");
 71         c.setSex('男');
 72         c.setMoney(500);
 73         c.setPhone("18342256987");
 74         USERS.add(c);
 75 
 76         Customer c1 = new Customer();
 77         c1.setLoginName("用户2号");
 78         c1.setPassword("234567");
 79         c1.setRealName("李嘉佳");
 80         c1.setSex('女');
 81         c1.setMoney(1500);
 82         c1.setPhone("18389468532");
 83         USERS.add(c1);
 84 
 85         Customer c2 = new Customer();
 86         c2.setLoginName("用户3号");
 87         c2.setPassword("345678");
 88         c2.setRealName("赵冰琪");
 89         c2.setSex('女');
 90         c2.setMoney(300);
 91         c2.setPhone("15515698956");
 92         USERS.add(c2);
 93 
 94         //注意:商家一定要加入到店铺拍片信息中
 95 
 96         Business b = new Business();
 97         b.setLoginName("商家1号");
 98         b.setPassword("123456");
 99         b.setRealName("李乐");
100         b.setSex('男');
101         b.setMoney(0);
102         b.setPhone("03715645");
103         b.setAddress("影院街");
104         b.setShopName("中英数字影城");
105         USERS.add(b);
106         //一个影院可以对应多部影片信息,【当前不放影片信息】
107         List<Movie> movies = new ArrayList<>();
108         MOVIES.put(b,movies);
109 
110         Business b2 = new Business();
111         b2.setLoginName("商家2号");
112         b2.setPassword("123456");
113         b2.setRealName("赵倩");
114         b2.setSex('女');
115         b2.setMoney(0);
116         b2.setPhone("060-1812-5356");
117         b2.setAddress("小夏街");
118         b2.setShopName("奥斯卡数字影城");
119         USERS.add(b2);
120         //一个影院可以对应多部影片信息,【当前不放影片信息】
121         List<Movie> movies2 = new ArrayList<>();
122         MOVIES.put(b2,movies2);
123 
124     }
125     public static void main(String[] args) {
126         showMain();//展示主界面
127     }
128     private static void showMain() {
129         while (true) {
130             System.out.println("***********电影系统主界面*************");
131             System.out.println("******1、登录      2、用户注册*********");
132             System.out.println("******3、商家注册            *********");
133             System.out.println("************************************");
134 
135             System.out.println("请输入操作命令");
136             String command = SYS_SCAN.nextLine();
137             switch (command){
138                 case "1":
139                     //登录功能
140                     login();
141                     break;
142                 case "2":
143                     break;
144                 case "3":
145                     break;
146                 default:
147                     System.out.println("该操作不被支持,请重新选择~");
148             }
149         }
150     }
151 
152     private static void login() {
153         while (true) {
154             System.out.println("请输入登录名:");
155             String loginName = SYS_SCAN.nextLine();
156             //根据用户名到USERS集合里面查询用户
157             User user = getUserByLoginName(loginName);
158             if (user == null){
159                 System.out.println("登录名不正确,请重新输入~");
160             }else {
161                 //用户名正确,校验密码
162                 System.out.println("请输入密码:");
163                 String password = SYS_SCAN.nextLine();
164                 if (user.getPassword().equals(password)){
165                     //密码正确,登录成功
166                     loginUser = user;
167                     //判断用户的真实类型(商家、客户)
168                     if (user instanceof Business){
169                         //展示商家界面
170                         showBusinessMain();
171                     }else if(user instanceof Customer){
172                         //展示客户界面
173                         showCustomerMain();
174                     }
175                     return;
176                 }else {
177                     System.out.println("密码错误,请重新输入~");
178                 }
179             }
180         }
181     }
182 
183     //客户操作界面
184     private static void showCustomerMain() {
185         logger.info(loginUser.getRealName() + "客户登录了系统,正在进行客户操作");
186         System.out.println("*******    客户界面        ************");
187         System.out.println("欢迎" + loginUser.getRealName() + (loginUser.getSex() == '男' ? "先生" : "女士") + "进入系统");
188         System.out.println("******1、展示全部的影片信息      2、根据电影名称查询影片信息 *********");
189         System.out.println("******3、购票                  4、退出系统             *********");
190         System.out.println("*******************************************************");
191         while (true){
192             System.out.println("请输入操作命令:");
193             String command = SYS_SCAN.nextLine();
194             switch (command){
195                 case "1":
196                     //展示全部影片信息
197                     showAllMovies();
198                     break;
199                 case "2":
200                     break;
201                 case "3":
202                     //用户购票
203                     buyMovieTicket();
204                     break;
205                 case "4":
206                     return;
207                 default:
208                     System.out.println("该操作不被支持~");
209             }
210         }
211     }
212 
213     //用户购票
214     private static void buyMovieTicket() {
215         showAllMovies();
216         System.out.println("********用户购票**********");
217         while (true) {
218             System.out.println("请输入你要购买的影院名称:");
219             String shopName = SYS_SCAN.nextLine();
220             //根据店铺名,在MOVIES中查找是否存在改影院
221             Business b = findShopByShopName(shopName);
222             if (b == null){
223                 System.out.println("你所查找的影院不存在");
224                 continueOrNot();
225             }else {
226                 //影院存在,展示改店铺下的所有影片信息
227                 List<Movie> movies = MOVIES.get(b);
228                 if (movies.size() > 0){
229                     System.out.println("店铺名:" + b.getShopName() + ",店铺地址:" + b.getAddress() + ",联系电话:" + b.getPhone());
230                     //遍历movies集合
231                     System.out.println("影片名:" + "\t\t" + "主演:" + "\t\t" + "评分:" + "\t\t" +
232                             "时长:" + "\t\t" + "票价:" + "\t\t" + "放映时间:" );
233                     for (Movie movie : movies) {
234                         System.out.println(movie.getName() + "\t\t" + movie.getActor() + "\t\t" + movie.getScore() + "\t\t" +
235                                 movie.getTime() + "\t\t" + movie.getPrice() + "\t\t" + SDF.format(movie.getStartTime()));
236                     }
237                     //查询影片(从当前movies集合中)
238                     while (true) {
239                         System.out.println("请输入影片名:");
240                         String movieName = SYS_SCAN.nextLine();
241                         Movie movie = findMovieByMovieNameAndBusiness(movies,movieName);
242                         if (movie == null){
243                             System.out.println("影片不存在,请重新确认");
244                             continueOrNot();
245                         }else {
246                             //影片存在,展示改影片的详情
247                             System.out.println("模糊匹配到影片:" + movie.getName());
248                             System.out.println("影片名:" + "\t\t" + "主演:" + "\t\t" + "评分:" + "\t\t" +
249                                     "时长:" + "\t\t" + "票价:" + "\t\t" + "放映时间:" );
250                             System.out.println(movie.getName() + "\t\t" + movie.getActor() + "\t\t" + movie.getScore() + "\t\t" +
251                                     movie.getTime() + "\t\t" + movie.getPrice() + "\t\t" + SDF.format(movie.getStartTime()));
252                             while (true) {
253                                 System.out.println("请输入您要购买的票数:");
254                                 String numberOfTicket = SYS_SCAN.nextLine();
255                                 int number = Integer.valueOf(numberOfTicket);
256                                 double price = movie.getPrice();
257                                 double total = BigDecimal.valueOf(number).multiply(BigDecimal.valueOf(price)).doubleValue();
258                                 System.out.println("总金额为:" + total);
259                                 Customer c = (Customer) loginUser;
260                                 if(total < c.getMoney()){
261                                     //成功买票、计算金额(商家、顾客),更改票数
262                                     b.setMoney(b.getMoney() + total);
263                                     c.setMoney(c.getMoney() - total);
264                                     movie.setNumber(movie.getNumber() - number);
265                                     System.out.println("尊敬的客户:" + c.getRealName() + ",您已经在影院" + b.getShopName() + "购买了" + number + "张" +
266                                             "电影票 -- 《" + movie.getName() + "》,放映时间为:" + SDF.format(movie.getStartTime()) + ",请牢记," + "当前账户余额:" + c.getMoney());
267                                     return;
268                                 }else {
269                                     System.out.println("金额不足");
270                                     continueOrNot();
271                                 }
272                             }
273                         }
274                     }
275                 }else {
276                     System.out.println("当前无片可播~");
277                 }
278             }
279         }
280     }
281 
282     private static Movie findMovieByMovieNameAndBusiness(List<Movie> movies, String movieName) {
283         for (Movie movie : movies) {
284             if (movie.getName().contains(movieName)){
285                 return movie;
286             }
287         }
288         return null;
289     }
290 
291     private static void continueOrNot() {
292         System.out.println("继续否? y/n");
293         String command = SYS_SCAN.nextLine();
294         switch (command){
295             case "y":
296                 break;
297             case "n":
298                 return;
299             default:
300                 System.out.println("操作不被支持");
301         }
302     }
303 
304 
305     private static Business findShopByShopName(String shopName) {
306         Set<Business> businesses = MOVIES.keySet();
307         for (Business business : businesses) {
308             if (business.getShopName().equals(shopName)){
309                 return business;
310             }
311         }
312         return null;
313     }
314 
315 
316     /**
317      * 展示系统全部的影片信息
318      */
319     private static void showAllMovies() {
320         System.out.println("**********展示全部影院及拍片详情页*************");
321         MOVIES.forEach((b, movies) -> {
322                 System.out.println("店铺名:" + b.getShopName() + ",店铺地址:" + b.getAddress() + ",联系电话:" + b.getPhone());
323                 System.out.println("影片名:" + "\t\t" + "主演:" + "\t\t" + "评分:" + "\t\t" +
324                         "时长:" + "\t\t" + "票价:" + "\t\t" + "放映时间:" );
325         for (Movie movie : movies) {
326                 System.out.println("\t\t" + movie.getName() + "\t\t" + movie.getActor() + "\t\t" + movie.getScore() + "\t\t" +
327                         movie.getTime() + "\t\t" + movie.getPrice() + "\t\t" + SDF.format(movie.getStartTime()));
328             }
329         });
330     }
331 
332     //商家操作界面
333     private static void showBusinessMain() {
334         logger.info(loginUser.getRealName() + "商家登录了商家操作界面");
335         while (true){
336             System.out.println("*********商家操作主界面***************");
337             System.out.println("欢迎" + loginUser.getRealName() + (loginUser.getSex() == '男' ? "先生" : "女士") + "进入系统");
338             System.out.println("当前账户余额:----------------> " + loginUser.getMoney());
339             System.out.println("****1、展示影片详情    2、上架电影****");
340             System.out.println("****3、下架电影       4、修改电影*****");
341             System.out.println("**********   5、退出   **************");
342             System.out.println("***********************************");
343             System.out.println("请输入操作命令");
344             String command = SYS_SCAN.nextLine();
345             switch (command){
346                 case "1":
347                     //展示当前登录商家的拍片信息
348                     showBusinessInfo();
349                     break;
350                 case "2":
351                     //上架电影
352                     addMovie();
353                     break;
354                 case "3":
355                     //下架电影
356                     removeMovies();
357                     break;
358                 case "4":
359                     //修改电影
360                     updateMovie();
361                     break;
362                 case "5":
363                     //退出
364                     return;
365                 default:
366                     System.out.println("您的操作不被支持,请重新选择");
367             }
368         }
369     }
370 
371     private static void updateMovie() {
372         System.out.println("********修改电影界面**********");
373         Business b = (Business) loginUser;
374         List<Movie> movies = MOVIES.get(b);
375         System.out.println("请输入您要修改的电影名称:");
376         String movieName = SYS_SCAN.nextLine();
377         Movie movie = findMovieByMovieName(movieName);
378         if (movie == null){
379             System.out.println("影片不存在,请问需要继续修改吗?y/n");
380             String command = SYS_SCAN.nextLine();
381             switch (command){
382                 case "y":
383                     break;
384                 case "n":
385                     return;
386             }
387         }else {
388             //找到电影了哈~
389             System.out.println("模糊检索到电影名为:" + movie.getName());
390             System.out.println("**********商家修改电影页面*************");
391             System.out.println("请输入修改后的电影名:");
392             String name = SYS_SCAN.nextLine();
393             System.out.println("请输入修改后的主演:");
394             String actor = SYS_SCAN.nextLine();
395             System.out.println("请输入修改后的评分:");
396             String str_score = SYS_SCAN.nextLine();
397             System.out.println("请输入修改后的时长:");
398             String time = SYS_SCAN.nextLine();
399             System.out.println("请输入修改后的票价:");
400             String str_price = SYS_SCAN.nextLine();
401             System.out.println("请输入修改后的余票:");
402             String str_number = SYS_SCAN.nextLine();
403             while (true) {
404                 try {
405                     System.out.println("放映时间:(格式:yyyy/MM/dd HH:mm:ss");
406                     String str_starTime = SYS_SCAN.nextLine();
407 //                    Movie update_movie = new Movie(name,actor,Double.valueOf(str_score),Double.valueOf(time),
408 //                            Double.valueOf(str_price),Integer.valueOf(str_number),SDF.parse(str_starTime));
409                     movie.setName(name);
410                     movie.setActor(actor);
411                     movie.setScore(Double.valueOf(str_score));
412                     movie.setTime(Double.valueOf(time));
413                     movie.setPrice(Double.valueOf(str_price));
414                     movie.setNumber(Integer.valueOf(str_number));
415                     movie.setStartTime(SDF.parse(str_starTime));
416                     System.out.println("修改后的影片《" + movie.getName() + "》已上架成功");
417                     showBusinessInfo();
418                     return;
419                 } catch (ParseException e) {
420                     logger.error("解析时间出现异常");
421                     System.out.println("时间格式不正确,请重新输入");
422                     e.printStackTrace();
423                 }
424             }
425         }
426     }
427 
428     private static void removeMovies() {
429         while (true) {
430             System.out.println("**********商家下架电影页面**********");
431             System.out.println("请输入您要下架的电影名称:");
432             Business b = (Business)loginUser;
433             List<Movie> movies = MOVIES.get(b);
434             String movieName = SYS_SCAN.nextLine();
435             Movie movie = findMovieByMovieName(movieName);
436             if (movie == null){
437                 System.out.println("您的系统中不存在改影片,请确认");
438                 while (true){
439                     System.out.println("要下架其它的影片吗,y/n?");
440                     String command = SYS_SCAN.nextLine();
441                     switch (command){
442                         case "y":
443                             break;
444                         case "n":
445                             return;
446                         default:
447                             System.out.println("操作不被支持");
448                   }
449                 }
450             }else {
451                 movies.remove(movie);
452                 System.out.println("影片《" + movie.getName() + "》已被成功下架");
453                 return;
454             }
455         }
456     }
457 
458     private static Movie findMovieByMovieName(String movieName) {
459         Business b = (Business)loginUser;
460         //从商家对象(根据商家对象)查询到改店铺所有的影片信息,将其放置在集合中
461         List<Movie> movies = MOVIES.get(b);
462         for (Movie movie : movies) {
463             if (movie.getName().contains(movieName)){ //模糊匹配,equals:精准匹配
464                 return movie;
465             }
466         }
467         return null;
468     }
469 
470     private static void addMovie() {
471         Business b = (Business)loginUser;
472         List<Movie> movies = MOVIES.get(b);
473 
474         System.out.println("**********商家上架电影页面*************");
475         System.out.println("请输入电影名:");
476         String name = SYS_SCAN.nextLine();
477         System.out.println("主演:");
478         String actor = SYS_SCAN.nextLine();
479         System.out.println("评分:");
480         String str_score = SYS_SCAN.nextLine();
481         System.out.println("时长:");
482         String time = SYS_SCAN.nextLine();
483         System.out.println("票价:");
484         String str_price = SYS_SCAN.nextLine();
485         System.out.println("余票:");
486         String str_number = SYS_SCAN.nextLine();
487         while (true) {
488             try {
489             System.out.println("放映时间:(格式:yyyy/MM/dd HH:mm:ss");
490             String str_starTime = SYS_SCAN.nextLine();
491                 Movie movie = new Movie(name,actor,Double.valueOf(str_score),Double.valueOf(time),
492                         Double.valueOf(str_price),Integer.valueOf(str_number),SDF.parse(str_starTime));
493                 movies.add(movie);
494                 System.out.println("影片" + movie.getName() + "已上架成功");
495                 return;
496             } catch (ParseException e) {
497                 logger.error("解析时间出现异常");
498                 System.out.println("时间格式不正确,请重新输入");
499                 e.printStackTrace();
500             }
501         }
502     }
503 
504     private static void showBusinessInfo() {
505         logger.info(loginUser.getRealName() + "商家正在查看影院详情");
506         System.out.println("*********商家详情页面***********");
507         Business b = (Business)loginUser;
508         //商家名 -- > 改商家的详细信息:地址、店铺名、影片...
509         List<Movie> movies = MOVIES.get(b);
510         if (movies.size() > 0){
511             System.out.println("店铺名:" + b.getShopName() + ",店铺地址:" + b.getAddress() + ",联系电话:" + b.getPhone() + ",金额:" + b.getMoney());
512             //遍历movies集合
513             System.out.println("影片名:" + "\t\t" + "主演:" + "\t\t" + "评分:" + "\t\t" +
514                     "时长:" + "\t\t" + "票价:" + "\t\t" + "放映时间:" );
515             for (Movie movie : movies) {
516                 System.out.println(movie.getName() + "\t\t" + movie.getActor() + "\t\t" + movie.getScore() + "\t\t" +
517                         movie.getTime() + "\t\t" + movie.getPrice() + "\t\t" + SDF.format(movie.getStartTime()));
518             }
519         }else {
520             System.out.println("当前无片可播~");
521         }
522     }
523 
524     private static User getUserByLoginName(String loginName) {
525         for (User user : USERS) {
526             if (user.getLoginName().equals(loginName)){
527                 //判断用户的真实类型(商家、客户)
528                 return user;
529             }
530         }
531         return null;
532     }
533 }

总的来说,项目逻辑结构倒不是多难,只是挺繁琐的,由于功能较为繁多,在此的示例运行代码就不意义列举了哈~

java的电影 java类别影片_User

 

 

java的电影 java类别影片_Business_02

 

java的电影 java类别影片_java的电影_03

 

 

java的电影 java类别影片_User_04

 

 

java的电影 java类别影片_User_05