徐州工程学院
课程实验报告
2021-2022学年 第一学期
课程名称: 面向对象程序设计 `
专业班级: 19计转本 `
学生姓名: 李佳佳 `
学 号: 20190911148 `
任课教师: 杨兴运
课程名称 面向对象程序设计
实验项目编号 1905P000701
实验项目名称 Java编程环境和Java程序结构
实验学时 2 实验日期 10.13-10.20
实验地点 计算机应用技术实验室
学生姓名 李佳佳 学号 20190911148
指导教师 杨兴运 实验成绩
一、实验目的
1.掌握下载jdk软件包、Eclipse开发工具的使用方法
2.掌握设置Java程序运行环境的方法
3.掌握编写与运行Java程序的方法
4.了解Java语言的概貌
5.为后续java程序的实验做准备
二、实验内容
问题1
题目:企业发放的奖金根据利润提成。利润低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润,求应发放奖金总数?(知识点:基本数据类型,表达式,条件语句)
程序清单:
import java.util.Scanner;
public class Exp01_01_20190911148 {
public static void main(String args[]){
int m;
double n;
System.out.print("请输入当月利润:");
Scanner sc=new Scanner(System.in);
m=sc.nextInt();
if(m<=100000){
n=m*0.1;
}else if(m<=200000){
n=100000*0.1+(m-100000)*0.075;
}else if(m<=400000){
n=100000*0.1+(200000-100000)*0.08+(m-200000)*0.05;
}else if(m<=600000){
n=100000*0.1+(200000-100000)*0.08+(400000-200000)*0.06+(m-400000)*0.03;
}else if(m<=1000000){
n=100000*0.1+(200000-100000)*0.08+(400000-200000)*0.06+(600000-400000)*0.04+(m-600000)*0.015;
}else{
n=100000*0.1+(200000-100000)*0.08+(400000-200000)*0.06+(600000-400000)*0.04+(1000000-600000)*0.02+(m-1000000)*0.01;
}
System.out.println("发放奖金总数为:"+n+"元");
}
}
运行结果:
问题2: 本程序的功能是:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
程序清单:
import java.util.Scanner;
public class Exp01_02_20190911148 {
public static void main(String args[]){
int a,sum=0,t,k;
System.out.print("请输入一个数:");
Scanner sc=new Scanner(System.in);
a=sc.nextInt();
sum=sum+a;
k=t=a;
for(int i=1;i<k;i++){
t=t*10+k;
sum+=t;
}
for(int i=0;i<a;i++){
for(int j=0;j<=i;j++){
System.out.print(a);
}
if(i<a-1){
System.out.print("+");
}
}
System.out.println("="+sum);
}
}
运行结果:
问题3:在控制台输出以下图形
* 要求:
* (1)由一个程序菜单供用户选择,如下:
* -------------------------------------------------
* 【1】输入图形的行数 【2】打印哪个图形 【3】退出
* -------------------------------------------------
* (2)输入图形的行数的方法为:
* String rows_input =
* JOptionPane.showInputDialog(“请输入图形的行号”);
* int rows = Integer.parseInt(rows_input);
* (3)直到用户在程序菜单里输入3时程序才结束。
程序清单:
import java.util.Scanner;
public class Exp01_03_20190911148 {
static int line=0;
public static void main(String[] args) {
System.out.println(" 请输入图形的行号 : ");
Scanner s = new Scanner(System.in);
line = s.nextInt();
System.out.println(" 请选择几号图形 : ");
int cc = s.nextInt();
if(cc>4&&cc<0){
System.out.println(" 请输入规定的图形号码 : ");
}else if(cc==1){
one(line);
}else if(cc==2){
two(line);
}else if(cc==3){
three(line);
}else if(cc==4){
four(line);
}
System.out.println(" 请输入 "+"3"+"退出程序 : ");
int ex = s.nextInt();
if (ex==3) {
System.out.println(" 程序结束");
}else {
System.out.println(" 请输入 "+"3"+"退出程序 : ");
}
}
static void one(int line){
for (int j = 1; j <= line; j++) {
for (int i = 1; i <= j; i++) {
System.out.print(" "+i);
}
System.out.println();
}
}
static void two(int line) {
for (int j = 1; j <= line; j++) {
for (int i = 1; i <= line+1 - j; i++) {
System.out.print(" "+i);
}
System.out.println();
}
}
static void three(int line){
for (int i = 0; i < line; i++) {
for (int j = 0; j < line - 1 - i; j++) {
System.out.print(" ");
}
for (int j = 0; j < i + 1; j++) {
int l = j+1;
System.out.print(""+l);
}
System.out.println();
}
}
static void four(int line){
for(int i=1;i<=line;i++)
{
for(int j=1;j<=line;j++)
{
if(j<i)
System.out.print(" ");
else
{
System.out.print(" "+j);
if(j==line)
System.out.println();
}
}
}
}
}
运行结果:
问题4: 打印出如下图案(菱形) (知识点:循环语句、条件语句)
* *
* ***
* ******
* ********
* ******
* ***
* *
* 要求:
* (1)行数由用户自己输入,不同的行数对应不同的菱形;
* (2)行数应该是奇数行,如果输入偶数行,应提示用户重新输入
程序清单:
import java.util.Scanner;
public class Exp01_04_20190911148 {
static int n=0;
public static void main(String[] args) {
System.out.println(" 请选择输出菱形的行数 : ");
Scanner s = new Scanner(System.in);
int line = s.nextInt();
n =( line +1)/2;
if(line%2!=0){
printStar(n);
System.out.println("您输入的行数为 : "+line);
}else {
System.out.println(" 行数应该是奇数行,用户请重新输入 : ");
}
}
private static void printStar(int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < 2 * n; j++) {
if (j < n - i)
System.out.print(" ");
if (j >= n - i && j <= n + i)
System.out.print("*");
}
System.out.println();
}
for (int i = 1; i < n; i++) {
System.out.print(" ");
for (int j = 0; j < 2 * n - i; j++) {
if (j < i)
System.out.print(" ");
if (j >= i && j < 2 * n - i - 1)
System.out.print("*");
}
System.out.println();
}
}
}
运行结果:
三、实验总结
重点还是在学习概念等一些常识性的东西,也学到平常在课堂中没有学到的东西,在java api中又多认识了几种类,使我对java产生了浓厚的兴趣。两周的时间说长也不长,在这两周中,我们的实训任务是仓库管理系统,在演示过程中,并没有觉得它有很难,但在实际编程过程中,却遇到了各种各样的错误,这也多亏了老师的指点和班级同学的帮忙,使我一步步克服了实训过程中遇到的困难。虽然我所做的系统并没有实现所有功能,但是我觉得自己进步了,很多原来都不懂的东西现在都已经了解了,也培养了我的团队合作精神,让我感受到了集体的温暖。实训的过程与课堂上的讲课比,更为有趣,因为可以真正的自己动手操作,使我对老师上课所讲的内容有了更深一步的了解,使我在以后的编程中可以灵活运用。我期待以后有更多类似的实训,使我们可以多掌握一项技能,也可以让我们在以后找工作中可以有更多的实践经验。学知识可不能凭自己的爱好和一时兴趣,要一步一个脚印,认认真真,踏踏实实,理论与实践相结合,在扎实掌握课本实例和内容之后,有一定的扩展阅读和课外学习,充分全面的了解java的应用和扩展运用。
在我所学的语言当中,我自认为java是一门比较强大的面向对象的编程语言,不仅仅因为它的跨平台性,更多的是因为它的灵活多变
和实用性较强,可以说比较的经典和强悍。所以学好java语言有很大的用处,这次实训,我们更多学到的是不懂就问和自己应该尽自己的全力去尝试,哪怕失败,只要自己尽自己的全力,和身边同学一起探讨而不是抄袭,团结合作,发挥团队意识,最后在自己的努力下,终于运行成功,这种成就感美不可言,心情愉悦至极。
更多的是兴奋和自己掌握了知识之后的饱满感,学知识就像吃东西一样,吃饱了就应该好好的消化。要不断的温习和运用,做到举一反三,将所学知识充分融入到平时的学习生活中去,为以后的工作做好坚实的基础。感谢学校和老师能够为我们提供这次机会,让我们更好的掌握和了解java这门语言。
课程名称 面向对象程序设计
实验项目编号 1905P000701
实验项目名称 Java编程环境和Java程序结构
实验学时 2 实验日期 10.25-11.3
实验地点 计算机应用技术实验室
学生姓名 李佳佳 学号 20190911148
指导教师 杨兴运 实验成绩
一、实验目的
1.掌握下载jdk软件包、Eclipse开发工具的使用方法
2.掌握设置Java程序运行环境的方法
3.掌握编写与运行Java程序的方法
4.了解Java语言的概貌
5.为后续java程序的实验做准备
二、实验内容
问题1
定义一个6行6列的二维整型数组,输出该二维数组中的每行和每列的最大值、最小值、和平均值。(知识点:数组的创建、初始化和元素访问)
* 要求:(1)数组元素的值随机产生,大小为20值99之间;
* (2)输出结果按下面表格的形式输出。每行,每列后面输出和、平均值、最大值和最小值,其中平均值保留小数点1位。
程序清单:
import java.util.Random;
public class Exp02_01_20190911148 {
public static void main(String[] args) {
int[][] a = new int[6][6];
Random random = new Random();
int[] sums = new int[6];
int[] maxs = new int[6];
int[] mins = new int[6];
for (int i = 0; i < a.length; i++) {
maxs[i] = Integer.MIN_VALUE;
mins[i] = Integer.MAX_VALUE;
}
for (int i = 0; i < a.length; i++) {
int sum = 0;
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
for (int j = 0; j < a[i].length; j++) {
int value = 20 + random.nextInt(79);
a[i][j] = value;
System.out.print(value + " ");
sum += value;
if (max < value) max = value;
if (min > value) min = value;
sums[j] += value;
if (maxs[j] < value) maxs[j] = value;
if (mins[j] > value) mins[j] = value;
}
String format = String.format("%.1f", (sum / 6.0));
System.out.print("sum:"+sum+" avg:" +format+" max:"+max+" min:"+min);
System.out.println();
}
System.out.print("sum:");
for (int i = 0; i < a.length; i++)
System.out.print(sums[i]+" ");
System.out.print("\navg:");
for (int i = 0; i < a.length; i++) {
String format = String.format("%.1f", (sums[i] / 6.0));
System.out.print(format+" ");
}
System.out.print("\nmax:");
for (int i = 0; i < a.length; i++)
System.out.print(maxs[i]+" ");
System.out.print("\nmin:");
for (int i = 0; i < a.length; i++)
System.out.print(mins[i]+" ");
}
}
.
运行结果:
问题二:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。 (知识点:数组定义和创建、数组遍历、数组元素访问)
* 例如 1 2 3 4 5 6 7 移动4个就变成4 5 6 7 1 2 3
* 要求:(1)n和m的值由用户输入;
* (2)每个元素的值由用户输入;
* (3)利用Scanner类完成数值的输入。
程序清单:
import java.util.Random;
import java.util.Scanner;
public class Exp02_02_20190911148 {
public static void main(String args[]){
int a[]=new int[20];
int b[]=new int[20];
int m,n;
System.out.println("请输入m的值:");
Scanner sc=new Scanner(System.in);
m=sc.nextInt();
for(int i=1;i<=m;i++){
System.out.print("请输入第"+i+"元素的值:");
a[i-1]=sc.nextInt();
}
System.out.println("请输入n的值:");
n=sc.nextInt();
for(int i=0;i<n;i++){
b[i]=a[m-i-1];
}
for(int i=0;i<n;i++){
for(int j=a.length-1;j>i;j--){
a[j]=a[j-1];
}
a[i]=b[n-i-1];
}
for(int i=0;i<m;i++){
System.out.print(a[i]+"\t");
}
}
}
运行结果:
问题3:有2个多维数组分别是 2 3 4 和 1 5 2 8
* 4 6 8 5 9 10 -3
* 2 7 -5 -18
* 按照如下方式进行运算。生成一个2行4列的数组。
* 此数组的第1行1列是2*1+3*5+4*2
* 第1行2列是2*5+3*9+4*7 第2行1列是4*1+6*5+8*2 依次类推。(知识点:多维数组定义和创建、数组遍历、数组元素访问)
*
程序清单:
public class Exp02_03_20190911148 {
public static void main(String[] args) {
int[][] a = new int[][]{{2,3,4},{4,6,8}};
int[][] b = new int[][]{{1,5,2,8},{5,9,10,-3},{2,5,-5,-18}};
for (int i = 0; i < a.length; i++) {
for (int k = 0; k < b[i].length; k++) {
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j] + " * " +b[j][k] );
if (j != a[i].length-1)
System.out.print(" + ");
}
System.out.print(" ");
}
System.out.println();
}
}
}
运行结果:
问题4:编写一个Java程序,完成以下功能:(知识点:String创建和String常用方法的使用,注意查看Java doc API)
* (1)声明一个名为school的String对象,内容是
* “My school is Xuzhou Institute Of Technology”
* (2)打印字符串的长度;
* (3)打印字符串的第一个字符和最后一个字符;
* (4)打印字符串的第一个单词和最后一个单词;
* (5)打印”Xuzhou”在该字符串的起始位置(从0开始编号的位置);
* (6)将该字符串转为大写字母输出
程序清单:
public class Exp02_04_20190911148 {
public static void main(String[] args) {
String str = "My school is Xuzhou Institute Of Technology";
char[] chars = str.toCharArray();
System.out.println("字符串的长度为:"+chars.length);
System.out.println("打印字符串的第一个字符和最后一个字符:");
for (int i = 0; i < chars.length; i++)
if (i == 0 || i == chars.length-1)
System.out.print(chars[i]+" ");
System.out.println("\n打印字符串的第一个单词和最后一个单词");
String[] split = str.split(" ");
for (int i = 0; i < split.length; i++)
if (i == 0 || i == split.length-1)
System.out.print(split[i]+" ");
System.out.println("\n”Xuzhou”在该字符串的起始位置");
for (int i = 0; i < chars.length; i++)
if (chars[i] == 'X')
System.out.println(i);
System.out.println("将该字符串转为大写字母输出");
for (char aChar : chars) {
if (aChar >= 'A' && aChar <= 'Z')
System.out.print(aChar);
else
System.out.printf("%S", aChar);
}
}
}
运行结果:
问题5:Java和 JavaScript 虽有都有Java四个字,但它们是完完全全不同的两种东西,Java是由Sun 公司于1995年5月推出的,而JavaScript 是于1995年由Netscape公司设计实现而成的,由于Netscape公司与Sun公司合作,Netscape高层希望它看上去能够像Java,因此取名为JavaScript。
* (1)请从上面一段文字中,找出所有名称为Java的字符串并统计该字符串出现的次数,注意不要统计名称为“JavaScript”中的Java字符串。
* (2)在该段文字的后面追加一段文字:
* Sun公司已被Oracle公司收购。
程序清单:
public class Exp02_05_20190911148 {
public static void main(String[] args) {
StringBuffer buffer = new StringBuffer();
buffer.append( "Java和 JavaScript 虽有都有Java四个字," +
"但它们是完完全全不同的两种东西," +
"Java是由Sun 公司于1995年5月推出的," +
"而JavaScript 是于1995年由Netscape公司设计实现而成的," +
"由于Netscape公司与Sun公司合作," +
"Netscape高层希望它看上去能够像Java,因此取名为JavaScript。");
String[] split = buffer.toString().split("Java");
int index = 0;
for (int i = 0; i < split.length; i++) {
char[] chars = split[i].toCharArray();
if (chars.length>0 && chars[0] != 'S')
index++;
}
System.out.println(index);
buffer.append("Sun公司已被Oracle公司收购。");
System.out.println(buffer);
}
}
运行结果:
问题6:*编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,
* 应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”。
* 知识点:String中常用方法、Java中英文字节数
* 提示:通常说的一个字符占两个字节是指汉字,英文字母是一个字节
* String s = “我ABC汉DEF”
* (1)先将s转为字符数组 char c[] = s.toCharArray()
* (2)判断每个字符是英文字符还是中文字符,思路是看这个字符所占字节的长度
* String.valueOf(c).getBytes().length
程序清单:
import java.util.Scanner;
public class Exp02_06_20190911148 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str;
str="我ABC";
System.out.println(str);
char[] chars = str.toCharArray();
int index = 4;
for (char aChar : chars) {
int length = String.valueOf(aChar).getBytes().length;
if (index - length >=0){
System.out.print(aChar);
if (length == 3) length =2;
}
index-=length;
}
}
}
运行结果:
问题7:金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。
程序清单:
import java.util.Scanner;
public class Exp02_07_20190911148 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入金额");
String str = "1011";
char[] data = new char[]{'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
char[] units = new char[]{'元','拾','佰','仟','万','拾','佰','仟','亿'};
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
int index = Integer.parseInt(chars[i] + "");
System.out.print(data[index]);
if (index != 0)
System.out.print(units[chars.length-i-1]);
}
}
}
运行结果:
三、实验总结
重点还是在学习概念等一些常识性的东西,,它的开发工具、数据类型、变量、接口、输入输出流等。学会分析异常,抛出异常,后期主要的编程运用,件。我觉得这两种程序结构有很大的不同,不管是体系结构还是运行方式,都有很大的区别,而我主要偏向于小程序的学习。因为我感觉它实用性比较大,可以做出很多不错的游戏、运用程序等,而且它比较灵活。当然学知识不能仅凭自己的爱好和一时兴趣,要一步一个脚印、认认真真、踏踏实实,理论与实践相结合。在掌握课本实例和内容之后,要有一定的扩展阅读和课外学习,充分全面的了解java的应用和扩展运用。在我所学的语言当中,我自认为java是一门比较强大的面向对象编程语言。不仅仅因为它的跨平台性,更多的是因为它的灵活多变和实用性,而且它比较的经典和强悍。
这次实训,面对老师布置的任务,一开始有些慌张和无措。不过,事后我首先想到这和课本上的某些知识具有结合点,回忆和分析了老师教过的算法和具体实施方法,并综合考虑了其他的方面。在编写时,一个小小的符号、一个常量变量的设定,这都无不考量着我的细心和严谨。所以学习java,不仅对我们以后学习其他语言有很大的好处,而且也让我们知道了和理解了作为一个编程人员首先应具有的良好心理素质,那就是冷静思考和专心致志。在此次实训中,我意识到一个好的编程人员要善于沟通和团结拼搏。实训结束后,我觉得要学好一门计算机语言必须牢记以下几点:
1. 态度第一 2.兴趣是关键 3.敢于挑战 4.不懈追求
实训结束了,大家都有一种解脱的感觉。当然我想自己更多的是兴奋和一点点的成就感。现在我觉得,学习java要不断的复习和运用,做到举一反三,将所学知识充分融入到平时的学习生活中去,从而为以后的工作打好坚实的基础。感谢学校和老师能够为我们提供这次机会,让我们更好的掌握和了解java这门语言。
通过这次实训,我真的从中学到了很多东西。我对这个介于人类与非人类之间的计算机编程语言有了较上学期更进一步的认识。其间开心过、郁闷过、无奈过、彷徨过;随着实训的圆满成功与实验报告的顺利完成,有点微微的自豪感使人难忘。至于我做的程序,还不是很完善,所以我将一直去完善它,不断地学习下去。伴随着学习的深入,我发现高深的东西还有很多很多,等待着我自己去发掘。对于java语言,我会更加努力。
课程名称 面向对象程序设计
实验项目编号 1905P000701
实验项目名称 Java编程环境和Java程序结构
实验学时 2 实验日期 11.8-11.17
实验地点 计算机应用技术实验室
学生姓名 李佳佳 学号 20190911148
指导教师 杨兴运 实验成绩
一、实验目的
1.掌握下载jdk软件包、Eclipse开发工具的使用方法
2.掌握设置Java程序运行环境的方法
3.掌握编写与运行Java程序的方法
4.了解Java语言的概貌
5.为后续java程序的实验做准备
二、实验内容
问题1
编程创建一个立方体类Cube,在其中定义三个变量length,width,height分别表示一个立方体的长、宽和高,再定义一个方法setCube对这三个变量进行初始化,然后定义求立方体的体积和表面积的方法。
(1)编写一个测试类,在main方法中创建立方体对象,求给定尺寸的立方体的体积和表面积,并输入结果。
(2)改用构造方法实现长、宽和高的初始化。
(3)测试类放在包名为com.sy3.exe01.test包中,其它类放在com.sy3.exa01包中。
(知识点:类的定义,对象的创建,构造方法的使用)
(注意:如果需要从键盘输入长宽高的数据时,请从测试类的main方法中输入,程序的其它地方只接受传递的参数)
程序清单:
public class Exp03_01_20190911148 {
public static void main(String args[]){
Cube c=new Cube();
c.setCube(7, 8, 7);
System.out.println("表面积为:"+c.biaomianji());
System.out.println("体积为:"+c.tiji());
Cube d=new Cube(2,4,3);
System.out.println("-------------");
System.out.println("表面积为:"+d.biaomianji());
System.out.println("体积为:"+d.tiji());
}
}
class Cube{
int length;
int width;
int height;
public Cube(){
}
public Cube(int length, int width, int height) {
super();
this.length = length;
this.width = width;
this.height = height;
}
public void setCube(int length,int width,int height){
this.length=length;
this.width=width;
this.height=height;
}
public int biaomianji(){
int t;
t=(length*width+width*height+height*length)*2;
return t;
}
public int tiji(){
int t;
t=length*width*height;
return t;
}
}
.
运行结果:
问题2:设计并实现一个课程类,代表学校中的一门课程,将这门课程的相关信息
组成该类的属性(如课程代码、课程名称、课程类别、学时、学分等),并在类中定义各个属性相关的访问方法(如获取和设置课程代码、课程名称,课程类别,获取和修改学时、学分,打印输出课程基本信息等),最后使用主函数测试此类(包括创建对象,调用相应方法等)。
课程号 课程名 学分 学时 课程类型
courId courName courCredit courHours courType
E052026 Linux操作系统 3 56 专业选修
S052005 面向对象程序设计 3.5 56 专业教育
S052006 面向对象程序设计实验 1 32 专业教育
S052037 数据库原理及应用 3 48 专业教育
S052011 数据库原理及应用实验 1 32 专业教育
S052049 操作系统 4 64 专业教育
要求:
(1)创建一个课程类Course,定义该类的各个属性(如上表第二行),为个属性设置相应的setter/getter方法。
(2)定义一个没有参数和带有全部参数的构造方法。
(3)重写toString()方法,返回课程的信息。
(4)在该类中定义一个类变量passingScore,及格标准为60.
(5)新建测试类,在main方法中创建一个大小为6的课程数组,把上面表格中的6门课信息保存在该数组中。利用增强型循环输出课程的信息。
(6)在测试类中定义一个静态方法printCourses(Course[] courses),通过该方法输出课程中的信息。
(7)在测试类中定义一个静态方法printCourses(Course[] courses,float credit),通过该方法输出学分等于credit的课程信息。
(8)测试类放在包名为com.sy3.exe02.test包中,其它类放在com.sy3.exa02包中。
(知识点:类的定义,对象的创建,构造方法的使用,对象数组,静态变量和静态方法,方法重载)
(注意:课程的信息可以直接给定,不一定要通过键盘输入)
程序清单:public class Exp03_02_20190911148 {
public static void main(String args[]){
Course c[]=new Course[6];
c[0]=new Course("E052026","linux操作系统",3,56,"专业选修");
c[1]=new Course("S052005","面向对象程序设计",3.5,56,"专业教育");
c[2]=new Course("S052006","面向对象程序设计实验",1,32,"专业教育");
c[3]=new Course("S052037","数据库原理及应用",3,48,"专业教育");
c[4]=new Course("S052011","数据库原理及应用实验",1,32,"专业教育");
c[5]=new Course("S052006","操作系统",4,64,"专业教育");
printCourses(c);
System.out.println();
printCourses(c,3);
}
public static void printCourses(Course[] c){
for(int i=0;i<6;i++){
System.out.println(c[i].toString());
}
}
public static void printCourses(Course[] c,double credit){
for(int i=0;i<6;i++){
if(c[i].getCourCredit()==credit){
System.out.println(c[i].toString());
}
}
}
}
class Course{
private String courId;
private String courName;
private double courCredit;
private int courHours;
private String courType;
int passingScore=60;
public Course() {
super();
}
public Course(String courId, String courName, double courCredit,
int courHours, String courType) {
super();
this.courId = courId;
this.courName = courName;
this.courCredit = courCredit;
this.courHours = courHours;
this.courType = courType;
}
public String getCourId() {
return courId;
}
public void setCourId(String courId) {
this.courId = courId = String.format("%-16s", courId);
}
public String getCourName() {
return courName;
}
public void setCourName(String courName) {
this.courName = courName= String.format("%-16s", courName);
}
public double getCourCredit() {
return courCredit;
}
public void setCourCredit(double courCredit) {
this.courCredit = courCredit;
}
public int getCourHours() {
return courHours;
}
public void setCourHours(int courHours) {
this.courHours = courHours;
}
public String getCourType() {
return courType;
}
public void setCourType(String courType) {
this.courType = courType = String.format("%-16s", courType);
}
public String toString(){
return "课程号:"+courId+"\t\t课程名:"+courName+"\t\t课程类型:"+courType+"\t\t学时:"+courHours+"\t\t学分:"+courCredit;
}
}
运行结果:
问题3:设计并实现一个“信电工程学院学生通信录”系统。系统采用字符界面,在出现的主界面中按提示输入相应字符以选择“增加”、“删除”、“修改”、“查找”等功能进行操作。学生通信录信息的存储可采用数组的方式。
要求:
(1)新建一个学生信息类StudentInfo,定义该类的各个属性(如下表第二行),变量的访问修饰符为private,为个属性设置相应的setter/getter方法。
(2)为StudentInfo类定义三个构造方法,一个没有参数,一个带有学号、姓名、性别及班级四个参数,一个带有全部参数。
(3)在StudentInfo类中定义显示学生信息的方法 void showStuInfo()。
(4)创建一个通讯录类Contacts,在该类中定义一个能最大能容纳100个学生的对象数组students,该数组用于保存学生信息,定义一个表示当前有几个学生信息的变量count,该变量类型为整型。变量的访问修饰符为private,为个属性设置相应的setter/getter方法。
(5)在Contacts类中定义添加学生信息、修改学生信息和删除学生信息,以及查找学生信息的方法。
● void append(StudentInfo student)
● void update(StudentInfo newStudent,String stuId)
● void delete(String stuId)
● Student findByStuId(String stuId)
● Student[] findByStuClass(String stuClass)
● Student[] find()
(6)创建测试类,根据输入的命令参数完成学生通讯录信息的“增加”、“删除”、“修改”、“查找”等功能。
(7)测试类放在包名为com.sy3.exe03.test包中,其它类放在com.sy3.exa03包中。
(知识点:类的定义,对象的创建,构造方法的重载,对象数组,对象与对象之间的关系)
(注意:参考数据如下,所有数据的输入都在测试类里完成)
学号 姓名 性别 出生日期 班级名称 联系电话 QQ号码
stuId stuName stuSex stuBirth stuClass stuTel stuQQ
20130501401 刘丹 女 1992/10/2 13网络1单 13922222222 7843782
20130501402 徐小怡 女 1992/10/3 13网络1单 13922222223 273464
20130501404 赵蒙 女 1992/10/4 13网络2单 13922222224 9043550
20130501405 陈冰倩 女 1992/10/5 13网络2单 13922222225 8397231
20130501406 张琦琦 女 1992/10/6 13网络2单 13922222226 8244973
20130501407 施锦烨 女 1992/10/7 13网络3单 13922222227 4137413
程序清单:import java.util.Scanner;
public class Exp03_03_20190911148 {
public static void main(String args[]){
System.out.println("1.添加学生信息\t2.修改学生信息\t3.删除学生信息\t4.查找学生信息5.查找全部学生信息\t6.退出");
int flag;
Scanner s=new Scanner(System.in);
Contacts c=new Contacts();
while(true){
System.out.println("请输入要执行的操作:");
flag=s.nextInt();
if(flag==1){
System.out.println("请输入学生信息:");
String stuId=s.next();
String stuName=s.next();
String stuSex=s.next();
String stuBirth=s.next();
String stuClass=s.next();
String stuTel=s.next();
String stuQQ=s.next();
StudentInfo p=new StudentInfo(stuId,stuName,stuSex,stuBirth,stuClass,stuTel,stuQQ);
c.append(p);
}
if(flag==2){
System.out.println("请输入要修改的学号:");
String newstuId=s.next();
System.out.println("请输入学生信息:");
String stuId=s.next();
String stuName=s.next();
String stuSex=s.next();
String stuBirth=s.next();
String stuClass=s.next();
String stuTel=s.next();
String stuQQ=s.next();
StudentInfo p=new StudentInfo(stuId,stuName,stuSex,stuBirth,stuClass,stuTel,stuQQ);
c.update(p, newstuId);
}
if(flag==3){
System.out.println("请输入要删除的学号:");
String stuId=s.next();
c.delete(stuId);
}
if(flag==4){
System.out.println("请输入要查找的学号:");
String stuId=s.next();
c.serach(stuId);
}
if(flag==5){
c.find();
}
if(flag==6){
System.exit(0);
}
}
}
}
class StudentInfo{
private String stuId;
private String stuName;
private String stuSex;
private String stuBirth;
private String stuClass;
private String stuTel;
private String stuQQ;
public StudentInfo(){
}
public StudentInfo(String stuId, String stuName, String stuSex,
String stuClass) {
super();
this.stuId = stuId;
this.stuName = stuName;
this.stuSex = stuSex;
this.stuClass = stuClass;
}
public StudentInfo(String stuId, String stuName, String stuSex,
String stuBirth, String stuClass, String stuTel, String stuQQ) {
super();
this.stuId = stuId;
this.stuName = stuName;
this.stuSex = stuSex;
this.stuBirth = stuBirth;
this.stuClass = stuClass;
this.stuTel = stuTel;
this.stuQQ = stuQQ;
}
public String getStuId() {
return stuId;
}
public void setStuId(String stuId) {
this.stuId = stuId;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getStuSex() {
return stuSex;
}
public void setStuSex(String stuSex) {
this.stuSex = stuSex;
}
public String getStuBirth() {
return stuBirth;
}
public void setStuBirth(String stuBirth) {
this.stuBirth = stuBirth;
}
public String getStuClass() {
return stuClass;
}
public void setStuClass(String stuClass) {
this.stuClass = stuClass;
}
public String getStuTel() {
return stuTel;
}
public void setStuTel(String stuTel) {
this.stuTel = stuTel;
}
public String getStuQQ() {
return stuQQ;
}
public void setStuQQ(String stuQQ) {
this.stuQQ = stuQQ;
}
void showStuInfo(){
System.out.println("学号:"+stuId+"\t姓名:"+stuName+"\t性别:"+stuSex+"\t生日:"+stuBirth+"\t班级:"+stuClass+"\t联系电话:"+stuTel+"\tQQ:"+stuQQ);
}
}
class Contacts{
StudentInfo s[]=new StudentInfo [100];
private int count;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
void append(StudentInfo student){
if(count<100){
s[count]=student;
count++;
}
}
void update(StudentInfo newStudent,String stuId){
for(int i=0;i<count;i++){
if(s[i].getStuId().equals(stuId)){
s[i]=newStudent;
}
}
}
void delete(String stuId){
for(int i=0;i<count;i++){
if(s[i].getStuId().equals(stuId)){
for(int j=count+1;j>i;j--){
s[j-1]=s[j];
}
count--;
}
}
}
void serach(String stuId){
for(int i=0;i<count;i++){
if(s[i].getStuId().equals(stuId)){
s[i].showStuInfo();
}
}
}
void find(){
for(int i=0;i<count;i++){
s[i].showStuInfo();
}
}
}
运行结果:
三、实验总结
这次实验对于我以后学习、找工作也是受益菲浅的,在短短
的三周中相信这些宝贵的经验会成为我今后成功的重要的基石;这对.
于我的学业,乃至我以后人生的影响无疑是板其深远的。
这次实验虽然是我们的第一次,不过同学们表现不错,由此看来,我们在进入大学的这几个月里学到了不少的专业知识,只是自己
感觉不到而已。对于所学专业,我们不能过于自卑和担忧,否则会妨
碍自己学习。实验是学习Java的重要环节,有利于我们巩固专业知
识、掌握工作技能,提高就业筹码。通过这周的实习和学习,我知道了此次实习的目的,也清楚目前自己的不足,那就是缺乏相应的知识与经验,对所学的专业知识不能够很好地运用于实践操作。正所谓“百闻不如一见”,经过这次自身的切身实践,我才深切地理会到了“走出课堂,投身实践”的必要
性。平时,我们只能在课堂上与老师一起纸上谈兵,思维的认识基本
上只是局限于课本的范围之内,也许就是这个原因就导致我们对专业
知识认识的片面性,使得我们只知所以然,而不知其之所以然!限制
了我们网络知识水平的提高。我学会了如何建立类和对象,分别输出其中包含的成员值;但是课本.上所学到的理论知识是为我们的实际操作指明了方向、提供相应的方法,真正的职业技巧是要我们正确理解并能够熟练操作和使用java的类、对象和方法。