黑马程序员技术交流社区
标题: 关于学生管理系统设计与编写重要思想 [打印本页]
作者: 于旸 时间: 2017-12-27 21:35
标题: 关于学生管理系统设计与编写重要思想
此系统的编写考察”集合”的增删查改方法.
首先选择存放的包文件:
package com.xitong;
然后定义学生类:
public class student {
定义id,name,age,address四个成员变量,为String类型:
String id;
String name;
String age;
String address;
定义student类的构造方法:
无参构造:
public student() {
// TODO Auto-generated constructor stub
}
有参构造(四个参数):
public student(String id, String name, String age, String address) {
利用this关键字来避免传入的id与类中定义的成员变量id重名:
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
定义成员变量getXxx()与SetXxx()方法:
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
到此我们就完成了新建一个完整的student类.
package com.xitong;
导入ArrayList(集合)和Scanner(键盘录入)两个包:
import java.util.ArrayList;
import java.util.Scanner;
public class StudentManagerTest {
public static void main(String[] args) {
在主方法中完成主界面的编写:
ArrayList<student> array=new ArrayList<student>();
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退出");
键盘录入一个字符串保存到变量中:
Scanner sc=new Scanner(System.in);
String choiceString=sc.nextLine();
利用switch方法对你输入的字符串进行识别,输入1-4对应调用查看,添加,删除,修改等四个方法:
switch(choiceString){
case "1":
//查看学生
findAllStudent(array);
break;
case "2":
//添加学生
addStudent(array);
break;
case "3":
//删除学生
deleteStudent(array);
break;
case "4":
//修改学生
updateStudent(array);
break;
此处用到”case穿透原理”,case 5中没有break,即输入5 与输入其他case所不含有的字符串的时候,采取同样措施:
case "5":
//退出
default:
System.out.println("谢谢使用");
这里加入System.exit(0)是为了跳出整个while循环.
System.exit(0);// JVM退出
}
}
}
定义第一个方法,没有返回值,传入的数据是ArrayList类型的array:
public static void findAllStudent(ArrayList<student> array){
if(array.size()==0){
System.out.println("现在还没有学生信息.");
return;
}
其中\t代表空位:
System.out.println("学号\t\t姓名\t年龄\t居住地");
在循环中利用array自带get()方法获取其中的学生对象,赋值给student类型的s:
for (int x = 0; x < array.size(); x ++) {
student s=array.get(x);
调用学生类定义的getId(),getName()等方法来获取其中的变量值:
System.out.println(s.getId()+"\t"+s.getName()+"\t"+s.getAge()+"\t"+s.getAddress());
}
}
public static void addStudent(ArrayList<student> array){
Scanner sc=new Scanner(System.in);
为了让id能够被访问到,就把id定义在while循环地外边:
String id;
while(true){//为了让代码能够回到这里继续重新输入
System.out.println("输入学号:");
id=sc.nextLine();
此处为难点:
首先定义一个boolean类型的变量初始值设为false:
boolean flag=false;
for (int i = 0; i < array.size(); i++) {
student s=array.get(i);
如果student类型的s的id值等于我们从键盘录入的id值:
if(s.getId().equals(id)){
把我们定义的boolean类型变量flag设置为true,然后跳出循环:
flag=true;
break;
}
}
在此对flag值检查,如果flag为true,则说明输入的学号与之前曾经有的重名,即该学号已经被占用,输入语句提示:
if(flag){
System.out.println("您输入的学号已经被占用,请重新输入.");
}else{
否则的话说明这是一个新学号即新学生,则跳出循环,进行接下来的赋值等操作:
break;//结束循环
}
}
System.out.println("输入姓名:");
String name=sc.nextLine();
System.out.println("输入年龄:");
String age=sc.nextLine();
System.out.println("输入地址:");
String address=sc.nextLine();
student s =new student();
s.setId(id);
s.setName(name);
s.setAge(age);
s.setAddress(address);
利用集合array的add()方法添加元素:
array.add(s);
System.out.println("添加学生成功!");
}
至此,添加成员的方法已完成.
public static void deleteStudent(ArrayList<student> array){
Scanner sc=new Scanner(System.in);
System.out.println("请输入学号:");
String id=sc.nextLine();
这里我们定义一个int类型的index(意为索引):
int index=-1;///////////////////
for (int x = 0; x < array.size(); x++) {
/////////////////获取到每一个student对象
student s=array.get(x);
if(s.getId().equals(id)){
如果键盘录入的id与集合中某个学生成员的id相同的话,将该学生的索引赋值给index,然后跳出循环:
index=x;
break;
}
}
因为我们初始化index的值为-1,此时检查如果index的值仍为-1,说明你输入的学号之前并不存在,如果存在的话,利用index作为索引利用集合的remove方法来删除此集合元素:
if(index==-1){
System.out.println("你要删除的学号对应的学生信息不存在,请重新输入.");
}else{
array.remove(index);/////////////集合的删除方法remove
System.out.println("删除成功");
}
}
public static void updateStudent(ArrayList<student> array) {
修改学生的思路:键盘录入一个学号,到集合中去查找,看是否有学生使用的是该学号,如果有就修改该学生:
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要修改的学生的学号:");
String id = sc.nextLine();
//定义一个索引
int index = -1;
//遍历集合
for(int x=0; x<array.size(); x++) {
//获取每一个学生对象
student s = array.get(x);
//拿学生对象的学号和键盘录入的学号进行比较
if(s.getId().equals(id)) {
index = x;
break;
}
}
if(index == -1) {
System.out.println("不好意思,你要修改的学号对应的学生信息不存在,请回去重新你的选择");
}else {
已经知道学号,那么继续输入此学生的其他信息:
System.out.println("请输入学生新姓名:");
String name = sc.nextLine();
System.out.println("请输入学生新年龄:");
String age = sc.nextLine();
System.out.println("请输入学生新居住地:");
String address = sc.nextLine();
//创建学生对象
student s = new student();
s.setId(id);
s.setName(name);
s.setAge(age);
s.setAddress(address);
//修改集合中的学生对象,利用集合的set()方法,把index位置的对象用这个新的学生对象 s 来替代:
array.set(index, s);
//给出提示
System.out.println("修改学生成功");
}
}
}
}
至此整个系统编写完毕,此系统的难点首先是对增删查改四项功能分别进行编写及调用的思想,在编写代码逻辑的时候,在新增成员的时候对学号是否重复的判断比较复杂需要注意,而删除以及查改部分代码思想较为类似,注意定义一个索引进行判断和定位.
作者: 小浙姐姐 时间: 2017-12-31 10:15
看来你对这个小项目理解的很深刻了呢!如果有时间,也可以想想怎么去优化他呢!后面就业班要更努力哦!加油
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |