迷你图书管理器1.0 - 变量+数组

迷你图书管理器

author:luckyboy!

version:10

知识储备:变量、数据类型、选择结构、循环结构、数组

系统概述:为某图书馆开发一个迷你图书管理系统,实现图书的管理。

功能:

  • 新增图书
  • 查看图书
  • 删除图书
  • 借出图书
  • 归还图书
  • 退出图书系统

阶段划分

  • 第一阶段:创建数组保存图书信息,并初始化
  • 第二阶段:完成系统整体框架和退出功能
  • 第三阶段:完成新增图书功能
  • 第四阶段:完成查看图书功能
  • 第五阶段:完成删除图书功能
  • 第六阶段:完成借出图书功能
  • 第七阶段:完成归还图书功能

第一阶段:创建数组保存图书信息,并初始化

public class MyBookMgr {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		//创建数组保存图书信息, 图书相关信息,最多只能存储6个图书信息
		String[] name = new String[6]; // 图书名称
		int[] state = new int[6]; // 借阅状态,0:可借阅 ;1:已借出
		int[] date = new int[6]; // 借出日期
		int[] count = new int[6]; // 借出次数

		//初始化图书信息
		// 初始化第一本本图书
		name[0] = "罗马假日";
		state[0] = 1;
		date[0] = 1;
		count[0] = 15;

		// 初始化第二本图书
		name[1] = "白雪公主";
		state[1] = 0;
		count[1] = 12;

		// 初始化第三本图书
		name[2] = "葫芦兄弟";
		state[2] = 0;
		count[2] = 30;
    }
}

第二阶段:完成系统整体框架和退出功能

public class MyBookMgr {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		//创建数组保存图书信息, 图书相关信息,最多只能存储6个图书信息
		String[] name = new String[6]; // 图书名称
		int[] state = new int[6]; // 借阅状态,0:可借阅 ;1:已借出
		int[] date = new int[6]; // 借出日期
		int[] count = new int[6]; // 借出次数

		//初始化图书信息
		// 初始化第一本本图书
		name[0] = "罗马假日";
		state[0] = 1;
		date[0] = 1;
		count[0] = 15;

		// 初始化第二本图书
		name[1] = "白雪公主";
		state[1] = 0;
		count[1] = 12;

		// 初始化第三本图书
		name[2] = "葫芦兄弟";
		state[2] = 0;
		count[2] = 30;
		
		//完成整体框架
		int num = 0;
		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.println("-------------------------");

			System.out.println("请选择(序号:1-6):");
			int choose = in.nextInt();
			
			//如果用户选择的是1-6以外的数组,则没有此功能,需要重新输入
			while(choose < 1 || choose > 6){
				System.out.println("对不起,没有此功能,请重新选择(序号:1-6):");
			}
			
			switch(choose){
			case 1:
				System.out.println("1.新增图书");
				break;
			case 2:
				System.out.println("2.查看图书");
				break;
			case 3:
				System.out.println("3.删除图书");
				break;
			case 4:
				System.out.println("4.借出图书");
				break;
			case 5:
				System.out.println("5.归还图书");
				break;
			}
			
			//如果choose等于6,退出图书系统,结束程序运行
			if(choose == 6){
				break;
			}
			
			System.out.println("输入0返回:");
			num = in.nextInt();
			//如果输入0以外的数字,则重新输入,只有退出图书功能可以结束程序
			while(num != 0){
				System.out.println("对不起,输入错误,输入0返回:");
				num = in.nextInt();
			}
		}while(num == 0);
		System.out.println("程序运行结束,感谢使用此程序!");
	}

}

第三阶段:完成新增图书功能

思路:
        ->如果未存储满6个图书惜,向个数组中存储相应的图书信息
        ->如果已经存储了6个图书,则提示图书已满,不能添加图书信息

			//新增图书
			case 1:
				/*
				 * 如果未存储满6个图书惜,向个数组中存储相应的图书信息
				 * 如果已经存储了6个图书,则提示图书已满,不能添加图书信息
				 */
				System.out.println("-> 新增图书");
				
				//设置标志位,如果可以添加图书信息为true,否则为false
				boolean newFlag = false;
				System.out.println("请输入您要添加的图书名称: ");
				String bookName = in.next();
				
				for (int i = 0; i < name.length; i++) {
					//如果name数组为空,则表示各数组中有剩余空间存储图书信息
					if(name[i] == null){
						name[i] = bookName;
						System.out.println("新增《"+bookName+"》成功!");
						newFlag = true;
						break;
					}
				}
				
				//如果newFlag等于false,书名图书已满,不能添加图书信息
				if(!newFlag){
					System.out.println("图书已满,不能添加图书信息!");
				}
				break;

第四阶段:完成查看图书功能

思路:循环输出各数组中的图书信息,循环条件name[i]!=null

			//查看图书
			case 2:
				//循环输出各数组中的图书信息,循环条件name[i]!=null
				System.out.println("-> 查看图书");
				System.out.println("序号\t图书\t    状态\t日期\t次数");
				//输出各数组中不为空的图书信息
				for (int i = 0; i < name.length; i++) {
					if(name[i] != null){
						String stat = state[i] == 0 ? "可借阅" : "已借出";
						String dates = date[i] == 0 ? "" : date[i] + "日";
						String counts = count[i] + "次";
						System.out.println((i+1) + "\t" + name[i] + "\t  " + stat + "\t" 
					+ dates  + "\t" + counts);
					}
				}
				break;

第五阶段:完成删除图书功能

 情况一:按照用户输入的图书名称找到指定的图书。图书状态为可借阅,可以删除图书信息
情况二:按照用户输入的图书名称找到指定的图书。图书状态为已借出,不能删除图书信息
情况三:按照用户输入的图书名称没有找到指定的图书。此图书不存在

思路
         ->查找到要删除的图书
         ->把图书后面的图书一次向前移动以为,实现删除
         ->各数组最后一位元素清空

			//删除图书
			case 3:
				/*
				 * 情况一:按照用户输入的图书名称找到指定的图书。图书状态为可借阅,可以删除图书信息
				 * 情况二:按照用户输入的图书名称找到指定的图书。图书状态为已借出,不能删除图书信息
				 * 情况三:按照用户输入的图书名称没有找到指定的图书。此图书不存在
				 * 
				 * 思路
				 * ->查找到要删除的图书
				 * ->把图书后面的图书一次向前移动以为,实现删除
				 * ->各数组最后一位元素清空
				 * 
				 */
				System.out.println("-> 删除图书");
				System.out.println("请输入您要删除的图书:");
				String delBook = in.next();
				//设置变量用来保存删除图书的元素下标
				int index = -1;
				//设置标志位用来区分图书是否存满
				boolean delFlag = false;
				for (int i = 0; i < name.length; i++) {
					//图书名相同,状态为可借阅,可以删除图书
					if(name[i].equals(delBook) && state[i] == 0){
						index = i;
						delFlag = true;
						System.out.println("删除《"+name[index]+"》成功!");
						//删除图书
						if(index != -1){
							for (int j = index+1; j < count.length; j++) {
								name[j-1] = name[j];
								state[j-1] = state[j];
								date[j-1] = date[j];
								count[j-1] = count[j];
								break;
							}
							//各数组最后一位元素清空
							name[name.length-1] = null;
							state[state.length-1] = 0;
							date[date.length-1] = 0;
							count[count.length-1] = 0;
						}
						break;
					}
					//图书名相同,状态为已借出,不能删除图书
					else if(name[i].equals(delBook) && state[i] == i){
						System.out.println("此图书已借出,不能删除!");
						delFlag = true;
					}
				}
				//如果delFlag标志位等于false,表示此图书不存在
				if(!delFlag){
					System.out.println("对不起,此图书不存在!");
				}
				break;

第六阶段:完成借出图书功能

情况一:图书状态可借阅,按照用户输入的图书名称借出指定图书,并判断输入的借出日期是否                  在1-31之间,否则重新输入日期。
情况二:图书状态已借出,给出相应提示
情况三:用户输入的图书不存在,给出相应提示。

思路
        ->用户输入需要借出的图书
        ->判断图书是否存在
        ->图书存在,判断图书是否借出
        ->图书存在,可借阅,判断用户输入的借出日期
        ->图书存在,可借阅,借出日期,修改图书的状态和借出次数加1

			//借出图书
			case 4:
				/*
				 * 情况一:图书状态可借阅,按照用户输入的图书名称借出指定图书,
				 * 		     并判断输入的借出日期是否在1-31之间,否则重新输入日期。
				 * 情况二:图书状态已借出,给出相应提示
				 * 情况三:用户输入的图书不存在,给出相应提示。
				 * 
				 * 思路
				 * ->用户输入需要借出的图书
				 * ->判断图书是否存在
				 * ->图书存在,判断图书是否借出
				 * ->图书存在,可借阅,判断用户输入的借出日期
				 * ->图书存在,可借阅,借出日期,修改图书的状态和借出次数加1
				 *
				 */
				System.out.println("-> 借出图书");
				//设置标志位,判断图示是否存在
				boolean lendBook = false;
				//用户输入需要借出的图书
				System.out.println("请输入您要借出的图书:");
				String book = in.next();
				//判断图书是否存在
				for(int i = 0; i < name.length; i++) {
					//判断图书存在,图书状态可借阅
					if(book.equals(name[i]) && state[i] == 0){
						//判断用户输入的借出日期
						System.out.println("请输入借出日期(1-31):");
						date[i] = in.nextInt();
						while(date[i] < 1 || date[i] > 31){
							System.out.println("借出日期需要大于等于1且小于等于31,请重新输入:");
							date[i] = in.nextInt();
						}
						//修改图书的状态和借出次数加1
						state[i] = 1;
						count[i]++;
						lendBook = true;
						System.out.println(name[i] + "借出成功!");
					}
					//判断图书存在,图书状态已借出
					else if(book.equals(name[i]) && state[i] == 1){
						System.out.println("对不起,此图书已借出,不能借阅!");
						lendBook = true;
					}
				}
				//如果标志位lendBook等于false,则表示图书不存在
				if(!lendBook){
					System.out.println("对不起,此图书不存在!");
				}
				break;

第七阶段:完成归还图书功能

情况一:归还已借出的图书并计算租金。如果用户输入的归还日期大于31或者小于借出日期,提示用户重新输入归还日期。
情况二:归还的图书未借出,给出相应提示
情况三:归还的图书不存在,给出相应提示

思路:
->用户输入需要归还的图书
->判断图书是否存在
->判断图书是否借出
->判断用户输入的归还日期
->修改归还图书的状态,并计算出租金,租金 = 借出日期 - 归还日期

			//归还图书
			case 5:
				/*
				 * 情况一:归还已借出的图书并计算租金。
				 * 		     如果用户输入的归还日期大于31或者小于借出日期,提示用户重新输入归还日期。
				 * 情况二:归还的图书未借出,给出相应提示
				 * 情况三:归还的图书不存在,给出相应提示
				 * 
				 * 思路:
				 * ->用户输入需要归还的图书
				 * ->判断图书是否存在
				 * ->判断图书是否借出
				 * ->判断用户输入的归还日期
				 * ->修改归还图书的状态,并计算出租金,租金 = 借出日期 - 归还日期
				 */
				System.out.println("-> 归还图书");
				//设置标志位,判断图示是否存在
				boolean backFlag = false;
				//用户输入需要归还的图书
				System.out.println("请输入需要归还的图书:");
				String giveBack = in.next();
				for (int i = 0; i < name.length; i++) {
					//判断图书存在,图书已借出
					if(giveBack.equals(name[i]) && state[i] == 1){
						System.out.println("请输入归还日期(大于借出日期并且小于31):");
						int time = in.nextInt();
						while(time < date[i] || time > 31){
							if(time < date[i]){
								System.out.println("归还日期要大于借出日期,请重新输入:");
							}else{
								System.out.println("一个月最多31天,请重新输入:");
							}
							time = in.nextInt();
						}
						//修改归还图书的状态和日期,并计算出租金,租金 = 归还日期 - 借出日期
						state[i] = 0;
						date[i] = 0;
						int price = time - date[i];
						System.out.println(name[i]+"归还成功!");
						System.out.println("应付租金:"+price);
						backFlag = true;
					}//判断图书存在,图书可借阅
					else if(giveBack.equals(name[i]) && state[i] == 0){
						System.out.println("对不起,此图书未借出,不能归还!");
						backFlag = true;
					}
					
				}
				//如果标志位backFlag还等于false,则表示图书不存在
				if(!backFlag){
					System.out.println("对不起。此图书不存在!");
				}
				break;

完整代码如下:MyBookMgr

import java.util.Scanner;

public class MyBookMgr {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		//创建数组保存图书信息, 图书相关信息,最多只能存储6个图书信息
		String[] name = new String[6]; // 图书名称
		int[] state = new int[6]; // 借阅状态,0:可借阅 ;1:已借出
		int[] date = new int[6]; // 借出日期
		int[] count = new int[6]; // 借出次数

		//初始化图书信息
		// 初始化第一本本图书
		name[0] = "罗马假日";
		state[0] = 1;
		date[0] = 1;
		count[0] = 15;

		// 初始化第二本图书
		name[1] = "白雪公主";
		state[1] = 0;
		count[1] = 12;

		// 初始化第三本图书
		name[2] = "葫芦兄弟";
		state[2] = 0;
		count[2] = 30;
		
		//完成整体框架
		int num = 0;
		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.println("-------------------------");

			System.out.println("请选择(序号:1-6):");
			int choose = in.nextInt();
			
			//如果用户选择的是1-6以外的数组,则没有此功能,需要重新输入
			while(choose < 1 || choose > 6){
				System.out.println("对不起,没有此功能,请重新选择(序号:1-6):");
			}
			
			switch(choose){
			//新增图书
			case 1:
				/*
				 * 如果未存储满6个图书惜,向个数组中存储相应的图书信息
				 * 如果已经存储了6个图书,则提示图书已满,不能添加图书信息
				 */
				System.out.println("-> 新增图书");
				
				//设置标志位,如果可以添加图书信息为true,否则为false
				boolean newFlag = false;
				System.out.println("请输入您要添加的图书名称: ");
				String bookName = in.next();
				
				for (int i = 0; i < name.length; i++) {
					//如果name数组为空,则表示各数组中有剩余空间存储图书信息
					if(name[i] == null){
						name[i] = bookName;
						System.out.println("新增《"+bookName+"》成功!");
						newFlag = true;
						break;
					}
				}
				
				//如果newFlag等于false,书名图书已满,不能添加图书信息
				if(!newFlag){
					System.out.println("图书已满,不能添加图书信息!");
				}
				break;
			//查看图书
			case 2:
				//循环输出各数组中的图书信息,循环条件name[i]!=null
				System.out.println("-> 查看图书");
				System.out.println("序号\t图书\t    状态\t日期\t次数");
				//输出各数组中不为空的图书信息
				for (int i = 0; i < name.length; i++) {
					if(name[i] != null){
						String stat = state[i] == 0 ? "可借阅" : "已借出";
						String dates = date[i] == 0 ? "" : date[i] + "日";
						String counts = count[i] + "次";
						System.out.println((i+1) + "\t" + name[i] + "\t  " + stat + "\t" 
					+ dates  + "\t" + counts);
					}
				}
				break;
			//删除图书
			case 3:
				/*
				 * 情况一:按照用户输入的图书名称找到指定的图书。图书状态为可借阅,可以删除图书信息
				 * 情况二:按照用户输入的图书名称找到指定的图书。图书状态为已借出,不能删除图书信息
				 * 情况三:按照用户输入的图书名称没有找到指定的图书。此图书不存在
				 * 
				 * 思路
				 * ->查找到要删除的图书
				 * ->把图书后面的图书一次向前移动以为,实现删除
				 * ->各数组最后一位元素清空
				 * 
				 */
				System.out.println("-> 删除图书");
				System.out.println("请输入您要删除的图书:");
				String delBook = in.next();
				//设置变量用来保存删除图书的元素下标
				int index = -1;
				//设置标志位用来区分图书是否存满
				boolean delFlag = false;
				for (int i = 0; i < name.length; i++) {
					//图书名相同,状态为可借阅,可以删除图书
					if(name[i].equals(delBook) && state[i] == 0){
						index = i;
						delFlag = true;
						System.out.println("删除《"+name[index]+"》成功!");
						//删除图书
						if(index != -1){
							for (int j = index+1; j < count.length; j++) {
								name[j-1] = name[j];
								state[j-1] = state[j];
								date[j-1] = date[j];
								count[j-1] = count[j];
								break;
							}
							//各数组最后一位元素清空
							name[name.length-1] = null;
							state[state.length-1] = 0;
							date[date.length-1] = 0;
							count[count.length-1] = 0;
						}
						break;
					}
					//图书名相同,状态为已借出,不能删除图书
					else if(name[i].equals(delBook) && state[i] == i){
						System.out.println("此图书已借出,不能删除!");
						delFlag = true;
					}
				}
				//如果delFlag标志位等于false,表示此图书不存在
				if(!delFlag){
					System.out.println("对不起,此图书不存在!");
				}
				break;
			//借出图书
			case 4:
				/*
				 * 情况一:图书状态可借阅,按照用户输入的图书名称借出指定图书,
				 * 		     并判断输入的借出日期是否在1-31之间,否则重新输入日期。
				 * 情况二:图书状态已借出,给出相应提示
				 * 情况三:用户输入的图书不存在,给出相应提示。
				 * 
				 * 思路
				 * ->用户输入需要借出的图书
				 * ->判断图书是否存在
				 * ->图书存在,判断图书是否借出
				 * ->图书存在,可借阅,判断用户输入的借出日期
				 * ->图书存在,可借阅,借出日期,修改图书的状态和借出次数加1
				 *
				 */
				System.out.println("-> 借出图书");
				//设置标志位,判断图示是否存在
				boolean lendBook = false;
				//用户输入需要借出的图书
				System.out.println("请输入您要借出的图书:");
				String book = in.next();
				//判断图书是否存在
				for(int i = 0; i < name.length; i++) {
					//判断图书存在,图书状态可借阅
					if(book.equals(name[i]) && state[i] == 0){
						//判断用户输入的借出日期
						System.out.println("请输入借出日期(1-31):");
						date[i] = in.nextInt();
						while(date[i] < 1 || date[i] > 31){
							System.out.println("借出日期需要大于等于1且小于等于31,请重新输入:");
							date[i] = in.nextInt();
						}
						//修改图书的状态和借出次数加1
						state[i] = 1;
						count[i]++;
						lendBook = true;
						System.out.println(name[i] + "借出成功!");
					}
					//判断图书存在,图书状态已借出
					else if(book.equals(name[i]) && state[i] == 1){
						System.out.println("对不起,此图书已借出,不能借阅!");
						lendBook = true;
					}
				}
				//如果标志位lendBook等于false,则表示图书不存在
				if(!lendBook){
					System.out.println("对不起,此图书不存在!");
				}
				break;
			//归还图书
			case 5:
				/*
				 * 情况一:归还已借出的图书并计算租金。
				 * 		     如果用户输入的归还日期大于31或者小于借出日期,提示用户重新输入归还日期。
				 * 情况二:归还的图书未借出,给出相应提示
				 * 情况三:归还的图书不存在,给出相应提示
				 * 
				 * 思路:
				 * ->用户输入需要归还的图书
				 * ->判断图书是否存在
				 * ->判断图书是否借出
				 * ->判断用户输入的归还日期
				 * ->修改归还图书的状态,并计算出租金,租金 = 借出日期 - 归还日期
				 */
				System.out.println("-> 归还图书");
				//设置标志位,判断图示是否存在
				boolean backFlag = false;
				//用户输入需要归还的图书
				System.out.println("请输入需要归还的图书:");
				String giveBack = in.next();
				for (int i = 0; i < name.length; i++) {
					//判断图书存在,图书已借出
					if(giveBack.equals(name[i]) && state[i] == 1){
						System.out.println("请输入归还日期(大于借出日期并且小于31):");
						int time = in.nextInt();
						while(time < date[i] || time > 31){
							if(time < date[i]){
								System.out.println("归还日期要大于借出日期,请重新输入:");
							}else{
								System.out.println("一个月最多31天,请重新输入:");
							}
							time = in.nextInt();
						}
						//修改归还图书的状态和日期,并计算出租金,租金 = 归还日期 - 借出日期
						state[i] = 0;
						date[i] = 0;
						int price = time - date[i];
						System.out.println(name[i]+"归还成功!");
						System.out.println("应付租金:"+price);
						backFlag = true;
					}//判断图书存在,图书可借阅
					else if(giveBack.equals(name[i]) && state[i] == 0){
						System.out.println("对不起,此图书未借出,不能归还!");
						backFlag = true;
					}
					
				}
				//如果标志位backFlag还等于false,则表示图书不存在
				if(!backFlag){
					System.out.println("对不起。此图书不存在!");
				}
				break;
			}
			
			//如果choose等于6,退出图书系统,结束程序运行
			if(choose == 6){
				break;
			}
			
			System.out.println("输入0返回:");
			num = in.nextInt();
			//如果输入0以外的数字,则重新输入,只有退出图书功能可以结束程序
			while(num != 0){
				System.out.println("对不起,输入错误,输入0返回:");
				num = in.nextInt();
			}
		}while(num == 0);
		System.out.println("程序运行结束,感谢使用此程序!");
	}

}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值