本篇文章给大家谈谈万年历接口测试用例,以及万年历软件测试对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
今天给各位分享万年历接口测试用例的知识,其中也会对万年历软件测试进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
用java控制台实现万年历-要求打印当前年月日的日历表格,要求对当天的日期单独标示
以下是用java swing编写的日历,很好用,在我所做的系统里就能够正常的使用
接下来 是具体代码:
package Demo;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.border.LineBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class DateChooser extends JPanel implements ActionListener,
ChangeListener {
/**
*
*/
private static final long serialVersionUID = 1L;
int startYear = 1980;
int lastYear = 2050;
int width = 270;
int height = 200;
Color backGroundColor = Color.gray;
Color palletTableColor = Color.white;
Color todayBackColor = Color.orange;
Color weekFontColor = Color.blue;
Color dateFontColor = Color.black;
Color weekendFontColor = Color.red;
Color controlLineColor = Color.pink;
Color controlTextColor = Color.white;
Color rbFontColor = Color.white;
Color rbBorderColor = Color.red;
Color rbButtonColor = Color.pink;
Color rbBtFontColor = Color.red;
JDialog dialog;
JSpinner yearSpin;
JSpinner monthSpin;
JSpinner hourSpin;
JSpinner minuteSpin;
JButton[][] daysButton = new JButton[6][7];
JFormattedTextField jFormattedTextField;
Calendar c = getCalendar();
DateChooser(JFormattedTextField jftf) {
jFormattedTextField = jftf;
setLayout(new BorderLayout());
setBorder(new LineBorder(backGroundColor, 2));
setBackground(backGroundColor);
JPanel topYearAndMonth = createYearAndMonthPanal();
add(topYearAndMonth, BorderLayout.NORTH);
JPanel centerWeekAndDay = createWeekAndDayPanal();
add(centerWeekAndDay, BorderLayout.CENTER);
}
private JPanel createYearAndMonthPanal() {
int currentYear = c.get(Calendar.YEAR);
int currentMonth = c.get(Calendar.MONTH) + 1;
int currentHour = c.get(Calendar.HOUR_OF_DAY);
int currentMinute = c.get(Calendar.MINUTE);
JPanel result = new JPanel();
result.setLayout(new FlowLayout());
result.setBackground(controlLineColor);
yearSpin = new JSpinner(new SpinnerNumberModel(currentYear, startYear,
lastYear, 1));
yearSpin.setPreferredSize(new Dimension(48, 20));
yearSpin.setName("Year");
yearSpin.setEditor(new JSpinner.NumberEditor(yearSpin, "####"));
yearSpin.addChangeListener(this);
result.add(yearSpin);
JLabel yearLabel = new JLabel("年");
yearLabel.setForeground(controlTextColor);
result.add(yearLabel);
monthSpin = new JSpinner(new SpinnerNumberModel(currentMonth, 1, 12, 1));
monthSpin.setPreferredSize(new Dimension(35, 20));
monthSpin.setName("Month");
monthSpin.addChangeListener(this);
result.add(monthSpin);
JLabel monthLabel = new JLabel("月");
monthLabel.setForeground(controlTextColor);
result.add(monthLabel);
hourSpin = new JSpinner(new SpinnerNumberModel(currentHour, 0, 23, 1));
hourSpin.setPreferredSize(new Dimension(35, 20));
hourSpin.setName("Hour");
hourSpin.addChangeListener(this);
result.add(hourSpin);
JLabel hourLabel = new JLabel("时");
hourLabel.setForeground(controlTextColor);
result.add(hourLabel);
minuteSpin = new JSpinner(new SpinnerNumberModel(currentMinute, 0, 59,
1));
minuteSpin.setPreferredSize(new Dimension(35, 20));
minuteSpin.setName("Minute");
minuteSpin.addChangeListener(this);
result.add(minuteSpin);
JLabel minuteLabel = new JLabel("分");
minuteLabel.setForeground(controlTextColor);
result.add(minuteLabel);
return result;
}
private JPanel createWeekAndDayPanal() {
String colname[] = { "日", "一", "二", "三", "四", "五", "六" };
JPanel result = new JPanel();
result.setFont(new Font("宋体", Font.PLAIN, 12));
result.setLayout(new GridLayout(7, 7));
result.setBackground(Color.white);
JLabel cell;
for (int i = 0; i < 7; i++) {
cell = new JLabel(colname[i]);
cell.setHorizontalAlignment(JLabel.CENTER);
if (i == 0 || i == 6)
cell.setForeground(weekendFontColor);
else
cell.setForeground(weekFontColor);
result.add(cell);
}
int actionCommandId = 0;
for (int i = 0; i < 6; i++)
for (int j = 0; j < 7; j++) {
JButton numberButton = new JButton();
numberButton.setBorder(null);
numberButton.setHorizontalAlignment(SwingConstants.CENTER);
numberButton.setActionCommand(String.valueOf(actionCommandId));
numberButton.addActionListener(this);
numberButton.setBackground(palletTableColor);
numberButton.setForeground(dateFontColor);
if (j == 0 || j == 6)
numberButton.setForeground(weekendFontColor);
else
numberButton.setForeground(dateFontColor);
daysButton[i][j] = numberButton;
numberButton.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
closeAndSetDate();
}
}
});
result.add(numberButton);
actionCommandId++;
}
return result;
}
private JDialog createDialog(Frame owner) {
JDialog result = new JDialog(owner, "日期时间选择", true);
result.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
result.getContentPane().add(this, BorderLayout.CENTER);
result.pack();
result.setSize(width, height);
return result;
}
public void showDateChooser(Point position) {
Object tmpobj=SwingUtilities.getWindowAncestor(jFormattedTextField);
if(tmpobj.getClass().isInstance(new JDialog())||tmpobj.getClass().getSuperclass().isInstance(new JDialog()))
{
JDialog ownerdialog = (JDialog) SwingUtilities
.getWindowAncestor(jFormattedTextField);
Frame owner = (Frame) SwingUtilities.getWindowAncestor(ownerdialog);
if (dialog == null || dialog.getOwner() != owner) {
dialog = createDialog(owner);
}
dialog.setLocation(getAppropriateLocation(owner, position));
}
else if(tmpobj.getClass().isInstance(new JFrame())||tmpobj.getClass().getSuperclass().isInstance(new JFrame()))
{
JFrame ownerFrame = (JFrame) SwingUtilities
.getWindowAncestor(jFormattedTextField);
if (dialog == null || dialog.getOwner() != ownerFrame) {
dialog = createDialog(ownerFrame);
}
dialog.setLocation(getAppropriateLocation(ownerFrame, position));
}
flushWeekAndDay();
dialog.setVisible(true);
}
Point getAppropriateLocation(Frame owner, Point position) {
Point result = new Point(position);
Point p = owner.getLocation();
int offsetX = (position.x + width) - (p.x + owner.getWidth());
int offsetY = (position.y + height) - (p.y + owner.getHeight());
if (offsetX 0) {
result.x -= offsetX;
}
if (offsetY 0) {
result.y -= offsetY;
}
return result;
}
public void closeAndSetDate() {
setDate(c.getTime());
dialog.dispose();
}
private Calendar getCalendar() {
Calendar result = Calendar.getInstance();
result.setTime(getDate());
return result;
}
private int getSelectedYear() {
return ((Integer) yearSpin.getValue()).intValue();
}
private int getSelectedMonth() {
return ((Integer) monthSpin.getValue()).intValue();
}
private int getSelectedHour() {
return ((Integer) hourSpin.getValue()).intValue();
}
private int getSelectedMinute() {
return ((Integer) minuteSpin.getValue()).intValue();
}
private void dayColorUpdate(boolean isOldDay) {
int day = c.get(Calendar.DAY_OF_MONTH);
c.set(Calendar.DAY_OF_MONTH, 1);
int actionCommandId = day - 2 + c.get(Calendar.DAY_OF_WEEK);
int i = actionCommandId / 7;
int j = actionCommandId % 7;
if (isOldDay)
daysButton[i][j].setForeground(dateFontColor);
else
daysButton[i][j].setForeground(todayBackColor);
}
private void flushWeekAndDay() {
c.set(Calendar.DAY_OF_MONTH, 1);
int maxDayNo = c.getActualMaximum(Calendar.DAY_OF_MONTH);
int dayNo = 2 - c.get(Calendar.DAY_OF_WEEK);
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 7; j++) {
String s = "";
if (dayNo = 1 dayNo <= maxDayNo)
s = String.valueOf(dayNo);
daysButton[i][j].setText(s);
dayNo++;
}
}
dayColorUpdate(false);
}
public void stateChanged(ChangeEvent e) {
JSpinner source = (JSpinner) e.getSource();
if (source.getName().equals("Minute")) {
c.set(Calendar.MINUTE, getSelectedMinute());
return;
}
if (source.getName().equals("Hour")) {
c.set(Calendar.HOUR_OF_DAY, getSelectedHour());
return;
}
dayColorUpdate(true);
if (source.getName().equals("Year")) {
c.set(Calendar.YEAR, getSelectedYear());
}
if (source.getName().equals("Month")) {
c.set(Calendar.MONTH, getSelectedMonth() - 1);
}
flushWeekAndDay();
}
public void actionPerformed(ActionEvent e) {
JButton source = (JButton) e.getSource();
if (source.getText().length() == 0)
return;
dayColorUpdate(true);
source.setForeground(todayBackColor);
int newDay = Integer.parseInt(source.getText());
c.set(Calendar.DAY_OF_MONTH, newDay);
}
public void setDate(Date date) {
jFormattedTextField.setText(getDefaultDateFormat().format(date));
}
public Date getDate() {
try {
String dateString = jFormattedTextField.getText();
return getDefaultDateFormat().parse(dateString);
} catch (ParseException e) {
return getNowDate();
} catch (Exception ee) {
return getNowDate();
}
}
private static Date getNowDate() {
return Calendar.getInstance().getTime();
}
private static SimpleDateFormat getDefaultDateFormat() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm");
}
}
测试程序:
package Demo;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class DemoForDateChooser extends JFrame {
private JFormattedTextField formattedTextField;
/**
* Launch the application
* @param args
*/
public static void main(String args[]) {
try {
DemoForDateChooser frame = new DemoForDateChooser();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create the frame
*/
public DemoForDateChooser() {
super();
setTitle("日期选择框");
getContentPane().setLayout(null);
setBounds(100, 100, 383, 137);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel panel = new JPanel();
panel.setLayout(null);
panel.setBounds(0, 0, 375, 107);
getContentPane().add(panel);
formattedTextField = new JFormattedTextField();
formattedTextField.setBounds(68, 48, 175, 23);
final JButton button = new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
DateChooser mDateChooser=new DateChooser(formattedTextField);
Point p = button.getLocationOnScreen();
p.y = p.y + 30;
mDateChooser.showDateChooser(p);
formattedTextField.requestFocusInWindow();
}
});
button.setText("选择日期");
button.setBounds(249, 47, 99, 23);
panel.add(button);
final JLabel label = new JLabel();
label.setText("日期:");
label.setBounds(10, 47, 71, 23);
panel.add(label);
panel.add(formattedTextField);
//
}
}
C语言课程设计报告要求
一 、 设计题目
万年历的设计
二 、设计要求
1、能够显示星期;
2、能够显示年月日;
3、能够修改;
4、当系统时间变动时,能自动跳到相应的时间。
三 、 设计目的
1. 通过本项课程设计,可以培养独立思考、 综合运用所学有关相应知识的能力,能更好的巩固《C语言程序设计》课程学习的内容,掌握 工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了c语言的好处和其可用性!同时增加了同学之间的团队合作精神!更加也体会到以后在工作中团队合作的重要性和必要性!
2. 通过C语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础。
四 、设计思想及过程
【一】由于万年历具有以下特点:
1。平年365天(52周+1天),闰年366天(52周+2天)。平年2月28天,闰年2月29天。
由于公元1月1日设为星期六,故3月1日为星期三。 ——注意这个“三”
为使算法达到最简,故本算法以“星期”为计算单位。且选3月1日为基月。
2。每400年整一闰,或每4年且不为百年的一闰。(原因:地球绕太阳一周的时间是365天5小时46秒,为了使一年的天数为整数,将一年的天数定为365天,余下的时间积累起来,四年就是23小时15分4秒,将近一天,把这一天加在某年的二月而成29天,该年称为闰年,其它年称为平年。但四年加一天又多用了44分56秒,这个数积满400年为三天。因此400年中只能有97个闰年,所以凡能被400整除,或不能被100整除但能被4整除的年份为闰年。)
所以百年%4=0闰或(年%4=0并且年<0)闰。
3。每 4年(3个平年+1个闰年)共208周+5天 ——注意这个“5天”
每百年共100*(208周+5天)-1天=5217周+5天 ——注意这个“5天”(整百年暂设为平年)
每400年共4*(5217周+5天)+1天(整400年闰)=20871周+0天——注意这个“0天”和
“1天”(4个整百年只有一个闰年)
即400年一轮回!(原来万年历400年前是一家)
【二】根据万年历以上特点进行编写:
首先对万年历年、月、日进行编写,编写程序先定义每月的天数为28天,如月份为1、3、5、7、8、10、12就定义天数为31天反之如果月份为4、6、9、11就输出天数为30天,由上可见2月份为28天但是如果为闰年就有29天就要定义另一个函数#define Year(x) (x%4==0x%100!=0||x%400==0) ? 1:0当为闰年时可得1加上该程序便可得到每月的天数。 具体程序见(五、万年历程序)
再对其中的星期进行编写:由于公元1月1日设为星期六,故3月1日为星期三,可以用万年3月1日星期算法(特别是那个三)
由于其公式为:
某年3月1日星期几=(3天+百年%4*5天+年/4*5天+年%4+月星期表+日-1天)%7
某年3月1日星期几=(百年%4*5天+年/4*5天+年%4+月星期表+日+2天)%7
或 某年3月1日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7
闰4百年3月1日星期算法(百年%4=0)
其公式为:
某年3月1日星期几=(年+年/4+月星期表+日+2天)%7
例:0000年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三
1600年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三
2000年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三
2001年3月1日星期几=(1+1/4+0+1+2)%7=4%7=星期四
2004年3月1日星期几=(4+4/4+0+1+2)%7=8%7=星期一
2008年3月1日星期几=(8+8/4+0+1+2)%7=13%7=星期六
2042年3月1日星期几=(42+42/4+0+1+2)%7=55%7=星期六
平4百年3月1日星期算法(百年%4<0)
其公式为:
某年3月1日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7
例:1700年3月1日星期几=(17%4*5+0+0/4+0+1+2)%7=8%7=星期一(注意:1700年是平年)
1800年3月1日星期几=(18%4*5+0+0/4+0+1+2)%7=13%7=星期六(注意:1800年是平年)
1900年3月1日星期几=(19%4*5+0+0/4+0+1+2)%7=18%7=星期四(注意:1900年是平年)
1901年3月1日星期几=(19%4*5+1+1/3+0+1+2)%7=19%7=星期五
1918年3月1日星期几=(19%4*5+18+18/4+0+1+2)%7=(15+22+3)%7=40%7=星期五
1958年3月1日星期几=(19%4*5+58/4*5+58%4+3)%7=(15+70+2+3)%7=90%7=星期六
1988年3月1日星期几=(19%4*5+88/4*5+88%4+3)%7=(15+110+0+3)%7=128%7=星期二
1999年3月1日星期几=(19%4*5+99/4*5+99%4+3)%7=(15+120+3+3)%7=141%7=星期一
2100年3月1日星期几=(21%4*5+0/4*5+0%4+3)%7=(5+0+0+3)%7=8%7=星期一(注意:2100年是平年)
2101年3月1日星期几=(21%4*5+1/4*5+1%4+3)%7=(5+0+1+3)%7=9%7=星期二
2102年3月1日星期几=(21%4*5+2/4*5+2%4+3)%7=(5+0+2+3)%7=10%7=星期三
2103年3月1日星期几=(21%4*5+3/4*5+3%4+3)%7=(5+0+3+3)%7=11%7=星期四
2104年3月1日星期几=(21%4*5+4/4*5+4%4+3)%7=(5+1+0+3)%7=9%7=星期二(注意:2104年是闰年)
9999年3月1日星期几=(99%4*5+99/4*5+99%4+3)%7=(120+15+3+3)%7=141%7=星期一
注:按400年一轮回!(400年前是一家)的说法
1600年,2000年是一样的;
1700年,2100年是一样的;
1800年,2200年是一样的;
1900年,2300年是一样的。
其中万年某日星期算法
其公式为:
某日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7
通同星期偏差表
闰年 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
天数 31 29 31 30 31 30 31 31 30 31 30 31
星期 3 6 0 3 5 1 3 6 2 4 0 2
平年 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
天数 31 28 31 30 31 30 31 31 30 31 30 31
星期 4 0 0 3 5 1 3 6 2 4 0 2
为对以上的万年历星期的算法是正确的对其进行了以下的计算:
⒈对于二十世纪任意日期可以用公式某日星期几=(百年%4*5天+年+年/4+平年月星期表+日+2天)%7=(19%4*5天+年+年/4+平年月星期表+日+2天)%7=(15天+年+年/4+平年月星期表+日+2天)%7以下就是根据上面对其进行的计算:
1900年元旦 1日=(0/4*5+0%4+1+3)%7=(0+0+4)%7=4
1月表=4(平年) 故 4+4=1 即1900年元旦是星期一
1949年国庆 1日=(49/4*5+49%4+1+3)%7=(60+1+4)%7=2
10月表=4(平年) 故 4+2=6 即1949年国庆是星期六
1999年12月31日 31日=(99/4*5+99%4+31+3)%7=(120+3+34)%7=3
12月表=2(平年) 故 2+3=5 即1999年12月31日是星期五
⒉对于二十一世纪新前年虫算法(20%4*5=0)可以用公式:某日星期几=(百年%4*5天+年+年/4+闰年月星期表+日+2天)%7 =(20%4*5天+年+年/4+闰年月星期表+日+2天)%7以下就是根据上面对其进行的计算:
2000年元旦 1日=(0+0/4+1+2)%7=(0+0+1+2)%7=3
1月表=3(闰年) 故 3+3-6 即2027年元旦是星期六
2018年春节 16日=(18+18/4+16+2)%7=(18+4+16+2)%7=5
2月表=0(平年) 故 0+5=5 即2018年春节是星期五
2099年12月31日 31日=(99/4*5+99%4+31+2)%7=(120+3+33)%7=2
12月表=2(平年) 故 2+2=4 即2099年12月31日是星期四
对于上面的分析以及公式的推论和计算证明可以对万年历中的星期进行了编写具体编写程序见(五 、万年历程序)中。
五 、万年历源程序
#include"stdio.h"
#include"dos.h"
#include"conio.h"
#include"stdlib.h"
#define Year(x) (x%4==0x%100!=0||x%400==0) ? 1:0 /*判断闰年*/
int numofMonth(int y,int m){
int day,t=28;
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
day=31; /*定义以上月份为31天*/
else if(m==4||m==6||m==9||m==11)
day=30; /*定义以上月份为30天*/
else{t+=Year(y);
day=t;} /*闰年二月29天,平年28天*/
return day;}
int numofYear(int y){
int t=365; /*平年365天*/
t+=Year(y);/*闰年366天*/
return t;}
int numofbeforeDays(int y,int m,int d){
int sum=d,i;
for(i=1;i<m;i++)
sum+=numofMonth(y,i);
return sum;}
int numofafterDays(int y,int m,int d){
int sum=0,i;
for(i=m;i<=12;i++)
sum+=numofMonth(y,i);
sum-=d;
return sum;}
int isDay(int y,int m,int d){
int year=1900,month=1,week=1,i; /*定义万年历是从1900年开始*/
long sum=0;
for(i=year;i<y;i++)
sum+=numofYear(i);
for(i=1;i<m;i++)
sum+=numofMonth(y,i);
/* ++sum;*/
i=sum%7;
week=(week+i)%7;
return week;}
void empty(int n){
int i;
for(i=0;i<n;i++)
printf("%*c",6,' ');}
void OutPutCalender(int y,int m,int d)/*计算x年x月x是星期几*/{
int week,i,num,t;
week=isDay(y,m,1);
printf("%6d/%02d/%02d\n",y,m,d);
printf("%6s%6s%6s%6s%6s%6s%6s\n","Sun","Mon","Tue","Wed","Thu","Fri","Sat");
empty(week);
num=numofMonth(y,m);
for(i=1;i<=num;i++){
printf("%6d",i);
t=(week+i)%7;
if(t==0)
printf("\n");} /*光标移到下一行*/
printf("\n");}
long numBTDays(int y1,int m1,int d1,int y2,int m2,int d2)/*定义两个不同日期*/{
int i;
long sum=0;
for(i=y1+1;i<y2;i++)
sum+=numofYear(i);
if(y1==y2){ sum-=d1;
for(i=m1;i<m2;i++)
sum+=numofMonth(y1,i);
sum+=d2;}
else{sum+=numofafterDays(y1,m1,d1);
sum+=numofbeforeDays(y2,m2,d2);}
return sum;}
int Select_mean(){
int sm;
printf("1. OutPut Calender\n"); /*输出当前月份的日历*/
printf("2. Help\n"); /*帮助*/
printf("0. Quit\n"); /*退出*/
printf("Please enter choose(0--2):"); /*从0-2中选择*/
do
scanf("%d",sm); /*输入sm*/
while(sm<0||sm3);
return sm;}
void Help()/*输出帮助栏的内容*/{
printf(" 1. OutPut Calender\n");
printf(" 2. System Help\n");
printf(" 0. Quit\n");
printf("Page Up: Up year\n"); /*上一年*/
printf("Page Down: next year\n"); /*下一年*/
printf(" -- : next month\n"); /*上一月*/
printf(" <-- : Up month\n");/*下一月*/}
main(){
int year=2006,year1=2006,month,day,y1,m1,d1,y2,m2,d2,c,t; /*定义运行后的日期是2006年*/
int inkeySCAN,inkey; /*输入键盘操作信息*/
union REGS inregs,outregs;
inregs.h.ah=0x2a;
intdos(inregs,outregs);
/* year=outregs.xcx; */
month=outregs.h.dh;
day=outregs.h.dl;
year1=year;
printf("%d/%02d/%02d\n",year,month,day);
while(1)/*当选择为1时,执行以下语句*/{
switch(Select_mean()){
case 1:
OutPutCalender(year,month,day);
while(1){
inkey=bioskey(0);
inkeySCAN=(inkey0xFF00)8;
if(inkeySCAN==77){
if(month==12){month=1;year1++;
OutPutCalender(year1,month,day);/*输出日历*/}
else{month++;
OutPutCalender(year1,month,day);
}}
if(inkeySCAN==75){
if(month==1){month=12;year1--;
OutPutCalender(year1,month,day);}
else{month--;OutPutCalender(year1,month,day);}}
if(inkeySCAN==73){
if(year1==1900) year1=year;
else{year1--;OutPutCalender(year1,month,day);}}
if(inkeySCAN==81){
year1++;OutPutCalender(year1,month,day);}
if(inkeySCAN==28)break;}
break; /*终止循环*/
case 2:
Help();
break;
case 0:
exit(0);
default:
printf("Enter ERROR!\n");
break;} }
}
六 运行过程
1.双击TC
1. 当对上面的程序进行了调试后运行会出现下面所示:
第一行所显示的就是系统时间!满足了第一条要求“显示年、月、日”。
而当改变系统时间后!再运行该程序上面的日期也随系统时间改变,所以满足第四条“当系统时间变动时,能自动跳到相应的时间。”
2. 在光标处按下“1”后回车,将会显示:
以上的显示也证明了条件的第2条可以“显示星期!”
3. 在光标处按下“2”后回车,将会显示:
按着帮助所讲进行了运行可知:按“ Page Up ”键其下面接着会显示上一年该月的万年历,按“ Page Down ”键其下面会接着显示下一年该月的万年历;按“ ← ”键下面将会接着显示当年上一个月的万年历,按“ → ”键将会接着在下面显示去下一个月的万年历。
4.
由上所显示键入“0”后将会退去该程序。
由以上运行的结果可知该c语言所设计的万年历满足设计要求!
七、在C语言编程中常见错误
C语言的最大特点是:功能强、使用方便灵活。C编译的程序对语法检查并不象其它高级语言那么严格,这就给我们留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对我们这些初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误。看着有错的程序,不知该如何改起,我通过这次编程,也积累了一些C编程时常犯的错误:
1. 书写标识符时,忽略了大小写字母的区别。
编译程序把a和A认为是两个不同的变量名,而显示出错信息。C语言认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。
2.忽略了变量的类型,进行了不合法的运算。
%是求余运算,得到a/b的整余数。整型变量a和b可以进行求余运算,而实型变量则不允许进行“求余”运算。
3.将字符常量与字符串常量混淆。
混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。C规定以“\”作字符串结束标志,它是由系统自动加上的,所以字符串“a”实际上包含两个字符:‘a'和‘\',而把它赋给一个字符变量是不行的。
4.忽略了“=”与“==”的区别。
在C语言中,“=”是赋值运算符,“==”是关系运算符。如:
if (a==3) a=b;
前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。
5.忘记加分号。
分号是C语句中不可缺少的一部分,语句末尾必须有分号。
a=1 b=2
编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。
{ z=x+y;
t=z/100;
printf("%f",t);
}
对于复合语句来说,最后一个语句中最后的分号不能忽略不写(这是和PASCAL不同的)。
6.多加分号。
对于一个复合语句,如:
{ z=x+y;
t=z/100;
printf("%f",t);
};
复合语句的花括号后不应再加分号,否则将会画蛇添足。
又如:
if (a%3==0);
I++;
本是如果3整除a,则I加1。但由于if (a%3==0)后多加了分号,则if语句到此结束,程序将执行I++语句,不论3是否整除a,I都将自动加1。
再如:
for (I=0;I<5;I++);
{scanf("%d",x);
printf("%d",x);}
本意是先后输入5个数,每输入一个数后再将它输出。由于for()后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它。
7.输入变量时忘记加地址运算符“”。
int a,b;
scanf("%d%d",a,b);
这是不合法的。Scanf函数的作用是:按照a、b在内存的地址将a、b的值存进去。“a”指a在内存中的地址。
8.输入数据的方式与要求不符。scanf("%d%d",a,b);输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:
3,4
输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab。
scanf("%d,%d",a,b);C规定:如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。下面输入是合法的:
3,4
此时不用逗号而用空格或其它字符是不对的。
3 4 3:4
又如:
scanf("a=%d,b=%d",a,b);
输入应如以下形式:
a=3,b=4
9.输入字符的格式与要求不一致。
在用“%c”格式输入字符时,“空格字符”和“转义字符”都作为有效字符输入。
scanf("%c%c%c",c1,c2,c3);
如输入a b c
字符“a”送给c1,字符“ ”送给c2,字符“b”送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔。
10.输入输出的数据类型与所用格式说明符不一致。
例如,a已定义为整型,b定义为实型
a=3;b=4.5;
printf("%f%d\n",a,b);
语法错
逻辑错 运行错
0.忘记定义变量:
main()
{x=3;y=6;
printf(“%d\n”,x+y);
11.C语言的变量一定要先定义才能使用;
12.输入输出的数据的类型与所用格式说明符不一致
int a=3;float b=4.5;printf(“%f%d\n”,a,b);
它们并不是按照赋值的规则进行转换(如把4.5转换为4),而是将数据在存储单元中的形式按格式符的要求组织输出(如b占4个字节,只把最后两个字节的数据按%d,作为整数输出)
13.未注意int型数据的数值范围
int型数据的数值范围(-32768~32768)
int num=89101;
printf(“%d”,num);
会将超过低16位的数截去从而得到23563
注意:定义了long型,而在输出时仍用”%d”说明符,仍会出现以上错误
14.输入变量时忘记使用地址符
scanf(“%d%d”,a,b);
15.输入时数据的组织与要求不符
对scanf函数中格式字符串中除了格式说明符外,对其他字符必须按原样输入
16.误把”=“作为”等于”比较符
“=“为附值运算符
“==“为比较运算符
17.语句后面漏分号
{
t=a;
a=b;
b=t
}
它是pascal的语法
18.不该加分号的地方加了分号
if(ab);
printf(“a is larger than b\n”);
for(i=0;i<10;i++);
{
scanf(“%d”,x);
printf(“%d\n”,x*x);
}
19.对应该有花括弧的复合语句,忘记加花括弧
sum=0;
i=1;
while(i<=100)
sum=sum+1;
i++;
20.括弧不配对
while((c=getchar()!=‘#’)
putchar(c);
11.在用标识时,忘记了大写字母和小写字母的区别
{
int a,b,c;
a=2;
b=3;
C=A+B;
printf(“%d+%d=%D”,A,B,C);
}
12.引用数组元素时误用发圆括弧
{
int i,a(10);
for(i=0;i<10;i++)
scanf(“%d”,a(i));
}
13.在定义数组时,将定义的”元素个数”误认为是”可使用的最大下标值
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int i;
for(i=1;i<=10;i++)
printf(“%d”,a[i]);
}
14.对二维或多维数组的定义和引用的方法不对
{
int a[5,4];
…
printf(“%d”,a[1+2,2+2]);
…
}
15.误以为数组名代表数组中全部元素
{int a[4]={1,2,3,4};
printf(“%d%d%d%d”,a);
}
16.混淆字符数组与字符指针的区别
main()
{
char str[40];
str=“Computer and c”;
printf(“%s\n”,str);
}
17.在引用指针变量之前没有对它赋予确定的值
{
char *p;
scanf(“%s”,p);
}
{
char *p,c[20];
p=c;
scanf(“%s”,p);
}
18.switch语句的各分支中漏写 break语句
混淆字符和字符串的表示形式
…
char sex;
sex=“M”;
…
19.使用自加(++)和自减(--)运算符时出的错误
{
int *p,a[5]={1,3,5,7,9};
p=a;
printf(“%d”,*p++);
}
注意于*(++p)的区别;
20.所调用的函数在调用语句之后才定义,而又在调用前未加说明
main()
{float x,y,z;
x=3.5;y=-7.6;
z=max(x,y);
printf(“%f”,z);
}
编译时不给出出错信息,但运行结果将与原意不符。这种错误尤其需要注意。
八、心得体会
1. 目前流行的计算机日历程序,比较典型的是Windows各版本中的日历程序以及基础于该程序所开发的各种应用程序中的日历程序。然而,这些程序都千篇一律的局限在一个很短的时间范围内。(Windows各个版本一般都局限在1980年至2099年这一范围内),但是,在很多情况下,特别是在众多的科学研究领域中,一个时间跨度较大的日历程序是很有参考价值的。C程序设计语言充分发挥了其自身无与伦比的优越性,用极短的程序文本填补了这一领域的空白,同时用铁的事实强有力的告诉世人:C程序设计语言作为计算机语言家族的新生事物,其发展前景是极为广阔的。
2. 经过上一个学期对《C程序设计》的学习,我们学习了理论知识,了解了C语言程序设计的思想,这些知识都为我们的下一步学习打下了坚实的基础。通过课程设计,一方面是为了检查我们一个学期来我们学习的成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。
3. 通过对c语言万年历的设计进一步的巩固了用c语言编写程序,并且有利于更好的掌握c语言!
4. 在万年历的编写过程中也体会到了做事情一顶要细心、认真。更加知道了要掌握好基础知识。还有体会到了成功的感觉!在万年历的设计过程中更加体会到了团队合作的重要性,“一个诸葛亮比不上三个臭皮匠。”知道了只有团队合作才会更好的完成设计!也体会到以后在工作中团队合作的必要性和重要性!
5. 通过本项课程设计也培养了我独立思考、 综合运用所学有关相应知识的能力,掌握 工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!
6. 由于C语言是近年在国内外得到迅速推广应用的一种语言。C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。通过这次的c语言程序设计更加了解了c语言的好处和其可用性!
7. 在这次课程设计中也知道了自己的动手能力不强有待进一部的提高!在设计过程中不能够把书本上的知识与实践相结合,这也就增加了设计不好该程序的想法!在设计过程中的一次次设计错误增加了我放弃的想法!不过经过大家的努力终于完成了课程设计!完成该程序后想起自己以前的每一次对自己失去信心,就觉得并不是在知识掌握上打败了,而是自己对自己缺乏信心!只要自己对自己不失去信心相信就可以完成那些以前认为完成不了的事情!也让我懂得了要想成功首先就必须有很强的自信心!懂得了自己以后要在做任何事情时都要自信!当自己都不相信自己能够成功时还可能会获得成功吗?
8. 在C语言程序设计的过程中也知道了自己在以前的学习中有很大的不足导致在设计过程中出现了很多的问题,有些地方看不懂也不知道怎么去设计,但是在设计过程中也学习了很多,掌握了自己以前没有学好的知识,虽然一时可以掌握完以前没有学好的知识,不过也给自己敲响了警钟,在学习中不可以伏于表面,要想学好每一门课程都要踏踏实实,做什么都不是给别人看的!都是要更好的掌握该门知识,提高自己的自身的修养,提高自己的能力!为以后的工作打下良好的知识基础和技能基础!
九、参考文献
⒈谭浩强编著.C程序设计第二版〔M〕.北京:清华大学出版社,1999
⒉陈朔鹰,陈英编著.C语言趣味程序百例精解〔M〕.北京:北京理工大学出版社,1994
⒊电脑知识与技术学术交流版〔J〕2005.2 (备注:来自网络资源)
⒋Herbert Schildit著. 戴健鹏译. C语言大全 (第二版)〔M〕.北京:电子工业出版社,1994
⒌谭浩强,张基温,唐永炎编著. C语言程序设计教程.〔M〕北京: 高等教育出版社,1992
⒍秦友淑,曹化工编著. C语言程序设计教程. 〔M〕武汉:华中理工大学出版社,1996
⒎曹衍龙,林瑞仲,徐慧 编著.C语言实例解析精粹 〔M〕北京:人民邮电出版社,2005.3
⒏黄明等编著.21世纪进阶辅导C语言程序设计. 〔M〕大连理工大学出版
JS万年历中如何求某天的节气
同样的函数,这个却不能用第402行,按下某日期显示当前节气
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
<HTML<HEAD<TITLE</TITLE
<META http-equiv=Content-Type content=text/html;charset=gb2312
<META
<META content=All name=robots
<META content="Gregorian Solar Calendar and Chinese Lunar Calendar"
name=description
<META content=no-cache name=Pragma
<META content=no-cache name=Cache-Control
<script language="JavaScript" src="jieri.js"</script
<script language="JavaScript" src="jieqi.js"</script
<SCRIPT language=JScript
var conWeekend = 3;
var lunarInfo=new Array(
0x4bd8,0x4ae0,0xa570,0x54d5,0xd260,0xd950,0x5554,0x56af,0x9ad0,0x55d2,
0x4ae0,0xa5b6,0xa4d0,0xd250,0xd295,0xb54f,0xd6a0,0xada2,0x95b0,0x4977,
0x497f,0xa4b0,0xb4b5,0x6a50,0x6d40,0xab54,0x2b6f,0x9570,0x52f2,0x4970,
0x6566,0xd4a0,0xea50,0x6a95,0x5adf,0x2b60,0x86e3,0x92ef,0xc8d7,0xc95f,
0xd4a0,0xd8a6,0xb55f,0x56a0,0xa5b4,0x25df,0x92d0,0xd2b2,0xa950,0xb557,
0x6ca0,0xb550,0x5355,0x4daf,0xa5b0,0x4573,0x52bf,0xa9a8,0xe950,0x6aa0,
0xaea6,0xab50,0x4b60,0xaae4,0xa570,0x5260,0xf263,0xd950,0x5b57,0x56a0,
0x96d0,0x4dd5,0x4ad0,0xa4d0,0xd4d4,0xd250,0xd558,0xb540,0xb6a0,0x95a6,
0x95bf,0x49b0,0xa974,0xa4b0,0xb27a,0x6a50,0x6d40,0xaf46,0xab60,0x9570,
0x4af5,0x4970,0x64b0,0x74a3,0xea50,0x6b58,0x5ac0,0xab60,0x96d5,0x92e0,
0xc960,0xd954,0xd4a0,0xda50,0x7552,0x56a0,0xabb7,0x25d0,0x92d0,0xcab5,
0xa950,0xb4a0,0xbaa4,0xad50,0x55d9,0x4ba0,0xa5b0,0x5176,0x52bf,0xa930,
0x7954,0x6aa0,0xad50,0x5b52,0x4b60,0xa6e6,0xa4e0,0xd260,0xea65,0xd530,
0x5aa0,0x76a3,0x96d0,0x4afb,0x4ad0,0xa4d0,0xd0b6,0xd25f,0xd520,0xdd45,
0xb5a0,0x56d0,0x55b2,0x49b0,0xa577,0xa4b0,0xaa50,0xb255,0x6d2f,0xada0,
0x4b63,0x937f,0x49f8,0x4970,0x64b0,0x68a6,0xea5f,0x6b20,0xa6c4,0xaaef,
0x92e0,0xd2e3,0xc960,0xd557,0xd4a0,0xda50,0x5d55,0x56a0,0xa6d0,0x55d4,
0x52d0,0xa9b8,0xa950,0xb4a0,0xb6a6,0xad50,0x55a0,0xaba4,0xa5b0,0x52b0,
0xb273,0x6930,0x7337,0x6aa0,0xad50,0x4b55,0x4b6f,0xa570,0x54e4,0xd260,
0xe968,0xd520,0xdaa0,0x6aa6,0x56df,0x4ae0,0xa9d4,0xa4d0,0xd150,0xf252,
0xd520);
var solarMonth=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
var Gan=new Array("甲","乙","丙","丁","戊","己","庚","辛","壬","癸");
var Zhi=new Array("子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥");
var Animals=new Array("鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪");
var solarTerm = new Array("小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至");
var sTermInfo = new Array(0,21208,42467,63836,85337,107014,128867,150921,173149,195551,218072,240693,263343,285989,308563,331033,353350,375494,397447,419210,440795,462224,483532,504758);
var nStr1 = new Array('日','一','二','三','四','五','六','七','八','九','十');
var nStr2 = new Array('初','十','廿','卅',' ')
var monthName = new Array("1 月","2 月","3 月","4 月","5 月","6 月","7 月","8 月","9 月","10 月","11 月","12 月");
var timeData = {
"Asia 亚洲": { //----------------------------------------------
"Brunei 文莱 ":["+0800","","斯里巴加湾市"],
"Burma 缅甸 ":["+0630","","仰光"],
"Cambodia 柬埔寨 ":["+0700","","金边"],
"China 中国 ":["+0800","","北京、重庆、上海、天津"],
"China(HK,Macau) 中国 ":["+0800","","香港、澳门特区"],
"China(TaiWan) 中国 ":["+0800","","台北、高雄"],
"China(Urumchi) 中国 ":["+0700","","乌鲁木齐"],
"Indonesia 印尼 ":["+0700","","雅加达"],
"Poland 波兰 ":["+0100","","华沙"],
"国际换日线 ":["-1200","","国际换日线"]
}
};
function lYearDays(y) {
var i, sum = 348;
for(i=0x8000; i0x8; i=1) sum += (lunarInfo[y-1900] i)? 1: 0;
return(sum+leapDays(y));
}
function leapDays(y) {
if(leapMonth(y)) return( (lunarInfo[y-1899]0xf)==0xf? 30: 29);
else return(0);
}
function leapMonth(y) {
var lm = lunarInfo[y-1900] 0xf;
return(lm==0xf?0:lm);
}
function monthDays(y,m) {
return( (lunarInfo[y-1900] (0x10000m))? 30: 29 );
}
function Lunar(objDate) {
var i, leap=0, temp=0
var baseDate = new Date(1900,0,31)
var offset = (objDate - baseDate)/86400000
this.dayCyl = offset + 40
this.monCyl = 14
for(i=1900; i<2050 offset0; i++) {
temp = lYearDays(i)
offset -= temp
this.monCyl += 12
}
if(offset<0) {
offset += temp;
i--;
this.monCyl -= 12
}
this.year = i
this.yearCyl = i-1864
leap = leapMonth(i) //闰哪个月
this.isLeap = false
for(i=1; i<13 offset0; i++) {
//闰月
if(leap0 i==(leap+1) this.isLeap==false)
{ --i; this.isLeap = true; temp = leapDays(this.year); }
else
{ temp = monthDays(this.year, i); }
//解除闰月
if(this.isLeap==true i==(leap+1)) this.isLeap = false
offset -= temp
if(this.isLeap == false) this.monCyl ++
}
if(offset==0 leap0 i==leap+1)
if(this.isLeap)
{ this.isLeap = false; }
else
{ this.isLeap = true; --i; --this.monCyl;}
if(offset<0){ offset += temp; --i; --this.monCyl; }
this.month = i
this.day = offset + 1
}
function solarDays(y,m) {
if(m==1)
return(((y%4 == 0) (y%100 != 0) || (y%400 == 0))? 29: 28);
else
return(solarMonth[m]);
}
function cyclical(num) {
return(Gan[num%10]+Zhi[num%12]);
}
//============================== 阴历属性
function calElement(sYear,sMonth,sDay,week,lYear,lMonth,lDay,isLeap,cYear,cMonth,cDay) {
this.isToday = false;
//瓣句
this.sYear = sYear; //公元年4位数字
this.sMonth = sMonth; //公元月数字
this.sDay = sDay; //公元日数字
this.week = week; //星期, 1个中文
//农历
this.lYear = lYear; //公元年4位数字
this.lMonth = lMonth; //农历月数字
this.lDay = lDay; //农历日数字
this.isLeap = isLeap; //是否为农历闰月?
//八字
this.cYear = cYear; //年柱, 2个中文
this.cMonth = cMonth; //月柱, 2个中文
this.cDay = cDay; //日柱, 2个中文
this.color = '';
this.lunarFestival = ''; //农历节日
this.solarFestival = ''; //公历节日
this.solarTerms = ''; //节气
}
//===== 某年的第n个节气为几日(从0小寒起算)
function sTerm(y,n) {
var offDate = new Date( ( 31556925974.7*(y-1900) + sTermInfo[n]*60000 ) + Date.UTC(1900,0,6,2,5) );
return(offDate.getUTCDate());
}
function strDate(objDate)
{
var tY = objDate.getFullYear();
var tM = objDate.getMonth()+1;
var tD = objDate.getDate();
var tH = objDate.getHours();
var s;
s=+tY+"年"+tM+"月"+tD+"日"+tH+"时";
return s;
}
function GetTerm(objDate) {
var year=objDate.getFullYear();
var d;
var i;
for (i=1;i<23;i+=2) {
d=sTerm(year,i);
if (objDate<d) break;
}
if (i==1) i=23;
return i;
}
function calendar(y,m) {
var sDObj, lDObj, lY, lM, lD=1, lL, lX=0, tmp1, tmp2, tmp3, BMjqFtvl;
var cY, cM, cD; //年柱,月柱,日柱
var lDPOS = new Array(3);
var n = 0;
var firstLM = 0;
sDObj = new Date(y,m,1,0,0,0,0); //当月一日日期
this.length = solarDays(y,m); //公历当月天数
this.firstWeek = sDObj.getDay(); //公历当月1日星期几
if(m<2) cY=cyclical(y-1900+36-1);
else cY=cyclical(y-1900+36);
var term2=sTerm(y,2); //立春日期
var firstNode = sTerm(y,m*2) //返回当月「节」为几日开始
cM = cyclical((y-1900)*12+m+12);
var dayCyclical = Date.UTC(y,m,1,0,0,0,0)/86400000+25567+10;
for(var i=0;i<this.length;i++) {
if(lDlX) {
sDObj = new Date(y,m,i+1); //当月一日日期
lDObj = new Lunar(sDObj); //农历
lY = lDObj.year; //农历年
lM = lDObj.month; //农历月
lD = lDObj.day; //农历日
lL = lDObj.isLeap; //农历是否闰月
lX = lL? leapDays(lY): monthDays(lY,lM); //农历当月最后一天
if(n==0) firstLM = lM;
lDPOS[n++] = i-lD+1;
}
if(m==1 (i+1)==term2) cY=cyclical(y-1900+36);
if((i+1)==firstNode) cM = cyclical((y-1900)*12+m+13);
cD = cyclical(dayCyclical+i);
this[i] = new calElement(y, m+1, i+1, nStr1[(i+this.firstWeek)%7],
lY, lM, lD++, lL,
cY ,cM, cD );
}
sFtv = new Array(
"0101*新年元旦",
"0312 植树节 孙中山逝世纪念日",
"0314 国际警察日")
for(i in sFtv)
if(sFtv[i].match(/^(\d{2})(\d{2})([\s\*])(.+)$/))
if(Number(RegExp.$1)==(m+1)) {
this[Number(RegExp.$2)-1].solarFestival += RegExp.$4 + ' ';
if(RegExp.$3=='*') this[Number(RegExp.$2)-1].color = 'red';
}
}
function cMonth(d){
var s;
switch (d) {
case 1: s = '正'; break;
case 11: s = '冬'; break;
case 12: s = '腊'; break;
break;
default :
s = nStr1[d%12];
}
return(s);
}
function cDay(d){
var s;
switch (d) {
case 10: s = '初十'; break;
case 20: s = '二十'; break;
break;
case 30: s = '三十'; break;
break;
default :
s = nStr2[Math.floor(d/10)];
s += nStr1[d%10];
}
return(s);
}
var cld;
function drawCld(years,months) {
var i,sD,s,size;
cld = new calendar(years,months);
if(years1874 years<1909) yDisplay = '光绪' + (((years-1874)==1)?'元':years-1874);
if(years1908 years<1912) yDisplay = '宣统' + (((years-1908)==1)?'元':years-1908);
if(years1911 years<1950) yDisplay = '民国' + (((years-1911)==1)?'元':years-1911);
if(years1948) yDisplay = '建国<font color=red' + (((years-1949)==1)?'元':years-1949);
GZ.innerHTML = yDisplay+'</font年'+'</a '+Animals[(years-4)%12]+'年[农历<font color=red' + cyclical(years-1900+36)+'</font年]';
for(i=0;i<42;i++) {
sObj=eval('SD'+ i);
lObj=eval('LD'+ i);
sObj.className = '';
sD = i - cld.firstWeek;
if(sD-1 sD<cld.length) { //日期内
sObj.innerHTML = sD+1;
if(cld[sD].isToday) sObj.className = 'todyaColor'; //今日颜色
if(cld[sD].lDay==1) //显示农历月
lObj.innerHTML = '<b'+(cld[sD].isLeap?'闰':'') + cld[sD].lMonth + '月' + (monthDays(cld[sD].lYear,cld[sD].lMonth)==29?'小':'大')+'</b';
else //显示农历日
lObj.innerHTML = cDay(cld[sD].lDay);
s=cld[sD].solarFestival;
if(s.length0) {//公历节日
size = (s.charCodeAt(0)0 s.charCodeAt(0)<128)?8:4;
if(s.lengthsize+2) s = s.substr(0, size)+'...';
s=(s=='黑色星期五')?s.fontcolor('black'):s.fontcolor('blue');
}
else {
s=cld[sD].lunarFestival;
if(s.length0) { //农历节日
if(s.length6) s = s.substr(0, 4)+'...';
s = s.fontcolor('red');
}
else { //廿四节气
s=cld[sD].solarTerms;
if(s.length0) s = s.fontcolor('limegreen');
}
}
if(s.length0) lObj.innerHTML = s;
}
else { //非日期
sObj.innerHTML = '';
lObj.innerHTML = '';
}
}
}
function changeCld() {
var y,m;
y=CLD.years.selectedIndex+1900;
m=CLD.months.selectedIndex;
drawCld(y,m);
}
var Today = new Date();
var tY = Today.getFullYear();
var tM = Today.getMonth();
var tD = Today.getDate();
var width = "130";
var offsetx = 2;
var offsety = 8;
var x = 0;
var y = 0;
var snow = 0;
var sw = 0;
var cnt = 0;
var dStyle;
document.onmousemove = mEvn;
function mOvr(v) {
var s,festival,sjqFtvl;
var sObj=eval('SD'+ v);
var d=sObj.innerHTML-1;
if(sObj.innerHTML!='') {
sObj.style.cursor= 'help';
if(cld[d].solarTerms == '' cld[d].solarFestival == '' cld[d].lunarFestival == '')
festival = '';
else
festival = '<TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 BGCOLOR="#CCFFCC"<TR<TD ALIGN="center"'+
'<FONT COLOR="#000000" STYLE="font-size:9pt;"'+cld[d].solarTerms + ' ' +'</FONT</TD'+
'</TR</TABLE';
s= '<table border="2" width="140" bordercolor="#0066CC" bgcolor="#FFFBE8" cellpadding="0" cellspacing="0"<TR<td' +
'<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0<TR<TD ALIGN="center"<FONT COLOR="#ff00ff" STYLE="font-size:9pt;"'+
cld[d].sYear+'年'+cld[d].sMonth+'月'+cld[d].sDay+'日 星期'+cld[d].week+'<br'+
'<font color="#FF8000"农历'+cld[d].cYear+'年'+(cld[d].isLeap?' 闰':' ')+cMonth(cld[d].lMonth)+'月'+cDay(cld[d].lDay)+'</font<br'+
'<font color="009900"'+cld[d].cYear+'年 '+cld[d].cMonth+'月 '+cld[d].cDay + '日</font'+
'</FONT</TD</TR</TABLE'+ festival +'</TD</TR</TABLE';
document.all["detail"].innerHTML = s;
if (snow == 0) {
dStyle.left = x+offsetx-(width/2);
dStyle.top = y+offsety;
dStyle.visibility = "visible";
snow = 1;
}
}
}
function mOut() {
if ( cnt = 1 ) { sw = 0; }
if ( sw == 0 ) { snow = 0; dStyle.visibility = "hidden";}
else cnt++;
}
function mEvn() {
x=event.x;
y=event.y;
if (document.body.scrollLeft)
{x=event.x+document.body.scrollLeft; y=event.y+document.body.scrollTop;}
if (snow){
dStyle.left = x+offsetx-(width/2);
dStyle.top = y+offsety;
}
}
function jieqi(objDate) {
var year=objDate.getFullYear();
var d; var i; var m
for (i=0;i<24;i+=1) {
d=sTerm(year,i);
m=i
if (objDate<=d) break;
} return m
}
function mDown(V) {
var sObj=eval('SD'+ V);
var D=sObj.innerHTML-1;
var ya=cld[D].sYear;//获得当前公历日期!
var ma=cld[D].sMonth;
var da=cld[D].sDay;
var Today=new Date(ya,ma,da,0,0,0)
m=jieqi(Today)
document.all.s3.value=m
}
function setCookie(name,value) {
var today = new Date();
var expires = new Date();
expires.setTime(today.getTime() + 1000*60*60*24*365);
document.cookie = name + "=" + escape(value) + "; expires=" + expires.toGMTString();
}
function getCookie(Name) {
var search = Name + "=";
if(document.cookie.length 0) {
offset = document.cookie.indexOf(search);
if(offset != -1) {
offset += search.length;
end = document.cookie.indexOf(";", offset);
if(end == -1) end = document.cookie.length;
return unescape(document.cookie.substring(offset, end));
}
else return('');
}
else return('');
}
function initialize() {
dStyle = detail.style;
CLD.years.selectedIndex=tY-1900;
CLD.months.selectedIndex=tM;
drawCld(tY,tM);
}
</SCRIPT
<STYLE
.todyaColor {BACKGROUND-COLOR: aqua}
</STYLE<META content="MSHTML 6.00.2900.2802" name=GENERATOR</HEAD
<BODY onload=initialize()
<DIV id=detail
style="Z-INDEX: 3; FILTER: shadow(color=#333333,direction=135); WIDTH: 140px; POSITION: absolute; HEIGHT: 120px"</DIV
<CENTER
<TABLE border=0
<TBODY
<TR
<FORM name=xz
<TD width=440 align=center vAlign=top bgcolor="#CCCCCC"
<label122
<textarea width=440 name="textarea"</textarea
</label
</FORM
<FORM name=CLD
<TD align=middle
<TABLE width="300" border="0" cellSpacing=1 cellPadding=0
<TR <TBODY <TR bgcolor="#319AFF"
<TD colSpan=7 align="center"<FONT style="FONT-SIZE: 9pt"
color=#9900CC size=3 公元
<SELECT onchange=changeCld() name=years <SCRIPT language=JavaScript for(i=1900;i<2101;i++) document.write('<option'+i)</SCRIPT </SELECT年
<SELECT onchange=changeCld() name=months <SCRIPT language=JavaScript for(i=1;i<13;i++) document.write('<option'+i) </SCRIPT </SELECT月
第 <input name="s3" type="text" size="2" 个节气
<SELECT name=hours <SCRIPT language=JavaScript for(i=1;i<13;i++) document.write('<option'+i) </SCRIPT </SELECT时 </FONT <TR align=middle bgColor=#FF9900
<TD width=54<FONT color=red日</FONT<FONT color="#e7f7fe"SUN</FONT</TD
<TD width=54一<FONT color="#e7f7fe"MON</FONT</TD
<TD width=54二<FONT color="#e7f7fe"TUE</FONT</TD
<TD width=54三<FONT color="#e7f7fe"WED</FONT</TD
<TD width=54四<FONT color="#e7f7fe"THR</FONT</TD
<TD width=54五<FONT color="#e7f7fe"FRI</FONT</TD
<TD width=54<FONT color=green六</FONT<FONT color="#e7f7fe"SAT</FONT</TD</TR
<SCRIPT language=JavaScript<!--
var gNum
for(i=0;i<6;i++) {
document.write('<tr align=center')
for(j=0;j<7;j++) {
gNum = i*7+j
document.write('<td id="GD' + gNum +'" onMouseOver="mOvr(' + gNum +')" onMouseOut="mOut()" onMouseDown="mDown(' + gNum +')"')
document.write('<font id="SD' + gNum +'" size=5 face="Arial Black"')
if(j == 0) document.write(' color=red')
if(j == 6)
if(i%2==1) document.write(' color=red')
else document.write(' color=green')
document.write(' TITLE="" </font<br<font id="LD' + gNum + '" size=2 style="font-size:9pt;" </font</td')
}
document.write('</tr')
}
//--</SCRIPT
</TBODY</TABLE</TD
<TD width=60 align=middle vAlign=top bgcolor="#CCCCCC"<BR<BR <P <TR <TD align=right bgColor=#00aa55 colSpan=8<FONT color=#fffff face=宋体 id=GZ</FONT</TD</TR</TBODY</TABLE</TD</FORM</CENTER</TR</TBODY</TABLE</CENTER</BODY</HTML
C++万年历 十二生肖的代码带着解释,跪求大神
写了下,测试成功,代码很简单,有注释。
#include <iostream
using namespace std;
int main()
{
// 12 猪 在这能被12取余为0说明差值是12的倍数
// 0"猪", 1"鼠", 2"牛", 3"虎", 4"兔", 5"龙", 6"蛇", 7"马", 8"羊", 9"猴", 10"鸡", 11"狗"
char * zodiacArray[12] = { "猪", "鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗" };
int baseYear = 2007; //07年是鼠年,以此为基准进行判断
int testYear = 2014;
int count = 0;
int result = 0;
while (true)
{
printf("Please input the year whose zodiac you want to know:\n");
cintestYear;
//和基准年间的差值
count = abs(baseYear - testYear);
//判断是基准年之前还是之后
if ((baseYear - testYear) 0)
{
//基准年之前,差值取余再取补数即可得到生肖的位置,
result = 12 - count % 12;
}
else
{
//差值取余即可得到生肖的位置,
result = count % 12;
}
printf("要测试年份的生肖是: %s\n", zodiacArray[result]);
}
return 0;
}
想用单片机设计一个万年历,如何实现阳历到农历的转换?最好是给出思路和相关程序。
<%
' 用途:
' 当前日期计算该日期的农历天干地支及当年属相
' ##-------------------------------------------##
Dim objChinaDay
Dim sDay, sWeekDay, sChinaDay, sChinaYear,sChinaAni
Set objChinaDay = New ChinaDay
Call objChinaDay.Action("",sDay,sWeekDay,sChinaYear,sChinaDay,sChinaAni)
Response.Write sDay" " '当前日期
Response.Write sWeekDay" " '星期
Response.Write sChinaYear" " '农历年份
Response.Write sChinaDay" " '农历日期
Response.Write sChinaAni" " '生肖
' Copyright: 本代码非原创,原作者未知。
'*********************************************************************************
Class ChinaDay
Dim arrWeekName(7), MonthAdd(11), NongliData(99)
Dim arrTianGan(9), arrDiZhi(11), arrShuXiang(11), arrDayName(30), arrMonName(12)
Dim curTime, curYear, curMonth, curDay, curWeekday
Dim i, m, n, k, isEnd, bit, TheDate
'初始化数据
Sub Class_Initialize()
'-------------------------------------------------------------------------
'定义显示字串
'星期名
arrWeekName(0) = "*"
arrWeekName(1) = "星期日"
arrWeekName(2) = "星期一"
arrWeekName(3) = "星期二"
arrWeekName(4) = "星期三"
arrWeekName(5) = "星期四"
arrWeekName(6) = "星期五"
arrWeekName(7) = "星期六"
'天干名称
arrTianGan(0) = "甲"
arrTianGan(1) = "乙"
arrTianGan(2) = "丙"
arrTianGan(3) = "丁"
arrTianGan(4) = "戊"
arrTianGan(5) = "己"
arrTianGan(6) = "庚"
arrTianGan(7) = "辛"
arrTianGan(8) = "壬"
arrTianGan(9) = "癸"
'地支名称
arrDiZhi(0) = "子"
arrDiZhi(1) = "丑"
arrDiZhi(2) = "寅"
arrDiZhi(3) = "卯"
arrDiZhi(4) = "辰"
arrDiZhi(5) = "巳"
arrDiZhi(6) = "午"
arrDiZhi(7) = "未"
arrDiZhi(8) = "申"
arrDiZhi(9) = "酉"
arrDiZhi(10) = "戌"
arrDiZhi(11) = "亥"
'属相名称
arrShuXiang(0) = "鼠"
arrShuXiang(1) = "牛"
arrShuXiang(2) = "虎"
arrShuXiang(3) = "兔"
arrShuXiang(4) = "龙"
arrShuXiang(5) = "蛇"
arrShuXiang(6) = "马"
arrShuXiang(7) = "羊"
arrShuXiang(8) = "猴"
arrShuXiang(9) = "鸡"
arrShuXiang(10) = "狗"
arrShuXiang(11) = "猪"
'农历日期名
arrDayName(0) = "*"
arrDayName(1) = "初一"
arrDayName(2) = "初二"
arrDayName(3) = "初三"
arrDayName(4) = "初四"
arrDayName(5) = "初五"
arrDayName(6) = "初六"
arrDayName(7) = "初七"
arrDayName(8) = "初八"
arrDayName(9) = "初九"
arrDayName(10) = "初十"
arrDayName(11) = "十一"
arrDayName(12) = "十二"
arrDayName(13) = "十三"
arrDayName(14) = "十四"
arrDayName(15) = "十五"
arrDayName(16) = "十六"
arrDayName(17) = "十七"
arrDayName(18) = "十八"
arrDayName(19) = "十九"
arrDayName(20) = "二十"
arrDayName(21) = "廿一"
arrDayName(22) = "廿二"
arrDayName(23) = "廿三"
arrDayName(24) = "廿四"
arrDayName(25) = "廿五"
arrDayName(26) = "廿六"
arrDayName(27) = "廿七"
arrDayName(28) = "廿八"
arrDayName(29) = "廿九"
arrDayName(30) = "卅十"
'农历月份名
arrMonName(0) = "*"
arrMonName(1) = "正"
arrMonName(2) = "二"
arrMonName(3) = "三"
arrMonName(4) = "四"
arrMonName(5) = "五"
arrMonName(6) = "六"
arrMonName(7) = "七"
arrMonName(8) = "八"
arrMonName(9) = "九"
arrMonName(10) = "十"
arrMonName(11) = "冬"
arrMonName(12) = "腊"
'-------------------------------------------------------------------------
'公差数据定义
'公历每月前面的天数
MonthAdd(0) = 0
MonthAdd(1) = 31
MonthAdd(2) = 59
MonthAdd(3) = 90
MonthAdd(4) = 120
MonthAdd(5) = 151
MonthAdd(6) = 181
MonthAdd(7) = 212
MonthAdd(8) = 243
MonthAdd(9) = 273
MonthAdd(10) = 304
MonthAdd(11) = 334
'农历数据
NongliData(0) = 2635
NongliData(1) = 333387
NongliData(2) = 1701
NongliData(3) = 1748
NongliData(4) = 267701
NongliData(5) = 694
NongliData(6) = 2391
NongliData(7) = 133423
NongliData(8) = 1175
NongliData(9) = 396438
NongliData(10) = 3402
NongliData(11) = 3749
NongliData(12) = 331177
NongliData(13) = 1453
NongliData(14) = 694
NongliData(15) = 201326
NongliData(16) = 2350
NongliData(17) = 465197
NongliData(18) = 3221
NongliData(19) = 3402
NongliData(20) = 400202
NongliData(21) = 2901
NongliData(22) = 1386
NongliData(23) = 267611
NongliData(24) = 605
NongliData(25) = 2349
NongliData(26) = 137515
NongliData(27) = 2709
NongliData(28) = 464533
NongliData(29) = 1738
NongliData(30) = 2901
NongliData(31) = 330421
NongliData(32) = 1242
NongliData(33) = 2651
NongliData(34) = 199255
NongliData(35) = 1323
NongliData(36) = 529706
NongliData(37) = 3733
NongliData(38) = 1706
NongliData(39) = 398762
NongliData(40) = 2741
NongliData(41) = 1206
NongliData(42) = 267438
NongliData(43) = 2647
NongliData(44) = 1318
NongliData(45) = 204070
NongliData(46) = 3477
NongliData(47) = 461653
NongliData(48) = 1386
NongliData(49) = 2413
NongliData(50) = 330077
NongliData(51) = 1197
NongliData(52) = 2637
NongliData(53) = 268877
NongliData(54) = 3365
NongliData(55) = 531109
NongliData(56) = 2900
NongliData(57) = 2922
NongliData(58) = 398042
NongliData(59) = 2395
NongliData(60) = 1179
NongliData(61) = 267415
NongliData(62) = 2635
NongliData(63) = 661067
NongliData(64) = 1701
NongliData(65) = 1748
NongliData(66) = 398772
NongliData(67) = 2742
NongliData(68) = 2391
NongliData(69) = 330031
NongliData(70) = 1175
NongliData(71) = 1611
NongliData(72) = 200010
NongliData(73) = 3749
NongliData(74) = 527717
NongliData(75) = 1452
NongliData(76) = 2742
NongliData(77) = 332397
NongliData(78) = 2350
NongliData(79) = 3222
NongliData(80) = 268949
NongliData(81) = 3402
NongliData(82) = 3493
NongliData(83) = 133973
NongliData(84) = 1386
NongliData(85) = 464219
NongliData(86) = 605
NongliData(87) = 2349
NongliData(88) = 334123
NongliData(89) = 2709
NongliData(90) = 2890
NongliData(91) = 267946
NongliData(92) = 2773
NongliData(93) = 592565
NongliData(94) = 1210
NongliData(95) = 2651
NongliData(96) = 395863
NongliData(97) = 1323
NongliData(98) = 2707
NongliData(99) = 265877
End Sub
'#################################################################
'主要方法 Action
' inDay 输入日期,如果不输入则默认为当前日期
' sDay 中文格式日期
' sWeekDay 周几
' sChinaYear 农历年
' sChinaDay 农历日
' sChinaAni 属相
'#################################################################
Public Function Action(inDay,sDay,sWeekDay,sChinaYear,sChinaDay,sChinaAni)
'转换要转换的日期
If inDay="" Or Not IsDate(inDay) Then
'获取当前系统时间
curTime = Now()
Else
curTime = CDate(inDay)
End If
If Datediff("d",curTime,Cdate("1921-2-8"))0 Then
Exit Function
End If
'生成当前公历年、月、日 == sDay
curYear = Year(curTime)
curMonth = Month(curTime)
curDay = Day(curTime)
sDay = curYear"年"
If (curMonth < 10) Then
sDay = sDay"0"curMonth"月"
Else
sDay = sDaycurMonth"月"
End If
If (curDay < 10) Then
sDay = sDay"0"curDay"日"
Else
sDay = sDaycurDay"日"
End If
'生成当前公历星期 == sWeekDay
curWeekday = Weekday(curTime)
sWeekDay = arrWeekName(curWeekday)
'计算到初始时间1921年2月8日的天数:1921-2-8(正月初一)
TheDate = (curYear - 1921) * 365 + Int((curYear - 1921) / 4) + curDay + MonthAdd(curMonth - 1) - 38
If ((curYear Mod 4) = 0 AND curMonth 2) Then
TheDate = TheDate + 1
End If
'计算农历天干、地支、月、日
isEnd = 0
m = 0
'------------------------------------
Do
If (NongliData(m) < 4095) Then
k = 11
Else
k = 12
End if
n = k
'------------------------------------
Do
If (n < 0) Then
Exit Do
End If
'获取NongliData(m)的第n个二进制位的值
bit = NongliData(m)
For i = 1 To n Step 1
bit = Int(bit / 2)
Next
bit = bit Mod 2
If (TheDate <= 29 + bit) Then
isEnd = 1
Exit Do
End If
TheDate = TheDate - 29 - bit
n = n - 1
Loop
'------------------------------------
If (isEnd = 1) Then
Exit Do
End If
m = m + 1
Loop
'------------------------------------
curYear = 1921 + m
curMonth = k - n + 1
curDay = TheDate
If (k = 12) Then
If (curMonth = (Int(NongliData(m) / 65536) + 1)) Then
curMonth = 1 - curMonth
ElseIf (curMonth (Int(NongliData(m) / 65536) + 1)) Then
curMonth = curMonth - 1
End if
End If
'生成农历天干、地支== sChinaYear
sChinaYear = "农历"arrTianGan(((curYear - 4) Mod 60) Mod 10)arrDiZhi(((curYear - 4) Mod 60) Mod 12)"年"
'生成属相 == sChinaAni
sChinaAni = arrShuXiang(((curYear - 4) Mod 60) Mod 12)
'生成农历月、日 == NongliDayStr
If (curMonth < 1) Then
sChinaDay = "闰"arrMonName(-1 * curMonth)
Else
sChinaDay = arrMonName(curMonth)
End If
sChinaDay = sChinaDay"月"
sChinaDay = sChinaDay arrDayName(curDay)
End Function
End Class
%
关于万年历接口测试用例和万年历软件测试的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
万年历接口测试用例的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于万年历软件测试、万年历接口测试用例的信息别忘了在本站进行查找喔。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~