用Java编写
1. 将所有学生的课程成绩保留在一个二维数组中,每一行代表一个学生的成绩,每一列代表一门课程的成绩;将每门课程的名称保留在一个一维数组中(课程的下标序号与二维数组的列号匹配);将每个学生的姓名保留在一个一维数组中(学生的下标序号与二维数组的行号匹配);要求编写程序实现成绩的查询,要求程序运行时从命令行输入统计命令及参数,程序则输出结果,例如:AVGCOU corejava:统计课程corejava的平均分。
AVGSTU 张三:统计学生张三的平均分。
SORT sum:列出总分的排序。
SORT corejava:列出corejava课程的成绩的排序。
SUM 张三:统计学生张三的总分。
GET 张三 corejava:统计张三的corejava课程的成绩。
BREAK : 退出。
追问:java.io 通过数据流、序列化和文件系统提供系统输入和输出这个我还是查API知道的
刚学没多长时间了还
我现在用简单的Scanner做出来了
不过谢谢了
答案:我试着写了一下,功能还不完善;照我看来这个小项目完全可以进行简单数据库编写,你可以下去仔细琢磨,我由于时间问题就不把功能一一做出来,不过我相信你看了我的代码,自己一定会写出来剩下的那部分。好好对待,什么都怕钻研,只要肯钻研,臭皮匠也能给诸葛亮当师傅。祝你愉快,以下代码没有做异常捕获,你自己做,不会再问我。package dazzleCN.jyz.calc;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import sun.security.x509.AVA;
public class Test {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
String studentName[] = { "zhangsan", "lisi" }; // 定义一个表示学生姓名的一维数组
String subjectName[] = { "chinese", "math", "english" };// 定义一个表示课程民称的一维数组
int score[][] = { { 90, 91, 93 }, { 81, 81, 84 } }; // 定义一个表示学生课程成绩的二维数组
/*-------这上边是一些预定义变量,下边为读取控制台输入-------------*/
System.out.println("程序支持的查询的关键字有--------avgcou(平均)、sum(求和),只支持关键字全大写或全小写");
//这里更具你程序的扩大可以适当增加
InputStreamReader streamReader = new InputStreamReader(System.in);
// 获取输入流
BufferedReader bufferedReader = new BufferedReader(streamReader);
// 得到一个读取器
String inputContent = ""; // 定义一个表示输入内容的字符串
/*-------------这里开始把控制台输入内容进行判断计算,也就是主题算法-------------*/
while ((inputContent = bufferedReader.readLine()) != null) {
// 判断读取器读取下一行是否为空
System.out.println("您的输入内容为--->" + inputContent);
//提示用户语句
if (inputContent.lastIndexOf("AVGCOU") != -1 || inputContent.lastIndexOf("avgcou") != -1) {
//如果方法为平均则开始下边计算
String studentNameOrsubjectName = inputContent.substring(6);
//截取avgcou后边的内容
studentNameOrsubjectName = studentNameOrsubjectName.trim();
//去除空格
System.out.println("您要查询的学生或课程为---->"
+ studentNameOrsubjectName); //用户提示信息
for (int i = 0; i < studentName.length; i++) { // 同下
if (studentName[i].equals(studentNameOrsubjectName)) {
// 判断程序使用者是不是要查询学生
double avgScore = avgArray(score[i]); // 这里把第i个学生的成绩传入计算方法
System.out.println("您要查询的学生平均分为---->" + avgScore);
}
}
for (int i = 0; i < subjectName.length; i++) { // 同下
if (subjectName[i].equals(studentNameOrsubjectName)) {
// 判断程序使用者是不是要查询课程
double avg = sumArrayRow(score)[i]/studentName.length;
System.out.println(avg);
}
}
}
if(inputContent.lastIndexOf("SUM") != -1 || inputContent.lastIndexOf("sum") != -1){
//如果方法为求和则开始下边计算
System.out.println("程序此方法待完善");
}
}
}
/**
* 把二维数组每列的和放入一个一维数组返回
* @param array
* @return
*/
public static double[] sumArrayRow(int array[][]){
double arrayEveryRowSum[] = {0,0,0}; //定义一个存放每列总和的数组,这里和课程列数要匹配,否则会报空指针异常
for(int i = 0; i < array.length; i++ ){ //得出行为i
for(int j = 0; j < array[i].length; j++){ //得出列为j
arrayEveryRowSum[j] = array[i][j] + arrayEveryRowSum[j];
//对第i行第j列的数据进行操作
}
}
return arrayEveryRowSum; //把各列的总和返回
}
/**
* 这个方法为查询数组一行的平均分,可用于一维数组和二维数组
* @param array
* @return
*/
public static double avgArray(int array[]) {
int countarray = 0; // 定义一个表示数组元素总和的int数
for (int i = 0; i < array.length; i++) {
countarray = array[i] + countarray; // 把当前数组元素的值加到countarray中
}
double arraylength = array.length; // 把数组元素总数转换为double类型
return countarray / arraylength; // 用countarray除以数组元素个数的出平均数返回
}
}
class Scores{ int math; int physics; //… //and so on public int getSum(){ return math+physics /*+…*/; } } class Student{ String name; int number; Scores score=new Scores(); } 把学生封装成类多方便? 干吗要那样呢?
java是面向对象的语言,推荐象楼上说的封装成对象,很方便。。。楼上大致思路已经讲了,新手还是推荐多看下java的API
上一个:JAVA问题
下一个:java简介