软件工程第一次测试——学生管理系统设计
系统简介:
该系统完成学生成绩录入,修改,绩点计算以及查询学生成绩的简单操作
设计思路:
程序分为四大部分:成绩录入,成绩修改,绩点计算以及退出程序
成绩录入之前首先输入学号并验证是否存在,存在则继续输入并刷新屏幕,不存在则打印提示信息
这里定义输入学号并验证的方法,返回值为布尔值,根据返回值使用if判断是否继续
将每一次输入打印封装成一个方法,即,每进行一次输入,更新一次屏幕
最后封装一个是否保存输入的方法,即,用户输入Y则保存并返回true,输入N则不保存并返回false
保存的实现是总量total+1,不保存,即不加1即可
根据返回的true或false写入while循环条件,即可实现页面的返回地点
成绩修改之前同成绩输入一样,首先输入学号并验证是否存在,存在则继续刷新屏幕,不存在则打印提示信息
这里定义输入学号并验证的方法,返回值为学号对应信息所在数组中的位置(索引)
索引的功能是后续各方法分开实现可以通过索引获取相应的成绩信息
为每个科目定义修改成绩的方法
定义全局变量用来存储旧的成绩(每次只能修改一个成绩所以定义一个全局变量即可),并在每个修改成绩的方法里在更新其新成绩前给全局变量赋值为旧成绩
旧成绩是当用户输入N,不提交保存结果时,用来将旧值再赋给原来成绩时用到的
将每个修改成绩的方法通过输入的序号操作用switch语句集合起来,方法的返回值flag为输入的序号(这样可以记录修改的是哪一条科目,为后续不保存的行为做准备)
定义是否保存函数,参数为刚刚提到的flag即id的index,根据用户输入的Y或N判断是否保存,若Y,则不进行其他操作,若N,则将旧值set给flag标注的科目,方法返回值为Boolean型
将该方法置于while条件中用来控制页面的跳转位置
绩点计算之前也要输入学号并验证是否存在,存在则继续刷新屏幕,不存在则打印提示信息
定义输入学号并验证的方法,返回值为学号对应信息所在数组中的位置(索引)
判断存在之后使用showpoint方法根据索引打印相应信息
if elseif else条件语句用来定义绩点的值,将其封装为getpoint方法,参数为科目成绩
将showpoint方法返回值类型设为Boolean,将其作为if的条件控制是否停留在当前页面
退出系统功能较简单,这里使用system.exit(-1)方法强制结束程序,并将打印结束页面的功能一同封装为一个方法
ScoreManagement类源码:
1 package stu.information.com; 2 3 import java.util.Scanner; 4 5 6 public class ScoreManagement { 7 static String[] id_list= {"20183727","20183333","20183334","20183335","20183336"}; 8 static String[] name_list= {"赵世元","张三","李四","王五","李华"}; 9 static ScoreInformation[] si_list=new ScoreInformation[10]; 10 static int total=0; 11 static double oldscore; 12 static Scanner scanner = new Scanner(System.in); 13 //打印主界面导航 14 public static void showMainNav() { 15 System.out.println("*******************************************************"); 16 System.out.println(" 石家庄铁道大学软件工程系"); 17 System.out.println(" 学生学籍管理系统2019版"); 18 System.out.println("*******************************************************"); 19 System.out.println(" 1、学生考试成绩录入"); 20 System.out.println(" 2、学生考试成绩修改"); 21 System.out.println(" 3、计算学生成绩绩点"); 22 System.out.println(" 4、退出学籍管理系统"); 23 System.out.println("*******************************************************"); 24 } 25 26 //判断学号是否存在 27 public static int isIdExist(String a) { 28 for(int i=0;i<id_list.length;i++) 29 { 30 if(id_list[i].equals(a)) 31 return i; 32 } 33 return -1; 34 } 35 36 //录入学号 37 public static boolean addScoreInformation() { 38 System.out.print("请输入学生学号:"); 39 String stu_id=scanner.next(); 40 if(isIdExist(stu_id)==-1) 41 { 42 System.out.println("该学号不存在!"); 43 //Runtime.getRuntime().exec("cmd /c start cls "); 44 return false; 45 } 46 else 47 { 48 si_list[total]=new ScoreInformation(); 49 si_list[total].setStunumber(stu_id); 50 si_list[total].setName(name_list[isIdExist(stu_id)]); 51 System.out.println("*******************************************************"); 52 return true; 53 } 54 } 55 56 //录入高数成绩 57 public static void addScoreInformation_second() { 58 System.out.print("学生学号:"); 59 System.out.println(si_list[total].getStunumber()); 60 System.out.print("学生姓名:"); 61 System.out.println(si_list[total].getName()); 62 System.out.print("请输入高等数学成绩:"); 63 double math=scanner.nextDouble(); 64 si_list[total].setMathematicsscore(math); 65 System.out.println("*******************************************************"); 66 } 67 68 //录入大英成绩 69 public static void addScoreInformation_third() { 70 System.out.print("学生学号:"); 71 System.out.println(si_list[total].getStunumber()); 72 System.out.print("学生姓名:"); 73 System.out.println(si_list[total].getName()); 74 System.out.print("高等数学成绩:"); 75 System.out.println(si_list[total].getMathematicsscore()); 76 System.out.print("请输入大学英语成绩:"); 77 double english=scanner.nextDouble(); 78 si_list[total].setEnglishscore(english); 79 System.out.println("*******************************************************"); 80 } 81 82 //录入计算机网络成绩 83 public static void addScoreInformation_forth() { 84 System.out.print("学生学号:"); 85 System.out.println(si_list[total].getStunumber()); 86 System.out.print("学生姓名:"); 87 System.out.println(si_list[total].getName()); 88 System.out.print("高等数学成绩:"); 89 System.out.println(si_list[total].getMathematicsscore()); 90 System.out.print("大学英语成绩:"); 91 System.out.println(si_list[total].getEnglishscore()); 92 System.out.print("请输入计算机网络成绩:"); 93 double net=scanner.nextDouble(); 94 si_list[total].setNetworkscore(net); 95 System.out.println("*******************************************************"); 96 } 97 98 //录入数据库成绩 99 public static void addScoreInformation_fifth() { 100 System.out.print("学生学号:"); 101 System.out.println(si_list[total].getStunumber()); 102 System.out.print("学生姓名:"); 103 System.out.println(si_list[total].getName()); 104 System.out.print("高等数学成绩:"); 105 System.out.println(si_list[total].getMathematicsscore()); 106 System.out.print("大学英语成绩:"); 107 System.out.println(si_list[total].getEnglishscore()); 108 System.out.print("计算机网络成绩:"); 109 System.out.println(si_list[total].getNetworkscore()); 110 System.out.print("请输入数据库成绩:"); 111 double database=scanner.nextDouble(); 112 si_list[total].setDatabasescore(database); 113 System.out.println("*******************************************************"); 114 } 115 116 //录入软件工程成绩 117 public static void addScoreInformation_sixth() { 118 System.out.print("学生学号:"); 119 System.out.println(si_list[total].getStunumber()); 120 System.out.print("学生姓名:"); 121 System.out.println(si_list[total].getName()); 122 System.out.print("高等数学成绩:"); 123 System.out.println(si_list[total].getMathematicsscore()); 124 System.out.print("大学英语成绩:"); 125 System.out.println(si_list[total].getEnglishscore()); 126 System.out.print("计算机网络成绩:"); 127 System.out.println(si_list[total].getNetworkscore()); 128 System.out.print("数据库成绩:"); 129 System.out.println(si_list[total].getDatabasescore()); 130 System.out.print("请输入软件工程成绩:"); 131 double software=scanner.nextDouble(); 132 si_list[total].setSoftwarescore(software); 133 System.out.println("*******************************************************"); 134 } 135 136 //打印是否提交提示信息 137 public static void addScoreInformation_seventh() { 138 System.out.print("学生学号:"); 139 System.out.println(si_list[total].getStunumber()); 140 System.out.print("学生姓名:"); 141 System.out.println(si_list[total].getName()); 142 System.out.print("高等数学成绩:"); 143 System.out.println(si_list[total].getMathematicsscore()); 144 System.out.print("大学英语成绩:"); 145 System.out.println(si_list[total].getEnglishscore()); 146 System.out.print("计算机网络成绩:"); 147 System.out.println(si_list[total].getNetworkscore()); 148 System.out.print("数据库成绩:"); 149 System.out.println(si_list[total].getDatabasescore()); 150 System.out.print("软件工程成绩:"); 151 System.out.println(si_list[total].getSoftwarescore()); 152 System.out.println("该学生成绩已录入完毕,是否提交?Y/N"); 153 154 } 155 156 //是否保存录入内容 157 public static boolean isSaveAdd() 158 { 159 String flag=scanner.next(); 160 if(flag.equals("Y")) 161 { 162 total++; 163 return true; 164 } 165 else if(flag.equals("N")) 166 { 167 System.out.println("提交操作已取消!"); 168 } 169 return false; 170 } 171 172 //录入信息模块标题 173 public static void showAddNav() { 174 System.out.println("*******************************************************"); 175 System.out.println(" 石家庄铁道大学软件工程系学生学籍管理系统2019版"); 176 System.out.println(" 学生考试成绩录入"); 177 System.out.println("*******************************************************"); 178 } 179 180 //测试打印所有 181 public static void showall() { 182 for(int i=0;i<total;i++) 183 { 184 System.out.println(si_list[i].getStunumber()+si_list[i].getName()+si_list[i].getMathematicsscore()+si_list[i].getEnglishscore() 185 +si_list[i].getNetworkscore()+si_list[i].getDatabasescore()+si_list[i].getSoftwarescore()); 186 } 187 } 188 189 //修改成绩模块标题 190 public static void showUpdateNav() { 191 System.out.println("*******************************************************"); 192 System.out.println(" 石家庄铁道大学软件工程系学生学籍管理系统2019版"); 193 System.out.println(" 学生考试成绩修改界面"); 194 System.out.println("*******************************************************"); 195 } 196 197 //根据学号获取索引 198 public static int getIndex(String a) { 199 for(int i=0;i<total;i++) 200 { 201 if(si_list[i].getStunumber().equals(a)) 202 return i; 203 } 204 return -1; 205 } 206 207 //修改成绩时输入学号 208 public static String updateInputNum() { 209 System.out.print("请输入学生学号:"); 210 String stu_id=scanner.next(); 211 if(isIdExist(stu_id)==-1) 212 { 213 System.out.println("该学号不存在!"); 214 //Runtime.getRuntime().exec("cmd /c start cls "); 215 return null; 216 } 217 else 218 { 219 si_list[total]=new ScoreInformation(); 220 si_list[total].setStunumber(stu_id); 221 si_list[total].setName(name_list[isIdExist(stu_id)]); 222 System.out.println("*******************************************************"); 223 return stu_id; 224 } 225 } 226 227 //打印成绩信息 228 public static void showScore(int i) { 229 System.out.println("学生学号:"+si_list[i].getStunumber()); 230 System.out.println("学生姓名:"+si_list[i].getName()); 231 System.out.println("1、高等数学成绩:"+si_list[i].getMathematicsscore()); 232 System.out.println("2、大学英语成绩:"+si_list[i].getEnglishscore()); 233 System.out.println("3、计算机网络成绩:"+si_list[i].getNetworkscore()); 234 System.out.println("4、数据库成绩:"+si_list[i].getDatabasescore()); 235 System.out.println("5、软件工程成绩:"+si_list[i].getSoftwarescore()); 236 } 237 238 //打印姓名学号 239 public static void showUpdateIDandName(int i) { 240 showUpdateNav(); 241 System.out.println("学生学号:"+si_list[i].getStunumber()); 242 System.out.println("学生姓名:"+si_list[i].getName()); 243 } 244 245 //修改高数成绩 246 public static double updateMath(int i) { 247 showUpdateIDandName(i); 248 System.out.print("请输入修改后高等数学成绩:"); 249 double old=si_list[i].getMathematicsscore(); 250 double math=scanner.nextDouble(); 251 si_list[i].setMathematicsscore(math); 252 return old; 253 } 254 //修改大英成绩 255 public static double updateEnglish(int i) { 256 showUpdateIDandName(i); 257 System.out.print("请输入修改后大学英语成绩:"); 258 double old=si_list[i].getEnglishscore(); 259 double English=scanner.nextDouble(); 260 si_list[i].setEnglishscore(English); 261 return old; 262 } 263 //修改网络成绩 264 public static double updateNet(int i) { 265 showUpdateIDandName(i); 266 System.out.print("请输入修改后计算机网络成绩:"); 267 double old=si_list[i].getNetworkscore(); 268 double net=scanner.nextDouble(); 269 si_list[i].setNetworkscore(net); 270 return old; 271 } 272 //修改数据库成绩 273 public static double updateDatabase(int i) { 274 showUpdateIDandName(i); 275 System.out.print("请输入修改后数据库成绩:"); 276 double old=si_list[i].getDatabasescore(); 277 double database=scanner.nextDouble(); 278 si_list[i].setDatabasescore(database); 279 return old; 280 } 281 //修改软工成绩 282 public static double updateSoftware(int i) { 283 showUpdateIDandName(i); 284 System.out.print("请输入修改后软件工程成绩:"); 285 double old=si_list[i].getSoftwarescore(); 286 double software=scanner.nextDouble(); 287 si_list[i].setSoftwarescore(software); 288 return old; 289 } 290 291 //修改成绩方法 292 public static int updateScore(int i) { 293 int flag; 294 flag=scanner.nextInt(); 295 switch (flag) { 296 case 1: 297 oldscore=updateMath(i); 298 break; 299 case 2: 300 oldscore=updateEnglish(i); 301 break; 302 case 3: 303 oldscore=updateNet(i); 304 break; 305 case 4: 306 oldscore=updateDatabase(i); 307 break; 308 case 5: 309 oldscore=updateSoftware(i); 310 break; 311 312 default: 313 System.out.println("该选项不存在!"); 314 break; 315 } 316 return flag; 317 } 318 319 //是否保存 320 public static boolean isSaveUpdate(int i,int index) { 321 System.out.println("该学生信息已修改完毕,是否提交?Y/N"); 322 String flag=scanner.next(); 323 if(flag.equals("N")) 324 { 325 switch (i) { 326 case 1: 327 si_list[index].setMathematicsscore(oldscore); 328 break; 329 case 2: 330 si_list[index].setEnglishscore(oldscore); 331 break; 332 case 3: 333 si_list[index].setNetworkscore(oldscore); 334 break; 335 case 4: 336 si_list[index].setDatabasescore(oldscore); 337 break; 338 case 5: 339 si_list[index].setSoftwarescore(oldscore); 340 break; 341 342 default: 343 break; 344 } 345 System.out.println("提交操作已取消!"); 346 return false; 347 } 348 showMainNav(); 349 return true; 350 } 351 352 //退出系统 353 public static void exitProgram() { 354 System.out.println("*****************************************************************"); 355 System.out.println(" 感谢使用石家庄铁道大学软件工程系学生学籍管理系统2019版"); 356 System.out.println(" 制作人:赵世元"); 357 System.out.println("*****************************************************************"); 358 System.exit(-1); 359 } 360 361 //打印绩点计算界面 362 public static void showCalPoint() { 363 System.out.println("*******************************************************"); 364 System.out.println(" 石家庄铁道大学软件工程系学生学籍管理系统2019版"); 365 System.out.println(" 学生考试成绩绩点计算界面"); 366 System.out.println("*******************************************************"); 367 } 368 369 public static double getPoint(double a) { 370 if(a>=90) 371 return 4.0; 372 else if(a>=85&&a<89.9) 373 return 3.7; 374 else if(a>=82&&a<84.9) 375 return 3.3; 376 else if(a>=78&&a<81.9) 377 return 3.0; 378 else if(a>=75&&a<77.9) 379 return 2.7; 380 else if(a>=72&&a<74.9) 381 return 2.3; 382 else if(a>=68&&a<71.9) 383 return 2.0; 384 else if(a>=66&&a<67.9) 385 return 1.5; 386 else if(a>=60&&a<63.9) 387 return 1.0; 388 else 389 return 0; 390 } 391 392 public static boolean showPoint(int i) { 393 System.out.println("学生学号:"+si_list[i].getStunumber()); 394 System.out.println("学生姓名:"+si_list[i].getName()); 395 double math=getPoint(si_list[i].getMathematicsscore()); 396 double english=getPoint(si_list[i].getEnglishscore()); 397 double net=getPoint(si_list[i].getNetworkscore()); 398 double database=getPoint(si_list[i].getDatabasescore()); 399 double software=getPoint(si_list[i].getSoftwarescore()); 400 System.out.println("1、高等数学成绩绩点:"+math); 401 System.out.println("2、大学英语成绩绩点:"+english); 402 System.out.println("3、计算机网络成绩绩点:"+net); 403 System.out.println("4、数据库成绩绩点:"+database); 404 System.out.println("5、软件工程成绩绩点:"+software); 405 double average=(math*4+english*3+net*4+database*3+software*2)/(4+3+4+3+2); 406 String result = String.format("%.2f", average); 407 System.out.println("你的平均学分绩点为:"+result); 408 if(average>=2) 409 System.out.println("提示信息:你的学分绩点已达到毕业要求!"); 410 else 411 System.out.println("提示信息:你的学分绩点不满足毕业要求!"); 412 System.out.println("是否返回系统主界面?Y/N"); 413 String flag=scanner.next(); 414 if(flag.equals("Y")) 415 return true; 416 return false; 417 } 418 419 public static void main(String[] args) throws InterruptedException { 420 // TODO 自动生成的方法存根 421 int flag; 422 showMainNav(); 423 String id; 424 425 for(;;) 426 { 427 flag=scanner.nextInt(); 428 switch (flag) { 429 case 1: 430 showAddNav(); 431 if(addScoreInformation()) 432 { 433 addScoreInformation_second(); 434 addScoreInformation_third(); 435 addScoreInformation_forth(); 436 addScoreInformation_fifth(); 437 addScoreInformation_sixth(); 438 addScoreInformation_seventh(); 439 440 while(isSaveAdd()==false) 441 { 442 showAddNav(); 443 if(addScoreInformation()) 444 { 445 addScoreInformation_second(); 446 addScoreInformation_third(); 447 addScoreInformation_forth(); 448 addScoreInformation_fifth(); 449 addScoreInformation_sixth(); 450 addScoreInformation_seventh(); 451 } 452 } 453 } 454 break; 455 case 2: 456 showUpdateNav(); 457 if((id=updateInputNum())!=null) 458 { 459 int index=getIndex(id); 460 showScore(index); 461 int f=updateScore(index); 462 while(isSaveUpdate(f, index)==false) 463 { 464 showUpdateNav(); 465 if((id=updateInputNum())!=null) 466 { 467 index=getIndex(id); 468 showScore(index); 469 f=updateScore(index); 470 } 471 } 472 } 473 break; 474 case 3: 475 showCalPoint(); 476 if((id=updateInputNum())!=null) 477 { 478 int index=getIndex(id); 479 if(showPoint(index)==false) 480 Thread.sleep(60000);
481 } 482 break; 483 case 4: 484 exitProgram(); 485 break; 486 default: 487 System.out.println("该选项不存在!"); 488 break; 489 } 490 showMainNav(); 491 } 492 } 493 }
ScoreInformation类源码:
1 package stu.information.com; 2 3 public class ScoreInformation { 4 private String stunumber; 5 private String name; 6 private double mathematicsscore; 7 private double englishscore; 8 private double networkscore; 9 private double databasescore; 10 private double softwarescore; 11 public String getStunumber() { 12 return stunumber; 13 } 14 public void setStunumber(String stunumber) { 15 this.stunumber = stunumber; 16 } 17 public String getName() { 18 return name; 19 } 20 public void setName(String name) { 21 this.name = name; 22 } 23 public double getMathematicsscore() { 24 return mathematicsscore; 25 } 26 public void setMathematicsscore(double mathematicsscore) { 27 this.mathematicsscore = mathematicsscore; 28 } 29 public double getEnglishscore() { 30 return englishscore; 31 } 32 public void setEnglishscore(double englishscore) { 33 this.englishscore = englishscore; 34 } 35 public double getNetworkscore() { 36 return networkscore; 37 } 38 public void setNetworkscore(double networkscore) { 39 this.networkscore = networkscore; 40 } 41 public double getDatabasescore() { 42 return databasescore; 43 } 44 public void setDatabasescore(double databasescore) { 45 this.databasescore = databasescore; 46 } 47 public double getSoftwarescore() { 48 return softwarescore; 49 } 50 public void setSoftwarescore(double softwarescore) { 51 this.softwarescore = softwarescore; 52 } 53 }
运行效果如下: