/**
* 学员管理系统 程序入口类
* @author 邓超
* @version 0.1 2008/06/10
*/
/*
* 使用说明:
* 本程序实际运行效果测试只适用于英文版Eclipse + JDK 1.6。
* 如果使用中文版Eclipse测试,程序输出结果会有一些差异。
*/
public class Entry {
public static void main(String[] args) {
//实例化Execute类
new Execute();
}
}
import java.util.Scanner;
/**
* 学员管理系统 学员数据信息类
* @author 邓超
* @version 0.1 2008/06/10
*/
public class StuInfo {
private int totalRecord = 25; //系统数据库记录总数
private int[] stuNum = new int[totalRecord]; //学号
private String[] name = new String[totalRecord]; //姓名
private char[] sex = new char[totalRecord]; //性别
private int[] age = new int[totalRecord]; //年龄
private String[] nativePlace = new String[totalRecord]; //籍贯
private double[][] score = new double[totalRecord][3]; //三科成绩
//实例化Scanner类
Scanner sc = new Scanner(System.in);
/*
* 系统数据库存取方法
*/
/**
* 初始化系统数据
*/
public void initial() {
//保存性别字典
char[] sexDict = {'男', '女'};
//保存籍贯字典
String[] nativePlaceDict = {"内江", "成都", "重庆", "武汉", "杭州", "长沙", "上海", "深圳", "北京", "海口", "香港", "澳门", "内蒙古", "新疆"};
//循环生成系统测试数据,并保留五条空白记录
for (int i = 0; i < name.length - 5; i++) {
//生成学号
stuNum[i] = i + 1;
//生成姓名
name[i] = "测试" + (i + 1);
//生成性别(0~sexDict.length - 1的随机数)
sex[i] = sexDict[(int)Math.round(Math.random() * (sexDict.length - 1))];
//生成年龄(16~35的随机数)
age[i] = (int)Math.round((Math.random() * (35 - 16))) + 16;
//生成籍贯(0~nativePlaceDict.length-1的随机数)
nativePlace[i] = nativePlaceDict[(int)Math.round(Math.random() * (nativePlaceDict.length - 1))];
//生成Java成绩(60~100的随机数)
score[i][0] = (int)Math.round((Math.random() * (100 - 60))) + 60;
//生成Html成绩(60~100的随机数)
score[i][1] = (int)Math.round((Math.random() * (100 - 60))) + 60;
//生成C#成绩(60~100的随机数)
score[i][2] = (int)Math.round((Math.random() * (100 - 60))) + 60;
}
}
/**
* 添加学员资料信息
* @param newStuNum 学号
* @param newName 姓名
* @param newSex 性别
* @param newAge 年龄
* @param newNativePlace 籍贯
* @param newScore 三科成绩
*/
public void addInfo(int[] newStuNum,
String[] newName,
char[] newSex,
int[] newAge,
String[] newNativePlace,
double[][] newScore) {
int i; //迭代变量
int index = -1; //数组当前空位下标
for (i = 0; i < name.length; i++) {
if (name[i] == null) {
index = i;
break;
}
}
//仅当数组无元素空位时index的值才未发生更改
if (index != -1) {
//分别保存各数组到类的私有成员变量
for (i = 0; i < newName.length; i++) {
stuNum[index + i] = newStuNum[i]; //添加学号
name[index + i] = newName[i]; //添加姓名
sex[index + i] = newSex[i]; //添加性别
age[index + i] = newAge[i]; //添加年龄
nativePlace[index + i] = newNativePlace[i]; //添加籍贯
score[index + i][0] = newScore[i][0]; //添加Java成绩
score[index + i][1] = newScore[i][1]; //添加Html成绩
score[index + i][2] = newScore[i][2]; //添加C#成绩
}
System.out.println("/n/n" + newName.length + "个学员的资料已经成功添加到系统数据库!/n/n");
} else {
System.out.println("抱歉!系统数据库已满,不能再添加新的资料!");
}
}
/**
* 浏览学员资料信息
* @param option
* @param command
* @param lookupStuNum
* @param lookupName
* @param lookupSex
* @param lookupAge
* @param lookupNativePlace
*/
public void showInfo(int command,
int lookupStuNum,
String lookupName,
char lookupSex,
int lookupAge,
String lookupNativePlace) {
//迭代变量
int i;
//可用记录计数器
int count = 0;
//可用记录成绩累加器
double sum[][] = new double[1][3];
//控制台输出学员资料信息
System.out.println("/n/n学员管理系统 -> 浏览学员资料信息/n");
System.out.println("┌───────────────┬───────────────┬───────────────┬───────────────┬───────────────┬───────────────┬───────────────┬───────────────┐");
System.out.println("│/t学号/t│/t姓名/t│/t性别/t│/t年龄/t│/t籍贯/t│/tJava成绩/t│/tHtml成绩/t│/tC#成绩/t│");
for (i = 0; i < name.length; i++) {
if (name[i] != null) {
switch (command) {
case 0: //当传入参数为0时,显示所有资料信息
printInfo(i);
count++;
sum[0][0] += score[i][0]; //累加Java成绩
sum[0][1] += score[i][1]; //累加Html成绩
sum[0][2] += score[i][2]; //累加C#成绩
break;
case 1:
if (stuNum[i] == lookupStuNum) {
printInfo(i);
count++;
sum[0][0] += score[i][0]; //累加Java成绩
sum[0][1] += score[i][1]; //累加Html成绩
sum[0][2] += score[i][2]; //累加C#成绩
}
break;
case 2:
if (name[i].equalsIgnoreCase(lookupName)) { //忽略大小写
printInfo(i);
count++;
sum[0][0] += score[i][0]; //累加Java成绩
sum[0][1] += score[i][1]; //累加Html成绩
sum[0][2] += score[i][2]; //累加C#成绩
}
break;
case 3:
if (sex[i] == lookupSex) {
printInfo(i);
count++;
sum[0][0] += score[i][0]; //累加Java成绩
sum[0][1] += score[i][1]; //累加Html成绩
sum[0][2] += score[i][2]; //累加C#成绩
}
break;
case 4:
if (age[i] == lookupAge) {
printInfo(i);
count++;
sum[0][0] += score[i][0]; //累加Java成绩
sum[0][1] += score[i][1]; //累加Html成绩
sum[0][2] += score[i][2]; //累加C#成绩
}
break;
case 5:
if (nativePlace[i].equalsIgnoreCase(lookupNativePlace)) { //忽略大小写
printInfo(i);
count++;
sum[0][0] += score[i][0]; //累加Java成绩
sum[0][1] += score[i][1]; //累加Html成绩
sum[0][2] += score[i][2]; //累加C#成绩
}
break;
}
}
}
if (count == 0) {
System.out.println("├────────────────────────────────────────────────────────── 暂 无 资 料 ──────────────────────────────────────────────────────────┤");
}
System.out.println("└───────────────┴───────────────┴───────────────┴───────────────┴───────────────┴───────────────┴───────────────┴───────────────┘");
if (count != 0) {
System.out.println("/n数据库信息摘要:");
System.out.println("信息总数:/t" + count);
System.out.println("Java总成绩:/t" + sum[0][0] + "/tHtml总成绩:/t" + sum[0][1] + "/tC#总成绩:/t" + sum[0][2]);
System.out.println("Java平均分:/t" + sum[0][0] / count + "/tHtml平均分:/t" + sum[0][1] / count + "/tC#平均分:/t" + sum[0][2] / count);
}
System.out.println("/n");
}
/**
* 根据下标值打印资料信息
* @param i
*/
public void printInfo(int i) {
System.out.println("├───────────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────────┼───────────────┤");
System.out.println("│/t" + stuNum[i] +
"/t│/t" + name[i] +
"/t│/t" + sex[i] +
"/t│/t" + age[i] +
"/t│/t" + nativePlace[i] +
"/t│/t" + score[i][0] +
"/t│/t" + score[i][1] +
"/t│/t" + score[i][2] + "/t│");
}
/**
* 修改学员资料信息
* @param newStuNum
* @param newName
* @param newSex
* @param newAge
* @param newNativePlace
* @param newJavaScore
* @param newHtmlScore
* @param newCSharpScore
*/
public void modifyInfo(int command,
int newStuNum,
String newName,
char newSex,
int newAge,
String newNativePlace,
double[][] newScore) {
//询问用户确认修改
String ask;
for (int i = 0; i < name.length; i++) {
if (stuNum[i] == newStuNum) {
System.out.println("/n/n确实要修改学号为" + newStuNum + "的资料吗?");
System.out.print("请按Y键确认使用以上新值修改资料,其它任意键取消:");
ask = sc.next();
if (ask.equalsIgnoreCase("Y")) {
switch (command) {
case 1:
name[i] = newName; //修改姓名
break;
case 2:
sex[i] = newSex; //修改性别
break;
case 3:
age[i] = newAge; //修改年龄
break;
case 4:
nativePlace[i] = newNativePlace; //修改籍贯
break;
case 5:
score[i][0] = newScore[0][0]; //修改Java成绩
break;
case 6:
score[i][1] = newScore[0][1]; //修改Html成绩
break;
case 7:
score[i][2] = newScore[0][2]; //修改C#成绩
break;
}
System.out.println("/n/n学号为" + stuNum[i] + "的学员资料修改成功!");
System.out.println("修改结果如下:");
showInfo(1, stuNum[i], null, '/u0000', 0, null);
} else {
System.out.println("/n/n用户取消!学号为" + stuNum[i] + "的学员资料修改失败!/n/n");
}
break;
}
}
}
/**
* 删除学员资料信息
* @param stuNum
*/
public void deleInfo(int deleStuNum) {
//询问用户确认修改
String ask;
for (int i = 0; i < name.length; i++) {
if (stuNum[i] == deleStuNum) {
System.out.println("/n/n确实要删除学号为" + stuNum[i] + "的资料吗?");
showInfo(1, stuNum[i], null, '/u0000', 0, null);
System.out.print("请按Y键确认删除以上资料,其它任意键取消:");
ask = sc.next();
if (ask.equalsIgnoreCase("Y")) {
stuNum[i] = 0; //清除学号
name[i] = null; //清除姓名
sex[i] = '/u0000'; //清除性别
age[i] = 0; //清除年龄
nativePlace[i] = null; //清除籍贯
score[i][0] = 0.0d; //清除Java成绩
score[i][1] = 0.0d; //清除Html成绩
score[i][2] = 0.0d; //清除C#成绩
System.out.println("/n/n学号为" + deleStuNum + "的学员资料删除成功!/n/n");
} else {
System.out.println("/n/n用户取消!学号为" + stuNum[i] + "的学员资料删除失败!/n/n");
}
break;
}
}
}
/**
* 清空所有学员资料信息
*/
public void clearInfo() {
//询问用户确认清空数据
String ask;
System.out.print("危险!请再次按Y键确认清空所有学员资料,其它任意键取消:");
ask = sc.next();
if (ask.equalsIgnoreCase("Y")) {
for (int i = 0; i < name.length; i++) {
stuNum[i] = 0; //清除学号
name[i] = null; //清除姓名
sex[i] = '/u0000'; //清除性别
age[i] = 0; //清除年龄
nativePlace[i] = null; //清除籍贯
score[i][0] = 0.0d; //清除Java成绩
score[i][1] = 0.0d; //清除Html成绩
score[i][2] = 0.0d; //清除C#成绩
}
System.out.println("/n/n系统所有学员资料已成功清空!/n/n");
} else {
System.out.println("/n/n用户取消!系统所有学员资料清空失败!/n/n");
}
}
/**
* 按指定项进行数据排序
* @param field
* @param command
*/
public void SortInfo(int field, int command) {
//快速排序法
for (int index = 0; index < getRecordNum(); index++) {
for (int i = index + 1; i < getRecordNum(); i++) {
switch (field) {
case 1:
if (command == 1) {
//按学号升序排序
if (stuNum[index] > stuNum[i]) {
//调用数据排列方法
DataSort(index, i);
}
} else {
//按学号降序排序
if (stuNum[index] < stuNum[i]) {
//调用数据排列方法
DataSort(index, i);
}
}
break;
case 2:
if (command == 1) {
//按年龄升序排序
if (age[index] > age[i]) {
//调用数据排列方法
DataSort(index, i);
}
} else {
//按年龄降序排序
if (age[index] < age[i]) {
//调用数据排列方法
DataSort(index, i);
}
}
break;
case 3:
if (command == 1) {
//按Java成绩升序排序
if (score[index][0] > score[i][0]) {
//调用数据排列方法
DataSort(index, i);
}
} else {
//按Java成绩降序排序
if (score[index][0] < score[i][0]) {
//调用数据排列方法
DataSort(index, i);
}
}
break;
case 4:
if (command == 1) {
//按Html成绩升序排序
if (score[index][1] > score[i][1]) {
//调用数据排列方法
DataSort(index, i);
}
} else {
//按Html成绩降序排序
if (score[index][1] < score[i][1]) {
//调用数据排列方法
DataSort(index, i);
}
}
break;
case 5:
if (command == 1) {
//按C#成绩降序排序
if (score[index][2] > score[i][2]) {
//调用数据排列方法
DataSort(index, i);
}
} else {
//按C#成绩降序排序
if (score[index][2] < score[i][2]) {
//调用数据排列方法
DataSort(index, i);
}
}
break;
}
}
}
//给出执行结果提示
if (command == 1) {
System.out.println("/n/n升序排序成功!/n/n");
} else {
System.out.println("/n/n降序排序成功!/n/n");
}
}
/**
* 数据排列方法
*/
public void DataSort(int index, int i) {
//用于交换值的中间变量
int tmpStuNum; //学号
String tmpName; //姓名
int tmpAge; //年龄
char tmpSex; //性别
String tmpNativePlace; //籍贯
double[][] tmpScore = new double[1][3]; //三科成绩
//排列学号
tmpStuNum = stuNum[i];
stuNum[i] = stuNum[index];
stuNum[index] = tmpStuNum;
//排列姓名
tmpName = name[i];
name[i] = name[index];
name[index] = tmpName;
//排列年龄
tmpAge = age[i];
age[i] = age[index];
age[index] = tmpAge;
//排列性别
tmpSex = sex[i];
sex[i] = sex[index];
sex[index] = tmpSex;
//排列籍贯
tmpNativePlace = nativePlace[i];
nativePlace[i] = nativePlace[index];
nativePlace[index] = tmpNativePlace;
//排列Java成绩
tmpScore[0][0] = score[i][0];
score[i][0] = score[index][0];
score[index][0] = tmpScore[0][0];
//排列Html成绩
tmpScore[0][0] = score[i][1];
score[i][1] = score[index][1];
score[index][1] = tmpScore[0][0];
//排列C#成绩
tmpScore[0][0] = score[i][2];
score[i][2] = score[index][2];
score[index][2] = tmpScore[0][0];
}
/*
* 获取系统数据库常用参数
*/
/**
* 获得空白记录数量
* @return num
*/
public int getBlankRecordNum() {
//保存空白记录数量
int num = 0;
int index = 0; //数组当前空位下标
for (int i = 0; i < name.length; i++) {
if (name[i] == null) {
index++;
}
}
//仅当数组无元素空位时index的值才未发生更改
if (index == 0) {
num = 0;
} else {
num = index;
}
return num;
}
/**
* 获得记录总数
* @return num
*/
public int getRecordNum() {
//保存记录总数
int num = name.length;
return num;
}
/**
* 获得当前已存在的记录数量
* @return num
*/
public int getCurrentlyRecordNum() {
//保存当前已存在的记录数量
int num = getRecordNum() - getBlankRecordNum();
return num;
}
/**
* 验证系统数据库中是否包含指定学号对应的记录
* @param num
* @return exist
*/
public boolean searchStuNum(int num) {
//标识系统数据库中是否包含学号为num的记录
boolean exist = false;
for (int i = 0; i < name.length; i++) {
if (stuNum[i] == num) {
exist = true;
break;
}
}
return exist;
}
}
import java.util.Scanner;
/**
* 学员管理系统 系统菜单界面类
* @author 邓超
* @version 0.1 2008/06/10
*/
public class SysMenu {
//声明实例化的Scanner类对象sc
Scanner sc;
//循环标识
boolean con;
//保存菜单编号
int menuNo;
/**
* 显示系统菜单
* @return menuNo 返回菜单编号
*/
public int showMenu() {
//显示系统菜单
System.out.println("/n");
System.out.println("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
System.out.println("※ ※");
System.out.println("※ 学员管理系统 2008 ※");
System.out.println("※ ※");
System.out.println("※ CopyRight(C) 2008 GroundHog ※");
System.out.println("※ 作者: 邓超 ※");
System.out.println("※ ※");
System.out.println("※ 欢迎光临本系统!如果您有任何建议和意见,请与作者联系! ※");
System.out.println("※ ※");
System.out.println("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
System.out.println();
System.out.println(" 1、添加资料 2、浏览资料 ");
System.out.println(" 3、修改资料 4、删除资料 ");
System.out.println(" 5、查询资料 6、资料排序 ");
System.out.println(" 7、清空资料 8、退出系统 ");
System.out.println();
//循环处理用户输入
do {
con = false;
System.out.print("请选择:");
//选择正确的菜单编号就跳出循环输入
try {
sc = new Scanner(System.in);
menuNo = sc.nextInt();
} catch (Exception e){
System.out.println("无效的菜单选择,请重新输入!");
con = true;
continue;
}
if (menuNo < 1 || menuNo > 8) {
System.out.println("菜单编号只能为1~8,请重新输入!");
con = true;
}
} while (con);
//返回菜单编号
return menuNo;
}
/**
* 显示查询资料菜单
* @return menuNo 返回菜单编号
*/
public int showSearchMenu() {
//显示系统菜单
System.out.println("/n");
System.out.println("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
System.out.println("※ ※");
System.out.println("※ 学员管理系统 2008 ※");
System.out.println("※ ※");
System.out.println("※ 查询资料 ※");
System.out.println("※ ※");
System.out.println("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
System.out.println();
System.out.println(" 1、按学号查询 2、按姓名查询 ");
System.out.println(" 3、按性别查询 4、按年龄查询 ");
System.out.println(" 5、按籍贯查询 6、返回上一级 ");
System.out.println();
//循环处理用户输入
do {
con = false;
System.out.print("请选择:");
//选择正确的菜单编号就跳出循环输入
try {
sc = new Scanner(System.in);
menuNo = sc.nextInt();
} catch (Exception e){
System.out.println("无效的菜单选择,请重新输入!");
con = true;
continue;
}
if (menuNo < 1 || menuNo > 6) {
System.out.println("菜单编号只能为1~6,请重新输入!");
con = true;
}
} while (con);
//返回菜单编号
return menuNo;
}
/**
* 显示查询资料菜单
* @return menuNo 返回菜单编号
*/
public int showSortMenu() {
//显示系统菜单
System.out.println("/n");
System.out.println("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
System.out.println("※ ※");
System.out.println("※ 学员管理系统 2008 ※");
System.out.println("※ ※");
System.out.println("※ 资料排序 ※");
System.out.println("※ ※");
System.out.println("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
System.out.println();
System.out.println(" 1、按学号排序 2、按年龄排序 ");
System.out.println(" 3、按Java成绩排序 4、按Html成绩排序 ");
System.out.println(" 5、按 C# 成绩排序 6、返回上一级 ");
System.out.println();
//循环处理用户输入
do {
con = false;
System.out.print("请选择:");
//选择正确的菜单编号就跳出循环输入
try {
sc = new Scanner(System.in);
menuNo = sc.nextInt();
} catch (Exception e){
System.out.println("无效的菜单选择,请重新输入!");
con = true;
continue;
}
if (menuNo < 1 || menuNo > 6) {
System.out.println("菜单编号只能为1~6,请重新输入!");
con = true;
}
} while (con);
//返回菜单编号
return menuNo;
}
/**
* 显示系统退出界面
*/
public void showExit() {
//显示系统退出界面
System.out.println("/n");
System.out.println("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
System.out.println("※ ※");
System.out.println("※ 学员管理系统 2008 ※");
System.out.println("※ ※");
System.out.println("※ CopyRight(C) 2008 GroundHog ※");
System.out.println("※ 作者: 邓超 ※");
System.out.println("※ ※");
System.out.println("※ 谢谢使用!欢迎再次光临本系统! ※");
System.out.println("※ ※");
System.out.println("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
}
}
import java.util.Scanner;
/**
* 学员管理系统 菜单功能执行类
* @author 邓超
* @version 0.1 2008/06/10
*/
public class Execute {
//实例化Scanner类
Scanner sc = new Scanner(System.in);
//实例化StuInfo类
StuInfo si = new StuInfo();
//实例化SysMenu类
SysMenu sm = new SysMenu();
/**
* 构造方法
* 处理用户选择菜单后执行对应功能
*/
public Execute() {
//保存用户选择的菜单编号
int menuNo;
//保存用户输入
String answer;
//循环标识
boolean con, ask;
//系统数据初始化(仅用于测试)
si.initial();
//循环处理用户输入
do {
con = true;
//嵌套调用showMenu()方法
menuNo = sm.showMenu();
//根据showMenu()方法返回的整型菜单编号执行对应的菜单功能
switch (menuNo) {
case 1:
new InputData(si);
break;
case 2:
si.showInfo(0, 0, null, '/u0000', 0, null);
System.out.println("资料浏览完成!");
break;
case 3:
if (si.getCurrentlyRecordNum() == 0) {
System.out.println("/n/n系统数据库内还没有任何资料,请先添加资料!");
new InputData(si);
} else {
//实例化ModifyData类
new ModifyData(si);
}
break;
case 4:
if (si.getCurrentlyRecordNum() == 0) {
System.out.println("/n/n系统数据库内还没有任何资料,请先添加资料!");
new InputData(si);
} else {
//实例化DeleData类
new DeleData(si);
}
break;
case 5:
if (si.getCurrentlyRecordNum() == 0) {
System.out.println("/n/n系统数据库内还没有任何资料,请先添加资料!");
new InputData(si);
} else {
do {
ask = false;
menuNo = sm.showSearchMenu();
//实例化SearchData类
new SearchData(si, menuNo);
//询问用户是否继续
System.out.print("按Y键返回查询资料菜单,其它任意键返回主菜单:");
answer = sc.next();
if (answer.equalsIgnoreCase("Y")) {
ask = true;
}
} while (ask);
}
break;
case 6:
if (si.getCurrentlyRecordNum() == 0) {
System.out.println("/n/n系统数据库内还没有任何资料,请先添加资料!");
new InputData(si);
} else {
do {
ask = false;
menuNo = sm.showSortMenu();
//实例化SortData类
new SortData(si, menuNo);
//询问用户是否继续
System.out.print("按Y键继续对学员资料排序,其它任意键返回主菜单:");
answer = sc.next();
if (answer.equalsIgnoreCase("Y")) {
ask = true;
}
} while (ask);
}
break;
case 7:
if (si.getCurrentlyRecordNum() == 0) {
System.out.println("/n/n系统数据库内还没有任何资料,请先添加资料!");
new InputData(si);
} else {
//实例化ClearData类
new ClearData(si);
}
break;
case 8:
System.out.print("/n/n真的要退出本系统吗?按Y键确认退出,按N键重新加载测试数据,或按其它任意键返回:");
answer = sc.next();
if (answer.equalsIgnoreCase("Y")) {
sm.showExit();
/*
* 如果不使用循环标识,而采用永真循环,
* 则可使用以下方法退出程序:
* 终止当前正在运行的Java虚拟机
* System.exit(0);
*/
con = false;
} else if (answer.equalsIgnoreCase("N")){
//系统数据初始化(仅用于测试)
si.initial();
}
break;
}
} while (con);
}
}
import java.util.Scanner;
/**
* 学员管理系统 录入数据验证类
* @author 邓超
* @version 0.1 2008/06/10
*/
public class InputData {
//声明实例化的Scanner类对象sc
Scanner sc;
//迭代变量
int i, j;
//循环标识
boolean con;
//保存字符串型性别
String stringSex;
/**
* 构造方法
* @param si 学员信息类StuInfo的实例化对象
*/
public InputData(StuInfo si) {
//循环标识
boolean con;
//保存当前要批量添加的整型人数
int peopleSum = 0;
//处理人数输入
do {
con = false;
System.out.print("/n/n请输入要录入的人数(输入数字“0”中止,当前最大可录入人数为:" + si.getBlankRecordNum() + "):");
try {
sc = new Scanner(System.in);
peopleSum = sc.nextInt();
} catch (Exception e){
System.out.println("人数必须为整数,请重新输入!");
con = true;
continue;
}
//输入正确的人数就跳出循环输入
if (peopleSum <= si.getBlankRecordNum()) {
if (peopleSum != 0) {
//调用AddDataValidate()方法
AddDataValidate(si, peopleSum);
} else {
System.out.println("/n/n添加资料任务中止!/n/n");
}
con = false;
} else {
System.out.println();
if (si.getBlankRecordNum() > 0) {
System.out.println("●●●●●●●●●●●●●●●●●●●●●●●●●");
System.out.println("●/t最大容量:" + si.getRecordNum() + "/t●");
System.out.println("●/t已占空间:" + si.getCurrentlyRecordNum() + "/t●");
System.out.println("●/t可用空间:" + si.getBlankRecordNum() + "/t●");
System.out.println("●●●●●●●●●●●●●●●●●●●●●●●●●");
System.out.println("/n/n数据库可用空间不足,请按提示重新输入!");
con = true;
} else {
System.out.println("/n抱歉!系统数据库已满,不能再添加新的资料!/n/n");
con = false;
}
}
} while (con);
}
/**
* 学员资料信息输入验证
* @param si
* @param peopleSum
*/
public void AddDataValidate(StuInfo si, int peopleSum) {
int[] stuNum; //学号
String[] name; //姓名
char[] sex; //性别
int[] age; //年龄
String[] nativePlace; //籍贯
double[][] score; //三科成绩
//根据录入的人数确定数组元素个数
stuNum = new int[peopleSum];
name = new String[peopleSum];
sex = new char[peopleSum];
age = new int[peopleSum];
nativePlace = new String[peopleSum];
score = new double[peopleSum][3];
for (i = 0; i < peopleSum; i++) {
System.out.println("/n第" + (i + 1) + "个学员:");
//处理学号输入
do {
con = false;
System.out.print("学号(前导0将被忽略):");
try {
sc = new Scanner(System.in);
stuNum[i] = sc.nextInt();
} catch (Exception e){
System.out.println("学号必须为整数,请重新输入!");
con = true;
continue;
}
//输入正确的年龄就跳出循环输入
if (stuNum[i] >= 1 && stuNum[i] <= 100) {
//验证系统数据库中是否相同学号的记录
if (si.searchStuNum(stuNum[i])) {
System.out.println("学号为" + stuNum[i] + "的资料已经存在,请重新输入!");
con = true;
} else {
for (j = 0; j < peopleSum; j++) {
if (stuNum[i] == stuNum[j] && i != j) {
System.out.println("您刚已录入了学号为" + stuNum[i] + "的资料,请重新输入!");
con = true;
break;
}
con = false;
}
}
} else {
System.out.println("学号只能为1~100,请重新输入!");
con = true;
}
} while (con);
//处理姓名输入
System.out.print("姓名:");
name[i] = sc.next();
//处理性别输入
do {
con = false;
System.out.print("性别(男/女):");
stringSex = sc.next();
if (!stringSex.equals("男") && !stringSex.equals("女")) {
System.out.println("性别只能为“男”或“女”,请重新输入!");
con = true;
} else {
sex[i] = stringSex.charAt(0);
}
} while (con);
//处理年龄输入
do {
con = false;
System.out.print("年龄:");
try {
sc = new Scanner(System.in);
age[i] = sc.nextInt();
} catch (Exception e){
System.out.println("年龄必须为整数,请重新输入!");
con = true;
continue;
}
//输入正确的年龄就跳出循环输入
if (age[i] < 16 || age[i] > 25) {
System.out.println("年龄只能为16~25岁,请重新输入!");
con = true;
}
} while (con);
//处理籍贯输入
System.out.print("籍贯:");
nativePlace[i] = sc.next();
//处理Java成绩输入
do {
con = false;
System.out.print("Java成绩:");
try {
sc = new Scanner(System.in);
score[i][0] = sc.nextDouble();
} catch (Exception e){
System.out.println("Java成绩必须为数值,请重新输入!");
con = true;
continue;
}
//输入正确的成绩就跳出循环输入
if (score[i][0] < 0 || score[i][0] > 100) {
System.out.println("Java成绩只能为0~100,请重新输入!");
con = true;
}
} while (con);
//处理Html成绩输入
do {
con = false;
System.out.print("Html成绩:");
try {
sc = new Scanner(System.in);
score[i][1] = sc.nextDouble();
} catch (Exception e){
System.out.println("Html成绩必须为数值,请重新输入!");
con = true;
continue;
}
//输入正确的成绩就跳出循环输入
if (score[i][1] < 0 || score[i][1] > 100) {
System.out.println("Html成绩只能为0~100,请重新输入!");
con = true;
}
} while (con);
//处理C#成绩输入
do {
con = false;
System.out.print("C#成绩:");
try {
sc = new Scanner(System.in);
score[i][2] = sc.nextDouble();
} catch (Exception e){
System.out.println("C#成绩必须为数值,请重新输入!");
con = true;
continue;
}
//输入正确的成绩就跳出循环输入
if (score[i][2] < 0 || score[i][2] > 100) {
System.out.println("C#成绩只能为0~100,请重新输入!");
con = true;
}
} while (con);
}
//将合法的资料添加到系统数据库
si.addInfo(stuNum, name, sex, age, nativePlace, score);
}
}
import java.util.Scanner;
/**
* 学员管理系统 修改数据验证类
* @author 邓超
* @version 0.1 2008/06/10
*/
public class ModifyData {
//实例化Scanner类
Scanner sc;
/**
* 构造方法
* @param si
*/
public ModifyData(StuInfo si) {
int stuNum = 0; //学号
String name = null; //姓名
char sex = '/u0000'; //性别
int age = 0; //年龄
String nativePlace = null; //籍贯
double[][] score = new double[1][3]; //成绩
//询问用户是否继续
String keepOn;
//接受用户选择的菜单编号
int menuNo = 0;
//循环标识
boolean con, all;
//保存字符串型性别
String stringSex;
//保存用户输入
String answer;
/*
* 根据输入的学号确定修改的记录
* 后再决定是否继续让用户输入
*/
//处理学号输入
do {
con = false;
all = false;
System.out.print("/n/n请输入要修改资料的学号(输入数字“0”中止,前导0将被忽略):");
try {
sc = new Scanner(System.in);
stuNum = sc.nextInt();
} catch (Exception e){
System.out.println("学号必须为整数,请重新输入!");
con = true;
continue;
}
//输入正确的年龄就跳出循环输入
if (stuNum >= 1 && stuNum <= 100) {
//验证系统数据库中是否相同学号的记录
if (!si.searchStuNum(stuNum)) {
System.out.println("没有学号为" + stuNum + "的资料,请重新输入!");
con = true;
}
} else {
if (stuNum != 0) {
System.out.println("学号只能为1~100,请重新输入!");
con = true;
} else {
all = true;
}
}
} while (con);
if (!all) {
si.showInfo(1, stuNum, null, '/u0000', 0, null);
System.out.print("是否继续修改以上资料?(按Y键继续,其它任意键取消):");
keepOn = sc.next();
if (keepOn.equalsIgnoreCase("Y")) {
do {
all = false;
//选择要修改的内容
System.out.println("仅有如下内容可供修改:");
System.out.println("1、姓名 2、性别 3、年龄 4、籍贯 5、Java成绩 6、Html成绩 7、C#成绩");
System.out.print("请选择要修改的内容:");
//处理选择输入异常
try {
sc = new Scanner(System.in);
menuNo = sc.nextInt();
} catch (Exception e) {
System.out.println("/n只能输入整数菜单编号,请重新输入!/n");
all = true;
continue;
}
if (menuNo < 1 || menuNo > 7) {
System.out.println("/n菜单编号只能为1~7,请重新输入!/n");
all = true;
continue;
}
switch (menuNo) {
case 1:
//处理姓名输入
System.out.print("姓名:");
name = sc.next();
break;
case 2:
//处理性别输入
do {
con = false;
System.out.print("性别(男/女):");
stringSex = sc.next();
if (!stringSex.equals("男") && !stringSex.equals("女")) {
System.out.println("性别只能为“男”或“女”,请重新输入!");
con = true;
} else {
sex = stringSex.charAt(0);
}
} while (con);
break;
case 3:
//处理年龄输入
do {
con = false;
System.out.print("年龄:");
try {
sc = new Scanner(System.in);
age = sc.nextInt();
} catch (Exception e){
System.out.println("年龄必须为整数,请重新输入!");
con = true;
continue;
}
//输入正确的年龄就跳出循环输入
if (age < 16 || age > 25) {
System.out.println("年龄只能为16~25岁,请重新输入!");
con = true;
}
} while (con);
break;
case 4:
//处理籍贯输入
System.out.print("籍贯:");
nativePlace = sc.next();
break;
case 5:
//处理Java成绩输入
do {
con = false;
System.out.print("Java成绩:");
try {
sc = new Scanner(System.in);
score[0][0] = sc.nextDouble();
} catch (Exception e){
System.out.println("Java成绩必须为整数,请重新输入!");
con = true;
continue;
}
//输入正确的成绩就跳出循环输入
if (score[0][0] < 0 || score[0][0] > 100) {
System.out.println("Java成绩只能为0~100,请重新输入!");
con = true;
}
} while (con);
break;
case 6:
//处理Html成绩输入
do {
con = false;
System.out.print("Html成绩:");
try {
sc = new Scanner(System.in);
score[0][1] = sc.nextDouble();
} catch (Exception e){
System.out.println("Html成绩必须为整数,请重新输入!");
con = true;
continue;
}
//输入正确的成绩就跳出循环输入
if (score[0][1] < 0 || score[0][1] > 100) {
System.out.println("Html成绩只能为0~100,请重新输入!");
con = true;
}
} while (con);
break;
case 7:
//处理C#成绩输入
do {
con = false;
System.out.print("C#成绩:");
try {
sc = new Scanner(System.in);
score[0][2] = sc.nextDouble();
} catch (Exception e){
System.out.println("C#成绩必须为整数,请重新输入!");
con = true;
continue;
}
//输入正确的成绩就跳出循环输入
if (score[0][2] < 0 || score[0][2] > 100) {
System.out.println("C#成绩只能为0~100,请重新输入!");
con = true;
}
} while (con);
break;
}
//用合法的资料修改系统数据库
si.modifyInfo(menuNo, stuNum, name, sex, age, nativePlace, score);
System.out.print("按Y键继续修改学号为" + stuNum + "的学员资料,其它任意键返回主菜单:");
answer = sc.next();
if (answer.equalsIgnoreCase("Y")) {
all = true;
}
} while (all);
} else {
System.out.println("/n/n修改资料任务中止!/n/n");
}
} else {
System.out.println("/n/n修改资料任务中止!/n/n");
}
}
}
import java.util.Scanner;
/**
* 学员管理系统 删除数据验证类
* @author 邓超
* @version 0.1 2008/06/10
*/
public class DeleData {
//声明实例化的Scanner类对象sc
Scanner sc;
/**
* 构造方法
* @param si
*/
public DeleData(StuInfo si) {
//学号
int stuNum = 0;
//循环标识
boolean con, all;
/*
* 根据输入的学号确定删除的记录
*/
//处理学号输入
do {
con = false;
all = false;
System.out.print("/n/n请输入要删除资料的学号(输入数字“0”中止,前导0将被忽略):");
try {
sc = new Scanner(System.in);
stuNum = sc.nextInt();
} catch (Exception e){
System.out.println("学号必须为整数,请重新输入!");
con = true;
continue;
}
//输入正确的年龄就跳出循环输入
if (stuNum >= 1 && stuNum <= 100) {
//验证系统数据库中是否相同学号的记录
if (!si.searchStuNum(stuNum)) {
System.out.println("没有学号为" + stuNum + "的资料,请重新输入!");
con = true;
}
} else {
if (stuNum != 0) {
System.out.println("学号只能为1~100,请重新输入!");
con = true;
} else {
all = true;
}
}
} while (con);
if (!all) {
si.deleInfo(stuNum);
} else {
System.out.println("/n/n删除资料任务中止!/n/n");
}
}
}
import java.util.Scanner;
/**
* 学员管理系统 查询数据验证类
* @author 邓超
* @version 0.1 2008/06/10
*/
public class SearchData {
//实例化Scanner类
Scanner sc = new Scanner(System.in);
//迭代变量
int i, j;
//循环标识
boolean con;
//保存字符串型性别
String stringSex;
/**
* 构造方法
* @param si
* @param menuNo
*/
public SearchData(StuInfo si, int menuNo) {
int stuNum = 0; //学号
String name = null; //姓名
char sex = '/u0000'; //性别
int age = 0; //年龄
String nativePlace = null; //籍贯
//输出换行
System.out.println("/n");
//根据showMenu()方法返回的整型菜单编号执行对应的菜单功能
switch (menuNo) {
case 1:
//处理学号输入
do {
con = false;
System.out.print("请输入要查询的学员学号(前导0将被忽略):");
try {
sc = new Scanner(System.in);
stuNum = sc.nextInt();
} catch (Exception e){
System.out.println("学号必须为整数,请重新输入!");
con = true;
continue;
}
//输入正确的年龄就跳出循环输入
if (stuNum >= 1 && stuNum <= 100) {
//验证系统数据库中是否相同学号的记录
if (!si.searchStuNum(stuNum)) {
System.out.println("没有学号为" + stuNum + "的资料,请重新输入!");
con = true;
} else {
con = false;
}
} else {
System.out.println("学号只能为1~100,请重新输入!");
con = true;
}
} while (con);
si.showInfo(1, stuNum, null, '/u0000', 0, null);
break;
case 2:
//处理姓名输入
System.out.print("请输入要查询的学员姓名:");
name = sc.next();
si.showInfo(2, 0, name, '/u0000', 0, null);
break;
case 3:
//处理性别输入
do {
con = false;
System.out.print("请输入要查询的学员性别(男/女):");
stringSex = sc.next();
if (!stringSex.equals("男") && !stringSex.equals("女")) {
System.out.println("性别只能为“男”或“女”,请重新输入!");
con = true;
} else {
sex = stringSex.charAt(0);
}
} while (con);
si.showInfo(3, 0, null, sex, 0, null);
break;
case 4:
//处理年龄输入
do {
con = false;
System.out.print("请输入要查询的学员年龄:");
try {
sc = new Scanner(System.in);
age = sc.nextInt();
} catch (Exception e){
System.out.println("年龄必须为整数,请重新输入!");
con = true;
continue;
}
//输入正确的年龄就跳出循环输入
if (age < 16 && age > 25) {
System.out.println("年龄只能为16~25岁,请重新输入!");
con = true;
}
} while (con);
si.showInfo(4, 0, null, '/u0000', age, null);
break;
case 5:
//处理籍贯输入
System.out.print("请输入要查询的学员籍贯:");
nativePlace = sc.next();
si.showInfo(5, 0, null, '/u0000', 0, nativePlace);
break;
case 6:
break;
}
}
}
import java.util.Scanner;
/**
* 学员管理系统 进行数据排序类
* @author 邓超
* @version 0.1 2008/06/10
*/
public class SortData {
//声明实例化的Scanner类对象sc
Scanner sc;
//循环标识
boolean con;
//保存排序次序标识
int ascAndDisc;
/**
* 构造方法
* @param si
* @param menuNo
*/
public SortData(StuInfo si, int menuNo) {
//当用户没有选择“返回上一级”菜单项时
if (menuNo != 6) {
do {
con = false;
System.out.print("请选择排序方式(1、升序排序 2、降序排序):");
try {
sc = new Scanner(System.in);
ascAndDisc = sc.nextInt();
} catch (Exception e) {
System.out.println("只能选择1~2,请重新输入!");
con = true;
continue;
}
} while (con);
//调用资料排序方法
si.SortInfo(menuNo, ascAndDisc);
}
}
}
import java.util.Scanner;
/**
* 学员管理系统 清空数据验证类
* @author 邓超
* @version 0.1 2008/06/10
*/
public class ClearData {
//实例化的Scanner类
Scanner sc = new Scanner(System.in);
/**
* 构造方法
* @param si
*/
public ClearData(StuInfo si) {
//询问用户是否继续清空数据
String answer;
/*
* 根据输入的学号确定清空的记录
*/
System.out.println("/n/n警告!真的要清空所有学员资料吗?清空资料后所有数据无法恢复!");
System.out.print("按Y键继续执行,或按其它任意键返回:");
answer = sc.next();
if (answer.equalsIgnoreCase("Y")) {
//调用清空资料方法
si.clearInfo();
} else {
System.out.println("/n/n清空资料任务中止!/n/n");
}
}
}