Java实验报告

班级 计算机科学与技术二班 学号 20188450 姓名 李代传

完成时间 2019/9/19

评分等级

实验二 Java简单类与对象

  1. 实验目的
    1. 掌握类的定义,熟悉属性、构造函数、方法的作用,掌握用类作为类型声明变量和方法返回值;
    2. 理解类和对象的区别,掌握构造函数的使用,熟悉通过对象名引用实例的方法和属性;
    3. 理解static修饰付对类、类成员变量及类方法的影响。
  2. 实验内容

1. 写一个名为Rectangle的类表示矩形。其属性包括宽width、高height和颜色color,width和height都是double型的,而color则是String类型的。要求该类具有:

(1) 使用构造函数完成各属性的初始赋值

(2) 使用get…()和set…()的形式完成属性的访问及修改

(3) 提供计算面积的getArea()方法和计算周长的getLength()方法

2. 银行的账户记录Account有账户的唯一性标识(11个长度的字符和数字的组合),用户的姓名,开户日期,账户密码(六位的数字,可以用0开头),当前的余额。银行规定新开一个账户时,银行方面提供一个标识符、账户初始密码123456,客户提供姓名,开户时客户可以直接存入一笔初始账户金额,不提供时初始余额为0。定义该类,并要求该类提供如下方法:存款、取款、变更密码、可以分别查询账户的标识、姓名、开户日期、当前余额等信息。

  1. 实验过程

1. 写一个名为Rectangle的类表示矩形。其属性包括宽width、高height和颜色color,width和height都是double型的,而color则是String类型的。

实验源码:

实验结果:

实验源码:

package 银行账户1;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Calendar;

import java.util.Date;

import java.util.Scanner;

public class User { //客户端类

static int user=0; //当前客户在AccountList中的序号

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner input =new Scanner(System.in);

System.out.print("是否开户?\n 请输入:是 \t 或者输入:否 \n");

if(input.next().equals("是")){

AccountList.create(); //开户,创造一个新的Account对象用来保存用户各类数据

}

while(true){ //多次处理用户命令操作

System.out.print("账户操作-->变更密码请输入:1;\t存款请输入:2;\t取款请输入:3;\n查询操作-->查询账户的标识:4;\t查询开户日期:5;\t查询当前余额:6;\t查询姓名:7;\n开户请输入:8;\n退出请输入:0\n"); //客户端页面

int number=input.nextInt();

if(number>=0&&number<=8){

corresponding(number); //处理数字相应的命令

}else{

System.out.print("错误的输入!自动退出!\n"); //如果并不是零到八的数字,就结束所有操作

break;

}

}

AccountList.printfAll(); //输出所有的Account对象的内容

}

public static void corresponding(int number){ //处理数字相应的命令

if(number==8){

opening(); //开户方法

return;

}

int i=trueOrFalse(number); //返回用户是否在AccountList表中有序号,有则返回正确的序号

if(i==-1)return;

if(number==1){

System.out.println("接下来输入您的新密码--->");

AccountList.List.get(i).setPassword(AccountList.inputPassword()); //设置密码为新输入的密码

System.out.println("密码修改完成!");

}else if(number==2){

System.out.print("输入您的存款数:\n");

int blance=AccountList.inputBlance(); //获取输入的存款值

if(blance>0){

AccountList.List.get(i).setBalance(AccountList.List.get(i).getBalance()+blance); //存款大于零就能存入

System.out.print("存款成功!");

}else{

System.out.print("错误的存款数!");

}

}else if(number==3){

System.out.print("输入您的取款数:\n");

int blance=AccountList.inputBlance(); //获取输入的取款值

if(blance>0&&blance<=AccountList.List.get(i).getBalance()){ //小于存款值并大于零就可以取款

AccountList.List.get(i).setBalance(AccountList.List.get(i).getBalance()-blance); // 改变存款值

System.out.println("取款成功!");

}else{

System.out.print("错误的取款数!");

}

}else if(number==4){

System.out.println("您的账户标识为:"+AccountList.List.get(i).getIdentifier());

}else if(number==5){

System.out.println("您的开户日期为:"+AccountList.List.get(i).getOpeningDate());

}else if(number==6){

System.out.println("您的当前余额为:"+AccountList.List.get(i).getBalance());

}else if(number==7){

System.out.println("您的姓名为:"+AccountList.List.get(i).getName());

}

}

public static void opening(){ //开户

Scanner input =new Scanner(System.in);

System.out.print("是否开户?\n 请输入:是 \t 或者输入:否 \n");

String s=input.next();

if(s.equals("是")){

AccountList.create(); //创建一个新的Account对象用来保存用户各类数据

}else if(s.equals("否")){

System.out.println("谢谢使用!");

}else{

System.out.println("请确认您的输入正确!");

}

}

public static int trueOrFalse(int number) //返回用户是否在AccountList表中有序号,有则返回正确的序号

{

if(number==0){

System.out.print("已安全退出!");

System.exit(1);

}else{

System.out.println("是否改变账户?");

Scanner input =new Scanner(System.in);

String s=input.nextLine().trim();

if(s.equals("是")){

int i=AccountList.search(AccountList.inputName()); //判断是否有输入的用户,有则返回大于等于零的序号

if(i!=-1){

if(AccountList.inputPassword().equals(AccountList.List.get(i).getPassword())){ //判断密码是否正确

user=i; //当前更改后的用户的序号

return i;

}else{

System.out.println("密码错误!请重新启动!");

return -1;

}

}else{

System.out.println("没有此用户!请重试!");

return -1;

}

}else if(s.equals("否")){

return user; //继续使用当前用户的序号

}else{

System.out.println("错误的输入!请新开始!");

}

}

return 0;

}

}

class Account { //保存用户的各类数据,不能直接访问,以免造成糟糕的后果

private static double id=1; //用户共享的内部id

private double userid; //用户本人的id

private String identifier; //用户唯一的标识码

private String name; //用户名

private String openingDate; //用户的开户日期

private String password="123456";//用户初始密码

private double balance=0; //用户初始余额

public Account(String name){ //构造函数,确定不可更改的用户id,唯一标识符,开户日期。

this.name=name;

this.userid=id;

this.setOpeningDate();

this.setUniqueid();

id++;

}

public double getUserid() {

return userid;

}

public String getOpeningDate() {

return openingDate;

}

public String getIdentifier() {

return identifier;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public double getBalance() {

return balance;

}

public void setBalance(double balance) {

this.balance = balance;

}

private void setUniqueid(){ //设置唯一的标识符

if(id>=100){

this.identifier="uniqueid"+(int)id;

}else if(id>=10){

this.identifier="uniqueid0"+(int)id;

}else{

this.identifier="uniqueid00"+(int)id;

}

}

private void setOpeningDate(){ //不可更改的开户日期

Date now=new Date();

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");

this.openingDate=sdf.format(now);

}

}

class AccountList{ //保存所有用户各类数据的表

static ArrayList<Account> List=new ArrayList<Account>(); //Account对象类型的数组表

public static void create(){ //创造一个新的Account

Account account=new Account(AccountList.inputName()); //开户需要用户名,银行提供其他的数据

List.add(account);

System.out.print("请问您要存入初始资金吗?如果不需要请输入数字0;如果需要请输入金额:\n");

Scanner input =new Scanner(System.in);

double aom=input.nextDouble();

if(aom<=0){

System.out.print("您的初始金额为0元!\n");

}else{

account.setBalance(aom);

System.out.print("您的初始金额为"+account.getBalance()+"元!\n");

}

}

public static int search(String name){ //在现有的AccountList中寻找是否有这个用户,找到返回其序号,否则返回-1

int i;

for(i=0;i<List.size();i++){

if(List.get(i).getName().equals(name))

return i;

}

return -1;

}

public static void printfAll(){ //输出所有的用户信息

for(Account i:List){

System.out.println("用户名字:"+i.getName()+"\n用户自己ID:"+i.getUserid()+"\n用户标识码:"+i.getIdentifier().toString()+"\n开户日期:"+i.getOpeningDate()+"\n账户余额:"+i.getBalance()+"\n用户密码:"+i.getPassword()+"\n");

}

}

public static String inputName(){ //返回输入的用户名

Scanner input =new Scanner(System.in);

System.out.print("请输入您的姓名:\n");

String s=input.nextLine().trim();

System.out.print("您的姓名为: "+s+"\n");

return s;

}

public static String inputPassword(){ //返回输入的密码

System.out.print("请输入您的密码:\n");

Scanner input =new Scanner(System.in);

while(true){

String password=input.nextLine().trim();

char [] ch=password.toCharArray();

if(ch.length!=6){

System.out.println("不符合规定的密码!请重试!");

}else{

return password;

}

}

}

public static int inputBlance(){ //返回输入的存取款值

Scanner input =new Scanner(System.in);

return input.nextInt();

}

}

实验结果:

是否开户?

请输入:是      或者输入:否

请输入您的姓名:

李代传

您的姓名为:李代传

;如果需要请输入金额:

您的初始金额为3838373.0元!

账户操作-->变更密码请输入:1;    存款请输入:2;    取款请输入:3;

查询操作-->查询账户的标识:4;    查询开户日期:5;    查询当前余额:6;    查询姓名:7;

开户请输入:8;

是否改变账户?

请输入您的姓名:

李代传

您的姓名为:李代传

请输入您的密码:

接下来输入您的新密码--->

请输入您的密码:

密码修改完成!

账户操作-->变更密码请输入:1;    存款请输入:2;    取款请输入:3;

查询操作-->查询账户的标识:4;    查询开户日期:5;    查询当前余额:6;    查询姓名:7;

开户请输入:8;

是否改变账户?

接下来输入您的新密码--->

请输入您的密码:

密码修改完成!

账户操作-->变更密码请输入:1;    存款请输入:2;    取款请输入:3;

查询操作-->查询账户的标识:4;    查询开户日期:5;    查询当前余额:6;    查询姓名:7;

开户请输入:8;

已安全退出!

课程总结:自我感觉学的不错,主要是老师教的好!李老师讲课非常深入人心,像那些什么构造方法呀,this关键字啊,类的基本构造规则啊,一讲就懂。运用起来非常方便,现在String类也讲了不少东西了,都学到了。虽然我英语不好,但是方法的单词记住开头就行了,简单。java程序感觉非常容易写,行云流水,写完一般能运行也就不会错,不需要像c一样多次调试,感觉非常舒服。

这个作业在哪个具体方面帮助我实现目标:通过构思这个程序,锻炼了我对于学到知识的掌握。并且更容易记住了。

具体思路:矩形的封装思路没什么好说的,肯定都会的,很简单的东西。

关于银行系统的思路很清晰:1,--User类给用户操作,可以实现各种功能,2—Account类,用于保存用户开户后的各类数据及基本操作。3—AccountList类,各种中间操作实现体。

基本上没遇到过问题,就是要贴近现实中的使用嘛,所以我把Account类和User使用类完全分开了,这样使得用户的信息得到了极大的保护。其他的,还考虑到了异常(Exception),比如就是输入用户命令的时候,要是输入了其他类型的数据,就会终止程序并显示异常。这现在我也解决不了,所以等以后学好了在继续修改吧。

Java实验报告&&课程报告的更多相关文章

  1. Java实验报告(实验二)

    课程:Java程序设计          班级: 1351 姓名:王玮怡                学号:20135116 成绩:             指导教师:娄嘉鹏       实验日期: ...

  2. java实验报告三

    实验三 敏捷开发与XP实践 一.实验内容 1. XP基础 2. XP核心实践 3. 相关工具 二.实验步骤 (一)敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上 ...

  3. 20135231 JAVA实验报告三:敏捷开发与XP实践

    ---恢复内容开始--- JAVA实验报告三:敏捷开发与XP实践 20135231 何佳 实验内容 1. XP基础 2. XP核心实践 3. 相关工具 实验要求 1.没有Linux基础的同学建议先学习 ...

  4. 20145307第一周JAVA实验报告

    20145307 <Java程序设计>第一次实验实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.08 ...

  5. 20145322第一次JAVA实验报告

    20145322第一周JAVA实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验名称:Java开发环境的熟悉(Linux + Eclipse) 实验日期:2016.04.08 实 ...

  6. Java实验二实验报告:java面向对象程序设计

    java实验二实验报告 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 实验 ...

  7. Java实验报告五:Java网络编程及安全

    Java实验报告五:Java网络编程及安全                                                                               ...

  8. Java实验报告二:Java面向对象程序设计

    Java实验报告二:Java面向对象程序设计                                                                               ...

  9. java实验一实验报告

    Java实验报告一:Java开发环境的熟悉                                                                               ...

随机推荐

  1. PHP mysqli_num_rows() 函数

    <?php // 假定数据库用户名:root,密码:123456,数据库:RUNOOB $con=mysqli_connect("localhost","root& ...

  2. 微信小程序开发入门教程(三)---小程序云开发支付功能

    支付(shoukuan)功能真的很重要!由于我还没有商户号,以下代码未实际验证 1.服务端 进入云开发,新建云函数pay(应该也可以在开发者工具编写后上传) 编写后端代码index.js这里用到第三方 ...

  3. 正则匹配href标签内容

    完整a标签 <a.+?href=\"(.+?)\".*>(.+)</a> 单独href : <a.+?href=\"(.+?)\" ...

  4. FTP基础

      FTP服务 只要有一种数据存储格式 :解析库 ,不同解析库需要不同查询方式 nsswitch 框架 平台 (每一种程序自己不再负责实时名称解析的功能,而是将这种功能委托给nsswitch) S/M ...

  5. 【java设计模式】-13代理模式

    代理模式(Proxy Pattern) 定义: 给某一个对象提供一个代理,并由代理对象控制对原对象的引用.在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到 ...

  6. 关于keepalive

    linux内核配置有一项tcp_keepalive_time,即tcp的保活定时器.当网络上两个建立连接的进程都没有数据向对方发送的时候,tcp会隔段时间发送一次保活数据,以保持连接,间隔时间就是tc ...

  7. 图解golang内存分配机制 (转)

    一般程序的内存分配 在讲Golang的内存分配之前,让我们先来看看一般程序的内存分布情况: 以上是程序内存的逻辑分类情况. 我们再来看看一般程序的内存的真实(真实逻辑)图: Go的内存分配核心思想 G ...

  8. debian、ubuntu安装mysql指定版本

    因为在使用docker时,Debian中的mysql已变为mariadb,然后总是会出现一些错误,所以故想在debian上安装mysql5.7版本 1.访问https://dev.mysql.com/ ...

  9. linux中wget未找到命令

    (转)linux中wget未找到命令   转:https://blog.csdn.net/djj_alice/article/details/80407769 在装数据库的时候发现无法使用wget命令 ...

  10. [BTS] BizTalk WCF-SQL Adapter 高级应用

    9102年岁尾,41岁的我居然还在搞 BizTalk,感觉就是一种悲伤. 国内用户少之又少,能坚持一直在使用的“忠实”用户那就更少了. 不是它不好用,而是微软全线转向云服务,这个产品也已经快10年没有 ...