学生管理系统-课后程序(JAVA基础案例教程-黑马程序员编著-第六章-课后作业)

news2024/11/25 11:03:53

【案例6-2】 学生管理系统

【案例介绍】

1.任务描述

在一所学校中,对学生人员流动的管理是很麻烦的,本案例要求编写一个学生管理系统,实现对学生信息的添加、删除、修改和查询功能。每个功能的具体要求如下:

  1. 系统的首页:用于显示系统所有的操作,并根据用户在控制台的输入选择需要使用的功能。
  2. 查询功能:用户选择该功能后,在控制台打印所有学生的信息。
  3. 添加功能:用户选择该功能后,要求用户在控制台输入学生学号、姓名、年龄和居住地的基本信息。在输入学号时,判断学号是否被占用,如果被占用则添加失败,并给出相应提示;反之则提示添加成功。
  4. 删除功能:用户选择该功能后,提示用户在控制台输入需要删除学生的学号,如果用户输入的学号存在则提示删除成功,反之则提示删除失败。
  5. 修改功能:用户选择该功能后,提示用户在控制台输入需要修改的学生学号、姓名、年龄和居住地学生信息,并使用输入的学生学号判断是否有此人,如果有则修改原有的学生信息,反正则提示需要修改的学生信息不存在。
  6. 退出功能:用户选择该功能后,程序正常关闭。

本案例要求使用List集合存储自定义的对象,使用List集合的中常用方法实现相关的操作。

2.运行结果

 学生管理系统首页运行结果如图6-1所示。

图6-1  学生管理系统首页运行结果图

学生管理系统查看所有学生运行结果如图6-2所示。

图6-2  查看所有学生信息运行结果图

学生管理系统添加学生信息运行结果如图6-3所示:

图6-3  添加学生信息运行结果图

学生管理系统修改学生信息结果如图6-4所示:

图6-4 修改学生信息运行结果图

学生管理系统删除学生结果如图6-5所示。

图6-5  删除学生运行结果图

 

【案例思路】

(1)定义学生类,自定义对象属性。

(2)学生管理系统的主界面的代码编写,创建集合对象,用于存储学生数据,打印学生管理系统主界面的相关功能,创建键盘输入功能,用switch语句实现选择的功能。最后为了实现多次操作并且手动退出系统。用while(true)循环实现.

(3) 学生管理系统查询所有学生信息的代码编写,首先判断集合中是否有数据,如果没有数据就给出提示,并让该方法不在继续往下执行。如果有数据。遍历集合输出打印数据。

(4) 学生管理系统添加学生信息的代码编写,首先输入学生学号,判断学号有没有被人占用,如果被占用重新输入学号,没有被占用继续录入学生姓名、年龄。家庭住址等信息。创建学生对象,将录入的数据存入对象。最后将学生对象添加入集合,添加学生信息成功。

(5) 学生管理系统删除学生信息的代码编写,键盘录入一个学号,到集合中去查找,看是否有学生使用该学号,如果有就删除该学生信息。如果没有学生使用该学号,返回主界面。

(6)学生管理系统修改学生信息的代码编写。键盘录入一个学号,到集合中去查找,看是否有学生使用该学号,如果过有就修改学生信息。反之返回主界面。

【案例实现】

学生实体类属性如文件6-1所示。

文件6-1  Student.java

  1. public class Student {
  2.     //学号
  3.      private String id;
  4.     //姓名
  5.     private String name;
  6.     //年龄
  7.     private String age;
  8.     //居住地
  9.     private String address;
  10. }

以上代码是我们自定义对象实体类所包括的属性,我们在用时需要重写get()、set()以及构造方法。

模拟学生管理系统的代码实现,如文件6-2所示。 

文件6-2 example2.java

  1. package com.itheima;
  2. import java.util.ArrayList;
  3. import java.util.Scanner;
  4. public class example2 {
  5. public static void main(String[] args) {
  6.         //创建集合对象,用于存储学生数据
  7.         ArrayList<Student> array = new ArrayList<Student>();
  8.         //为了让程序能够回到这里来,我们使用循环
  9.         while(true) {
  10.         //这是学生管理系统的主界面
  11.         System.out.println("--------欢迎来到学生管理系统--------");
  12.         System.out.println("1 查看所有学生");
  13.         System.out.println("2 添加学生");
  14.         System.out.println("3 删除学生");
  15.         System.out.println("4 修改学生");
  16.         System.out.println("5 退出");
  17.         System.out.println("请输入你的选择:");
  18.         //创建键盘录入对象
  19.         Scanner sc = new Scanner(System.in);
  20.         String choiceString = sc.nextLine();
  21.         //switch语句实现选择
  22.         switch(choiceString) {
  23.         case "1":
  24.         //查看所有学生
  25.         findAllStudent(array);
  26.         break;
  27.         case "2":
  28.         //添加学生
  29.         addStudent(array);
  30.         break;
  31.         case "3":
  32.         //删除学生
  33.         deleteStudent(array);
  34.         break;
  35.         case "4":
  36.         //修改学生
  37.         updateStudent(array);
  38.         break;
  39.         case "5":
  40.         //退出
  41.         //System.out.println("谢谢你的使用");
  42.         //break;
  43.         default:
  44.         System.out.println("谢谢你的使用");
  45.         System.exit(0); //JVM退出
  46.         break;
  47.         }
  48.         }
  49.         }
  50.    //查看所有学生
  51.    public static void findAllStudent(ArrayList<Student> array) {
  52.         //首先来判断集合中是否有数据,如果没有数据,就给出提示,并让该方法不继续往
  53.           下执行
  54.         if(array.size() == 0) {
  55.         System.out.println("不好意思,目前没有学生信息可供查询,请回去重新选择你
  56.                                 的操作");
  57.         return;
  58.         }
  59.         //\t 其实就是一个tab键的位置
  60.         System.out.println("学号\t姓名\t年龄\t居住地");
  61.         for(int x=0; x<array.size(); x++) {
  62.         Student s = array.get(x);  
  63.         System.out.println(s.getId()+"\t"+s.getName()+"\t"
  64.         +s.getAge()+"\t"+s.getAddress());
  65.         }
  66.         }
  67.         }
  68.   //添加学生
  69.    public static void addStudent(ArrayList<Student> array) {
  70.         //创建键盘录入对象
  71.         Scanner sc = new Scanner(System.in);
  72.         //为了让id能够被访问到,我们就把id定义在了循环的外面
  73.         String id;
  74.         //为了让代码能够回到这里,用循环
  75.         while(true) {
  76.         System.out.println("请输入学生学号:");
  77.         //String id = sc.nextLine();
  78.         id = sc.nextLine();
  79.         //判断学号有没有被人占用
  80.         //定义标记
  81.         boolean flag = false;
  82.         //遍历集合,得到每一个学生
  83.         for(int x=0; x<array.size(); x++) {
  84.         Student s = array.get(x);
  85.         //获取该学生的学号,和键盘录入的学号进行比较
  86.         if(s.getId().equals(id)) {
  87.         flag = true; //说明学号被占用了
  88.         break;
  89.         }
  90.         }
  91.         if(flag) {
  92.         System.out.println("你输入的学号已经被占用,请重新输入");
  93.         }else {
  94.         break; //结束循环
  95.         }
  96.         }
  97.         System.out.println("请输入学生姓名:");
  98.         String name = sc.nextLine();
  99.         System.out.println("请输入学生年龄:");
  100.         String age = sc.nextLine();
  101.         System.out.println("请输入学生居住地:");
  102.         String address = sc.nextLine();
  103.         //创建学生对象
  104.         Student s = new Student();
  105.         s.setId(id);
  106.         s.setName(name);
  107.         s.setAge(age);
  108.         s.setAddress(address);
  109.         //把学生对象作为元素添加到集合
  110.         array.add(s);
  111.         //给出提示
  112.         System.out.println("添加学生成功");
  113.         }
  114. //删除学生
  115.    public static void deleteStudent(ArrayList<Student> array) {
  116.         //删除学生的思路:键盘录入一个学号,到集合中去查找,看是否有学生使用的是该
  117.            学号,如果有就删除该学生
  118.         //创建键盘录入对象
  119.         Scanner sc = new Scanner(System.in);
  120.         System.out.println("请输入你要删除的学生的学号:");
  121.         String id = sc.nextLine();
  122.         //我们必须给出学号不存在的时候的提示
  123.         //定义一个索引
  124.         int index = -1;
  125.         //遍历集合
  126.         for(int x=0; x<array.size(); x++) {
  127.         //获取到每一个学生对象
  128.         Student s = array.get(x);
  129.         //拿这个学生对象的学号和键盘录入的学号进行比较
  130.         if(s.getId().equals(id)) {
  131.         index = x;
  132.         break;
  133.         }
  134.         }
  135.         if(index == -1) {
  136.         System.out.println("不好意思,你要删除的学号对应的学生信息不存在,请回去
  137.                                 重新你的选择");
  138.         }else {
  139.         array.remove(index);
  140.         System.out.println("删除学生成功");
  141.         }
  142.         }
  143.   //修改学生
  144.   public static void updateStudent(ArrayList<Student> array) {
  145.         //修改学生的思路:键盘录入一个学号,到集合中去查找,看是否有学生使用的是该
  146.            学号,如果有就修改该学生
  147.         //创建键盘录入对象
  148.         Scanner sc = new Scanner(System.in);
  149.         System.out.println("请输入你要修改的学生的学号:");
  150.         String id = sc.nextLine();
  151.         //定义一个索引
  152.         int index = -1;
  153.         //遍历集合
  154.         for(int x=0; x<array.size(); x++) {
  155.         //获取每一个学生对象
  156.         Student s = array.get(x);
  157.         //拿学生对象的学号和键盘录入的学号进行比较
  158.         if(s.getId().equals(id)) {
  159.         index = x;
  160.         break;
  161.         }
  162.         }
  163.         if(index == -1) {
  164.         System.out.println("不好意思,你要修改的学号对应的学生信息不存在,请回去
  165.                                 重新你的选择");
  166.         }else {
  167.         System.out.println("请输入学生新姓名:");
  168.         String name = sc.nextLine();
  169.         System.out.println("请输入学生新年龄:");
  170.         String age = sc.nextLine();
  171.         System.out.println("请输入学生新居住地:");
  172.         String address = sc.nextLine();
  173.         //创建学生对象
  174.         Student s = new Student();
  175.         s.setId(id);
  176.         s.setName(name);
  177.         s.setAge(age);
  178.         s.setAddress(address);
  179.         //修改集合中的学生对象
  180.         array.set(index, s);
  181.         //给出提示
  182.         System.out.println("修改学生成功");
  183.         }
  184.         }

在文件6-2中,第8行定义一个集合用于存储学生数据。其中该集合的泛型为Student。第10行代码定义一个while(true)循环使程序能够回到学生管理系统的主界面,第12~18行用于显示主界面的菜单信息。第20~21行代码定义键盘录入对象,用于选择我们要实现的功能。第23~48行代码定义switch语句实现选择。case对应相应的功能。调用相应的程序代码 ,其中System.exit(0)表示JVM退出。第52~68行,定义一个实现学生信息查询方法。其中第55~59行,首先用if判断集合中是否有数据,如果没有数据,就给出提示,并让该方法不继续往下执行。如果有数据,执行第62~66行遍历集合。并输出打印结果。第70~114行,定义一个实现添加学生信息的方法,其中第73行,定义一个id表示输入的学生的学号, 为了让id能够被访问到,我们就把id定义在了循环的外面。第76行,用while循环保证多次输入学号,直到输入的学号不重复。第84~85行代码表示循环遍历集合,获取每一个学生。第87行代码用if判断学号是否被占用。第116~142,行,定义一个删除学生信息的方法。第145~186行,定义一个实现修改学生信息的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/365362.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视频技术基础知识

一、视频图像基础 像素&#xff1a;图像的基本单元&#xff0c;即一个带有颜色的小块分辨率&#xff1a;图像的大小或尺寸&#xff0c;用像素个数来表示。原始图像分辨率越高&#xff0c;图像就越清晰位深&#xff1a;存储每位像素需要的二进制位数&#xff1b;位深越大&#…

JAVA线程入门简介

线程入门简介什么是程序?什么是进程?什么是线程&#xff1f;单线程与多线程并发与并行线程的使用用java查看有多少个cpu创建线程的两种方式继承Thread类&#xff0c;重写run方法实现Runnable接口&#xff0c;重写run方法多线程机制为社么是start?源码解析什么是程序? 是为完…

防错料使用二维码解决方案 生产过程物料防错管理

生产过程中&#xff0c;物料的防错管理是非常重要的一环。它能够有效地防止物料错用或混用&#xff0c;从而降低产品质量问题的发生率&#xff0c;减少生产成本和生产周期&#xff0c;提高生产效率和产品质量。以下是生产过程物料防错管理的具体措施&#xff1a;1.明确物料标识…

SpringBoot Data Redis来操作Redis

SpringBoot Data Redis来操作Redis1、Redis启动Redis主要的作用安装的位置启动2、Java中来操作Redis3、Spring Data Redis(重点)测试连接配置Redis序列化器redisTemplate操作常见数据类型通用操作&#xff0c;针对不同的数据类型都可以操作申明&#xff1a; 未经许可&#xff0…

浅谈Springboot自动化配置原理

文章目录1.前言2.SpringBoot的入口3.SpringBootApplication背后的秘密4.Configuration5.ComponentScan扫描bean6.EnableAutoConfiguration7.自动配置生效1.前言 不论在工作中&#xff0c;亦或是求职面试&#xff0c;Spring Boot已经成为我们必知必会的技能项。除了某些老旧的政…

java面试题-JUC线程池

1.FutureTask的作用?FutureTask 是 Java 并发编程中的一个类&#xff0c;用于异步执行任务并获取其结果。它实现了 Future 和 Runnable 接口&#xff0c;因此可以作为一个可运行的任务提交给 Executor 执行&#xff0c;也可以通过 Future 接口获取任务执行的结果。FutureTask …

2023年DAMA-CDGA/CDGP数据治理认证选择哪家机构好?

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

将整数数组变为浮点型数组的np.asfarray()方法

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将整数数组转换为浮点型数组 np.asfarray() 选择题 关于以下代码说法错误的一项是? import numpy as np a1 np.array([1,2,3]) print("【显示】a1",a1) print("【执行】a…

网络工程(一) 简单的配置

网络工程 简单的配置 需求 两台交换机 两台路由器 两台PC AR1配置静态路由 system-view [HUAWEI]sysname ar1 [ar1]interface g 0/0/0 [ar1-G…0/0/0]ip address 192.168.2.1 24 [ar1-G…0/0/0]quit [ar1]interface g 0/0/1 [ar1-G…0/0/1]ip address 192.168.3.1 24 [ar1-G…

关于学习git时的一些疑惑与笔记

关于学习git时的一些疑惑与笔记SSH相关问题SSH是什么&#xff1f;SSH有什么作用&#xff1f;如何在github配置SSH?分支什么是本地分支&#xff0c;远程分支&#xff1f;main主分支与master主支&#xff1f;为什么要把master分支修改为main分支&#xff1f;什么时候用分支&…

Java线程——常见方法

一、 常见方法 1.1 概述 ① start_vs_run&#xff1a;直接调用run方法并不会启动新的线程 import cn.itcast.n2.util.FileReader; import lombok.extern.slf4j.Slf4j;Slf4j(topic "c.Test") public class Test {public static void main(String[] args) {Thread t…

【网络安全】Windows系统安全实验

第3模块 Windows操作系统安全部分 3.1 帐户和口令的安全设置 3.1.1 实验目的 本章实验的目的主要是熟悉Windows操作系统中帐户和口令的安全设置&#xff0c;掌握删除、禁用帐户的方法&#xff0c;了解并启用密码策略和用户锁定策略&#xff0c;体验查看“用户权限分配”、…

如何在Linux环境下用VI编辑器写C程序编译C程序运行C程序

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来重点说一说如何在Linux环境下用VI编辑器写C程序编译C程序运行C程序。相信大家在Windows环境下写C程序编译C程序运行C程序怎么弄都已经很清楚了&#xff0c;现在我们来看在Linux下如果来做&#xff…

Vue 在for循环中动态添加类名及style样式集合

介绍 在vue的 for 循环中&#xff0c;经常会使用到动态添加类名或者样式的情况&#xff0c;实现给当前的选中的 div 添加不同的样式。 动态添加类名 提示&#xff1a; 所有动态添加的类名&#xff0c;放在表达式里都需要添加引号&#xff0c;进行包裹。 通过 对象 的形式&a…

Git ---- Git 分支操作

Git ---- Git 分支操作1. 什么是分支2. 分支的好处3. 分支的操作1. 查看分支2. 创建分支3. 修改分支4. 切换分支5. 合并分支5. 产生冲突4. 创建分支和切换分支图解1. 什么是分支 在版本控制过程中&#xff0c;同时推进多个任务&#xff0c;为每个任务&#xff0c;我们就可以创…

【已解决】安装cv2时Building wheel for opencv-python终端卡死

目录1 问题背景2 问题探索3 问题解决4 告别Bug1 问题背景 环境&#xff1a; Ubuntu20.04Python3.6 现象&#xff1a;终端输出类似下面的命令&#xff0c;并卡住不动 Building wheel for opencv-python (PEP 517) ... 2 问题探索 首先&#xff0c;OpenCV较旧的Python版本不需要…

什么是自动化运维?为什么选择Python做自动化运维?

“Python自动化运维”这个词&#xff0c;想必大家都听说过&#xff0c;但是很多人对它并不了解&#xff0c;也不知道是做什么的&#xff0c;那么你对Python自动化运维了解多少呢?跟着蛋糕往下看。 什么是Python自动化运维? 随着技术的进步、业务需求的快速增长&#xff0c;…

网友爆料奇葩leader:日报要精确到0.5小时,每晚检查!每周写周计划,评审ABCD等级,午休不许刷手机、看视频、玩游戏!...

这样的leader你能接受吗&#xff1f;一位网友吐槽&#xff1a;一个团队6个人&#xff0c;加上leader一共7个人。leader要求每天写日报&#xff0c;并且要精确到0.5小时&#xff0c;格式必须正确&#xff0c;每天晚上都看&#xff0c;下班后各种问进度。每周一要写周计划&#x…

IM即时通讯构建企业协同生态链

在当今互联网信息飞速发展的时代&#xff0c;随着企业对协同办公要求的提高&#xff0c;协同办公的定义提升到了智能化办公的范畴。大多企业都非常重视构建连接用户、员工和合作伙伴的生态平台&#xff0c;利用即时通讯软件解决企业内部的工作沟通、信息传递和知识共享等问题。…

Pytorch 网络结构的可视化

在构建网络的过程中&#xff0c;需要查看网络结构&#xff0c;以便于优化&#xff0c;使用Pytorch常用的可视化工具有 1.Hidden layer myNet U_Net() print(myNet)# ## 可视化卷积神经网络,MyConvnet是定义的神经网络结构 hl_graph hl.build_graph(myNet, torch.zeros([1, 3…