软件项目实训报告

上传人:ba****u6 文档编号:216217157 上传时间:2023-06-05 格式:DOCX 页数:31 大小:111.24KB
收藏 版权申诉 举报 下载
软件项目实训报告_第1页
第1页 / 共31页
软件项目实训报告_第2页
第2页 / 共31页
软件项目实训报告_第3页
第3页 / 共31页
资源描述:

《软件项目实训报告》由会员分享,可在线阅读,更多相关《软件项目实训报告(31页珍藏版)》请在装配图网上搜索。

1、大型软件项目实训报告教学单位软件学院专 业软件工程班 级08 - 3学生姓名张兴堂学 号指导教师陈虹-、实训目的通过外出实训提高自己的实战能力,对软件编程项目有更深刻的理解。根据企 业对人才的具体需求,针对软件学院应届毕业生,开展以大型软件工程项目为目的 的实战训练,有效提升学生的项目实战能力和适应市场的能力,最终实现学生比较 理想的就业率和就业质量。二、实训时间和地点1实训时间:2011年11月1月2012年1月6日2.实训地点:北京达内三、实训单位简介达内IT培训集团是中国高端IT培训机构,致力于培养面向电信和金融领域的 Java、C+、C#/.Net、测试、嵌入式、PHP等方面中高端软件

2、人才,由美国国际数 据集团IDG、集富亚洲JAFC0ASIA和高盛集团投资,是国内首家获得国际风险投资 的IT培训机构。经过8年运营,达内IT培训集团实现了 95%的专业就业率,78%的 口碑入学率,学员平均毕业薪资3800元/首月平均薪资。目前,达内IT培训团已经 发展成为集培训、咨询、开发、人才服务于一体的高新技术集团公司,公司下设达 内高端IT培训、达内软件人才服务中心、达内软件研发中心。达内IT培训集团以中关村科技园区为依托,在中国软件业发达城市一一北京、上海、广州、深圳、 大连、南京、武汉、杭州、西安、苏州、成都、太原20大城市,建立了近40家培 训中心,占地2万平米,年培训1万多名

3、软件人才。已累计为IBM、微软、摩托罗 拉、华为、中软、用友、Yahoo、阿里巴巴、TOM、新浪、搜狐、百度、联想、神州 数码、大唐电信、亚信等知名IT企业培养输送了 5万多名中高级软件人才,目前达 内全国拥500多名员工,年产值近2亿元,是中国最大的中高端软件人才培训机构。 由于达内IT培训集团优秀的教学效果和行业领先的经营模式赢得了社会各界的广 泛赞誉和好评,近年来达内荣获了各界权威机构的颁奖:达内成为业界唯一的一家 2006、2007、2008、2009连续4年入选德勤评选的“中国高科技高成长50强公司”、 “亚太地区高科技高成长500强公司”,中关村管理委员会指定的“软件人才培养示 范

4、基地”、被计算机世界评选的“就业服务杰出贡献奖”、被中国计算机报 评选的“最具影响力培训机构奖”被搜狐评为“中国十大教育集团”被腾讯评为“中国大学生心目中最具影响力的IT品牌”等等。四、实训内容1实训期间完成的学习任务一.Linux系统操作命令首先,我们学习了最基础的系统操作指令。因为在学习过程中c和C+代码的 编程和修改在linux系统下,所以我们集中精力花费了 3天时间学习指令操作。命令:文档统计: wc 日期: date cal 关机 poweroff windows:shutdownReboot exit find grep find 目录列表匹配标准 -name size -type

5、 -atime通配符操作目录下有需要通配的内容的时候采使用通配符。*(1) 列举(2) 范围!; |将上一个命令的输出作为下一个命令的输入cat /etc/passwd | grep -n rootteels -l | tee a.txtln硬连接软连接ln file02 file ln -s file02 sfileusers:who:who am i:whoami:系统进程信息psps u:详细方式显示当前终端下的进程的信息ps -e:当前正在运行的所有进程sleep 10&kill PIDjobs:查看任务kill %n fg %n bg %n stop %n ctrl+c / zman

6、帮助手册(1) 系统命令(2) 系统调用open库函数fopen(4)(5)(7) (8)管理员的命令 ifconfig serviceifconfigip地址:netmask:默认网关:域名解析 netstat ping ip exportHOME: PWD: PATH: LANG: CC: CCC: PS1: PS2export PS1=/.bashrc source /.bashrc xxx.sh#!/bin/bash cal date ls vidd 5dd命令模式:i ah j k l ctrl+b f shift+9 0 w e b $ 0 x 5x X 5Xyw yy p r R

7、 u : undo #G底行命令模式:set nuset cindent:按照C语言的风格进行自动缩进。set tabstop=4:设置tab按键的长度行号+回车字符串n N/n 个空格 %s/string/replace/gw filename#1,#2 w filenameq q! wqgedit kateC程序的开发执行次序:1写源文件,后缀名.c2对代码中的指令进行预处理,以#开头的3代码编译,生成xx.o/xx.obj4代码的连接生成可执行文件a.out/xx.exe5加载文件,把文件从硬盘读入内存6执行gcc的选项:-c只编译不连接-E只作预处理-S汇编代码-std=c89/c99

8、-o改变最后的可执行文件的名字二linu下c程序开发库函数 sqrt 开平方 #include vmath.h 连接的时候需要连接 数学库gcc xxx.c -lm 举例:打印1-30之间不能被4整除的整数。 while循环while(表达式)语句;int i = 1;while(irand()伪随机数srand()设置随机数种子#include time()获取系统的时间time(O):返回一个时间1970年1月1号0:0:0到现在所经过的秒数 随机数:srand(time(0);rand()产生一个随机数。无限循环:死循环 while(1)for(;)do-while 循环:do语句;wh

9、ile(表达式);缓冲区:输入:scanf(数据类型); scanf(%*An);*:将读取到的内容忽略掉 An:非n的字符scanf(%*c);if(scanf()=0)输出缓冲区: n程序结束 满 4kb人工刷新fflush(stdout);/stdin stderr一维数组:数组的定义:数据类型相同的一组数据。(结构体) 数据类型 数组名数组的长度;char int float 结构体int a5;下标:数组的初始化:int a5 = 1,2,3,4;int a5 = 0;指定初始化:int a5 = 3 = 4;二维数组:数据类型 数组名行列行下标列下标for()for()aij =

10、0;一维:for()ai = 0;二维数组初始化:int a23 = ,;函数的返回值:函数返回值的类型必须和return返回值的类型一致。如果函数没有返回值 指定void C语言中 返回值类型可以省略 默认int参数:形式参数多个形式参数之间使用逗号分割每个形式参数必须有类型的说明float x,y,z;float aver(float x,y) 错误vl C语言中没有bool类型#include vstdbool.hbool true false本质就是一个整数 #include double sqrt(double);gcc xxx.c -lm函数调用函数名(实际参数);形式参数和实际参

11、数:参数名可以不一样函数声明:C语言规定:函数在使用之前必须声明。声明:函数头;bool prime(int);可以不写形式参数的名字。隐式声明:如果函数在使用之前并没有进行声明,编译器会自动创建 一个隐式声明,返回值类型为int实际参数- 形式参数值传递:拷贝一份数组赋值给形式参数。float aver(float x,float y);t = aver(i,j);i-xj-yaver返回值-t注意:实际参数和形式参数名字一样,存储空间不一样。高内聚低耦合数组可以作为函数的参数:函数调用传递的是数组的名字(数组第一个元素的地址)数组的长度=sizeof(数组名)/sizeof(元素)不能实现

12、:数组传递的是地址。sizeof(地址)=4形式参数为数组的时候,我们应该设计两个参数:一个数组另外一个数字的长度int function(int a,int length,.)const:使用const修饰的变量,只读变量。如果形式参数传递的是地址,不希望在被调函数中修改地址上的 内容 可以使用const来修饰形参void f(const int a,int length);return :main函数中使用整个程序结束。递归:如果一个函数调用了它本身,递归函数。指针的初级:指针 就是内存的地址,指针变量就是存储地址的变量。定义一个指针变量:数据类型*变量名;指针变量所保存的地址- 内存上的

13、数据类型。*:告诉编译器后面的变量是一个指针变量指针初始化:int *q = NULL;/NULL 0 0.0空指针:不指向任何地方指针的赋值:q = &i;运算符:*取对应地址上的内容。const与指针: const int *q:q指向的数据数值不能改变q本身可以改变。(2)int * const q:q本身不可以改变,q指向的数值是可以改变的。数组名(3)const int * const q字符串:string类型三种表现形式:(1)字面值常量“abcde”,不能作为变量,可以赋值给变量。程序段(代码段)后面0结束数值相同的字面值常量在代码段只有一份。(2)char arr20表示字符

14、串类型的变量(数组)后面一定加上0printf(%s,arr);-arr 是数组的名字一直打印直到遇到0(3) int a10;int* q=&a0;char str20;char *q=&strO;指针方式存储字符串常量的地址。考虑缓冲区的大小,可能会导致缓冲区溢出。fgets(char *s,size_t size,FILE* stream);s:指向缓冲区的指针size:缓冲区的大小stream :文件指针-stdin注意:fgets会在整个字符串后面增加n操作字符串的库函数:#include vstring.hstrcpychar* strcpy(char* dest,char* sr

15、c);作用:将src指向的字符串拷贝呆dest指向的缓冲区中。返回值:dest数值(地址)。使用:char str120;char str220;strcpy(str1,str2); strcpy(str1,hello);注意:strcpy不考虑第一个参数指向缓冲区大小。char* strncpy(char* dest,const char* src,size_t size);strcat:char* strcat(char *dest,char* src);作用:将src指向的字符串链接到dest指向的字符串结尾的地方 注意:不会考虑dest指向的缓冲区的大小。 char* strncat(

16、char* dest,char* src,size_t size); strlen:sizeof char name20 = hello;sizeof(name)20 :数组所占用的内存int strlen(char* s);strlen(name) = 5;测量字符串的长度,不包含结尾的n strcmp:对比两个字符串int strcmp(char* sl,char* s2)abcacb返回值有三种可能:1 0相等2正数s1s23负数s1vs2 strncmp(.size_t n); 只比较前n个字符。1不要在宏放置额外的等号int a = 100;#define size = 200 in

17、t asize;/int a=2002不要在宏后面加分号#define SIZE 200;int aSIZE;/int a200;带参数的宏#define标志符(x1,x2,x3)替换列表注意:标志符和后面一定不能有空格#define MAX(x,y)带参数的宏仅仅简单的替换和函数完全不一样不要在带参数的宏里面使用自增或者自减带参数的宏应该使用()来保证表达式的运算顺序 1在每个参数的外面加上()2整个表达式的外面加上()三种使用中间变量SWAP(T,x,y) T temp = x;x=y;y=temp使用求和SWAP(x,y) (x)=(x)+(y);(y)=(x)-(y);(x)=(x)-

18、(y)使用异或SWAP(x,y) (x)=(x)A(y);(y)=(x)A(y);(x)=(x)A(y)C语言中已经存在的宏:LINE_一当前正在编译的程序彳丁号%dFILE_源程序文件的名字%sDATE_编译程序的日期%sTIME_-具体的时间%sSTDC_判断当前使用的编译器疋否付口 C标准不符合0符合1带参数的宏PRINT(i/j)-printf(i/j = %d,i/j);PRINT(x/y)-printf(x/y = %d,x/y);#define PRINT(n) printf(.,n)#运算符:可以将宏中的参数转换为字面值常量。 限定:#运算符只能出现在带参数的宏替换列表中字符串

19、:abcde = abcde#define PRINT(n) printf(#n = %dn,n)- i/j = %dn-i/j = %dn#运算符作用:将两个标识符粘合在一起组成一个新的标识符需求:int floatint max_int() 整数float max_float()- 浮点数.#define MAX(type) type max_#type() .MAX(int)- int max_int()MAX(float)- float max_float()需要很多标识符名字。#define MK_ID(n) i_#nMK_ID(1) - i_1MK_ID(32) - i_32条件编

20、译:就是根据预处理的结果来包含或者排除某一段代码。#if #endif预处理器判断#if后面的宏目前的数值0-#if和#endif之间的代码排除非零保留defined#if defined DEBUG - DEBUG是不是已经定义为一个宏#ifdef = #if defineddebug :调试n多条调试语句(printf)release :发布/#define DEBUG#ifdef DEBUG调试语句#endif#ifndef-#if not defined#include test.h#include test.hmakefile:由很多条规则组成的:目标文件:依赖文件生成目标文件所执行

21、的指令选择一条规则来执行make目标文件如果想要使用定义在其他文件中的全局变量请使用extern声明extern int user_id;自定义头文件:系统提供的头文件:stdio.h stdlib.h stdbool.h string.h unistd.h math.htime.h stdarg.h 等等多文件程序中,共享全局变量宏定义共享函数声明共享类型定义共享需要使用头文件。可以使用条件编译防止重复引用。#ifndef SYSTEM_H#define SYSTEM_H#include #include vstdlib.h#include s1.h#include s2.h#define

22、PI 3.14#define MAX 2000extern int i;extern int j;函数的生命int max_min(int,int);void show();类型定义struct s;#endifstatic :静态局部变量静态全局变量static int user_id = 15;即使使用 extern int user_id;static修饰函数这个函数只能在本文件中使用。结构体:数 组:相同数据类型的数据的集合。结构体:不同数据类型的数据的集合。结构体:定义或者使用一个结构体变量之前,先进行类型定义。 结构体变量的定义:struct employee em;初始化:str

23、uct employee em = 101,guo,M,20,5000;2 实训期间完成的实践项目我在达内老师的带领下,学习了 c和C+基础之后,做了一个贪吃蛇的小游戏, 虽然游戏比较简略,但是基本功能已经实现。(1) 功能介绍:产生一个固定大小没有辩解的游戏区域,蛇从区域的中心开始,由玩家通过键 盘控制蛇的运动方向,用蛇头去吃随机分布在游戏区域内的食物;蛇的运动限制在游戏区域内,游戏区域没有辩解,所以蛇在区域内做循环运动: 蛇的运动方向为直线运动,只走横和竖的方向,不走斜线;蛇的运动速度由游戏的难度来控制,难度越高速度越快,游戏难度分为9个等 级;蛇的身体长度从1开始每吃掉一份食物就增加一个

24、长度;食物的出现按照随机 分布原则,蛇吃掉一份后随机在游戏区域内放一份新的食物;游戏的结束条件为:在控制蛇的过程中蛇头碰到蛇的身体的任何部位;设计者应该首先考虑实现一个可以游动的蛇。通过寻找规律,对实际对象进行 抽象概括建立对象模型,首先从物理的角度来分析蛇得运动规律。它是蠕动的,像 水一样流动。他有个特性就是身体的每一个点都经过他头部所在的点,他每一个时 刻骨节所要运动的目的地是他前一个骨节所在的位置。所以我们事先必须了解并掌 握一些基本的画图函数,并学会调用和运行。(2) 用流程图示出程序的主要控制流程和处理流程根据蛇头的坐标和食物的坐标判断蛇 是否已经得到食物如果没有得到食物,则蛇的身

25、体不变,积分器不变如果已经得到食物,则蛇的身 体加长,积分器加一根据蛇头的坐标、蛇身体的坐标和墙 壁的坐标判断蛇是否已经撞墙或者自 己咬到自己如果没有撞墙并且没有自己 咬到自己则程序继续进行sz如果已经撞墙或者自己咬 到自己则程序终止贪吃蛇程序结束卜面是项目代码:#include vstdio.h#include vstdlib.h#include #include vsignal.h #include vsys/time.h #define NUM 60 struct directint cx;int cy;用来表示方向的;typedef struct nodeint cx;int cy;s

26、truct node *back;struct node *next;node;链表的结点void initGame();初始化游戏int setTicker(int);设置计时器void show();显示整个画面void showInformation();显示游戏信息(前两行)void showSnake();显示蛇的身体void getOrder();从键盘中获取命令void over(int i);完成游戏结束后的提示信息void creatLink();void insertNode(int x, int y);/(带头尾结点)双向链表以及它的操作void deleteNode()

27、;void deleteLink();int ch;/输入的命令int hour, minute, second;时分秒int length, tTime, level;/(蛇的)长度,计时器,(游戏)等级struct direct dir, food;蛇的前进方向,食物的位置node *head, *tail;链表的头尾结点int main()initscr();initGame();signal(SIGALRM, show);getOrder(); endwin(); return 0;void initGame()cbreak();/把终端的CBREAK模式打开noecho();关闭回c

28、urs_set(0);把光标置为不可见keypad(stdscr, true);使用用户终端的键盘上的小键盘srand(time(0);初始化各项数据设置随机数种子hour = minute = second = tTime = 0; length = 1;dir.cx = 1;dir.cy = 0;ch = A;food.cx = rand() % COLS;food.cy = rand() % (LINES-2) + 2;creatLink();setTicker(20);设置计时器(这个函数是书本上的例子,有改动) int setTicker(int n_msecs)struct iti

29、merval new_timeset;long n_sec, n_usecs;n_sec = n_msecs / 1000 ;n_usecs = ( n_msecs % 1000 ) * 1000L ; new_timeset.it_interval.tv_sec = n_sec; new_timeset.it_interval.tv_usec = n_usecs;n_msecs = 1;n_sec = n_msecs / 1000 ;n_usecs = ( n_msecs % 1000 ) * 1000L ; new_timeset.it_value.tv_sec= n_sec ;new_t

30、imeset.it_value.tv_usec= n_usecs ;return setitimer(ITIMER_REAL, & new_timeset, NULL); void showlnformation()tTime+;if(tTime = 1000000)/tTime = 0;if(1 != tTime % 50)return;move(0, 3);显示时间printw(time: %d:%d:%d %c, hour, minute, second) second+;if(second NUM)second = 0;minute+;sf(minute NUM)minute = 0;

31、hour+;显示长度,等级move(l, 0);int i;for(i=0;ivCOLS;i+)addstr(-);move(0, COLS/2-5);printw(length: %d, length);move(0, COLS-10);level = length / 3 + 1;printw(level: %d, level);蛇的表示是用一个带头尾结点的双向链表来表示的,蛇的每一次前进,都是在链表的头部增加一个节点,在尾部删除一个节点如果蛇吃了一个食物,那就不用删除节点了void showSnake()if(l != tTime % (30-level)return;判断蛇的长度有没有

32、改变bool lenChange = false;显示食物move(food.cy, food.cx);printw();如果蛇碰到墙,则游戏结束if(COLS-1=head-next-cx & 1=dir.cx)| (0=head-next-cx & -1=dir.cx)II (LINES-1=head-next-cy & 1=dir.cy)II (2=head-next-cy & -1=dir.cy)over(1);return;如果蛇头砬到自己的身体,则游戏结if(* = mvinch(head-next-cy+dir.cy, head-next-cx+dir.cx)over(2);re

33、turn;insertNode(head-next-cx+dir.cx, head-next-cy+dir.cy);/蛇吃了一个“食物”if(head-next-cx=food.cx & head-next-cy=food.cy)lenChange = true;length+;恭喜你,通关if(length = 50)over(3);return;重新设置食物的位置food.cx = rand() % COLS;food.cy = rand() % (LINES-2) + 2;if(!lenChange)move(tail-back-cy, tail-back-cx);printw(” );

34、deleteNode();move(head-next-cy, head-next-cx);printw(*);void show()signal(SIGALRM, show);设置中断信号showlnformation();showSnake();refresh。;刷新真实屏幕void getOrder()建立一个死循环,来读取来自键盘的命令while(l)int j;for(j=0;jvCOLS;j+)addstr();move(0, 2);if(1 = i)addstr(Crash the wall. Game over);else if(2 = i)addstr(Crash itsel

35、f. Game over);else if(3 = i)addstr(Mission Complete);setTicker(O);关闭计时器deleteLink();释放链表的空间创建一个双向链表void creatLink()node *temp = (node *)malloc( sizeof(node);head = (node *)malloc( sizeof(node);tail = (node *)malloc( sizeof(node);temp-cx = 5;temp-cy = 10;head-back = tail-next = NULL;head-next = temp;

36、temp-next = tail;tail-back = temp;temp-back = head;在链表的头部(非头结点)插入一个结点void insertNode(int x, int y)node *temp = (node *)malloc( sizeof(node);temp-cx = x;temp-cy = y;temp-next = head-next; head-next = temp; temp-back = head; temp-next-back = temp;删除链表的(非尾结点的)最后一个结点void deleteNode()node *temp = tail-ba

37、ck;node *bTemp = temp-back; bTemp-next = tail; tail-back = bTemp;temp-next = temp-back = NULL; free(temp);temp = NULL;删除整个链表void deleteLink()while(head-next != tail)deleteNode();head-next = tail-back = NULL;free(head);free(tail);卜面是程序流程图:YGameOver五、实训收获与体会通过这次课程设计的实训,增加了我学习软件技术的兴趣,虽然还不明确软件 技术包含的具体内容

38、,但从C+语言这门课程开始,已发现程序设计的乐趣,在学 习C+语言的过程中也学到了许多计算机应用基础知识,对计算机的机体也有了一 个大体的了解。在实际操作过程中犯的一些错误还会有意外的收获,感觉实训很有意思。在具 体操作中对这学期所学的C+语言的理论知识得到巩固,达到实训的基本目的,也 发现自己的不足之出,在以后的上机中应更加注意,同时体会到C+语言具有的语 句简洁,使用灵活,执行效率高等特点。发现上机实训的重要作用,特别是对数组 和循环有了深刻的理解。通过实际操作,学会C+语言程序编程的基本步骤、基本方法,开发了自己的 逻辑思维能力,培养了分析问题、解决问题的能力。深刻体会到“没有做不到的, 只有想不到的”,“团结就是力量”,“实践是检验真理的标准”,“不耻下问”的 寓意。在此希望以后应多进行这样的实训,加长设间,培养学生独立思考问题的能力, 提高实际操作水平。六、致谢通过本次项目实训我要感谢学校领导给我们提供了这次机会,让我们自己有出 去体会生活,自己做项目的深刻体会。这次实训让我明白我自己之前的学习还是差 很多,只有不断的努力,才能学好。还要感谢达内公司对我的指导,我自己的努力 固然重要,但是达内的优秀教师给我做的培训,讲的理论都让我受益匪浅,让我对 软件有了一个新的概念新的理解。指导 教 师 意 见指导教师签字:年 月 日成绩备

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!