对学生信息管理系统,要求完成以下基本任务:
1.改写程序为良好程序风格(文档注释,函数注释,语句注释)。
2.将功能补充完全(基于文件处理,完成刷新和保存功能)。
3.将学生信息改为更好的数据组织,而非离散形式(结构体)。
提高要求:
可将程序中的不足(如数据验证)等根据自己的能力与理解完成。
设计思路:
1.将学生信息所需要执行的函数写出来,在switch-case语句中调用即可。这样程序结构清晰,框架明了。
2.对学生信息输入时难免会输入错误格式,所以,在代码完成后,凡是需要进行输入的地方,都必须加入try{…}catch(){…}对输入的异常进行处理。
出现问题一:
程序执行查找时虽然没有报错,但是查找失败
此时出现了问题,明明学号1存在,并且bob也存在,调试分析原因。
之后直接break,中间一段没有执行。
对循环结束条件判断错误,改为num,程序可正常运行。
由于是空指针报错,所以考虑数组长度的问题或者循环判断条件错误
将判断条件改为num-1,程序可正常运行
1.学生信息管理系统,需要不断对学生的信息进行输入与修改,所以,在输入时很容易出现问题。这次作业,用了大量的try{…}catch(){…}来对异常错误进行捕捉,保证输入的正确性。
2.练习了对象数组的知识,动态的将数据进行存储。体会到数组是一种线性数据结构。
3.对文件的写入操作进行练习。
//Student类
package qwe;
public class Student {
private String stuNo = " ";
private String stuName = " ";
private String gender = " ";
private int age;
private int cscore;
private int mathscore;
private int englishscore;
public String getStuNo() {
return stuNo;
}
public void setStuNo(String stuNo) {
this.stuNo = stuNo;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getCscore() {
return cscore;
}
public void setCscore(int cscore) {
this.cscore = cscore;
}
public int getMathscore() {
return mathscore;
}
public void setMathscore(int mathscore) {
this.mathscore = mathscore;
}
public int getEnglishscore() {
return englishscore;
}
public void setEnglishscore(int englishscore) {
this.englishscore = englishscore;
}
@Override
public String toString() {
return "Student [stuNo=" + stuNo + ", stuName=" + stuName + ", gender=" + gender + ", age=" + age + ", cscore="
+ cscore + ", mathscore=" + mathscore + ", englishscore=" + englishscore + "]";
}
}
package qwe;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Main {
private static final int scannum = 0;
static int num = 0;
static boolean tag = true;
static boolean tag_1 = true;
static Student[] stu = new Student[100];
static Scanner scan = new Scanner(System.in);
public static void main(String[] args) throws InputMismatchException {
menu();
while (tag) { // 主菜单
try {
int scannum = scan.nextInt();
switch (scannum) { // 主菜单选择
case 0:
help();// 系统帮助及说明
break;
case 1:
renew();// 刷新学生信息
System.out.println("Clear successfully! ");
break;
case 2:
seek();// 查询学生信息
break;
case 3:
modify();// 修改学生信息
break;
case 4:
add();// 增加学生信息
break;
case 5:
del();// 按学号删除信息
break;
case 6:
display();// 显示当前信息
break;
case 7:
save(stu);// 保存当前学生信息
System.out.println("Save successfully! All in log.txt view.");
break;
case 8:// 退出系统
tag = false;
break;
default:
System.out.println("please choose 0--8 ");
break;
}
} catch (Exception e) {
System.out.println("输入错误,请输入数字");
tag = false;
}
}
}
// 系统帮助及说明
static void help() {
System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
System.out.println("<< Welcome to Student Information Management System >>");
System.out.println("<< you have eight points to choose >>");
System.out.println("<< remember please inout your student information firstly >>");
System.out.println("<< thank you! >>");
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
}
// 刷新学生信息
static void renew() { // 清空已有的文件内容,以便下次重新写入新的内容
File file = new File("./log.txt");
try {
if ( !file.exists() ) {
file.createNewFile();
}
FileWriter fileWriter = new FileWriter(file);
fileWriter.write("");
fileWriter.flush();
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 查询学生信息
static void seek() {
int flag = 0;
try {
System.out.println("-----1.search by student Stuno -----");
System.out.println("-----2.search by student StuName-----");
System.out.println("-----3.leave -----");
Scanner sc = new Scanner(System.in);
Scanner s1 = new Scanner(System.in);
Scanner s2 = new Scanner(System.in);
while (true) {
int item = sc.nextInt();
switch (item) {
case 1:
System.out.print("please input your Stuno: ");
String idnumber = s1.next();
for (int i = 0; i < num; i++) {
if (stu[i].getStuNo().equals(idnumber)) {
flag = 1;
System.out.println("successful! the result is:");
System.out.println(stu[i]);
} else {
if (flag == 0) {
System.out.println("query failed!");
break;
}
}
}
break;
case 2:
System.out.print("please input your Stuname: ");
String namestring = s2.next();
for (int i = 0; i < num; i++) {
if (stu[i].getStuName().equals(namestring)) {
flag = 1;
System.out.println("successful! the result is:");
System.out.println(stu[i]);
} else {
if (flag == 0) {
System.out.println("query failed!");
break;
}
}
}
break;
case 3:
return;
default:
System.out.println("please choose from 1 - 3 ");
}
}
} catch (Exception e) {
System.out.println("输入错误,请输入数字");
}
}
// 修改学生信息
static void modify() {
try {
System.out.print("please enter the StuNo you need to modify: ");
Scanner sc = new Scanner(System.in);
Scanner s1 = new Scanner(System.in);
Scanner x1 = new Scanner(System.in);
int number = s1.nextInt();
System.out.println("-----1.modify Stuname ----");
System.out.println("-----2.modify age ----");
System.out.println("-----3.modify gender ----");
System.out.println("-----4.modify cscore ----");
System.out.println("-----5.modify mathscore ----");
System.out.println("-----6.modify englishscore ----");
System.out.println("-----7.leave ----");
while (true) {
System.out.print("please input modified item: ");
int item = sc.nextInt();
switch (item) {
case 1:
System.out.print("input new name:");
stu[number - 1].setStuName(scan.next());
break;
case 2:
System.out.print("input new age:");
stu[number - 1].setAge(scan.nextInt());
break;
case 3:
System.out.print("input new sex:");
stu[number - 1].setGender(scan.next());
break;
case 4:
System.out.print("input new cscore:");
stu[number - 1].setCscore(scan.nextInt());
break;
case 5:
System.out.print("input new mathscore:");
stu[number - 1].setMathscore(scan.nextInt());
break;
case 6:
System.out.print("input new englishscore:");
stu[number - 1].setEnglishscore(scan.nextInt());
break;
case 7:
return;
default:
System.out.println("please choose from 1 - 7 ");
}
}
} catch (Exception e) {
System.out.println("输入错误,请输入数字");
}
}
// 保存当前学生信息
static void save(Student[] stu) {
try {
File file = new File("./log.txt");
// 文件不存在时,主动创建文件
if (!file.exists()) {
file.createNewFile();
}
FileWriter fw = new FileWriter(file, false);
BufferedWriter bw = new BufferedWriter(fw);
bw.write("[学号 |姓名 |性别 |年龄 |c语言成绩 |高数成绩 |英语成绩]\n");
for (int i = 0; i < num; i++) {
bw.write(stu[i].toString());
bw.write("\n");
}
bw.close();
fw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 显示当前信息
static Student display() {
System.out.println("[学号\t|姓名 \t|性别 \t|年龄\t|c语言成绩\t|高数成绩\t|英语成绩]");
for (int i = 0; i < num; i++) {
System.out.println(stu[i]);
return stu[i];
}
return null;
}
// 增加学生信息
static void add() { // 增加学生信息
try {
while (tag_1) {
stu[num] = new Student();
System.out.println("请依次输入学号,姓名,性别,年龄,c语言成绩,高数成绩,英语成绩");
stu[num].setStuNo(scan.next());
stu[num].setStuName(scan.next());
stu[num].setGender(scan.next());
stu[num].setAge(scan.nextInt());
stu[num].setCscore(scan.nextInt());
stu[num].setMathscore(scan.nextInt());
stu[num].setEnglishscore(scan.nextInt());
num++;
System.out.println("继续输入请输入true,否则输入false");
tag_1 = scan.nextBoolean();
}
} catch (InputMismatchException e) {
System.out.println("输入有误");
} catch (Exception e) {
System.out.println("您输入的数值有误 !");
}
}
static boolean kai = false;
// 删除学生信息
static void del() {
System.out.println("请输入你要删除的学号");
String xuehao = scan.next();
int i;
for (i = 0; i < num; i++) {
if (xuehao.equals(stu[i].getStuNo())) {
kai = true;
break;
}
}
if (kai) {
for (i = 0; i < num - 1; i++) {
stu[i].setStuNo(stu[i + 1].getStuNo());
stu[i].setStuName(stu[i + 1].getStuName());
stu[i].setGender(stu[i + 1].getGender());
stu[i].setAge(stu[i + 1].getAge());
stu[i].setCscore(stu[i + 1].getCscore());
stu[i].setCscore(stu[i + 1].getMathscore());
stu[i].setCscore(stu[i + 1].getEnglishscore());
}
} else {
System.out.println("查无此人");
}
num--;
}
//菜单
static void menu() {
System.out.println(" ******************************************************");
System.out.println(" * 学生信息管理系统 *");
System.out.println(" ******************************************************");
System.out.println(" ********************系统功能菜单************************");
System.out.println(" ---------------------- ---------------------- ");
System.out.println(" ********************************************* ");
System.out.println(" * 0.系统帮助及说明 * * 1.刷新学生信息 * ");
System.out.println(" ********************************************* ");
System.out.println(" * 2.查询学生信息 * * 3.修改学生信息 * ");
System.out.println(" ********************************************* ");
System.out.println(" * 4.增加学生信息 * * 5.按学号删除信息 * ");
System.out.println(" ********************************************* ");
System.out.println(" * 6.显示当前信息 * * 7.保存当前学生信息* ");
System.out.println(" ********************** ********************** ");
System.out.println(" * 8.退出系统 * ");
System.out.println(" ********************** ");
System.out.println(" ---------------------- ---------------------- ");
}
}