Java-入门基础综合练习:图书管理系统

版权声明:call me 刘英雄 https://blog.csdn.net/weixin_42526141/article/details/82771402

综合练习:图书管理系统

需求:

图书管理系统,要把图书馆的图书管理、读者管理、图书借阅管理等日常管理工作实行计算机统一管理,以提高工作效率和管理水平。目前我们还没学习数据库,所以将数据存储在数组中;配合流程控制来开发图书管理系统。

流程控制在一个项目开发中至关重要,它决定着项目的执行流程,通过它可完成逻辑控制。流程控制分为三类:顺序执行、条件控制、循环控制。

条件控制:if-else;switch-case

循环控制:for;while;do-while循环

Java 语言中提供的数组是用来存储固定大小的同类型元素,是有序数据的集合,可以用一个统一的数组名和下标来唯一地确定数组中的元素。数组有一维数组和多维数组。

package com.liudm.demo4;

import java.util.Scanner;

public class library {
	public static void main(String[] args) {
		int [] bookNum = new int [10];
		String [] bookName = new String [10];
		int [] bookState = new int [10];
		String isCont;
		
		//初始化原始信息
		bookNum[0] = 1001;
		bookName[0] = "第一本书";
		bookState[0] = 1;
		
		bookNum[1] = 1002;
		bookName[1] = "第二本书";
		bookState[1] = 1;
		
		bookNum[2] = 1003;
		bookName[2] = "第三本书";
		bookState[2] = 1;
		
		do{
			System.out.println("欢迎使用图书馆里系统\n"
					+ "——————————————————\n"
					+ "1、 新增图书\n"
					+ "2、 查看图书\n"
					+ "3、 删除图书\n"
					+ "4、 借出图书\n"
					+ "5、 归还图书\n"
					+ "6、 退出图书\n"
					+ "——————————————————\n");
			System.out.println("请输入您需要的操作前的序号:");
			Scanner op = new Scanner(System.in);
			int operate = op.nextInt();
			
			switch (operate) {
			case 1:  //新增图书
				System.out.println("————新增图书————\n"
						+ "请输入新图书编号:");
				Scanner num1 = new Scanner(System.in);
				int booknum = num1.nextInt();
				System.out.println("请输入书名:");
				Scanner name = new Scanner(System.in);
				String bookname = name.next();
				for (int i = 0; i < bookNum.length; i++) {
					if (bookNum[i] == 0) {
						bookNum[i] = booknum;
						bookName[i] = bookname;
						bookState[i] = 1;
					}
				}
				System.out.println("您新增的图书是:" + booknum + "\t" + bookname);
				break;
			case 2:  //查看图书
				System.out.println("————查看图书————\n"
						+ "查找图书?[a] / 查看书库?[b]");
				Scanner op2 = new Scanner(System.in);
				String oper1 = op2.next();
				switch (oper1) {
				case "a":
					System.out.println("请输入要查看的图书的编号:");
					Scanner num2 = new Scanner(System.in);
					int searchNum = num2.nextInt();
					for (int i = 0; i < bookNum.length; i++) {
						if (bookNum[i] == searchNum) {
							System.out.println("您查找的图书是:" + bookNum[i] + "\t" + bookName[i]);
						}
					}
					break;
				case "b":
					System.out.println("图书馆里的图书有:\n"
							+ "序号" + "\t" + "图书编号" + "\t" + "书名");
					for (int i = 0; i < bookNum.length && 0 != bookNum[i]; i++) {
						System.out.println((i+1) + ". " + "\t" + bookNum[i] + "\t" + bookName[i]);
					}
					break;
				default:
					System.out.println("输入错误!");
					break;
				}
				break;
			case 3:  //删除图书
				System.out.println("————删除图书————\n"
						+ "请输入要删除的图书的编号:");
				Scanner num3 = new Scanner(System.in);
				int delNum = num3.nextInt();
				for (int i = 0; i < bookNum.length; i++) {
					if (bookNum[i] == delNum) {
						System.out.println("您要删除的图书是:" + bookNum[i] + "\t" + bookName[i]);
						System.out.println("删除中……\n"
								+ "删除成功!");
						bookNum[i] = 0;
						bookName[i] = null;
						bookState[i] = 0;
					}
				}
				break;
			case 4:  //借出图书
				System.out.println("————借出图书————\n"
						+ "请输入要借的图书的编号:");
				Scanner num4 = new Scanner(System.in);
				int borrowNum = num4.nextInt();
				for (int i = 0; i < bookNum.length; i++) {
					if (bookNum[i] == borrowNum) {
						if (bookState[i] == 1) {
							System.out.println("您要借的图书是:" + bookNum[i] + "\t" + bookName[i]);
							bookState[i] = 0;
						}
						else if (bookState[i] == 0) {
							System.out.println("对不起,这本图书已经被借出!");
						}
						else {
							System.out.println("ERROR!图书状态出错!");
						}
					}
				}
				break;
			case 5:  //归还图书
				System.out.println("————借出图书————\n"
						+ "请输入要借的图书的编号:");
				Scanner num5 = new Scanner(System.in);
				int returnNum = num5.nextInt();
				for (int i = 0; i < bookNum.length; i++) {
					if (bookNum[i] == returnNum) {
						System.out.println("您要归还的图书是:" + bookNum[i] + "\t" + bookName[i]);
						bookState[i] = 1;
						System.out.println("归还成功!");
					}
				}
				break;
			case 6:  //退出
				
				break;
			default:
				System.out.println("WARNING!非法操作!");
				break;
			}
				
			System.out.println("是否继续? [Y/N]");
			Scanner cont = new Scanner(System.in);
			isCont = cont.next();
		}while("Y".equals(isCont));
	}
}

参考完整代码:

package my.bookmanager;  
import java.util.Scanner;  
public class BookManager {  
    public static void main(String[] a) {  
        /* 
         * 创建数组存储图书信息 
         */  
        String[] bookname = new String[7]; // 存储图书名称数组  
        int[] bookstate = new int[7]; // 存储图书借出状态:0已借出/1可借  
        int[] bookdate = new int[7]; // 存储图书借出日期  
        int[] bookcount = new int[7]; // 借出次数  
        int choose = 1; // 判断用户是否选择退出或是非法操作,1为初始值2为退出或者非法操作  
        Scanner input = new Scanner(System.in);  
        /* 
         * 初始三个图书 
         */  
        bookname[0] = "平凡的世界";  
        bookstate[0] = 0;  
        bookdate[0] = 1;  
        bookcount[0] = 12;  
  
        bookname[1] = "骆驼祥子";  
        bookstate[1] = 1;  
        bookcount[1] = 10;  
  
        bookname[2] = "朝花夕拾";  
        bookstate[2] = 1;  
        bookcount[2] = 20;  
  
        do {  
            /* 
             * 开始菜单 
             */  
            System.out.println("欢 迎 使 用 迷 你 图书 管 理 器");  
            System.out.println("-------------------------------------");  
            System.out.println("1. 新 增 图书");  
            System.out.println("2. 查 看 图书");  
            System.out.println("3. 删 除 图书");  
            System.out.println("4. 借 出 图书");  
            System.out.println("5. 归 还 图书");  
            System.out.println("6. 退 出图书");  
            System.out.print("--------------------------------------\n");  
            System.out.print("请选择: ");  
            int choice = input.nextInt();  
            /* 
             * switch循环提供菜单选择操作 
             */  
            switch (choice) {  
            case 1:  
                /* 
                 * 新增图书 
                 */  
                System.out.println("---> 新增图书\n");  
                System.out.print("请输入图书名称: ");  
                String name = input.next();  
                if (bookname[5] != null) {  
                    System.out.println("新增《" + name + "》失败!货架已满!");  
                    break;  
                }  
                for (int i = 0; i < bookname.length; i++) { // 循环遍历bookname数组  
                    if (bookname[i] == null) { // 查询最后一个空位置插入  
                        bookname[i] = name;  
                        bookstate[i] = 1;// 置新增的图书可借状态  
                        bookcount[i] = 0;// 置借出次数为0  
                        System.out.println("新增《" + name + "》成功!");  
                        break;  
                    }  
                }  
                System.out.println("**************************");  
                break; // 跳出switch循环  
            case 2:  
                /* 
                 * 查看图书 
                 */  
                System.out.println("---> 查看图书\n");  
                System.out.println("序号\t状 态\t名称\t\t借出日期\t借出次数");  
                for (int i = 0; i < bookname.length; i++) {  
                    if (bookname[i] == null) {  
                        break;  
                    } else if (bookstate[i] == 0) { // bookstate[i]为0则说明该图书已借出  
                        System.out.println((i + 1) + "\t已借出\t" + "<<"  
                                + bookname[i] + ">>\t" + bookdate[i] + "日\t"  
                                + bookcount[i] + "次");  
                    } else if (bookstate[i] == 1) { // bookstate[i]为1则说明该图书可借  
                        System.out.println((i + 1) + "\t可 借\t" + "<<"  
                                + bookname[i] + ">>" + "\t\t" + bookcount[i] + "次");  
                    }  
                }  
                System.out.println("**************************");  
                break;  
            case 3:  
                /* 
                 * 删除图书 
                 */  
                boolean flag = false;// 标识删除成功与否  
                System.out.println("---> 删除图书\n");  
                System.out.print("请输入图书名称: ");  
                name = input.next();  
                // 遍历数组,查找匹配信息  
                for (int i = 0; i < bookname.length; i++) {  
                    // 查找到,每个元素前移一位  
                    if (bookname[i] != null && bookname[i].equalsIgnoreCase(name)  
                            && bookstate[i] == 1) { // equalsIgnoreCase方法判断字符串是否相同且忽略大小写  
                        int j = i;  
                        while (bookname[j + 1] != null) { // 遍历需删除的元素之后的非空元素  
                            bookname[j] = bookname[j + 1];  
                            bookstate[j] = bookstate[j + 1];  
                            bookdate[j] = bookdate[j + 1];  
                            bookcount[j] = bookcount[j + 1];  
                            j++;  
                        }  
                        // 最后一个不为空的元素置空  
                        bookname[j] = null;  
                        bookdate[j] = 0;  
                        System.out.println("删除《" + name + "》成功!");  
                        flag = true;// 表示删除成功  
                        break;  
                    } else if (bookname[i] != null  
                            && bookname[i].equalsIgnoreCase(name) && bookstate[i] == 0) {  
                        System.out.println("《" + name + "》为借出状态,不能删除!");  
                        flag = true;  
                        break;  
                    }  
                }  
                if (!flag) { // 若flag不为true则说明用户输入的名称在bookname数组中没有匹配成功  
                    System.out.println("没有找到匹配信息!");  
                }  
                System.out.println("**************************");  
                break;  
            case 4:  
                /* 
                 * 借出图书 
                 */  
                System.out.println("---> 借出图书\n");  
                System.out.print("请输入图书名称: ");  
                String want = input.next(); // 要借出的图书名称  
                for (int i = 0; i < bookname.length; i++) {  
                    if (bookname[i] == null) { // 无匹配  
                        System.out.println("没有找到匹配信息!");  
                        break;  
                    } else if (bookname[i].equals(want) && bookstate[i] == 1) { // 找到匹配可借  
                        bookstate[i] = 0; // 将此图书置于借出状态  
                        System.out.print("请输入借出日期:");  
                        bookdate[i] = input.nextInt();  
                        while (bookdate[i] < 1 || bookdate[i] > 31) { // 一个月只有31天则需要数据校验  
                            System.out.print("必须输入大于等于1且小于等于31的数字,请重新输入:");  
                            bookdate[i] = input.nextInt();  
                        }  
                        System.out.println("借出《" + want + "》成功!");  
                        bookcount[i]++;  
                        break;  
                    } else if (bookname[i].equals(want) && bookstate[i] == 0) { // 找到匹配已被借出  
                        System.out.println("《" + want + "》已被借出!");  
                        break;  
                    }  
                }  
                System.out.println("**************************");  
                break;  
            case 5:  
                /* 
                 * 归还图书并计算租金 
                 */  
                System.out.println("---> 归还图书\n");  
                int charge = 0;// 租金  
                System.out.print("请输入图书名称: ");  
                want = input.next();  
                for (int i = 0; i < bookname.length; i++) {  
                    if (bookname[i] == null) { // 无匹配  
                        System.out.println("没有找到匹配信息!");  
                        break;  
                    } else if (bookname[i].equals(want) && bookstate[i] == 0) { // 找到匹配  
                        bookstate[i] = 1;  
                        System.out.print("请输入归还日期:");  
  
                        int rebookdate = input.nextInt();  
                        while (rebookdate < bookdate[i] || rebookdate > 31) { // 归还日期的数据校验  
                            if (rebookdate < bookdate[i]) {  
                                System.out.print("归还日期不能小于借出日期,请重新输入:");  
                                rebookdate = input.nextInt();  
                            } else {  
                                System.out.print("一个月只有31天,请重新输入:");  
                                rebookdate = input.nextInt();  
                            }  
                        }  
                        charge = rebookdate - bookdate[i];  
                        System.out.println("\n归还《" + want + "》成功!");  
                        System.out.println("借出日期为:" + bookdate[i] + "日");  
                        System.out.println("归还日期为:" + rebookdate + "日");  
                        System.out.println("应付租金(元):" + charge);  
                        break;  
                    } else if (bookname[i].equals(want) && bookstate[i] == 1) { // 找到匹配但没有借出  
                        System.out.println("该图书没有被借出!无法进行归还操作。");  
                        break;  
                    }  
                }  
                System.out.println("**************************");  
                break;  
            case 6:  
                choose = 2; // 用户选择退出  
                break;  
            default:  
                System.out.println("非法操作");  
                choose = 2; // 用户没有输入1到6的整形数据则属于非法操作直接退出程序  
                break;  
            }  
            if (choose != 2) {// 如果为2则是用户选择了退出或者是非法操作  
                System.out.println("输入0返回 ");  
                int back = input.nextInt();  
                if (back != 0) {// 如果用户没选择0则为非法操作  
                    System.out.println("非法操作");  
                    choose = 2;  
                }  
            }  
        } while (choose == 1); // 判断用户择退出还是返回  
        System.out.print("谢谢使用");  
    }  
} 

猜你喜欢

转载自blog.csdn.net/weixin_42526141/article/details/82771402