日历,星等三角形,QPAMC
实验
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
1 任务概述(任务说明)
, 1 输出形状*表示的等腰三角形,需要信息的地方显示一个符号,接收输
入一个整数指明三角形高度
, 2任意输入一个年月,
格式
pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载
化输出本月的月历,行标题要求是星期
, 3 对上一个程序增加功能,程序运行之后,出现菜单,提示可以单词进
行功能选择,输入Q quit,则退出程序;输入P print则用来打印输出某年
某月的月历;A add用来增加本月的一个记事信息;输入M manul,则显示
本程序的使用帮助信息;输入C check,则显示当前月份的记事信息;输入
其它则提示命令错误,并且给出帮助信息,字符串可以直接使用c++的string
2设计思路(包括技术基础等)
1.运用for双层循环画出星等腰三角形;
2.运用C++中mktime()函数得出该月首日的星期数,由此推断出该月其他日期的星期数;
3.运用多个函数将这道题拆分成数个小问题……
3程序结构描述
4源码,文档化
1
// 星等腰三角形.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int HG;
cout<<"请输入星等腰三角形的高度:";
cin>>HG;
int i,j;
for(i = 1;i <= HG;i++)
{
for(j = 0;j < HG + i - 1;j++)
{
if(j < HG - i)
cout<<" ";
else
cout<<"*";
}
cout<
int WeekDay(int year,int month,int day){
struct tm t = {0,0,0,day,month-1,year-1900};
mktime(&t);
return t.tm_wday;
}
int _tmain(int argc, _TCHAR* argv[]) {
int Year,Month,Day,FirstDay;
Day = 1;
printf("请输入年份:");
scanf("%d",&Year);
while(Year <= 0)
{
printf("年份不正确~请重新输入:");
scanf("%d",&Year);
}
printf("请输入月份:");
scanf("%d",&Month);
while(Month <= 0 || Month >= 13)
{
printf("月份不正确~请重新输入:");
scanf("%d",&Month);
}
FirstDay = WeekDay(Year,Month,1);
if((Year % 400 == 0) || (Year % 4 == 0 && Year % 100 != 0))
{
if(Month == 2)
Day = 28;
}
else if(Month == 2)
Day = 29;
else if(Month == 1 || Month == 3 || Month == 5 || Month == 7 || Month == 8 || Month == 10 ||
Month == 12)
Day = 31;
else
Day = 30;
printf("\t=============================================\n");
printf(" \tSUN\tMON\tTUE\tWED\tTHU\tFRI\tSAT \n");
printf("\t------------------------------------------\n");
for(int i = 1;i <= FirstDay;i++)
printf(" ");
for(int i = 1;i <= Day;i++)
{
printf("\t%d",i);
if(WeekDay(Year,Month,i) == 6)
{
printf("\n");
}
}
printf("\n\t-------------------------------------------\n");
getchar();
getchar();
return 0;
}
3
// QPAMC.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#include
#include
char menu_main1[] =
"=================================================================\n"
"| 菜单 |\n"
"+---------------------------------------------------------------+\n";
char menu_main2[] =
"| 1.打印输出某年某月的日历print。(输入数字or 字母p/P) |\n"
"| 2.增加本月的一个记事信息add。(输入数字or 字母a/A) |\n"
"| 3.显示当前月份的记事信息check。(输入数字or 字母c/C) |\n"
"| 4.帮助manul。(输入数字or 字母m/M) |\n"
"| 5.退出quit。(输入数字or 字母q/Q) |\n"
"+---------------------------------------------------------------+\n";
char manul_M[] =
"输入Q/q/5 (quit),则退出程序;\n"
"输入P/p/1 (print), 则用来打印输出某年某月的月历;\n"
"输入A/a/2 (add), 用来增加本月的一个记事信息;\n"
"输入C/c/3 (check),则显示当前月份的记事信息;\n"
"输入M/m/4 (manul),则显示本程序的使用帮助信息;\n";
int WeekDay(int year,int month,int day){
struct tm t={0,0,0,day,month-1,year-1900};
mktime(&t);
return t.tm_wday;
}
//打印月历的函数
void PrintCalendar(){
int Year,Month,Day,FirstDay;
Day = 1;
printf("请输入年份:");
scanf("%d",&Year);
while(Year <= 0)
{
printf("年份不正确~请重新输入:");
scanf("%d",&Year);
}
printf("请输入月份:");
scanf("%d",&Month);
while(Month <= 0 || Month >= 13)
{
printf("月份不正确~请重新输入:");
scanf("%d",&Month);
}
FirstDay = WeekDay(Year,Month,1);
if((Year % 400 == 0) || (Year % 4 == 0 && Year % 100 != 0))
{
if(Month == 2)
Day = 28;
}
else if(Month == 2)
Day = 29;
else if(Month == 1 || Month == 3 || Month == 5 || Month == 7 || Month == 8 || Month == 10 ||
Month == 12)
Day = 31;
else
Day = 30;
printf("\t===================================================\n");
printf(" \tSUN\tMON\tTUE\tWED\tTHU\tFRI\tSAT \n");
printf("\t---------------------------------------------------\n");
for(int i = 1;i <= FirstDay;i++)
printf(" ");
for(int i = 1;i <= Day;i++)
{
printf("\t%d",i);
if(WeekDay(Year,Month,i) == 6)
printf("\n");
}
printf("\n\t---------------------------------------------------\n");
system("pause");
}
//添加记事本
void Add_txt(){
FILE* fp = fopen("the_month_Memory.txt", "w");
char month_Memory[1000];
printf("请输入本月记事:");
scanf("%s",month_Memory);
fwrite(month_Memory,strlen(month_Memory),1,fp);
fclose(fp);
getchar();
getchar();
}
//读取记事本
void Check_txt(){
FILE* fp = NULL;
char month_Memory[1000];
fp = fopen("the_month_Memory.txt", "r");
while(fgets(month_Memory,strlen(month_Memory),fp)!=NULL)
printf("%s",month_Memory);
getchar();
getchar();
fclose(fp);
}
//打印帮助信息
void manul(){
printf(manul_M);
getchar();
getchar();
}
int _tmain(int argc, _TCHAR* argv[]) {
char selected = '0';
while (selected < '1' || selected > '5' || selected == 'a' || selected == 'q' || selected == 'p'
|| selected == 'm' || selected == 'c' || selected == 'A' || selected == 'Q' || selected == 'P'
|| selected == 'M' || selected == 'C')
{
system("cls"); //清屏
printf(menu_main1);
printf(menu_main2);
printf(">请选择要进行的操作:");
scanf("%c", &selected);
if (selected < '0' || selected > '5'&& selected != 'a' && selected != 'q' && selected != 'p'
&& selected != 'm' && selected != 'c' && selected != 'A' && selected != 'Q' &&
selected != 'P'
&& selected != 'M' && selected != 'C')
{
printf(">输入错误~请选择[ %d - %d ]之间的数字或字母[a/A,p/P,q/Q,m/M,c/C]~
按任意键重试...", 1, 5);
manul();
}
else
{
switch(selected)
{
case '1' :case 'p' :case 'P' :
PrintCalendar();
break;
case '2' :case 'a' :case 'A' :
Add_txt();
break;
case '3' :case 'c' :case 'C' :
Check_txt();
break;
case '4' :case 'm' :case 'M' :
manul();
break;
case '5' :case 'q' :case 'Q' :
exit(0);
break;
}
selected = 0;
}
}
return 0;
}
5 执行过程截屏
星等腰三角形:
日历:
QPAMC:
6 总结
第一题刚开始时逻辑出了点错误,导致打印一直不成功;
第二题起初思路不清晰,所以逻辑一直出错,但在逐渐修改中终于完成了; 第三题主要是过程有些繁杂,且有些学过的知识忘了,所以总是要去翻看以前的书,耗时过多。