时钟课程设计报告win-tc 版

信息工程学院

项目名称:

项目组长:

项目成员:

班级名称:

专业名称:

完成时间: 时钟图形输出 叶 11信管3(本) 信息管理和信息系统 6月9日

信息工程学院制

一、 案例描述(小四号字体,段前断后0.5行)

1.、总体描述

在我们设计的这个时钟里,运行后,出现是一个米奇型的时钟表盘,在米奇的右眼还拥有一个钟表,其所显示的是伦敦时间。同时时钟还能显示电子时间,当然也有年份

与日期。

2、模块描述

因为此次课程设计较为简单,所以该程序只有主函数main()、NormalBeep()和bell()(NormalBeep()和bell()均为声音函数),故其余函数均放在主函数中,以下,将根据主函数中的模块进行描述。

1)初始化模块:不同的显示器适配器有不同的图形分辨率。因此,在作图之前,必须根据显示器适配器的种类将显示器设置成为某种图形模式。为设置图形模式之前,计算机的默认模式是字符模式。在字符模式下,所有的图形函数是不起作用的。设置图形模式,需要调用初始化模块;只有通过初始化才将所我们所需要的图形在WIN-TC中运行出来。

2)时钟绘制模块:调用circle()画圆函数,并设计相应的数值,大表盘上靠周边的圆是利用循环结构以及三角函数知识表现,并利用if判断语句,将整点时间用较大的圆圈表现出来,一次区分时间。而大表盘内部大圆和米奇“双眼”“双耳”,都是调用circle()。

3)电子时钟表示:调用line()函数,勾勒出长方形,并设置白边和线的厚度,最后调用include<time.h>函数,显示表盘时间和电子表时钟时间。

二、界面设计

时钟课程设计报告wintc版

本软件界面友好,无需任何操作,只须运行即可。

三、 模块化设计方案

1、系统主要函数及功能(五号黑体)

1)line():line()函数,利用确定起始点、终结点画线,本次设计通过line()画出了长方形。

2)circle():调用circle函数,可在固定的像素点画半径为R的圆。

3)gotoxy():将光标移动到指定位置说明。gotoxy(x,y)将光标移动到指定行y和列x。设置光标到文本屏幕的指定位置,其中参数x,y为文本屏幕的坐标。

4)time.h函数:通过该时间函数,获取系统时间,来保证时钟的时间确定以及

电子时钟的显示。

2、主函数调用各功能函数流程图

时钟课程设计报告wintc版

四、 数据结构描述

#include<stdio.h>

#include<dos.h>

#include<conio.h>

#include<math.h>

#include<graphics.h>

#include<time.h>

#define PI 3.1415926

Int main()

{ int X=300,Y=250,R=100,RR=130; int X_HOUR,X_MINUTE,X_SECOND; int Y_HOUR,Y_MINUTE,Y_SECOND; int X_HO,X_MI,X_SE;

int Y_HO,Y_MI,Y_SE;

int X_DRAW=0,Y_DRAW=0,R_DRAW=120; int X_DRAW1=0,Y_DRAW1=0; int NUM=0,mun=0;

int i,j,k,a,b,c;}

五、 算法设计

1、初始化函数(流程图)

2、绘制(流程图)

3、显示函数(流程图)

时钟课程设计报告wintc版

时钟课程设计报告wintc版

六、 程序运行结果

时钟课程设计报告wintc版

七、 总结

1、工作时间(5号黑色)

表盘实现 -1小时

简单动画实现 -30分钟

数字化的时钟 -30分钟

整点报时 -1小时

2、分工情况

基本框架:拓展功能:

流程图:

3、心得体会

叶:

随着社会的进步和科技的发展,电子时钟逐渐走入人们的生活,成为了一个不可或缺的部分,在很多场合都会看到它的存在,而且它的适用范围很广,随着不同的使用场合时钟的设计也有很大的不同。

本次课题设计是基于 WIN-TC 编译器, 设计并实现了电子时钟相关的一些简单的功能。我所设计的电子时钟将实现界面显示功能、时钟的时针、分针、秒针的运动功能、数字化时钟功能以及一些简单的动画效果。

在实现这些电子时钟功能的时候,我们遇到了很多困难,但幸运的是大多都已经解决。同时我们也学会了很多关于C语言图形处理的函数和组合设计,更加了解了C语言图形系统函数和字符屏幕处理函数,还有一些函数库等方面的知识。

时钟课程设计报告wintc版

通过此次课程设计使我对C语言有了一个更加深刻的了解,掌握了利用C语言的相关函数开发电子时钟的基本原理,为进一步开发高质量的程序打下坚实的基础。

杨:

在本次实验中,我们小组共同协作完成了“时钟”这个程序的大体设计。在完成这项任务的过程中,我们主要运用了C语言中指针、时间函数、图形函数的相关知识进行了代码的编写,由于是第一次运用时间函数的知识,我们小组遇到了前所未有的困难,特别是时间设置和分秒针长度设置等的代码编写的细节问题。但这丝毫没有影响我们对这项设计的热情。我们三人常常一起在图书馆研究、讨论,查阅相关书籍,或者上网查找相关函数的功能,尽自己最大的努力解决难题。遇到商讨后仍无法解决的问题,我们就虚心请教老师,在老师的点拨后继续努力钻研。最终基本完成了本次程序设计的实践要求,并尽自己最大所能设计了几个附加功能,如整点报时、闹钟功能。

本次课题设计让我们对C语言有了进一步的了解,丰富了C语言这门学科的知识,也让我们更加感受到了C语言的魅力。

刘:

在本次实验中,我们小组共同协作完成了“时钟”这个程序的大体设计。在完成这项任务的过程中,我们小组以所学的C语言知识为基础,制作了一个可以正确显示时间的时钟。该项试验涉及到了画图,计算等操作,在小组成员的共同努力下,我们小组成员顺利的完成了这项任务,不但使实现了时钟的基本功能,而且还实现了多项附加功能,使得时钟更加实用、美观。

在本次试验中,我们小组遇到很多困难,特别是一些细节上的错误。但是我们小组三人努力寻找解决方法常常一起在图书馆研究、讨论,查阅相关书籍,尽自己最大的努力在解决难题上发挥了不可或缺的作用,我们成员之间彼此帮助,依彼之长,补彼之短,在工作中积极参与,服从分配,工作热情高涨,团队合作出色,圆满的完成了任务。

附页(源代码附加注释)

#include<stdio.h>

#include<dos.h>

#include<conio.h>

#include<math.h>

#include<graphics.h>

#include<time.h>

#define PI 3.1415926

void Bell()/*整点高声报时*/

{putchar(7);/*用ASCII中的7代表响铃,来报时*/}

void NormalBeep() /*普通的嘀嗒声音*/

{sound(500); delay(10000);sound(200);delay(10000);nosound();}

int main()

{

int X=300,Y=250,R=100,RR=130; int X_HOUR,X_MINUTE,X_SECOND; int Y_HOUR,Y_MINUTE,Y_SECOND; int X_HO,X_MI,X_SE;

int Y_HO,Y_MI,Y_SE;

int X_DRAW=0,Y_DRAW=0,R_DRAW=120; int X_DRAW1=0,Y_DRAW1=0;

int NUM=0,mun=0;

int i,j,k,a,b,c;

struct time*p,*q;

int gdriver=DETECT,gmode;

registerbgidriver(EGAVGA_driver); initgraph(&gdriver,&gmode,""); setlinestyle(0,1,3);

setcolor(WHITE);

circle(X,Y,RR);

setlinestyle(0,1,1);

setcolor(YELLOW);

circle(350,200,20);

for(mun=0;mun<4;mun++)

{

X_DRAW1=350+18*sin(mun*2*PI/4); Y_DRAW1=200-18*cos(mun*2*PI/4); setcolor(GREEN);

circle(X_DRAW1,Y_DRAW1,1); setfillstyle(1,11);

}

setcolor(YELLOW);

circle(250,200,20);

setcolor(WHITE);

circle(180,90,70);

circle(420,90,70);

for(NUM=0;NUM<60;NUM++)

{

X_DRAW=X+R_DRAW*sin(NUM*2*PI/60); Y_DRAW=Y-R_DRAW*cos(NUM*2*PI/60); if(NUM%5==0)

{

setcolor(11);

circle(X_DRAW,Y_DRAW,6); setfillstyle(1,11);

}

else

{

setcolor(11);

circle(X_DRAW,Y_DRAW,2); setfillstyle(1,11);

} }

setcolor(GREEN);

circle(300,250,110);

while(!kbhit())

{

time_t t;

t=time(NULL);

p=localtime(&t);

i=p->tm_sec;

j=p->tm_min;

k=p->tm_hour;

if(p->tm_min==0 && p->tm_sec==0)/*判断是否是整点*/ Bell();/*整点高声报时*/

else NormalBeep();/*每秒伴随普通的嘀嗒声音*/ gotoxy(31,19);

printf("%d-%d-%d",1900+p->tm_year,1+p->tm_mon,p->tm_mday); gotoxy(31,20);

printf("%d:%d:%d",p->tm_hour,p->tm_min,p->tm_sec); X_HOUR=X+(R/2)*sin((k+j/60.0)*2*PI/12);

X_MINUTE=X+R*sin(j*2*PI/60)*3/4;

X_SECOND=X+R*sin(i*2*PI/60);

Y_HOUR=Y-(R/2)*cos((k+j/60.0)*2*PI/12);

Y_MINUTE=Y-R*cos(j*2*PI/60)*3/4;

Y_SECOND=Y-R*cos(i*2*PI/60);

setcolor(YELLOW);

line(X,Y,X_HOUR,Y_HOUR);

setcolor(RED);

line(X,Y,X_MINUTE,Y_MINUTE);

setcolor(BLUE);

line(X,Y,X_SECOND,Y_SECOND);

delay(10000);

setcolor(BLACK);

line(X,Y,X_HOUR,Y_HOUR);

line(X,Y,X_MINUTE,Y_MINUTE);

line(X,Y,X_SECOND,Y_SECOND);

q=gmtime(&t);

a=q->tm_sec;

b=q->tm_min;

c=q->tm_hour;

X_HO=350+(20/2)*sin((c+b/60.0)*2*PI/12);

X_MI=350+20*sin(b*2*PI/60)*3/4;

X_SE=350+20*sin(a*2*PI/60);

Y_HO=200-(20/2)*cos((c+b/60.0)*2*PI/12); Y_MI=200-20*cos(b*2*PI/60)*3/4; Y_SE=200-20*cos(a*2*PI/60);

setcolor(LIGHTGREEN);

line(350,200,X_HO,Y_HO);

setcolor(LIGHTRED);

line(350,200,X_MI,Y_MI);

setcolor(LIGHTGRAY);

line(350,200,X_SE,Y_SE);

delay(10000);

setcolor(BLACK);

line(350,200,X_HO,Y_HO);

line(350,200,X_MI,Y_MI);

line(350,200,X_SE,Y_SE);

setcolor(WHITE);

line(230,280,315,280);

line(230,320,315,320);

line(230,280,230,320);

line(315,280,315,320);

}

getch();

closegraph();

return 0;

}

 

第二篇:activiti学习笔记:Activiti工作流教程 Activiti5 流程实例

activiti学习笔记:Activiti工作流教程 Activiti5 流程实例

觉得activiti设计得简单而强大,尝试翻译一下他的10分钟入门指南:

10分钟入门指南

通过一个(非常简单的)业务流程,介绍一些基本的Activiti工作流感念和API接口。

使用案例

这个用例叫干脆(straightfoward):有一个公司,暂且叫它BPMCorp。在BPMCorp内部,会计部门每个月都要写一份财务报告给公司的股东。 但在发送给所有股东之前必须经过上级部门的批准。

下面涉及的所有文件及代码片段均可以通过Activiti分发的examples范例包中找到,请查看包org.activiti.examples.bpmn.usertask的内容。

推荐Activiti工作流教程:基于Activiti5工作流实战企业协同OA办公系统(spring-data-jpa、uur前台组件)

http://www.ibeifeng.com/goods-343.html

流程图

如上所述的业务流程可以使用Activiti的可视化流程编辑器 Activiti Modeler查看及编辑。 使用BPMN2.0的标准符号则如下图所示:

这里没有什么特殊的东西,图中看到的是一个 none start event (左边的圆圈),其次是两个 user tasks: "撰写财务报告"批准财务报告",以 none end event (右边边框加粗型的圆圈) 结束。

XML表示

上述业务流程的XML表示形式如下所示 (FinancialReportProcess.bpmn20.xml). 流程中包含一些主要的元素 (通过点击链接可以查看更详细的BPMN 2.0 元素的说明):

·         none start event 让我们认识到要开始一个流程。

·         user tasks 声明一个基于用户操作的流程任务. 注意第一个任务是分派用户组 accountancy 的, 而第二个任务是分派到用户组management 的. 查看 分派用户任务章节 可以得到更多怎样分派任务到用户或组的信息。

·         当到达 none end event 节点后流程就结束。

<process id="financialReport" name="每月财务报告处理流程">
 
  <startEvent id="theStart" />
   
  <sequenceFlow id='flow1' sourceRef='theStart' targetRef='writeReportTask' />
   
  <userTask id="writeReportTask" name="撰写财务报告" >
    <documentation>
      撰写要发送给公司股东的每月财务报告。
    </documentation>
    <potentialOwner>
      <resourceAssignmentExpression>
        <formalExpression>accountancy</formalExpression>
      </resourceAssignmentExpression>
    </potentialOwner>
  </userTask>
   
  <sequenceFlow id='flow2' sourceRef='writeReportTask' targetRef='verifyReportTask' />
     
  <userTask id="verifyReportTask" name="批准财务报告" >
    <documentation>
      核实并批准会计部门提交的每月财务报告,报告将发送给公司的所有股东们。  
    </documentation>
    <potentialOwner>
      <resourceAssignmentExpression>
        <formalExpression>management</formalExpression>
      </resourceAssignmentExpression>
    </potentialOwner>
  </userTask>
   
  <sequenceFlow id='flow3' sourceRef='verifyReportTask' targetRef='theEnd' />
     
  <endEvent id="theEnd" />
     
</process>

开始一个流程实例

现在我们有了业务流程的流程定义(process definition)。通过这个流程定义我们就可以创建一个流程实例(process instances)了。在这个用例中,一个流程实例将和每月财务报告的创建和批准项匹配。

为了能够通过一个流程定义创建一个流程实例,我们必须先将定义的流程发布(deploy),发布流程意味着两件事:

·         流程定义保存到Activiti引擎的持久化数据库中。通过发布业务流程,我们就能确保就算在引擎重启后也能够找到该流程的定义。

·         BPMN2.0流程定义文件将被解释到内存中,从而可以通过activiti的API执行相应的操作。

更详细的信息可以通过专门的发布流程章节获取。

就像专门的发布流程章节中提及的,可以通过多种方式来发布流程,以下是其中的一种:

Deployment deployment = repositoryService.createDeployment()
  .addClasspathResource("org/activiti/examples/bpmn/usertask/FinancialReportProcess.bpmn20.xml")
  .deploy();

现在我们可以通过在流程id(看XML流程定义文件中的第一行)来初始化一个流程实例了。注意这个id在Activiti的术语中称为key。

ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("financialReport");

一经上面的初始化将立即通过流程的start event,在start event.之后,紧跟着就是流出流向(在这个用例中只有一条)和到达第一个任务(撰写财务报告)。Activiti引擎将保存一个任务到数据库中。这时候附属于该任务的相关用户或用户组的作业也会被保存到数据库中。activiti5 流程实例

任务创建后,处于等待接收状态,引擎将仅在下次接收到而外的触发调用后才会继续下去。在这个节点,任务是分派到用户组的,意指该用户组中的任何人都可以作为这个任务的候选者来执行这个任务。

任务列表

现在我们可以通过taskService来获取用户的任务列表了

List<Task> tasks = taskService.createTaskQuery().taskCandidateUser("fozzie").list();

因为流程定义中这个任务是定义为分派到用户组accountancy的,因此方法中传入的用户名参数"fozzie"必须是属于该用户组的用户:

<potentialOwner>
  <resourceAssignmentExpression>
    <formalExpression>accountancy</formalExpression>
  </resourceAssignmentExpression>
</potentialOwner>

也可以通过任务的查询API,如下获取用户组的任务:

List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("accountancy").list();

上面描述的业务流程已经发布到了演示数据中。在运行ant demo.start后,以用户fozzie(他是一个会计师)身份登录到Activiti Explorer,选择PROCESSES页签,在列表的Action列中点击流程“Monthly financial report'”的“Start Process"链接来启动一个流程实例。如下图所示:

正如前面解解释的,流程将运行到第一个任务处。由于我们是以用户fozzie登录,故在我们启动了这个流程实例后,可以看到一个新的候选任务。我们这是切换到TASKS页签页去看看这个新任务(如下图),可以发现就算其他人启动的流程实例,所有属于用户组accountancy的用户都可以看到这个新的候选任务。

领取任务

现在其中一个会计人员需要领取这个任务(claim the task。通过领取任务操作,特定的用户就会成为这个任务的代理人(assignee),这是这个任务就会从用户组accountancy的其他所有用户的列表视图中消失。领取任务的调用代码如下:

taskService.claim(task.getId(), "fozzie");

现在这个任务成为了任务领取者的个人任务了。

List<Task> tasks = taskService.createTaskQuery().taskAssignee("fozzie");

通过Activiti Explorer界面点击claim按钮将执行相同的领取任务操作。现在这个任务将显示在任务领取者的个人任务列表中,如下图所示:

完成任务

现在会计员可以开始撰写财务报表了,一但报表撰写完毕,就可以执行完成任务的操作将任务完成掉:

taskService.complete(task.getId());

对Activiti引擎来说,这是通知流程实例必须继续跑下去的额外信号。该任务的外出流向将被解析执行,引导到第二个任务(批准财务报告)。同样的原理,就像上面第一个任务所发生的事情一样将在第二个任务出发生,唯一不同的是这次任务将被分派到用户组management

在上面的demo中,使它能够过点击complete按钮来完成任务的。因Frozzie不是管理者,所以我们需要注销并以kermit(他是管理者)用户登录。第二个任务现在就显示在待指定任务列表中了。如下图所示:

结束流程

这个批准任务就像第一个任务的处理一样可以接受和领取。完成这个任务将导致流程执行到end event节点,在这个节点将终止该流程实例。该流程实例以及所有与其相关的运行时期的执行数据将会从数据库中删除。

可以通过 Activiti Probe来证实这些数据已被清除。因为表中已经没有任何流程的执行数据。

很容易看出来上面谈及的业务流程因太简单而无法在现实中使用到。然而通过上述基于BPMN2.0在Activiti的构建,你将可以通过如下的手段来增强业务流程的功能:

·         通过定义一个 timer start event 节点每月自动开始启动流程。

·         定义 gateways 节点执行条件判断。为此,管理者可以拒绝财务报表让会计师重建原来的任务。

·         通过声明和使用变量(variables,控制报告在表单的编辑权限。

·         通过在流程结束时定义一个service task任务将报告自动发送给所有股东。.

相关推荐