对于学生成绩的增删查改。

来源于《java开发实战经典》第12章课后习题5.

要求输入学生成绩,格式为,姓名:成绩|姓名:成绩|姓名:成绩|姓名:成绩,输入多个人的成绩需要以|线分隔开,查询的结果按照成绩高低排列。可以增加,删除,修改,查询数据。


//下面这个是引用类InputData

import java.io.*;

public class InputData {
private BufferedReader buf=null;
public InputData(){
this.buf=new BufferedReader(new InputStreamReader(System.in));
}
public String getString(String info) {
String temp=null;
System.out.println(info);
try {
temp=this.buf.readLine();
}catch(IOException e) {
e.printStackTrace();
}
return temp;
}
public int getInt(String info,String err) {
int temp=0;
String str=null;
boolean flag=true;
while(flag) {
str=this.getString(info);
if(str.matches("^\\d+$")) {
temp=Integer.parseInt(str);
flag=false;
}else {
System.out.println(err);;
}
}
return temp;
}
public String getStudents(String info,String err) {
String temp=null;
String str=null;
boolean flag=true;

while(flag) {
str=this.getString(info);
String s[] = str.split("\\|");
int a=0;
for(int i=0;i<s.length;i++) {
if (s[i].matches("^\\S+:\\d{1,3}.?\\d?$")) {
a++;

}
}
if(a==s.length){
temp=str;
flag=false;


}else {
System.out.println(err);
}
}
return temp;


}
public float getFloat(String info,String err) {
float temp=0;
String str=null;
boolean flag=true;
while(flag) {
str=this.getString(info);
if(str.matches("^\\d+.?\\d+$")){
temp=Float.parseFloat(str);
flag=false;

}else {
System.out.println(err);
}
}
return temp;


}

}

//下面这个是引用类Operate,里面有很多操作方法

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.Writer;


public class Operate {


static File file = new File("D:" + File.separator + "ZCA" + File.separator + "Java" + File.separator
+ "AndrewPackage" + File.separator + "TheScoresOfStudent.txt");


public boolean save(String strs) throws Exception {
boolean flag = false;
Writer out = null;


out = new FileWriter(file, true);// 向文件中追加内容
if (this.load() != null) {
out.write("|" + strs);
} else {
out.write(strs);
}
out.close();


return flag;
}


public boolean deleteAll() throws Exception {
Writer out = null;
out = new FileWriter(file);
String strd = "";// 原来用null代替经常报错!
out.write(strd);
out.close();
return true;


}


public static void delete() throws Exception {
new Operate().deleteAll();
if (new Operate().load() == null) {
System.out.println("数据全部删除成功!");
}


}


public String load() throws Exception {
String strl = null;
BufferedReader bufl = null;
Reader readerl = null;
readerl = new InputStreamReader(new FileInputStream(file));
bufl = new BufferedReader(readerl);
strl = bufl.readLine();
bufl.close();
return strl;
}


public static void update() throws Exception {
String strs = new Operate().load();
boolean flag = false;
String note = "请在下面输入要修改成绩学生的姓名:";
while (flag == false) {
InputData input = new InputData();


String name = input.getString(note);
String strs1 = strs.replaceAll(":", "\\|");
String s[] = strs1.split("\\|");
String stru1 = null;
for (int i = 0; i < s.length; i++) {


if (s[i].equals(name)) {
flag = true;
System.out.println("要修改的学生成绩:" + s[i] + ":" + s[i + 1]);
InputData input1 = new InputData();
float score = input1.getFloat("请输入此学生修改后的分数:", "格式不正确请重新输入!");


stru1 = strs.replaceAll(s[i] + ":" + s[i + 1], s[i] + ":" + score);


System.out.println("数据修改成功!");
Operate.delete();
new Operate().save(stru1);
break;
}
if (i == s.length - 1) {
note = "你要找的学生不存在,请重新输入!";
}


}
}


}


public static void search() throws Exception {
String strs = new Operate().load();// 将读取的文件放入属性中
InputData inputs = new InputData();// 这是个读取键盘输入的方法


String name = inputs.getString("请输入姓名:");
String[] ss2 = new String[2];
int as = 0;
String ss[] = strs.split("\\|");
for (int i = 0; i < ss.length; i++) {
ss2 = ss[i].split(":");
as++;
if (ss2[0].equals(name)) {
System.out.println("查找学生的成绩:" + ss2[0] + ":" + ss2[1]);
System.out.println("数据查找成功!");
break;
}
}
if (as == ss.length) {
System.out.println("此学生数据不存在!");
}
}


public static void deleteOne() throws Exception {
String strs = new Operate().load();
InputData input = new InputData();


String name = input.getString("请输入要删除成绩学生的姓名:");
String strs1 = strs.replaceAll(":", "\\|");
String s[] = strs1.split("\\|");
String strsz = null;
for (int i = 0; i < s.length; i++) {


if (s[i].equals(name)) {
System.out.println("要删除学生的成绩:" + s[i] + ":" + s[i + 1]);


strsz = strs.replaceAll(s[i] + ":" + s[i + 1], "");
break;
}


}
String strs2 = strsz.replaceAll("\\|\\|", "\\|");
char s3[] = strs2.toCharArray();
String s4 = String.valueOf(s3[0]);
String s5 = String.valueOf(s3[s.length - 1]);
if (s4.equals("|")) {
strs2 = new String(s3, 1, (s.length - 1));
}
if (s5.equals("|")) {
strs2 = new String(s3, 0, (s.length - 2));
}
new Operate().deleteAll();
new Operate().save(strs2);
System.out.println("数据删除成功!");


}


public static void arrayAll() throws Exception {
String strf = new Operate().load();
String strf1 = strf.replaceAll(":", "\\|");
String sf[] = strf1.split("\\|");
Student[] stu = new Student[sf.length / 2];
String a = null;
Float b = null;
for (int i = 0; i < sf.length / 2; i++) {
a = sf[2 * i];
b = Float.parseFloat(sf[2 * i + 1]);
stu[i] = new Student(a, b);// 因为少了个new所以经常报错!


}
java.util.Arrays.sort(stu);
new Operate().deleteAll();
new Operate().save(stu[0].toString());
for (int i = 1; i < stu.length; i++) {
new Operate().save(stu[i].toString());


}
String strs = new Operate().load();
System.out.println(strs);
System.out.println("数据全部查出!");
}


public static void add() {
InputData input = new InputData();
String students = input.getStudents("请在下面输入学生姓名和成绩,格式为(姓名:成绩),如有多个学生以"|"线隔开:", "格式不对,请重新输入!");


try {
new Operate().save(students);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("数据增加成功!");
}


}


//下面这个是引用类Menu,用于连接主程序和操作方法
public class Menu {
public Menu() throws Exception {
while(true) {
this.show();
}
}
public void show() throws Exception {
System.out.println("====分数录入系统====");
System.out.print("[1]、增加数据。  ");
System.out.print("[2]、删除一个数据。  ");
System.out.print("[3]、更改一个数据。  ");
System.out.print("[4]、查看一个数据。  ");
System.out.print("[5]、查看全部数据。  ");
System.out.print("[6]、删除全部数据。  ");
System.out.println("[0]、系统退出。");
InputData input=new InputData();
int i=input.getInt("请在下面选择:", "请在下面输入正确的选项!");
switch(i) {
case 1:{
Operate.add();//ok
break;
}
case 2:{
Operate.deleteOne();//ok
break;
}
case 3:{
Operate.update();//ok
break;
}
case 4:{
Operate.search();//ok
break;
}
case 5:{
Operate.arrayAll();
break;
}
case 6:{
Operate.delete();//ok

break;
}
case 0:{
System.exit(1);
break;
}
default:{
System.out.println("请在下面选择正确的操作:");
}

}
}


}

//下面这个是引用类Student,用于排序

import java.io.File;


class Student implements Comparable<Student> {
private String name;
private float score;


Student(String name, float score) {
this.setName( name);
this.setScore(score);
}


public void setName(String name) {
this.name = name;
}


public String getName() {
return name;
}


public void setScore(Float score) {
this.score = score;
}


public Float getScore() {
return score;
}


public String toString() {
return name + ":" + score;
}


public int compareTo(Student stu) {
if (this.score > stu.score) {
return -1;
} else if (this.score < stu.score) {
return 1;
} else {
return 0;
}
}


}

//主程序
public class AndrewK12_195 {


public static void main(String[] args) throws Exception {
File file = new File("D:" + File.separator + "ZCA" + File.separator + "Java" + File.separator
+ "AndrewPackage" + File.separator + "TheScoresOfStudent.txt");
if(!file.exists()) {
file.createNewFile();
}


new Menu();
}


}

在C++中,设计一个学生成绩管理系统通常会涉及到一些核心概念,如类和对象、数据结构(如数组或链表)、文件I/O操作以及基本的控制结构。这里是一个简单的概述: 1. 定义学生类(Student):包含属性如姓名(name)、学号(student_id)和成绩(scores)等,并定义相应的方法,比如添加成绩(add_score)、获取总分(get_total_score)等。 ```cpp class Student { public: string name; int student_id; vector<int> scores; void add_score(int new_score); int get_total_score(); }; ``` 2. 存储管理:可以使用数组或动态数据结构(如vector)来存储多个学生对象。如果需要长期存储,也可以考虑使用文件I/O,将学生信息保存到文本文件中。 3. 增(add):允许用户添加新学生或更新现有学生成绩。例如,可以通过输入界面或命令行接收用户输入。 ```cpp void Student::add_score(int new_score) { scores.push_back(new_score); } ``` 4. 删(delete):删除学生成绩。可能需要提供方法来根据学号或名称查找并移除。 5. 查(query):提供搜索功能,查找特定学生的信息或按条件筛选(如成绩排名)。 6. 改(modify):允许修改学生信息或成绩。同样,需要提供方法找到对应的记录。 7. 用户界面:为了方便用户交互,可以创建一个控制台程序或图形界面,让使用者选择操作并输入必要的信息。 ```cpp int main() { // 创建学生对象数组或文件对象 // 提供菜单让用户选择操作 // 调用学生类的方法执行相应的操作 return 0; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值