您的位置:首页 > 其它

曾经做过的40道程序设计课后习题总结(四)

2017-11-20 14:29 531 查看

曾经做过的40道程序设计课后习题总结(四)

课后习题目录

1斐波那契数列
2判断素数
3水仙花数
4分解质因数
5杨辉三角
6学习成绩查询
7求最大公约数与最小公倍数
8完全平方数
9统计字母、空格、数字和其它字符个数
10求主对角线之和
11完数求解
12求s=a+aa+aaa+aaaa+aa...a的值
13高度计算
14乘法口诀
15无重复三位数
16菱形打印
17利润计算
18第几天判断
19从小到大输出数列
20猴子吃桃问题
21乒乓球比赛
22求分数之和
23求阶乘的和
24递归求法
25求不多于5的正整数
26回文判断
27星期判断
28插数入数组
29取整数的任意位
30按顺序输出数列
31位置替换
32字符串排序
33贷款器
34通讯录排序
35闰年判断
36二元方程求解
37密码解译
38DVD查询
39电子日历
40万年历

[b]31位置替换[/b]

31.1题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

31.2源程序

importjava.util.Scanner;

publicclassTiHuan{

staticfinalintN=8;

publicstaticvoidmain(String[]args){

int[]a=newint
;
Scanners=newScanner(System.in);
intindex1=0,index2=0;

System.out.println("pleaseinputnumbers");
for(inti=0;i<N;i++){
a[i]=s.nextInt();
System.out.print(a[i]+"");
}

intmax=a[0],min=a[0];
for(inti=0;i<a.length;i++){
if(a[i]>max){
max=a[i];
index1=i;
}
if(a[i]<min){
min=a[i];
index2=i;
}
}

if(index1!=0){
inttemp=a[0];
a[0]=a[index1];
a[index1]=temp;
}

if(index2!=a.length-1){
inttemp=a[a.length-1];
a[a.length-1]=a[index2];
a[index2]=temp;
}
System.out.println("afterswop:");
for(inti=0;i<a.length;i++){
System.out.print(a[i]+"");
}
}
}


31.3运行结果:

pleaseinputnumbers
2
23
34
45
56
67
78
81
1afterswop:
83456721



[b]32字符串排序[/b]

32.1题目:字符串排序。

32.2源程序

publicclassStringSort{
publicstaticvoidmain(String[]args){

Stringtemp=null;
String[]s=newString[5];
s[0]="china".toLowerCase();
s[1]="apple".toLowerCase();
s[2]="MONEY".toLowerCase();
s[3]="BOOk".toLowerCase();
s[4]="yeah".toLowerCase();
/*
*for(inti=0;i<s.length;i++){for(intj=i+1;j<s.length;j++){
*if(s[i].compareToIgnoreCase(s[j])>0){temp=s[i];s[i]=s[j];
*s[j]=temp;}}}
*/

for(inti=0;i<s.length;i++){
for(intj=i+1;j<s.length;j++){
if(compare(s[i],s[j])==false){
temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
}

for(inti=0;i<s.length;i++){
System.out.println(s[i]);
}
}

staticbooleancompare(Strings1,Strings2){
booleanresult=true;
for(inti=0;i<s1.length()&&i<s2.length();i++){
if(s1.charAt(i)>s2.charAt(i)){
result=false;
break;
}elseif(s1.charAt(i)<s2.charAt(i)){
result=true;
break;
}else{
if(s1.length()<s2.length()){
result=true;
}else{
result=false;
}
}
}
returnresult;
}
}


32.3运行结果:

apple
book
china
money
yeah


[b]33贷款器[/b]

[b]题目:编写贷款计算程序,根据给定的贷款金额、年利率及贷款期限,计算月支付金额及总支付金额。[/b]

33.1源程序

packageexample;
importjavax.swing.*;
importjava.text.*;
publicclassdaikuanqi{
publicstaticvoidmain(String[]args){
finalintMONTHS_IN_YEAR=12;
doubleloanAmount,annualInterestRate;
doublemonthlyPayment,totalPayment;
doublemonthlyInterestRate;
intloanPeriod;
intnumberOfPayments;
StringinputStr;
DecimalFormatdf=newDecimalFormat("0.00");
//getinputvalues
inputStr=JOptionPane.showInputDialog(null,"贷款金额(精确到美分,如15000.00):");
loanAmount=Double.parseDouble(inputStr);
inputStr=JOptionPane.showInputDialog(null,"年利率(百分比,如9.5):");
annualInterestRate=Double.parseDouble(inputStr);
inputStr=JOptionPane.showInputDialog(null,"贷款期限(年份,如30):");
loanPeriod=Integer.parseInt(inputStr);
monthlyInterestRate=annualInterestRate/MONTHS_IN_YEAR/100;
numberOfPayments=loanPeriod*MONTHS_IN_YEAR;
monthlyPayment=(loanAmount*monthlyInterestRate)/(1-Math.pow(1/(1+monthlyInterestRate),numberOfPayments));
totalPayment=monthlyPayment*numberOfPayments;
System.out.println("贷款金额:$"+loanAmount);
System.out.println("年利率:"+annualInterestRate+"%");
System.out.println("贷款期限:"+loanPeriod);
System.out.println("");
System.out.println("月付款金额:$"+df.format(monthlyPayment));
System.out.println("总付款金额:$"+df.format(totalPayment));
System.out.println("");
}
}


33.2程序运行结果:







输出:
贷款金额:$10000.0
年利率:10.0%
贷款期限:10

月付款金额:$132.15
总付款金额:$15858.09


[b]34通讯录排序[/b]

34.1题目:对通讯录排序。要求:扩展AddressBook类,为其引入一个排序程序。以三种不同的实现方法使新的AddressBook类可以Person对象排序(按姓名的字母表顺序或者年龄递增的顺序)。

34.2源程序

packageexample12;

importjavax.swing.*;

classexample12{

publicstaticvoidmain(String[]args){

example12tester=newexample12();
tester.start();
}

privatevoidstart(){
String[]name={"ape","cat","bee","bat","eel","dog","gnu",
"yak","fox","cow","hen","tic","man"};

Personp;

AddressBookab;

intversion=Integer.parseInt(JOptionPane.showInputDialog(null,
"有三种方法可以实现Person对象排序,请输入数字(1-3):"));

switch(version){
case1:
ab=newAddressBookVer1();
break;
case2:
ab=newAddressBookVer2();
break;
case3:
ab=newAddressBookVer3();
break;
default:
ab=newAddressBookVer1();
break;
}
System.out.println("输入数据:");
for(inti=0;i<name.length;i++){

p=newPerson(name[i],random(10,50),random(0,1)==0?'M'
:'F');//if(random(0,1)==0)'M'else'F'
ab.add(p);
System.out.println(p.toString());
}
System.out.println("");

Person[]sortedlist=ab.sort(Person.AGE);
System.out.println("按年龄排序:");
for(inti=0;i<sortedlist.length;i++){
System.out.println(sortedlist[i].toString());
}

System.out.println("");

sortedlist=ab.sort(Person.NAME);
System.out.println("按姓名排序:");
for(inti=0;i<sortedlist.length;i++){
System.out.println(sortedlist[i].toString());
}
}

privateintrandom(intlow,inthigh){

return(int)Math.floor(Math.random()*(high-low+1))+low;
}

}

AddressBook类:
packageexample12;

interfaceAddressBook{

publicvoidadd(PersonnewPerson);

publicbooleandelete(StringsearchName);

publicPersonsearch(StringsearchName);

publicPerson[]sort(intattribute);

}

Person类:
packageexample12;

classPerson{

publicstaticfinalintNAME=0;

publicstaticfinalintAGE=1;

privatestaticfinalintLESS=-1;

privatestaticfinalintEQUAL=0;

privatestaticfinalintMORE=1;

privatestaticintcompareAttribute;

privateStringname;

privateintage;

privatechargender;

static{

compareAttribute=NAME;
}

publicPerson(){
this("NotGiven",0,'U');
}

publicPerson(Stringname,intage,chargender){
this.age=age;
this.name=name;
this.gender=gender;
}

publicstaticvoidsetCompareAttribute(intattribute){
compareAttribute=attribute;
}

publicintcompareTo(Personperson,intattribute){
intcomparisonResult;

if(attribute==AGE){
intp2age=person.getAge();

if(this.age<p2age){
comparisonResult=LESS;
}elseif(this.age==p2age){
comparisonResult=EQUAL;
}else{
assertthis.age>p2age;
comparisonResult=MORE;
}

}else{//comparethenameusingtheStringclass抯
//compareTomethod
Stringp2name=person.getName();
comparisonResult=this.name.compareTo(p2name);
}

returncomparisonResult;
}

publicintcompareTo(Personperson){

returncompareTo(person,compareAttribute);
}

publicintgetAge(){
returnage;
}

publicchargetGender(){
returngender;
}

publicStringgetName(){
returnname;
}

publicvoidsetAge(intage){
this.age=age;
}

publicvoidsetGender(chargender){
this.gender=gender;
}

publicvoidsetName(Stringname){
this.name=name;
}

publicStringtoString(){
returnthis.name+"\t\t"+
this.age+"\t\t"+
this.gender;
}
}

AddressBookVer1类:
packageexample12;

classAddressBookVer1implementsAddressBook{

privatestaticfinalintDEFAULT_SIZE=25;

privatestaticfinalintNOT_FOUND=-1;

privatePerson[]entry;

privateintcount;

publicAddressBookVer1()
{
this(DEFAULT_SIZE);
}

publicAddressBookVer1(intsize)
{
count=0;

if(size<=0){//invaliddatavalue,usedefault
thrownewIllegalArgumentException("Sizemustbepositive");
}

entry=newPerson[size];

//System.out.println("arrayof"+size+"iscreated.");//TEMP
}

publicvoidadd(PersonnewPerson)
{
if(count==entry.length){//nomorespaceleft,
enlarge();//createanewlargerarray
}

//atthispoint,entryreferstoanewlargerarray
entry[count]=newPerson;
count++;
}

publicbooleandelete(StringsearchName)
{
booleanstatus;
intloc;

loc=findIndex(searchName);

if(loc==NOT_FOUND){
status=false;
}
else{//found,packthehole

entry[loc]=entry[count-1];

status=true;
count--;//decrementcount,
//sincewenowhaveonelesselement
}

returnstatus;
}

publicPersonsearch(StringsearchName)
{
PersonfoundPerson;
intloc=0;

while(loc<count&&
!searchName.equals(entry[loc].getName())){
loc++;
}

if(loc==count){

foundPerson=null;
}
else{

foundPerson=entry[loc];
}

returnfoundPerson;
}

publicPerson[]sort(intattribute){

if(!(attribute==Person.NAME||attribute==Person.AGE)){
thrownewIllegalArgumentException();
}

Person[]sortedList=newPerson[count];
Personp1,p2,temp;

//copyreferencestosortedList
for(inti=0;i<count;i++){
sortedList[i]=entry[i];
}

//setthecomparisonattribute
entry[0].setCompareAttribute(attribute);

//beginthebubblesortonsortedList
intbottom,comparisonResult;
booleanexchanged=true;

bottom=sortedList.length-2;

while(exchanged){

exchanged=false;

for(inti=0;i<=bottom;i++){
p1=sortedList[i];
p2=sortedList[i+1];
//comparisonResult=p1.compareTo(p2,attribute);

comparisonResult=p1.compareTo(p2);

if(comparisonResult>0){//p1is鎲�rger锟�//thanp2,so
sortedList[i]=p2;//exchange
sortedList[i+1]=p1;

exchanged=true;//exchangeismade
}
}

bottom--;
}

returnsortedList;
}

privatevoidenlarge()
{
//createanewarraywhosesizeis150%of
//thecurrentarray
intnewLength=(int)(1.5*entry.length);
Person[]temp=newPerson[newLength];

//nowcopythedatatothenewarray
for(inti=0;i<entry.length;i++){
temp[i]=entry[i];
}

//finallysetthevariableentrytopointtothenewarray
entry=temp;

//System.out.println("Insidethemethodenlarge");//TEMP
//System.out.println("Sizeofanewarray:"+entry.length);//TEMP
}

privateintfindIndex(StringsearchName)
{
intloc=0;

while(loc<count&&
!searchName.equals(entry[loc].getName())){
loc++;
}

if(loc==count){

loc=NOT_FOUND;
}

returnloc;
}

}
AddressBookVer2类:
packageexample12;

importjava.util.*;

classAddressBookVer2implementsAddressBook{

privatestaticfinalintDEFAULT_SIZE=25;

privatestaticfinalintNOT_FOUND=-1;

privatePerson[]entry;

privateintcount;

publicAddressBookVer2(){
this(DEFAULT_SIZE);
}

publicAddressBookVer2(intsize){
count=0;

if(size<=0){//invaliddatavalue,usedefault
thrownewIllegalArgumentException("Sizemustbepositive");
}

entry=newPerson[size];

//System.out.println("arrayof"+size+"iscreated.");//TEMP
}

publicvoidadd(PersonnewPerson){
if(count==entry.length){//nomorespaceleft,
enlarge();//createanewlargerarray
}

//atthispoint,entryreferstoanewlargerarray
entry[count]=newPerson;
count++;
}

publicbooleandelete(StringsearchName){
booleanstatus;
intloc;

loc=findIndex(searchName);

if(loc==NOT_FOUND){
status=false;

}else{//found,packthehole

entry[loc]=entry[count-1];

status=true;
count--;//decrementcount,
//sincewenowhaveonelesselement
}

returnstatus;
}

publicPersonsearch(StringsearchName){
PersonfoundPerson;
intloc=0;

while(loc<count&&
!searchName.equals(entry[loc].getName())){
loc++;
}

if(loc==count){
foundPerson=null;

}else{
foundPerson=entry[loc];
}

returnfoundPerson;
}

publicPerson[]sort(intattribute){

if(!(attribute==Person.NAME||attribute==Person.AGE)){
thrownewIllegalArgumentException();
}

Person[]sortedList=newPerson[count];

//copyreferencestosortedList
for(inti=0;i<count;i++){
sortedList[i]=entry[i];
}

Arrays.sort(sortedList,getComparator(attribute));

returnsortedList;
}

privatevoidenlarge()
{
//createanewarraywhosesizeis150%of
//thecurrentarray
intnewLength=(int)(1.5*entry.length);
Person[]temp=newPerson[newLength];

//nowcopythedatatothenewarray
for(inti=0;i<entry.length;i++){
temp[i]=entry[i];
}

//finallysetthevariableentrytopointtothenewarray
entry=temp;

//System.out.println("Insidethemethodenlarge");//TEMP
//System.out.println("Sizeofanewarray:"+entry.length);//TEMP
}

privateintfindIndex(StringsearchName)
{
intloc=0;

while(loc<count&&
!searchName.equals(entry[loc].getName())){
loc++;
}

if(loc==count){

loc=NOT_FOUND;
}

returnloc;
}

privateComparatorgetComparator(intattribute){
Comparatorcomp=null;

if(attribute==Person.AGE){
comp=newAgeComparator();

}else{
assertattribute==Person.NAME:
"Attributenotrecognizedforsorting";

comp=newNameComparator();
}

returncomp;

}

classAgeComparatorimplementsComparator{

privatefinalintLESS=-1;
privatefinalintEQUAL=0;
privatefinalintMORE=1;

publicintcompare(Objectp1,Objectp2){
intcomparisonResult;

intp1age=((Person)p1).getAge();
intp2age=((Person)p2).getAge();

if(p1age<p2age){
comparisonResult=LESS;
}elseif(p1age==p2age){
comparisonResult=EQUAL;
}else{
assertp1age>p2age;
comparisonResult=MORE;
}

returncomparisonResult;
}
}

classNameComparatorimplementsComparator{

publicintcompare(Objectp1,Objectp2){

Stringp1name=((Person)p1).getName();
Stringp2name=((Person)p2).getName();

returnp1name.compareTo(p2name);

}
}

}
AddressBookVer3类:
packageexample12;

importjava.util.*;

classAddressBookVer3implementsAddressBook{

privatestaticfinalintDEFAULT_SIZE=25;

privateMapentry;

publicAddressBookVer3(){
this(DEFAULT_SIZE);
}

publicAddressBookVer3(intsize){
entry=newHashMap(size);

//System.out.println("arrayof"+size+"iscreated.");//TEMP
}

publicvoidadd(PersonnewPerson){
entry.put(newPerson.getName(),newPerson);
}

publicbooleandelete(StringsearchName){

booleanstatus;
Personp=(Person)entry.remove(searchName);

if(p==null){
status=false;
}else{
status=true;
}

returnstatus;
}

publicPersonsearch(StringsearchName){

return(Person)entry.get(searchName);
}

publicPerson[]sort(intattribute){

if(!(attribute==Person.NAME||attribute==Person.AGE)){
thrownewIllegalArgumentException();
}

Person[]sortedList=newPerson[entry.size()];
entry.values().toArray(sortedList);

Arrays.sort(sortedList,getComparator(attribute));

returnsortedList;
}

privateComparatorgetComparator(intattribute){
Comparatorcomp=null;

if(attribute==Person.AGE){
comp=newAgeComparator();

}else{
assertattribute==Person.NAME:
"Attributenotrecognizedforsorting";

comp=newNameComparator();
}

returncomp;
}

classAgeComparatorimplementsComparator{

privatefinalintLESS=-1;
privatefinalintEQUAL=0;
privatefinalintMORE=1;

publicintcompare(Objectp1,Objectp2){
intcomparisonResult;

intp1age=((Person)p1).getAge();
intp2age=((Person)p2).getAge();

if(p1age<p2age){
comparisonResult=LESS;
}elseif(p1age==p2age){
comparisonResult=EQUAL;
}else{
assertp1age>p2age;
comparisonResult=MORE;
}

returncomparisonResult;
}
}

classNameComparatorimplementsComparator{

publicintcompare(Objectp1,Objectp2){

Stringp1name=((Person)p1).getName();
Stringp2name=((Person)p2).getName();

returnp1name.compareTo(p2name);

}
}

}


34.3运行结果:







[b]35闰年判断[/b]

35.1题目:判断某年是否为闰年

35.2源程序

importjava.util.Scanner;
importjavax.swing.JOptionPane;

publicclassRunNian{
publicstaticvoidmain(Stringargs[]){
Scannerinput=newScanner(System.in);
System.out.print("输入年份:");
intyear=input.nextInt();
if(year%4==0&&year%100!=0||year%400==0){//输出某年是闰年
System.out.println(year+"年是闰年");
}else{//输出某年是平年
System.out.println(year+"年是平年");
}
}
}



35.3运行结果:

输入年份:1989
1989年是平年
输入年份:2000
2000年是闰年


[b]36二元方程求解[/b]

36.1题目:求方程

的解。

36.2源程序

importjava.util.Scanner;
importjavax.swing.JOptionPane;

publicclassQuetation{
publicstaticvoidmain(Stringargs[]){
doublea,b,c,disc,x1,x2,realpart,imagpart;
Scannerscanner=newScanner(System.in);
System.out.print("输入a的值:");
a=scanner.nextDouble();
System.out.print("输入b的值:");
b=scanner.nextDouble();
System.out.print("输入c的值:");
c=scanner.nextDouble();
System.out.print("这个方程");
if(Math.abs(a)<=Math.pow(10,-6))
System.out.print("不是一元二次方程");
else{
disc=b*b-4*a*c;
if(Math.abs(disc)<=Math.pow(10,-6))
System.out.println("有两个相等实根:"+-b/(2*a));
elseif(disc>Math.pow(10,-6)){
x1=(-b+Math.sqrt(disc))/(2*a);
x2=(-b+Math.sqrt(disc))/(2*a);
System.out.println("有两个不等实根:"+x1+"和"+x2);
}
else{
realpart=-b/(2*a);
imagpart=Math.sqrt(-disc)/(2*a);
System.out.println("有两个共轭复根:");
System.out.println(realpart+"+"+imagpart+"i");
System.out.println(realpart+"-"+imagpart+"i");
}
}
}
}



36.3运行结果:

输入a的值:1
输入b的值:2
输入c的值:1
这个方程有两个相等实根:-1.0

输入a的值:1
输入b的值:2
输入c的值:2
这个方程有两个共轭复根:
-1.0+1.0i
-1.0-1.0i

输入a的值:2
输入b的值:6
输入c的值:1
这个方程有两个不等实根:-0.17712434446770464和-0.17712434446770464


[b]37密码解译[/b]

37.1题目:为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。例如,可以按一下规律将电文变成密码:

将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成C。字母按上述规律转换,非字母字符不变。

37.2源程序

importjava.util.Scanner;
importjavax.swing.JOptionPane;

publicclassCode{
publicstaticvoidmain(String[]args){
Stringstring;
intnumberOfString;
charletter;
string=JOptionPane.showInputDialog(null,"输入字符串:");
numberOfString=string.length();
for(inti=0;i<numberOfString;i++){
letter=string.charAt(i);
if((letter>='a'&&letter<='z')
||(letter>='A'&&letter<='Z')){
letter=(char)(letter+4);
if((letter>'Z'&&letter<='Z'+4)||letter>='z'){
letter=(char)(letter-26);
}
System.out.print(letter);
}
}
}
}



37.3运行结果:



Glmre

[b]38DVD查询[/b]

38.1源程序

1DVDMgr.java
importjava.util.Scanner;

publicclassDVDMgr{
/**
*创建DVD集
*/
DVDSetdvd=newDVDSet();

/**
*初始化数据
*/
publicvoidsetData(){
dvd.initial();
}

/**
*显示菜单
*/
publicvoidstartMenu(){
System.out.println("欢迎使用MiniDVDMgr1.0");
System.out.println("--------------------------------------------");
System.out.println("1.查看DVD");
System.out.println("2.借出DVD");
System.out.println("3.退出MiniDVDMgr");
System.out.println("--------------------------------------------\n");

System.out.print("请选择:");
Scannerinput=newScanner(System.in);
intchoice=input.nextInt();
switch(choice){
case1:
search();
break;
case2:
lend();
break;
case3:
System.out.println("\n欢迎使用!");
break;
}
}

/**
*查询所有DVD信息
*/
publicvoidsearch(){
System.out.println("MyDVDMgr1.0--->查询DVD\n");

for(inti=0;i<dvd.name.length;i++){
if(dvd.name[i]==null){
break;
}elseif(dvd.state[i]==0){
System.out.println("<<"+dvd.name[i]+">>"+"\t\t已借出");
}elseif(dvd.state[i]==1){
System.out.println("<<"+dvd.name[i]+">>");
}
}

System.out.println("--------------------------------");
returnMain();
}

/**
*借出DVD
*/
publicvoidlend(){
System.out.println("MyDVDMgr1.0--->借出DVD\n");

Scannerinput=newScanner(System.in);
System.out.print("请输入DVD名称:");
Stringwant=input.next();//要借出的DVD名称
for(inti=0;i<dvd.name.length;i++){

if(dvd.name[i]==null){//查询完所有DVD信息,跳出
System.out.println("操作不成功:没有匹配!");
break;
}elseif(dvd.name[i].equals(want)&&dvd.state[i]==1){//找到匹配,跳出
dvd.state[i]=0;
System.out.println("操作成功!");
break;
}
}

System.out.println("------------------------------------");
returnMain();
}

/**
*返回主菜单
*/
publicvoidreturnMain(){
Scannerinput=newScanner(System.in);
System.out.print("输入0返回\n");
if(input.nextInt()==0){
startMenu();
}else{
System.out.println("输入错误,异常终止!");
}
}

/**
*入口程序
*
*@paramargs
*/
publicstaticvoidmain(String[]args){
DVDMgrmgr=newDVDMgr();
mgr.setData();//加载数据
mgr.startMenu();
}
}
2DVDSet源程序
publicclassDVDSet{
String[]name=newString[50];//数组1存储DVD名称数组
int[]state=newint[50];//数组2存储DVD借出状态:0已借出/1可借

publicvoidinitial(){
/*DVD1:罗马假日*/
name[0]="罗马假日";
state[0]=0;

/*DVD2:越狱*/
name[1]="越狱";
state[1]=1;

/*DVD3:浪漫满屋*/
name[2]="浪漫满屋";
state[2]=1;
}
}



38.2运行结果:

欢迎使用MiniDVDMgr1.0
--------------------------------------------
1.查看DVD
2.借出DVD
3.退出MiniDVDMgr
--------------------------------------------

请选择:1
MyDVDMgr1.0--->查询DVD

<<罗马假日>>已借出
<<越狱>>
<<浪漫满屋>>
--------------------------------
输入0返回
0
欢迎使用MiniDVDMgr1.0
--------------------------------------------
1.查看DVD
2.借出DVD
3.退出MiniDVDMgr
--------------------------------------------

请选择:2
MyDVDMgr1.0--->借出DVD

请输入DVD名称:越狱
操作成功!
------------------------------------
输入0返回
0
欢迎使用MiniDVDMgr1.0
--------------------------------------------
1.查看DVD
2.借出DVD
3.退出MiniDVDMgr
--------------------------------------------

请选择:3

欢迎使用!



[b]39电子日历[/b]

39.1源程序

importjava.awt.*;
importjava.awt.event.*;
importjava.util.*;
importjavax.swing.*;
importjavax.swing.event.*;
importjavax.swing.table.*;

publicclassXiaoriliextendsJApplet{
//==================================================
/*定义全局变量*/
publicstaticfinalColorbackground=Color.white;//背景色
publicstaticfinalColorforeground=Color.black;//前景色
publicstaticfinalColorheaderBackground=Color.DARK_GRAY;//星期
publicstaticfinalColorheaderForeground=Color.white;//星期前景色
publicstaticfinalColorselectedBackground=Color.green;//选中背景色
publicstaticfinalColorselectedForeground=Color.white;//选中前景色
publicstaticfinalStringWeekSun="星期日";//星期标签名称
publicstaticfinalStringWeekMon="星期一";
publicstaticfinalStringWeekTue="星期二";
publicstaticfinalStringWeekWed="星期三";
publicstaticfinalStringWeekThu="星期四";
publicstaticfinalStringWeekFri="星期五";
publicstaticfinalStringWeekSat="星期六";
privateJPanelMainPanel;//日历面板
privateJLabelyearsLabel;//“年份”标签
privateJSpinneryearsSpinner;//年份组合框
privateJLabelmonthsLabel;//“月份”标签
privateJComboBoxmonthsComboBox;//12月份下拉框
privateJLabeltextLabel;//标题显示标签
privateJLabelInfoLabel;//个人信息显示标签
privateJTabledaysTable;//日表格
privateAbstractTableModeldaysModel;//天单元表格
privateCalendarcalendar;//日历对象
//==================================================
/*函数定义*/

publicXiaorili(){//构造函数
MainPanel=(JPanel)getContentPane();
}

publicvoidinit(){//初始化面板界面函数
MainPanel.setLayout(newBorderLayout());
calendar=Calendar.getInstance();//默认方式,以本地的时区和地区来构造Calendar
//--------------------------------------
yearsLabel=newJLabel("年份:");//设置年份标签显示
yearsSpinner=newJSpinner();//构造年份spinner组合框
yearsSpinner.setEditor(newJSpinner.NumberEditor(yearsSpinner,"0000"));
yearsSpinner.setValue(newInteger(calendar.get(Calendar.YEAR)));
yearsSpinner.addChangeListener(newChangeListener(){//注册该组合框的事件监听器
publicvoidstateChanged(ChangeEventchangeEvent){
intday=calendar.get(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH,1);
calendar.set(Calendar.YEAR,((Integer)yearsSpinner
.getValue()).intValue());
intmaxDay=calendar
.getActualMaximum(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH,
day>maxDay?maxDay:day);
updateView();//更新显示
}
});
//--------------------------------------
JPanelyearMonthPanel=newJPanel();//定义年月面板
MainPanel.add(yearMonthPanel,BorderLayout.NORTH);//添加年月面板到日历面板的南面(最上方)
yearMonthPanel.setLayout(newBorderLayout());//边布局模式
JPanelyearPanel=newJPanel();//构建年份面板
yearMonthPanel.add(yearPanel,BorderLayout.WEST);//年份面板添加到年月面板西部(左边)
yearPanel.setLayout(newBorderLayout());//设置年份面板为边布局并添加年份标签和组合框
yearPanel.add(yearsLabel,BorderLayout.WEST);
yearPanel.add(yearsSpinner,BorderLayout.CENTER);
//--------------------------------------
monthsLabel=newJLabel("月份:");//设置月份标签显示
monthsComboBox=newJComboBox();//月份下拉框
for(inti=1;i<=12;i++){//构造下拉框的12个月份
monthsComboBox.addItem(newInteger(i));
}
monthsComboBox.setSelectedIndex(calendar.get(Calendar.MONTH));//下拉框当前月份为选中状态
monthsComboBox.addActionListener(newActionListener(){//注册月份下拉框的事件监听器
publicvoidactionPerformed(ActionEventactionEvent){
intday=calendar.get(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH,1);
calendar.set(Calendar.MONTH,monthsComboBox
.getSelectedIndex());
intmaxDay=calendar
.getActualMaximum(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH,
day>maxDay?maxDay:day);
updateView();//更新面板显示
}
});
//--------------------------------------
JPanelmonthPanel=newJPanel();//定义月份面板
yearMonthPanel.add(monthPanel,BorderLayout.EAST);//添加月份面板到年月面板的东面(右面)
monthPanel.setLayout(newBorderLayout());//月份面板设为边布局方式
monthPanel.add(monthsLabel,BorderLayout.WEST);//添加月份名称标签到月份面板西面(左面)
monthPanel.add(monthsComboBox,BorderLayout.CENTER);//添加月份下拉框到月份面板中间
//--------------------------------------
textLabel=newJLabel("JAVA小日历");//设置标题标签显示
JPaneltxetPanel=newJPanel();//定义标题文本显示面板
yearMonthPanel.add(txetPanel,BorderLayout.CENTER);//添加标题文本显示面板到年月面板中间
txetPanel.add(textLabel,BorderLayout.CENTER);//添加标题文本标签到面板
//--------------------------------------
InfoLabel=newJLabel("学号:200841402210姓名:闵光辉班级:08级计算机科学与技术2班");//设置个人信息标签显示
JPanelInfoPanel=newJPanel();//定义底部个人信息显示面板
MainPanel.add(InfoPanel,BorderLayout.SOUTH);//添加个人信息显示面板到日历面板南方(下方)
InfoPanel.add(InfoLabel);//添加信息标签文本标签到面板
daysModel=newAbstractTableModel(){//设置7行7列
publicintgetRowCount(){
return7;
}
publicintgetColumnCount(){
return7;
}
publicObjectgetValueAt(introw,intcolumn){
if(row==0){//第一行显示星期
returngetHeader(column);
}
row--;
Calendarcalendar=(Calendar)Xiaorili.this.calendar.clone();
calendar.set(Calendar.DAY_OF_MONTH,1);
intdayCount=calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
intmoreDayCount=calendar.get(Calendar.DAY_OF_WEEK)-1;
intindex=row*7+column;
intdayIndex=index-moreDayCount+1;
if(index<moreDayCount||dayIndex>dayCount){
returnnull;
}else{
returnnewInteger(dayIndex);
}
}
};
daysTable=newCalendarTable(daysModel,calendar);//构造日表格
daysTable.setCellSelectionEnabled(true);//设置表格单元格可选择
daysTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
daysTable.setDefaultRenderer(daysTable.getColumnClass(0),
newTableCellRenderer(){
publicComponentgetTableCellRendererComponent(
JTabletable,Objectvalue,booleanisSelected,
booleanhasFocus,introw,intcolumn){
Stringtext=(value==null)?"":value.toString();
JLabelcell=newJLabel(text);
cell.setOpaque(true);//绘制边界内的所有像素
if(row==0){//第一行显示星期,设置为星期的前景色和背景色
cell.setForeground(headerForeground);
cell.setBackground(headerBackground);
}else{
if(isSelected){//日期单元格如果选中,则设置为日期选中的前、背景色
cell.setForeground(selectedForeground);
cell.setBackground(selectedBackground);
}else{//设置日期单元格的普通前、背景色
cell.setForeground(foreground);
cell.setBackground(background);
}
}
returncell;
}
});
updateView();
MainPanel.add(daysTable,BorderLayout.CENTER);//添加日面板到日历面板中间
}

//--------------------------------------
publicstaticStringgetHeader(intindex){//设置第一行星期的显示
switch(index){
case0:
returnWeekSun;
case1:
returnWeekMon;
case2:
returnWeekTue;
case3:
returnWeekWed;
case4:
returnWeekThu;
case5:
returnWeekFri;
case6:
returnWeekSat;
default:
returnnull;
}
}

//--------------------------------------
publicvoidupdateView(){//更新面板显示方法
daysModel.fireTableDataChanged();
daysTable.setRowSelectionInterval(calendar.get(Calendar.WEEK_OF_MONTH),
calendar.get(Calendar.WEEK_OF_MONTH));
daysTable.setColumnSelectionInterval(
calendar.get(Calendar.DAY_OF_WEEK)-1,calendar
.get(Calendar.DAY_OF_WEEK)-1);
}

publicstaticclassCalendarTableextendsJTable{//表格类
privateCalendarcalendar;

publicCalendarTable(TableModelmodel,Calendarcalendar){//构造方法
super(model);
this.calendar=calendar;
}

publicvoidchangeSelection(introw,intcolumn,booleantoggle,
booleanextend){//选择表格单元格时
super.changeSelection(row,column,toggle,extend);
if(row==0){//选择为第一行(星期)时不改变单元格
return;
}
Objectobj=getValueAt(row,column);
if(obj!=null){
calendar.set(Calendar.DAY_OF_MONTH,((Integer)obj).intValue());
}
}
}
}


39.2运行结果:



[b]40万年历[/b]

40.1源程序

importjava.util.Scanner;

publicclassPrintCalendar7{
publicstaticvoidmain(String[]args){
System.out.println("******************欢迎使用万年历******************");
Scannerinput=newScanner(System.in);
System.out.print("\n请选择年份:");
intyear=input.nextInt();
System.out.print("\n请选择月份:");
intmonth=input.nextInt();
System.out.println();

intdays=0;//存储当月的天数
booleanisRn;

/*判断是否是闰年*/
if(year%4==0&&!(year%100==0)||year%400==0){//判断是否为闰年
isRn=true;//闰年
}else{
isRn=false;//平年
}
if(isRn){
System.out.println(year+"\t闰年");
}else{
System.out.println(year+"\t平年");
}

/*计算该月的天数*/
switch(month){
case1:
case3:
case5:
case7:
case8:
case10:
case12:
days=31;
break;
case2:
if(isRn){
days=29;
}else{
days=28;
}
break;
default:
days=30;
break;
}
System.out.println(month+"\t共"+days+"天");

/*计算输入的年份之前的天数*/
inttotalDays=0;
for(inti=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);

/*计算输入月份之前的天数*/
intbeforeDays=0;
for(inti=1;i<=month;i++){
switch(i){
case1:
case3:
case5:
case7:
case8:
case10:
case12:
days=31;
break;
case2:
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);

/*计算星期几*/
intfirstDayOfMonth;//存储当月第一天是星期几:星期日为0,星期一~星期六为1~6
inttemp=1+totalDays%7;//从1900年1月1日推算
if(temp==7){//求当月第一天
firstDayOfMonth=0;//周日
}else{
firstDayOfMonth=temp;
}
System.out.println("该月第一天是:"+firstDayOfMonth);

/*输出日历*/
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
for(intnullNo=0;nullNo<firstDayOfMonth;nullNo++){
System.out.print("\t");//输出空格
}
for(inti=1;i<=days;i++){
System.out.print(i+"\t");
if((totalDays+i-1)%7==5){//如果当天为周六,输出换行
System.out.println();
}
}
}



40.2运行结果:

******************欢迎使用万年历******************

请选择年份:2008

请选择月份:6

2008闰年
6共30天
输入月份距离1900年1月1日的天数:39598
当前月份的天数:30
该月第一天是:0
星期日星期一星期二星期三星期四星期五星期六
1234567
891011121314
15161718192021
22232425262728
2930



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: