C语言课设 贪食蛇 含完整代码 课设报告(5篇)

时间:2019-05-15 08:44:02下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《C语言课设 贪食蛇 含完整代码 课设报告》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《C语言课设 贪食蛇 含完整代码 课设报告》。

第一篇:C语言课设 贪食蛇 含完整代码 课设报告

《c语言课程设计》课程设计报告

课程主题:

聪明的小蛇 Smart Snake 需求分析

【阐述课程设计应该完成的功能】

使用键盘的上下左右键来控制蛇的运动方向,ESC键退出,显示现在得分,三个难度选择(每一关地图不同,小蛇移动速度不同)系统分析和设计

2.1 数据结构的设计和选择的理由

本游戏中涉及的主要数据结构是如何表示运动的蛇、食物状态等问题。

2.1.1 蛇是由一连串举行组成,用结构体数组表示蛇每一节的横纵坐标。用数组实现

struct Snake { int x[N];int y[N];int node;/*蛇的节数*/ int direction;/*蛇移动方向*/ int life;/* 蛇的生命,0活着,1死亡*/ }snake;//这是蛇的结构体

小蛇是在不断的运动的,我们研究蛇的运动可以发现这样的特点: 1.蛇头由键盘控制,在无操作的时候蛇需要以原来的方向继续前进 2.运动时,蛇身后面一节移动到前面一节的位置。2.1.2 关于食物有两个属性: 1.坐标位置

2.状态:存在,或被吃。

(由于三者的存在状态基本相同所以我们用一个结构体表示)struct Food { int x;/*食物的横坐标*/ int y;/*食物的纵坐标*/ int yes;/*判断是否要出现食物的变量*/ }food;/*食物的结构体*/

2.2 系统模块划分和模块结构 开始动画

游戏开始界面 游戏过程界面 游戏结束界面 2.3 流程图

2.4 数据类型、全局变量和函数说明

2.4.1数据类型&2.4.2全局变量 #include “stdafx.h” #include “graphics.h” #include “stdlib.h” #include “conio.h” #include “time.h” #include “stdio.h” #include “snake.h” #pragma comment(lib,“Winmm.lib”)//播放音乐 #ifndef SNAKE_H #define SNAKE_H #define LEFT 'a' #define RIGHT 'd' #define DOWN 's' #define UP 'w' #define ESC 27 #define N 200 #define ENTER 13 #define JACK 'j' #define KING 'k' #define LONG 'l' int score = 0;int Func = 0;int gamespeed = 200;//蛇运行速度 char mx1,mx2;int level=1;char string_score[100];char str[100];

2.5 涉及的函数

static void Init(void);/*图形驱动*/ static void Close(void);/*图形结束*/ static void Game_interface(void);/*游戏界面*/ static void GameOver(void);/*结束游戏*/ static void GamePlay(void);/*游戏过程*/ static void PrScore(void);/*输出成绩*/ static void textdown(void);//选关焦点乡下 static void textup(void);//选关焦点向上 static void choose(void);//选关界面 static void difficult(void);//难度选择 程序测试和运行结果

反复调试 效果良好,能正常运行 课程报告小结

【遇到的问题及解决方法分析等】

4.1小蛇和指示标走过有显示

解决方法:每次都用一块与背景色相同的的矩形覆盖。

4.2食物出现在边界上

解决方法:

if(level==1){ while(food.x%10!= 0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/ food.x++;while(food.y%10!= 0)food.y++;food.yes = 0;/*画面上有食物了*/ } if(level==2){while((food.x%10!= 0)||((food.x>=145)&&(food.x<=510))&&((food.y>=250)&&(food.y<=270)))/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/ food.x++;while(food.y%10!= 0)food.y++;food.yes = 0;/*画面上有食物了*/ }

/这段代码保证了食物不被产生在障碍上 附录 程序源代码:

// mff.cpp : Defines the entry point for the console application.//

#include “stdafx.h” #include “graphics.h” #include “stdlib.h” #include “conio.h” #include “time.h” #include “stdio.h” #include “snake.h” #pragma comment(lib,“Winmm.lib”)//播放音乐

int score = 0;int Func = 0;int gamespeed = 200;//蛇运行速度 char mx1,mx2;int level=1;char string_score[100];char str[100];

static void Init(void);/*图形驱动*/ static void Close(void);/*图形结束*/ static void Game_interface(void);/*游戏界面*/ static void GameOver(void);/*结束游戏*/ static void GamePlay(void);/*游戏过程*/ static void PrScore(void);/*输出成绩*/ static void textdown(void);static void textup(void);static void choose(void);static void difficult(void);int _tmain(int argc, _TCHAR* argv[]){

}

/*图形驱动*/ static void Init(void){ int gd=9,gm=2;

initgraph(&gd,&gm,“ ”);cleardevice();}

/* 开始画面,左上角坐标为(,),右下角坐标为(,)的围墙*/ static void Game_interface(void){ int i;int j;int k;

setcolor(YELLOW);/*setbkcolor(LIGHTGREEN);*/ setlinestyle(PS_SOLID,0,1);/*设置线型*/ for(i=50;i<=600;i+=10)/*画边框*/ { rectangle(i,40,i+10,49);/*上边框*/ rectangle(i,451,i+10,460);/*下边框*/ }

if(level==2){ for(j=150;j<=500;j+=10)

} if(level==3)///*画Level3下两条横向隔断*/ rectangle(j,245,j+10,254);/*画Level2下横向隔断*/ mciSendString(_T(“open 2.mp3 alias mymusic”), NULL, 0, NULL);mciSendString(_T(“play mymusic repeat”), NULL, 0, NULL);choose();return 0;system(“pause”);{ for(j=150;j<=500;j+=10)rectangle(j,180,j+10,189);for(k=150;k<=500;k+=10)rectangle(k,350,k+10,359);} for(i=40;i<=450;i+=10){ rectangle(50,i,59,i+10);/*左边框*/ rectangle(601,i,610,i+10);/*右边框*/ } }

/* 游戏主函数*/ static void GamePlay(void){ int i;srand(time(NULL));/*随机数发生器*/ food.yes = 1;/*1表示需要出现新食物,0表示已经存在食物*/ snake.life = 0;/*活着*/ snake.direction = 1;/*方向往右*/ snake.x[0] = 100;snake.y[0] = 100;snake.x[1] = 110;snake.y[1] = 100;snake.node = 2;/*节数*/ PrScore();/*输出得分*/ while(1)/*可以重复玩游戏,压ESC键结束*/ { while(!kbhit())/*在没有按键的情况下,蛇自己移动*/ { if(food.yes == 1)/*需要出现新食物*/ { food.x = rand()%400 + 60;food.y = rand()%350 + 60;if(level==1){ while(food.x%10!= 0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/ food.x++;while(food.y%10!= 0)food.y++;food.yes = 0;/*画面上有食物了*/ } if(level==2){while((food.x%10!= 0)||((food.x>=145)&&(food.x<=510))&&((food.y>=250)&&(food.y<=270)))/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/ food.x++;while(food.y%10!= 0)food.y++;food.yes = 0;/*画面上有食物了*/ }

if(level==3){while((food.x%10!= 0)||(((food.x < 530)&&(food.x > 135))&&((food.y < 185)&&(food.y > 185)))||(((food.x < 530)&&(food.x > 135))&&((food.y < 379)&&(food.y > 350))))/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/ food.x++;while(food.y%10!= 0)food.y++;food.yes = 0;/*画面上有食物了*/ }

}

if(food.yes == 0)/*画面上有食物了就要显示*/ { setcolor(GREEN);rectangle(food.x,food.y,food.x + 10,food.y-10);}

for(i=snake.node-1;i>0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/ { snake.x[i] = snake.x[i-1];snake.y[i] = snake.y[i-1];} /*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/ switch(snake.direction){ case 1: snake.x[0] += 10;break;case 2:

snake.x[0]-= 10;break;case 3: snake.y[0]-= 10;break;case 4: snake.y[0] += 10;break;} /* 从蛇的第四节开始判断是否撞到自己*/ for(i=3;i 595)||(snake.y[0] < 55)||(snake.y[0] > 455))/*蛇是否撞到墙壁*/ { GameOver();/*本次游戏结束*/ snake.life = 1;/*蛇死*/ } if(level==2){ if((snake.x[0] < 530)&&(snake.x[0] > 140)&&((snake.y[0] < 260)&&(snake.y[0] > 230)))/*蛇是否撞到level2中横向隔断*/ { GameOver();/*本次游戏结束*/ snake.life = 1;/*蛇死*/ } }

if(level==3){ if((((snake.x[0] < 520)&&(snake.x[0] > 145))&&((snake.y[0] < 195)&&(snake.y[0] > 175)))||(((snake.x[0] < 510)&&(snake.x[0] > 140))&&((snake.y[0] < 369)&&(snake.y[0] > 330))))/*蛇是否撞到level3中两条横向隔断*/ { GameOver();/*本次游戏结束*/ snake.life = 1;/*蛇死*/ } }

if(snake.life == 1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/ break;if((snake.x[0] == food.x)&&(snake.y[0] == food.y))/*吃到食物以后*/ { setcolor(BLACK);/*把画面上的食物东西去掉*/ rectangle(food.x,food.y,food.x+10,food.y-10);snake.x[snake.node] =-20;snake.y[snake.node] =-20;

/* 新的一节先放在看不见的位置,下次循环就取前一节的位置*/

snake.node++;/*蛇的身体长一节*/ food.yes = 1;/*画面上需要出现新的食物*/ score += 10;PrScore();/*输出新得分*/ } setcolor(RED);/*画出蛇*/

for(i=0;i

if(snake.life == 1)/*如果蛇死就跳出循环*/ break;

key=getch();/*接收按键*/ if(key == ESC)break;/*按ESC键退出*/ switch(key){ case UP: if(snake.direction!= 4)/*判断是否往相反的方向移动*/ snake.direction = 3;break;case RIGHT: if(snake.direction!= 2)snake.direction = 1;break;case LEFT: if(snake.direction!= 1)snake.direction = 2;break;case DOWN: if(snake.direction!= 3)snake.direction = 4;break;}

}/*endwhile(1)*/ }

/*游戏结束*/ static void GameOver(void){ cleardevice();PrScore();setcolor(RED);setfont(50, 0, _T(“楷体”));outtextxy(200, 200, _T(“GAME OVER”));getch();}

/*输出成绩*/ static void PrScore(void){ setfillstyle(YELLOW);// bar(235, 560, 300, 580);char s[5] = {''};setcolor(RED);setfont(50, 0, _T(“楷体”));outtextxy(200, 600, _T(“您的得分”));sprintf(s, “%d”, score);

} outtextxy(450, 600, s[0]);outtextxy(480, 600, s[1]);outtextxy(510, 600, s[2]);outtextxy(540, 600, s[3]);outtextxy(570, 600,s[4]);static void Close(void){ closegraph();mciSendString(_T(“stop mymusic”), NULL, 0, NULL);mciSendString(_T(“close mymusic”), NULL, 0, NULL);exit(0);}

void textdown(){

}

} break;

break;case 2: setcolor(BLACK);circle(250,320,10);

setcolor(WHITE);circle(250,230,10);Func=0;switch(Func){ case 0: setcolor(BLACK);

setcolor(WHITE);circle(250,275,10);Func++;break;circle(250,230,10);case 1: setcolor(BLACK);circle(250,275,10);

setcolor(WHITE);circle(250,320,10);Func++;

//功能按钮焦点向上 void textup(){

}

static void choose(void){

Init();initgraph(700, 700);setcolor(GREEN);

switch(Func){ case 0:

} setcolor(BLACK);circle(250,230,10);setcolor(WHITE);circle(250,320,10);Func=2;break;circle(250,275,10);

setcolor(WHITE);circle(250,230,10);Func=0;break;case 1: setcolor(BLACK);case 2: setcolor(BLACK);circle(250,320,10);

setcolor(WHITE);circle(250,275,10);Func=1;

break;

setfont(30, 0, _T(“楷体”));outtextxy(220, 150, _T(“Smart Snake”));

setcolor(WHITE);setfont(25, 0, _T(“隶书”));circle(250,230,10);outtextxy(290, 220, _T(“开始游戏”));setfont(25, 0, _T(“隶书”));outtextxy(290, 310, _T(“退出游戏”));outtextxy(150, 400, _T(“当前难度:”));outtextxy(150, 450, _T(“简单”));setcolor(YELLOW);setfont(20, 0, _T(“楷体”));outtextxy(270, 525, _T(“Presented By:漂浮de星儿”));outtextxy(270, 550, _T(“Date:-03-08”));outtextxy(270, 575, _T(“Verson:.1.3(The Final Edition)”));setfont(25, 0, _T(“隶书”));outtextxy(290, 265, _T(“难度选择(默认为简单)”));{

while(true)if(mx1=getch()){

} // 延时(降低CPU 占用率)switch(mx1){ case ENTER:

switch(Func){ case 0: cleardevice();

Game_interface();GamePlay();

Close();break;case 1:difficult();break;case 2:Close();break;};break;case DOWN:textdown();break;case UP:textup();break;

}

} } Sleep(20);

void difficult()//难度选择函数 {

outtextxy(150, 490, _T(“j-简单,k-中等,l-困难”));if(mx2=getch()){

case KING: //按键K

gamespeed=150;switch(level)switch(mx2)gamespeed=200;switch(level){case 1:setcolor(BLACK);

setcolor(WHITE);outtextxy(150, 450, _T(“简单”));level=1;break;{case JACK: //按键J outtextxy(150, 450, _T(“简单”));case 2: setcolor(BLACK);outtextxy(150, 450, _T(“中等”));

setcolor(WHITE);outtextxy(150, 450, _T(“简单”));level=1;break;case 3: setcolor(BLACK);outtextxy(150, 450, _T(“困难”));

setcolor(WHITE);outtextxy(150, 450, _T(“简单”));level=1;break;}break;{case 1:setcolor(WHITE);setcolor(WHITE);outtextxy(150, 450, _T(“中等”));outtextxy(150, 450, _T(“简单”));

}

}

level=2;break;case 2: setcolor(BLACK);outtextxy(150, 450, _T(“中等”));

setcolor(WHITE);outtextxy(150, 450, _T(“中等”));level=2;break;case 3: setcolor(BLACK);outtextxy(150, 450, _T(“困难”));

setcolor(WHITE);outtextxy(150, 450, _T(“中等”));level=2;break;}break;gamespeed=80;switch(level){case 1:setcolor(BLACK);

} setcolor(WHITE);outtextxy(150, 450, _T(“困难”));level=3;break;case LONG: //按键L outtextxy(150, 450, _T(“简单”));case 2: setcolor(BLACK);outtextxy(150, 450, _T(“中等”));

setcolor(WHITE);outtextxy(150, 450, _T(“困难”));level=3;break;case 3: setcolor(BLACK);outtextxy(150, 450, _T(“困难”));

setcolor(WHITE);outtextxy(150, 450, _T(“困难”));level=3;break;}break;Snake.h: #ifndef SNAKE_H #define SNAKE_H #define LEFT 'a' #define RIGHT 'd' #define DOWN 's' #define UP 'w' #define ESC 27 #define N 200 #define ENTER 13 #define JACK 'j' #define KING 'k' #define LONG 'l'

/*蛇的最大长度*/ char key;struct Food { int x;int y;int yes;}food;

struct Snake { int x[N];int y[N];int node;int direction;int life;}snake;#endif

/*控制按键*/ /*食物的横坐标*/ /*食物的纵坐标*/

/*判断是否要出现食物的变量*/ /*食物的结构体*/ /*蛇的节数*/ /*蛇移动方向*/

/* 蛇的生命,0活着,1死亡*/

第二篇:ERP课设报告

《企业资源计划ERP》

课程设计

题目:关于企业实施ERP对人力资源管理影响的探究

班 级 信管 092 专 业 信息管理和信息系统 学 号 3090561053 姓 名 窦 婷 地 点 经济与管理学院实验室

指导老师 朱宗乾

设计日期 2012-6-24 — 2012-6-29

2012 年 春季 学期

录 研究背景、研究意义及研究目标„„„„„„„„„„„„„„„„„„ 3 1.1 设计背景„„„„„„„„„„„„„„„„„„„„„„„„„„„ 3 1.2 设计意义及目标„„„„„„„„„„„„„„„„„„„„„„„„ 3 2 设计内容„„„„„„„„„„„„„„„„„„„„„„„„„„„„ 4 2.1 实施ERP的风险识别„„„„„„„„„„„„„„„„„„„„„„ 4 2.2 人在ERP系统中居主导地位„„„„„„„„„„„„„„„„„„„ 4 2.2.1 ERP系统本质上是一个以人为主的动态开放系统„„„„„„„„„4 2.2.2在ERP实施和应用过程中需要大量的人力资源管理工作„„„„„„5 2.2.3 ERP对人力资源管理提出了更高的要求„„„„„„„„„„„„ 5 2.3人力资源模块设计„„„„„„„„„„„„„„„„„„„„„„„ 6 2.3.1 组织管理„„„„„„„„„„„„„„„„„„„„„„„„„6 2.3.2人事管理„„„„„„„„„„„„„„„„„„„„„„„„„„7 2.3.3 招聘管理„„„„„„„„„„„„„„„„„„„„„„„„„7 2.3.4 考勤管理„„„„„„„„„„„„„„„„„„„„„„„„„7 2.3.5 薪资核算„„„„„„„„„„„„„„„„„„„„„„„„„7 2.3.6 培训管理„„„„„„„„„„„„„„„„„„„„„„„„„7 2.3.7 员工管理„„„„„„„„„„„„„„„„„„„„„„„„„8

2.3.7.1制定职务模型„„„„„„„„„„„„„„„„„„„„„„8 2.3.7.2 进行人员成本分析„„„„„„„„„„„„„„„„„„„„8 2.3.7.3 绩效考核„„„„„„„„„„„„„„„„„„„„„„„„8 2.4 ERP成功实施的人力资源管理条件与对应措施 „„„„„„„„„„„8 2.4.1 企业有稳定的人力资源管理体系„„„„„„„„„„„„„„„ 8 2.4.2全体员工的关注和支持„„„„„„„„„„„„„„„„„„„ 9 2.4.3 坚持人本管理,重视心理契约„„„„„„„„„„„„„„„„ 9 2.4.4 注重长期规划„„„„„„„„„„„„„„„„„„„„„„„9 3 课程设计心得体会„„„„„„„„„„„„„„„„„„„„„„„„10 4 参考文献„„„„„„„„„„„„„„„„„„„„„„„„„„„„10

1、研究背景、意义及目标 1.

1、研究背景

企业实施ERP系统,意味着给会企业带来一场大规模的、深刻的变革。人力资源是企业的重要资源之一,同样的人力资源管理也是ERP系统中的一个重要组成部分。企业实施ERP,是指建立在信息技术基础上,以系统化的管理思想,为企业决策层及员工提供决策运行手段的管理平台。ERP系统集信息技术与先进的管理思想于一身,成为现代企业在信息时代生存、发展的基本运行模式。可以从管理思想、软件产品、管理系统三个层次给出它的定义:一是在MRPⅡ(Manufacturing Resources Planning)基础上进一步发展而成的面向供应链(Supply Chain)的管理思想;二是综合应用了客户机服务器体系、关系数据库结构、面向对象技术,图形用户界面,网络通讯等信息技术成果,以ERP管理思想为灵魂的软件产品;三是整合了企业管理理念、业务流程、人力物力、计算机硬件和软件于一体的企业资源管理系统。企业资源计划系统是企业进行管理创新提高管理水平,实现企业管理功能整体优化的重要途径。

以往ERP在企业管理中的发展进程,始终是以生产制造及销售过程为中心的。而作为企业资源:人、财、物之首要的人力资源,长期以来一直作为一个孤立的系统独立于企业核心管理系统之外。在竞争日益激烈的今天,如何吸引优秀人才、合理安排人力资源、降低人员成本、提高企业竞争力。已经成为企业管理者首先需要面对的一个问题。成功实施ERP可以使库存下降、停工待料减少、成本降低、生产能力提高,从而带来巨大经济效益,这使很多企业对ERP产生了浓厚兴趣。在知识经济时代,落后的信息技术意味着将被市场淘汰,企业要想长久地发展,必须实施ERP成为不争的事实。因此,如何将ERP与企业的内部条件和外部环境有机地结合起来,是ERP成功的首要因素,而其中人力资源问题首当其冲。

1.2研究意义及目标

企业实施ERP系统,可以实现管理方式的重大变革,进一步体现现代企业流程科学化、管理精细化、信息集成化的管理思想。它往往意味着,公司将不再需要原有数量的人员来完成工作,但是他们必须飞跃性地在技术上更加娴熟,了解更多的经营知识,必须搞清楚如何借助于新系统来完成手头上的工作任务,必须 3

要知道他们对ERP所做的一举一动会对企业中的其他部门产生什么影响,还必须去学习新型的分析方法及申报手段。总之,他们必须学会在一个完全不同的、更加复杂的环境中生存。任何改革都会面对来自雇员的抵抗,抵抗变化是人类的本性。这种抵抗可能是对新系统及其优势的忽视,对失业或对新技术的惧怕(对自身被淘汰的惧怕)等等。如果这些担心和焦虑不被合理地提前解决,肯定会给新系统的实施带来灾难。所以研究企业实施ERP对于人力资源的研究对于企业的生存及长远发展意义重大。

企业资源计划系统(ERP)以其巨大的潜在经济效益在国内外得到广泛的应用,人力资源管理系统功能的完善和发挥对ERP的成功起举足轻重的作用。研究企业实施ERP对人力资源管理的影响,就是要通过了解这些影响,提前作出应对措施,来避免因实施ERP而导致企业业绩下滑、组织机构涣散、发展状况变差等不良状况,从而帮助企业实现业绩增加、组织机构紧密有序、更好更快地发展。

2、研究内容

2.1 实施ERP的风险识别

企业人力资源风险管理始于风险识别。ERP系统是面向整个企业的,它需要所有部门和使用者的支持,而不仅仅是高层管理人员的认同和支持。因此,使各个部门都能认同ERP是系统协调员所面临的最困难的任务之一。ERP的实施需要许多人的通力合作——软件经销商、外部的顾问、内部的实施小组、终端操作人员以及公司的管理层。一个典型的实施小组的结构为:最顶端的是执行委员会(负责人是CIO或COO,或者是其他高层管理人员),而后依次是项目管理小组、技术支持小组和管理支持小组、工作组,最底端是普通员工。所以任何一个环节出现问题,ERP 的实施都会受到影响。所以针对人力资源管理来说,必须把整个ERP实施过程所涉及的所有人员都协调好,使之各司其职,ERP的成功实施才有保障。

2.2 人在ERP系统中居主导地位

2.2.1 ERP系统本质上是一个以人为主的动态开放系统

ERP系统是一个以人为主的人机系统,人在系统中发挥决策主导的作用。人是ERP系统的输入端,是ERP系统要管理的重要资源,同时人又是其它企业资源 4 的运筹整合与使用者。ERP是一种处理逻辑、一种方法论、一种管理哲学,它为企业管理人员提供了一套科学有效的管理工具,只有人们真正地理解了ERP的思想和逻辑,只有最终用户面对企业实际生产中的问题,加强相应的采购管理、库存管理、财务管理、生产管理、人力资源管理、销售管理等才能使ERP创造出明显的效益,使企业更快地收回投入ERP系统的资金,产生更大的效益和更长远的发展。ERP系统同时也是一个动态的系统,首先系统赖以运行的数据是动态的,作为系统重要组成部分的人一一管理人员和操作人员,也是动态的。管理人员和操作人员的创造性和规范性将决定系统的运行效果。再者ERP系统更是一个开放的系统,系统必须适应企业并促使企业适应外部环境,反过来外部环境是不断变化的,企业要适应变化,作为企业资源计划系统的ERP也必须变化,它不但不能成为束缚企业的因素,而且要能够敏捷地使企业变化,促使企业更快更长远地发展。因此ERP不但对软件系统有较高要求,而且要求管理人员和操作人员要不断进取,快速适应企业的不断变革和新旧系统的切换,推动系统应用不断向前发展,从而推动企业不断发展。

2.2.2在ERP实施和应用过程中需要大量的人力资源管理工作

实施ERP必须和企业业务流程重组(BPR)结合起来,没有BPR实施ERP只是换汤不换药,只是将原有的手工系统换成了一个相对快速的计算机系统,远远达不到企业实施ERP的目的。在BPR过程中要对企业的整个业务流程进行全面的审视,根据公司战略,重组业务流程,然后在此基础上进行组织结构的调整、人力资源结构的调整,进而是岗位职责的划分,最后是工作分析与绩效考核。在这个过程中,需要耗费相当大的人力资源,而人力资源管理工作的成效将直接决定BPR与ERP的程度和效果,ERP系统的实施是一个管理项目而非仅仅是一个IT项目,员工适应新的工作流程和观念的转变都需要大量持久的教育和培训,需要耗费大量的人力物力以及财力,因此人力资源的管理在ERP的成功实施过程中占有举足轻重的作用。

2.2.3 ERP对人力资源管理提出了更高的要求

ERP项目是一个企业管理系统工程,努力提高企业全体员工的知识水平,充分调动和发挥人的主动性、积极性和创造性,积极营造人与企业一起成长、共同发展的良好环境是现代企业管理的新理论,也是企业生存与发展之本。应用ERP 5

要求企业加强以人为本的管理工作,建立相应的竞争机制、激励机制和约束机制,把应用ERP与制定企业经营发展战略和全体员工的业绩考核有机地结合起来,促使员工能感受外部压力,从而自觉地投入到ERP应用与心得工作机制中来。

人力资源管理的职能之一就是帮助业务人员提升解决问题的能力,高效、快速地对企业各个层次的员工进行管理。应用ERP要求企业通过各种形式,不同程度地使全体员工接受新思想、新方法和新机制、新系统的培训教育,以使他们适应系统变化,促使系统应用深入和组织架构的调整。为适应ERP系统带来的改变,企业必须在组织架构和部门职责上做出相应的调整,在改革中会涉及到部门职能的重新划分、岗位职责的调整、业务流程的改变、权力利益的重新分配等复杂问题,如果企业不能妥当地处理这些问题,将会使企业的处于不稳定的状态,这对于企业的张远发展是极其不利的。由于使用计算机系统的人员层次结构有了很大的变化,原来是管理人员重复劳动,现在管理人员把主要精力放到更具创造性的工作上来,这样就能为企业创造出更多的利润,员工自身也能受益,达到员工与企业共同发展的双赢局面。企业要进行新的工作分析,以此为根据调整人力资源目标,对企业员工制定相应的引进、提拔、培训等计划。

由于企业组织架构、业务流程和人力资源结构的调整,企业必须对业绩考评体系进行相应的调整,以适应新的岗位职责和业务要求。能否顺利地将原有的业绩考评体系转变到适应新系统的业绩考评体系是对人力资源管理部门的一个考验,也是企业实施ERP后人力资源管理成败的关键所在。2.3人力资源模块设计

目前ERP中的人力资源系统功能已经从单一的工资核算、人事管理发展到可以为企业的决策提供帮助的全方位解决方案。这些领域包括人力资源规划、员工考核、劳动力安排、时间管理、招聘管理、员工薪资核算、培训计划和差旅管理等。并同ERP中的财务、生产等子系统一起组成高效的、具有高度集成性的企业资源管理系统。

2.3.1 组织管理。该模块清晰的显示组织机构图,组织结构、职能、成立日期、工作范畴一目了然,便于管理。

2.3.2人事管理。该模块记录了公司所有员工的档案,便于领导对员工进行统筹管理,只有最高领导有权使用本功能。领导可以从不同角度对员工进行分类 6

查看,用其所长,避其所短,充分发挥每一位员工的聪明才智。从而达到最佳的用人效果。

2.3.3 招聘管理。人才是企业最重要的资源,拥有优秀的人才才能保证企业获得持久的竞争力。招聘系统一般从以下几方面提供支持:一是通过信息取舍,优化招聘过程,减少业务工作量;二是通过信息比对,对招聘成本进行归集、分析,从而降低招聘成本;三是为选择聘用人才的岗位提供辅助信息。并有效地帮助企业进行人力资源的挖掘。

2.3.4 考勤管理。一则能通过权限分配由最终用户进行考勤输入,由关键用户进行考勤校队及工资核算:二则与时间管理壹接集成,方便查看及管理。同时,根据所在国或当地的日历,灵活安排企业的运作时间以及员工的作息时间表。对员工加班、作业轮班、员工假期、以及员工作业顶替等作出一整套周密的编排。2.3.5 薪资核算。一则能根据公司跨地区、跨部门、跨工种的不同薪资结构及处理流程制定与之相适应的薪资核算方法:二则与时间管理壹接集成,能够及时更新,对员工的薪资核算动态化;三则通过和其他块的集成.自动根据要求调整薪资结构及数据,履行“回算功能”。当薪资核算过程结束之后.员工的有关上一薪核算期的主数据发生变化,在下一薪核算期内,回算功能会自动触发,进行修正。工作管理。运用远端考勤系统,可以将员工的实际出勤状况记录到主系统中。并把与员工薪资、奖金有关的数据导入薪资系统和成本核算中。

2.3.6培训管理。从员工技术现状到培训计划、实施、评审、完成形成一整套完整的管理体系。实现培训管理程序化、科学化、数字化。根据担任该职位员工的资格和条件,系统会提出针对本员工的一系列相应培训设计方案,如遇机构改组或职位变迁,系统会及时提出对应的一系列的培训变动。

2.3.7员工管理。

2.3.7.1制定职务模型。包括职位要求、升迁路径和培训计划,根据担任该职位员工的资格和条件,系统会提出针对本员工的一系列相应培训设计方案,如遇机构改组或职位变迁,系统会及时提出对应的一系列的职位变动或升迁建议。

2.3.7.2 进行人员成本分析。可以对过去、现在、将来的人员成本做出细节性分析及总评性分析,在此基础上。对相应的成本做出数据化升降趋势预测。并 7

通过ERP集成环境,为企业成本分析提供依据。对于企业人员、组织结构编制的多种方案.进行模拟比较和运用分析,并辅之以图形的直观评估,辅助管理层做出最终决策。

2.3.7.3绩效考核。为激发员工工作积极性、保留优秀的员工而建立的考核机制,为高效员工创建晋升机会,恰当的薪酬激励可以让员工个尽心尽力地工作,提高工作效率、不断创新。.4 ERP成功实施的人力资源管理条件与对应措施

人力资源管理信息化是ERP实施后企业人力资源管理的主要方式,该过程以先进的电子信息技术为手段,以软件系统为平台实现低成本、高效率、全员共同参与管理过程。实现人力资源战略地位的全面、开放的人力资源管理新模式。人力资源信息化作为知识经济时代的产物。在以ERP技术为平台基础上,它的需要企业具备以下几个条件:

2.4.1 企业有稳定的人力资源管理体系。企业需要有扎实稳定的管理体系,保证各项命令都能认真贯彻执行,只有这样才能让每位员工在企业里安心工作并因才使用。促进企业不断成长。在这样的前提下可以考虑更进一步的信息化。2.2 企业人力资源管理人员应具备相当的业务水准与操作技能。既要有人力资源开发与管理的专业知识和实务经验,又同时具备ERP系统的操作技能,即复合型人才。人力资源信息化要求管理人员遵循一定的规范。如实做好对工作步骤和流程的记录工作。

2.4.2全体员工的关注和支持。人力资源管理信息化不只是人力资源部门的事情.需要生产、研发、财务等部门的协助和配合。作为企业领导者.要以发展的眼光看到它能给企业未来壮大集聚的巨大效益,积极给于支持.加大资金投入.配备合适人员。对于企业其他员工。也要充分认识到信息化给自己带来的实惠。通力配合人力资源部门信息化改革。人力资源管理软件的导入及运用无疑给企业带来了前所未有的便利与效率,但是管理毕竟是出自实践的,如何将软件和企业自身管理调度之特点尤其是自身人力资源管理结构及流程恰当结合起来。最大限度地发挥其功能,这才是解决问题的重心所在。

2.4.3 坚持人本管理,重视心理契约。“以人为本”的管理思想不仅仅是传统管理所需的,既是企业实施人力资源管理信息化,这一思想仍要被重视.毕竟 8

再好的机器也要靠人去操作。管理软件是“一把手”。人性管理也是“一把手”,一定要两只手一起抓,只有这样,才能使企业更快地适应信息化,提高人力资源管理的工作绩效。心理契约是靠沟通、信旗、承诺、感情联系来实现的,基于国际互联网的在不确定环境下的柔性沟通将成为未来组织的发展方向,因此企业实施人力资源管理信息化是一项改革与挑战。如果不能合理有效的与员工进行沟通,则有可能会破坏他们的心理契约,进而导致满意率下降、忠诚度下降,影响企业的绩效。

2.4.4 注重长期规划。实现持续发展。很多企业在导人人力资源管理信息化后往往产生一劳永逸的思想。忽视后期规划和发展。其实成功的人力资源管理信息化建设是需要长期给予关注和规划的。只有审时度势地不断改进它的工作,才有可能将它对企业潜移默化的影响转化成持续的经济效益。ERP系统注重企业管理的全面性、系统性,重视企业与外界的关系,支持全球化经营等,同时ERP还能使企业以更低的成本为客户提供更多的服务。成功地选择和实施ERP可以优化企业的业务流程,改善数据信息系统,有效地提高企业的管理、工作及设备等效率,实现快速信息传递与共享,从而达到管理水平的全面提高,使企业活力及竞争力加强。

3、课程设计心得体会

人力资源管理在信息化、科技化的今天越来越要求快速高效的管理,开发适合企业需要的人力资源管理系统已是非常重要的工作。而ERP系统的实施注定要对企业的各个管理部门进行一次深入的变革,人力资源作为企业最最重要的资源之一,其管理理念当然也要随之变化。

首先要对ERP实施下的人力资源风险进行分析,只有清楚地了解了风险,才能懂得如何更好地避免风险,从而为企业避免损失。

其次,企业要将传统的人力资源管理模式信息化,企业实施ERP就是一个实现信息化管理的过程,因此人力资源管理也要随之信息化,才能使整个ERP系统高度集成、高度信息化,实现更高效和快速的管理。

最后,要对原有的人力资源模块进行改革和重新设计,设计出适应ERP系统实施的新模块,为企业成功实施ERP奠定坚实的基础。在ERP运行的过程中还要随着ERP系统的改变而迅速作出响应,从而保证企业能够快速适应市场变化,保 9

证企业更好地、长远地发展。

在课程设计过程中我查阅了相关资料,对原有的ERP知识有了更加透彻的理解。同时对ERP实施下的人力资源管理业有了一定的认识。当然,可能我的许多认识和理解可能还不是很成熟甚至是错误的,希望老师能予以批评指正,帮助我更好地提高。

4、参考文献

[1]贺军.ERP-HR系统在人力资源信息化建设中的应用【J】.湖南电力,2007,27(1):11-14.

[2]陈启申.ERP—从企业内部集成起步(第二版)【M】.电子工业出版社2012 [3]池续航.对ERP实施现状的思考【N】.中国计算机报,2000—10—05. [4]杨体仁,祁光华.劳动与人力资源管理总览【M】.北京:中国人民大学出版社,1999.

[5]李严锋.对ERP中人力资源管理的思考【J】.云南财贸学院学报,2010(5). [6]黄燃东.ERP/MRPII环境下的人力资源管理【J】.企业管理,2001.(4):94.

[7] [荷] 诺伯特·韦尔伯.成功的ERP项目实施[M].北京:机械工业出版社,2003.

第三篇:财务会计课设报告

武汉理工大学《财务会计》课程设计说明书

财务会计手工模拟实验及感悟概述

1.1实务背景 作为一名未来的会计人员,我们现在才刚刚起步,为了更好的掌握会计学知识,我们进行了财务会计课程设计。我们进行模拟实验的是一家国有中型企业——宁电修造厂,注册资金800万,主要以生产为主,兼营运输业务。该厂下设铸造、机加工、金工、装配四个基本生产车间和一个机修辅助生产车间及一个小型运输队。我们主要是对该修造厂2012年12月份发生的所有业务进行核算。核算要求根据科目汇总表定期登记总账,采用科目汇总表账务处理程序,每10天汇总一次。

1.2实训目的 我认为此次实训的目的是为了将“教学”与“实践”相结合,提高我们的动手能力,增强我们对会计知识进一步理解,培养我们对会计知识的灵活运用,以便在以后的就业时不至于“手慌脚乱”,以便提高我们工作时与专科或培训机构的学生的竞争力。

1.3实训意义 在刚刚结束的两周计算机会计课程设计和此次完成的手工做账会计相比,此次实训更加让我感觉到我即将成为一名会计人员。虽然在技术上,电算化比手工做账要方便很多,但是,手工做账更加培养了一名会计人员的耐心和细心。这也是作为一名会计人员必须具备的素质。它使我加深理解了会计核算的基本原则和方法,将所有的基础会计、财务会计等相关课程进行综合运用。它还让我了解会计内部控制的基本要求,掌握从理论到实践的转化过程,熟练掌握了会计操作的基本技能,将会计专业理论知识和专业实践有机的结合起来,开阔了我的视野,增进了我对企业实践运作情况的认识,为我毕业走上工作岗位奠定坚实的基础。具体操作

2.1凭证处理

2.1.1审核原始凭证

在原理上主要指审核原始凭证的真实性、合法性、合理性、完整性和正确性。但在此次的实务中主要审核的是实验书后面附带的原始凭证是否完整,包括张数是否完整和内容

是否完整。因为可能存在缺页或破损情况,故需要进行简单查看,其次,部分原始凭证的金额、日期、具体数据需要计算填写补充,要仔细审核完善。

2.1.2填制记账凭证 填制记账凭证时进行所有账务处理的基础,所以正确填写尤其重要。此次实务中,填写的记账凭证共计229张。因为是根据科目汇总表登记总账,且要求分旬编制科目汇总表,所以先填制前十天的记账凭证。实务中2012年12月01日至12月10日的业务为记字001号——记字053号记账凭证。在编制记账凭证时要注意记账凭证各项内容必须完整,记账凭证应该连续编号且记账凭证的书写应清楚、规范。填制记账凭证时若发生错误,应该重新填制。填制完经济业务事项后,如有空行应当自金额栏最后一笔金额数字下的空行处至合计数上的空行处划线注销,我采取的是借贷方各划线注销。填制记账凭证必须要细心,填制完还要进行核对,看时间、摘要、分录、金额大小及方向、附单据数是否错误,合计栏的金额前是否带有“¥”。

2.1.3原始凭证粘贴

填制完记账凭证,就要对其原始凭证进行粘贴,粘贴时为了方便装订,自左往右依次排列成鱼鳞状粘贴。粘贴时要注意不可以让原始凭证超出记账凭证,一定要注意美观。粘贴完以后要核对记账凭证中附单据数与原始凭证数是否一致。

2.2 账表处理

2.2.1登记日记账、明细账

完成了第一步的填制记账凭证工作,接下来根据记账凭证的每一笔业务填制银行存款、现金日记账,和相应的原材料、库存商品、往来账户等明细账。填制之前,首先得根据期初余额先开设各明细账的账户,银行存款和现金日记账在登记时要按照业务发生的时间顺序,逐日逐笔顺序进行登记。而原材料、库存商品、往来账户等明细账通常采用活页式账本,方便随时的添加业务,也无需当每笔发生时都结出余额。填制时,如果当当页已写完,需在最后一行摘要写“转次页”并结出借贷方及余额,而在下一页以“承上页”并写下前门的“借”、“贷”方,及余额的金额。另外,当填制时发现金额错误须用红字划掉,并用蓝字作以改正。对于库存商品、原材料、包装物、低值易耗品我们采用的是数量金额式的账簿登记的明细账;管理费用、财务费用、销售费用、生产成本——机修车间的明细账采用的是十六栏式明细账簿;生产成本——DZW-A、生产成本——DZW-B、生产成本——DZW-C、生产成本——铸造车间采用的是八栏式明细账;制造费用采用十三栏式明

细账。

2.2.2编制科目汇总表、登记总账

接下来,根据每一张记账凭证编制相应的科目汇总表。可以先将各会计科目用‘T’字型账户在草稿上结出其‘借’、‘贷’方发生额,然后再填科目汇总表。先根据前十天的记账凭证确定会计科目,然后分别计算出借贷方的金额,保证科目汇总表的借方发生额与贷方发生额相等后,说明计算无误,再登记科目汇总表。

完成科目汇总表的登记后填制总账。在填制总账之前,要先根据期初余额建立总账,注意填写时直接填余额及方向,借贷方表示发生额,此处不可以填写。建总账时,要防止漏记、错记,所以需要很认真的核对无误后再填入账簿。建好账以后就登记前十天的总账,因为是按照科目汇总表登记的总账,所以种类写“科汇”。总账只需要进行三次登记,没有发生额只有期初余额的也要进行月结,没有期初余额的按发生时直接登记。

2.2.3编制三表

总账的填制工作完成后,就得开始核账了,记账凭证与各明细账、明细账与明细账、总账与明细账之间核对,从而达到账账、账证、账实合一。核对无误后,就可以根据总账月末余额编制试算平衡表,要求做到期初借方余额与期初贷方余额、本期借方发生额与本期贷方发生额、本期借方余额与本期贷方余额都分别相等。在准确无误的情况下,编制资产负债表和利润表、现金流量表等财务报表。

2.3装订处理

最后一步是整理与装订记账凭证、总账和明细账,装订工作是个细致活,采用裁、剪、叠等方式将其整理好,达到记账凭证的上、左、下的整齐统一。在装订时,我们先要用打孔机将记账凭证打孔,然后按每十天的凭证分开穿线,最后贴上封皮。对于总账和明细账也要整理归类后按相同方法装订。装订出来的账本尽量做到美观大方。总结

3.1手工做账注意细节

3.1.1填写要求规范

在填写时,一定要注意填写字迹清楚,不能乱涂,选择正确颜色的笔填写,表示红字时要用红笔。摘要应该简明扼要,要能说明问题。数字要写在偏下方,大概占整格的1/2到2/3左右,以便修改。填制记账凭证时,科目要力求完整。还有划线也要注意笔的颜色,记账凭证划线用黑笔,明细账和总账结账要用红笔,且现金日记账、银行存款日记账、总

账用双红线,其他明细账用单红线。

3.1.2错帐更正方法

在记账过程中,可能由于种种原因会使账薄记录发生错误,我们要运用正确的更正方法对错误进行更正,一般有划线更正法、补充登记法、红字更正法三种,而不是填补、挖改。

我采用的最多的是划线更正法,划线更正法主要适用于编制的记账凭证没有错误,而是在登记账簿时发生错误,导致账簿记录的错误。更正时将错误的文字或者数字划红线注销,但必须使原有字迹仍可辨认;然后在划线上方填写正确的文字或者数字,此处省略了记账人员签字盖章工作,但在工作过程中不可以省略。对于错误的数字,应当全部划红线更正,不得只更正其中的错误数字。对于文字错误,可只划去错误的部分。

3.1.3对帐

在实训中我们必须做的是原始凭证与记账凭证、各明细账与总账核对等。这是会计工作中必不可少的步骤,是企业进行有效控制的一种手段。在实训中,可能会因为某些原因忽略这一步骤,所以要引起我们的注意。

3.2手工做账感悟

手工做账是一门细活,更是一门艺术。在整整的两周做账过程里,我感觉无比的艰辛,但又充满了快乐。

首先,书写要规范,内容要完整,其次,要保证正确性。为了做账,我们每天差不多晚上熬到一两点,不停的修改核对,直到正确为止。每次为了美观,只要发现错误就把整页撕下来重新填写,这样相当耗时费力,我觉得我在做账过程中还是没有正确掌握修改方法,或者说是知道修改方法却为了美观宁愿重写也不修改,这在以后工作中是不可取的作法。

我是一个比较粗心的人,所以在这次实训中吃了不少苦,因为登记管理费用明细账时采用的是十六栏式的账页,比较长,所以我按项目填写时总是错位。还有现金日记账和银行存款日记账计算余额时有时候会把发生额的借贷方搞错,导致错误,一旦不发现就会直接影响后面所以的余额错误,在登记科目汇总表时也是一个细活,因为要先在草稿纸上计算出每十天各个科目借贷方发生额,要先试算平衡后才登记,所以工作量相当大。因为每十天的科目是存在差异的,所以要一一检查核对,不能缺少或多余。尤其在下旬12月21里到12月31日,包含了大量的结转的记账凭证,其涉及的数据相当多,管理费用有几十

个明细,一个也不能遗漏,这绝对是考验会计细心的时候,所以我丝毫不敢掉以轻心,计算了三四遍确保完全正确后才填写。

我觉得手工做账完全是靠会计人员自己去检查核对错误,不像电算化会计可以直接依靠软件的功能进行试算平衡来发现错误,所以这些过程是相当复杂而又细致的,需要我们用十足的耐心和细心来对待。而且,会计人员是要求保证会计资料的真实性的,我刚开始填写凭证时,发现错误总会习惯性的去描摹来改正错误。后来才知道,这犯了会计的大忌,切忌不可以对涂改,要用正确的方法进行更正。这也让我对会计真实性有了一个更加明确的认识,它不仅要求我们不做假账,还要求我们在账页上保证数据真实性,即使错误也要留有错误的痕迹。

平时我们只能纸上谈兵,思维的认识基本上只是局限于课本的范围之内,这就导致我们对会计知识认识的片面性,使得我们只知所以然,而不知其之所以然。这些都是十分有害的,其极大地限制了我们会计知识水平的提高。这将近三周的实训让我对填制原始凭证,根据原始凭证填制记账凭证等工作有了更进一步的认识,并在实际操作过程中找出自身存在的不足,对今后的会计学习有了一个更为明确的方向和目标。

作为一名大三的学生,面对目前就业形势的严峻,我常常会很关心会计以后到底就业前景如何,而忘了最根本的东西,就是学好基本的会计知识,只有知识学得扎实了,以后就算在再怎么严峻的形式下也会脱颖而出。我总感觉我还只是一名学生,一名只是学着会计学知识却什么都不会的学生。在实训之前,当我拿着一摞一摞的账本的时候我既激动又高兴,觉得自己就是一名会计了。实训之后,感受又深刻了一些,做会计,看似简单,登帐而已,但却有着很多学问。当我把所有的疑惑弄清,拿着填满的账本,不仅是激动、高兴,更多的是心酸之后的欣慰。这种收获可能是永远也无法从书本上获得的,只有自己动手做了,才会清楚其原理和步骤。所以,我始终觉得会计是一门实践性很强的学科。如今,企业琳琅满目、数不胜数。每一个企业,只要不是个体工商业户,就都需要会计,因为每月都要做帐报表,并且要按照税务要求的时间、格式和内容上报,这就要求,会计人员必须要会计专业知识和税务知识,当今的会计,不是随便拉个人就能干了的。会计人员,不能单纯只会做帐、会报表,应该全面提高自身素质,不但应当熟练掌握会计法和会计知识,还应当熟练掌握税法和税务知识,还要多向有经验的会计学习,取人之长,补己之短,从实践中积累丰富的工作经验,这样才能遇事不惊,游刃有余。所以这对我们的要求更高。

无论何时何地,我觉得会计都需要不断学习充实自己才会让自己不被淘汰,我们还只是未出茅庐的大学生。如何在这时代的潮流站住脚,我觉得我以后要做的还有很多。

希望在接下来的日子里,学校能给我们更多的实训课,以便我们能不断地查漏补缺,这样更能帮助我们学好会计这门课,为以后走向社会奠定良好的基础。当然,我自身也要把握各种机会去锻炼自己,不仅要会做账,还要会分析,会运用。

通过此次实训,我深刻理解了什么是会计,会计不仅仅是一份职业,更是一份细心+一份耐心+一份责任心=人生价值的诠释。同时我也认识到要做一个合格的会计工作者并非我以前想象的那么容易,最重要的还是细致严谨。社会不会要一个一无是处的人,所以我们要更多更快得从一个学生向工作者转变。

第四篇:数据结构课设报告

华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

课程设计报告

题目:华科校园导航

课程名称:数据结构课程设计 专业班级: 学

号:

名: 指导教师: 报告日期:

计算机科学与技术学院

华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

任务书

数据结构是计算机科学技术与信息安全等专业的一门重要专业基础课,牢固掌握数据结构的基础知识,熟练地运用数据结构的思想与技术方法解决实际应用问题是是本课程学习的基本任务与目标。而课程设计是实现这一学习目标的重要环节和组成部分。通过课程设计的训练,使学生加深对数据结构知识的理解,牢固掌握其应用方法,并合理灵活地解决一定实际问题,增强和提高综合分析问题与解决问题的能力。

设计题目

华科地图导航系统。设计目的

掌握图结构的物理存储结构、基本算法及其算法在相关领域中的应用。

设计内容

华中科技大学(Huazhong University of Science and Technology),简称华中大,坐落于湖北省武汉市,学校面积7000余亩。华科大校园具有典型的工科院校特征,道路笔直,建筑面积方方正正,这为构建电子地图提供了极大的便利。本次课程设计要求以华中科技大学为背景,设计一个简单的华科地图导航程序,可以方便的为用户提供搜索、导航等功能。

设计要求

基本要求:

1.输入地点名,可以在地图中以一定标记标示出地点所在的位置 2.鼠标移动到指定建筑处显示建筑名称

3.输入或点击起点和终点,找出最短的路径,并在图上描出路径,路径不能脱离道路

4.输入起点,输入特定的地点,如食堂,超市能够找到最近的两到三个 5.地点至少要包括清单中所列的位置 实验提示:

1.将每个十字路口或特定建筑看作节点,构建图模型,两个节点的边即是一个路段。对于某些节点,可能具有特定的意义,例如“图书馆”,可以为其设置一个名称;而对于大多数节点,例如普通路口,可能并不需要名称,只是用来构建图模型的一个节点。信息的录入可能需要人为输入,需要编写辅助程序。辅助程序可以如下构造:

程序首先载入一张图片并显示。程序具有多个文本框,当点击图片上

I 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

特定点时,获取该点的坐标,第一个文本框显示该点的图像坐标,第二个文本框可以输入地点名,第三个文本框用来输入节点编号,剩下的文本框用来输入直接相邻的节点编号或者节点的属性。点击“确认”后可以将信息保存到磁盘。这样可以实现坐标、节点编号和位置名称的绑定,为实验构图采集数据。

2.特定建筑只需考虑建筑大门所对应的路段上的一点。例如“图书馆”建 筑,可认为“图书馆”位于图书馆大门和学校道路相接处,简化处理。当鼠标移动到“图书馆”附近时,找到距离最近的具有名称的节点显示 即可。

3.对于存在折线的路段,将其看作多段处理;对于细碎的弯折路线,当作 直线简化处理。

参考文献

[1] 严蔚敏,吴伟民.数据结构(C语言版).北京: 清华大学出版社,1997 [2] 王晓东.计算机算法设计与分析.北京: 电子工业出版社, 2007 [3] 严蔚敏,吴伟民,米宁.数据结构题集(C语言版).北京: 清华大学出版社,1999 [4] Elliot B.Koffman and Paul A.T.Wolfgang..Objects, Abstraction, Data Structures and Design: Using C++.October 2005, ©2006

II华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

目录

任务书.............................................................................................................................I 1 系统需求分析与总体设计........................................................................................1 1.1系统需求分析.................................................................................................1 1.2系统总体设计.................................................................................................1 2 系统详细设计............................................................................................................2 2.1 有关数据结构的定义....................................................................................2 2.2 主要算法设计................................................................................................3 3 系统实现与测试........................................................................................................4 3.1 系统实现........................................................................................................4 3.2 系统测试........................................................................................................6 4 总结与展望..............................................................................................................13 4.1 全文总结......................................................................................................13 4.1 工作展望......................................................................................................13 5 体会..........................................................................................................................15 参考文献......................................................................................................................16 附录..............................................................................................................................17

华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告 系统需求分析与总体设计

1.1系统需求分析

华中科技大学(Huazhong University of Science and Technology),简称华中大,坐落于湖北省武汉市,学校面积7000余亩。华科大校园具有典型的工科院校特征,道路笔直,建筑面积方方正正,这为构建电子地图提供了极大的便利。本次课程设计以华中科技大学为背景,设计一个简单的华科校园地图导航程序,可以方便的为用户提供搜索、导航等功能。该系统的具体的功能为:

1.输入任意地点名,可以在地图中以一定标记显示出该地点所在的位置;

2.输入任意起点和终点,可以在地图上查询并显示从起点到终点的最佳路线以及最短距离;

3.输入任意地点名,可以在地图上查询并显示出距离该地点最近的食堂或者超市,并给出从该地点到达食堂或者超市的最佳路线和最短距离; 4.鼠标移动到地图上的某一地点是,显示该地点的名称和简介; 5.系统能为用户提供华科整体地图、系统使用说明、设计信息。拥有以上的功能的导航应用将给不熟悉华科的用户提供极大的便利,是人们所需要的。

1.2系统总体设计

系统的总体模块图如图1所示。用户进入系统后,在窗口主界面可以选择“地图导航”、“进入地图”、“使用帮助”“关于导航”、“退出导航”等功能。在“地图导航”功能中,用户可以查询某个地点或者某个地点附近最近的食堂和超市、到达该地点的最佳路径和距离等,在过了一定时间后,系统会提示用户选择返回“地图导航”界面还是进入“进入地图”功能,然后系统根据用户的选择进入相应的界面;在“进入地图”功能下,用户可以浏览整个华科地图并且查询某个地点的名称和简介;在“使用帮助”下,用户可以阅读该系统的使用说明;在“关于导航”下,用户可以了解该系统的设计信息;用户点击“退出导航”即可退出该系统。

华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

图 1 系统详细设计

2.1 有关数据结构的定义

华科校园导游系统是用图结构来实现的。具体数据结构如下: 定义景点的结构类型 typedef struct { 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

Point point;char name[20];char num;}Vexs;

定义景点坐标的结构类型 typedef struct { int x;int y;}Point;

定义图的结构类型 struct MGraph {

};

声明无向图的邻接矩阵类型 MGraph G[100],G0,G1;

初始化所有景点信息,存放在图G1中 int CreateUDG1(MGraph &G1);Vexs vexs[MAX_VEX_NUM];

//顶点向量 int vexnum,arcnum;

//顶点数,边数

int arcs[MAX_VEX_NUM][MAX_VEX_NUM];//邻接矩阵

2.2 主要算法设计

Floyd算法:void Floyd(void);

通过一个图的权值矩阵求出它的每两点间的最短路径矩阵。

从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按一个公式,构造出矩阵D(1);又用同样地公式由D(1)构造出D(2);„„;最后又用同样的公式由D(n-1)构造出矩阵D(n)。矩阵D(n)的i行j列元素便是i号顶点到j号顶点的最短路径长度,称D(n)为图的距离矩阵,同时还可引入一个后继节点矩阵path来记录两点间的最短路径。

采用松弛技术(松弛操作),对在i和j之间的所有其他点进行一次松弛。所以时间复杂度为O(n^3);其状态转移方程为map[i,j]:=min{map[i,k]+map[k,j],map[i,j]};map[i,j]表示i到j的最短距离,K是穷举i,j的断点,map[n,n]初值应该为0,或者按照题目意思来做。当然,如果这条路没有通的话,还必须特殊处理,比如没有map[i,k]这 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

条路。

通过弗洛伊德算法计算出两单间的最短路径之后,就可以通过距离计算公式计算出两点间的最短距离。

利用佛洛依德算法计算出每两点间的最短路径矩阵。里面有三重for循环,时间的复杂度为O(n^3)。系统实现与测试

3.1 系统实现

3.1.1 开发环境

本系统是在windows7下的Visual C++ 6.0编译器中进行设计,但是一般的编译器中没有包含编写界面的这个库,所以要网上下载、添加这个库函数。请在Project-> Properties里选择C/C++里选择Code Generation下选

Runtime Library

下选

Multi-threaded Debug(/MTd)Project->setting->C/C++->category(code generation)->using runtime library(debug multithread)。3.1.2 运行环境

Window7 64位旗舰版系统。3.1.3 主要函数及说明

1、void Floyd(void);

按照实际路况处理,利用佛洛依德算法,算出每两点间的最短路径矩阵。求 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

->的最短路径,如果->有弧,则存在一条长度为arcs[i][j]的路径,但是该路径不一定是最短路径,尚需要进行n次试探。若存在(Vi,Vo,Vj),则比较(Vi,Vj)和(Vi,Vo)+(Vo,Vj)的大小。取(Vi,Vo,Vj)和(Vi,Vj)的较短者,继续添加结点。依此类推,每次都找到短路径,最后得到的便是最短路径。把最短的路径存到全局变量path中。

2、void LoadData(void);

加载初期设定的信息包括所有图片。并且将设定好的坐标信息存储到图G0中。并且使用佛洛依德算法,将每对景点之间的最短路径距离算出并存储最短路径到全局变量path中。以方便后续程序的进行。

3、int CreateUDG1(MGraph &G1);加载所有景点信息,并存储到图G1中。(图G1不包括路口坐标信息)。里面有两个for循环,一个用来加载景点坐标,名称和代号。另一个for循环用来构建完全图G1,计算出每对景点的最短路径(理想情况下处理的)。返回值为1。

4、int weight(Point a,Point b);计算两个点之间的距离,利用公式,计算出的结果是double类型的,将结果强制类型转换为int类型,并将其值返回。

5、void Musicplay(int mark);

利用mciSendString函数,mark用来控制背景音乐的播放与停止。mark=1,循环播放音乐。界面打开时后台启动。当主界面上点击音乐暂停图标mark=2,音乐暂停.。当主界面上点击音乐播放图标mark=3,音乐恢复播放。.6、void Windows(void);加载事先做好的主界面背景图。在上面输出文字信息。用GetMouseMsg();函数获取鼠标信息,设置鼠标响应区,当鼠标移动到响应区时,文字实现颜色的改变。当单击鼠标左键时,会进入到相应的函数里面,进行下一步操作。

7、void Viewmain(void);输出景点坐标及名称。设置景点活动区域,获取鼠标信息,当鼠标移动到相应的景点活动区域,就会加载相应的景点图片。

8、void Help(void);

有简单的操作说明。操作说明是以图片的形式加载进去的。图片是事先用PS 5 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

准备好的。

9、void About(void);有简单的作者信息及实验感想。背景是以图片的形式加载进去的。图片是事先用PS准备好的。里面还有一个网页链接,点击后会用Systen函数,打开该网页链接。

10、void Quit(void);关闭图形区域,退出导航。详细设计代码见附录。

3.2 系统测试

根据设计要求测试相关的功能,测试结果用相应的截图表示。

1、运行程序,进入系统主窗口界面,结果如图2所示。

图 2

2、选择主界面的“地图导航功”能,进入功能选区,结果如图3所示。华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

图 3 2.1、在“地图导航”功能界面选择“place”(地点查询)功能,查询地点A(南大门)。输入A,系统在地图上正确地显示地点A的位置。结果如图4,图5所示。

华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

图 4

图 5 2.2、在“地图导航”功能界面选择“route”(路线查询)功能,查询A(南大门)到B(南一楼)之间的最佳路线和距离。输入AB,系统在地图上正确地显示AB之前的最佳路线和距离。结果如图6,图7所示。

图 6 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

图 7

2.3、在“地图导航”功能界面选择“repast”(食堂查询)功能,查询B(南一楼)附近最近的食堂。输入B,系统在地图上正确地显示B附近最近的食堂,并且给出了最佳路线和距离。结果如图8,图9所示。

图 8 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

图 9 2.4、在“地图导航”功能界面选择“market”(超市查询)功能,查询A(南大门)附近最近的超市。输入A,系统在地图上正确地显示A附近最近的超市,并且给出了最佳路线和距离。结果如图10,图11所示。华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

图 10

图 11

3、在系统主界面选择“进入地图”功能,将鼠标光标移动到地图的地点(机械大楼)上面,地图右下角显示该地点的具体信息。结果如图12所示。

图 12 11 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

4、在系统主界面选择进入“使用帮助”功能,系统显示该系统的使用说明。结果如图13所示。

图 13

5、在系统主界面选择进入“关于导航”功能,系统显示该系统的设计信息。结果如图14所示。华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

图 14

6、在系统主界面选择“退出导航”功能,点击“确定”即退出系统。结果如所示。总结与展望

图 1

54.1 全文总结

对自己的工作做个总结,主要工作总结如下:

(1)分析设计题目、设计内容和设计要求,到图书馆和网上查阅相关资料,制定设计计划,为设计工作做准备。

(2)按照设计要求进行设计工作,设计合适的数据结构和算法,收集并处理相关的资料,编程实现。

(3)按照设计要求测试系统,调试程序BUG,优化、完善系统。(4)撰写课程设计报告。

4.1 工作展望

在今后的研究中,围绕着如下几个方面开展工作:

(1)此次设计使用了弗洛伊德算法,没有设计出更高效的算法。所以应该

设计更合适的数据结构和更高效的算法,优化代码,提高系统的效率。华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

(2)设计的系统功能还是比较单一。所以应该完善和扩充系统功能,使系 统能为用户提供更多、更优质的服务。

华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告 体会

在该接触到本次《数据结构》的课程设计时,心里是没有底的,一开始就为了确定题目思考了很久,但是看到地图就有了很多想法,回想起在课程的学习中对图进行了深入地学习并且学习了诸多寻路算法,于是就选择了这个题目,我觉得我可以根据自己所学习的图的知识和算法设计出“华科地图导航”。

“华科地图导航”涉及到大量的图形信息与绘图信息,于是我开始寻找合适的开发的工具与语言进行编程设计。最开始在网上查询相关信息了解到QT是写图形界面的好工具,但是进行上手学习后发现QT函数库众多,而我不能正确熟悉地使用,于是考虑了很久就放弃了。后来了解到了C语言的图形库easyx,于是上网查询了相关的资料,对easyx有了大致的了解,上手很容易,只需根据其图形函数与绘图函数进行编程设计,课设就正式进入了设计、编写、测试,然后顺利完成课设。

感谢帮助过我同学和老师,也感谢我自己。

华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

参考文献

[1] 严蔚敏,吴伟民.数据结构(C语言版).北京: 清华大学出版社,1997 [2] 严蔚敏,吴伟民,米宁.数据结构题集(C语言版).北京: 清华大学出版社,1999 [3] 曹计昌,卢萍,李开.C语言与程序设计.北京: 电子工业出版社,2013 [4] 王晓东.计算机算法设计与分析.北京: 电子工业出版社, 2007

华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

附录

1.TourGuide.h

#include #include #include #include #include #include #include #pragma comment(lib,“Winmm.lib”)#include using namespace std;

#define MAX_VEX_NUM 100 //最大地点个数 #define N 22

//当前地点个数 #define All 60

//地点和路口总数

#define MAX_ROAD 10000 //相当于两地点间断开

int shortest[MAX_VEX_NUM][MAX_VEX_NUM];

//全局变量存贮最小路径 int path[MAX_VEX_NUM][MAX_VEX_NUM];

//存贮路径 int pos[][2]={

//地点坐标及路口坐标

//地点坐标

{208,430},{209,387},{50,404} ,{105,355}, {110,300},{170,300},{167,234},{230,150}, {310,235},{310,320},{390,320},{615,155},{430,320},{430,150},{417,320},{368,307},{406,320},{472,160},{5,185} ,{339,293},{65,452} ,{109,439}, //路口坐标

{369,317},{46,379} ,{110,387},{368,293}, {168,386},{262,384},{112,320},{170,320}, {262,320},{309,292},{309,282},{110,284}, {170,284},{230,250},{309,250},{170,250}, {230,220},{307,220},{370,150},{2,219} , {108,188},{33,337} ,{109,250},{109,218}, {309,150},{108,150},{167,218},{427,250}, {368,218},{368,250},{166,150},{166,188}, {230,188},{309,188},{368,188},{230,282}, {230,320},{168,350} };char Num[]={

//地点编号

'A','B','C','D', 'E','F','G','H', 'I','J','K','L','M','N','O','P','Q','R','S','T','U','V' };char Name[][20]={

//地点名称

“南大门”,“南一楼”,“西十二楼”,“西五楼”, “青年园”,“图书馆”,“科技楼”,“喻园餐厅”, 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

“机械学院”,“名人园”,“中心操场”,“东九楼”, “沁苑”,“喻园教工超市”,“东教工超市”, “东一食堂”,“紫荆园餐厅”,“清真食堂”, “百景园”,“东五楼”,“南三门”,“南二门” };typedef struct { int x;int y;}Point;typedef struct { Point point;char name[20];char num;}Vexs;struct MGraph { Vexs vexs[MAX_VEX_NUM];

//顶点向量

int arcs[MAX_VEX_NUM][MAX_VEX_NUM];//邻接矩阵

int vexnum,arcnum;

//顶点数,边数 };MGraph G[100],G0,G1;

//声明无向图的邻接矩阵类型 int Gi;IMAGE map,map1;

//图片信息的加载 IMAGE loading;IMAGE about;IMAGE help;IMAGE background;IMAGE Aa,Bb,Cc,Dd,Ee,Ff,Gg,Hh,Ii,Jj,Kk,Ll,Mm,Nn,Oo,Pp,Qq,Rr,Ss,Tt,Uu,Vv,a1,a2,b1,b2,c1,c2,d1,d2;void LoadData(void);

//加载信息

int CreateUDG1(MGraph &G1);//初始化所有景点信息 int weight(Point a,Point b);//计算两点之间的距离 void Windows(void);

//主窗口界面 void Musicplay(int mark);//播放音乐

void Showplace(void);

//查找地点位置 void Showpoint(int i);void Shortest(void);

//两点之间的最短路径 void Showline(int i,int j);//显示输入框 void Showline1(int i,int j);//显示输入框 void Showline2(int i,int j);//显示输入框

void Floyd(void);

//佛洛依德算法,算出每两点间的最短路径矩阵 void Linemin(int i,int j);

//画最短路径

void Findrepast(void);

//查找附近的食堂 void Findmarket(void);

//查找附近的超市 void Entermap(void);

//进入地图操作界面 void Viewmain(void);

//浏览地点信息 void HelP(void);

//操作说明 void About(void);

//作者相关信息 void Quit(void);

//退出系统

2.TourGuide.cpp 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

#include“head.h” int main(){ initgraph(640,480);HWND hwnd = GetHWnd();

// 设置窗口标题文字

SetWindowText(hwnd, “华科地图导航”);LoadData();CreateUDG1(G1);Musicplay(1);Windows();return 0;}

/*功能:对输入的两个点计算它们之间的距离,并将其返回到调用的函数中*/ int weight(Point a,Point b){ double x;int y;x=pow((a.x-b.x),2)+pow((a.y-b.y),2);x=sqrt(x);y=int(x);return y;} /*功能:加载程序运行必须的图片及函数相关信息*/ void LoadData(void){ int i,j;loadimage(&loading,“./picture/loading.jpg”);loadimage(&about,“./picture/about.jpg”);loadimage(&help,“./picture/help.jpg”);loadimage(&background,“./picture/background.jpg”);loadimage(&map,“./picture/map.jpg”);loadimage(&map1,“./picture/map1.jpg”);loadimage(&Aa,“./picture/place/A.jpg”);loadimage(&Bb,“./picture/place/B.jpg”);loadimage(&Cc,“./picture/place/C.jpg”);loadimage(&Dd,“./picture/place/D.jpg”);loadimage(&Ee,“./picture/place/E.jpg”);loadimage(&Ff,“./picture/place/F.jpg”);loadimage(&Gg,“./picture/place/G.jpg”);loadimage(&Hh,“./picture/place/H.jpg”);loadimage(&Ii,“./picture/place/I.jpg”);loadimage(&Jj,“./picture/place/J.jpg”);loadimage(&Kk,“./picture/place/K.jpg”);loadimage(&Ll,“./picture/place/L.jpg”);loadimage(&Mm,“./picture/place/M.jpg”);loadimage(&Nn,“./picture/place/N.jpg”);loadimage(&Oo,“./picture/place/O.jpg”);loadimage(&Pp,“./picture/place/P.jpg”);loadimage(&Qq,“./picture/place/Q.jpg”);loadimage(&Rr,“./picture/place/R.jpg”);loadimage(&Ss,“./picture/place/S.jpg”);loadimage(&Tt,“./picture/place/T.jpg”);loadimage(&Uu,“./picture/place/U.jpg”);loadimage(&Vv,“./picture/place/V.jpg”);loadimage(&a1,“./picture/menu/a1.jpg”);华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

loadimage(&a2,“./picture/menu/a2.jpg”);loadimage(&b1,“./picture/menu/b1.jpg”);loadimage(&b2,“./picture/menu/b2.jpg”);loadimage(&c1,“./picture/menu/c1.jpg”);loadimage(&c2,“./picture/menu/c2.jpg”);loadimage(&d1,“./picture/menu/d1.jpg”);loadimage(&d2,“./picture/menu/d2.jpg”);for(i=1;i<=All;i++){

for(j=1;j<=All;j++)

{

G0.arcs[i][j]=MAX_ROAD;

}

}

for(i=1;i<=All;i++)

{

shortest[i][i]=0;

} for(i=0;i

G0.vexs[i+1].point.x=pos[i][0];

G0.vexs[i+1].point.y=pos[i][1];

} //初始化连通路径

G0.arcs[1][2]=G0.arcs[2][1]=weight(G0.vexs[1].point,G0.vexs[2].point);G0.arcs[1][22]=G0.arcs[22][1]=weight(G0.vexs[22].point,G0.vexs[1].point);G0.arcs[1][27]=G0.arcs[27][1]=weight(G0.vexs[27].point,G0.vexs[1].point);

G0.arcs[1][28]=G0.arcs[28][1]=weight(G0.vexs[28].point,G0.vexs[1].point);

G0.arcs[2][27]=G0.arcs[27][2]=weight(G0.vexs[27].point,G0.vexs[2].point);

G0.arcs[2][28]=G0.arcs[28][2]=weight(G0.vexs[28].point,G0.vexs[2].point);

G0.arcs[3][21]=G0.arcs[21][3]=weight(G0.vexs[21].point,G0.vexs[3].point);

G0.arcs[3][24]=G0.arcs[24][3]=weight(G0.vexs[24].point,G0.vexs[3].point);G0.arcs[4][24]=G0.arcs[24][4]=weight(G0.vexs[24].point,G0.vexs[4].point);

G0.arcs[4][25]=G0.arcs[25][4]=weight(G0.vexs[25].point,G0.vexs[4].point);G0.arcs[4][29]=G0.arcs[29][4]=weight(G0.vexs[29].point,G0.vexs[4].point);G0.arcs[4][60]=G0.arcs[60][4]=weight(G0.vexs[60].point,G0.vexs[4].point);

G0.arcs[5][29]=G0.arcs[29][5]=weight(G0.vexs[29].point,G0.vexs[5].point);G0.arcs[5][34]=G0.arcs[34][5]=weight(G0.vexs[34].point,G0.vexs[5].point);G0.arcs[6][30]=G0.arcs[30][6]=weight(G0.vexs[6].point,G0.vexs[30].point);G0.arcs[6][35]=G0.arcs[35][6]=weight(G0.vexs[6].point,G0.vexs[35].point);

G0.arcs[7][49]=G0.arcs[49][7]=weight(G0.vexs[7].point,G0.vexs[49].point);G0.arcs[7][38]=G0.arcs[38][7]=weight(G0.vexs[7].point,G0.vexs[38].point);G0.arcs[8][47]=G0.arcs[47][8]=weight(G0.vexs[8].point,G0.vexs[47].point);G0.arcs[8][53]=G0.arcs[53][8]=weight(G0.vexs[53].point,G0.vexs[8].point);G0.arcs[8][55]=G0.arcs[55][8]=weight(G0.vexs[55].point,G0.vexs[8].point);G0.arcs[9][37]=G0.arcs[37][9]=weight(G0.vexs[9].point,G0.vexs[37].point);G0.arcs[9][40]=G0.arcs[40][9]=weight(G0.vexs[9].point,G0.vexs[40].point);G0.arcs[10][31]=G0.arcs[31][10]=weight(G0.vexs[10].point,G0.vexs[31].point);G0.arcs[10][23]=G0.arcs[23][10]=weight(G0.vexs[10].point,G0.vexs[23].point);G0.arcs[10][32]=G0.arcs[32][10]=weight(G0.vexs[10].point,G0.vexs[32].point);

G0.arcs[11][17]=G0.arcs[17][11]=weight(G0.vexs[11].point,G0.vexs[17].point);

G0.arcs[11][23]=G0.arcs[23][11]=weight(G0.vexs[11].point,G0.vexs[23].point);

G0.arcs[12][18]=G0.arcs[18][12]=weight(G0.vexs[12].point,G0.vexs[18].point);

G0.arcs[13][50]=G0.arcs[50][13]=weight(G0.vexs[13].point,G0.vexs[50].point);G0.arcs[13][15]=G0.arcs[15][13]=weight(G0.vexs[13].point,G0.vexs[15].point);

G0.arcs[14][18]=G0.arcs[18][14]=weight(G0.vexs[14].point,G0.vexs[18].point);

G0.arcs[14][41]=G0.arcs[41][14]=weight(G0.vexs[14].point,G0.vexs[41].point);华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

G0.arcs[14][50]=G0.arcs[50][14]=weight(G0.vexs[14].point,G0.vexs[50].point);

G0.arcs[15][17]=G0.arcs[17][15]=weight(G0.vexs[15].point,G0.vexs[17].point);

G0.arcs[16][23]=G0.arcs[23][16]=weight(G0.vexs[16].point,G0.vexs[23].point);

G0.arcs[16][26]=G0.arcs[26][16]=weight(G0.vexs[16].point,G0.vexs[26].point);

G0.arcs[19][42]=G0.arcs[42][19]=weight(G0.vexs[19].point,G0.vexs[42].point);

G0.arcs[19][43]=G0.arcs[43][19]=weight(G0.vexs[19].point,G0.vexs[43].point);

G0.arcs[20][26]=G0.arcs[26][20]=weight(G0.vexs[20].point,G0.vexs[26].point);

G0.arcs[20][32]=G0.arcs[32][20]=weight(G0.vexs[20].point,G0.vexs[32].point);

G0.arcs[21][22]=G0.arcs[22][21]=weight(G0.vexs[22].point,G0.vexs[21].point);

G0.arcs[22][25]=G0.arcs[25][22]=weight(G0.vexs[22].point,G0.vexs[25].point);

G0.arcs[24][44]=G0.arcs[44][24]=weight(G0.vexs[24].point,G0.vexs[44].point);

G0.arcs[25][27]=G0.arcs[27][25]=weight(G0.vexs[25].point,G0.vexs[27].point);

G0.arcs[26][52]=G0.arcs[52][26]=weight(G0.vexs[26].point,G0.vexs[52].point);

G0.arcs[27][60]=G0.arcs[60][27]=weight(G0.vexs[27].point,G0.vexs[60].point);

G0.arcs[28][31]=G0.arcs[31][28]=weight(G0.vexs[28].point,G0.vexs[31].point);

G0.arcs[29][30]=G0.arcs[30][29]=weight(G0.vexs[29].point,G0.vexs[30].point);

G0.arcs[29][44]=G0.arcs[44][29]=weight(G0.vexs[29].point,G0.vexs[44].point);

G0.arcs[30][59]=G0.arcs[59][30]=weight(G0.vexs[30].point,G0.vexs[59].point);G0.arcs[30][60]=G0.arcs[60][30]=weight(G0.vexs[30].point,G0.vexs[60].point);

G0.arcs[31][59]=G0.arcs[59][31]=weight(G0.vexs[31].point,G0.vexs[59].point);

G0.arcs[32][33]=G0.arcs[33][32]=weight(G0.vexs[32].point,G0.vexs[33].point);

G0.arcs[33][37]=G0.arcs[37][33]=weight(G0.vexs[33].point,G0.vexs[37].point);

G0.arcs[33][58]=G0.arcs[58][33]=weight(G0.vexs[33].point,G0.vexs[58].point);

G0.arcs[34][35]=G0.arcs[35][34]=weight(G0.vexs[34].point,G0.vexs[35].point);

G0.arcs[34][45]=G0.arcs[45][34]=weight(G0.vexs[34].point,G0.vexs[45].point);

G0.arcs[35][38]=G0.arcs[38][35]=weight(G0.vexs[35].point,G0.vexs[38].point);G0.arcs[35][58]=G0.arcs[58][35]=weight(G0.vexs[35].point,G0.vexs[58].point);

G0.arcs[36][37]=G0.arcs[37][36]=weight(G0.vexs[36].point,G0.vexs[37].point);

G0.arcs[36][38]=G0.arcs[38][36]=weight(G0.vexs[36].point,G0.vexs[38].point);

G0.arcs[36][39]=G0.arcs[39][36]=weight(G0.vexs[36].point,G0.vexs[39].point);G0.arcs[36][58]=G0.arcs[58][36]=weight(G0.vexs[36].point,G0.vexs[58].point);

G0.arcs[37][52]=G0.arcs[52][37]=weight(G0.vexs[37].point,G0.vexs[52].point);G0.arcs[38][45]=G0.arcs[45][38]=weight(G0.vexs[45].point,G0.vexs[38].point);G0.arcs[39][49]=G0.arcs[49][39]=weight(G0.vexs[39].point,G0.vexs[49].point);

G0.arcs[39][55]=G0.arcs[55][39]=weight(G0.vexs[39].point,G0.vexs[55].point);G0.arcs[39][40]=G0.arcs[40][39]=weight(G0.vexs[39].point,G0.vexs[40].point);

G0.arcs[40][56]=G0.arcs[56][40]=weight(G0.vexs[40].point,G0.vexs[56].point);

G0.arcs[40][51]=G0.arcs[51][40]=weight(G0.vexs[40].point,G0.vexs[51].point);

G0.arcs[41][47]=G0.arcs[47][41]=weight(G0.vexs[41].point,G0.vexs[47].point);G0.arcs[41][57]=G0.arcs[57][41]=weight(G0.vexs[41].point,G0.vexs[57].point);G0.arcs[42][44]=G0.arcs[44][42]=weight(G0.vexs[42].point,G0.vexs[44].point);G0.arcs[42][46]=G0.arcs[46][42]=weight(G0.vexs[42].point,G0.vexs[46].point);G0.arcs[43][46]=G0.arcs[46][43]=weight(G0.vexs[43].point,G0.vexs[46].point);

G0.arcs[43][48]=G0.arcs[48][43]=weight(G0.vexs[43].point,G0.vexs[48].point);G0.arcs[43][54]=G0.arcs[54][43]=weight(G0.vexs[43].point,G0.vexs[54].point);G0.arcs[45][46]=G0.arcs[46][45]=weight(G0.vexs[45].point,G0.vexs[46].point);

G0.arcs[46][49]=G0.arcs[49][46]=weight(G0.vexs[46].point,G0.vexs[49].point);G0.arcs[47][56]=G0.arcs[56][47]=weight(G0.vexs[47].point,G0.vexs[56].point);G0.arcs[48][53]=G0.arcs[53][48]=weight(G0.vexs[48].point,G0.vexs[53].point);G0.arcs[49][54]=G0.arcs[54][49]=weight(G0.vexs[49].point,G0.vexs[54].point);

G0.arcs[50][52]=G0.arcs[52][50]=weight(G0.vexs[50].point,G0.vexs[52].point);G0.arcs[51][52]=G0.arcs[52][51]=weight(G0.vexs[51].point,G0.vexs[52].point);G0.arcs[51][57]=G0.arcs[57][51]=weight(G0.vexs[51].point,G0.vexs[57].point);

G0.arcs[53][54]=G0.arcs[54][53]=weight(G0.vexs[53].point,G0.vexs[54].point);G0.arcs[54][55]=G0.arcs[55][54]=weight(G0.vexs[54].point,G0.vexs[55].point);G0.arcs[55][56]=G0.arcs[56][55]=weight(G0.vexs[55].point,G0.vexs[56].point);G0.arcs[56][57]=G0.arcs[57][56]=weight(G0.vexs[56].point,G0.vexs[57].point);华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

G0.arcs[58][59]=G0.arcs[59][58]=weight(G0.vexs[58].point,G0.vexs[59].point Floyd();}

/*功能:佛洛依德算法,将每对景点之间的最短路径距离算出并存储最短路径到path中 */ void Floyd()

{

int i,j,k;

for(i=1;i<=All;i++)

{ for(j=1;j<=All;j++)

{

shortest[i][j]=G0.arcs[i][j];

path[i][j]=j;

}

}

/*初始化数组*/

for(k=1;k<=All;k++)

{

for(i=1;i<=All;i++)

{

for(j=1;j<=All;j++)

{

if(shortest[i][j]>(shortest[i][k]+shortest[k][j]))

{

shortest[i][j]=shortest[i][k]+shortest[k][j];

path[i][j]=k;

path[j][i]=k;

/*记录经过的路径*/

}

}

}

} } /*功能:初始化由所有景点构成的无向完全图G1,并加载必要信息*/ int CreateUDG1(MGraph &G1){

int p,q;Gi=0;G1.vexnum=22;

for(q=0;q

G1.vexs[q].point.x=pos[q][0];

G1.vexs[q].point.y=pos[q][1];

strcpy(G1.vexs[q].name,Name[q]);

G1.vexs[q].num=Num[q];} for(q=0;q

{

for(p=q;p

G1.arcs[q][p]=G1.arcs[p][q]=weight(G1.vexs[p].point,G1.vexs[q].point);}

return 1;} /*把音乐以资源形式嵌入exe并播放,mark用来控制音乐的播放与暂停*/ void Musicplay(int mark){ mciSendString(“open./music/1024.mp3 alias music”,NULL,0,NULL);华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

if(mark==1)

mciSendString(_T(“play music repeat”),NULL,0,NULL);if(mark==2)

mciSendString(_T(“pause music”),NULL,0,NULL);if(mark==3)

mciSendString(_T(“resume music”),NULL,0,NULL);} /*功能:显示主窗口界面,进入功能选择区*/ void Windows(void){ cleardevice();int posx[]={265,265,265,265,265,31,62};int posy[]={180,220,260,300,340,449,449};putimage(0,0,&loading);settextstyle(25, 0, _T(“隶书”));setbkmode(TRANSPARENT);settextcolor(WHITE);outtextxy(posx[0],posy[0], _T(“地图导航”));outtextxy(posx[1],posy[1], _T(“进入地图”));outtextxy(posx[2],posy[2], _T(“使用帮助”));outtextxy(posx[3],posy[3], _T(“关于导航”));outtextxy(posx[4],posy[4], _T(“退出导航”));MOUSEMSG m;while(true){

m=GetMouseMsg();

if(m.uMsg==WM_MOUSEMOVE)

{

if(m.x>posx[0]&&m.x

posy[0]&&m.y

settextcolor(BLACK);

else

settextcolor(WHITE);

outtextxy(posx[0],posy[0], _T(“地图导航”));

if(m.x>posx[1]&&m.x

posy[1]&&m.y

settextcolor(BLACK);

else

settextcolor(WHITE);

outtextxy(posx[1],posy[1], _T(“进入地图”));

if(m.x>posx[2]&&m.x

posy[2]&&m.y

settextcolor(BLACK);

else

settextcolor(WHITE);

outtextxy(posx[2],posy[2], _T(“使用帮助”));

if(m.x>posx[3]&&m.x

posy[3]&&m.y

settextcolor(BLACK);

else

settextcolor(WHITE);

outtextxy(posx[3],posy[3], _T(“关于导航”));

if(m.x>posx[4]&&m.x

posy[4]&&m.y

settextcolor(BLACK);

else

settextcolor(WHITE);

outtextxy(posx[4],posy[4], _T(“退出导航”));

}

if(m.uMsg==WM_LBUTTONUP)

{ 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

if(m.x>posx[0]&&m.x

posy[0]&&m.y

Entermap();

if(m.x>posx[1]&&m.x

posy[1]&&m.y

Viewmain();

if(m.x>posx[2]&&m.x

posy[2]&&m.y

HelP();

if(m.x>posx[3]&&m.x

posy[3]&&m.y

About();

if(m.x>posx[4]&&m.x

posy[4]&&m.y

Quit();

if(m.x>posx[5]&&m.x

posy[5]&&m.y

Musicplay(3);

if(m.x>posx[6]&&m.x

posy[6]&&m.y

Musicplay(2);

} } cleardevice();return;} /*功能:进入地图操作界面,可选功能项有最短路径查询和最佳路线问题*/ void Entermap(){ int posx[]={215,325,215,325,0};int posy[]={135,135,245,245,0};putimage(0,0,&background);MOUSEMSG m;while(true){

m=GetMouseMsg();

if(m.uMsg==WM_MOUSEMOVE)

{

if(m.x>posx[0]&&m.x

posy[0]&&m.y

putimage(215,135,&c2);

else

putimage(215,135,&c1);

if(m.x>posx[1]&&m.x

posy[1]&&m.y

putimage(325,135,&d2);

else

putimage(325,135,&d1);

if(m.x>posx[2]&&m.x

posy[2]&&m.y

putimage(215,245,&a2);

else

putimage(215,245,&a1);

if(m.x>posx[3]&&m.x

posy[3]&&m.y

putimage(325,245,&b2);

else

putimage(325,245,&b1);

}

if(m.uMsg==WM_LBUTTONUP)

{

if(m.x>posx[0]&&m.x

posy[0]&&m.y

Showplace();

if(m.x>posx[1]&&m.x

posy[1]&&m.y

Shortest();

if(m.x>posx[2]&&m.x

posy[2]&&m.y

Findrepast();

if(m.x>posx[3]&&m.x

posy[3]&&m.y

华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

Findmarket();

if(m.x>posx[4]&&m.x

posy[4]&&m.y

Windows();

} } } /*功能:弹出地点查询框,作为输入信息用*/ void Showplace(void){ char s[10];int choose;HWND wnd = GetHWnd();M: if(InputBox(s, 10, “查找地点,如:我的选择是:AnA南大门 B南一楼 C西十二楼 D西五楼nE青年园 F图书馆 G科技楼 H喻园餐厅nI机械学院 J名人园 K中心操场 L东九楼nM沁苑 N喻园教工超市 O东教工超市nP东一食堂 Q紫荆园餐厅 R清真食堂nS百景园 T东五楼 U南三门 V南二门”,“输入地点编号”,NULL,300,90,false)==true){

choose=s[0]-'A'+1;

if(0

Showpoint(choose);

else

if(MessageBox(wnd, _T(“选择出现在A-V,请重新输入”), _T(“提醒”),MB_OK | MB_ICONWARNING)== IDOK)

goto M;

} else

Entermap();} void Showpoint(int i){ HWND wnd = GetHWnd();char s[][100] = {“你现在查询的是 : ”,“ 【红色为查询地点所在位置】”};char message[100];int a=i;strcpy(message,s[0]);putimage(0,0,&map1);strcat(message,G1.vexs[a-1].name);strcat(message,s[1]);setfillcolor(0x001eff);fillcircle(G1.vexs[a-1].point.x,G1.vexs[a-1].point.y,7);

if(MessageBox(wnd, _T(message), _T(“提醒”),MB_OK | MB_ICONQUESTION)== IDOK)Sleep(1000);if(MessageBox(wnd, _T(“你要继续查询吗?n是 : 返回查询界面n否 : 进入地图界面”), _T(“提醒”),MB_YESNO | MB_ICONQUESTION)== IDNO)

Viewmain();else

Entermap();} /*功能:弹出最短路径查询框,作为输入信息用*/ void Shortest(void){ char s[10];int choose1,choose2;HWND wnd = GetHWnd();华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

M: if(InputBox(s, 10, “查询线路,如:我的选择是:ABnA南大门 B南一楼 C西十二楼 D西五楼nE青年园 F图书馆 G科技楼 H喻园餐厅nI机械学院 J名人园 K中心操场 L东九楼nM沁苑 N喻园教工超市 O东教工超市nP东一食堂 Q紫荆园餐厅 R清真食堂nS百景园 T东五楼 U南三门 V南二门”,“输入两地点编号”,NULL,300,90,false)==true){

choose1=s[0]-'A'+1;

choose2=s[1]-'A'+1;

if(0

Showline(choose1,choose2);

else

if(MessageBox(wnd, _T(“选择出现在A-V,请重新输入”), _T(“提醒”),MB_OK | MB_ICONWARNING)== IDOK)

goto M;

} else

Entermap();}

/*功能:弹出食堂查询框,作为输入信息用*/ void Findrepast(void){ char s[10];int choose1,choose2;HWND wnd = GetHWnd();M: if(InputBox(s, 10, “查找地点附近食堂,如:我的选择是:AnA南大门 B南一楼 C西十二楼 D西五楼nE青年园 F图书馆 G科技楼 H喻园餐厅nI机械学院 J名人园 K中心操场 L东九楼nM沁苑 N喻园教工超市 O东教工超市nP东一食堂 Q紫荆园餐厅 R清真食堂nS百景园 T东五楼 U南三门 V南二门”,“输入编号”,NULL,300,90,false)==true){

choose1=s[0]-'A'+1;

if(0

{

if(choose1==6||choose1==7||choose1==8){

choose2=8;

Showline1(choose1,choose2);}

else if(choose1==1||choose1==2||choose1==9||choose1==10||choose1==16||choose1==20){

choose2=16;

Showline1(choose1,choose2);}

else if(choose1==11||choose1==13||choose1==15||choose1==17){

choose2=17;

Showline1(choose1,choose2);}

else if(choose1==12||choose1==14||choose1==18){

choose2=18;

Showline1(choose1,choose2);}

else{

choose2=19;

Showline1(choose1,choose2);}

}

else

if(MessageBox(wnd, _T(“选择出现在A-V,W-X,请重新输入”), _T(“提醒”),MB_OK | MB_ICONWARNING)== IDOK)

goto M;

} else

Entermap();华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

} /*功能:弹出食堂超市查询框,作为输入信息用*/ void Findmarket(void){ char s[10];int choose1,choose2;HWND wnd = GetHWnd();M: if(InputBox(s, 10, “查找地点附近超市,如:我的选择是:AnA南大门 B南一楼 C西十二楼 D西五楼nE青年园 F图书馆 G科技楼 H喻园餐厅nI机械学院 J名人园 K中心操场 L东九楼nM沁苑 N喻园教工超市 O东教工超市nP东一食堂 Q紫荆园餐厅 R清真食堂nS百景园 T东五楼 U南三门 V南二门”,“输入编号”,NULL,300,90,false)==true){

choose1=s[0]-'A'+1;

if(0

{

if(choose1==8||choose1==12||choose1==14||choose1==18||choose1==19){

choose2=14;

Showline2(choose1,choose2);}

else{

choose2=15;

Showline2(choose1,choose2);}

}

else

if(MessageBox(wnd, _T(“选择出现在A-V,W-X,请重新输入”), _T(“提醒”),MB_OK | MB_ICONWARNING)== IDOK)

goto M;

} else

Entermap();} /*功能:输出最短路径线路图及最短距离*/ void Showline(int i,int j){ HWND wnd = GetHWnd();char s[][100] = {“你现在查询的是 : ”,“→”,“的最短距离nn”,“最短距离为:”,“米

【蓝色为起点,红色为终点】”};char message[100];char string[10];int a,b;a=i;b=j;strcpy(message,s[0]);putimage(0,0,&map1);strcat(message,G1.vexs[a-1].name);strcat(message,s[1]);strcat(message,G1.vexs[b-1].name);strcat(message,s[2]);strcat(message,s[3]);Linemin(a,b);itoa(shortest[a][b]*3.68,string,10);strcat(message,string);strcat(message,s[4]);setfillcolor(BLUE);fillcircle(G1.vexs[a-1].point.x,G1.vexs[a-1].point.y,7);setfillcolor(0x001eff);fillcircle(G1.vexs[b-1].point.x,G1.vexs[b-1].point.y,7);if(MessageBox(wnd, _T(message), _T(“提醒”), 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

MB_OK | MB_ICONQUESTION)== IDOK)Sleep(1000);if(MessageBox(wnd, _T(“你要继续查询吗?n是 : 返回查询界面n否 : 进入地图界面”), _T(“提醒”),MB_YESNO | MB_ICONQUESTION)== IDNO)

Viewmain();else

Entermap();} /*功能:输出食堂最短路径线路图及最短距离*/ void Showline1(int i,int j){ HWND wnd = GetHWnd();char s[][100] = {“你现在查询的是 : ”,“ 附近最近的食堂 ”,“ 其路径如图nn”,“最短距离为:”,“米

【蓝色为起点,红色为终点】”};char message[100];char string[10];int a,b;a=i;b=j;strcpy(message,s[0]);putimage(0,0,&map1);strcat(message,G1.vexs[a-1].name);strcat(message,s[1]);strcat(message,G1.vexs[b-1].name);strcat(message,s[2]);strcat(message,s[3]);Linemin(a,b);itoa(shortest[a][b]*3.68,string,10);strcat(message,string);strcat(message,s[4]);setfillcolor(BLUE);fillcircle(G1.vexs[a-1].point.x,G1.vexs[a-1].point.y,7);setfillcolor(0x001eff);fillcircle(G1.vexs[b-1].point.x,G1.vexs[b-1].point.y,7);if(MessageBox(wnd, _T(message), _T(“提醒”),MB_OK | MB_ICONQUESTION)== IDOK)Sleep(1000);if(MessageBox(wnd, _T(“你要继续查询吗?n是 : 返回查询界面n否 : 进入地图界面”), _T(“提醒”),MB_YESNO | MB_ICONQUESTION)== IDNO)

Viewmain();else

Entermap();} /*功能:输出食堂最短路径线路图及最短距离*/ void Showline2(int i,int j){ HWND wnd = GetHWnd();char s[][100] = {“你现在查询的是 : ”,“ 附近最近的超市 ”,“ 其路径如图nn”,“最短距离为:”,“米

【蓝色为起点,红色为终点】”};char message[100];char string[10];int a,b;a=i;b=j;strcpy(message,s[0]);putimage(0,0,&map1);华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

strcat(message,G1.vexs[a-1].name);strcat(message,s[1]);strcat(message,G1.vexs[b-1].name);strcat(message,s[2]);strcat(message,s[3]);Linemin(a,b);itoa(shortest[a][b]*3.68,string,10);strcat(message,string);strcat(message,s[4]);setfillcolor(BLUE);fillcircle(G1.vexs[a-1].point.x,G1.vexs[a-1].point.y,7);setfillcolor(0x001eff);fillcircle(G1.vexs[b-1].point.x,G1.vexs[b-1].point.y,7);if(MessageBox(wnd, _T(message), _T(“提醒”),MB_OK | MB_ICONQUESTION)== IDOK)Sleep(1000);if(MessageBox(wnd, _T(“你要继续查询吗?n是 : 返回查询界面n否 : 进入地图界面”), _T(“提醒”),MB_YESNO | MB_ICONQUESTION)== IDNO)

Viewmain();else

Entermap();} /*功能:绘制最短路径线路图*/ void Linemin(int i,int j){ setlinestyle(PS_DASH|PS_JOIN_ROUND,4);if(path[i][j]==i||path[i][j]==j)

line(G0.vexs[i].point.x,G0.vexs[i].point.y,G0.vexs[j].point.x,G0.vexs[j].point.y);else{

Linemin(path[i][j],i);

Linemin(path[i][j],j);} setlinestyle(PS_SOLID,1);} /*功能:地图地点相关信息的介绍*/ void Viewmain(){ IMAGE temp;int choose;putimage(0,0,&map);getimage(&temp,465,275,210,260);setfillcolor(0x001eff);settextstyle(20,0,“楷体”);settextcolor(BLACK);setbkmode(TRANSPARENT);for(choose=1;choose<=N;choose++){

fillcircle(pos[choose-1][0],pos[choose-1][1],7);} outtextxy(0,0,“返回”);outtextxy(80,0,“Tips:鼠标移动到相应的点范围即可查看对应地点信息”);MOUSEMSG m;while(true){

m=GetMouseMsg();

if(m.uMsg==WM_MOUSEMOVE)华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

{

if(m.x>pos[0][0]-7&&m.x

pos[0][1]-7&&m.y

putimage(465,275,&Aa);

else if(m.x>pos[1][0]-7&&m.x

pos[1][1]-7&&m.y

putimage(465,275,&Bb);

else if(m.x>pos[2][0]-7&&m.x

pos[2][1]-7&&m.y

putimage(465,275,&Cc);

else if(m.x>pos[3][0]-7&&m.x

pos[3][1]-7&&m.y

putimage(465,275,&Dd);

else if(m.x>pos[4][0]-7&&m.x

pos[4][1]-7&&m.y

putimage(465,275,&Ee);

else if(m.x>pos[5][0]-7&&m.x

pos[5][1]-7&&m.y

putimage(465,275,&Ff);

else if(m.x>pos[6][0]-7&&m.x

pos[6][1]-7&&m.y

putimage(465,275,&Gg);

else if(m.x>pos[7][0]-7&&m.x

pos[7][1]-7&&m.y

putimage(465,275,&Hh);

else if(m.x>pos[8][0]-7&&m.x

pos[8][1]-7&&m.y

putimage(465,275,&Ii);

else if(m.x>pos[9][0]-7&&m.x

pos[9][1]-7&&m.y

putimage(465,275,&Jj);

else if(m.x>pos[10][0]-7&&m.x

pos[10][1]-7&&m.y

putimage(465,275,&Kk);

else if(m.x>pos[11][0]-7&&m.x

pos[11][1]-7&&m.y

putimage(465,275,&Ll);

else if(m.x>pos[12][0]-7&&m.x

pos[12][1]-7&&m.y

putimage(465,275,&Mm);

else if(m.x>pos[13][0]-7&&m.x

pos[13][1]-7&&m.y

putimage(465,275,&Nn);

else if(m.x>pos[14][0]-7&&m.x

pos[14][1]-7&&m.y

putimage(465,275,&Oo);

else if(m.x>pos[15][0]-7&&m.x

pos[15][1]-7&&m.y

putimage(465,275,&Pp);

else if(m.x>pos[16][0]-7&&m.x

pos[16][1]-7&&m.y

putimage(465,275,&Qq);

else if(m.x>pos[17][0]-7&&m.x

pos[17][1]-7&&m.y

putimage(465,275,&Rr);

else if(m.x>pos[18][0]-7&&m.x

pos[18][1]-7&&m.y

putimage(465,275,&Ss);华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

else if(m.x>pos[19][0]-7&&m.x

pos[19][1]-7&&m.y

putimage(465,275,&Tt);

else if(m.x>pos[20][0]-7&&m.x

pos[20][1]-7&&m.y

putimage(465,275,&Uu);

else if(m.x>pos[21][0]-7&&m.x

pos[21][1]-7&&m.y

putimage(465,275,&Vv);

else

putimage(465,275,&temp);

}

if(m.uMsg==WM_LBUTTONUP)

{

if(m.x>0&&m.x<40&&m.y>0&&m.y<20)

{

setbkmode(TRANSPARENT);

Windows();

}

} } } /*功能:进入帮助功能界面,显示操作说明*/ void HelP(void){ putimage(0,0,&help);MOUSEMSG m;while(true){

m=GetMouseMsg();

if(m.uMsg==WM_LBUTTONUP)

if(m.x>0&&m.x<070&&m.y>0&&m.y<50)

Windows();} }

/*功能:显示作者相关信息*/ void About(void){ int posx[]={0,25};int posy[]={0,350};cleardevice();putimage(0,0,&about);MOUSEMSG m;while(true){

m=GetMouseMsg();

if(m.uMsg==WM_LBUTTONUP)

if(m.x>posx[0]&&m.x

posy[0]&&m.y

Windows();} } /*退出系统,结束程序的运行*/ void Quit(void){ HWND wnd = GetHWnd();if(MessageBox(wnd, _T(“你确定要退出吗?”), _T(“提醒”),31 华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告

} {

} MB_OKCANCEL | MB_ICONQUESTION)== IDOK)closegraph();exit(0);

第五篇:ERP课设

ERP原理与应用

课程设计报告-电器公司ERP系统应用

班级:1121808

姓名:丁贤民

学号:201120180827

指导老师:徐玮 日期:2014.6.25 一.实验时间和地点:

2014.06.25~2014.06.26 二.实验目的:

通过一周的课程设计,基本掌握ERP系统软件的业务处理流程,学习如何把企业设计、销售、采购、生产、管理过程中所涉及的各种基础资料按ERP系统的内在逻辑要求录入到电脑中,掌握在ERP系统中建立物料主文件、产品结构清单、工作中心、资源清单、工艺路线的方法,掌握在ERP系统中录入销售订单和产品预测数据,进而生成主生产计划、物料需求计划和能力需求计划的方法,掌握按主生产计划、物料需求计划实施采购业务和车间生产业务的处理流程,掌握与销售采购相关的财务处理业务。

三.设计要求:

1.实施过程全部在金蝶K3 ERP软件上完成。设计结束后,每位同学独立提交一份ERP课程设计报告,内容包括规划的数据、设计过程、软件处理内容及处理结果、运行参数设置、遇到的疑难问题及解决办法。2.界面截图里要有各自的数据。3.禁止抄袭,雷同报告成绩均为0。

四.设计内容:

具体实施如下开始: 1.新建帐套:

开始-程序-金蝶k3标准版-金蝶k3工具-帐套管理。

进行用户管理,新建了用户和用户组。如下图所见:

产品预测数据管理

录入产品预测单:计划管理→主生产计划→产品预测→产品预测—新增

对用户丁贤民进行了权限设置,如下图所示:

2.建立主营产品的物料主文件和产品结构清单。

进入金蝶k3的控制平台:

电机桌面的金蝶k/3标准版进入平台,如下图:

进入主控制界面:

建立了几个科目,如下图:

录入币别

选择公共资料→币别,如下图: 录入记量单位

选择公共资料→计量单位,打开计量单位管理界面

部门录入:

录入物料数据

选择公共资料→物料,进入物料管理界面。

单击新增按钮或双击已录入的物料,可打开物料录入或修改界面

录入BOM单:计划管理-生产数据管理-BOM维护-BOM新增。形成下列的BOM单;

BOM维护:

3.建立加工该产品所用到的资源清单和工作中心录入工作中心及资源清单

录入工作中心

选择系统设置→基础资料→公共资料→工作中心,进入工作中心管理界面

录入资源清单

计划管理→生产数据管理→基础资料→资源清单

4.录入物料工艺路线

选择计划管理→生产数据管理→工艺路线→工艺路线新增:

5.录入初始库存资料:

选择系统设置→初始化→仓存管理→初始数据录入

截图如下:

6.录入和维护销售订单和产品预测数据、编制主生产计划、进行粗能力计算:

订单录入

供应链→销售管理→销售订单—新增,则打开销售订单录入界面

编制主生产计划

选择生产管理→主生产计划→系统设置→计划展望期维护

选择生产管理→主生产计划→MPS计算

进行粗能力计算

选择生产管理→粗能力需求计划→粗能力清单→粗能力清单生成:

7.根据主生产计划生成物料需求计划、并进行细能力计算

物料需求计划:

细能力计算

选择生产管理→细能力需求计划→细能力计算→细能力计算:

8.根据主生产计划、物料需求计划生成采购计划和车间生产任务

单击[生产管理] →[生产任务管理] →[生产任务] →[生产任务单-查询],系统弹出条件过滤界面。点击[确定],进入生产任务单时序簿界面。选择一张生产任务单,点击[下达]按钮。

车间生产任务:

9.根据采购计划实施采购业务各项流程、直至外购零件入库:

10.根据车间生产任务实施车间管理各项流程,直至产品完工入库

工序计划单查询

工序领料(工序计划单查询-编辑-工序领料):

派工单:

产品入库:

11.根据采购和销售数据完成应收、应付的财务处理业务

五.实验心得:

首先感谢宁星老师,徐玮老师,王红玲老师这两天对我们的指导,让我们能够顺利地完成此次课程设计。

通过本次的课程设计,我基本掌握ERP系统软件的业务处理流程,从最开始的新建帐套,进行帐套的初始设置,建立主营产品的物料主文件和产品结构清单,到建立加工该产品所用到的资源清单和工作中心和录入和维护加工该产品各零件的工艺路线之后再录入初始库存资料,录入和维护销售订单和产品预测数据、编制主生产计划、进行粗能力计算到根据车间生产任务实施车间管项流程,直至产品完工入库,最后根据采购和销售数据完成应收、应付的财务处理业务。

这一系列的操作,让我受益匪浅。虽然平时也接触过金蝶这个软件,但是当所以得任务都是细致紧密地联系在一起的还是第一次做,真正做到了企业管理所有流程的操作,个人觉得还是很难的。在操作的过程中,虽然遇到了很多的困难,比如MPS计算需要系统启动后才能使用,BOM的录入也成了问题等等,但是在老师和同学的指导下最终也顺利地解决了,出错,纠正,不懂到懂,这才是真正的进步。

纸上得来终觉浅,绝知此事要躬行。确实是至理名言,我们课程设计之前没有收集数据,没有想象一个企业在实施的过程中需要什么物料,我们总是想当然的认为自己能够当场很容易的想出来,但是事实却是,我们面对着电脑发呆,迷茫。我们总觉得事情很简单,眼高手低却是我们的写照,所以要想真正明白一个事情的事理就要实践,实践出真知,也需要你谦虚地面对所处的境地,不能怨天尤人。在实验室也看到了不少同学因为做不来就直接不做了,然后急躁的敲着鼠标,我开始也有点焦躁,但是很快就冷静下来一步一步跟着指导书做,然后也有了不错的效果,这也是本次课程设计给我带来的除学习外的精神方面的收获。

经过本次ERP的课设,我在各个方面都有了一定的进步,也达到了此次课设所需要达到的效果,今后会以今天的收获去享受更美好的明天。

下载C语言课设 贪食蛇 含完整代码 课设报告(5篇)word格式文档
下载C语言课设 贪食蛇 含完整代码 课设报告(5篇).doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    课设心得体会

    经历了编c语言课程设计后,我对这一学期c语言所学内容有了更加深刻的了解和掌握,特别是一直不懂的链表和指针,现在发现自己都能运用了,很开心自己的进步。所以,虽然写程序的过程......

    Matlab课设

    武汉理工大学《Matlab课程设计》课程设计说明书 目录 摘要 ............................................................................................. 2 一、Matla......

    课设说明

    财务管理学课程设计一、课程设计教学目的及基本要求《财务管理课程设计》是财务管理专业开设的一门实践教学课程。开设本课程的目的和任务,主要是:培养学生运用财务管理的基本......

    课设心得体会

    课设心得体会 大学三年期间的课程设计,这次应该是在实验室呆的时间最长也最烦恼的一次,做课设期间,遇到了很多的问题,虽然嘴上会说,学校真的是不想让人活了,好烦呀之类,但我们却从......

    课设心得

    课程设计心得 在这学期的期末课设中我们很幸运的接触到了嵌入式,通过历时两天的课程设计,我们对嵌入式虽然说不上熟练,不过也算是已经入门。 通过老师介绍,我们知道当今社会,嵌入......

    课设规范

    电 子 工 程 学 院 课程设计报告格式及要求 一、封面:单独1页(见样件) 二、摘要、关键词:中文(250~300字)、英文;单独1页 中文摘要前加:“摘要:”,英文摘要前加“Abstract:”。 关键词一......

    课设小结

    本次课程设计我们小组顺利的完成了锅炉内胆水温与循环水流量串级控制系统。我们通过讨论对过程参数方面的知识有了更加深入的了解。我负责的是传模拟量采集模块。 和以前做......

    课设心得

    财务管理专业综合实验心得201123090133邓雨长安大学渭水校区WX23042014.6.25—6.27摘要:本实验主要是通过使用“理财之道”财务软件,进行预算,报表建立与分析,成本分析,销售分析......