




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
防灾科技学院实训报告书专 业 计算机科学与技术 系 别 灾害信息工程系 报告题目 计算机科学与技术认识实习(C语言) 报告人 班 级 指导教师 带队教师 实习时间 实习单位 教务处监制报告内容摘要:学生成绩管理系统运用到了菜单制作,结构体构建,选择法排序,升降序的转换,文件的写入与读取,循环体的应用,函数的调用于返回,数组名作为函数参数。贪吃蛇游戏运用到了坐标设计,easyz库绘图,直线,矩形与圆的渐变,点、线、面、的相互配合,全局变量的计分,音乐的插入,背景图片的插入,函数的调用于返回。 指导教师评语:成绩: 指导教师(签名): 2013年 月 日目 录1 实训目的32 实训要求43 实训内容44 学生成绩管理系统的设计与实现44.1 设计题目44.2 需求分析44.3 数据结构44.4 数据文件54.5 系统模块图54.6 系统流程图54.7 系统实现65 贪吃蛇游戏的设计与实现145.1 设计题目145.2 需求分析145.3 数据结构145.4 数据文件155.5 系统模块图155.6 系统流程图165.7 系统实现166 实训总结197参考文献201 实训目的首先,通过实习,使学生学会为实际应用涉及的数据选择适当的逻辑结构、存储结构及相应的算法,从而能让学生对C语言程序设计这门课能有一个更深刻的理解和认识;再者,实习相对于平时实验课来说,要完成的是一个难度较大的可执行综合性程序,培养学生处理复杂问题的能力,从而极大的提高学生的编程能力以及撰写文档的能力;并且本实习内容是当前社会最热门且尚处于研究阶段的课题之一,希望能通过实习,实际做到理论和实践紧密结合,同时也为后续课程打下坚实的基础知识。2 实训要求实习要求每个学生从实习项目集合中至少选择2个实习项目并参照相关实习资料独立操作,能正确分析现实生活中的问题,并抽象成数学模型,进行模块分析和编程,认真完成软件设计的全部过程,并完成实习报告。首先根据所选项目进行需求分析和算法分析,根据项目实现的功能进行数据分析,设计相应的数据结构,同时为贯彻“程序设计=算法+数据结构”的思想,要求学生完成流程图的设计,然后根据流程图写出课程实习代码并上机调试,设计的功能应相对完善,每个学生须独立完成程序构思、基本结构设计、变量设计、函数设计、文件操作等任务。在设计中要综合运用所学内容,顺利调试通过并运行所编写的程序,最后完成课程实习报告,报告书应图文结合,须包含用户需求分析、系统模块图、流程图、数据结构设计、界面设计、功能模块实现与测试、设计的算法及主要程序代码等内容,并结合自己的实习情况写出实习总结。3 实训内容本次实习所选择的题目是学生成绩管理系统和贪吃蛇游戏。在实习过程中完成了学生成绩管理系统和贪吃蛇游戏的需求分析、系统功能模块的设计、系统流程图的设计、数据结构设计、界面设计以及代码的实现与测试。4 学生成绩管理系统的设计与实现4.1 设计题目使用C语言,在vc6.0环境下,实现一个简单实用的基于文件的小型学生成绩管理系统,并实现成绩的储存,查询,添加,删除,排序等基本操作,以方便成绩的管理。4.2 需求分析以某班不超过30人,进行3科考试为准。编程实现如下要求:(1) 录入每个学生的学号、姓名和各科考试成绩。(2) 计算每门课程和每个学生的总分和平均分。(3) 按每个学生的总分由高到低或由低到高排出名次表。(4) 按学号、姓名由小到大排出成绩表。(5) 按学号、姓名查询学生排名和考试成绩。(6) 按成绩分类并输出统计结果(7) 将每个学生的记录信息写入文件,并能读取出来。4.3 数据结构typedef structure student long num; char maneMAX_LEN; float scoreCOURSE_NUM; float sum; float aver;4.4 数据文件#include #include #include 4.5 系统模块图4.6 系统流程图4.7 系统实现1、主函数 int main() /*主函数*/char ch;int n,i;STU sturecordSTU_NUM;float sumofcourseCOURSE_NUM,averofcourseCOURSE_NUM;printf(输入学生人数(n%d):,STU_NUM);scanf(%d,&n);while(1)ch=menu();switch(ch)case 1:readscore(sturecord,n);break;case 2:aversumofeverycourse(sturecord,sumofcourse,averofcourse,n); for(i=0;iCOURSE_NUM;i+) printf(科目%d:总分=%.0f,平均分=%.0fn,i+1,sumofcoursei,averofcoursei); break; case 3:aversumofeverystudent(sturecord,n);break; case 4:sortbyscore(sturecord,n,descending); printscore(sturecord,n); break; case 5:sortbyscore(sturecord,n,ascending); printscore(sturecord,n); break; case 6:assortbynum(sturecord,n); printscore(sturecord,n); break; case 7:sortbyname(sturecord,n); printscore(sturecord,n); break; case 8:searchbynum(sturecord,n); break; case 9:searchbyname(sturecord,n); break; case 10:statisticanalysis(sturecord,n); break; case 11:printscore(sturecord,n); break; case 12:writetofile(sturecord,n); break;case 13:n=readfromflie(sturecord); break;case 0:printf(结束程序); break; default:printf(错误); break; return 0;2、菜单函数int menu(void) /*菜单函数*/int itemselected;printf(nttt学生成绩管理系统n);printf(ttt1.输入成绩n);printf(ttt2.计算每科的总分和平均分n); 。scanf(%d,&itemselected);return itemselected;3、读入函数void readscore(STU stu,int n) /*输入n个学生的各门课成绩*/int i,j;for (i=0;in;i+)scanf(%ld%s,&stui.num,&);for (j=0;jCOURSE_NUM;j+)scanf(%f,&stui.scorej);4、计算函数void aversumofeverystudent(STU stu,int n) /*计算学生各门课程的总分和平均分*/int i,j;for (i=0;in;i+)stui.sum=0;for (j=0;jCOURSE_NUM;j+)stui.sum+=stui.scorej;stui.aver=stui.sum/COURSE_NUM;printf(学生%d:总分=%.0f,平均分=%.0fn,i+1,stui.sum,stui.aver);5、计算函数 void aversumofeverycourse(STU stu,float sum,float aver,int n) /*计算总分和平均分*/ int i,j;for (j=0;jCOURSE_NUM;j+)sumj=0;for (i=0;in;i+)sumj+=stui.scorej; averj=sumj/n;6、排序函数 void sortbyscore(STU stu,int n,int (*compare)(float a,float b) /*排列数组sum的元素值*/int i,j,k,t;float temp1;long temp2;char temp3MAX_LEN;for (i=0;in-1;i+)k=i;for (j=i+1;jn;j+)if(*compare)(stuj.sum,stuk.sum) k=j;if (k!=i)for (t=0;tCOURSE_NUM;t+)temp1=stuk.scoret; stuk.scoret=stui.scoret;stui.scoret=temp1;temp1=stuk.sum;stuk.sum=stui.sum;stui.sum=temp1;temp1=stuk.aver;stuk.aver=stui.aver;stui.aver=temp1;temp2=stuk.num;stuk.num=stui.num;stui.num=temp2;strcpy(temp3,);strcpy(,);strcpy(,temp3);7、排序函数 int ascending(float a,float b) /*升序排序*/ return ab;9、排序函数 void assortbynum() 6中(*compare)(stuj.sum,stuk.sum)改为stuj.sumstuk.sum即可10、排序函数 void sortbyname(STU stu,int n) /*交换法实现名字按字典顺序排序*/ int i,j,t;float temp1;long temp2;char temp3MAX_LEN;for (i=0;in-1;i+)for (j=i+1;jn;j+)if(strcmp(,)0) for (t=0;tCOURSE_NUM;t+)temp1=stui.scoret; stui.scoret=stuj.scoret;stuj.scoret=temp1;temp1=stui.sum;stui.sum=stuj.sum;stuj.sum=temp1;temp1=stui.aver;stui.aver=stuj.aver;stuj.aver=temp1;temp2=stui.num;stui.num=stuj.num;stuj.num=temp2;strcpy(temp3,);strcpy(,);strcpy(,temp3); 11、查询函数 void searchbynum(STU stu,int n) /*按学号查找结果*/ long number;int i,j;printf(输入你想要查找的学号);scanf(%ld,&number);for (i=0;in;i+)if (stui.num=number)printf(%ldt%st,stui.num,);for (j=0;jCOURSE_NUM;j+)printf(%.0ft,stui.scorej);printf(%.0ft%.0fn,stui.sum,stui.aver);return;printf(n没找到n);12、查询函数void searchbyname(STU stu,int n) /*按名字查找成绩表*/ char xMAX_LEN;int i,j; printf(请输入你想要查找的名字);scanf(%s,x);for (i=0;in;i+)if (strcmp(,x)=0)printf(%ldt%st,stui.num,);for (j=0;jCOURSE_NUM;j+)printf(%.0ft,stui.scorej);printf(%.0ft%.0fn,stui.sum,stui.aver);return;printf(n没找到n);13、统计函数 void statisticanalysis(STU stu,int n) /*统计个分数段人数及百分比*/ int i,j,total=0,t6;for (j=0;jCOURSE_NUM;j+)printf(各分数段比例:n);for (i=0;i6;i+)ti=0;for (i=0;i=0 & stui.scorej60)t0+;else if(stui.scorej70)t1+;else if(stui.scorej80)t2+;else if(stui.scorej90)t3+;else if(stui.scorej100)t4+;else if(stui.scorej=100)t5+;for (total=0,i=0;i=5;i+)total+=ti;if (total!=n)printf(不正确);break;for(i=0;i=5;i+)if(i=0)printf(60t%dt%.2f%n,ti,(float)ti/n*100);else if(i=5)printf(%dt%dt%.2f%n,(i+5)*10,ti,(float)ti/n*100);else printf(%d-%dt%dt%.2f%n,(i+5)*10,(i+5)*10+9,ti,(float)ti/n*100);14、打印函数 void printscore(STU stu,int n) /*打印学生成绩*/int i,j;printf(学号t姓名t数学t英语t物理t总分t平均分n);for(i=0;in;i+)printf(%ldt%st,stui.num,);for(j=0;jCOURSE_NUM;j+)printf(%.0ft,stui.scorej); printf(%.0ft%.0fn,stui.sum,stui.aver); 15、输出函数 void writetofile(STU stu,int n) /*输出学生信息到文件中*/ FILE *fp;if(fp=fopen(student.txt,w)=NULL)printf(打开文件失败);exit(0); fwrite(stu,sizeof(STU),n,fp);fclose(fp);16、读取函数 int readfromflie(STU stu) /*文件中读取学生信息*/ FILE *fp; int i; if(fp=fopen(student.txt,r)=NULL)printf(打开文件失败);exit(0); for(i=0;!feof(fp);i+) fread(&stui,sizeof(STU),1,fp); fclose(fp);printf(总共有学生%d.n,i-1);return i-1;5 贪吃蛇游戏的设计与实现5.1 设计题目贪吃蛇是一款经典的休闲游戏,一条蛇在密闭的围墙内,随机出现一个食物,通过控制方向键操作小蛇不停的朝着食物前进,直到吃掉食物。每吃一个食物,小蛇都会长长一截,随之难度增大;当小蛇头撞到墙或自己时,小蛇死亡。5.2 需求分析(1) 用上、下、左、右键控制游戏区蛇的运动方向,使之吃食而使身体变长;(2) 用户可以调节蛇的运行速度来选择不同的难度;(3) 游戏分多个难度级别;(4) 用户可自选颜色;(5) 记录成绩前五名的游戏玩家;(6) 增加背景音乐;(7) 提高障碍物和游戏级别。5.3 数据结构typedef enum /*表示方向*/left,right,up,downDIR;typedef struct /*表示坐标*/ int x;int y;COOR;struct FOOD /*表示食物信息*/ COOR crd; /*食物坐标*/ int flag; /*食物状态,0表示被吃啦*/ food;struct SNAKE /*蛇的信息*/ COOR crdSIZEMAX; /*每节蛇坐标*/ int node; /*当前节数*/ DIR dir; /*前进方向*/ snake;5.4 数据文件 5.5 系统模块图5.6 系统流程图5.7 系统实现1.主函数:void main()init();while(1)while(!kbhit()if (!food.flag) setfoodcrd();showfood();showsnake();judgeslod();judgefood();snakemove();Sleep(speed);changeskdir(); 2.初始化:void init() /*初始化*/ initgraph(640,480);srand(time(NULL);food.flag=0;snake.crd0.x=0+SNAKELEN;snake.crd0.y=0;snake.crd1.x=0;snake.crd1.y=0;snake.node=2;snake.dir=right;3.随机产生食物:void setfoodcrd() /*随即生成食物*/food.crd.x=rand()%(600/SNAKELEN)*SNAKELEN;food.crd.y=rand()%(480/SNAKELEN)*SNAKELEN;food.flag=1; 4.画食物:void showfood() /*画食物*/rectangle(food.crd.x,food.crd.y,food.crd.x+SNAKELEN,food.crd.y+SNAKELEN); 5.画蛇:void showsnake() /*画蛇*/ int i;for(i=snake.node-1;i=0;i-)rectangle(snake.crdi.x,snake.crdi.y,snake.crdi.x+SNAKELEN,snake.crdi.y+SNAKELEN);setcolor(BLACK);rectangle(snake.crdsnake.node.x,snake.crdsnake.node.y,snake.crdsnake.node.x+SNAKELEN,snake.crdsnake.node.y+SNAKELEN);setcolor(RED);rectangle(snake.crdsnake.node-1.x,snake.crdsnake.node-1.y,snake.crdsnake.node-1.x+SNAKELEN,snake.crdsnake.node-1.y+SNAKELEN); 6.蛇移动:void snakemove() /*蛇移动*/int i;for(i=snake.node;i0;i-)snake.crdi.x=snake.crdi-1.x;snake.crdi.y=snake.crdi-1.y;switch(snake.dir)case up:snake.crd0.y-=SNAKELEN;break;case down:snake.crd0.y+=SNAKELEN;break;case left:snake.crd0.x-=SNAKELEN;break;case right:snake.crd0.x+=SNAKELEN;showsnake();void changeskdir() /*改变蛇的方向*/char key;key=getch();switch(key)casew: caseW: if(snake.dir!=down) snake.dir=up; break;cases: caseS: if(snake.dir!=up) snake.dir=down; break;casea: caseA: if(snake.dir!=right) snake.dir=left; break;cased: caseD: if(snake.dir!=left) snake.dir=right; break; 8.判断蛇是否死亡:void judgeslod() /*判蛇是否死亡*/int i;if(snake.crd0.x=640|snake.crd0.y=480)gameover();for(i=snake.node-1;i0;i-)if(i=snake.crd0.x=snake.crdi.x&snake.crd0.y=snake.crdi.y)gameover; 9.判断蛇是否吃到食物:void
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 蓄电池供电输送知识培训课件
- 2025年全国特种设备作业人员-叉车证理论考试题库(含答案)
- 2025年门式起重机操作证(Q2)考试题库(含答案)
- 2025年山东省日照市莒县中考二模物理试题(含答案)
- 小班认识数字题目及答案
- 消费金融算术题目及答案
- 2025玉米购销运输合同
- 线性代数题目理解及答案
- 葡萄酒保储知识培训课件
- 一堂课告别双体系小白
- 职业体验活动记录表
- DB23T 2849-2021 公共视频监控系统监控杆体施工规范
- 主题阅读1:大自然的文字
- 电梯周期日常维护保养项目表
- (中职中专)二维动画设计软件应用完整版课件汇总全书电子教案(最新)
- 国际贸易理论与实务ppt课件(完整版)
- GB∕T 6546-2021 瓦楞纸板边压强度的测定
- 历史选择性必修1 国家制度与社会治理(思考点学思之窗问题探究)参考答案
- 学前儿童发展心理学(第3版-张永红)教学课件1754
- 医学资料冠心病英文版
- 中职《机械基础》全套课件(完整版)
评论
0/150
提交评论