最近学校老师让做的一个基础实验,现在给大家分享一下我的实现过程,有点困....
①具体的话,用了MVC设计模式,也不算是MVC设计模式,主要是对工程进行分类,实现代码的简洁。
比如主函数独立一个包,控制层一个包,服务层一个包,
服务层就是分得很细,一个功能一个函数,,
控制层的话,就实现服务层的组合,满足需求,
主函数就调用控制层写好的函数。
②还有就是要写到文件,但是写文件的话,数据会混乱,
我目前的想法就是,将数据一行一行的写,
每一行的格式就是:
姓名|学号|成绩
就类似于一个excel表格,这样去简单地实现数据库
好了,开始尝试做一下吧
1.创建工程
2.工程目录如下,直接上代码了,下午还有实验课,有空再解释
3.代码
runMain.java
package Main;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import controll.studentControll;
import pojo.Student;
public class runMain {
static Scanner input;
public static void main(String[] args) {
input = new Scanner(System.in);
// 整个程序中的学生列表
List<Student> students = new ArrayList<Student>();
int operation;
while (true) {
System.out.println("欢迎来到学生管理系统:");
System.out.println("1.输入信息");
System.out.println("2.成绩查询");
System.out.println("3.成绩统计");
operation = input.nextInt();
if (operation == 1) {
studentControll.studentInput(students);
} else if (operation == 2) {
studentControll.studentQuery(students);
} else if (operation == 3) {
studentControll.studentShow(students);
} else {
break;
}
}
}
}
studentControll.java
package controll;
import java.util.List;
import java.util.Scanner;
import pojo.Student;
import service.studentService;
public class studentControll {
static Scanner input;
// 输入用户信息
public static void studentInput(List<Student> students) {
input = new Scanner(System.in);
int operation;
System.out.println("请选择您输入记录的方式:");
System.out.println("1.增加记录");
System.out.println("2.文件批量导入记录");
operation = input.nextInt();
if (operation == 1) {
studentService.singleInput(students);
}
else if (operation == 2) {
studentService.batchInput(students);
}
}
// 根据学号查询学生信息
public static void studentQuery(List<Student> students) {
input = new Scanner(System.in);
int QueryId;
System.out.println("请输入需要查询的学生学号:");
QueryId = input.nextInt();
for (Student student : students) {
if (student.getId() == QueryId) {
System.out.println("查到学生:"+student.toString());
break;
}
}
}
// 统计学生成绩
public static void studentShow(List<Student> students) {
System.out.println("以下是全部学生信息:");
for (Student student : students) {
System.out.println(student.toString());
}
}
}
Student.java (学生类对象)
package pojo;
public class Student {
private String name;
private int id;
private int grader;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getGender() {
return grader;
}
public void setGender(int grader) {
this.grader = grader;
}
@Override
public String toString() {
return "Student [name=" + name + ", id=" + id + ", gender=" + grader + "]";
}
public Student(String name, int id, int grader) {
super();
this.name = name;
this.id = id;
this.grader = grader;
}
public Student() {
super();
}
}
studentService.java
package service;
import java.util.List;
import java.util.Scanner;
import pojo.Student;
import util.util;
public class studentService {
static Scanner input;
//将从文件中读取出来的学生列表写到程序中的学生列表中
public static void batchInput(List<Student> students) {
List<Student> GETstudents = util.getFileStudent("studentList.txt");
students.addAll(GETstudents);
for (Student student : students) {
System.out.println("成功插入:"+student.toString());
}
System.out.println("插入完成!");
}
//输入学生信息记录
public static void singleInput(List<Student> students) {
input = new Scanner(System.in);
int id;
String name;
int grader;
System.out.println("输入学号:");id=input.nextInt();
System.out.println("输入名字:");name=input.next();
System.out.println("输入成绩:");grader=input.nextInt();
Student student = new Student(name,id,grader);
students.add(student);
}
}
util.java
package util;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import pojo.Student;
public class util {
/**
* 从文件中读取student
* @return
*/
public static List<Student> getFileStudent(String fileName) {
//用来过滤第一行的错误数据
int index = 0;
//用来储存获得到的学生数据
List<Student> students = new ArrayList<Student>();
try {
//获取文件资源
// FileInputStream is = new FileInputStream("../"+fileName);
FileInputStream is = new FileInputStream(fileName);
// 防止路径乱码 如果utf-8 乱码 改GBK eclipse里创建的txt 用UTF-8,在电脑上自己创建的txt 用GBK
InputStreamReader isr = new InputStreamReader(is, "UTF-8");
//获取数据读取缓存区
BufferedReader br = new BufferedReader(isr);
//每一行数据获取的字符串对象
String line = "";
while ((line = br.readLine()) != null) {
index++;
if (index == 1) {
continue;
}
//打印读到的行内容
// System.out.println(line);
String[] strarray = line.split("\\|");
//打印切割后的数据
// for (String string : strarray) {
// System.out.print(string + "........");
// }
//将数据读到student对象
String name = strarray[0];
int id = Integer.valueOf(strarray[1]);
int grade = Integer.valueOf(strarray[2]);
Student student = new Student(name,id,grade);
//添加student对象
students.add(student);
// System.out.println(student.toString());
// System.out.println();
}
br.close();
isr.close();
is.close();
} catch (Exception e) {
e.printStackTrace();
}
return students;
}
}
studentList.txt
注意,这里第一行为空的,因为第一行会读到一个乱码
志成|1700301310|80
小蓝|1700301309|80
同时文件的话,也需要设置为utf8的编码
1.打开文件
2.选择文件 -> 另存为
在这里就可以设置txt文件的编码