《JAVA 程序设计实训》实验报告班级:学号:姓名:实验一开发简单的Java应用程序一、上机目标:开发“我行我素”购物管理系统:1.制作系统登录菜单2.制作系统主菜单3.制作客户信息管理菜单二、训练技能点1.熟悉用Eclipse编写Java程序2.会使用输出语句从控制台输出信息3.会进行代码排错三、实验内容阶段1:训练要点:使用Eclipse平台开发Java程序Java输出语句需求说明:从控制台输出一行信息:欢迎使用开心购物管理系统1.0版实现思路:创建一个Java项目:ShopManagementSystem创建一个文本文件:LoginMenu1.java编写程序框架编写输出语句编写注释代码:public class LoginMenu1{public static void main(String[ ] args){System.out.println(" ");}}阶段2:需求说明:从控制台输出多行信息空行代码:public class LoginMenu2 {public static void main(String[] args) {/*从控制台输出信息*/System.out.println("************************************\n");System.out.println( );System.out.println( );System.out.println("************************************");}}阶段3:训练要点:使用\n和\t控制输出格式需求说明:从控制台输出购物管理系统的登录菜单实现思路:创建文件:LoginMenu.java结合使用\n和\t控制菜单输出格式代码:public class LoginMenu {/** 显示系统登录菜单*/public static void main(String[] args) {System.out.println("\n\n\t\t\t欢迎使用我行我素购物管理系统 1.0版\n\n");System.out.println( );System.out.println( );System.out.println("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");System.out.print("请选择,输入数字:");}}阶段4:需求说明:输出两个菜单1、系统主菜单MainMenu.java代码:2、客户信息管理菜单CustMMenu.java代码:阶段5:训练要点:代码排错技巧需求说明:纠正程序中的错误,使其输出“我喜欢Java程序”public class wrongcode {public static void Main() {/*打印输出一条信息system.out.println(我喜欢Java程序)//修改为:system.out.println(“我喜欢Java程序”);加””和; }实验二变量、数据类型和运算符一、上机目标:升级“我行我素”购物管理系统,完成以下功能:•购物结算•打印购物小票•计算会员积分•模拟幸运抽奖•计算员工工资二、训练技能点:•会声明和使用变量•能熟练使用常用运算符•赋值运算符:=•算术运算符:+、- 、*、/、%三、实验内容阶段1:训练要点:运算符(*、=)、从控制台输出信息需求说明:根据购物清单及会员级别:1客户购买商品单价个数折扣1 T恤¥420.78 1 9.52 网球¥453 无2、以下表形式输出结果(不要求表格边框)客户消费金额1 张三?2 李四?实现思路:声明变量存放商品信息(单价、购物个数)根据不同折扣,分别计算消费金额使用“+”连接输出信息,使用\t控制输出格式代码:public class Pay1 {public static void main(String[] args) {double shirtPrice = 420.78; //T恤单价int shirtNo = 1; //购T恤件数double tennisPrice = 45; //网球单价int tennisNo = 3; //购网球个数double shirtMoney = ; //张三消费金额double tennisMoney = ; //李四消费金额System.out.println("客户\t" + "消费金额");System.out.println("张三\t" + shirtMoney);System.out.println( );}}阶段2:需求说明:张三(享8折)购物如右表所示,结算时支付1500元1商品单价个数T恤245 2网球鞋570 1网球拍320 12代码:阶段3:训练要点:运算符(%、/)需求说明:幸运抽奖:凡是4位会员卡号的各个位上的数字之和大于20,则为幸运客户,有精美Mp3送上,编程计算8349各位数字之和实现思路:结合使用“/”和“%”分解获得各位数字计算各位数字之和代码:阶段4:需求说明:商场为员工提供了基本工资(3000元)、物价津贴及房租津贴,其中物价津贴为基本工资的40%,房租津贴为基本工资的25%。
编程计算实领工资代码:实验三运算符和条件结构一、上机目标升级“我行我素”购物管理系统,完成以下功能:•录入会员信息•模拟幸运抽奖•菜单切换•计算会员折扣二、训练技能点:•会使用关系运算符和逻辑运算符•会从控制台获取键盘输入的数据•会使用if-else和多重if条件结构•会使用switch结构三、实验内容阶段1:训练要点:获取键盘输入条件运算符逻辑运算符需求说明:录入会员信息(会员号、会员生日、会员积分)并显示录入信息升级功能:判断录入是否合法(会员号必为4位整数),录入合法,显示录入的信息;不合法,显示“录入失败”实现思路:完成信息录入:使用Scanner获取用户输入,存储在变量中public class AddCust1 {public static void main(String[] args) {System.out.println("我行我素购物管理系统> 客户信息管理> 添加客户信息\n");/* 录入会员信息*/Scanner input = new Scanner(System.in);System.out.print("请输入会员号(<4位整数>):");int custNo = input.nextInt();System.out.print("请输入会员生日(月/日<用两位数表示>):");String custBirth = input.next();System.out.print("请输入积分:");int custScore = input.nextInt();/* 显示录入的信息*/System.out.println("\n已录入的会员信息是:");System.out.println(custNo + "\t" + custBirth + "\t" + custScore);}}升级功能:判断会员号是否合法代码:阶段2:需求说明:商场实行新的抽奖规则:会员号的百位数字等于产生的随机数字即为幸运会员。
基于第2章阶段3,实现:1、从键盘接收会员号2、使用if-else实现幸运抽奖代码:阶段3:训练要点:switch结构多重if结构需求说明:实现从登录菜单进入二级菜单1、输入1:进入主菜单2、输入2:退出并显示“谢谢您的使用!”实现思路:在第1章阶段3登录菜单程序(LoginMenu.java)基础上完成从控制台接收一个数字使用switch结构或多重if结构实现菜单切换代码:阶段4:需求说明:会员根据积分享受不同折扣,如右表。
使用多重if结构计算会员折扣折扣x <2000 9折2000 ≤x <4000 8折4000 ≤x <8000 7折x ≥8000 6折代码:实验四循环结构(一)一、上机目标:升级“我行我素”购物管理系统,完成以下功能:•查询商品价格•升级购物结算•升级菜单切换•升级幸运抽奖二、训练技能点:•会使用while循环•会使用do-while循环•会进行代码跟踪调试三、实验内容:阶段1:训练要点:while循环结构需求说明:编程实现:计算100以内(包括100)的偶数之和观察在每一次循环中变量值的变化代码:阶段2:训练要点:while循环结构需求说明:实现商品查价:1、输入商品编号,显示商品价格2、循环查询3、输入“n”退出循环编号商品价格1 T恤2452 网球鞋5703 网球拍320实现思路及关键代码:创建LookPrice.java声明变量存储商品信息循环体:从键盘接收商品编号,使用switch语句选择该编号对应的商品信息,并输出商品名称和商品价格循环条件获取用户输入,为“n”时结束循环代码:阶段3需求说明:基于阶段2,升级实验二阶段2购物结算功能:1、循环输入商品编号和购物数量,计算消费金额并累加到总金额2、输入“n”开始结账(假设享8折)3、输入实付金额,计算找零代码:阶段4:训练要点:do-while循环结构需求说明:进入系统主菜单,提示输入数字选择进入相应菜单。
用户输入错误,可以重复输入,直到输入正确,执行相应的操作后退出循环代码:阶段5:需求说明:升级实验三阶段2幸运抽奖:1、循环输入4位会员号,判断是否为幸运会员2、输入“n”退出抽奖代码:实验五循环结构(二)一、上机目标:升级“我行我素”购物管理系统,完成以下功能:•统计顾客的年龄层次•循环录入会员信息•登录时用户信息验证二、训练技能点:•会使用for循环结构•会使用break和continue控制循环停止或继续•会进行代码跟踪调试三、实验内容:阶段1:训练要点:for循环结构需求说明:为提高销售额,对顾客的年龄层次(30岁之上/之下)进行调查(样本数为10),计算两个层次的顾客比例实现思路及关键代码:创建AgeRate.java定义计算器变量old和young循环录入被调查的10位顾客的年龄for(int i = 0; i<10; i++){//录入顾客年龄//统计各层次的人数}计算各层次比例double oldRate = old / 10.0 ;代码:阶段2:训练要点:for循环结构continue语句需求说明:实现循环录入客户信息:1、循环录入3位客户信息2、判断会员号是否合法(4位整数)3、会员号合法,显示录入的信息,否则显示录入失败实现思路:基于实验三阶段1代码AddCust.java扩展增加for循环结构for(int i = 0; i<3; i++){//从键盘获取信息//判断:如果会员号不合法,输出错误提示,继续下一次循环//会员号合法则输出录入的信息}使用continue控制循环执行过程代码:阶段3:需求说明:实现用户登录时的信息验证:1、登录时提示输入用户名和密码并进行验证2、如果输入超过3次,程序结束3、根据3种匹配结果(信息匹配/信息不匹配/3次都不匹配),执行不同的操作代码:阶段4:训练要点:循环结构,break,断点跟踪需求说明:一个球从100米高度自由落下,每次落地后反弹回原高度的一半;再落下,求在第几次之后反弹高度小于0.1米,并计算在这一次落地时共经过多少米?对代码进行跟踪调试,使其输出正确结果代码:实验六循环和分支结构综合训练(阶段练习)一、上机目标从控制台输入××××年××月,从控制台输出该月日历二、训练技能点•会使用分支结构解决问题•会使用循环结构解决问题三、实验内容需求说明:任务从控制台输入××××年××月,从控制台输出该月日历(1900年1月1日是星期一)1、判断该年是否是闰2、计算该月天数3、计算该月第一天是星期几4、按格式输出该月日历阶段划分:–阶段1分析业务;实现从控制台接收年和月,判断是否是闰年–阶段2编程计算输入月份的天数–阶段3编程计算输入的月份距离1900年1月1日的天数–阶段4编程计算输入月份的第一天是星期×–阶段5格式化输出××年××月日历阶段1:需求说明:实现:从控制台接收年和月份,判断输入的年份是否是闰年实现思路:判断是否是闰年:能被4整除但不能被100整除;或者能被400整除代码:import java.util.Scanner;public class PrintCalendar1 {public static void main(String[] args) {System.out.println("**********欢迎使用万年历*************");Scanner input = new Scanner(System.in);System.out.print("\n请选择年份: ");int year = input.nextInt();System.out.print("\n请选择月份: ");int month = input.nextInt();System.out.println();int days = 0; // 存储当月的天数boolean isRn;/* 判断是否是闰年 */if (year % 4 == 0 && !(year % 100 == 0) || year % 400 == 0) { isRn = true; // 闰年} else {isRn = false;// 平年}if (isRn) {System.out.println(year + " 闰年");} else {System.out.println(year + " 平年");}}}阶段2:需求说明:扩展阶段1,实现2:计算输入月份的天数实现思路:闰年2月:29天平年2月:28天代码:/* 计算当月的天数 */switch (month) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:days = 31;break;case 2:if (isRn) {days = 29;} else {days = 28;}break;default:days = 30;break;}System.out.println(month + "\t共" + days + "天");阶段3:需求说明:扩展阶段2,实现3:1、计算输入月份距离1900年1月1日的天数2、计算输入月份之前的天数(从当年年初开始)3、求和实现思路:代码:/* 计算输入的年份之前的天数*/int totalDays = 0;for (int i = 1900; i < year; i++) {/* 判断闰年或平年,并进行天数累加*/if (i % 4 == 0 && !(i % 100 == 0) || i % 400 == 0) { // 判断是否为闰年totalDays = totalDays + 366; // 闰年366天} else {totalDays = totalDays + 365; // 平年365天}}System.out.println("输入年份距离1900年1月1日的天数:" + totalDays); /* 计算输入月份之前的天数*/int beforeDays = 0;for (int i = 1; i <= month; i++) {switch (i) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:days = 31;break;case 2:if (isRn) {days = 29;} else {days = 28;}break;default:days = 30;break;}if (i < month) {beforeDays = beforeDays + days;}}totalDays = totalDays + beforeDays; // 距离1900年1月1日的天数System.out.println("输入月份距离1900年1月1日的天数:" + totalDays);System.out.println("当前月份的天数:" + days);阶段4:需求说明:扩展阶段3,已知该月之前的天数,计算输入月份的第一天是星期×实现思路:从1900年1月1日(星期一)开始推算:星期× = 1 + 天数差 % 7周一~周六:1~6 周日:0代码:/* 计算星期几*/int firstDayOfWeek; // 存储当月第一天是星期几:星期日为0,星期一~星期六为1~6 int temp = 1 + totalDays % 7; // 从1900年1月1日推算if (temp == 7) { // 求当月第一天firstDayOfWeek = 0;} else {firstDayOfWeek = temp;}System.out.println("该月第一天是: " + firstDayOfWeek);阶段5:需求说明:格式化输出××年××月日历实现思路:分析下面语句的输出结果System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");for(int i = 1 ; i <= 7 ; i++){System.out.print(i + "\t");}源代码:/* 输出日历*/System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");for (int nullNo = 0; nullNo < firstDayOfMonth; nullNo++) {System.out.print("\t"); // 输出空格}for (int i = 1; i <= days; i++) {System.out.print(i + "\t");if ((totalDays + i - 1) % 7 == 5) { // 如果当天为周六,输出换行System.out.println();} }实验七对象和类一、上机目标:升级“我行我素”购物管理系统,完成以下功能:•实现管理员类•实现礼品类•修改管理员密码•礼品馈赠二、训练技能点:•会定义一个类•会创建一个对象•会编写和使用类的toString()方法三、实验内容:阶段1:训练要点:定义一个类toString()方法需求说明:定义管理员类管理员类属性:用户名密码方法:显示管理员信息实现思路:创建Manager类定义其属性:username和password定义其toString()方法public String toString( ){return "管理员信息是: " + username + "\t" + password; }源代码:阶段2:需求说明:定义礼品类礼品类(Gift)属性:礼品名(name)礼品价值(price)方法:显示礼品信息代码:阶段3:训练要点:创建类的对象使用类的属性和toString()方法需求说明:创建管理员对象:1、根据右表所示创建两个管理员2、显示管理员信息用户名密码manager 0000accp 1111 实现思路:创建测试类编写入口程序public static void main(String[ ] args){//main方法主体}创建管理员对象并显示对象信息Manager manager = new Manager();ername = "manager";manager.password = "0000";System.out.println(manager);源代码:阶段4:需求说明:更改管理员登录信息:1、输入旧的用户名和密码,如果正确,方有权限更新2、从键盘获取新的用户名和密码,进行更新代码:阶段5:需求说明:购物中心为酬谢广大客户,推出礼品馈赠活动,如表所示,循环输入会员积分x奖品8000≤x<15000 手机x≥15000 笔记本电脑代码:实验八类的方法一、上机目标升级“我行我素”购物管理系统,完成以下功能:•创建我行我素购物管理系统项目结构•系统入口程序•菜单类•菜单切换二、训练技能点•会编写类的成员方法•会进行方法调用•会创建包和导入包三、实验内容阶段1:训练要点:创建包,在包中创建类需求说明:创建ShopManagementSystem项目结构:1、创建包com.wxws.sms2、在包com.wxws.sms中创建管理员类,设置默认的管理员名“accp”,默认密码“0000”代码:阶段2:训练要点:创建类的成员方法需求说明:阅读已给出的Menu类添加菜单类属性:方法:显示登录菜单显示主菜单显示客户信息管理菜单显示真情回馈菜单实现思路:编写方法框架public void showMainMenu(){//显示主菜单}编写方法主体:拷贝第4章阶段4 MainMenu.java相关代码源代码:阶段3:需求说明:实现系统入口程序:1、加载系统管理员信息2、显示系统登录菜单3选择1 1)验证管理员密码2)显示主菜单选择2 输出“谢谢您的使用”退出程序实现思路及关键代码:创建带main()的类StartSMS创建系统管理员对象,加载系统保存的管理员信息创建一个菜单类对象,调用其showLoginMenu()方法显示系统登录菜单提示输入信息根据输入信息进行验证代码:阶段4:需求说明:改写Menu类的showMainMenu()方法,实现三个菜单项功能: 1、选择1显示客户信息管理菜单调用showCustMMenu()2、选择3显示真情回馈菜单调用showSendGMenu()3、选择4注销:回到开始登录菜单调用showLoginMenu()改写Menu类的showCustMMenu()方法,实现输入0返回主菜单改写Menu类的showSendMenu()方法,实现输入0返回主菜单调用showMainMenu()代码:实验九 数组一、上机目标升级“我行我素”购物管理系统,完成以下功能:• 实现会员信息、商品信息的定义和初始化• 显示当前所有会员信息• 添加新会员• 实现幸运大放送二、训练技能点• 会定义和使用数组• 会操作数组进行运算三、实验内容阶段1:训练要点:定义数组初始化数组需求说明: 定义3个数组,分别存储会员号、会员生日和会员积分 数组名类型 custNoint custBirthString custScoreint实现思路:创建Data 类定义Data 类的3个数组成员变量存储会员信息int[ ] custNo = new int[100]; //会员号 String[ ] custBirth = new String[100]; //会员生日 int[ ] custScore = new int[100]; //会员积分定义Data 类的成员方法initial(),执行数组初始化操作,相关数组信息一一对应custNo [0] = 1623;custBirth [0] = "06/26";custScore [0] = 5000;源代码:会员号 会员生日 会员积分 1623 06/26 5000 1545 04/08 2200阶段2:需求说明:扩展Data类:1数组名类型goodsName StringgoodsPrice double2、初始化商品信息商品名商品价格addidas运动鞋 880addidasT恤420.78Nike运动鞋900代码:阶段3:训练要点:使用数组存储数据需求说明:编写客户管理类CustManagement,实现添加新会员功能:从键盘获取用户输入,保存在数组中第一个空位实现思路:创建客户管理类CustManagement完成数据加载Data data = new Data(); //创建一个数据类对象public void setData(){ //加载数据data.initial();}编写方法add()实现添加新会员功能public void add(){//提示用户输入会员号、生日和积分//查询已存储的会员信息的下一个位置的下标//一一对应向3个数组中添加数组元素}源代码:阶段4:需求说明:扩展客户管理类CustManagement,实现显示当前会员信息功能,并编写测试类测试显示和添加信息功能代码:阶段5:需求说明:阅读代码,说明礼品管理类sendGoldenCust()方法执行的过程和实现的功能代码:实验十字符串一、上机目标升级“我行我素” 购物管理系统,完成以下功能:• 系统数据传递• 自动计算会员折扣• 完善购物小票• 信息有效性验证二、训练技能点• 会使用String 的相关方法• 会使用带参数的方法三、实验内容阶段1:训练要点:带参方法的编写和调用需求说明:实现数据传递: 1、开始时加载系统数据: 会员信息、商品信息和管理员信息2、系统运行时,数据在不同界面间进行传递,但始终保持对同一个数组进行操作实现思路:在实验七阶段3StartSMS 的main()中添加代码加载系统数据在实验七产生的Menu 类中编写setData(<参数列表>),用于获得系统数据Data data = new Data();data.initial();1、编写类成员变量/*商品信息*/程序入口 菜单类客户管理类 购物结算类礼品管理类数据传递double[ ] goodsPrice;/*会员信息*/int[ ] custNo;String[ ] custBirth;int[ ] custScore;2、编写setData方法public void setData(String[ ] goodsName1, double[ ] goodsPrice1, int[ ] custNo1, String[ ] custBirth1, int[ ] custScore1){goodsName = goodsName1;goodsPrice = goodsPrice1;custNo = custNo1;custBirth = custBirth1;custScore = custScore1;}在main()中添加代码Menu menu = new Menu();menu.setData(data.goodsName,data.goodsPrice, data.custNo,data.custBirth, data.custScore);menu. showLoginMenu();源代码:阶段2:需求说明:扩展购物结算,自动计算会员折扣:1、已知会员号,根据会员号查找目前的积分2、计算会员所享受的折扣代码:阶段3:训练要点:StringBuffer需求说明:基于阶段3扩展购物结算程序:1、使用StringBuffer存储购物信息(商品名、数量和消费额)2、打印购物小票3、测试系统购物结算功能实现思路及关键代码:创建StringBuffer对象存储购物信息StringBuffer goodsList = new StringBuffer();使用StringBuffer的append()方法连接购物信息goodsList.append("\n" + name + "\t" + "¥" + price+ "\t\t" + count + "\t\t" + "¥" + (price * count) +"\t");打印购物小票在Menu类中添加代码测试购物结算程序Pay pay = new Pay(); //购物结算pay.setData(goodsName, goodsPrice, custNo, custBirth, custScore);pay.calcPay();源代码:阶段4:需求说明:阅读Pay类的方法returnLastMenu(),并将代码补充完整测试该方法代码:实验十一类和对象综合训练(阶段练习)一、上机目标–类和对象综合训练二、训练技能点•会定义类,描述类的属性和方法•会创建和使用对象•会使用包组织Java工程三、实验内容实现人机互动版猜拳游戏,运行效果如下图所示:3.1、阶段划分:•第一部分:阶段小结–阶段小结–上机、作业共性问题讲解•第二部分:练习(120分钟)–阶段1分析业务;抽象出类;描述类的特征和行为;创建用户类–阶段2创建计算机类–阶段3创建游戏类,编写它的方法:初始化、计算对战结果、显示结果–阶段4编写游戏类的方法:开始游戏–阶段5编写入口程序•第三部分(20分钟)3.2阶段小结•会定义类,描述类的特征和行为–如何定义类的一个方法?–类和对象的区别?•会创建和使用对象–创建对象的语法?–如何使用别的对象的方法?如何使用同一个类的方法?–程序入口main方法可以直接使用类的方法吗?•会使用包组织Java工程–为什么需要使用包?它的含义?在程序中的位置?–什么情况下要导入包,举例?–语法结构?3.3、阶段1需求说明:分析业务抽象出类、类的特征和行为创建用户类实现思路及关键代码:分析业务,抽象出类、类的特征和行为创建用户类:属性:名称(初始值为“匿名”)、积分(初始值为0)方法:出拳代码:。