资源描述
Java程序设计实训试验参考指导书
《JAVA 程 序 设 计实训》
实 验 报 告
班级:
学号:
姓名:
实验一 开发简单的Java应用程序
一、上机目标:
开发“我行我素”购物管理系统:
二、训练技能点
三、实验内容
阶段1:
训练要点:
· 使用Eclipse平台开发Java程序
· Java输出语句
需求说明:
· 从控制台输出一行信息:
实现思路:
· 创建一个Java项目:ShopManagementSystem
· 创建一个文本文件:
· 编写程序框架
· 编写输出语句
· 编写注释
代码:
public class LoginMenu1{
public static void main(String[ ] args){
(" ");
}
}
阶段2:
需求说明:
· 从控制台输出多行信息
空行
代码:
public class LoginMenu2 {
public static void main(String[] args) {
/*从控制台输出信息*/
("************************************\n");
( );
( );
("************************************");
}
}
阶段3:
训练要点:
· 使用\n和\t控制输出格式
需求说明:
· 从控制台输出购物管理系统的登录菜单
实现思路:
· 创建文件:
· 结合使用\n和\t控制菜单输出格式
代码:
public class LoginMenu {
/*
* 显示系统登录菜单
*/
public static void main(String[] args) {
("\n\n\t\t\\n\n");
( );
( );
("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
("请选择,输入数字:");
}
}
阶段4:
需求说明:
· 输出两个菜单
1、系统主菜单
代码:
2、客户信息管理菜单
代码:
阶段5:
训练要点:
· 代码排错技巧
需求说明:
· 纠正程序中的错误,使其输出“我喜欢Java程序”
public class wrongcode {
public static void Main() {
/*打印输出一条信息
(我喜欢Java程序)
//修改为:(“我喜欢Java程序”);加””和;
}
实验二 变量、数据类型和运算符
一、上机目标:
升级“我行我素”购物管理系统,完成以下功能:
• 购物结算
• 打印购物小票
• 计算会员积分
• 模拟幸运抽奖
• 计算员工工资
二、训练技能点:
• 会声明和使用变量
• 能熟练使用常用运算符
• 赋值运算符:=
• 算术运算符:+、 - 、*、 /、 %
三、实验内容
阶段1:
训练要点:
· 运算符(*、=)、从控制台输出信息
需求说明:
· 根据购物清单及会员级别:
1、计算消费金额
客户
购买商品
单价
个数
折扣
1
T恤
¥420.78
1
9.5
2
网球
¥45
3
无
2、以下表形式输出结果(不要求表格边框)
客户
消费金额
1
张三
?
2
李四
?
实现思路:
· 声明变量存放商品信息(单价、购物个数)
· 根据不同折扣,分别计算消费金额
· 使用“+”连接输出信息,使用\t控制输出格式
代码:
public class Pay1 {
public static void main(String[] args) {
double shirtPrice = ; //T恤单价
int shirtNo = 1; //购T恤件数
double tennisPrice = 45; //网球单价
int tennisNo = 3; //购网球个数
double shirtMoney = ; //张三消费金额
double tennisMoney = ; //李四消费金额
("客户\t" + "消费金额");
("张三\t" + shirtMoney);
( );
}
}
阶段2:
需求说明:
· 张三(享8折)购物如右表所示,结算时支付1500元
1、计算消费总额并打印购物小票(如下图)
商品
单价
个数
T恤
245
2
网球鞋
570
1
网球拍
320
1
2、计算购物获得的会员积分(100元获3分)
代码:
阶段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) {
("我行我素购物管理系统 > 客户信息管理 > 添加客户信息\n");
/* 录入会员信息 */
Scanner input = new Scanner();
("请输入会员号(<4位整数>):");
int custNo = ();
("请输入会员生日(月/日<用两位数表示>):");
String custBirth = ();
("请输入积分:");
int custScore = ();
/* 显示录入的信息 */
("\n已录入的会员信息是: ");
(custNo + "\t" + custBirth + "\t" + custScore);
}
}
· 升级功能:判断会员号是否合法
代码:
阶段2:
需求说明:
· 商场实行新的抽奖规则:会员号的百位数字等于产生的随机数字即为幸运会员。基于第2章阶段3,实现:
1、从键盘接收会员号
2、使用if-else实现幸运抽奖
代码:
阶段3:
训练要点:
· switch结构
· 多重if结构
需求说明:
· 实现从登录菜单进入二级菜单
1、输入1:进入主菜单
2、输入2:退出并显示“谢谢您的使用!”
3、输入其他数字:显示“输入错误”
实现思路:
· 在第1章阶段3登录菜单程序()基础上完成
· 从控制台接收一个数字
· 使用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恤
245
2
网球鞋
570
3
网球拍
320
实现思路及关键代码:
·
· 声明变量存储商品信息
· 循环体:从键盘接收商品编号,使用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),计算两个层次的顾客比例
实现思路及关键代码:
·
· 定义计算器变量old和young
· 循环录入被调查的10位顾客的年龄
for(int i = 0; i<10; i++){
//录入顾客年龄
//统计各层次的人数
}
· 计算各层次比例
double oldRate = old / ;
代码:
阶段2:
训练要点:
· for循环结构
· continue语句
需求说明:
· 实现循环录入客户信息:
1、循环录入3位客户信息
2、判断会员号是否合法(4位整数)
3、会员号合法,显示录入的信息,否则显示录入失败
实现思路:
·
· 增加for循环结构
for(int i = 0; i<3; i++){
//从键盘获取信息
//判断:如果会员号不合法,输出错误提示,继续下一次循环
//会员号合法则输出录入的信息
}
· 使用continue控制循环执行过程
代码:
阶段3:
需求说明:
· 实现用户登录时的信息验证:
1、登录时提示输入用户名和密码并进行验证
2、如果输入超过3次,程序结束
3、根据3种匹配结果(信息匹配/信息不匹配/3次都不匹配),执行不同的操作
代码:
阶段4:
训练要点:
· 循环结构,break,断点跟踪
需求说明:
· 一个球从100米高度自由落下,每次落地后反弹回原高度的一 半;再落下,,并计算在这一次落地时共经过多少米?
对代码进行跟踪调试,使其输出正确结果
代码:
实验六循环和分支结构综合训练(阶段练习)
一、上机目标
从控制台输入 × × × ×年× ×月,从控制台输出该月日历
二、训练技能点
• 会使用分支结构解决问题
• 会使用循环结构解决问题
三、实验内容
需求说明:
任务从控制台输入 × × × ×年× ×月,从控制台输出该月日历
(1900年1月1日是星期一)
1、判断该年是否是闰
2、计算该月天数
3、计算该月第一天是星期几
4、按格式输出该月日历
阶段划分:
– 阶段1
分析业务;实现从控制台接收年和月,判断是否是闰年
– 阶段2
编程计算输入月份的天数
– 阶段3
编程计算输入的月份距离1900年1月1日的天数
– 阶段4
编程计算输入月份的第一天是星期×
– 阶段5
格式化输出× ×年× ×月日历
阶段1:
需求说明:
· 实现: 从控制台接收年和月份,判断输入的年份是否是闰年
实现思路:
判断是否是闰年:能被4整除但不能被100整除;或者能被400整除
代码:
import ;
public class PrintCalendar1 {
public static void main(String[] args) {
("**********欢 迎 使 用 万 年 历*************");
Scanner input = new Scanner();
("\n请选择年份: ");
int year = ();
("\n请选择月份: ");
int month = ();
();
int days = 0; // 存储当月的天数
boolean isRn;
/* 判断是否是闰年 */
if (year % 4 == 0 && !(year % 100 == 0) || year % 400 == 0) {
isRn = true; // 闰年
} else {
isRn = false;// 平年
}
if (isRn) {
(year + " 闰年");
} else {
(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;
}
(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天
}
}
("输入年份距离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日的天数
("输入月份距离1900年1月1日的天数:" + totalDays);
("当前月份的天数:" + 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;
}
("该月第一天是: " + firstDayOfWeek);
阶段5:
需求说明:
· 格式化输出× ×年× ×月日历
实现思路:
分析下面语句的输出结果
("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
for(int i = 1 ; i <= 7 ; i++){
(i + "\t");
}
源代码:
/* 输出日历 */
("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
for (int nullNo = 0; nullNo < firstDayOfMonth; nullNo++) {
("\t"); // 输出空格
}
for (int i = 1; i <= days; i++) {
(i + "\t");
if ((totalDays + i - 1) % 7 == 5) { // 如果当天为周六,输出换行
();
}
}
实验七 对象和类
一、上机目标:
升级“我行我素”购物管理系统,完成以下功能:
• 实现管理员类
• 实现礼品类
• 修改管理员密码
• 礼品馈赠
二、训练技能点:
• 会定义一个类
• 会创建一个对象
• 会编写和使用类的toString()方法
三、实验内容:
阶段1:
训练要点:
· 定义一个类
· toString()方法
需求说明:
· 定义管理员类
管理员类
属性:
用户名
密码
方法:
显示管理员信息
实现思路:
· 创建Manager类
· 定义其属性:username和password
· 定义其toString()方法
public String toString( ){
return "管理员信息是: " + username + "\t" + password;
}
源代码:
阶段2:
需求说明:
· 定义礼品类
礼品类(Gift)
属性:
礼品名(name)
礼品价值(price)
方法:
显示礼品信息
代码:
阶段3:
训练要点:
· 创建类的对象
· 使用类的属性和toString()方法
需求说明:
· 创建管理员对象:
1、根据右表所示创建两个管理员
2、显示管理员信息
用户名
密码
manager
0000
accp
1111
实现思路:
· 创建测试类
· 编写入口程序
public static void main(String[ ] args){
//main方法主体
}
· 创建管理员对象并显示对象信息
Manager manager = new Manager();
= "manager";
= "0000";
(manager);
源代码:
阶段4:
需求说明:
· 更改管理员登录信息:
1、输入旧的用户名和密码,如果正确,方有权限更新
2、从键盘获取新的用户名和密码,进行更新
代码:
阶段5:
需求说明:
· 购物中心为酬谢广大客户,推出礼品馈赠活动,如表所示,循环输入会员号和积分,用面向对象思想实现礼品馈赠
积分x
奖品
8000≤x<15000
x≥15000
笔记本电脑
代码:
实验八 类的方法
一、上机目标
升级“我行我素”购物管理系统,完成以下功能:
• 创建我行我素购物管理系统项目结构
• 系统入口程序
• 菜单类
• 菜单切换
二、训练技能点
• 会编写类的成员方法
• 会进行方法调用
• 会创建包和导入包
三、实验内容
阶段1:
训练要点:
· 创建包,在包中创建类
需求说明:
· 创建ShopManagementSystem项目结构:
1、
2、,设置默认的管理员名“accp”,默认密码“0000”
代码:
阶段2:
训练要点:
· 创建类的成员方法
需求说明:
· 阅读已给出的Menu类
· 添加showMainMenu()方法
菜单类
属性:
无
方法:
显示登录菜单
显示主菜单
显示客户信息管理菜单
显示真情回馈菜单
实现思路:
· 编写方法框架
public void showMainMenu(){
//显示主菜单
}
· 编写方法主体:拷贝第4章阶段4
源代码:
阶段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个数组,分别存储会员号、会员生日和会员积分
数组名
类型
custNo
int
custBirth
String
custScore
int
会员号
会员生日
会员积分
1623
06/26
5000
1545
04/08
2200
实现思路:
· 创建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;
源代码:
阶段2:
需求说明:
· 扩展Data类:
1、再定义两个数组,分别存储商品名称和商品价格
数组名
类型
goodsName
String
goodsPrice
double
2、初始化商品信息
商品名
商品价格
addidas运动鞋
880
addidasT恤
420.78
Nike运动鞋
900
代码:
阶段3:
训练要点:
· 使用数组存储数据
需求说明:
· 编写客户管理类CustManagement,实现添加新会员功能:从键盘获取用户输入,保存在数组中第一个空位
实现思路:
· 创建客户管理类CustManagement
· 完成数据加载
Data data = new Data(); //创建一个数据类对象
public void setData(){ //加载数据
();
}
· 编写方法add()实现添加新会员功能
public void add(){
//提示用户输入会员号、生日和积分
//查询已存储的会员信息的下一个位置的下标
//一一对应向3个数组中添加数组元素
}
源代码:
阶段4:
需求说明:
· 扩展客户管理类CustManagement,实现显示当前会员信息功能,并编写测试类测试显示和添加信息功能
代码:
阶段5:
需求说明:
· 阅读代码,说明礼品管理类sendGoldenCust()方法执行的过程和实现的功能
代码:
实验十字符串
一、上机目标
升级“我行我素” 购物管理系统,完成以下功能:
• 系统数据传递
• 自动计算会员折扣
• 完善购物小票
• 信息有效性验证
二、训练技能点
• 会使用String的相关方法
• 会使用带参数的方法
三、实验内容
阶段1:
训练要点:
· 带参方法的编写和调用
需求说明:
· 实现数据传递:
程序入口
(数据初始化)
菜单类
客户管理类
购物结算类
礼品管理类
数据传递
1、开始时加载系统数据: 会员信息、商品信息和管理员信息
2、系统运行时,数据在不同界面间进行传递,但始终保持对同一个数组进行操作
实现思路:
· 在实验七阶段3StartSMS的main()中添加代码加载系统数据
· 在实验七产生的Menu类中编写setData(<参数列表>),用于获得系统数据
Data data = new Data();
();
1、编写类成员变量
/*商品信息*/
String[ ] goodsName;
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. showLoginMenu();
源代码:
阶段2:
需求说明:
· 扩展购物结算,自动计算会员折扣:
1、已知会员号,根据会员号查找目前的积分
2、计算会员所享受的折扣
代码:
阶段3:
训练要点:
· StringBuffer
需求说明:
· 基于阶段3扩展购物结算程序:
1、使用StringBuffer存储购物信息(商品名、数量和
展开阅读全文