草庐IT

Java学生信息管理系统(增、删、改、查)

Gin_2000 2023-04-23 原文

学生信息管理系统

1.学生信息系统功能:

(1.)添加学生信息

(2.)删除学生信息

(3.)修改学生信息

(4.)查询学生信息

2.程序运行结果图

3.该程序分为两个类:

(1.)Student类

package studentmanagement;

public class Student {
	//定义变量学号、姓名、住址
	private String no;
	private String name;
	private String add;
	private String sex;
	private int tel;
	private int age;
	
	public Student() {
		
	}
	
	public Student(String no, String name, String sex,int age,String add,int tel) {
		this.no = no;
		this.name = name;
		this.sex = sex;
		this.age = age;
		this.add = add;
		this.tel = tel;
		
		}
	
		//学号
	 	public void setSNo(String no) {
			this.no = no;
		}
	 
		public String getNo() {
			return no;
		}
		//姓名
		public void setName(String name) {
			this.name = name;
		}
	 
		public String getName() {
			return name;
		}
		
		//性别
		public void setSex(String sex) {
			this.sex = sex;
		}
		
		public String getSex() {
			return sex;
		}
		//年龄
		public void setAge(int age) {
			this.age = age;
		}
		
		public int getAge() {
			return age;
		}
		
		
		//住址
		public void setAdd(String add) {
			this.add = add;
		}
	 
		public String getAdd() {
			return add;
		}	
		//电话
		public void setTel(int tel) {
			this.tel = tel;
		}
	 
		public int getTel() {
			return tel;
		}	
		
}

(2.)TestMain类(增、删、改、查功能都写在了测试类TestMain类中)

package studentmanagement;

import java.util.ArrayList;
import java.util.Scanner;

public class TestMain {

	public static void main(String[] args) {
		// ArrayList<参数化类型> list = new ArrayList<参数化类型>();
		// 使用泛型ArrayList<Student>之后,表示ArrayList集合中只允许存储Student类型的数据
		// 用泛型指定集合中存储的数据类型
		// 创建ArrayList集合存储student对象
		ArrayList<Student> array = new ArrayList<Student>();
		// 当前可查学生信息
		Student s1 = new Student("01", "蒋丞", "男", 20,"辽宁",135256);
		Student s2 = new Student("02", "顾飞", "男", 21,"辽宁",155234);
		Student s3 = new Student("03", "顾淼", "女", 18,"辽宁",167235);
		array.add(s1);
		array.add(s2);
		array.add(s3);

		// while(true)无限循环语句,语句块中有break语句才都能跳出循环。
		while (true) {
			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("请选择系统功能: ");

			// 输入管理系统选项
			Scanner sc = new Scanner(System.in);
			String choice = sc.nextLine();

			switch (choice) {
			case "1":
				addStudent(array); // 增
				break;
			case "2":
				removeStudent(array); // 删
				break;
			case "3":
				updateStudent(array); // 改
				break;
			case "4":
				findAllStudent(array); // 查
				break;
			case "5": // 退出

			default:
				System.out.println("谢谢您的使用");
				System.exit(0);// java虚拟机退出
				// break;
				
			}
		}
	}

	// 1.添加学生信息
	// public static void main(String[] args) {
	// ArrayList<Student> array = new ArrayList<Student>();
	public static void addStudent(ArrayList<Student> array) {
		Scanner sc = new Scanner(System.in);

		String No;
		System.out.println("请输入学生学号:");
		// String No=sc.nextLine();
		No = sc.nextLine(); // 输入学号No nextLine返回string类型

		// 定义标记,判断学生学号是否被占用
		boolean flag = true;

		for (int i = 0; i < array.size(); i++) {
			// 遍历学生信息返回给学生对象
			Student s = array.get(i);
			// 获取该学生的学号,和键盘录入的学号进行比较
			if (s.getNo().equals(No)) {
				flag = false;// 说明学号被占用
				System.out.println("该学生已存在,请重新输入!");
				break;
			}

		}

		if (flag) {
			System.out.println("请输入学生姓名:");
			String Name = sc.nextLine();
			System.out.println("请输入学生住址:");
			String Add = sc.nextLine();
			System.out.println("请输入学生性别:");
			String Sex = sc.nextLine();
			System.out.println("请输入学生年龄:");
			int Age = sc.nextInt();
			System.out.println("请输入学生电话:");
			int Tel = sc.nextInt();
			//nextInt必须在nextLine后面

			// 创建学生对象
			Student s = new Student();
			s.setSNo(No);
			s.setName(Name);
			s.setAdd(Add);
			s.setSex(Sex);
			s.setAge(Age);
			s.setTel(Tel);
			// 把学生对象作为元素添加到集合
			array.add(s);
			System.out.println("添加成功!");
		}
	}

	// 2.删除学生信息
	public static void removeStudent(ArrayList<Student> array) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入你要删除的学生的学号: ");
		String No = sc.nextLine(); // 键盘录入的学号返回给No

		// 作为索引
		int index = -1;
		// 遍历学生信息
		for (int i = 0; i < array.size(); i++) {
			Student s = array.get(i);
			// 获取该学生的学号,和键盘录入的学号进行比较
			if (s.getNo().equals(No)) {
				index = i; // 124行 array.remove(index);
				break;
			}
			
		}

		if (index == -1) {
			System.out.println("您要删除的学生信息不存在,请重新选择: ");
		} else {
			array.remove(index); // 删除获取的学生信息
			System.out.println("删除学生信息成功");
			
		}
	}

	// 3.修改学生信息
	public static void updateStudent(ArrayList<Student> array) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入你要修改的学生的学号: ");
		String No = sc.nextLine();

		// 作为索引
		int index = -1;
		// 遍历学生信息
		for (int i = 0; i < array.size(); i++) {
			Student s = array.get(i);
			// 获取该学生的学号,和键盘录入的学号进行比较
			if (s.getNo().equals(No)) {
				index = i;
				break;
			}
		}
		if (index == -1) {
			System.out.println("您要修改的学生信息不存在,请您重新选择: ");
		} else { // index = i;的时候
			System.out.println("请输入学生新姓名:");
			String Name = sc.nextLine();
			
			System.out.println("请输入学生性别:");
			String Sex = sc.nextLine();
			
			System.out.println("请输入学生新住址:");
			String Add = sc.nextLine();
			
			System.out.println("请输入学生年龄:");
			int Age = sc.nextInt();
			
			System.out.println("请输入学生电话:");
			int Tel = sc.nextInt();
			// 创建学生对象
			Student s = new Student();
			// 学生对象s不调用set方法,则修改后的值为null
			s.setSNo(No);
			s.setName(Name);
			s.setSex(Sex);
			s.setAge(Age);
			s.setTel(Tel);
			s.setAdd(Add);
			// 修改学生中的集合对象
			// Arraylist集合中set方法,set(int index,Object o)覆盖元素。
			array.set(index, s);

			System.out.println("修改学生信息成功!!");
		}
	}

	// 4.查询学生信息
	public static void findAllStudent(ArrayList<Student> array) {
		// 判断学生信息集合的长度,如果等于0,学生信息为空,程序结束
		if (array.size() == 0) {
			System.out.println("对不起,当前学生信息为空,请您重新选择: ");
			return;// 不让程序往下执行
		}
		// 学生信息列表
		System.out.println("学号:\t姓名:\t性别:\t年龄:\t住址:\t电话:");// \t是一个tab键的位置
		// 遍历集合
		for (int i = 0; i < array.size(); i++) {
			Student student = array.get(i);//
			System.out.println(
					student.getNo() + "\t" + student.getName() + "\t" + student.getSex() + "\t" +student.getAge() + "\t" + student.getAdd()+ "\t" + student.getTel());
		}
	}
}

4.编程中遇到的问题和解决方法

①管理系统使用完其中一个功能后不能继续选择使用其他功能,需要重新运行才能再次使用其他功能。
解决方法:加入while(true)无限循环语句,语句块中有break语句才都能跳出循环。
②在添加学生信息功能中,添加信息相同的学生时,没有信息重复的提示。
解决方法:定义标记boolean flag = true;然后根据判断学生学号是否被占用。先遍历学生信息,获取添加学生的学号,再和键盘输入的学号进行比较,如果输入的学号和获取的学生学号一样,则标记flag=false;,表示学生信息已经存在。如果添加不重复,代码后加上if(flag),里面写要添加学生的相关信息。
③在解决问题①无法循环利用管理系统后,发现退出管理系统功能无法使用,选择退出后还是会弹出学生信息管理系统界面。
解决方法:添加System.exit(0); System是一个Java类,调用exit(0)方法终止虚拟机也就是退出你的Java程序,括号里面的是参数,进程结束的返回值。
④在查询学生信息是否存在中,如果没有查找到要修改或者删除的学生信息该怎么返回给程序
解决方法:添加变量名为index(int index = -1;)作为索引,在数组遍历时,如果没有查到键盘输入信息,返回-1,结束程序,进行下一次循环。
⑤修改学生信息后,再次查询学生信息,发现信息没有改变,修改无效。
解决方法:array.set(index, s);
⑥查询学生信息为空的时候,程序依然向下执行,弹出学号: 姓名: 住址:为空的内容。
解决方法:提示学生信息为空代码后一行加上ruturn;不让程序继续向下执行。
⑦在提供输入管理系统选项的代码中,用到switch方法,返回类型为String,但后面的case语句一直写的是case 1;case 2;…导致代码一直出错
解决方法:switch 使用字符串 String 类型时,同时 case 标签必须为字符串常量或字面 量,将case 1;等改为case “1”;等。
⑧在修改学生信息时,在输入学号、姓名、性别、年龄四项后,直接连续弹出要修改的地址、电话两条信息,先输入要修改的地址,抛出Exception in thread “main” java.util.InputMismatchException的异常。
解决方法:在修改学生信息代码块中自己nextLine()写在了nextInt后,抛出异常。
System.out.println(“请输入学生年龄:”); int Age = sc.nextInt();
System.out.println(“请输入学生新住址:”); String Add = sc.nextLine();
原因:nextLine()不能用在nextInt后面。因为nextLine()方法是返回的是Enter键之前的所有字符,在使用了nextInt() 方法之后在其后输入的空格键、Tab键或Enter键等视为分隔符或结束符,其仍在缓冲区内;若紧接着使用nextLine() ,则nextLine() 自动读取Enter等作为其结束符,则无法从键盘输入值,强行输入会报出InputMismatchException异常。

有关Java学生信息管理系统(增、删、改、查)的更多相关文章

  1. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  2. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  5. ruby-on-rails - 获取 inf-ruby 以使用 ruby​​ 版本管理器 (rvm) - 2

    我安装了ruby​​版本管理器,并将RVM安装的ruby​​实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby​​。有没有办法让emacs像shell一样尊重ruby​​的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el

  6. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  7. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  8. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  9. ruby-on-rails - 事件管理员日期过滤器日期格式自定义 - 2

    是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s

  10. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

随机推荐