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