几个不同版本的学生管理系统:(一)数组类型

                                    前言

     许多初学者刚接触java,觉得最好能做几个小系统,一方面巩固所学,另一方面增强信心。今天学习一个学生管理系统,采用不同的实现方式反复实现,这样符合“复杂的事情简单做,简单的事情重复做,重复的事情用心做 ”原则(参考:http://www.iqiyi.com/w_19s1ui4bfh.html)。

      为了化繁为简,这里的学生管理系统包括只涉及三个类:学生类、界面类、方法类。

     现在规化为五个版本。

      第一版本用数组实现,方法类通过数组实现对学生的增删查改排序统计等操作。

      第二版本用java动态数组(这里采用最常用的ArrayList)实现,方法类通过数组实现对学生的增删查改排序统计等操作。

     第三版本采用文件实现,,方法类通过对文件读写实现对学生的增删查改排序统计等操作。

     第四版本采用数据库实现,方法类通过对数据库语句的调用实现对学生的增删查改排序统计等操作。

    第五版本基于第四版本,在第四版本基础上,采用java swing重新构建界面,对命令行界面进行升级。

    第一版本到第四版本,学生类、界面类不变,仅工具类有改变。

    第五版本与第四版本,学生类、工具类不变,界面类改变。

                                          第一版本

    分为三个类:

    学生类:属性为学号、姓名、性别、年龄、分数,每个属性生成setter、getter方法。

    主界面:采用命令行Scanner类来接收数据,如添加一个学生命令行提示,为学生分配一个数组位置,Stu[number] = new Stu();“添加时要输入学生的学号,姓名,性别,年龄,成绩”,"请输入该学生的学号:"、"请输入该学生的姓名:"、"请输入该学生的性别:"、"请输入该学生的年龄:"、"请输入该学生的成绩:",”Scanner.next()接收字符串,Scanner.nextInt()接收整形数据。


    工具类:定义一个数组Stu,初始化长度为100,添加数据时,数组下标加1,删除数据时,数据下标减1,修改数据时,找到数组中相应索引对应的这个学生,修改学生的属性,因为这为对象引应,只需要直接修改。




代码如下:

学生类(stu.java):

package com.jxyy.edu;

public class Stu {

    private String stuNum;//学号

    private String name;//姓名

    private String gender;//性别

    private int age;//年龄

    private int score;//分数

    public Stu() {

        super();

    }

    public String getStuNum() {

        return stuNum;

    }

    public void setStuNum(String stuNum) {

        this.stuNum = stuNum;

    }

    public String getGender() {

        return gender;

    }

    public void setGender(String gender) {

        this.gender = gender;

    }

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }

    public int getScore() {

        return score;

    }

    public void setScore(int score) {

        this.score = score;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    } 

}

界面类(Main.java):

package com.jxyy.edu;

import java.util.*;

public class Main {

    /**

    * main方法是程序的入口

    * @param args

    */

public static void main(String args[]) {

int choice;

System.out.println("这是一个学生信息管理系统,最大容量为100,欢迎您对本系统的使用");

while (true) {

System.out.println("1.信息添加");

System.out.println("2.信息查看");

System.out.println("3.信息修改");

System.out.println("4.信息删除");

System.out.println("5.信息按成绩从低到高排序");

System.out.println("6.信息查询");

System.out.println("7.退出");

System.out.println("请输入你要进行的操作");

Scanner scanner = new Scanner(System.in);

choice = scanner.nextInt();

if (choice == 7)

break;

switch (choice) {

case 1:

Tools.add();

break;// 添加学生信息

case 2:

Tools.show();

break;// 查询学生信息

case 3:

Tools.change();

break;// 修改学生信息

case 4:

Tools.delete();

break;// 删除学生信息

case 5:

Tools.paixu();

break;// 对学生信息排序

case 6:

Tools.query();

break;// 查询学生信息

case 7:

break;// 表示正常程序的关闭,执行的是以下操作:System.exit(0);

}

}

System.out.println("感谢您对本系统的使用,欢迎下次继续使用");

}

}

工具类(Tools.java):

package com.jxyy.edu;

import java.util.Scanner;

public class Tools {

// 定义学生数组,容量为100

static Stu[] Stu = new Stu[100];

// 数据中实际添加学生的下标,每添加一个下标加1,删除时减1,留意下面的add(),delete()

static int number = 0;

static Scanner scanner = new Scanner(System.in);

static void add() {// 添加学生信息

System.out.println("添加时要输入学生的学号,姓名,性别,年龄,成绩");

Stu[number] = new Stu();

System.out.println("请输入该学生的学号:");

Stu[number].setStuNum(scanner.next());

System.out.println("请输入该学生的姓名:");

Stu[number].setName(scanner.next());

System.out.println("请输入该学生的性别:");

Stu[number].setGender(scanner.next());

System.out.println("请输入该学生的年龄:");

Stu[number].setAge(scanner.nextInt());

System.out.println("请输入该学生的成绩:");

Stu[number].setScore(scanner.nextInt());

// 添加成功,下标加1

number++;

System.out.println("添加成功");

}

static void show() {// 展示学生信息

System.out.println("*******************************************");

System.out.println(" 学号            姓名                          性别              年龄                成绩");

for (int i = 0; i < number; i++)

System.out.println(Stu[i].getStuNum() + "\t" + Stu[i].getName() + "\t" + "\t" + Stu[i].getGender() + "\t"

+ Stu[i].getAge() + "\t" + Stu[i].getScore());

System.out.println("*******************************************");

System.out.println();

}


// 这里排序用的是冒泡排序,在练习时,可以使用十大排序的任意一种替换。

static void paixu() {// 对学生信息进行排序

int j;

Stu temp = new Stu();

for (int i = 0; i < number; i++) {

for (j = i + 1; j < number; j++)

if (Stu[i].getScore() > Stu[j].getScore()) {

temp = Stu[i];

Stu[i] = Stu[j];

Stu[j] = temp;

}

}

System.out.println("排序完成,选择”学生信息查看“进行查看");

}


static void change() {// 改变学生信息

System.out.println("请输入要修改信息的学生学号");

String Stunumber = scanner.next();

for (int i = 0; i < number; i++) {

if (Stunumber.equals(Stu[i].getStuNum())) {

System.out.println("请输入要修改的学生的信息,学号,姓名,性别,年龄,分数");

Stu[i].setStuNum(scanner.next());

Stu[i].setName(scanner.next());

Stu[i].setGender(scanner.next());

Stu[i].setAge(scanner.nextInt());

Stu[i].setScore(scanner.nextInt());

break;

}

if (number == i)

System.out.println("对不起查无此人");

}

}

static void query() {// 查询

System.out.println("请输入要查询的学生学号");

String Stunumber = scanner.next();

int i;

for (i = 0; i < number; i++) {

if (Stunumber.equals(Stu[i].getStuNum())) {

System.out.println("*******************************************");

System.out.println(" 学号            姓名                          性别              年龄                成绩");

System.out.println(Stu[i].getStuNum() + "\t" + Stu[i].getName() + "\t" + "\t" + Stu[i].getGender()

+ "\t" + Stu[i].getAge() + "\t" + Stu[i].getScore());

System.out.println("*******************************************");

}

}

if (number == i)

System.out.println("对不起查无此人");

}

static void delete() {// 删除学生信息

System.out.println("请输入要删除信息的学生学号");

String Stunumber = scanner.next();

int i;

for (i = 0; i < number; i++) {

if (Stunumber.equals(Stu[i].getStuNum()))

break;

if (number == i)

System.out.println("对不起查无此人");

}

for (; i < number - 1; i++) {

Stu[i] = Stu[i + 1];

}

number--;

System.out.println("删除完成");

}

}

难点讲解:

可以看出学生类非常简单,只要写出相应的属性,可以用工具自动生成setter、getter方法。

界面类使用到循环语句while-true ,选择语句switch-case,非常简单。

工具类定义了一个数据,初始化了数组的长度,用了一个下标记录数组中实际学生实例的个数,当添加学生(add()方法)时,下标加1,当删除学生(delete()方法)时,下标减1。删除学生时,注意:

for (; i < number - 1; i++) {

Stu[i] = Stu[i + 1];

}

这几行代码的意思是,当删除指定下标的数据时,删除的下标不能空着,指向新的学生实例,而这个新的学生实例就是Stu[i+1],以此类推,i之后每一个下标都推向它的下一个学生实例,故用到循环语句表示。

在排序方法(paixu()方法)中,这里排序用的是冒泡排序,在练习时,可以使用十大排序的任意一种替换。参考:十大经典排序算法最强总结(含JAVA代码实现),https://www.cnblogs.com/guoyaohua/p/8600214.html。


冒泡排序方法
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,841评论 0 2
  • 50道经典Java编程练习题,将数学思维运用到编程中来。抱歉哈找不到文章的原贴了,有冒犯的麻烦知会声哈~ 1.指数...
    OSET我要编程阅读 6,940评论 0 9
  • DAY 05 1、 public classArrayDemo { public static void mai...
    周书达阅读 649评论 0 0
  • 第四天 数组【悟空教程】 第04天 Java基础 第1章数组 1.1数组概念 软件的基本功能是处理数据,而在处理数...
    Java帮帮阅读 1,584评论 0 9
  • 第一章 初识javaJAVA 第一讲:什么是程序?:为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的...
    人子日月几点阅读 508评论 0 1