版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上中南大学面向对象技术实验报告 姓 名: 学 号: 专业班级: 指导教师: 学 院: 实验题目: 学生成绩管理系统一、设计目的l 掌握面向对象程序设计的基本思路和方法。l 利用所学的基本知识和技能,解决简单的面向对象程序设计问题。二、内容及要求主要功能如下:1添加学生信息功能:添加一个学生的基本信息,包括学号、姓名,性别;2添加课程信息功能:添加一个课程的基本信息,包括课程号、课程名称; 3. 添加考试成绩功能:添加考试成绩:输入一个学生的学号,输入一个课程号,输入分数; 4统计功能:输入姓名,能显示某学生各门科目的课程号和分数。 注: 自学教材前14章,利用所学到的J
2、ava编程知识和编程技巧,设计一个实际的应用软件,初步认识软件设计的基本方法,提高进行工程设计的基本技能及分析、解决实际问题的能力,为后续课程和以后的工程实践打下良好的基础。三、核心代码1、 主类(程序的入口) public class Main /程序入口,主函数public static void main(String args) Main ma=new Main();/实例化ma.zhiXing();/调用方法/* * 执行,判断的方法 */public void zhiXing()System.out.println("t欢迎来到徐兴豪学生成绩管理系统");/开始
3、执行,致欢迎词operating();/* * 选择操作和处理操作的方法 */private void operating()choseOperating();/选择操作dealOperating();/处理操作/* * 选择操作,可以在每次完成操作之后又出现 */private void choseOperating()System.out.println("请选择你想要的操作(输入数字并按回车键):");/选择操作System.out.println("0:退出 1:添加学生信息 2:添加课程信息 3:添加考试成绩 4:统计");/* * 处理操作,
4、根据扫描的命令来执行相应的模块 */private void dealOperating()/生成一个扫描器,扫描用户输入的命令;System.in返回的是一个InputStreamScanner sc=new Scanner(System.in);int i=sc.nextInt();switch (i) case 0:System.out.println("你已经退出系统了!");System.exit(0);/退出系统break;case 1:System.out.println("t欢迎进入<添加学生信息>");addStudent(
5、);break;case 2:System.out.println("t欢迎进入<添加课程信息>");addCourse();break;case 3:System.out.println("t欢迎进入<添加考试成绩>");addGrade();break;case 4:System.out.println("t欢迎进入<统计>");tongji();break;default:System.out.println("输入有误,请重新输入");choseOperating();d
6、ealOperating();/调用本身,监听再次输入的结果break;/* * 添加学生的方法 * 扫描需要填入的信息 */private void addStudent() Scanner sc=new Scanner(System.in);System.out.println("学号:");int sno=sc.nextInt();/int型的值System.out.println("姓名:");String sname=sc.next();/string型的值System.out.println("性别:");String s
7、ex=sc.next();int i=addOrNot(sc);if(i=1)/如果添加Student stu=new Student(String.valueOf(sno),sname,sex);/创建一个学生对象String contentStr=stu.contentStr();/返回连接的字符串boolean isSucceed=FileWrite.wirteIn2File(FileConfig.FILE_STUDENT, contentStr);/判断是否插入数据成功if(isSucceed)/如果成功System.out.println("添加数据成功:");/
8、告诉别人成功了,选择其他操作System.out.println();/空一格operating();else/添加数据不成功,重新输入System.out.println("添加失败,请重新加入");addStudent();/* * 添加课程的方法 * 扫描需要填入的信息 */private void addCourse() Scanner sc=new Scanner(System.in);System.out.println("课程编号:");int cno=sc.nextInt();/int型的值System.out.println("
9、;课程名称:");String cname=sc.next();/string型的值int i=addOrNot(sc);if(1=i)/如果添加Course cou=new Course(String.valueOf(cno),cname);/创建一个课程对象String contentStr=cou.contentStr();/要插入的字符串boolean isSucceed=FileWrite.wirteIn2File(FileConfig.FILE_COURSE, contentStr);/判断是否插入数据成功if(isSucceed)/如果成功System.out.prin
10、tln("添加数据成功:");/告诉别人成功了,选择其他操作System.out.println();/空一格operating();else/添加数据不成功,重新输入System.out.println("添加失败,请重新加入");addCourse();/* * 添加成绩的方法 * 扫描需要填入的信息 */private void addGrade() Scanner sc=new Scanner(System.in);System.out.println("学生学号:");int sno=sc.nextInt();/int型的值
11、System.out.println("课程编号:");int cno=sc.nextInt();/int型的值System.out.println("学科成绩:");float grade=sc.nextFloat();/int型的值int i=addOrNot(sc);if(1=i)/如果添加Grade gra=new Grade(String.valueOf(sno),String.valueOf(cno),String.valueOf(grade);/创建一个成绩对象String contentStr=gra.contentStr();/要插入的
12、字符串boolean isSucceed=FileWrite.wirteIn2File(FileConfig.FILE_GRADE, contentStr);/判断是否插入数据成功if(isSucceed)/如果成功System.out.println("添加数据成功:");/告诉别人成功了,选择其他操作System.out.println();/空一格operating();else/添加数据不成功,重新输入System.out.println("添加失败,请重新加入");addGrade();/* * 统计方法 * 扫描需要填入的信息 * 输入学生姓
13、名,显示各门科目的课程号cno和成绩grade */private void tongji() System.out.println("请输入需要统计的学生的姓名:");Scanner sc=new Scanner(System.in);String sname=sc.next();int result=isStuIn(sname);if(0=result)System.out.println("该姓名不存在,请返回主目录创建该学生!");else if(-1=result)System.out.println("该姓名存在,但是没有相关的课程
14、信息,请返回主目录创建成绩等信息!");else if(1=result)System.out.println("恭喜恭喜,查找成功,请选择其他操作!");operating();/选择操作/* * 判断是否列表中有这个学生的方法 * 除非存在该姓名,并且 * 返回值 0:不存在该姓名 1:正常可以输出 * -1,存在姓名,但是不存在相应的数据 */public int isStuIn(String sname)/获得学生列表ArrayList<Student> stuList=FileRead.getStuList();for(int i=0;i&l
15、t;stuList.size();i+)if(stuList.get(i).getSname().equals(sname)/如果存在该姓名String sno=stuList.get(i).getSno();/得到该学生的序号if(!isSnoInGra(sno)/如果返回false说明有该学生姓名,没有相关的课程信息return -1;elsereturn 1;return 0;/* *判断该学号是否在成绩列表中(要查的学生在学生列表中) * param sno * return */public boolean isSnoInGra(String sno)/获得成绩列表ArrayList
16、<Grade> graList=FileRead.getGraList();ArrayList<TongJi> tonList=new ArrayList<TongJi>();for(int i=0;i<graList.size();i+)if(sno.equals(graList.get(i).getSno()/如果两个列表的学号相等则遍历该学生的信息TongJi tj=new TongJi(graList.get(i).getCno(),graList.get(i).getGrade();tonList.add(tj);/加入到列表if(tonLi
17、st.size()>0)/如果有数据,则遍历打印出来/打印需要的信息System.out.println("-结果-");for(int i=0;i<tonList.size();i+)System.out.println("课程编号:"+tonList.get(i).getCno()+" 学科成绩:"+tonList.get(i).getGrade();System.out.println();return true;else /没有数据return false;/* * 是否添加学生,课程,成绩(3者可公用) * 1表
18、示添加,0表示取消 */private int addOrNot(Scanner sc)System.out.println("输入1确认添加,输入0取消添加");int i=sc.nextInt();if(1=i)System.out.println("确认添加");else if(0=i)/若取消添加则返回上机System.out.println("取消添加");operating();elseSystem.out.println("输入有误,请重新输入");addOrNot(sc);return i;2、 数
19、据类(定义实现了各功能)(1)添加课程 public class Course private String cno;/课程号private String cname;/课程名/构造函数public Course() public Course(String cno, String cname) o = cno;ame = cname;/* * 用于将Course类的属性的值封装在一个字符串内以便添加到文件中 * return:要写入文件的字符串 * 写成以下格式以便利用String的正则匹配分解得到实体 */public String contentStr()return cno+"
20、;,"+cname+"n"/覆盖toString方法,便于打印测试public String toString() return "Course cname=" + cname + ", cno=" + cno + ""/get和set方法public String getCno() return cno;public void setCno(String cno) o = cno;public String getCname() return cname;public void setCname(Str
21、ing cname) ame = cname;(2)添加成绩public class Grade private String sno;/学生学号private String cno;/课程编号private String grade;/成绩/构造函数public Grade() public Grade(String sno, String cno, String grade) this.sno = sno;o = cno;this.grade = grade;/* * 依据从文件中读取的一行字符串解剖成一个学生实体对象 * param contentStr */public Grade(S
22、tring contentStr)String field=contentStr.split(",");this.setSno(field0);this.setCno(field1);this.setGrade(field2);/* * 用于将Grade类的属性的值封装在一个字符串内以便添加到文件中 * return:要写入文件的字符串 * 写成以下格式以便利用String的正则匹配分解得到实体 */public String contentStr()return sno+","+cno+","+grade+"n"
23、/覆盖toString方法,便于打印测试public String toString() return "Grade cno=" + cno + ", grade=" + grade + ", sno=" + sno + ""/get和set方法public String getSno() return sno;public void setSno(String sno) this.sno = sno;public String getCno() return cno;public void setCno(Stri
24、ng cno) o = cno;public String getGrade() return grade;public void setGrade(String grade) this.grade = grade;(3)添加学生信息 public class Student private String sno;/学号private String sname;/学生姓名private String sex;/性别/构造函数public Student()public Student(String sno, String sname, String sex) this.sno = sno;th
25、is.sname = sname;this.sex = sex;/* * 依据从文件中读取的一行字符串解剖成一个学生实体对象 * param contentStr */public Student(String contentStr)String field=contentStr.split(",");this.setSno(field0);this.setSname(field1);this.setSex(field2);/* * 用于将student类的属性的值封装在一个字符串内以便添加到文件中 * return:要写入文件的字符串 * 写成以下格式以便利用String
26、的正则匹配分解得到实体 */public String contentStr()return sno+","+sname+","+sex+"n"/覆盖toString方法,便于打印测试public String toString() return "Student sex=" + sex + ", sname=" + sname + ", sno=" + sno+ ""/ set和get方法public String getSno() return sno
27、;public void setSno(String sno) this.sno = sno;public String getSname() return sname;public void setSname(String sname) this.sname = sname;public String getSex() return sex;public void setSex(String sex) this.sex = sex;(4)统计查成绩 public class TongJi private String cno;/课程编号private String grade;/成绩/重构函
28、数public TongJi(String cno, String grade) o = cno;this.grade = grade;Overridepublic String toString() return "TongJi cno=" + cno + ", grade=" + grade + ""/get和set方法public String getCno() return cno;public void setCno(String cno) o = cno;public String getGrade() return gr
29、ade;public void setGrade(String grade) this.grade = grade;3、 FileIO类(对信息输入到文件和从文件读取数据)(1) 写文件public class FileWrite /* * 将内容写入文件的方法 * param filePath:要写入的目标文件 * param contentStr:要写入的内容 * return:写入的成败 */public static boolean wirteIn2File(String filePath,String contentStr)File file=new File(filePath);/
30、根据路劲实例化文件OutputStream ous;try ous = new FileOutputStream(file,true);/true表示能够在文件的尾部追加内容DataOutputStream dos=new DataOutputStream(ous);/封装一下以便写入byte data=contentStr.getBytes();/得到字符串的字节dos.write(data, 0, data.length);/写入 catch (Exception e) e.printStackTrace();return false;/若有什么异常则表示失败return true;(2)
31、读文件public class FileRead /* * 获得学生信息列表的方法 * return */public static ArrayList<Student> getStuList()ArrayList<Student> stuList=new ArrayList<Student>();/创建链表对象DataInputStream dis=readFromFile(FileConfig.FILE_STUDENT);/得到文件数据输入流对象String txt;try txt = dis.readLine();/一行一行的读while(txt!=n
32、ull)Student stu=new Student(txt);/根据构造函数解剖成一个学生实体对象stuList.add(stu);/加入到列表txt = dis.readLine();/不为空就继续读取字符串 catch (IOException e) e.printStackTrace();return stuList;public static ArrayList<Grade> getGraList()ArrayList<Grade> graList=new ArrayList<Grade>();DataInputStream dis=readFr
33、omFile(FileConfig.FILE_GRADE);String txt;try txt = dis.readLine();while(txt!=null)Grade stu=new Grade(txt);graList.add(stu);txt = dis.readLine(); catch (IOException e) e.printStackTrace();return graList;/* * 依据文件路劲获得封装后的数据输入流的方法 * param filePath * return */public static DataInputStream readFromFile(
34、String filePath)DataInputStream dis;File file=new File(filePath);try InputStream ins=new FileInputStream(file);dis=new DataInputStream(ins);/传入InputStream对象实例化,得到数据流 catch (Exception e) e.printStackTrace();return null;return dis;四、运行结果1、添加学生信息2、添加课程信息3、 添加成绩信息五、完整源代码package xxh.main;import java.util
35、.ArrayList;import java.util.Scanner;import xxh.FileIO.FileConfig;import xxh.FileIO.FileRead;import xxh.FileIO.FileWrite;import xxh.datas.Course;import xxh.datas.Grade;import xxh.datas.Student;import xxh.datas.TongJi;/* * 程序入口类 * */public class Main /程序入口,主函数public static void main(String args) Main
36、ma=new Main();/实例化ma.zhiXing();/调用方法/* * 执行,判断的方法 */public void zhiXing()System.out.println("t欢迎来到徐兴豪学生成绩管理系统");/开始执行,致欢迎词operating();/* * 选择操作和处理操作的方法 */private void operating()choseOperating();/选择操作dealOperating();/处理操作/* * 选择操作,可以在每次完成操作之后又出现 */private void choseOperating()System.out.pr
37、intln("请选择你想要的操作(输入数字并按回车键):");/选择操作System.out.println("0:退出 1:添加学生信息 2:添加课程信息 3:添加考试成绩 4:统计");/* * 处理操作,根据扫描的命令来执行相应的模块 */private void dealOperating()/生成一个扫描器,扫描用户输入的命令;System.in返回的是一个InputStreamScanner sc=new Scanner(System.in);int i=sc.nextInt();switch (i) case 0:System.out.pr
38、intln("你已经退出系统了!");System.exit(0);/退出系统break;case 1:System.out.println("t欢迎进入<添加学生信息>");addStudent();break;case 2:System.out.println("t欢迎进入<添加课程信息>");addCourse();break;case 3:System.out.println("t欢迎进入<添加考试成绩>");addGrade();break;case 4:System.
39、out.println("t欢迎进入<统计>");tongji();break;default:System.out.println("输入有误,请重新输入");choseOperating();dealOperating();/调用本身,监听再次输入的结果break;/* * 添加学生的方法 * 扫描需要填入的信息 */private void addStudent() Scanner sc=new Scanner(System.in);System.out.println("学号:");int sno=sc.nextI
40、nt();/int型的值System.out.println("姓名:");String sname=sc.next();/string型的值System.out.println("性别:");String sex=sc.next();int i=addOrNot(sc);if(i=1)/如果添加Student stu=new Student(String.valueOf(sno),sname,sex);/创建一个学生对象String contentStr=stu.contentStr();/返回连接的字符串boolean isSucceed=FileW
41、rite.wirteIn2File(FileConfig.FILE_STUDENT, contentStr);/判断是否插入数据成功if(isSucceed)/如果成功System.out.println("添加数据成功:");/告诉别人成功了,选择其他操作System.out.println();/空一格operating();else/添加数据不成功,重新输入System.out.println("添加失败,请重新加入");addStudent();/* * 添加课程的方法 * 扫描需要填入的信息 */private void addCourse()
42、 Scanner sc=new Scanner(System.in);System.out.println("课程编号:");int cno=sc.nextInt();/int型的值System.out.println("课程名称:");String cname=sc.next();/string型的值int i=addOrNot(sc);if(1=i)/如果添加Course cou=new Course(String.valueOf(cno),cname);/创建一个课程对象String contentStr=cou.contentStr();/要插入
43、的字符串boolean isSucceed=FileWrite.wirteIn2File(FileConfig.FILE_COURSE, contentStr);/判断是否插入数据成功if(isSucceed)/如果成功System.out.println("添加数据成功:");/告诉别人成功了,选择其他操作System.out.println();/空一格operating();else/添加数据不成功,重新输入System.out.println("添加失败,请重新加入");addCourse();/* * 添加成绩的方法 * 扫描需要填入的信息 *
44、/private void addGrade() Scanner sc=new Scanner(System.in);System.out.println("学生学号:");int sno=sc.nextInt();/int型的值System.out.println("课程编号:");int cno=sc.nextInt();/int型的值System.out.println("学科成绩:");float grade=sc.nextFloat();/int型的值int i=addOrNot(sc);if(1=i)/如果添加Grade
45、gra=new Grade(String.valueOf(sno),String.valueOf(cno),String.valueOf(grade);/创建一个成绩对象String contentStr=gra.contentStr();/要插入的字符串boolean isSucceed=FileWrite.wirteIn2File(FileConfig.FILE_GRADE, contentStr);/判断是否插入数据成功if(isSucceed)/如果成功System.out.println("添加数据成功:");/告诉别人成功了,选择其他操作System.out.p
46、rintln();/空一格operating();else/添加数据不成功,重新输入System.out.println("添加失败,请重新加入");addGrade();/* * 统计方法 * 扫描需要填入的信息 * 输入学生姓名,显示各门科目的课程号cno和成绩grade */private void tongji() System.out.println("请输入需要统计的学生的姓名:");Scanner sc=new Scanner(System.in);String sname=sc.next();int result=isStuIn(snam
47、e);if(0=result)System.out.println("该姓名不存在,请返回主目录创建该学生!");else if(-1=result)System.out.println("该姓名存在,但是没有相关的课程信息,请返回主目录创建成绩等信息!");else if(1=result)System.out.println("恭喜恭喜,查找成功,请选择其他操作!");operating();/选择操作/* * 判断是否列表中有这个学生的方法 * 除非存在该姓名,并且 * 返回值 0:不存在该姓名 1:正常可以输出 * -1,存在
48、姓名,但是不存在相应的数据 */public int isStuIn(String sname)/获得学生列表ArrayList<Student> stuList=FileRead.getStuList();for(int i=0;i<stuList.size();i+)if(stuList.get(i).getSname().equals(sname)/如果存在该姓名String sno=stuList.get(i).getSno();/得到该学生的序号if(!isSnoInGra(sno)/如果返回false说明有该学生姓名,没有相关的课程信息return -1;else
49、return 1;return 0;/* *判断该学号是否在成绩列表中(要查的学生在学生列表中) * param sno * return */public boolean isSnoInGra(String sno)/获得成绩列表ArrayList<Grade> graList=FileRead.getGraList();ArrayList<TongJi> tonList=new ArrayList<TongJi>();for(int i=0;i<graList.size();i+)if(sno.equals(graList.get(i).getSn
50、o()/如果两个列表的学号相等则遍历该学生的信息TongJi tj=new TongJi(graList.get(i).getCno(),graList.get(i).getGrade();tonList.add(tj);/加入到列表if(tonList.size()>0)/如果有数据,则遍历打印出来/打印需要的信息System.out.println("-结果-");for(int i=0;i<tonList.size();i+)System.out.println("课程编号:"+tonList.get(i).getCno()+"
51、; 学科成绩:"+tonList.get(i).getGrade();System.out.println();return true;else /没有数据return false;/* * 是否添加学生,课程,成绩(3者可公用) * 1表示添加,0表示取消 */private int addOrNot(Scanner sc)System.out.println("输入1确认添加,输入0取消添加");int i=sc.nextInt();if(1=i)System.out.println("确认添加");else if(0=i)/若取消添加则返回上机System.out.p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 超市商品陈列与顾客服务手册
- 2025 七年级道德与法治上册自我认知的跨场景对比分析与应用课件
- 2025年医学检验笔试历年真题及答案
- 2025年临床医学医生面试题库及答案
- 2025年联考笔试对答案
- 2025年吴忠市第四中学面试题库及答案
- 2025年软件开发程序员面试题库及答案
- 2025年巨龙矿业集团拉萨笔试及答案
- 2025年林州事业单位招聘考试题及答案
- 2022~2023自考专业(会计)考试题库及答案第373期
- 2026年春季学期全体教师大会校长讲话:点燃新学期教育奋进之力
- 手部关节损伤的人工关节置换
- 山东省平度市九中2026届化学高一第一学期期末联考试题含解析
- 2025课堂惩罚 主题班会:马达加斯加企鹅课堂惩罚 课件
- 2026届安徽省六安二中河西校区高二化学第一学期期末调研试题含答案
- JJF 1218-2025标准物质研制报告编写规则
- 一次函数-经典趣题探究
- 京东人事与组织效率铁律十四条
- 2025年吉林省吉林市中考二模数学试题(含部分答案)
- 高级机工见习记录薄填写
- S1240基础知识介绍
评论
0/150
提交评论