java实验四

一、实验目的及要求

  1. 将你在实验3中设计的模拟堆栈程序,封装成一个类(注意访问控制的运用、getter和setter的运用、构造方法的设计等),并用这个堆栈类重写中缀表达式转换成后缀表达式程序。(体会封装)
  2. 设计一个时间类MyDate:(日期均大于1900年) a、 其中包括年、月、日、时、分、秒。其他成员变量可根据需要增设;
    b、 可以直接获得时间的年、月、日、小时、分钟、秒数;(public修饰) c、 计算日期的dayOfWeek(星期几);
    d、 //实现日期加减一个整数后得到新的日期(加减天数); e、 输入任意一个月份,将此月的日历输出(按星期格式);
    f、 输入任意年份,将此年的年历输出; g、 //实现两个时间相减得到的小时数、分钟数和秒数;
    h、 输出时间,要求三种格式: yyyy年MM月dd日hh小时mm分ss秒;(Chinese) yyyy-MM-dd
    hh:mm:ss(European) yyyyMMddhhmmss(compact)
    i、 设计三个构造方法:1、参数只有年月日的构造方法,小时分钟秒设为0;2、完全参数的构造方法;3、如果使用无参数的构造方法则初始化为系统时间,系统时间的获得方法:
    SimpleDateFormat myDateFormat =new
    SimpleDateFormat(“yyyyMMddHHmmss”); java.util.Date date0=new
    java.util.Date(); strDate=myDateFormat.format(date0);
    strDate中就是有"yyyyMMddHHmmss"时间格式的字符串,从中可以取到各段时间数据(程序源代码的最开始要加import
    java.text.SimpleDateFormat;) j、 MyDate的使用: 用无参数构造方法创建实例,然后按三种方法输出时间;
    用年月日参数构造方法创建实例,时间为2008年8月8日0点0分0秒;并用三种方法输出时间
    用全参数构造方法创建实例,时间为2008年8月8日20点0分0秒,并用三种方法输出
    //将两个时间相减,计算差值共多少小时数、或者分钟数、或者秒数,输出 输入2011,4,输出月历; 输入2011,输出年历;
    k、 注意理解构造方法重载。 l、 不要直接使用Java提供的Date类,那样就达不到练习的效果了。
  3. 设计一个字符串链表节点类:
    a) 其中包括两个成员变量:Value(String类型)和下一个节点nextNode,方法有:setValue(),getValue()和display();
    b) 用此类生成一个循环链表来解决斗地主发牌的问题 c) 注意观察:类引用的使用、浅复制和类中对类自身的引用。
  4. 设计一个用于管理银行客户的类BankCustomer:
    仅描述客户的几个重要方面:帐号、身份证号、姓名、联系方式、密码、账户余额。所有的成员变量均用private访问控制,因此每一个成员变量就要有相应的存取器(getter和setter,即获取和设置其值的相应的成员方法。需要setter还是getter,还是两者都要,视情况而定)
    成员方法:
    开户(开户时必须要有身份证号),系统自动生成帐号,帐号使用系统时间(格式:"yyyyMMddHHmmss"14位),初始密码为“666666”。注意开户和构造方法之间的关系。
    存钱、取钱、显示账户信息、修改密码(密码最短要六位)
    怎样在main中使用这个类,自行安排,要表现出你设计的类的各个方面,并在main中用英语加以注释

二、实验设备(环境)
三、实验内容与步骤

  1. 栈类
public class InfixToPostfix 
{

	public static void main(String[] args) 
	{
		infixToPostfix("3*(2*3-4*1+(3*5)/3)*3+2");
		infixToPostfix("2*(9+6/3-5)+4");
		System.out.println();
		// TODO Auto-generated method stub
	}
	
	static void infixToPostfix(String str)
	{
		Stack myStack=new Stack(50);
		boolean flag=true;
		StringBuffer theResult=new StringBuffer();//作为可变字符串,方便后续添加元素
		char value;
		System.out.println("原中缀表达式为:"+str);
		for(int i=0;i<str.length();i++)
		{
			switch(str.charAt(i))
			{
			case ' ':
				break;
			case '(':
				myStack.push('(');
				break;
			case ')':
				while((value=myStack.pop())!= '(')
				{
					if(myStack.isEmpty()==true)
					{
						flag=false;
						System.out.println("ERROR! 没有找到与右括号匹配的左括号 !ERROR");
						return;
					}
					theResult.append(value);
				}
				break;
			case '+':
				if(myStack.isEmpty()==false)
				{
					value=myStack.showTop();
					if(value=='*'||value=='/')
					{
						while(value=='*'||value=='/'||value=='-'||value== '+')
						{
							theResult.append(value);
							myStack.pop();
							if(myStack.isEmpty()==true)
							{
								break;
							}
							value=myStack.showTop();
						}
					}
					else if(myStack.isEmpty()==false&&(value=='+'||value== '-'))
					{
						theResult.append(myStack.pop());
					}
				}
				myStack.push('+');
				break;
			case '-':
				if(myStack.isEmpty()==false)
				{
					value=myStack.showTop();
					if(value=='*'||value=='/')
					{
						while(value=='*'||value=='/'||value=='-'||value=='+')
						{
							theResult.append(value);
							myStack.pop();
							if(myStack.isEmpty()==true)
							{
								break;
							}
							value=myStack.showTop();
						}
					}
					else if(myStack.isEmpty()==false&&(value=='+'||value== '-'))
					{
						theResult.append(myStack.pop());
					}
				}
				myStack.push('-');
				break;
			case '*':
				while(myStack.isEmpty()==false&&(myStack.showTop()=='*'||myStack.showTop()=='/'))
				{
					theResult.append(myStack.pop());
				}
				myStack.push('*');
				break;
			case '/':
				while(myStack.isEmpty()==false&&(myStack.showTop()=='*'||myStack.showTop()=='/'))
				{
					theResult.append(myStack.pop());
				}
				myStack.push('/');
				break;
			default:
				theResult.append(str.charAt(i));//遇到其他符号直接输出
			}
		}
		while(myStack.isEmpty()==false)
		{
			value=myStack.pop();
			theResult.append(value);
			if(value=='(')
			{
				System.out.println("ERROR! 没有找到与右括号匹配的左括号 !ERROR");
				flag=false;
			}
		}
		
		if(flag==true)
		{
			System.out.println("后缀表达式为:"+theResult);
		}
	}	
}

class Stack
{
	public int stackSize;
	private char[] myStack;
	private int top;

	public Stack(int size)
	{
		stackSize=size;
		myStack=new char[stackSize];
		top=-1;
	}
	
	public boolean push(char value)
	{
		if(isFull()==false)
		{
			myStack[++top]=value;
			return true;
		}
		else
		{
			return false;
		}
	}
	
	public char pop()
	{
		if(isEmpty()==false)
		{
			return myStack[top--];
		}
		return ' ';
	}
	
	public boolean isEmpty()
	{
		if(top==-1)
		{
			return true;
		}
		return false;
	}
	
	public boolean isFull()
	{
		if(top==stackSize-1)
		{
			return true;
		}
		return false;
	}
	
	public int length()
	{
		return top+1;
	}
	
	public char showTop()
	{
		if(isEmpty()==false)
		{
			return myStack[top];
		}
		else
		{
			return ' ';
		}
	}
}
import java.util.Scanner;
import java.text.SimpleDateFormat;

public class UseMyDate 
{

	public static void main(String[] args) 
	{
		MyDate noArgument=new MyDate();
		noArgument.display();//用无参数构造方法创建实例,然后按三种方法输出时间
		noArgument.dayOfWeek(noArgument.getYear(),noArgument.getMonth(),noArgument.getDay());
		
		MyDate dateOne=new MyDate(2008,8,8);
		dateOne.display();//用年月日参数构造方法创建实例,时间为2008年8月8日0点0分0秒;并用三种方法输出时间
		dateOne.dayOfWeek(dateOne.getYear(),dateOne.getMonth(),dateOne.getDay());
		
		MyDate dateTwo=new MyDate(2008,8,8,20,0,0);
		dateTwo.display();//用全参数构造方法创建实例,时间为2008年8月8日20点0分0秒,并用三种方法输出
		dateTwo.dayOfWeek(dateTwo.getYear(),dateTwo.getMonth(),dateTwo.getDay());
		
		noArgument.outputsTheCalendar(2011,4);//输入2011,4,输出月历
		noArgument.outputsTheYearCalendar(2011);//输入2011,输出年历
		
		Scanner scan=new Scanner(System.in);
		System.out.println("计算时间差,请输入开始时间的小时:");
		int hourOne=scan.nextInt();
		System.out.println("请输入开始时间的分钟:");
		int minuteOne=scan.nextInt();
		System.out.println("请输入开始时间的秒:");
		int secondOne=scan.nextInt();
		MyDate aDate=new MyDate(2020,10,24,hourOne,minuteOne,secondOne);
		System.out.println("请输入结束时间的小时:");
		int hourTwo=scan.nextInt();
		System.out.println("请输入结束时间的分钟:");
		int minuteTwo=scan.nextInt();
		System.out.println("请输入结束时间的秒:");
		int secondTwo=scan.nextInt();
		System.out.println("两个时间相差:");
		aDate.subtract(hourTwo,minuteTwo,secondTwo);
		
		// TODO Auto-generated method stub
	}
	
}

class MyDate
{
	private int year;
	private int month;
	private int day;
	private int hour;
	private int minute;
	private int second;

	MyDate(int year,int month,int day)//参数只有年月日的构造方法,小时分钟秒设为0
	{
		this.year=year;
		this.month=month;
		this.day=day;
		hour=0;
		minute=0;
		second=0;
	}
	
	MyDate(int year,int month,int day,int hour,int minute,int second)//完全参数的构造方法
	{
		this(year,month,day);
		this.hour=hour;
		this.minute=minute;
		this.second=second;
	}
	
	MyDate()//无参数的构造方法,初始化为系统时间
	{
		SimpleDateFormat myDateFormat =new SimpleDateFormat("yyyyMMddHHmmss");
		java.util.Date date0=new java.util.Date();
		String strDate=myDateFormat.format(date0);
		year=Integer.parseInt(strDate.substring(0,4));
		month=Integer.parseInt(strDate.substring(4,6));
		day=Integer.parseInt(strDate.substring(6,8));
		hour=Integer.parseInt(strDate.substring(8,10));
		minute=Integer.parseInt(strDate.substring(10,12));
		second=Integer.parseInt(strDate.substring(12,14));
	}
	
	public int getYear()//直接获得时间的年、月、日、小时、分钟、秒数
	{
		return year;
	}
	
	public int getMonth()
	{
		return month;
	}
	
	public int getDay()
	{
		return day;
	}
	
	public int getHour()
	{
		return hour;
	}
	
	public int getMinute()
	{
		return minute;
	}
	
	public int getSecond()
	{
		return second;
	}
	
	public void display()//输出时间,要求三种格式
	{
		System.out.println("Chinese:"+year+"年"+month+"月"+day+"日"+hour+"时"+minute+"分"+second+"秒");
		System.out.println("European:"+year+"-"+month+"-"+day+" "+hour+":"+minute+":"+second);
		System.out.println(String.format("%04d",year)+String.format("%02d",month)+String.format("%02d",day)+String.format("%02d",hour)+String.format("%02d",minute)+String.format("%02d",second));//将任意整数格式化成前面补“0”的4或者2位定长字符串
	}
	
	public void outputsTheCalendar(int year, int month)
	{
		int totalDays=0;
		for(int i=1901;i<year;i++)//以1901.01.01为起点,以需求年份第一天为终点,计算天数总和(每一年都有12个月)
			for(int j=1;j<=12;j++)
			{
				totalDays+=getTheNumberOfDaysInAMonth(i,j);
			}
		for(int j=1;j<month;j++)//再加上需求年份的天数(不一定满12个月),此时天数为需求月份的第一天
			totalDays+=getTheNumberOfDaysInAMonth(year,j);
		int week=getTheWeekOfTheDays(totalDays);//得到需求月份第一天的星期
		int days=getTheNumberOfDaysInAMonth(year,month);//得到需求月份的天数
		System.out.println("          "+year+"年"+month+"月");
		System.out.println("-----------------------------");
		System.out.println("     日     一     二    三     四     五     六");
		for(int i=0;i<week%7;i++)
			System.out.print("    ");//打印1号以前的空格
		for(int i=1;i<=days;i++)
		{
			System.out.print(String.format("%1$ 4d",i));
			if((i+week)%7==0)
				System.out.println();
		}
		System.out.println();
	}
	
	public void outputsTheYearCalendar(int year)
	{
		for(int i=1;i<=12;i++)
		{
			outputsTheCalendar(year,i);
		}
	}

	public int getTheNumberOfDaysInAMonth(int year, int month)
	{
		int daysOfTheMonth=0;
		switch(month)
		{
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			daysOfTheMonth=31;
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			daysOfTheMonth=30;
			break;
		case 2:
			if(((year%4==0)&&!(year%100==0))||(year%400==0))
			{
				daysOfTheMonth=29;
			}
			else
				daysOfTheMonth=28;
			break;
		}
		return daysOfTheMonth;
	}
	
	public int getTheWeekOfTheDays(int totalDays)
	{
		int week[]={1,2,3,4,5,6,7};
		int getTheWeek=week[(totalDays+1)%7];//已知1901.01.01为星期二
		return getTheWeek;
	}
	
	public void dayOfWeek(int year,int month,int day)//计算日期的dayOfWeek(星期几)
	{
		int totalDays=0;
		for(int i=1901;i<year;i++)//以1901.01.01为起点,以需求年份第一天为终点,计算天数总和(每一年都有12个月)
			for(int j=1;j<=12;j++)
			{
				totalDays+=getTheNumberOfDaysInAMonth(i,j);
			}
		for(int j=1;j<month;j++)//再加上需求年份的天数(不一定满12个月),此时天数为需求月份的第一天
			totalDays+=getTheNumberOfDaysInAMonth(year,j);
		for(int k=1;k<day;k++)
		{
			totalDays+=1;
		}
		int myWeek=getTheWeekOfTheDays(totalDays);
		switch(myWeek)
		{
			case 1:System.out.println("Today is Monday");
					break;
			case 2:System.out.println("Today is Tuesday");
					break;
			case 3:System.out.println("Today is Wednesday");
					break;
			case 4:System.out.println("Today is Thursday");
					break;
			case 5:System.out.println("Today is Friday");
					break;
			case 6:System.out.println("Today is Saturday");
					break;
			case 7:System.out.println("Today is Sunday");
					break;
		}
		System.out.println();
	}
	
	public void subtract(int hourTwo,int minuteTwo,int secondTwo)
	{
		if(hour>hourTwo)
		{
			System.out.println("ERROR!无效时间!ERROR");
			return;
		}
		int differenceHour,differenceMinute,differenceSecond;
		int flag=0;
		if(secondTwo<second)
		{
			flag=1;
			differenceSecond=secondTwo+60-second;
		}
		else
		{
			differenceSecond=secondTwo-second;
		}
		if(flag==1)
		{
			minuteTwo--;
		}
		flag=0;
		if(minuteTwo<minute)
		{
			flag=1;
			differenceMinute=minuteTwo+60-minute;
		}
		else
		{
			differenceMinute=minuteTwo-minute;
		}
		if(flag==1)
		{
			hourTwo--;
		}
		differenceHour=hourTwo-hour;
		System.out.println(String.format("%02d",differenceHour)+"时"+String.format("%02d",differenceMinute)+"分"+String.format("%02d",differenceSecond)+"秒");
	}
  1. 链表斗地主发牌
public class Landlords 
{

	public static void main(String[] args) 
	{
		setValue();
		// TODO Auto-generated method stub
	}
	
	public static void setValue()
	{
		String[] valueArray={"A","2","3","4","5","6","7","8","9","T","J","Q","K"};
		String[] suitArray={"红桃","梅花","方块","黑桃"};
		
		Node firstCard=new Node("小王","");
		Node pointer=firstCard;
		pointer.nextNode=new Node("大王","");
		pointer=pointer.nextNode;
		
		for(int i=0;i<4;i++)
			for(int j=0;j<13;j++)
			{
				pointer.nextNode=new Node(valueArray[j],suitArray[i]);
				pointer=pointer.nextNode;//实现链表串联
			}
		pointer.nextNode=firstCard;//形成循环链表
		deal(firstCard);
	}
	
	public static void deal(Node firstCard)
	{		
		int count=0;
		int random;
		Node pointerSet=firstCard.nextNode;
		Node last=firstCard;//last作为pointerDeal的直接前驱
		Node dealCards=new Node();//new一个新的链表表头,该链表用于放乱序的新牌
		Node pointerDeal=dealCards;//指向新链表的表头
		
		for(int i=54;i>0;i--)
		{
			random=(int)(Math.random()*i);//第一次在0到53之间产生随机数,第二次在0到52之间,随着牌的发出依次递减
			for(int j=0;j<random;j++)//通过循环次数的随机,实现随机指定链表中的一张牌
			{
				pointerSet=pointerSet.nextNode;
				last=last.nextNode;
			}
			
			last.nextNode=pointerSet.nextNode;
			dealCards.nextNode=pointerSet;
			dealCards=dealCards.nextNode;
			pointerSet=last.nextNode;//并把发出去的牌在旧的循环链表中删除
		}
		
		display(pointerDeal);
	}
	
	public static void display(Node pointerDeal)
	{
		for(int j=1;j<4;j++)
		{
			System.out.println("玩家"+j+"的牌:");
			for(int i=0;i<17;i++)
			{
				pointerDeal.nextNode.getCard();
				pointerDeal=pointerDeal.nextNode;
			}
			System.out.println();
		}
		System.out.println("三张底牌");
		for(int i=0;i<3;i++)
		{
			pointerDeal.nextNode.getCard();
			pointerDeal=pointerDeal.nextNode;
		}
	}

}

class Node
{
	String value;
	String suit;
	public Node nextNode;
	
	Node(){}
	
	Node(String value,String suit)
	{
		this.value=value;
		this.suit=suit;
	}
	
	public void getCard()
	{
		System.out.print(suit+value+' ');
	}
}

4.银行客户类BankCustomer

import java.util.Scanner;  
    2.	import java.text.SimpleDateFormat;  
    3.	  
    4.	public class Bank   
    5.	{  
    6.	    public static void main(String[] args)   
    7.	    {  
    8.	        // TODO Auto-generated method stub  
    9.	        Scanner scan=new Scanner(System.in);  
    10.	        System.out.println("输入您的个人信息进行开户:1.请输入您的身份证号");  
    11.	        String ID=scan.next();  
    12.	        System.out.println("2.请输入您的姓名:");  
    13.	        String name=scan.next();  
    14.	        System.out.println("3.请输入您的联系电话:");  
    15.	        String contact=scan.next();  
    16.	        BankCustomer customer=new BankCustomer(ID,name,contact);  
    17.	        System.out.print("开户成功!"+'\n'+"初始密码为:666666"+'\n'+"请尽快修改密码");  
    18.	          
    19.	        boolean flag=true;  
    20.	        while(flag)  
    21.	        {     
    22.	            menu();  
    23.	            int choice=scan.nextInt();  
    24.	            switch(choice)  
    25.	            {  
    26.	                case 1:  
    27.	                    System.out.println("现在进行修改账户信息,请输入您的密码:");  
    28.	                    String passwordOne=scan.next();  
    29.	                    System.out.println("请输入您的新姓名:");  
    30.	                    String newName=scan.next();  
    31.	                    System.out.println("请输入您的新联系电话:");  
    32.	                    String newContact=scan.next();  
    33.	                    customer.changeAccountInformation(passwordOne, newName, newContact);
    
    34.	                    break;  
    35.	                case 2:  
    36.	                    System.out.println("请输入你的密码:");  
    37.	                    String passwordTwo=scan.next();  
    38.	                    System.out.println("请输入存钱金额:");  
    39.	                    Double depositMoney=scan.nextDouble();  
    40.	                    customer.deposit(passwordTwo, depositMoney);  
    41.	                    break;  
    42.	                case 3:  
    43.	                    System.out.println("请输入你的密码:");  
    44.	                    String passwordThree=scan.next();  
    45.	                    System.out.println("请输入取钱金额:");  
    46.	                    Double withdrawMoney=scan.nextDouble();  
    47.	                    customer.withdraw(passwordThree, withdrawMoney);  
    48.	                    break;  
    49.	                case 4:  
    50.	                    System.out.println("现在进行显示账户信息,请输入您的密码:");  
    51.	                    String passwordFour=scan.next();  
    52.	                    customer.displayAccountInformation(passwordFour);  
    53.	                    break;  
    54.	                case 5:  
    55.	                    System.out.println("现在进行修改密码,请输入您的原密码:");  
    56.	                    String oldPassword=scan.next();  
    57.	                    System.out.println("请输入您的新密码:");  
    58.	                    String newPassword=scan.next();  
    59.	                    customer.changePassword(oldPassword, newPassword);  
    60.	                    break;  
    61.	                case 6:  
    62.	                    System.out.println("退出系统");  
    63.	                    flag=false;  
    64.	                    break;  
    65.	                default:  
    66.	                    break;  
    67.	            }  
    68.	        }  
    69.	    }  
    70.	      
    71.	    static void menu()  
    72.	    {  
    73.	        System.out.println();  
    74.	        System.out.println("请选择办理以下业务:");  
    75.	        System.out.print("1.修改账户信息(姓名、联系电话)"+'\n'+"2.存钱"+'\n'+"3.取钱"+'\n'+"4.显示账户信息"+'\n'+"5.修改密码"+'\n'+"6.退出");  
    76.	        System.out.println();  
    77.	    }  
    78.	}  
    79.	  
    80.	class BankCustomer  
    81.	{  
    82.	    private String account;  
    83.	    private String ID;  
    84.	    private String name;  
    85.	    private String contact;  
    86.	    private String password;  
    87.	    private double balance;  
    88.	      
    89.	    public BankCustomer(String ID,String name,String contact)//开户  
    90.	    {  
    91.	        this.ID=ID;  
    92.	        this.name=name;  
    93.	        this.contact=contact;  
    94.	        password="666666";  
    95.	        SimpleDateFormat myDateFormat =new SimpleDateFormat("yyyyMMddHHmmss");  
    96.	        java.util.Date date0=new java.util.Date();  
    97.	        account=myDateFormat.format(date0);  
    98.	        balance=0;  
    99.	    }  
    100.	      
    101.	    private boolean isPasswordCorrect(String password)  
    102.	    {  
    103.	        if(password.equals(this.password))  
    104.	        {  
    105.	            return true;  
    106.	        }  
    107.	        else  
    108.	            return false;  
    109.	    }  
    110.	      
    111.	    public void changePassword(String oldPassword,String newPassword)  
    112.	    {  
    113.	        if(isPasswordCorrect(oldPassword))  
    114.	        {  
    115.	            if(newPassword.length()==6)  
    116.	            {  
    117.	                password=newPassword;  
    118.	                System.out.println("密码修改成功");  
    119.	            }  
    120.	            else  
    121.	                System.out.println("ERROR! 密码必须为6位数 !ERROR");  
    122.	        }  
    123.	        else  
    124.	            System.out.println("ERROR! 原密码错误 !ERROR");  
    125.	    }  
    126.	      
    127.	    public void deposit(String password,double money)  
    128.	    {  
    129.	        if(isPasswordCorrect(password))  
    130.	        {  
    131.	            balance+=money;  
    132.	            System.out.println("存钱成功");  
    133.	            System.out.println("您的账户余额:"+balance);  
    134.	        }  
    135.	        else  
    136.	            System.out.println("ERROR! 密码错误 !ERROR");  
    137.	    }  
    138.	      
    139.	    public void withdraw(String password,double money)  
    140.	    {  
    141.	        if(isPasswordCorrect(password))  
    142.	        {  
    143.	            if(balance>=money)  
    144.	            {  
    145.	                balance-=money;  
    146.	                System.out.println("取钱成功");  
    147.	                System.out.println("您的账户余额:"+balance);  
    148.	            }  
    149.	            else  
    150.	                System.out.println("余额不足");  
    151.	                System.out.println("您的账户余额:"+balance);  
    152.	        }  
    153.	        else  
    154.	            System.out.println("ERROR! 密码错误 !ERROR");  
    155.	    }  
    156.	      
    157.	    public void displayAccountInformation(String password)  
    158.	    {  
    159.	        if(isPasswordCorrect(password))  
    160.	        {  
    161.	            System.out.println("账号:"+account);  
    162.	            System.out.println("身份证号:"+ID);  
    163.	            System.out.println("姓名:"+name);  
    164.	            System.out.println("联系电话:"+contact);  
    165.	            System.out.println("余额:"+balance);  
    166.	        }  
    167.	        else  
    168.	            System.out.println("ERROR! 密码错误 !ERROR");  
    169.	    }  
    170.	      
    171.	    public void changeAccountInformation(String password,String newName,String newContact)  
    172.	    {  
    173.	        if(isPasswordCorrect(password))  
    174.	        {  
    175.	            name=newName;  
    176.	            contact=newContact;  
    177.	            System.out.println("账户信息修改成功");  
    178.	        }  
    179.	        else  
    180.	            System.out.println("ERROR! 密码错误 !ERROR");  
    181.	    }  
    182.	}  
    
    }

四、实验结果与数据处理

  1. 栈类 原中缀表达式为:3*(23-41+(35)/3)3+2 后缀表达式为:32341-353/+32+ 原中缀表达式为:2(9+6/3-5)+4 后缀表达式为:2963/+5-*4+

  2. 时间类MyDate Chinese:2020年10月24日17时3分56秒 European:2020-10-24 17:3:56 20201024170356 Today is Saturday

    Chinese:2008年8月8日0时0分0秒 European:2008-8-8 0:0:0 20080808000000 Today
    is Friday

    Chinese:2008年8月8日20时0分0秒 European:2008-8-8 20:0:0 20080808200000
    Today is Friday

          2011年4月
    

    ----------------------------- 日 一 二 三 四 五 六
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
    30

          2011年1月
    

    ----------------------------- 日 一 二 三 四 五 六
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
    30 31
    2011年2月
    ----------------------------- 日 一 二 三 四 五 六
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
    2011年3月
    ----------------------------- 日 一 二 三 四 五 六
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
    2011年4月
    ----------------------------- 日 一 二 三 四 五 六
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

          2011年5月
    

    ----------------------------- 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
    23 24 25 26 27 28 29 30 31
    2011年6月
    ----------------------------- 日 一 二 三 四 五 六
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
    2011年7月
    ----------------------------- 日 一 二 三 四 五 六
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
    31
    2011年8月
    ----------------------------- 日 一 二 三 四 五 六
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
    2011年9月
    ----------------------------- 日 一 二 三 四 五 六
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
    2011年10月
    ----------------------------- 日 一 二 三 四 五 六
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
    30 31
    2011年11月
    ----------------------------- 日 一 二 三 四 五 六
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
    2011年12月
    ----------------------------- 日 一 二 三 四 五 六
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

    计算时间差,请输入开始时间的小时: 15 请输入开始时间的分钟: 20 请输入开始时间的秒: 20 请输入结束时间的小时: 20
    请输入结束时间的分钟: 15 请输入结束时间的秒: 15 两个时间相差: 04时54分55秒

  3. 链表斗地主发牌 玩家1的牌: 黑桃5 方块Q 黑桃7 红桃7 方块T 红桃T 红桃6 红桃J 黑桃T 梅花T 黑桃A 梅花2 方块K 梅花4 方块6 梅花9 黑桃Q 玩家2的牌: 红桃9 方块4 红桃A 黑桃J 梅花A 梅花6 方块2 红桃8 梅花J 方块A 红桃3
    黑桃2 黑桃3 梅花Q 红桃K 红桃2 大王 玩家3的牌: 方块J 梅花5 梅花8 方块9 红桃Q 小王 方块8 方块7 梅花K
    黑桃8 梅花7 黑桃4 黑桃6 黑桃K 红桃5 黑桃9 红桃4 三张底牌 方块3 梅花3 方块5

  4. 银行客户类BankCustomer 输入您的个人信息进行开户:1.请输入您的身份证号 123456789
    2.请输入您的姓名: corn
    3.请输入您的联系电话: 888888 开户成功! 初始密码为:666666 请尽快修改密码 请选择办理以下业务:
    1.修改账户信息(姓名、联系电话)
    2.存钱
    3.取钱
    4.显示账户信息
    5.修改密码
    6.退出 1 现在进行修改账户信息,请输入您的密码: 666666 请输入您的新姓名: student 请输入您的新联系电话: 999999 账户信息修改成功

    请选择办理以下业务:
    1.修改账户信息(姓名、联系电话)
    2.存钱
    3.取钱
    4.显示账户信息
    5.修改密码
    6.退出 2 请输入你的密码: 666666 请输入存钱金额: 5000 存钱成功 您的账户余额:5000.0

    请选择办理以下业务:
    1.修改账户信息(姓名、联系电话)
    2.存钱
    3.取钱
    4.显示账户信息
    5.修改密码
    6.退出 3 请输入你的密码: 666666 请输入取钱金额: 8000 余额不足 您的账户余额:5000.0

    请选择办理以下业务:
    1.修改账户信息(姓名、联系电话)
    2.存钱
    3.取钱
    4.显示账户信息
    5.修改密码
    6.退出 4 现在进行显示账户信息,请输入您的密码: 666666 账号:20201027174635 身份证号:123456789 姓名:student 联系电话:999999 余额:5000.0

    请选择办理以下业务:
    1.修改账户信息(姓名、联系电话)
    2.存钱
    3.取钱
    4.显示账户信息
    5.修改密码
    6.退出 5 现在进行修改密码,请输入您的原密码: 666666 请输入您的新密码: 12345 ERROR! 密码必须为6位数 !ERROR

    请选择办理以下业务:
    1.修改账户信息(姓名、联系电话)
    2.存钱
    3.取钱
    4.显示账户信息
    5.修改密码
    6.退出 5 现在进行修改密码,请输入您的原密码: 666666 请输入您的新密码: 789456 密码修改成功

    请选择办理以下业务:
    1.修改账户信息(姓名、联系电话)
    2.存钱
    3.取钱
    4.显示账户信息
    5.修改密码
    6.退出 6 退出系统

五、分析与讨论(体会、感想、意见、建议)

  1. 栈类 听过课上老师的讲解,在本次实验中我选择用switch方法来实现中缀表达式转换为后缀表达式,‘(’是什么情况,‘)’是什么情况,各种符号的不同处理方式在switch方法下显得清晰可见,不仅写起来思路清晰,代码看起来也通俗易懂。再加上这一次类的使用,进一步让整个代码显得简洁明了。
  2. 时间类MyDate 经过本次实验的训练,我对课上老师讲的关于类的知识,有了更深入的了解。首先,明白了课上讲的getter,setter方法的具体用法,比如本题中的public
    int getYear()方法,虽然其中只有一个简单的return
    year;语句,但就是它让private类型的year变得可读了,也就是课上讲的半开半闭的内容;其次,更加理解了重载的含义,以及其在构造方法中的使用,同名的方法如何通过形参的不同来加以区分,也是我在本实验中的一大收获。最后,我也明白了学习一种语言,绝对离不开课下实际操作的点滴积累,不动手是绝对学不会的。
  3. 链表斗地主发牌 经过本次实验,我对“类对类自身的引用”有了更深刻的认识。本题就是通过一个Node nextNode语句,来实现结点的连接,以此形成一个链表。在本次实验中,我也复习了上一学年学过的数据结构的知识,比如如何实现链表的删除,同时熟练了指针的运用,收获颇丰。
  4. 银行客户类BankCustomer 在经过设计栈类,时间类的实验后,本实验要求设计一个银行客户类,比之前更加容易上手了,且如何使用switch方法来实现让用户自行选择所需操作,也在前面多次训练过了,因此本实验并没有花太长时间。但值得注意的是,在写isPasswordCorrect方法时,我一开始差点写成
    if(password==this.password)) ,后来才记起老师课上曾经说过,String型使用=
    =时,比较的是两个字符串的地址,因此我将语句改为if(password.equals(this.password)) 这个错误也提醒了我,学习一门语言,基础一定要打扎实了,课下需要经常复习课上讲过的内容。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值