设计需求:制作一个简单的学生信息管理系统,通过键盘选择操作进行添加学生
(学号,姓名,性别,年龄,成绩)的信息,这些信息通过数组存储,
同时还可以进行查询某个或全体学生信息,修改学生信息,删除学生信息的操作。
(要求有一定的优化,例如对用户输入信息是否符合要求的处理)。
面对这个问题,第一想到的是该对象是Student,故创建一个Student类
package com.shxt.java.text1;
//新建一个Student类
public class Student {
//定义学生的属性,姓名
public String name;
public String gender;
public int age;
public int score;
public String stunum;
//返回name
public String getName() {
return name;
}
//给name赋值
public void setName(String name) {
this.name = name;
}
//返回age
public int getAge() {
return age;
}
//给age赋值
public void setAge(int age) {
this.age = age;
}
//返回score
public int getScore() {
return score;
}
//给score赋值
public void setScore(int score) {
this.score = score;
}
//返回gender
public String getGender() {
return gender;
}
//给gender赋值
public void setGender(String gender) {
this.gender = gender;
}
//返回stunum
public String getStunum() {
return stunum;
}
//给stunum赋值
public void setStunum(String stunum) {
this.stunum = stunum;
}
}
其中,由题目可知,该Student类有5个属性,分别是stuname,gender,stunum,score,age。而该程序对于Stduent的操作可以化简为输入输出这五个属性的方法,故对于每个属性,都设计出输入输出这五个属性的方法。其中注意这几个方法返回值的类型。
写完Student类,再写Main方法,首先要考虑该系统需要用户输入,故要引入该方法,
包后,换行写import java.util.Scanner;。然后这需要先定义一个数组,这里暂时没有考虑如果录入学生的数据过多,导致越界的情况。我们把数组定义的足够大。同时数组的每个元素是个Student类,故数组的声明和实例化的语句为“Student[] a=new Student[1000];”,后来我只这样定义数组,程序运行的时候,会显示错误,经过查询将数组的每个元素都实例化了一遍。 “for(int slh=0;slh<1000;slh++){
a[slh]=new Student();
}”将每个数组元素都实例化之后,就可以正常运行了。然后定义了两个变量并对这两个变量进行了赋值。“int z=0;”和“int js=0;”这两个变量为什么会在这里定义会在后面解释。
接下来就是创建用户操作界面,其源代码如下:
while(true){
System.out.println("************欢迎登陆学生信息管理系统********");
System.out.println("1.录入学生信息");
System.out.println("2.修改学生信息");
System.out.println("3.删除学生信息");
System.out.println("4.查询学生信息");
System.out.println("0.退出查询系统");
System.out.println("————————请输入选项——————————");
……
因为要对该界面重复操作,所以加上while(true){……}这个循环,又因为这个系统是对对象操作,转成对数字操作,故加上switch语句将其转换成用户输入数字通过数字对该对象进行操作,如下:int m=scanner.nextInt();
switch(m){
case 1: ...
第一个设置为输入学生信息:
case 1:
System.out.println("请您输入学生信息:");
System.out.println("学生姓名:");
String name=scanner.next();
a[z].setName(name);
System.out.println("学生学号:");
String stunum1=scanner.next();
a[z].setStunum(stunum1);
System.out.println("学生性别:");
String gender1=scanner.next();
a[z].setGender(gender1);
System.out.println("学生成绩:");
int score1=scanner.nextInt();
a[z].setScore(score1);
System.out.println("学生年龄:");
int age1=scanner.nextInt();
a[z].setAge(age1);
System.out.println("————————————录入完毕!——————————");
z++;
break;
其中,z变量之前有定义,后面的z是确定存入第几个元素用的。防止存放混乱。其中引入Student里的方法,就可以将数据存放在数组元素中。
对于第2个,设置成修改学生信息,简而言之,就是设置一个标签int bq=0;这样是为了在判断是否找到指定元素时的条件,对于修改信息就是怼原有的元素重新赋值的一个过程,先设置一个for循环,再在for循环中查找所需要找到的学生,最后对其重新赋值,对其重新赋值的方法,在Student类中的方法也有所提到。源代码如下:
case 2:{
System.out.println("请输入你想要修改的学生学号:");
String stunum2=scanner.next();
int bq=0;
for(int cz=0;cz<1000;cz++){
if(stunum2.equals(a[cz].stunum)){
System.out.println("请您输入学生信息:");
System.out.println("学生姓名:");
String name=scanner.next();
a[cz].setName(name);
System.out.println("学生学号:");
String stunum1=scanner.next();
a[cz].setStunum(stunum1);
System.out.println("学生性别:");
String gender1=scanner.next();
a[cz].setGender(gender1);
System.out.println("学生成绩:");
int score1=scanner.nextInt();
a[cz].setScore(score1);
System.out.println("学生年龄:");
int age1=scanner.nextInt();
a[cz].setAge(age1);
bq=1;
System.out.println("————————————修改完毕!——————————");
}
}
if(bq==0){
System.out.println("没有找到该学生信息,请重新确定!");
}
break;
}
其中bq的初始值为0;当for循环结束时没有运行if语句就没有将bq的值改为1,故当bq仍为0时就可以认为并未找到该学生。
将3设置为删除学生的功能,其中判断是否存在要删除的学生的方法和修改学生信息几乎一致,都是设置一盒标签,判断标签的值是否改变。而对于删除这个学生信息的思路是:找到该学生所在数组的位置,再将后面的那个学生信息赋值给该前面一个学生信息,从该信息开始一直到结束,故可以设置一个循环,来完成这个操作。源代码如下:case 3:{
System.out.println("请输入你想要删除的学生学号:");
String stunum3=scanner.next();
int pq=0;
for(int sc=0;sc<1000;sc++){
if(stunum3.equals(a[sc].stunum)){
System.out.println("找到该学生!是否删除?(请输入是或者否)");
String sf=scanner.next();
if(sf=="是"){
for(int w=sc;w<1000-js;w++){
a[w]=a[w+1];
}
for(int gl=999;gl>999-js;gl--){
a[gl]=null;
}
js++;
}
else if(sf=="否"){
break;
}
pq=1;
}
}
if(pq==0){
System.out.println("输入错误");
break;
}
break;
}
对于4操作就是查找学生信息,通过for循环外加if语句来找到该学生,通过Student类里面的方法返回录入变量的值,也就是学生型。同时在判断输入的学生信息是否存在的方法与修改和删除学生信息中的方法一致。源代码如下:
case 4:{
System.out.println("请您输入要查找的学生学号:");
String stunum4=scanner.next();
int mq=0;
for(int i=0;i<1000;i++){
if(stunum4.equals(a[i].getStunum())){
System.out.println("学生姓名:");
a[i].getName();
System.out.println(a[i].getName());
System.out.println("学生学号:");
System.out.println(a[i].getStunum());
System.out.println("学生性别:");
a[i].getGender();System.out.println(a[i].getGender());
System.out.println("学生成绩:");
a[i].getScore();System.out.println(a[i].getScore());
System.out.println("学生年龄:");
a[i].getAge();System.out.println(a[i].getAge());
System.out.println("————————————输出完毕!——————————");
mq=1;
}
}
if(mq==0){
System.out.println("输入的学号有误!");
}
break;
}
最后设置0为退出程序,源代码如下:
case 0:{
scanner.close();
System.exit(0);
break;
}
其中scanner.close();是终止输入命令,System.exit(0);是退出命令。
所有main方法的源代码如下:
package com.shxt.java.text1;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
Student[] a=new Student[1000];
for(int slh=0;slh<1000;slh++){
a[slh]=new Student();
}
int z=0;
int js=0;
while(true){
System.out.println("************欢迎登陆学生信息管理系统********");
System.out.println("1.录入学生信息");
System.out.println("2.修改学生信息");
System.out.println("3.删除学生信息");
System.out.println("4.查询学生信息");
System.out.println("0.退出查询系统");
System.out.println("————————请输入选项——————————");
int m=scanner.nextInt();
switch(m){
case 1:{
System.out.println("请您输入学生信息:");
System.out.println("学生姓名:");
String name=scanner.next();
a[z].setName(name);
System.out.println("学生学号:");
String stunum1=scanner.next();
a[z].setStunum(stunum1);
System.out.println("学生性别:");
String gender1=scanner.next();
a[z].setGender(gender1);
System.out.println("学生成绩:");
int score1=scanner.nextInt();
a[z].setScore(score1);
System.out.println("学生年龄:");
int age1=scanner.nextInt();
a[z].setAge(age1);
System.out.println("————————————录入完毕!——————————");
z++;
break;
}
case 2:{
System.out.println("请输入你想要修改的学生学号:");
String stunum2=scanner.next();
int bq=0;
for(int cz=0;cz<1000;cz++){
if(stunum2.equals(a[cz].stunum)){
System.out.println("请您输入学生信息:");
System.out.println("学生姓名:");
String name=scanner.next();
a[cz].setName(name);
System.out.println("学生学号:");
String stunum1=scanner.next();
a[cz].setStunum(stunum1);
System.out.println("学生性别:");
String gender1=scanner.next();
a[cz].setGender(gender1);
System.out.println("学生成绩:");
int score1=scanner.nextInt();
a[cz].setScore(score1);
System.out.println("学生年龄:");
int age1=scanner.nextInt();
a[cz].setAge(age1);
bq=1;
System.out.println("————————————修改完毕!——————————");
}
}
if(bq==0){
System.out.println("没有找到该学生信息,请重新确定!");
}
break;
}
case 3:{
System.out.println("请输入你想要删除的学生学号:");
String stunum3=scanner.next();
int pq=0;
for(int sc=0;sc<1000;sc++){
if(stunum3.equals(a[sc].stunum)){
System.out.println("找到该学生!是否删除?(请输入是或者否)");
String sf=scanner.next();
if(sf=="是"){
for(int w=sc;w<1000-js;w++){
a[w]=a[w+1];
}
for(int gl=999;gl>999-js;gl--){
a[gl]=null;
}
js++;
}
else if(sf=="否"){
break;
}
pq=1;
}
}
if(pq==0){
System.out.println("输入错误");
break;
}
break;
}
case 4:{
System.out.println("请您输入要查找的学生学号:");
String stunum4=scanner.next();
int mq=0;
for(int i=0;i<1000;i++){
if(stunum4.equals(a[i].getStunum())){
System.out.println("学生姓名:");
a[i].getName();
System.out.println(a[i].getName());
System.out.println("学生学号:");
System.out.println(a[i].getStunum());
System.out.println("学生性别:");
a[i].getGender();System.out.println(a[i].getGender());
System.out.println("学生成绩:");
a[i].getScore();System.out.println(a[i].getScore());
System.out.println("学生年龄:");
a[i].getAge();System.out.println(a[i].getAge());
System.out.println("————————————输出完毕!——————————");
mq=1;
}
}
if(mq==0){
System.out.println("输入的学号有误!");
}
break;
}
case 0:{
scanner.close();
System.exit(0);
break;
}
}
}
}
}
通过这次代码的编写,可以更加熟练地掌握数组和类的运用。为以后学习打下一定的基础。