/**
* 学员管理系统 程序入口类
* @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"); } } }