人体生物钟程序设计(C语言)

前几年在本站发布过博文介绍人体生物钟程序的制作方法。后来发现上传后显示的博文有错漏,计算符号脱漏。这会误导读者。今修订整理重新发布,展示一下漂亮的界面设计。

人体生物钟也就是人体生物节律。人体生物节律是自然进化赋予生命的基本特征之一,人类和一切生物都要受到生物节律的控制与影响。人体生物节律是指体力节律、情绪节律和智力节律。每个人从他出生那天起一直到生命终结,都存在着体力23天、情绪28天、智力33天的周期性波动规律,称为人体生物节律。每一个周期中又存在着高潮期、低潮期和临界期。由于它具有准确的时间性,因此也称之为人体生物钟。在我们日常生活中,有人会觉得自己的体力、情绪或智力有时很好,有时很坏。人从他诞生之日起,直至生命终结,其自身的体力、情绪和智力都存在着由强至弱、由弱至强的周期性起伏变化。人们把这种现象称作生物节律,或生物节奏、生命节律等。之所以产生这种现象的原因是生物体内存在着生物钟,它自动地调节和控制着人体的行为和活动。

人体生物节律有什么作用,网上有许多介绍,对于想编程的朋友都是了解的,这里就不赘言什么了。本文就谈如何制作。就二个要点:一是输入当前日期和出生日期,此程序使用myspringc编译器自带的安卓式样日期输入控件。其他语言日期输入都很简单。二是根据这二个日期计算总天数,依数值绘出曲线。难点是曲线的绘制。本程序给出了曲线算法和绘图方法,以及绘制漂亮的界面。程序使用最基本的绘图函数DrawLine,DrawRect,DrawCircle,设置颜色SetColor(a,r,g,b)。程序有详细注释介绍绘制方法。

本程序是用简单的C语言编译调试的。主要展示该语言超强的绘图功能。如何绘制图形曲线,绘制漂亮的界面。本人喜欢用编程语言的绘图功能绘制图形图案和漂亮的界面,能发挥你的想象力和创造力,很有趣,希望大家也喜欢。

下面的代码是用简单的C语言写的,很简洁 ,适用于初学者。

//  myspringc  v2.7  可编译安卓手机本机 app 应用
//  此样例可复制黏贴到 myspringc  编译
//  亦可用vb6, VC , Java 等改写

338b19c096d340dcb9f3e051d5788028.png

 

e09f94477e6f4e44adf132dc9f8c217b.png 

e3027721500943da9639133dda4d2777.png 

//*******    人体生物钟    ***************
//== 人体生物节律曲线 ==  Biorhythm  
//制作人:张纯叔    micelu@126.com
//****  myspringc  v2.7   编译  *********
Canvas cs;      //画布
float pi=3.1415926535;
float src[4];  //ClearDraw (cls) clear screen
int s1,s2,s3;      
int s1n,s2n,s3n;
int i,k,bx;    //bx 画标尺
int alln0,alln1;     //计算日期
int alln;   //set today-birthdate all days
int ns;     //draw
float a;
float dx,dy, x0,y0;
float x1,y1;
string s,ss,ss1,ss2,ss3,ss4,ss5,ss6;  //输出字串
string gs1,gs2,gs3,gs4,gs5,gs6;
int by,bm,bd;  //birthdate yy,mm,dd
int ty,tm,td;      //today
double bms,tms;
int d[3];          //input date
int count;
int context;    //canvasProc触屏按钮
int obj;
int id;
int event;

main(){
setDisplay(1);
cs.Active();
    cs.SetBackground(255,255,255);
    setTitle("人体生物钟 ( Biorhythm )");
    cs.SetProc (context, mycanvasProc);
    drawtable ();
 while (){}
 }//main()

mycanvasProc (int context,int obj,int id,int event,float x,float y){
      cs.SetFillMode(0);//0不填色,1填色
  //** 触控按钮 select button : input date  ****
    if (x>400&&x<560&&y>810&&y<880) {
           input_date ();   }      //输入日期
    if (x>300&&x<420&&y>980&&y<1050){
           input_date ();   }      //输入日期       
    if (x>440&&x<560&&y>980&&y<1050) {
           input_date ();   }      //重新开始
    if (x>580&&x<700&&y>980&&y<1050){
          clearOutput();    
          cs.ClearDraw (0,src);
          setDisplay (0);
          exit (0);    } //Exit 退出程序
}//mycanvasProc ()

drawbutton (){   //绘制按钮
        cs.SetColor (255,230,230,230);
      cs.DrawRect (4,940,715,1078);
        cs.SetColor (255,255,255,255);
      cs.DrawRect (11,960,707,963);
      cs.DrawRect (11,1065,707,1068);

    for (i=0;i<3;i++){   //draw 3-5 cmd_button
          cs.SetColor (255,150,150,150);
        cs.DrawRect (i*140+299,980,i*140+423,1052); 
          cs.SetColor (255,250,250,250);
        cs.DrawRect (i*140+297,978,i*140+420,1050); 
          cs.SetColor (255,200,240,250);
        cs.DrawRect (i*140+300,980,i*140+420,1050); 
                    }
  cs.SetTextSize (24);
  cs.SetTextStyle(1);
  cs.SetColor(255,50,150,220);
  cs.DrawText ("输入日期",313,1020);
  cs.DrawText ("重新开始",453,1020);
  cs.DrawText ("退出程序",595,1020);
       s="BIORHYTHM";     //立体字
  cs.SetTextSize (40);
  cs.SetTextStyle(1);
  cs.SetColor (255,100,100,100);
       cs.DrawText (s,20,1030);
  cs.SetColor (255,255,255,255);
       cs.DrawText (s,23,1033);

//draw Input button ****
      cs.SetColor (255,250,0,150);
  cs.DrawRect (399,819,561,881);
     cs.SetColor (255,120,150,250);
  cs.DrawRect (400,820,560,880);
  cs.SetTextSize (24);
  cs.SetTextStyle(0);
    cs.SetColor(255,250,250,0);
 cs.DrawText ("输入日期",435,855);
 cs.SetColor (255,250,0,150);
    s="请输入当前日期和出生日期 >>  ";
    cs.DrawText (s,80,860);
    cs.Update ();
}//drawbutton ()

input_date (){     //输入日期
//here get birth date & current date then show out
inputdd:
   getDate(d);
   pickDate("输入>    当前日期",d);
  ty=d[0];
  tm=d[1];
  td=d[2];
   //print "currentday = ",ty ,"-",tm,"-",td;
   pickDate("输入>    出生日期",d);
  by=d[0];
  bm=d[1];
  bd=d[2]; 
    //print "birthdate = ",by ,"-",bm,"-",bd;
clearOutput ();              //clear output text
cs.ClearDraw (0,src);  //clear screen

// calculate (alln)= all days from birthdate to today
gs1=intToString (by);
gs2=intToString (bm);
gs3=intToString (bd);
gs4=intToString (ty);
gs5=intToString (tm);
gs6=intToString (td);
  if (by>ty){
      ss="输入错误 !  重新输入当前日期,出生日期。";
      msgBox ("人体生物节律 " ,ss);
         goto inputdd;    }
  if (bm<10)gs2="0"+gs2;
  if (bd<10)gs3="0"+gs3;
  if (tm<10)gs5="0"+gs5;
  if (td<10)gs6="0"+gs6;
  print " Input  birthdate = ",gs1," - ",gs2," - ",gs3;
  print " Input  this Date = ",gs4," - ",gs5," - ",gs6;

//getDate and calculate past days alln ****
string yds;    
string ydds;
double tms;
yds="000031059090120151181212243273304334";
//计算生日 alln0
  ydds=subString(yds,(bm-1)*3,3);
  bms=stringToDouble(ydds);
  alln0=(by-1900)*365+((by-1900-1)/4)
              +(int)(bms)+bd;
  if ((by-by/4*4)==0&&bm>2)alln0=alln0+1;  //加闰
      // print "birth = ",alln0;  //test
//计算当前日 alln1
  ydds=subString(yds,(tm-1)*3,3);
  tms=stringToDouble(ydds);
  alln1=(ty-1900)*365+((ty-1900-1)/4)
             +(int)(tms)+td+1;    //*****
  if ((ty-ty/4*4)==0&&tm>2)alln1=alln1+1;  //加闰
      // print "current = ",alln1;   //test
      alln=alln1-alln0;    
      // print "all days = ",alln;   //test
  if (alln<1){    //容错
      ss="输入错误 !  重新输入当前日期,出生日期。";
      msgBox ("人体生物钟 " ,ss);
         goto inputdd;    }
    drawtable ();   //show...绘出曲线
 }//input_date ()

绘制曲线:初始图表样例

791cd9b8bb304d018b4e16f28484a094.png

 

drawtable(){//draw table and show
   cs.ClearDraw(0,src);    //清屏重绘
//get birthdate yymmdd and current yymm ***
//calculate s1,s2,s3 and draw curve **********
//drawout and show biorhythm         **********
  cs.SetFillMode(1);//0不填色,1填色
    cs.SetColor(255,240,240,240);
    cs.DrawRect(10,10,710,600);
// draw table ===============
  cs.SetStrokeWidth(1);//画笔线宽
  cs.SetFillMode(1);//0不填色,1填色
  cs.SetTextSize(60);
  cs.SetTextStyle(1);     //粗体
 s="人体生物节律曲线";
    cs.SetColor(255,120,60,0);
       cs.DrawText(s,53,104);
    cs.SetColor(255,0,250,0);
       cs.DrawText(s,50,100);
    cs.SetFillMode(0);//0不填色,1填色
    cs.SetColor(255,250,150,0);
       cs.DrawText(s,50,100);

  cs.SetTextStyle(0);     
  cs.SetStrokeWidth (1);
  cs.SetTextSize (28);
  cs.SetColor(250,250,0,0);
ss="高潮区";
cs.DrawText (ss,560,210);
ss="临界区 ";
cs.DrawText (ss,560,270);
ss="低潮区 ";
cs.DrawText (ss,560,410);
  cs.SetFillMode(1);//0不填色,1填色
cs.SetColor(250,250,0,0);
ss="体力  >";
cs.DrawText (ss,200,510);
  cs.SetColor(180,0,90,0);
ss="情绪  >";
cs.DrawText (ss,200,540);
  cs.SetColor(180,0,0,180);
ss="智力  >";
cs.DrawText (ss,200,570);

//draw table========
 cs.SetFillMode (1);
cs.SetStrokeWidth(2);
 cs.SetColor(100,250,250,0); //high low 区块
cs.DrawRect(50,150,670,450);
cs.SetColor (100,255,120,255);
cs.DrawRect (50,150,670,235); 
cs.SetColor(100,130,255,255);
cs.DrawRect(50,365,670,450);
cs.SetColor (255,0,120,128);        //X Line标尺
 cs.DrawRect(20,296,710,304);  
cs.SetColor(180,250,0,0);
cs.DrawRect (50,500,180,506);  //s1
cs.SetColor(180,0,200,0);
cs.DrawRect (50,530,180,536);  //s2
cs.SetColor(180,0,0,192);
cs.DrawRect (50,560,180,566);  //s3

cs.SetColor (255,0,0,0);
cs.SetTextSize (20);
cs.DrawText("0",44,340);
cs.DrawText("5",143,340);
cs.DrawText("10",238,340);
cs.DrawText("15",338,340);
cs.DrawText("20",438,340);
cs.DrawText("25",538,340);
cs.DrawText("30",638,340);

cs.SetFillMode (0);
cs.SetColor (255,250,250,0);
cs.DrawRect(23,300,715,300);//X Line  标尺
 cs.SetColor (255,0,0,128);
 for (i=0;i<34;i++){   //画标尺点位
    bx=50+i*20;
    cs.DrawLine (bx,280,bx,320);      }
    cs.SetColor (255,255,0,0);
  for (i=0;i<7;i++){    //画标尺 5 天标线
     bx=50+i*100;
     cs.DrawCircle (bx,300,2);
     cs.DrawLine (bx,150,bx,320);
     cs.DrawLine (bx,350,bx,450);      }

//绘制人体生物节律曲线
// Physical Sensitive  Intellectual
//draw curve : x1 +50 标尺x轴 0 位,  s1*20 步长
//x0 曲线幅宽,  + -130 y轴峰谷弧高,  y+300 x轴y定位
//x0 : >  230 = 23d, 280 = 28d, 330 = 33d
//Draw out graph here ===========
//get birthdate & calculate thisday-birthdate
   cs.SetStrokeWidth(2);
       ns=td-alln;     //这算法很奇特,研究一下
//s1=23d,  draw graph  体力
   s1=ns-ns/23*23;    //mod (ns,23)
  cs.SetColor (255,255,0,0);
  for (i=-140;i<280;i++){
         a=pi/360*i*6;    //360 曲线点密度
         x0=230;   
         x1=(float)((x0/pi*a+50)+s1*20);
         y1=(float)(-130*sin(a)+300);
         cs.DrawCircle(x1,y1,3);   }
print " s1= ",s1;

//s2=28d,  draw graph  情绪
   s2=ns-ns/28*28;      //mod(ns,28)
   cs.SetColor (255,0,220,0);
  for (i=-140;i<280;i++){
         a=pi/390*i*6;   //390 曲线点密度
         x0=280;
         x1=(float)((x0/pi*a+50)+s2*20);
         y1=(float)(-130*sin(a)+300);
         cs.DrawCircle(x1,y1,3);   }
print " s2= ",s2;

//s3=33d,  draw graph  智力 
  s3=ns-ns/33*33;         //mod (ns,33)
  cs.SetColor (205,0,0,192);
  for (i=-140;i<280;i++){
         a=pi/420*i*6;  //420 曲线点密度
         x0=330;
         x1=(float)((x0/pi*a+50)+s3*20);
         y1=(float)(-130*sin(a)+300);
         cs.DrawCircle(x1,y1,3);        }  
Print " s3= ",s3;

    cs.SetStrokeWidth(0);   //绘出当日标尺
    cs.SetColor (255,60,60,60);
    x1=(float)(td*20+47);  //draw current day当日标
    cs.DrawRect (x1,146,x1+5,454);

     cs.SetFillMode (1);    //曲线两边遮罩
     cs.SetStrokeWidth(2);
     cs.SetColor (255,255,255,255);
     cs.DrawRect (0,150,11,450);
     cs.DrawRect (709,150,720,450);
     cs.SetColor (255,164,164,164);
     cs.DrawRect (710,15,717,606);
     cs.DrawRect (15,600,716,606);
     cs.SetFillMode (0);
     cs.SetColor(255,50,0,128);
     cs.DrawRect(10,10,710,600);
//== draw data ======
cs.SetTextSize (32);
     cs.SetFillMode (1);
cs.SetStrokeWidth(2);
cs.SetColor (255,0,0,200);
if (len(gs2)==1)gs2="0"+gs2;
if (len(gs3)==1)gs3="0"+gs3;
if (len(gs5)==1)gs5="0"+gs5;
if (len(gs6)==1)gs6="0"+gs6;
ss1="出生日期 :  "+gs1+" 年 "+gs2+" 月 "+gs3+" 日 ";
cs.DrawText(ss1,30,680);
ss2="当前日期 :  "+gs4+" 年 "+gs5+" 月 "+gs6+" 日 ";
cs.DrawText (ss2,30,730);
  s=intToString (alln);
//print " all days = ",alln;  //test
ss3="你已在这美好的世界上生活了"+s+"天。";
  if (alln<1)ss3="Welcome to using our program .  ";
  cs.DrawText(ss3,30,780);
  ss="制作人: 张纯叔 ( micelu@126.com )  ";
     cs.SetColor (255,150,180,250);
     cs.DrawRect (5,1078,715,1080);
   cs.DrawText (ss,20,1110);


//draw status 状态 ***********
    cs.SetFillMode(1);//0不填色,1填色
//**** s1n  s 23
         s1n=alln-alln/23*23 ;
          cs.SetColor (255,250,220,0) ; //临界
          cs.DrawRect (300,490,400,510);   
    if (s1n>2&&s1n<10){    //高   3 - 9
          cs.SetColor(255,250,120,180); 
          cs.DrawRect (300,490,400,510);       }
   if (s1n>13&&s1n<22){     //低 14~21
          cs.SetColor (255,130,250,150) ;
          cs.DrawRect (300,490,400,510);       }
 //**** s2n  s 28
         s2n=alln-alln/28*28 ;
          cs.SetColor (255,250,220,0) ; //临界
          cs.DrawRect (300,520,400,540);  
    if (s2n>2&&s2n<12){    //高   3 - 11
          cs.SetColor(255,250,120,180); 
          cs.DrawRect (300,520,400,540);       }
   if (s2n>16&&s2n<26){     //低 17 - 25
          cs.SetColor (255,130,250,150) ;
          cs.DrawRect (300,520,400,540);       }
 //**** s3n  s 33
          s3n=alln-alln/33*33 ;
          cs.SetColor (255,250,220,0) ; //临界
          cs.DrawRect (300,550,400,570);  
    if (s3n>2&&s3n<14){    //高   3 - 13
          cs.SetColor(255,250,120,180); 
          cs.DrawRect (300,550,400,570);       }
   if (s3n>19&&s3n<31){     //低 20 - 30
          cs.SetColor (255,130,250,150) ;
          cs.DrawRect (300,550,400,570);       }
  drawbutton ();     //绘制按钮
  cs.Update();        //show out  table 
 }//drawtable ()


//**** End ******

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/451500.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python绘制热力图

最近投SCI论文的时候&#xff0c;有些实验结果需要热力图展示&#xff0c;所以专门试了一下如何用python绘制热力图&#xff0c;发现简单好用&#xff0c;下面分享给大家具体方法。 一、安装python库 需要安装pandas、seaborn、matplotlib安装包依赖&#xff0c;均用pip一键安…

如何选择日本大带宽服务器?

随着互联网的高速发展&#xff0c;对于大带宽服务器的需求也日益增长。而在日本&#xff0c;由于其先进的网络基础设施和数据中心技术&#xff0c;大带宽服务器成为了许多企业和开发者的首选。那么&#xff0c;如何选择合适的日本大带宽服务器呢? 首先&#xff0c;了解自己的需…

redis存储对象的过期设置在实际项目中的运用案例展示

redis存储对象的过期设置在实际项目中的运用案例展示&#xff01;经过前面的学习&#xff0c;我们已经基本上初步掌握了redis数据库存储对象的过期时间是如何设置的了。下面给大家展示一个具体的实际开发项目中用到业务场景。 在项目化生寺小程序游戏开发中&#xff0c;有道具&…

01-Java基础语法

Java基础语法 1. 注释使用的技巧&#xff1a;注意点 2. 关键字2.1 概念2.2 第一个关键字class 3. 字面量区分技巧&#xff1a;扩展&#xff1a; 制表符&#xff1a; 4. 变量4.1 什么是变量&#xff1f;4.2 变量的定义格式4.2.1 格式详解4.2.2 常用的数据类型4.2.3 变量的注意事…

FX110网:解码外汇市场走势“蜡烛图交易”模式

在技​​术分析领域&#xff0c;交易者依靠各种工具来解读市场走势并做出明智的决策。本期来讲一讲蜡烛图模式。蜡烛图图案 蜡烛图形态是特定时间范围内价格变动的直观表示。每个烛台由四个主要部分组成&#xff1a;开盘价、收盘价、最高价和最低价。交易者分析这些蜡烛形成的模…

【网络安全实验】snort实现高级IDS

注&#xff1a;本实验分别使用kali和CentOS6.8进行测试&#xff0c;可惜的是使用kali进行实验过程中遇到了困难&#xff0c;未能完成完整实验&#xff0c;而使用CentOS6.8成功完成了完整实验。 实验中用到的软件&#xff1a; https://download.csdn.net/download/weixin_5255…

迅为STM32MP157开发板底板板载4G接口(选配)、千兆以太网、WIFI蓝牙模块

底板扩展接口丰富 底板板载4G接口(选配)、千兆以太网、WIFI蓝牙模块HDMI、CAN、RS485、LVDS接口、温湿度传感器(选配)光环境传感器、六轴传感器、2路USB OTG、3路串口CAMERA接口、ADC电位器、SPDIF、SDIO接口等。 支持多种显示屏 迅为在MP157开发板支持了多种屏幕&#xff0…

基于OpenCV灰度图像转GCode的双向扫描实现

基于OpenCV灰度图像转GCode的双向扫描实现 引言激光雕刻简介OpenCV简介实现步骤 1.导入必要的库2. 读取灰度图像3. 图像预处理4. 生成GCode 1. 简化版的双向扫描2. 优化版的双向扫描 5. 保存生成的GCode6. 灰度图像双向扫描代码示例 总结 系列文章 ⭐深入理解G0和G1指令&…

1893_文本化以及协议的思考

全部学习汇总&#xff1a; g_unix: UNIX系统学习笔记 (gitee.com) 004_文本化以及协议 关于这一点描述的确是很有感触&#xff0c;python等脚本语言中的列表、字典等设计的确是在做数据处理的时候很好的帮手。如果类似的处理需要在C的环境中处理&#xff0c;显然是要麻烦得多。…

【Vue.js设计与实现】第二篇:响应系统-阅读笔记(持续更新)

从高层设计的角度去探讨框架需要关注的问题。 系列目录&#xff1a; 标题博客第一篇&#xff1a;框架设计概览【Vue.js设计与实现】第一篇&#xff1a;框架设计概览-阅读笔记第二篇&#xff1a;响应系统【Vue.js设计与实现】第二篇&#xff1a;响应系统-阅读笔记第三篇&#x…

uniapp基于Android的环境保护环保商城系统生活垃圾分类 小程序_rsj68

本环境保护生活App是为了提高用户查阅信息的效率和管理人员管理信息的工作效率&#xff0c;可以快速存储大量数据&#xff0c;还有信息检索功能&#xff0c;这大大的满足了用户和管理员这两者的需求。操作简单易懂&#xff0c;合理分析各个模块的功能&#xff0c;尽可能优化界面…

智安网络2023年度回顾:我与您共存、信任与安全的一年

在2023年这一全球格局加速演变、经济复苏的关键时期&#xff0c;网络安全威胁呈现出前所未有的复杂性。作为中国网络安全行业的新兴企业&#xff0c;智安网络凭借其卓越的安全策略、技术创新和客户服务&#xff0c;书写了企业发展的辉煌篇章。 智安网络在应对网络安全挑战方面…