好久没更新博客了,中间学的许多内容都没写上。学校的JAVA课程已经结课了,我的JAVA基本算是入门吧,还有许多要学的东西。之前的就不补了,正好老师留的三个大作业基本涵盖了之前学的所有东西,我就把他们写成博客吧。博客只写结构设计和一些关键细节,具体代码链接到Github上。
评价:
我已经决定要从事JAVA开发类的工作了。从这一篇博客开始,我要坚持认真写自己的学习博客了,学校的JAVA课程已经结束,我现在在自己学JAVA更多的内容。这是把这学期学到的东西总结一下,这三个作业都很不错,涵盖了几乎所有知识点,这三个作业应用到我本学期学到的所有内容了。
不过这一篇写的比较早,结构很烂,也没写注释,习惯很不好,只能凑活看看。接下来两篇,我的源代码写的比较规范整齐,还有点参考价值。
好,第一个作业:
1、定义student类,其中包括五个私有变量(stunumber,name,age,sex,score)。
各成员的含义如下:
变量stunumber为字符串类型String,用于存储学生的学号(有8位数字组成)。
变量name为字符串类型String,用于存储学生的姓名。
变量age为int类型,用于存储学生的年龄。
变量sex为boolean类型,用于存储学生的性别,男生为false,女生为true。变量score为double类型,用于存储学生的成绩。
并对每个变量定义get()(读取变量信息)和set()(设置变量信息)的方法。
赋初值方法包括五个参数,用于为变量(stunumber ,name,age,sex和score)赋值。
2、定义StudentManager类实现下列要求。
(1)利用数组实现至少存储五个学生的信息;(将考生信息作为第一条记录)。
(2)定义showStudent()方法打印输出所有的学生信息;
(3)定义addStudent (stunumber,name,age,sex,score)方法增加一名新学生的信息,需要判断学号是否重复,如果重复提示用户,并禁止增加新学生信息;
(4)定义deleteStudent(stunumber)方法删除一名学生信息(将该学生所有信息清空);
(5)定义updateStudent (stunumber,name,age,sex,score)方法修改学生信息;
(6)定义selectStudent(stunumber)查询并且输出该名学生的全部信息。
(7)定义一个输入界面如下图所示,选择相应的数字执行相应的功能
***************************************************************
石家庄铁道大学软件工程系学生信息管理系统
****************************************************************
1、 遍历输出学生信息;
2、 新学生信息录入;
3、 删除学生信息;
4、 修改学生信息;
5、 查询学生信息;
****************************************************************
先把代码给上:
1 package 课堂测试; 2 import java.io.*; 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.File; 6 import java.io.FileInputStream; 7 import java.io.FileOutputStream; 8 import java.io.FileReader; 9 import java.io.FileWriter; 10 import java.io.IOException; 11 import java.io.InputStreamReader; 12 import java.io.OutputStreamWriter; 13 import java.io.PrintWriter; 14 import java.util.*; 15 import javax.swing.JOptionPane; 16 import java.io.*; 17 import java.util.Scanner; 18 import java.util.StringTokenizer; 19 class Student{ 20 String name,sex,number; 21 int age; 22 double grade; 23 Student(){ 24 this.number=""; 25 this.name=""; 26 this.sex=""; 27 this.age=0; 28 this.grade=0; 29 } 30 Student(String a,String b,int c,double d,String number){ 31 this.number=number; 32 this.name=a; 33 this.sex=b; 34 this.age=c; 35 this.grade=d; 36 } 37 public void setnumber(String a){ 38 this.number=a; 39 } 40 public void setsex(String a){ 41 this.sex=a; 42 } 43 public void setname(String a){ 44 this.name=a; 45 } 46 public void setage(int a){ 47 this.age=a; 48 } 49 public void setgrade(double a){ 50 this.grade=a; 51 } 52 public void getnumber(){ 53 System.out.println(this.number); 54 } 55 public void getname(){ 56 System.out.println(this.name); 57 } 58 public void getsex(){ 59 System.out.println(this.sex); 60 } 61 public void getage(){ 62 System.out.println(this.age); 63 } 64 public void getgrade(){ 65 System.out.println(this.grade); 66 } 67 public String toString() 68 { 69 return getClass().getName() 70 + "学号"+number+" "+"姓名"+name+" "+"年龄"+String.valueOf(age)+" "+"性别 男 "+" "+"成绩"+String.valueOf(grade); 71 } 72 } 73 74 public class Opstudent { 75 public static void main(String[] args)throws IOException{ 76 FileWriter fw = null; 77 int count=5; 78 Student[] s=new Student[10]; 79 s[0]=new Student("a","男",18,50,"1"); 80 s[1]=new Student("b","男",18,50,"2"); 81 s[2]=new Student("c","男",18,50,"3"); 82 s[3]=new Student("d","男",18,50,"4"); 83 s[4]=new Student("e","男",18,50,"5"); 84 String savepath="C:\\experiment.txt"; 85 Write(savepath,s); 86 Login(s,count); 87 } 88 public static void Write(String savepath,Student[] s){ 89 //静态方法存储,可直接调用。 90 try{ 91 PrintWriter ps = new PrintWriter(new FileWriter(savepath),true); 92 ps.println(s.length); 93 ps.println("学号\t姓名\t年龄\t性别\t成绩"); 94 for(int i=0;i<s.length-1;i++){ 95 ps.println(s[i].number+"|"+s[i].name+"|"+String.valueOf(s[i].age)+"|"+s[i].sex+"|"+String.valueOf(s[i].grade)); 96 } 97 ps.close(); 98 }catch (Exception e){ 99 e.printStackTrace(); 100 } 101 } 102 public static void Read(int i){ 103 try{ 104 String s=""; 105 //防止文件建立或读取失败,用catch捕捉错误并打印,也可以用throw 106 /*读入txt文件*/ 107 String pathname="C:\\experiment.txt";//绝对路径 108 File filename=new File(pathname);//读取路径上的文件 109 InputStreamReader reader=new InputStreamReader( 110 new FileInputStream(filename));//建立一个输入流对象 111 BufferedReader br=new BufferedReader(reader);//建立一个对象,把文件内容转换为2进制??? 112 String line=br.readLine(); 113 for(int j=0;j!=i;j++) 114 line=br.readLine(); 115 s=s+line; 116 System.out.println(s); 117 br.close(); 118 }catch(Exception e){ 119 e.printStackTrace(); 120 } 121 } 122 public static void Login(Student[] a,int count)throws IOException{ 123 124 String s1="*****************************************\n"; 125 s1=s1+" ***大学软件工程系学生信息管理系统 \n"; 126 s1=s1+"*****************************************\n"; 127 s1=s1+" 1、遍历输出学生信息\n"; 128 s1=s1+" 2、新学生信息录入\n"; 129 s1=s1+" 3、删除学生信息\n"; 130 s1=s1+" 4、修改学生信息\n"; 131 s1=s1+" 5、查询学生信息\n"; 132 s1=s1+" 6、统计学生不及格人数\n"; 133 s1=s1+" 7、输入7结束操作"; 134 do{ 135 System.out.println(s1); 136 Scanner s2=new Scanner(System.in); 137 int i=s2.nextInt(); 138 if(i==1) 139 { 140 System.out.println("学号\t姓名\t年龄\t性别\t成绩\r\n"); 141 for(int x=1;x<=4;x++) 142 Read(x);} 143 else if(i==2) 144 { 145 Scanner p=new Scanner(System.in); 146 System.out.println("输入学号"); 147 a[count].number=p.nextLine(); 148 System.out.println("输入姓名"); 149 a[count].name=p.nextLine(); 150 System.out.println("输入年龄"); 151 a[count].age=p.nextInt(); 152 System.out.println("输入性别"); 153 a[count].sex=p.nextLine(); 154 System.out.println("输入分数"); 155 a[count].grade=p.nextDouble(); 156 count ++; 157 Write("C:\\experiment.txt",a); 158 } 159 else if(i==3){ 160 System.out.println("输入学生学号"); 161 Scanner ss=new Scanner(System.in); 162 String num=ss.next(); 163 BufferedReader in = new BufferedReader(new FileReader("C:\\experiment.txt")); 164 String sm = in.readLine(); 165 String sm1 = in.readLine(); 166 Student[] temp=new Student[6]; 167 for(int m=0;m<=6;m++){ 168 String s = in.readLine(); 169 StringTokenizer t = new StringTokenizer(s, "|"); 170 String nu=t.nextToken(); 171 if(nu.equals(num)) 172 {temp[m].name=t.nextToken(); 173 temp[m].age=Integer.parseInt(t.nextToken()); 174 temp[m].sex =t.nextToken(); 175 temp[m].grade=Double.parseDouble(t.nextToken());} 176 else 177 m=m-1; 178 } 179 Write("C:\\experiment.txt",temp); 180 181 in.close(); 182 } 183 else if(i==4){ 184 185 } 186 else if(i==5){ 187 BufferedReader in = new BufferedReader(new FileReader("C:\\experiment.txt")); 188 int ap = Integer.parseInt(in.readLine()); 189 Student[] temp=new Student[1]; 190 String sm = in.readLine(); 191 System.out.println(sm); 192 for(int m=1;m<=5;m++){ 193 String s = in.readLine(); 194 StringTokenizer t = new StringTokenizer(s, "|"); 195 System.out.println("学号"+t.nextToken()+" "+"姓名"+t.nextToken()+" "+"年龄"+t.nextToken()+" "+"性别 男 "+" "+"成绩"+t.nextToken()); 196 } 197 198 in.close(); 199 } 200 else if(i==6){ 201 int nums=0; 202 BufferedReader in = new BufferedReader(new FileReader("C:\\experiment.txt")); 203 String sm = in.readLine(); 204 String sm1 = in.readLine(); 205 System.out.println(sm1); 206 for(int m=1;m<=5;m++){ 207 String s = in.readLine(); 208 StringTokenizer t = new StringTokenizer(s, "|"); 209 String num=t.nextToken(); 210 String na11m=t.nextToken(); 211 String age=t.nextToken(); 212 String sex=t.nextToken(); 213 double grade=Double.parseDouble(t.nextToken()); 214 if(grade<=60) 215 nums++; 216 } 217 System.out.println("不及格的人数为"+nums); 218 } 219 else 220 break; 221 }while(true); 222 } 223 }
好了,我来写一下分析。
首先我写了一个Student类,其中包含类的初始化及get和set方法用于输入输出类的信息,很简单不用说。
再写了一个OpStudent类,其中包含主类和实现题目要求的若干个方法。
看到题目所给的几个操作,我用的是文件及输入输出流的操作模拟数据库。
public static void Write(String savepath,Student[] s)
参数:存储路径(绝对路径),类数组
功能:将一个学生的信息保存在savepath表示的路径下的一个txt文件中,各个数据用"|"隔开。
public static void Read(int i)
参数:好像是学生的个数(时间太久,也没加注释,给忘了,)
功能:仅在遍历输出功能中用到,因为带着"|"不方便用于读成Student类,可以按行读取输出。
public static void Login(Student[] a,int count)throws IOException
参数:Student类数组,已录入学生个数
功能:1.显示题目要求的登录界面。2.完成题目要求的操作
好了,很容易看到,我用一个do{}while{]循环来控制操作。这里注意:因为要实现返回界面功能,所以不能只执行一个操作就结束,所以用个循环控制。
好,剩下的就是按题目要求的功能作对应的操作。1、2很简单不说了。
好,我们看到3、5、6都需要把文件中的信息读出来再进行操作。
好,用BufferedReader读都没问题,对吧。为什么这个地方要用BufferedReader方法?因为:我存的时候是按行存储的,所以用到BufferedReader下的readline方法比较方便。
好,3、5、6都用到一个StringTokenizer类,这个类可以指定一个分隔符。好了,看不懂自己去看帮助JDK文档或者百度。
好,4我忘了写了。