现在的位置: 首页 > 综合 > 正文

Java项目之学员管理系统

2013年08月29日 ⁄ 综合 ⁄ 共 26553字 ⁄ 字号 评论关闭
/**

 * 学员管理系统 程序入口类

 * @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");

		}

	}

}

抱歉!评论已关闭.