使用面向对象完成 查找学生.png 和 修改学生.png 的效果

本文介绍了一个使用Java实现的简单信息管理系统,该系统能够添加、显示和查找客户信息,并支持添加学生信息及更新学生姓名的功能。

import java.util.Scanner;

public class SearchAndUpdate {
	// 客户对象
	static Customer[] customers = new Customer[30];
	// 学生对象
	static Student[] students = new Student[30];

	/**
	 * 添加顾客姓名
	 * 
	 * @param name 传进来的客户
	 */
	public void addCustomer(Customer customer) {
		for (int i = 0; i < customers.length; i++) {
			if (customers[i] == null) {
				customers[i] = customer;
				// System.out.print(customers[i].getCustomerName());
				break;
			}
		}

	}

	/**
	 * 显示客户姓名列表
	 */
	public void showCustomer() {
		System.out.println("****************************");
		System.out.println("\t客户姓名列表:");
		System.out.println("****************************");
		for (Customer customer : customers) {
			if (customer != null) {
				System.out.print(customer.getCustomerName() + "\t");
			}
		}
	}

	/**
	 * 查找客户姓名
	 * 
	 * @param findName 传进来的客户姓名
	 * @return true 找到了, fasle 查无此人
	 */
	public boolean findCustomer(String findName) {
		for (Customer i : customers) {
			if (i != null && i.getCustomerName().equals(findName)) {
				System.out.println("*********查找结果*******");
				return true;
			}
		}
		System.out.println("*********查找结果*******");
		return false;
	}

	/**
	 * 添加学生姓名
	 * 
	 * @param student 传进来的学生对象
	 */
	public void addStudent(Student student) {
		for (int i = 0; i < students.length; i++) {
			if (students[i] == null) {
				students[i] = student;
				break;
			}
		}

	}

	/**
	 * 显示学生列表
	 */
	public void showStudent() {
		System.out.println("本班学生列表:");
		for (Student student : students) {
			if (student != null) {
				System.out.print(student.getStudentName() + "\t");
			}
		}
	}
	
	/**
	 * 找到并修改学生姓名
	 * @param updateStuName 需要修改的学生姓名
	 * @param newStuName 修改后的学生姓名
	 * @return true 找到并修改成功,false 未找到
	 */
	public boolean updateStuName(String updateStuName,String newStuName){  
        boolean find = false;  
        for(int i = 0;i < students.length; i++){  
            if(students[i].getStudentName().equals(updateStuName)){  
            	students[i].setStudentName(newStuName);  
                find = true;  
                break;  
            }  
        }  
        return find;  
    } 
	
	public static void main(String[] args) {
		SearchAndUpdate sAndUpdate = new SearchAndUpdate();

		Scanner scanner = new Scanner(System.in);
		System.out.println("请选择操作:1.客户查找\t\t2.学生信息修改");
		int key = scanner.nextInt();
		// 是否继续输入
		String isContinue = "";

		switch (key) {
		case 1:
			do {
				Customer customer = new Customer();
				System.out.print("请输入客户的姓名:");
				String customerName = scanner.next();

				customer.setCustomerName(customerName);
				sAndUpdate.addCustomer(customer);

				System.out.print("继续输入吗?(y/n):");
				isContinue = scanner.next();

			} while ("y".equals(isContinue));

			// 显示客户姓名列表
			sAndUpdate.showCustomer();

			do {
				System.out.print("请输入要查找的客户姓名:");
				String findName = scanner.next();

				boolean flag = sAndUpdate.findCustomer(findName);
				if (flag) {
					System.out.println("找到了!");
					break;
				} else {
					System.out.println("查无此人!请重新输入需要查找的客户名");
				}
			} while (true);

			break;
		case 2:
			// 根据要求循环输入5次学生姓名
			for (int i = 0; i < 5; i++) {
				Student student = new Student();

				System.out.print("请输入学生姓名:");
				String studentName = scanner.next();

				student.setStudentName(studentName);
				sAndUpdate.addStudent(student);
			}
			// 显示学生列表
			sAndUpdate.showStudent();
			System.out.print("\n");
			System.out.print("\n请输入要修改的学生姓名:");
			String updateStuName = scanner.next();
			System.out.print("请输入新的学生姓名:");
			String newStuName = scanner.next();
			
			System.out.println("\n*****修改结果*****");
			if (sAndUpdate.updateStuName(updateStuName, newStuName)) {
				System.out.println("找到并修改成功!");
			}else {
				System.out.println("没找到,抱歉");
			}
			// 显示新的学生列表
			sAndUpdate.showStudent();
			
			break;
		default:
			System.out.println("对不起,没有此操作!");
			break;
		}

	}
}

/**
 * 客户类
 * 
 * @author Administrator
 *
 */
class Customer {
	// 客户姓名
	private String customerName;

	public String getCustomerName() {
		return customerName;
	}

	public void setCustomerName(String customerName) {
		this.customerName = customerName;
	}
}

/**
 * 学生类
 * 
 * @author Administrator
 *
 */
class Student {
	// 学生姓名
	private String studentName;

	public String getStudentName() {
		return studentName;
	}

	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}
}

<think>好的,我现在需要帮助用户解决在Python中循环查找文件夹下名为“disp.png”的文件的问题。首先,我得确认用户的需求是什么。他们可能需要在指定目录及其子目录中递归搜索所有符合条件的文件,并获取这些文件的路径。 接下来,我要考虑Python中实现文件搜索的常用方法。常用的模块有osglob,或者更现代的pathlib。用户可能对不同的方法有不同的熟悉程度,所以需要介绍几种常见的方法,并比较它们的优缺点,让用户可以根据自己的情况选择。 首先想到的是使用os.walk()函数,因为它可以递归遍历目录树,检查每个文件是否符合要求。这种方法比较传统,适用于大多数Python版本。步骤大概是:导入os模块,然后使用os.walk()循环获取目录路径、子目录列表文件列表,再遍历文件列表,判断文件名是否为“disp.png”,如果是,就记录完整路径。 然后,另一个方法是使用glob模块中的glob.glob()或glob.iglob(),特别是使用递归模式,比如**/disp.png。不过需要注意,glob的递归搜索在Python 3.5及以上版本才支持,所以如果用户使用的是较旧版本,可能需要处理兼容性问题。这种方法代码更简洁,但需要确认Python版本是否支持。 第三种方法是使用pathlib模块,这是面向对象的文件系统路径处理方式,代码更现代、易读。通过Path对象的rglob()方法可以递归搜索文件,例如path.rglob('disp.png'),然后收集结果。这种方法适合Python 3.4及以上版本的用户,代码更简洁明了。 接下来,需要比较这三种方法的优缺点。os.walk()兼容性好,适用于所有Python版本,代码稍显冗长。glob.glob()在支持递归的情况下代码简洁,但需要注意版本问题。pathlib的方法代码最简洁,但同样需要较新的Python版本。 然后,我需要考虑异常处理,比如目录不存在的情况,或者权限问题导致无法访问某些子目录。在示例代码中添加try-except块来处理这些异常可能对用户有帮助,但用户可能希望简单的解决方案,所以可能分两种情况:基础代码增强代码,让用户根据需要选择。 另外,是否需要处理大小写问题?比如,在大小写不敏感的文件系统中,用户可能想找到所有DISP.PNG、Disp.png等变体。不过用户明确指定的是“disp.png”,所以可能不需要,但可以提一下如果有需要可以使用lower()等方法进行处理。 最后,将这些思路整理成步骤清晰的解释,给出每种方法的示例代码,并指出它们的适用场景注意事项。确保代码语法正确,特别是LaTeX格式的部分,如变量名可能需要用$符号包裹,但用户的问题中没有涉及数学公式,所以可能不需要,但按照系统指令,行内表达式需要用$...$,所以检查是否有地方需要添加。 总结下来,回答应该包括三种方法:os.walk()、glob.glob()递归模式、pathlib的rglob(),每种方法的代码示例,以及适用情况注意事项。同时提醒异常处理路径拼接的正确性,确保用户能够顺利应用这些代码。</think>要在Python中循环查找文件夹下所有名为“disp.png”的文件,可以通过以下方法实现: --- ### 方法1:使用 `os.walk()` 递归遍历 ```python import os def find_disp_png(root_dir): results = [] for root, dirs, files in os.walk(root_dir): for file in files: if file == "disp.png": full_path = os.path.join(root, file) results.append(full_path) return results # 示例:搜索当前目录下的所有disp.png matches = find_disp_png(".") print("找到的文件:", matches) ``` **说明**: 1. `os.walk(root_dir)` 会递归遍历所有子目录。 2. `files` 是当前目录下的文件列表,通过判断文件名是否等于 `"disp.png"` 筛选目标。 3. 使用 `os.path.join()` 确保路径拼接正确(跨平台兼容)。 --- ### 方法2:使用 `glob` 模块(支持通配符) ```python import glob def find_disp_png_glob(root_dir): pattern = os.path.join(root_dir, "**", "disp.png") return glob.glob(pattern, recursive=True) # 示例:搜索当前目录下的所有disp.png matches = find_disp_png_glob(".") print("找到的文件:", matches) ``` **注意**: - `**` 表示递归匹配任意子目录。 - 需设置 `recursive=True` 以启用递归搜索(Python 3.5+支持)。 --- ### 方法3:使用 `pathlib`(面向对象风格) ```python from pathlib import Path def find_disp_png_pathlib(root_dir): path = Path(root_dir) return list(path.rglob("disp.png")) # 示例:搜索当前目录下的所有disp.png matches = find_disp_png_pathlib(".") print("找到的文件:", [str(p) for p in matches]) ``` **优点**: - 代码简洁,直接使用 `rglob("disp.png")` 递归搜索。 - 返回 `Path` 对象,便于进一步操作(如读取文件、获取父目录等)。 --- ### 扩展建议 1. **大小写敏感**:若需不区分大小写,将 `file == "disp.png"` 改为 `file.lower() == "disp.png"`。 2. **异常处理**:若目录不存在或权限不足,可添加 `try-except` 块。 3. **性能优化**:对超大目录树,可用生成器逐步返回结果(替换 `results.append` 为 `yield`)。 --- ### 最终选择 - 兼容性要求高 → 选 **方法1** - 代码简洁性优先 → 选 **方法2** 或 **方法3** - 需要灵活操作路径 → 选 **方法3**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值