文档库 最新最全的文档下载
当前位置:文档库 › C语言课程设计报告

C语言课程设计报告

C语言课程设计报告

机房名称

时间

学院

专业班级

姓名

学号

指导教师

小游戏“黄金矿工”设计报告

目录

C语言课程设计报告 (1)

一、课题简述 (3)

二、功能需求 (4)

Ⅰ.程序大体流程图: (4)

Ⅱ.部分函数介绍 (5)

Funcode接口介绍 (5)

三、总体设计 (8)

1.下图为主函数及各级嵌套函数的流程图,部分省略。 (8)

2、操作使用说明 (9)

四、详细设计 (10)

1.主函数模块WinMain()函数模块 (10)

2.部分自己设置定义的函数 (14)

五、运行相关界面及简介 (25)

六、程序运行测试及遇到问题的解决方案 (31)

七、成员分工表 (33)

八、总结与体会 (34)

九、教师评语 (36)

一、课题简述

通过一年的c语言程序设计的学习,我们仅仅掌握了c语言最基本的知识,还有很多内容是我们没有涉及的。所以通过c语言课程设计的学习实践活动和实际演练,使我们能够在实际操作中提高运用c语言解决问题的能力和程序设计的能力。

得知本次课程设计任务是小游戏的设计,我们既兴奋又不安,兴奋是十分期待自己亲手做出的游戏,不安的是我们对funcode这个软件很不了解。幸好这次实践的过程,让我们从做平时简单的小程序过渡到现在的综合应用程序,将学过的c语言知识融入新接触到的funcode操作中,不仅能巩固所学的知识,还能加强对新事物的接受及应用的本领,在不断的挑战问题中大大的提升自己,同时也是对c语言程序设计这门课的深入理解的过程。

而什么样的小游戏是我们能实现而又不乏趣味呢?经过反复思考、讨论,我们小组设计了“黄金矿工”这样一个小游戏:

玩家通过键盘的按键控制矿工抓取金块,将钩子碰触到的金块抓取过来。

1.单机键盘上的空格键进入游戏,金块的总数是20,钻石的总数是2,炸弹的总数是3,石头的总数是4,大小位置是随机的。

2.在没有抓取状态下,钩子左右摆动,此时矿工的是静止的。当钩子摆动到一定角度,玩家可以单击键盘上的上下左右键中的下方向键控制矿工伸出长钩,抓取金子等——抓到一个金子金子加20分,钻石加50分且拉回速度变快,石头加5分且拉回速度变慢,抓到炸弹不加分且炸弹会爆炸。此时矿工是向下摇动转轴。获取到金子等往回拉后,矿工是不断转动转轴,直到金子拉动到钩子初始处,矿工恢复静止,钩子继续左右摇摆,直到玩家再次单击向下方向键。如果钩子没有碰触到金子,而是碰触到左右和下的边界,则钩子保持原来的速度往回收。

3.加入计分和计时系统。60秒倒计时时间内抓取的金子越多得分越高。

接下来,我们开始思索,要如何实现这些功能,如何将所有功能连接在一起。于是我们先用funcode 熟悉小游戏制作的操作,认真按照老师给我们的实验指南进行练习,反复阅读其内容,并用vc6.0进行对各种小游戏源代码的简单探索。当然,由于技术原因,我们想要设计的软件只是局限于对游戏功能的实现,而实际中正式的欢迎界面,游戏说明等优美的图片,我们并没有进行设计,包括刚开始拟定的金子运动、玩家升级等也取消了。然而,这并不影响我们制作小游戏的热情,而且我们根据其具体的功能进行了组员之间的分工合作。

二、功能需求

Ⅰ.程序大体流程图:

图1. 游戏模块图

空格键 开始游戏

金子、钻石、石头、炸弹随机分布; 钩子摇摆;

计时器倒计时60秒 计分器显示为0分

下键抓取

金子 钻石 石头 炸弹

计分器加20分 计分器加50分

计分器加5分; 拉升速度减缓 计分器加0分 炸弹爆炸

计时器减为0

钩子停止抓取; 游戏结束

按回车键,所有数据清零,回到初始状态

Ⅱ.部分函数介绍

本实验用到的API

extern float dGetScreenLeft(); /*获取世界边界之左边X坐标*/

extern float dGetScreenTop(); /*获取世界边界之上边Y坐标*/

extern float dGetScreenRight(); /*获取世界边界之右边X坐标*/

extern float dGetScreenBottom(); /*获取世界边界之下边Y坐标*/

extern void dSetSpriteWidth( const char *szName, const float fWidth );/*设置精灵外形宽度*/

extern float dGetSpriteWidth( const char *szName );/*dGetSpriteWidth:获取精灵外形宽度*/

extern int dRandomRange( const int iMin, const int iMax ); /*获取一个位于参数1到参数2之间的随机数*/ extern void dSetSpriteRotation( const char *szName, const float fRot ); /*设置精灵的旋转角度*/

extern void dSetSpriteLinearVelocityPolar( const char *szName, const float fSpeed, const float fPolar );

/*设置精灵移动速度*/

extern int dAnimateSpritePlayAnimation( const char *szName, const char *szAnim, const int iRestore );

/*精灵播放动画*/

extern float dGetSpriteLinkPointPosX( const char *szName, const int iId );

/*获取精灵链接点X坐标。链接点是依附于精灵的一个坐标点*/

extern float dGetSpriteLinkPointPosY( const char *szName, const int iId );

/ *获取精灵链接点Y坐标。链接点是依附于精灵的一个坐标点*/

extern void dDrawLine( const float fStartX, const float fStartY, const float fEndX, const float fEndY, const float fLineWidth, const int iLayer, const int iRed, const int iGreen, const int iBlue, const int iAlpha );

/* dDrawLine:两点之间画线*/

Funcode接口介绍

extern void dOnSpriteColSprite( const char *szSrcName, const char *szTarName );

/*精灵与精灵碰撞后将被调用的函数*/

extern int dSpriteMountToSpriteLinkPoint( const char *szSrcName, const char *szDstName, const int iPointId ); /*将一个精灵绑定到另一个精灵上,绑定位置为指定* 的链接点,暂时的成为另一个精灵的一部分,跟随其运动等*/

extern float dGetSpritePositionX( const char *szName ); /*获取精灵X坐标*/

extern float dGetSpritePositionY( const char *szName ); /*获取精灵Y坐标*/

funcode函数

(1)/*主函数入口*/

int PASCAL WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPSTR lpCmdLine,

int nCmdShow)

{

/*初始化游戏引擎*/

if( !dInitGameEngine( hInstance, lpCmdLine ) )

return 0;

/*在此使用API更改窗口标题*/

dSetWindowTitle("Lesson");

/*引擎主循环,处理屏幕图像刷新等工作*/

while( dEngineMainLoop() )

{

/*获取两次调用之间的时间差,传递给游戏逻辑处理*/

float fTimeDelta = dGetTimeDelta();

/*执行游戏主循环*/

GameMainLoop( fTimeDelta );

};

/*关闭游戏引擎*/

dShutdownGameEngine();

return 0;

}

(2)/*引擎捕捉键盘按下消息后,将调用到本函数*/

void dOnKeyDown( const int iKey, const int iAltPress, const int iShiftPress, const int iCtrlPress ) (3)/*引擎捕捉键盘弹起消息后,将调用到本函数*/

void dOnKeyUp( const int iKey )

(4)/*引擎捕捉到精灵与精灵碰撞之后,调用此函数*/

void dOnSpriteColSprite( const char *szSrcName, const char *szTarName )

(5)/* 引擎捕捉到精灵与世界边界碰撞之后,调用此函数. */

void dOnSpriteColWorldLimit( const char *szName, const int iColSide )

其它函数

(1)出现金块、钻石、炸弹、石头,并增加其碰撞属性void Appear();

(2) 画出链接钩子的线

void line();

(3) 重置游戏初始状态

void begin();

(4) 游戏结束后,清楚剩余金块、钻石、炸弹、石头void Disappear();

三、总体设计

I.下图为主函数及各级嵌套函数的流程图,部分省略。

主函数入口

IntPASCAL WinMain()

设置游戏窗口名字

dSetWindowTitle("Lesson")

引擎主循环

dEngineMainLoop()

执行游戏主循环

GameMainLoop()

g_iGameState=0 g_iGameState=1 g_iGameState=2 g_iGameState=3

游戏初始界面;

初始化游戏

执行

dOnKeyDown

函数

调用Appear()

生成金子等;

钩子自由摆

动;

调用

dOnKeyDown,

钩子运动;

调用

dOnSprite

-ColSprite、

dOnSprite-

ColWorldLimit

实现抓取

键时间到

游戏结束

时间减为0

g_iGameState=4

精灵消失

所有数据重

回到初始状

自动跳转

图 2.主函数流程图

II 、操作使用说明

玩家通过键盘的按键控制矿工抓取金块,将钩子碰触到的金块抓取过来。

1.单机键盘上的空格键进入游戏,金块的总数是20,钻石的总数是2,炸弹的总数是3,石头的总数是4,大小位置是随机的。

2.在没有抓取状态下,钩子左右摆动,此时矿工的是静止的。当钩子摆动到一定角度,玩家可以单击键盘上的上下左右键中的下方向键控制矿工伸出长钩,抓取金子等——抓到一个金子金子加20分,钻石加50分且拉回速度变慢,石头加5分且拉回速度变慢,抓到炸弹不加分且炸弹会爆炸。此时矿工是向下摇动转轴。获取到金子等往回拉后,矿工是不断转动转轴,知道金子拉动到钩子初始处,矿工恢复静止,钩子继续左右摇摆,直到玩家再次单击向下方向键。如果钩子没有碰触到金子,而是碰触到左右和下的边界,则钩子保持原来的速度往回收。

3.存在计分和计时系统。60秒倒计时时间内抓取的金子越多得分越高。

精灵与精灵碰撞 void

dOnSpriteColSpr ite()

显示消失及爆炸动画 加分

键盘按下

V oid dOnKeyDown()

开始游戏 case

KEY_SPACE 钩子下降 Case

KEY_DOWNN 状态转换 Case

KEY_ENTER

四、详细设计

1.变量定义部分

变量定义是一个完整的程序中不可或缺的内容。在本次游戏编写中,我们根据程序需要,也不可缺少的设置了许多变量,下面我们简单介绍一下全局变量和主函数之中的部分变量:

(1)定义全局变量

///////////////////初始化物品数量////////////////////////////////////////

int g_iGoldCount=20; //金子数量

int g_iBombCount=3; //炸弹数量

int g_iDiaCount =2; //钻石数量

int g_iStoneCount=4; //石头数量

////////////////////////////初始化计时计分///////////////////////////////

float g_iGameScore = 0; //初始化得分

float g_fGameTime = 60.f; //计时,设定初始计时

bool g_bStart = 0; //计时,定义开始计时的状态

////////////////////////////设置钩子自由旋转的定义///////////////////////////////

float g_fHookRotation = 0.f;

int g_iGameState = 0; //定义游戏初始状态

float g_fEmptyHookSpeed = 15.f;//定义钩子的速度

///////////////////////////设置钩子抓精灵的定义////////////////////////////////

float g_fHookStartPosX; //存储钩子的初始X位置

float g_fHookStartPosY; //存储钩子的初始Y位置

char szGotGoldName[20] ; //当前抓到金子的名称

char szGotBombName[3] ; //当前抓到炸弹的名称

char szGotDiaName[2] ; //当前抓钻石的名称

char szGotStoneName[2] ; //当前抓石头的名称

(2)主函数之中的局部变量

//////////////////////////设置钩子摇摆///////////////////////////////////

const float fRotateSpeed = 45.f; // 摇摆速度,单位度/秒

int iHookRotToLeft = 1; //钩子摆动的方向:1 ←;0 →

/////////////////////////设置钩子抓金子///////////////////////////////////

g_fHookStartPosX = dGetSpritePositionX("goldhook"); //获取钩子的初始X坐标

g_fHookStartPosY = dGetSpritePositionY("goldhook"); //获取钩子的初始Y坐标dSetSpriteWorldLimitMode("goldhook", WORLD_LIMIT_NULL); //初始化钩子与世界边界碰撞的模式为NULL

2.主函数模块WinMain()函数模块

实现初始化游戏引擎,执行引擎主循环,处理屏幕图像刷新等工作,包括获取两次调用之间的时间差,传递给游戏逻辑处理等。我们通过主函数实现设置初始化游戏状态、钩子摇摆、钩子抓金子、炸弹、石头、钻石等内容。在本游戏中我们设计了5种游戏状态,分别为g_iGameState等于0、1、2、3、4。其中,状态0为游戏初始状态,状态1和2为游戏运行状态,状态3为游戏结束状态,状态4为过渡到初始状态时运用的一个调整状态。

步骤详细介绍:

第一步,游戏初始化,显示初始界面需要的精灵

if( !dInitGameEngine( hInstance, lpCmdLine ) ) // 初始化游戏引擎return 0;

dSetWindowTitle("黄金矿工"); //设置窗口名字dSetWindowTitle("Lesson");

begin(); //调用函数,初始游戏,显示初始精灵第二步,游戏是一直进行的,因此游戏的重点是在while循环中。While循环中使用“float fTimeDelta = dGetTimeDelta(); ”获取两次调用之间的时间差,传递给游戏逻辑处理,达到不断循环。下面介绍一下此循环中使用的语句。

①游戏倒计时,倒计时结束后实现状态跳转到结束状态

/////////////////////////////////////////////////////////////////倒计时///////////////////////////////////////////////////////////////// if(g_bStart) //判断游戏是否开始

{

g_fGameTime -= fTimeDelta; //设置游戏时间

if(g_fGameTime > 0) //判断游戏是否结束{

dSetTextValue("Time", (int)(g_fGameTime)); //设置精灵"时间"显示数值}

if(g_fGameTime<=0 && (g_iGameState==2 || g_iGameState==1))

//判断游戏是否结束,且在运行状态1或2时,其他状态不执行

{

g_iGameState=3; //变成状态3,实现游戏结束}

}

②钩子的自由摆动,此过程是在状态0和1时准备抓金子时出现的

////////////////////////////////////////////////////////////////////钩子自由摆动//////////////////////////////////////////////////// float fThisRotate = fRotateSpeed * fTimeDelta; // 本次旋转的角度

if(g_iGameState == 0 || g_iGameState == 1)

{

float fThisRotate = fRotateSpeed * fTimeDelta;

if( iHookRotToLeft )

{

g_fHookRotation += fThisRotate;

if( g_fHookRotation >= 180.f )

{

g_fHookRotation = 180.f;

iHookRotToLeft = 0;

}

}

else

{

g_fHookRotation -= fThisRotate;

if( g_fHookRotation <= 0.f )

{

g_fHookRotation = 0.f;

iHookRotToLeft = 1;

}

}

dSetSpriteRotation("goldhook",g_fHookRotation); //设置钩子的旋转角度}

③钩子抓金子,钩子抓金子为状态2,不需要钩子自由摆动

/////////////////////////////////////////////////////////////////钩子抓金子/////////////////////////////////////////////////////////// if(g_iGameState == 2)

{

float fSpeedX = dGetSpriteLinearVelocityX("goldhook"); //获取钩子X方向的速度float fSpeedY = dGetSpriteLinearVelocityY("goldhook"); //获取钩子Y方向的速度if( fSpeedX < 0.00001f && fSpeedX > -0.00001f && fSpeedY < 0.00001f && fSpeedY > -0.00001f ) //当速度接近为0时,即可判定其已到达初始点{

dSpriteDismount(szGotGoldName); //解除金块与钩子的锚定dDeleteSprite(szGotGoldName); //删除获取的金块g_iGameState = 1; //回拉结束,设定状态为1,钩子摆动dAnimateSpritePlayAnimation("GoldMan","GolderManAnimation2", 0 );

//播放矿工的动画,即准备拉金子的动画

}

}

④游戏状态3,显示游戏时间停止

if(g_iGameState==3)

{

dSetSpriteVisible( "over",1); //若结束显示Time over }

⑤游戏状态为4时,实现过渡到游戏状态为1

if(g_iGameState == 4)

{

begin(); //调用重置游戏初始化所需精灵g_iGameState = 0 ; //实现游戏状态跳转到初始状态0 g_iGameScore = 0; // 重置游戏分数为0 g_fGameTime = 60.f; // 重置倒计时时间为60 g_bStart=0; // 停止先前状态中的倒计时dSetTextValue("score",(int)0); // 重置游戏分数为0 dSetTextValue("time",(int)60); // 重置倒计时时间为60 dSetSpriteVisible("over",0); //隐藏Timeover dSetSpriteVisible("score",1); //出现计分装置dSetSpriteVisible("time",1); //出现计时装置}

⑥由于钩子的连线也是一直在游戏运行时存在的,故也应放入此循环中

////////////////////////////////////////////////////////设置与钩子链接的线////////////////////////////////////////////////////// line(); //调用画线的函数第四步,游戏结束,关闭游戏引擎,主函数完成

dShutdownGameEngine(); // 关闭游戏引擎return 0;

3.有关系统给定的函数的设置

(1)dOnKeyDown()函数的详述,对于系统内我们主要使用此函数。我们使用空格键控制游戏开始,方向下键控制钩子下落,回车键实现从结束状态到开始状态的过渡。

///////////////////////////////////////按下空格游戏开始///////////////////////////////////////////////

g_fEmptyHookSpeed=15.f; //为之后调整绳子速度做准备if(iKey==KEY_SPACE && g_iGameState == 0) //按下空格键且游戏状态为0时{

g_iGameState = 1; //游戏状态变为1

dSetSpriteVisible( "GameBegin",0); //消失游戏开始

dSetSpriteVisible( "HJKG",0); //消失“黄金矿工”

Appear(); //调用函数出现金子等东西

g_bStart=1; //计时开始的条件}

////////////////////////////////////////////按下下键钩子下降///////////////////////////////////////////

if( iKey==KEY_DOWN && g_iGameState == 1) //按下下键且游戏状态为1时{

g_iGameState = 2; //置游戏状态为2,可用于控制钩子是否摆动

dSetSpriteLinearVelocityPolar("goldhook",g_fEmptyHookSpeed, g_fHookRotation);

//以当前朝向给钩子一个向前的速度

dAnimateSpritePlayAnimation("GoldMan","GolderManAnimation1", 0);

//播放挖金者的动作(一个胳膊往下压的动作) ,0 表示播放一次,这里胳膊下压

就是一次

}

////////////////////////////////按下回车键跳转到初始状态///////////////////////////////////////////

if( iKey==KEY_ENTER && g_iGameState == 3 ) //按下回车键且游戏状态为3 {

DisAppear(); //调用函数消除金子等东西

g_iGameState = 4; //游戏状态变为4 }

(2)dOnSpriteColSprite()函数是引擎捕捉到精灵与精灵碰撞之后被调用的,这个函数也是我们本次编程中的重点函数,用于钩子碰到金子等东西之时,同时增加积分系统于此函数之中,每当碰撞发生,对于不同的东西产生不同的加分,其中金子加20分,钻石加50分,石头加5分,炸弹不加分。并且调整了抓石头是与抓其他物品时的速度不同,还未炸弹消失过程中附加了粒子效应。以下是函数详述:

void dOnSpriteColSprite( const char *szSrcName, const char *szTarName )

{

/////////////////////// 发起者为goldhook,接受者含有GoldBlock字段///////////////////////////////////////// if(strcmp(szSrcName,"goldhook")== 0 && strstr(szTarName,"GoldBlock")!=NULL )

{

if (dGetSpriteIsMounted(szTarName)==0)

g_iGameScore+=20;

dSpriteMountToSpriteLinkPoint( szTarName, "goldhook", 2 );//将金块锚定在钩子上

dSpriteMoveTo("goldhook",g_fHookStartPosX, g_fHookStartPosY, g_fEmptyHookSpeed, 1);

//使钩子向初始位置移动,即会拉

dAnimateSpritePlayAnimation("GoldMan","GolderManAnimation3", 1 );

//播放拉金块的动作

strcpy(szGotGoldName,szTarName); //复制并保存当前抓取到金块的名称

g_fEmptyHookSpeed = 15.f;

}

g_iGameState = 2; //表示绳索回拉//2表示回拉状态,用于控制金块的回拉和删除////////////////////////// 发起者为goldhook,接受者含有DiaBlock字段/////////////////////////////////////// if(strcmp(szSrcName,"goldhook")== 0 && strstr(szTarName,"DiaBlock")!=NULL )

{

if (dGetSpriteIsMounted(szTarName)==0)

g_iGameScore+=50;

dSpriteMountToSpriteLinkPoint( szTarName, "goldhook", 2 ); //将钻石锚定在钩子上dSpriteMoveTo("goldhook",g_fHookStartPosX, g_fHookStartPosY, g_fEmptyHookSpeed, 1);

//使钩子向初始位置移动,即会拉

dAnimateSpritePlayAnimation("GoldMan","GolderManAnimation3", 1 );

//播放拉钻石的动作

strcpy(szGotGoldName,szTarName); //复制并保存当前抓取到钻石的名称g_fEmptyHookSpeed = 25.f; //提高拉钻石速度}

g_iGameState = 2; //表示绳索回拉//2表示回拉状态,用于控制金块的回拉和删除///////////////////////////////// 发起者为goldhook,接受者含有BombBlock字段//////////////////////////////

if(strcmp(szSrcName,"goldhook")== 0 && strstr(szTarName,"BombBlock")!=NULL )

{

dDeleteSprite(szGotBombName);//炸弹消失

float hPosX=dGetSpritePositionX("goldhook");

float hPosY=dGetSpritePositionY("goldhook");

dPlayEffect("bigbang", 2.f, hPosX, hPosY, 0.f ); //跟随钩子增加粒子效应dSpriteMoveTo("goldhook",g_fHookStartPosX, g_fHookStartPosY, g_fEmptyHookSpeed, 1);

//使钩子向初始位置移动,即会拉

dAnimateSpritePlayAnimation("GoldMan","GolderManAnimation3", 1 );

//播放拉炸弹的动作

strcpy(szGotGoldName,szTarName); //复制并保存当前抓取到炸弹的名称g_fEmptyHookSpeed = 15.f;

}

g_iGameState = 2; //表示绳索回拉//2表示回拉状态,用于控制金块的回拉和删除/////////////////////////////////// 发起者为goldhook,接受者含有StoneBlock字段///////////////////////////// if(strcmp(szSrcName,"goldhook")== 0 && strstr(szTarName,"StoneBlock")!=NULL )

{

if (dGetSpriteIsMounted(szTarName)==0)

g_iGameScore+=5;

dSpriteMountToSpriteLinkPoint( szTarName, "goldhook", 2 ); //将石头锚定在钩子上dSpriteMoveTo("goldhook",g_fHookStartPosX, g_fHookStartPosY, g_fEmptyHookSpeed, 1);

//使钩子向初始位置移动,即会拉

dAnimateSpritePlayAnimation("GoldMan","GolderManAnimation3", 1 );

//播放拉钻石的动作

strcpy(szGotGoldName,szTarName); //复制并保存当前抓取到石头的名称g_fEmptyHookSpeed = 5.f; //减缓拉石头的速度}

g_iGameState = 2; //表示绳索回拉//2表示回拉状态,用于控制金块的回拉和删除//////////////////////////////////////////////////////////////计分/////////////////////////////////////////////////////////////////////// dSetTextValue("score",g_iGameScore);

}

5. dOnSpriteColWorldLimit()引擎捕捉到精灵与世界边界碰撞之后,调用此函数。此函数相对比较简单,用于处理钩子未抓到物品碰到世界边界时的处理。

void dOnSpriteColWorldLimit( const char *szName, const int iColSide )

{

if(strcmp(szName,"goldhook") == 0)

{

dSpriteMoveTo(szName,g_fHookStartPosX, g_fHookStartPosY, g_fEmptyHookSpeed, 1);

//碰到边界的为钩子时

dAnimateSpritePlayAnimation("GoldMan","GolderManAnimation3", 1 );

//同样设置为回拉,只是没有碰到金子

g_iGameState = 2;

}

}

4.部分自己设置定义的函数

(1)定义金子、钻石、炸弹、石头显示的函数Appear(),其内还添加了少许碰撞属性。这也是我们组本次编程较突出的地方。

void Appear()

{

//与显示金子有关的定义

int g_fGoldBornMinX = 0;

int g_fGoldBornMaxX = 0;

int g_fGoldBornMinY = 0;

int g_fGoldBornMaxY = 0;

//与炸弹有关的定义

int g_fBombBornMinX = 0;

int g_fBombBornMaxX = 0;

int g_fBombBornMinY = 0;

int g_fBombBornMaxY = 0;

//与钻石有关的定义

int g_fDiaBornMinX = 0;

int g_fDiaBornMaxX = 0;

int g_fDiaBornMinY = 0;

int g_fDiaBornMaxY = 0;

//与石头有关的定义

int g_fStoneBornMinX = 0;

int g_fStoneBornMaxX = 0;

int g_fStoneBornMinY =0;

int g_fStoneBornMaxY = 0;

///////////////////////////////////////////////////////////设置金子///////////////////////////////////////////////////////////// g_fGoldBornMinX = dGetScreenLeft() + 5; //金子左边界g_fGoldBornMaxX = dGetScreenRight() - 5; //金子右边界g_fGoldBornMinY = dGetScreenTop() + 20; //金子上边界g_fGoldBornMaxY = dGetScreenBottom() - 5; //金子下边界int iLoop = 0; //循环变量控制int iSize= 4, iPosX = 0, iPosY = 0; //iSize表示金块大小的变量dSetSpriteCollisionSend("goldhook", 1); //钩子抓金子的定义dSetSpriteCollisionReceive("goldTemplate", 1);

//在WinMain的复制金子前给金块加上接受碰撞属性

for( iLoop = 0; iLoop < g_iGoldCount; iLoop++ )

{

if( iLoop < 10 ) //生成10个小金块,大小为4 {

iSize= 4;

}

else if( iLoop >= 10 && iLoop < 16 ) //生成6个中金块,大小为6 {

iSize= 6;

}

else //生成4个大金块,大小为8 {

iSize= 8;

}

//初始化金子精灵实例

char* tmpName;

tmpName=dMakeSpriteName("GoldBlock",iLoop); //生成金块名字dCloneSprite("goldTemplate",tmpName);

dSetSpriteWidth(tmpName,(float)iSize); //设置金块的宽度dSetSpriteHeight(tmpName,(float)iSize); //设置金块的高度//设置金子精灵位置

iPosX = dRandomRange(g_fGoldBornMinX, g_fGoldBornMaxX);

iPosY = dRandomRange(g_fGoldBornMinY, g_fGoldBornMaxY); dSetSpritePosition(tmpName,(float)iPosX, (float)iPosY);

}

//////////////////////////////////////////////设置炸弹///////////////////////////////////////////////////////////////////////// g_fBombBornMinX = dGetScreenLeft() + 10; //炸弹左边界g_fBombBornMaxX = dGetScreenRight() - 8; //炸弹右边界g_fBombBornMinY = dGetScreenTop() + 13; //炸弹上边界g_fBombBornMaxY = dGetScreenBottom() - 10; //炸弹下边界int eLoop = 0; //循环变量控制int eSize = 6, ePosX = 0, ePosY = 0; //eSize表示炸弹大小的变量dSetSpriteCollisionSend("goldhook", 1); //钩子抓炸弹定义dSetSpriteCollisionReceive("bombTemplate", 1);

//在WinMain的复制炸弹前给炸弹加上接受碰撞属性

for( eLoop = 0; eLoop < g_iBombCount; eLoop++ )

{

if( eLoop < 2) //生成2个大炸弹,大小为8 {

c语言课程设计报告·图书管理系统

第一章 §题目描述 图书管理系统设计: 【要求】图书管理信息包括:图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等。试设计一图书管理系统,使之能提供以下功能: (1)新图书基本信息的输入; (2)图书基本信息的查询; (3)对撤销图书信息的删除; (4)办理借书手续; (5)办理还书手续; 【提示】建立图书馆里信息结构体,结构体成员包括图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号。存在状态设为整型,可用不同数字代表借还状态。借书和还书手续要注意修改结构体的成员变量存在状态的值。 §算法设计 1.设计思想: 在整个系统编写的过程中,涉及了较多C语言知识点,对于不同的数据类型、程序控制结构、数据结构作以分析和总结,并结合这个课题进行综合的应用,在一定程度上做到了对所学知识融会贯通。由此进一步加深、巩固了所学的课程的基本理论知识,培养了综合分析问题、解决问题的能力。在设计程序时,参考了学校图书馆的图书管理系统,实现了程序的模块化、结构化。在主函数中调用各种函数,操作界面简单,易操作,人机互动性较强。 2.实现注释: 这个实用的小型图书管理系统程序以结构体数组指针操作完成,并实现文件信息的录入、修改和保存等功能,所有信息以磁盘文件方式保存,方便用户使用。本图书管理系统分为管理员和学生两个部分,其基本功能包括了对图书信息的存储、查询、添加、删除和借书、还书手续办理等。查询时可按书名、编号等方式查询,找到后输出这本书的所有信息。可查询图书的在库状态,方便用户进行借书、还书操作。在借书还书成功后图书的在库状态自动改变,并更新信息到数据库。系统中主要的数据结构就是图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等。在处理过程中各项可以作为一本图书的不同属性来进行处理。 3.结构体系设计 图:主函数结构;图:新书信息录入流程;图:图书信息查询(管理员)流程;图:图书信息查询(学生)流程;图:图书信息删除流程;图:办理借书手续流程;图:办理还书手续流程; §程序设计及代码分析 1.程序设计: 下面,我大致介绍一下我的系统的主要功能和注意事项: 当运行此程序时,首先进入系统主界面,然后可以选择[1].管理员登陆(密码:123),[2].学生登陆,[0].退出系统; 选择[1]后进入管理员系统,验证密码成功后显示管理员功能菜单,按数字键选择所需服务。管理员功能菜单中,[1].新书信息录入,[2].图书信息查询,[3].图书信息删除,[4].返回主菜单,[0].退出系统;当出现“请选择”时,输入选项前的数字,输完之后按回车(下同)。首次运行系统需要先选择[1]录入库存书籍信息,图书各信息项须用空格键隔开,输入完毕后信息自动储存并更新至数据库,然后再选择其他操作。当选择[3]时会进入图书信息删除,在这里可以选择删除图书信息等操

C语言课程设计报告-游戏2048

东华理工大学C语言课程设计报告 学院:国际教育学院学院专业:电子信息工程 班级:1420606 学号:201420060638 姓名:钟天运

一、课程设计题目:游戏2048 二、课程设计要求: a)使用C语言编写2048这款游戏 b)能够正常运行,拥有游戏界面。 c)能正常进行游戏从开始到结束。 d)用户操作方便 三、设计思路: a)游戏介绍: i.2048是一款简单的数字类游戏,界面是一个 4*4的方形格子。每个格子里可以为空或者有 一个2^n的数值。 ii.用户可以输入4种指令,分别是:上下左右,游戏会根据用户的指定的方向,将格子中 的数值向对应方向进行移动,直至移动到最边 上的格子或者有其他数值占用,如果碰到等大 数值,将会进行合并。此外,成功移动后,会 在一个空格子随机生成一个2或者4 iii.游戏目标是合成2048这个数值或者更大的数值。 b)实现思路: i.可以使用二维数组来保存4*4格子中的数值 ii.指令,可以通过输入字符函数,读取用户

在键盘上的方向键,进行判断执行对应的代 码。 iii.游戏界面,可以使用简单的特殊制表符,来实现,并通过清屏函数来进行反复同位置打 印界面。 iv.需要判断游戏结束的函数,以及记录游戏分数和步骤的变量 v.当游戏结束时,能够询问用户是否重新开始。 vi.随机生成一个新数,可以调用随机函数,使用时间做种子。 c)实现难点: i.打印游戏界面,要实现灵活能根据棋盘数组里 面的数据灵活打印。 ii.执行操作时,数值的移动和合并。

四、流程图

五、C语言源代码 // 游戏2048.c #include "windows.h" #include "time.h" #include "stdio.h" #include "conio.h" #include "string.h" //宏定义常量方向键值 //const int LEFT = 75, UP = 72, RIGHT = 77, DOWN = 80; #define LEFT 75 #define UP 72 #define RIGHT 77 #define DOWN 80 const char error_str[] = "您上次输入的指令无法识别,请重新输入。"; struct board { int place[4][4]; long int stepn; long int num; //存储游戏分数 long int time; int dtk; //direction key 记录方向键,及操作方向 int over; int zeronum; }; //该函数为游戏运行函数,当只是玩游戏的时候。进入该函数,游戏控制函数。int main() { //place数组为棋盘,其中为零代表空,-1代表不能合并的牌,其他2的倍数值为本身含义,初始化为全0。 struct board board1, board_backup; int newgame(struct board *, int), show(struct board *), operate(struct board *); char str[100] = "首次运行游戏"; //用于记录系统返回给用户的信息,例如:上一步执行向左合并,按键有误等 newgame(&board1, 0); //调用函数为新局初始化,第二个

《C语言课程设计》实验报告

《C语言课程设计》报告 学院:信息工程学院 专业:信息管理与信息系统设计题目:通讯录程序设计班级:2016级一班 学号:201601510138 姓名:张进步 指导教师:杨菲菲 时间:12.24

学生通讯管理系统 1.1 设计目的 学习如何实现一个复杂的信息管理系统——学生通讯管理系统,能够实现老师对学生基本信息的记录、查询、修改。 通过本次学习,读者能够掌握: (1)如何设计主菜单和子菜单,以及各级菜单的响应与返回操作; (2)如何合理设计不同的结构体对系统中多个实体进行封装; (3)如何合理设计多个结构体数组管理不同实体对应的数据; (4)如何对复杂的函数过程进行拆分,用多个子函数进行封装; (5)进一步熟悉文件读取的相关操作。 1.2需求分析 本章的学生信息管理系统的主要功能面向老师,能够实现对学生信息进行录入、修改、查询。 学生信息方面的功能需求如下。 (1)新增学生信息,包括姓名、籍贯、电话号码(2)、电子邮箱。 (2)修改学生信息,可以选择对某个学生的某个属性值进行修改。 (3)查找学生信息,即输入要查找的学生学号,实现学生信息查询。 (4)显示所有学生信息,并以列表的形式清晰呈现。 1.3总体设计 系统功能结构图如图所示;学生信息管理系统 学生信息管理模块:包括4个子模块,分别是学生信息的录入,学生信息的修改,学生信息的查询,学生信息的浏览。

1.4详细设计与实现 1.4.1 预处理及数据结构 1.头文件 本项目涉及4个头文件,其中#include使用字符串的函数的时候需要添加此头文件,#include #include /*system使用的函数*/ #include /*getchar、getch函数使用的头文件*/ #include /*strcmp比较2个字符串是否一样*/ 2.宏定义 LEN sizeof(struct student)表示struct student的长度。DATA是按格式输出结构体的各项数据,能够方便输出操作,减少代码量。 #define_CRT_SECURE_NO_W ARNINGS #include #include #include #include #define LEN sizeof(struct student) #define FORMAT "%-8d%-15s%-15s%-15d%-15d%-15s\n" #define DATA stu[i].numb,stu[i].name,stu[i].nat,stu[i].num1,stu[i].num2,stu[i].mail 3.结构体 利用一个结构体struct student struct student/*定义学生信息结构体*/ { int numb;/*学号*/ char name[15];/*姓名*/ char nat[16];/*籍贯*/ int num1;/*电话号码1*/ int num2;/*电话号码2*/ char mail[40];/*邮箱*/ }; 4.全局变量 分别利用全局变量结构体数组struct student stu[50];来记录所有学生的基本信息,避免程序运行过程中多次初始化,方便各个式子函数调用。 struct student stu[50];

c语言课程设计报告书--学生成绩管理

C 语言程序设计报告 课题:学生成绩管理 时间:

一、需求分析 任务要求: 自学C语言中有关链表及外部文件的内容,设计出学生成绩管理。具体要求如下: 1.主要功能: (1)能按学期、按班级完成对学生成绩的录入、修改 (2)能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序 (3)能查询学生成绩,不及格科目及学生名单 (4)能按班级输出学生的成绩单 系统功能需求分析: 1、定义一个结构体类型,成员包括学期、班级、各科成绩、建立链表,定义该结构体类型的指针,用于指向各结点; 2、分别建立具有添输入、修改、查询、总分及平均分、排序等功能的子函数,完成相应功能,对程序实现模块化。 二、概要设计 系统总体设计框架: 对程序进行模块化,建立输入、修改、查询、查找和显示功能的子函数,各子函数中运用链表存储数据。 系统功能模块图:

三、详细设计 主要功能模块的算法设计思路如下: 1、输入信息函数 (1)定义指向结构体变量的指针; (2)移动指针,找到插入结点; (3)在要插入的结点输入信息; (4)返回头指针。 2、修改信息 (1)定义指向结构体变量的指针; (2)用指针检验链表中是否有记录,若没记录,出现报错,然后要求重新输入; (3)根据要修改的编号查找对应结点; (4)修改信息;

(5)修改成功。 3、排序函数 (1)定义所要排序的班级和链表的头指针为形参; (2)调用排序函数,把班级和链表的头指针赋给形参; (3)在子函数中进行排序; (4)输出排序结果。 4、显示学生成绩信息(void Disp(Link l)) (1)选择想要查询的项目(学生各科成绩、不及格科目、班级成员);(2)用指针检验是否有记录; (3)若无记录,输出提示信息,返回主函数; 若有记录,移动指针,依次输出记录; 5、查询班级成绩信息(void Find(Link l)) (1)选择所要查询的班级; (2)输入班级: (3)在链表中寻找相应结点; (4)输出结点信息。 以上各个函数的流程图如下:

c语言课程设计报告学生成绩信息管理系统源代码

实验报告 一、问题陈述及其需求分析 (一)问题陈述 学生信息管理系统是对学生信息的基本管理,其中包括以下及模块: (1)增加一个学生的信息(需输入要增加学生的所有信息); (2)统计本班学生总人数及男女生人数。 (3)分别按照学号查找学生的信息;若找到则输出该学生全部信息,否则输出查找不到的提示信息。 (4)按学号对所有学生信息排序,并输出结果; (5)删除一个学生的信息(需指定要删除学生的学号);同时显示删除后的结果。( 二) 功能需求分析 学生信息管理系统设计 学生信息包括:学号,姓名,性别,出生年月,电话 使之提供以下功能: 1、系统以菜单方式工作 2、建立链表并显示 3、插入新的学生信息 4、删除某学号的学生信息 5、查找某学号的学生信息 6、对学生信息排序 7、统计学生人数 8、输出学生信息 二总体设计 (一)模块 依据程序的数据结构,描述该程序的层次结构,如下图:

1、建立链表并显示 void createlist(struct stucode **r); 2、插入新的学生信息 void insert(struct stucode **r); 3、删除某学号的学生信息 void del(struct stucode **r); 4、查找某学号的学生信息 void search1(struct stucode *r); 5、对学生信息排序 void sort(struct stucode **r); 6、统计学生人数 void search2(struct stucode *r); 7、输出学生信息 void out(struct stucode *r); 1 建立链表并显示 2 添加学生信息 3 删除学生信息 息 4 按学号查找学生信 5 对学生信息排序 6统计学生人数 7输出学员信息 8 学生信息写入文件 0退出 main() 菜单函数

华中科技大学计算机学院C语言课设实验报告

华中科技大学计算机科学与技术学院 《C语言程序设计》课程设计 实验报告 题目:科研项目信息管理系统 专业:计算机 班级: 学号: 姓名: 成绩: 指导教师:李开 完成日期:2009年10 月20 日

科研项目信息管理系统一、系统功能结构模块图 二、数据结构设计及其用法说明 typedef struct lakey{ char name[30];/*团队名称*/ int total;/*自然科学基金的科研项目数*/ float dudu;/*经费数*/ struct lakey *next; }*plakey;/*统计3中用到的数据结构*/ typedef struct emmey{ char name[30];/*团队名称*/ int teacher;/*老师人数*/ int harden;/*项目数*/ float bizhi;/*比值*/ struct emmey *next; }*pemmey;/*统计4中用到的数据结构*/ typedef struct kPro{ char code[15];/*项目编号*/ char sort;/*项目种类*/ int aking1; char time[8];/*项目时间*/ float dudu;/*项目经费*/ int aking2;

char beiler[15];/*负责人*/ int aking3; char keynoName[30];/*所在团队名称*/ struct kPro *next; }harden,*pHarden; typedef struct Komo{ int teacher;/*老师人数*/ char name[20];/*院系名称*/ int student;/*学生人数*/ float bizhi;/*二者比值*/ struct Komo *next; }*pKomo;/*统计1中用到的数据结构,统计结果放在这个数据结构中*/ typedef struct kTea{ char name[30];/*团队名称*/ char beiler[15];/*负责人*/ int stuNum;/*学生人数*/ int aking2; int coco;/*老师人数*/ char colName[20];/*所在院系的名称*/ int aking1; struct kTea *next; pHarden child; }keyno,*pKeyno; typedef struct edward{ char name[20];/*院系名称*/ int totalnum;/*项目总数*/ int num973;/*973项目数*/ int num863;/*863项目数*/ float amount;/*经费数*/ struct edward *next; }*pedward;/*统计2中用到的数据结构*/ typedef struct kCol{ char name[20];/*院系名称*/ int aking; char beiler[15];/*院系负责人*/ struct kCol *next; char call[15];/*负责人电话号码*/ pKeyno child; }kekey,*pKekey;

c语言课程设计报告书

课程设计报告书 所属课程:c语言 项目:库函数模拟系统 指导老师:邹姝稚 班级:软件1401 姓名:江闯 学号:141403107 分数:

1.任务描述: 本系统开发的代码模拟了下列库函数的功能: (1).模拟gets和puts的功能:能接收一个字符串,将其写入ASCII文件,并且可以读出显示。 (2).在不使用字符串库函数的条件下,编程实现字符串的拷贝,连接,求长,倒置功能。 (3).字符串加密功能:将一段明文建立到一个ASCII文件中,按加密的算法加密后写入密文文件,最终实现将明文和密文文件都显示出来。 (4).编程实现字符串与对应数字的相互转换功能。 2.总体设计: 模块调用图: 图1

函数调用图: 图2 函数功能: (1)函数gp( ):模拟gets和puts的功能 (2)函数kaobei( ):实现字符串的拷贝 (3)函数lianjie( ):实现字符串的连接 (4)函数qiuchang( ):实现字符串的求长 (5)函数daozhi( ):实现字符串的倒置 (6)函数jiami( ):实现字符串的加密功能,最后将明文和密文文件都显示出来 (7)函数zhuanhuan1( ):将数字字符串转换为对应的数字 (8)函数zhuanhuan2( ):将数字转换为对应的数字字符串 3.详细设计: (1).模仿gets和puts功能: gets和puts功能与scanf和printf函数的功能相似,但是也不是完全相同,本系统模拟功能的程序总共运用了两次函数调用技术,模拟gets运用了一次,模拟puts运用了一次。 (2)..字符串的拷贝功能: 字符串的拷贝功能程序设计源于strcpy的功能,其中运用了字符串数组和指针的相关技术,还运用了一组while语句,实现语句的循环,从而将一个字符串拷贝到一个空数组中。

c语言课程设计报告

C语言程序设计B 课程设计报告 设计题目:学生成绩管理系统年级班级: 学号: 姓名: 指导教师: 2020 年 6 月 18 日

目录 一、设计目的 (3) 二、课程设计内容和要求 (4) 三、总体设计 (5) 四、主要步骤 (12) 五、功能实现 (13) 六、功能测试 (64) 七、评价程序 (83) 八、课程设计体会 (84)

一、设计目的 程序设计能力是当代理工类大学生的必备能力,当学生学习了C语言之后,编程能力远远不能达到开发实际应用程序的要求,特备是对其中的指针、结构体、链表和文件部分的理解和应用都比较弱。 程序设计的目的是通过对面向过程的学习,将C语言的主要知识点进行综合,针对提高学生C语言程序设计能力,强化编写较大的应用软件能力,熟练运用已掌握的知识解决实际需要解决的问题,以达到更加熟知指针、链表、结构体、文件读取、标准库的使用。 主要目的为以下几点: 1、熟练掌握面向过程(结构化)程序设计基本知识; 2、综合运用所学知识解决实际问题; 3、受到面向过程(结构化)程序设计的基本训练; 4、体会面向过程(结构化)开发程序的过程。

二、课程设计内容和要求 1.课程设计内容: 学生通过使用C语言进行编写算法,开发学生成绩管理系统,以实现对学生成绩的管理。 2.课程设计要求 1)具有菜单,可以在菜单上进行选择; 2)能实现学生数据录入、修改、删除、查询; 3)能实现数据排序; 4)有数据输出功能; 5)有数据读取与存储功能; 6)一个学生的数据(称为:每条记录)包含姓名、学号、语文、数 学、英语、总分、名次等信息; 7)以结构方式存储每条记录; 8)多条记录以链表方式存储到内存; 9)随时可将全部数据存储到磁盘文件中,方便下次从磁盘读取数据。

Java课程设计实验报告及全部源码流程图

课程设计 一、实验目的 1.加深对课堂讲授内容的理解,掌握解决实际应用问题时所应具有的查阅资料、技术标准和规范,以及软件编程、调试等能力,掌握面向对象的编程思想及Java语言程序设计的规律与技巧,为进一步学习web应用开发及今后从事专业工作打下基础。 2. 使用本学期学习的Java SE技术(也可以使用课堂教学中没有学习过的Java技术,但是应当以Java SE技术为主)完成多功能日历GUI程序的设计,使之具有如下基本功能:一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。 3.在完成基本功能的基础上发挥自己的想象力与创造力,使程序凸显出与众不同的特点与功能,形成本小组的特性色。 二、实验要求 1.问题描述准确、规范。 2.程序结构合理,调试数据准确、有代表性.。 3.界面布局整齐,人机交互方便。 4.输出结果正确。 5.正确撰写实验报告。 三、实验内容 编写一个GUI程序实现日历的功能。一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期以及当前农历,可以为每页日历选择背景图片。可以实现显示时钟,时钟能进行整点报

时。可以实现备忘记事功能,能在每天添加、修改、删除记事等操作。 四、实验步骤 1.在上机实验前,小组成员进行选题讨论,确定小组感兴趣而又伸缩性强的题目多功能日历。 2.在第一次上机实验时讨论分工,分工明确之后,分头合作进行。 3.各成员完成自己的任务后,最后进行统筹合并,以及程序最后的优化。 4. 根据实验结果,写出合肥工业大学实验报告。实验报告应当包括:实验内容,程序流程图,类结构,程序清单,运行结果,以及通过上机取得的经验。 5.详细的上机实验步骤见任务分工及程序设计进度表。 五、实验结果 经过小组成员的共同努力,最终我们小组设计的多功能日历程序能够实现实验的基本要求——一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。另外,在完成基本要求的基础上,我们增添了显示农历、显示时钟、添加备忘录、修改备忘录等功能。整体程序运行流畅、功能齐全、符合操作习惯。 下面是程序运行效果截图: 日历主界面(可以实现每个月的日历,可以按年或按月前后翻动,能够显示当前日期,并能够选择背景图片):

C语言课程设计图书管理系统课程设计报告

C语言课程设计 图书管理系统 Books Management System 学生姓名张朝柱 学院名称徐州工程学院学号140 班级13计转本 专业名称计算机科学与技术 指导教师李子龙 2016年5月10日

一、需求分析 为了满足图书管理的要求,通过计算机技术给图书管理人员和读者借、还书带来便利。使用c语言编写了图书管理系统。本系统主要实现图书信息管理的功能,通过此系统可对图书馆库存图书信息进行管理和维护操作。实现了图书馆内管理的一般功能,包括查询、借书、还书、添加、删除、修改图书信息等。所设计的系统以菜单方式工作,为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并且在此过程中能够尽可能的兼容用户使用过程中可能出现的异常情况。图书信息包括编号、书名、作者、数量、在库状态等。图书信息的录入和显示要求有一定的规范格式,录入的图书信息用文件形式保存,并可以对其进行浏览、查询、借阅、还书等基本操作。整个程序实现顺序表操作,对图书信息的操作逐个地进行,一个图书信息的更改不应影响其他的图书记录。 二、算法设计: 1.设计思想: 整个系统制造的而过程中,涉及了较多C语言知识点,对于不同的数据类型、程序控制结构、数据结构作以分析和总结,并结合这个课题进行综合的应用,在一定程度上做到了对所学知识融会贯通。进一步加深、巩固了所学的专业的基本理论知识,培养了综合分析问题、解决问题的能力。在设计程序时,实现了程序的模块化、结构化。在主函数中调用各种子函数,操作界面简单,易操作。 2,设计表示: (1)、整个系统除了主函数外,另外还有各种功能子函数,利用无限次循环语句while()和选择语句swithch()实现各个子函数的调用,系统根据输入的数字选项来调用相应的函数,以实现相应的功能。主要实现了图书的录入、存储、查询、借书、还书、显示库存等功能。 (2)、void Book_Entering(struct SqList &SL);这是一个录入图书信息的函数,它主要实现了顺序表的创建,并且在创建过程中从文件读取信息到顺序表中,以用于后面其他函数的操作。它引用了一个顺序表SL。其他函数调用时只需传入顺序表头即可。 (3)、int main(void);这五个函数时整个图书管理系统的全部菜单函数,Book_Entering();为系统主界面,进入时可选择进入程序和退出程序。menu1();为进入程序时显示的功能菜单,在此菜单可以选择录入、保存图书信息,也可选择进入其他子系统。Book_Inquire();此菜单为进入图书管理系统的菜单,在此可以选择添加、删除、修改图书等操作。cxmenu();为查询系统的菜单,在此可以选择按书名、编号、作者等方式进行查询图书。jhmenu();为借书还书的子菜单,在此可以选择借书还书操作。操作完成后按提示信息进行文件的保存操作。 (4)、void Book_Inquire(struct SqList &SL);这个函数为顺序表的输出函数,把顺序表的头传给函数后,可输出整个顺序表的所有信息。、

C语言课程设计报告-模板

C语言课程设计报告 班级:16 物联网 一、题目说明 (1)读取输入信息,能正确进行数字运算

(2)拥有记忆功能,可查询最近几次计算结果并继续进行数字运算。 二、基本功能实现 (1)能实现两个数之间的加减,乘,除,乘方,开方等运算。 (2)实现记忆功能,可保留近十位结果,可用#键查看。(3)*键作为清0键,清除当前屏幕上的值为0表示重新开三、设计流程(可以画流程图,可以直接写说明)

四、代码 #include #include #include #include double yunsuan(double a, char operate, double b); //处理数值之间的运算void PutRes(double array[], double res, int *i); //保存该次运算结果 int main() { char str[40]; double a = 0; double b = 0; double res = 0; double history[10] = {0,0,0}; char opt; int i = 0; printf("欢迎进入计算功能(eg: 1 \n+ 1 ; '#':查询历史结果; 'q':退出程序)·\n"); while(1){

fgets(str,40,stdin); //将从键盘的一整行标准输入保存在字符串str中 if(sscanf(str,"%lf", &a) == 1){ //将str以长浮点型的格式放入a中,如果返回值为1,说明输入的是数值, scanf("%c %lf", &opt, &b); //获取操作符的值和另外一个操作数的值 res = yunsuan(a,opt,b); //调用yunsuan()函数计算,并将结果给res printf("%lf %c %lf = %lf\n\n",a, opt, b, res); PutRes(history, res, &i); //调用函数PutRes()将本次结果保存到数组history中(i用引用传递) // printf("%d\n", i); }else if(sscanf(str,"%c",&opt) == 1){ //将str以字符型的格式放入opt中,如果返回值为1,说明输入的是字符 if(opt == '#'){ //如果opt为‘#’,则显示history 中的数值 int j = 0; for(j = 0; j < i; ++j){ //i为history中存放的数值个数 printf(" %lf ", history[j]); } printf("\n");

c语言语言课程设计报告

上海应用技术学院 课程设计 2011~ 2012学年第二学期 设计题目成绩记录簿 院(系)计算机科学与信息工程学院 专业计算机应用技术 班级 11104114 学号 1110411414 学生姓名蒋佳琴 设计时间 2012.06.25 -2012.07.06 指导教师马智娴 提交日期 2012.07.06

上海应用技术学院课程设计任务书 指导教师(签名):马智娴教研室主任(签名):马智娴2012年6 月25日2012年6月25日

目录 1 设计目的 (5) 2 功能描述 (5) 2.1模块功能 (5) 2.2流程图 (6) 3 总体设计 (13) 3.1 功能模块设计 (13) 3.2 数据结构设计 (13) 3.3 函数功能描述 (13) 4 程序实现 (14) 4.2 运行结果 (25) 5课程设计总结 (28)

成绩记录簿 1. 设计要求: 基本功能 a) 添加成绩 b) 删除成绩 c) 查询学生成绩 d) 查询班级成绩 e) 退出 拓展功能 a) 写入文件 b) 读取文件 创新(自拟)功能: 程序实现的其它功能由个人自拟。 2. 设计要求具体说明 基本功能: 成绩记录簿中记录以下数据: 学号、姓名、课程编号、课程名称、成绩、学分,所有成绩都以百分制计分; 输入信息时要检查数据项学号、课程编号、成绩、学分的合法性,学号:8位数字;课程编号:5位数字;成绩:0 ~ 100 之间的整数,学分: 1~ 5之间的实型数。 添加成绩:需要输入学生的学号或姓名、课程编号及成绩,如已有该门课程成绩给出提示; 查询(班级或个人)成绩: a) 查询个人成绩:以学号或姓名作为关键字,可查询一个学生的所有成绩,和已完成 的总学分。 b) 查询班级成绩:以课程编号为关键字,成绩表后面要统计平均分、及格率及全班同 学不同课程在不同分数段分布的人数及百分比。 拓展功能: a) 程序启动时先从文件读入数据,如果文件中没有数据则给出提示; b) 每次修改的数据写入文件。 3. 提示 定义合适的结构体类型,使用链表或数组的方式组织数据。

C语言课程设计报告烟花绽放

课程设计报告书设计题目烟花绽放 系别计算机工程系 专业计算机科学与技术 班级 姓名 指导教师 设计任务下达日期2011年 12 月 24 日 设计时间2011年12月26日至 2010年12月30日 课程设计任务书

一、目的和意义 本课程设计是《C语言程序设计》课程的后继教学环节, 通过研究C语言中图形编程技术或者声音控制等其它方面的多媒体编程技术,一方面拓展学生在这些领域的C语言知识,另一方面使学生在运用所学理论知识进行实践开发,更好的培养学生综合学习能力和实践能力。本次课程设计学生可以根据喜好,可以利用复杂的数据类型实现成绩管理系统等小型的综合应用程序。 二、题目(可从下面题目中任选一个) 1、C语言的图形编程应用 设计实现如菜单、图形的显示,再如动画和小游戏。 2、简易电子琴模拟程序的实现 为实现在键盘模拟电子琴设计的程序。由学生自行设计并且实现。 3、成绩管理程序 学生本人设计具体方案,然后改进和编码实现。 三、课程设计报告书应包括的主要内容 1、介绍概要的思路和设计方案,程序的总体功能和模块划分。 2、主要算法的介绍及流程图,主要功能的实现手段的说明文档。 3、对于有设想但最终未实现的功能的大致编程思路的阐述和设计过程中的启发。 四、进度要求 1、设计时间:2011年12月19日至2011年12月25日 2、编写课程设计报告书:2011年12月26日至2011年12月29日 3、提交报告及答辩时间:2011年12月30日 专科 四、进度要求 1、设计时间:2011年12月26日至2011年12月28日 2、编写课程设计报告书:2011年12月29日 3、提交报告及答辩时间:2011年12月30日 目录

(完整版)C语言课程设计实验报告

目录 目录 (1) 第1章问题描述 (2) 1.1 题目 (2) 1.2基本要求 (2) 第2章需求分析 (2) 1.1软件的基本功能 (2) 1.2输入/输出形式 (2) 1.3测试数据要求 (3) 第3章概要设计 (3) 1.1主程序 (3) 第4章详细设计 (4) 1.1数据类型 (4) 1.2伪码算法 (4) 1.3 程序流程图 (7) 第5章操作 (8) 1.1 进入足球比赛积分排行榜界面 (8) 1.2进入目录 (8) 1.3输入球队比赛信息 (10) 1.4 显示九轮比赛排行榜 (12) 1.5 保存数据 (15) 1.6 由D 盘查看数据 (16) 第6章参考文献 (16)

第1章问题描述 1.1 题目 足球比赛积分排行榜程序 1.2基本要求 (1)10个足球队进行9轮循环赛,胜一场积3分,平一场积1分,输一场积0分。 (2)如果两个队积分相同,进行净胜球的比较,如果净胜球再相同进行总进球的比较。 (3)编写一程序输入每轮比赛的比分,并可以存储。 (4)最后统计出每轮比赛的积分榜。 第2章需求分析 1.1软件的基本功能 (1)输入10个足球队的9轮比赛进球数。 (2)计算10个球队的积分,净胜球,总进球。 (3)对9轮比赛进行排序。 1.2输入/输出形式 由键盘输入,屏幕输出,并且以TXT形式保存。

1.3测试数据要求 输入九轮比赛10个足球队的进球数,由系统统计积分、净胜球、总进球数,并输出。 第3章概要设计 1.1主程序 头文件: #include 说明:main函数的头文件,控制整个程序。 #include 说明:清屏的头文件。 #include 说明:包括了大量的函数原型,调用现成的库函数。 #include 说明:基于char*的字符串处理函数。 全局变量: void input(); 输入数据函数 void sort(); 排序数据函数 void display(); 显示数据函数 void save(); 保存数据函数

C语言课程设计实验报告4340106

《C语言课程设计》 课程设计报告 专业:网络工程 班级:网络10601 姓名:缪军 指导教师:汪北阳余法红 二00八年元月十五日

目录 系统摘要 (3) 系统设计 (4) 系统实现 (7) 系统使用说明 (11) 测试数据 (15) 结论 (18) 附录 (19)

(一)系统摘要 1.功能要求 在主函数中读入两个原始数据文件的内容,保存在对应的结构体数组中,并根据以上内容计算每个学生5门课的加权平均分(保留1位小数,4舍5入),并按平均分排列名次,平均分相同则名次并列。然后显示菜单,利用菜单调用每个函数,完成如下功能:1)用C语言创建一个数据文件,文件名为:“MC0116”。用来存放班级排名后的成绩, 2)分别统计全班每门课的平均分和标准差,并计算个分数段的学生人数; 课程标准差的计算公式为: Y= s^2=1/n[(x1-m)^2+(x2-m)^2+...+(xn-m)^2] 3)用C语言创建一个数据文件,文件名为:“KC0116”。将文件中存放的数据以如下形 式存放

4)打印每名学生成绩条,结果存放到用C语言创建的一个数据文件中,文件名为:“cj0116”。成绩条格式自定。 5)屏幕上显示所有存在不及格的课程的学生的名单(含学号、不及格的课程名称、课程的学分及成绩)。 6)屏幕上显示优等生名单(含学号、6门课程成绩、平均分、名次)。 (二)系统设计 准备工作: 编写两个记事本文件作为原始数据源。 本程序中建立两个文件,第一个中的内容是全班同学的5功课的成绩(英语,C语言,数学,大学物理,线性代数),保存在D盘下,其完整的路径名为D: \wl0116.txt.第二个中的内容是所有的五门功课的属性(编号,名称,学分),同样保存在D盘下内,起完整的路径名为D: \wl01kc.txt. 1.系统功能模块框架图 2.菜单结构图。 3.数据结构说明 /* 学生结构体*/ struct student { long num; /* 学号*/ char name[20]; /* 姓名*/ int score[N]; /* 各科分数构成的一维数组*/ double ave; /* 每名学生所有科目的加权平均分*/ int t; /* 名次*/ }st[M]; struct subject { int num; /* 课程编号*/ int excellent; /* 成绩优秀*/ int good; /* 成绩良好*/ int mid; /* 成绩中等*/ int pass; /* 成绩及格*/ int fail; /* 不及格*/ char kc[30]; /* 课程名称*/ float xuefen; /* 课程学分*/ double ave; /* 课程平均分*/ double bzc; /* 课程标准差*/ }course[N];

C语言程序设计报告书

一、实践的目的和要求 加深对C语言课程所学知识的理解,进一步巩固C语言算法规则.学会编制结构清晰.风格良好.数据结构适当的C程序,从而具备解决综合性问题的能力. 二、内容 在熟练掌握C语言的基础知识:数据类型(整型.实型.字符型.指针.数组.结构等); 运算类型(算术运算.逻辑运算.自增自减运算.赋值运算等);程序结构(顺序结构.判断选择结构.循环结构);大程序的功能分解方法(即函数的使用)等.进一步掌握各种函数的应用以及文件的读写操作等. 三、实验任务:通讯录 设计要求:实现菜单设计,使用数据文件保存和修改,应用结构体和指针 功能要求:通讯录信息生成,存储,查询,修改,插入,删除,打印等. 四、设计思路 1.通讯录的主要信息包括:编号,姓名,性别,联系电话.住址,邮编. 2.用结构体数组来存储信息,有Data_Input函数来实现信息的录入,用Data_Show函 数来显示打印信息,用Data_Sreach函数来查找信息,用Data_Insert函数来插入信 息,用Data_Alter 函数来修改信息,用Data_Delete函数来删除信息,用Data_Save 函数来保存信息,用Exit函数来退出通讯录. 3.小组分工,每个人分配几个函数,按情况进行分配任务. 五、程序代码 #include/*字符函数和字符串函数*/ #include/*字符模式函数(调用getch()函数)*/ #include/*输入输出函数*/ int i; struct friend/*电子通讯录结构定义*/ { char num[5]; /*编号*/ char name[11]; /*名字*/ char sex[2]; /*性别*/ char phone[12]; /*电话*/ char address[26]; /*地址*/ char post_num[11]; /*邮编*/ }friends[50]; FILE *fp; void Data_load() /*数据载入函数*/ {int j;

C语言课程设计报告

C语言课程设计论文 学生姓名:陈丹 学生学号: 所在班级:信息与计算科学一班 任课教师:马老师 通讯录管理系统 【设计目的】 设计“通讯录管理系统”使其具有数据插入、修改、删除、显示和查询等功能。 (1)数据包括:人名、工作单位、电话号码和E-mail地址。 (2)可对记录中的姓名和电话号码进行修改。 (3)可增加或删除记录。 (4)可显示所有保存的记录。 (5)可按人名或电话号码进行查询。 【设计思路】 根据要求,电话簿数据以文本文件存放在文件中,故需要提供文件的输入、输出等操作;还需要保存记录以进行修改,删除,查找等操作;另外还应提供键盘式选择菜单实现功能选择。 【总体设计】 图1 系统功能模块图 【详细设计】 1.主函数 主函数设计要求简洁,只提供部分提示语和函数的调用 【程序】

图2. 主函数流程图 V oid menu() /*主界面*/ { int n, w1; void enter(); void add(); void modify(); void browse(); void deleter(); void search(); do { puts("\t******************************菜单*****************************\t\n\n"); puts("\t\t\t\t1.新建联系人"); puts("\t\t\t\t2.添加联系人"); puts("\t\t\t\t3.修改"); puts("\t\t\t\t4.删除"); puts("\t\t\t\t5.浏览"); puts("\t\t\t\t6.查找"); puts("\t\t\t\t7.退出"); puts("\n\n\t***************************通讯录******************************\t\n"); printf("请选择服务种类(1-7) : [ ]\b\b"); scanf("%d",&n); if(n<1||n>7) {w1=1;getchar();} else w1=0; }while(w1==1); switch(n) { case 1: enter(); break; /*输入模块*/ case 2: add(); break; /*添加模块*/ 附录:源代码

吉林大学《编译原理课程设计》满分实验报告

2016级《编译原理课程设计》总结报告(组) _2019_年_5_月_25_日

报告正文(请用小四号宋体填写,自行组织章节和段落) 目录 第一部分实验成果统计表 (1) 第二部分实验简介 (2) 第三部分词法分析 (3) 第四部分语法分析 (6) LL(1)语法分析 (7) LR语法分析 (10) 第五部分程序测试 (22) 第一部分实验成果统计表 见首页 第二部分实验简介 实验目的 分组(每组最多3人)完成对SNL语言的以下两个程序:词法分析程序,语法分析程序(方法不限)。察并锻炼学生的团队协作能力,代码编写能力,加深同学对编译原理中SNL编译系统的理解,帮助同学理解整个编译原理的机制 实验内容 本实验中实现了SNL编译系统中的词法分析、语法分析。其中语法分析包括LL(1)分析方法和LR分析方法 词法分析,以源程序为输入,生成单词的内部表示TOKEN序列。 语法分析,以TOKEN序列为输入进行语法分析,并生成整个源程序的语法分析树。在SNL编译程序中,采用了两种语法分析方法实现:LL(1)和LR,前者为自顶向下的,后者为自底向上的。两种语法分析的结果是一样的。 实验步骤 编译系统的总体分析(算法分析,数据结构设计,优化)→代码实现,分工进行词法分析,语法分析部分→代码测试→结果反馈,修正→系统界面优化设计

作符栈和操作数栈。 LL(1)语法分析的主要函数有:doGrammar()、Grammar()、findRuleIndex()、getVariables()、getStartVariable()、computeFirstSets()、computeFollowSet()、getRuledByLeftVariable()、getTerminals()、getFirstSets()、getFallowSets()等等doGrammar()函数是最主要的函数。它利用LL(1)分析表和符号栈进行语法分析,并处理终极符不匹配和文件提前结束错误。函数处理完成后,得到整个语法树。 Grammar()函数主要进行Rule格式转换。 自底向上语法分析 LR(0)分析方法实现过程 结构如下 LR(0)

相关文档
相关文档 最新文档