欢迎来到一句话经典语录网
我要投稿 投诉建议
当前位置:一句话经典语录 > 心得体会 > 移动程序设计实训心得体会

移动程序设计实训心得体会

时间:2017-07-18 01:35

计算机网络实训总结

比如说你参加具体的一个组建网络过程。

如,硬件的选配、网络物理的连接、网络节点参数的设置、网络调试等,包括以下几部分:1、具体工作2、问题发现3、解决办法

计算机组装与维护实训报告总结 6000字急用

只找到这个!改成xp就行了计算机组装WIN安全设置(1).对系统进行安全设置的基本思路 公用微机的操作者一般分为三大类:第一类是系统管理员,系统管理员拥有对系统的绝对控制权,一般来说没有必要对系统管理员的权限进行限制;第二类是普通用户,普通用户使用计算机完成各种工作,因此必须获得一定的权限,不过也要防止普通用户超越权限或破坏系统;第三类为者,入侵者根本无权使用计算机,对入侵者一定要将系统的一切功能全部屏蔽。

按照这个思路,首先必须对 的正常操作人员(包括超级用户)进行设置,将操作人员名单全部输入到系统中,然后分别对他们的权限进行适当设置,这样既保证了他们的安全,又禁止他们越权操作,最后便是采取措施,防止非法用户“入侵”,确保系统安全。

(2).微机操作人员的设置 系统是一个多用户操作系统,但它在用户管理方面却非常混乱,者甚至可以在启动时通过密码确认框直接添加新的用户,这对控制系统带来了很大的不便。

不过 对此进行了改进,它提供了用户名的选择性登录功能,所以可事先将所有用户全部添加到系统中,然后由系统在启动时将这些用户列表显示出来,不同用户从中选择自己的用户名并输入相应的密码之后即可以自己的名义启动系统,而非法用户则无法通过密码确认框直接创建新用户,他们只能通过按下“取消”按钮或Esc键来进入系统。

这样,机器便能明确地区分正常用户(包括超级用户和普通用户)与者——通过登录框选择用户名并输入密码进入的是正常用户,使用“取消”按钮进入的是非法入侵者,可以据此分别对他们的权限进行限制。

须要说明的是,Windows 98在默认情况下仍然采用与Windows 相同的“老式”用户名登录方式,我们想要使用用户名选择性登录方式则应执行如下步骤: 下面1~4步骤主要用于在Windows 98中设置用户名及密码,若用户已经设置过,则可跳过这些步骤,直接从第5步开始。

1.双击Windows 98“”中的“密码”图标,打开“密码属性”设置框。

2.复选“用户可自定义首选项及桌面设置,登录时,Windows将自动启用个人设置”选项。

3.根据需要决定是否选择将“开始”菜单添加到用户的自定义设置中(一般应选择“是”),然后单击“确定”按钮,接着根据屏幕提示设置适当的用户密码。

4.单击“确定”按钮退出设置框。

重新启动计算机,此时系统就会弹出一个常规性的密码设置窗口,可输入刚设置的用户名及密码,按正常方式启动Windows 98。

5.启动“”,双击“网络”图标,打开“网络”设置框。

6.在“网络”设置框中选择“配置”选项卡。

7.从“主网络登录”列表框中选择“Microsoft友好登录”选项。

8.单击“确定”按钮并重新启动计算机。

此后,Windows 98启动时弹出的密码设置框就会发生根本性的变化,它会将所有已经添加的用户名全部以列表方式显示出来,广大用户只须在“选择用户名”列表框中选择自己的名称,然后再在“密码”框中输入相应的密码即可启动各自的系统配置。

执行上述步骤之后,系统安装用户(超级用户)已经被添加到了Windows 98中,接下来就应将操作用户(普通用户)添加到Windows 98中。

由于采用选择性登录方式,系统不允许直接在Windows 98的窗口中创建新的用户,必须通过双击“”中的“用户”图标,打开“添加用户”窗口,并在“添加用户”向导的帮助下逐步将本台计算机上所有普通用户的用户名及密码逐一添加到系统中(此后就会出现在Windows 98的启动登录框中),然后就可以分别对这些用户的权限进行设置了。

(3).对超级用户权限的设置 对超级用户而言,其操作权限一般不应作太多限制(否则谁来对系统进行控制呢?),不过仍须对、屏幕保护等功能设置必要的密码,以维护自己离机时系统的安全,防止其他用户非法入侵。

为此,我们可重新启动计算机,当系统弹出框时选择自己的名字并输入相应的密码,采用超级用户身份登录系统,然后根据需要分别对有关密码进行设置。

为Windows 98的功能设置密码 1.单击“开始”按钮,然后依次选择“设置”、“控制面板”,启动Windows 98的控制面板。

2.双击“控制面板”中的“”图标,打开“电源管理属性”设置框。

3.从“电源管理属性”设置框中选择“高级”标签。

4.复选“计算机退出待机状态时提示输入密码”选项。

5.选择“电源管理属性”设置框中的“电源方案”标签。

6.在“系统等待状态”列表框中选择计算机在没有操作多长时间之后自动启动电源管理功能(即进入“挂起”状态),主要有“从1分钟之后”到“从不”等多种选项,我们应根据需要选择不同的选项,建议选择“从10分钟之后”。

7.为关闭监视器和关闭硬盘设置合适的时间间隔。

8.单击“确定”按钮,关闭“电源管理属性”设置框。

这样就启动了Windows 98的电源管理功能,并为其设置了保护的密码,今后如果用户在指定的时间(10分钟)内没有对计算机进行任何操作(包括移动键盘和鼠标),计算机就将自动进入“挂起”状态,以便节省电力消耗(单击“开始”按钮并选择“关闭系统”命令,然后从弹出的“关闭系统”对话框中选择“将您的计算机转入睡眠状态”也可达到同样的目的),而后用户通过敲击键盘或移动鼠标来激活计算机时,系统将会要求用户输入密码,不输入密码将不能返回正常状态,这就进一步保护了用户数据的安全。

注意的是,Windows 98电源管理功能并没有自己单独的密码,它的密码与用户的启动密码相同

为设置密码 1.用鼠标右键单击桌面空白处,然后从弹出的快捷菜单中执行“属性”命令,打开“显示属性”设置框。

2.单击“”标签,然后从“”列表框中选择所需的屏幕保护程序,复选“密码保护”选项。

3.单击“更改”按钮,打开“更改密码”对话框,重复两次输入密码并单击“确定”按钮,关闭“更改密码”对话框。

4.单击“设置”按钮,对屏幕保护的有关功能进行适当设置:在“等待”框中设置多长时间不使用计算机后系统自动启动屏幕保护(一般可选择5分钟)。

5.单击“确定”按钮,保存设置并关闭“显示属性”设置框。

这样,就达到了为屏幕保护设置密码的目的。

此后只要离开计算机(即不操作计算机)的时间达到5分钟,系统就会自动启动屏幕保护程序,而当用户移动鼠标或敲击键盘想返回正常工作状态时,系统就会打开一个密码确认框,只有输入正确的密码之后才能返回系统,不知道密码的用户将无法进入工作状态,从而保护了数据的安全。

须要说明的是,部分设计不完善的屏幕保护程序没有屏蔽系统的Ctrl+Alt+Del组合键,非法用户只要按下Ctrl+Alt+Del键即可强行将这些屏幕保护程序关闭,从而使其失去应有的保护作用。

判断一个屏幕保护程序是否屏蔽了Ctrl+Alt+Del组合键,可采用如下办法:为其设置密码后激活它,然后移动鼠标,打开它的密码确认框,再按下Ctrl+Alt+Del键。

若能弹出“关闭程序”对话框则表明该程序没有屏蔽Ctrl+Alt+Del键,不能使用;若无法弹出“关闭程序”对话框则表明该程序屏蔽了Ctrl+Alt+Del键,可放心使用。

现在还有个问题,屏幕保护最快只能在用户离开1分钟之后自动启动,这就存在一个时间差的问题!解决的方法是,可以打开Windows 98的SYSTEM子目录,找到相应的屏幕保护程序(*.SCR文件),将它们拖曳到桌面上,选择弹出菜单中的“在当前位置创建快捷方式”命令,在桌面上为这些屏幕保护程序建立一个快捷方式。

此后,在离开计算机时双击这个快捷方式即可快速启动屏幕保护。

另外,利用屏幕保护程序的密码保护功能,还可令Windows 98一启动就自动运行屏幕保护程序,此后只有输入密码才能启动计算机。

不过此功能绝对不能通过Windows 98的“启动”程序组来实现(Windows 98“启动”程序组中的所有程序在启动时都可通过按下跳过,从而无法启动屏幕保护功能),只有通过修改注册表数据才能确保设置万无一失。

具体步骤为: 1.运行regedit命令, 2.展开HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run分支 3.在Run主键中新建一个名为“密码确认”的字符串值 4.双击新建的“密码确认”字符串,打开“编辑字符串”对话框 5.在“编辑字符串”对话框的“键值”栏中输入相应的屏幕保护程序名及所在的路径。

通过这样的设置,此后每次启动Windows 98时屏幕保护程序都会自动运行(利用试图跳过启动程序和按Ctrl+Alt+Del试图强行关闭系统都无能为力),只有在输入密码之后才能使用,从而确保了系统的安全。

禁止光盘的自动运行功能 光盘的自动运行功能会带来麻烦。

Windows 98具有自动运行光盘的功能,当在光驱中插入CD之后,CD会自动进行播放,而当插入根目录中带有AUTORUN.INF文件的光盘之后,光盘也会自动运行。

Windows 98的屏幕保护功能并没有禁止光盘的自动运行功能,也就是说即使处于屏幕保护程序密码的控制之下,用户在插入一张根目录中含有AUTORUN.INF文件的光盘之后,系统仍会自动运行,这就给恶意攻击者带来了可乘之机(据说市面上已经出现了一种专门用于破解屏幕保护程序密码的自动运行光盘,插入该光盘后,系统就会自动对屏幕保护功能的密码进行分析并破译出密码,然后再将密码写到软盘上,接下来……),因此必须将光盘的自动运行功能关闭,让屏幕保护真正发挥它应有的安全保护作用。

关闭光盘的自动运行功能,可以按如下步骤操作: 1.单击“我的电脑”图标,然后从弹出的快捷菜单中执行“属性”命令,打开“系统属性”设置框2.单击“设备管理器”标签 3.展开CDROM分支,从中选择用户所使用的光驱 4.单击“属性”按钮,打开光驱属性设置框 5.单击“属性”标签6.取消“自动插入功能”选项 7.连续单击两次“确定”按钮,保存设置并退出所有对话框。

执行上述步骤后,无论谁在光驱中插入根目录中含有AUTORUN. INF文件的光盘之后,系统都不会自动运行。

(4).对普通用户权限的限制 对这些用户,一方面应根据工作需要赋予他们适当的权限,如启动计算机,打开相应的应用程序,对自己的数据文件进行拷贝、删除等操作,以保证他们工作的正常开展,另一方面,为了防止他们对系统进行修改而破坏整个系统,必须对他们的权限进行必要的限制,如不允许他们使用控制面板中的某些设置项目以防任意修改系统,不允许使用注册表编辑器、隐藏系统文件所在的分区以防意外等。

对普通用户权限进行设置的步骤为: 启动Windows 98,系统弹出启动登录框后从中选择须要限制其权限的普通用户,并输入相应的密码,以该用户的身份进入系统。

参照超级用户的有关步骤对电源管理、屏幕保护等项目设置密码,然后根据需要对他们的权限进行必要的限制(注意,由于工作原因,不同普通用户可能须要拥有不同的操作权限,因此在对他们的权限进行设置时必须根据实际情况有选择地加以限制),最后将启动密码、电源管理及屏幕保护的密码通知相应用户,要求其独立对这些初识密码进行更改。

所以,对相应用户权限的限制工作也告完成,此后即可由他们在限制的权限内正常对计算机进行操作。

对普通用户的权限进行限制的措施主要包括: 删除“开始”菜单中的有关命令和项目 为了防止用户利用Windows 98“开始”菜单上的“查找”、“运行”等命令来运行一些特殊的应用程序,必须采用适当方法将它们删除: 对“开始”菜单中“收藏夹”选项的操作: 1.运行Regedit命令 2.展开HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer分支 3.在Explorer主键下新建一个名为NoFavoritesMenu的DWORD值,双击该值,在“编辑DWORD值”对话框中将键值由0改为1 4.单击“确定”按钮,关闭“编辑DWORD值”对话框,重新启动Windows 98,“开始”菜单中的“收藏夹”选项就会消失。

对“开始”菜单中“文档”选项的操作: 在Explorer主键下新建一个名为“NoRecentDocsHistory”的DWORD值,并将其值修改为1,则“文档”菜单中的内容不能被修改;在Explorer主键下新建一个名为“ClearRecentDocs OnExit”的DWORD值,并将其值修改为1,则每次退出系统时,Windows 98将自动清除文档菜单中的历史记录,在Explorer主键下新建一个名为“NoRecentDocs Menu”的二进制值,并将其值修改为“01 00 00 00”,则“文档”菜单将从Windows的“开始”菜单中消失。

对“开始”菜单中“运行”选项的操作: 利用上面相同的方法,在Explorer主键下新建一个名为“NoRun”的DWORD值,并将其值修改为1,则“运行”命令将从Windows 98的“开始”菜单中消失。

对“开始”菜单中“设置”选项的操作: 利用上面相同的方法,在Explorer主键下新建一个名为“NoSetFolders”的二进制值,并将其值修改为“01 00 00 00”,则“设置”子菜单将从Windows 98的“开始”菜单中消失;在Explorer主键下新建一个名为“NoSetTaskbar”的二进制值,并将其值修改为“01 00 00 00”,将不能再对Windows 98的任务栏属性进行设置(前面设置了“NoSetFolders”二进制值之后,Windows 98的“设置”菜单不复存在,不过仍可通过右击Windows 98任务栏,并执行“属性”命令打开“任务栏”属性对话框,这显然不能满足关闭“任务栏”属性的要求,而设置此参数后,右击任务栏的方法也将失效)。

对“开始”菜单中“查找”选项的操作: 利用上面相同的方法,在Explorer主键下新建一个名为“NoFind”的DWORD值,并将其值修改为1,“开始”菜单中的“查找”子菜单就会消失。

对“开始”菜单中“关闭系统”选项的操作: 利用上面相同的方法,在Explorer主键下新建一个名为“NoClose”的DWORD值,并将其值修改为1,“关闭系统”命令就将从“开始”菜单中消失。

对“开始”菜单中“注销”选项的操作: 利用上面相同的方法,在Explorer主键下新建一个名为“NoLogOff”的二进制值,并将其值修改为“01 00 00 00”,则“注销”命令将从Windows 98的“开始”菜单中消失。

取消用户的环境设置: 利用上面相同的方法,在Explorer主键下新建一个名为“NoSaveSettings”的二进制值,并将其值修改为“01 00 00 00”,此后每次退出Windows 98时系统都不会保存用户对环境所作的设置。

经过上述设置后,可以满足不同用户的需要。

隐藏“开始”菜单中的应用程序 对于普通用户,可能要防止他们使用某些应用程序,这时就应采用下面的方法将Windows 98“开始”菜单中的应用程序隐藏起来: 1.用鼠标右键单击“开始”菜单,从弹出的快捷菜单中执行“打开”命令,打开“Start Menu”文件夹窗口2.在“Start Menu”文件夹窗口中找到希望隐藏的应用程序的快捷方式。

3.右击该快捷方式,然后从弹出的快捷菜单中执行“属性”命令,打开相应快捷方式的属性设置框。

4.复选“隐藏”选项,然后单击“确定”按钮,关闭所有对话框。

此后,这些隐藏的快捷方式就会从Windows 98的“开始”菜单中消失,从而在一定程度上达到了保密的目的(取消这些快捷方式的隐藏属性后即可令其重新显示)。

删除“网上邻居”等系统图标 基于某些特殊需要,可能要禁止普通用户使用桌面上的“网上邻居”、“我的文档”、“回收站”等系统图标,而它们又不能采用常规方法删除。

为此,可执行如下步骤: 1.运行注册表编辑器Regedit打开注册表 2.展开注册表的HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\Namespace主键 3.此时可以从NameSpace 主键中看到“网上邻居”、“我的文档”、“回收站”等分支,只须删除这些分支即可达到删除桌面上相应系统图标的目的。

在图形界面下隐藏某个驱动器图标 为防止普通用户的破坏,希望将保存系统文件的磁盘分区(如C盘)以及光驱、软驱等隐藏起来,为此可以进行下面的操作: 1.运行注册表编辑器Regedit打开注册表 2.展开注册表的HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer分支 3.用鼠标右键单击桌面空白处,然后执行快捷菜单中“新建”子菜单中的“二进制值”命令,创建一个名为“NoDrives”的二进制值。

该二进制值(“NoDrives”)就是用于设置是否隐藏某个驱动器的,它由四个二进制字节构成(缺省值为00 00 00 00),每个字节的每一位都分别对应一个磁盘驱动器的盘符。

当某位为1时,资源管理器及“我的电脑”中的相应驱动器图标即会隐藏起来。

驱动器的值是这样确定的:A~Z的值依次为2的0至25次方,把要禁止的驱动器的值相加,转换为十六进制,就是NoDrives的键值。

如要禁止A、D、E,则为1+8+16=25,转换为十六进制数19,修改NoDrives的值为“19 00 00 00”即可。

完成上述操作后,相应的磁盘驱动器图标就会从Windows 98的图形界面中消失,无论是从“资源管理器”、“我的电脑”及有关文件的打开、关闭对话框还是在其它外挂文件管理器(如Windows Commander等)中都无法发现这些隐藏了的磁盘分区的踪迹,从而满足了防止普通用户对系统文件进行破坏的需要,同时也使得他们不能使用任何外来程序(光驱、软驱都不能访问,光驱的自动运行功能又被禁止,还能安装、运行其它程序吗

),很好地保护了系统的安全。

《Android项目开发实训》项目总结报告新

课程设计小组报告课程名称:软件系统课程设计校内方向:移动互联方向设计名称:xxxxxxxxx系统专业班级:软件1408班学号:2014001684组长姓名:李三组员姓名:李三、李三、李三李三、李三、李三指导教师:孙静宇2017年07月06日 任务书...................................................0太原理工大学课程设计任务书学生姓名|李三|专业班级|软件1408|课程名称|应用软件方向综合课程设计|设计名称|Xxxxx系统|设计周数|2|设计|任务|主要|设计|内容|根据选定题目填写。

例如 1.搭建xxxx环境;| 2.按照….进行分组,选择..设计题目;| 3.开发成绩查询、…等三个功能;|设计要求|根据选定题目填写。

例如|1.开发、设计与运行环境要求:Tomcat7.0、JDK1.7,….等;|2.完成3-5以上功能点;|3.进行模块测试、系统测试、编写设计文档;|主要参考|资 料| 参考书籍及文章:| 作者1,作者2.书名[M].出版社名.出版年| 作者1,作者2..文章标题[J].出版物名称.出版年,卷(期):初始页码-终止页码.|学生提交|归档文件| 项目小组必须提交一份完整的项目技术说明文档(纸质版和电子版),文档内容必须包含《需求分析说明书》、《概要设计说明书》、《详细设计说明书》、《源程序》、《测试计划》、《测试报告》与《项目开发计划》等部分。

每一位同学应提交一份开发日志,详细记录课程设计过程中出现的问题、解

300分 在线求计算网络实训报告

学生课程设计(论文)  题 目: 贪吃蛇游戏程序设计指导  学生姓名: 学 号:200910801001  所在院(系): 计算机学院  专 业: 计算机科学与技术  班 级: 2009级一班  指导教师: 何春燕 职称: 讲 师  2010年06月 18日  目录  摘要…………………………………………………………6  1、设计要求………………………………………………….7  2、所用仪器设备…………………………………………….7  3、具体设计过程…………………………………………….8.  3.1、程序功能……………………………………………8  3.2设计思想………………………………………………8  3.3.设计的具体实现……………………………………8.  3.4 总体流程图………………………………………….14  3.5、程序代码编写及注释………………………………..15  3.6调试问题及解决方法…………………………………21  3.7调试结果…………………………………………….22.  4设计心得体会………………………………………………25.  5、参考文献………………………………………………..26  摘 要  编写C语言程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时计10分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。

作为一个完整的程序,尤其是一个完整的游戏,必须考虑人机交流与用户体验。

游戏的界面不能太丑,更不能连个简单的界面都没有。

游戏应该有个比较漂亮的界面,在有必要硬件支持和软件的支持下,游戏开发者必须最大限度的使游戏美观。

游戏的美观是一方面,游戏的内在素质是另一方面。

一个游戏的优劣,最终由玩家决定。

在游戏与玩家见面之前,游戏开发者要设计一种让玩家投入的游戏模式,并且在一定的游戏规则下进行。

  关键词 贪吃蛇 流程图 c语言 源程序 turbo C  贪吃蛇游戏程序设计  1、设计要求  通过游戏程序设计,提高编程兴趣与编程思路,巩固C语言中所学的知识,合理的运用资料,实现理论与实际相结合。

  (1).收集资料,分析课题,分解问题,形成总体设计思路;  (2).深入分析各个小问题,列出大纲,编写各部分程序模块;  (3).对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍;  (4).上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行;  (5).完成课程设计报告,并进行答辩  C语言是一种易学易懂的通用程序设计语言,由于它具有功能性强,运用简洁,灵活兼有高级语言与低级语言的优点,以及“目标程序效率高”可移植性和能在各种系统上普遍实现等特点使它成为当今世界上的主流程序设计语言之一,同时被选作目前全世界广泛应用,同时也是大学生必修的科目。

作为一位当代的大学生更要很好的利用它,学好一门设计语言,实现学以至用。

  制作C程序报告,可以巩固和加深自己对C语言课程的基本知识的理解和掌握,并且能够掌握C语言编程和程序调试的基本技能。

  通过游戏程序的设计训练可以提高自己的基本技能,更好地掌握字符串的表示方法和字符串函数的功能、Tc图形操作的基本知识、键盘上特殊键的获取以及图形方式下光标的显示,提高自己编程兴趣与编程水平,学会如何正确的书写程序设计说明文档,提高运用C语言解决实际问题的能力,巩固C语言语法规则的理解和掌握,学会通过源程序写出流程图,提高自学以及查阅资料的能力。

  2、所用仪器设备  1、能正常工作的计算机一台; 2、WindowsXP;  3、TC程序; 4、Microsoft Word2003;  3、具体设计过程  3.1、程序功能  贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体叉蛇头撞倒自己身体游戏结束。

  3.2 设计思想  程序关键在于表示蛇的图形及蛇的移动。

用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。

移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。

食物的出现与消失也是画矩形块和覆盖矩形块。

为了便于理解,定义两个结构体:食物与蛇。

  3.3.设计的具体实现  (1)函数定义  函数定义是对各个基础函数的定义,并且设置需要运用的信息,便于调用  #define N 200  #include \\\/*图形头文件*\\\/  #include \\\/*包含rand等函数*\\\/  #include \\\/*包含bios函数*\\\/  #define LEFT 0x4b00\\\/*光标左键值*\\\/  #define RIGHT 0x4d00\\\/*光标右键值*\\\/  #define DOWN 0x5000\\\/*光标下键值*\\\/  #define UP 0x4800\\\/*光标上键值*\\\/  #define ESC 0x011b\\\/*ESC的ASCII码*\\\/  int i,key;\\\/*图形坐标变量及按键变量*\\\/  int score=0;\\\/*得分*\\\/  int gamespeed=10000;\\\/*游戏速度自己调整*\\\/  struct Food  {  int x;\\\/*食物的横坐标*\\\/  int y;\\\/*食物的纵坐标*\\\/  int yes;\\\/*判断是否要出现食物的变量*\\\/  }food;\\\/*食物的结构体*\\\/  struct Snake  {  int x[];\\\/*蛇的横坐标*\\\/  int y[];\\\/*蛇的纵坐标*\\\/  int node;\\\/*蛇的节数*\\\/  int direction;\\\/*蛇移动方向*\\\/  int life;\\\/* 蛇的生命,0活着,1死亡*\\\/  }snake;  void Init(void);\\\/*图形驱动*\\\/  void Close(void);\\\/*图形结束*\\\/  void DrawK(void);\\\/*画界面函数*\\\/  void GameOver(void);\\\/*结束游戏*\\\/  void GamePlay(void);\\\/*玩游戏具体过程*\\\/  void PrScore(void);\\\/*输出成绩*\\\/  void main(void)\\\/*主函数*\\\/  (2)主函数main( )  主函数是程序的主流程,首先定义使用到的常数、全局变量及函数原型说明,然后初始化图形系统,调用函数DrawK()画出开始画面,调用函数GamePlay(),即玩游戏的具体过程,游戏结束后调用Close()关闭图形系统,结束程序  void main(void)\\\/*主函数*\\\/  {  Init();\\\/*图形驱动*\\\/  DrawK();\\\/*开始画面*\\\/  GamePlay();\\\/*玩游戏具体过程*\\\/  Close();\\\/*图形结束*\\\/  }  void Init(void)\\\/*图形驱动*\\\/  {  int gd=DETECT,gm;  initgraph(&gd,&gm,c:\\\\\\\c); \\\/*第一个参数表示图形适配器的类型,第二个为在该类型下图形的显示模式,第三个参数指定驱动程序所在目录。

*\\\/  cleardevice();  }  (3) 画界面函数DrawK( )  主界面是一个封闭的围墙,用两个循环语句分别在水平和垂直方向输出连续的宽度和高度均的矩形方块,表示围墙,为了醒目,设置为白色。

  void DrawK(void)\\\/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*\\\/  {  setbkcolor(0);\\\/*设置当前背景颜色*\\\/  setcolor(YELLOW);\\\/*设置当前画线颜色*\\\/  setlinestyle(SOLID_LINE,0,THICK_WIDTH);\\\/*设置线型*\\\/  for(i=50;i<=600;i+=10)\\\/*画围墙*\\\/  {  rectangle(i,40,i+10,49); \\\/*上边*\\\/  rectangle(i,451,i+10,460);\\\/*下边*\\\/  }  for(i=40;i<=450;i+=10)  {  rectangle(50,i,59,i+10); \\\/*左边*\\\/  rectangle(601,i,610,i+10);\\\/*右边*\\\/  }  }  (4)游戏具体过程函数GamePlay( )  这是游戏的主要组成部分,他采用将前一节的坐标赋给后一节,用背景颜色将最后节去除,当蛇头的坐标与食物的坐标相等时,表示食物被吃掉了。

  void GamePlay(void)\\\/*玩游戏具体过程*\\\/  {  randomize();\\\/*随机数发生器*\\\/  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;  while(food.x%10!=0)\\\/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*\\\/  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];  }  switch(snake.direction) \\\/*定义1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*\\\/  {  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;i595||snake.y[0]<55||snake.y[0]>455)\\\/*蛇是否撞到墙壁*\\\/  {  GameOver();\\\/*本次游戏结束*\\\/  snake.life=1; \\\/*蛇死*\\\/  }  if(snake.life==1)\\\/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*\\\/  break;  if(snake.x[0]==food.x&&snake.y[0]==food.y)\\\/*吃到食物以后*\\\/  {  setcolor(0);\\\/*把画面上的食物东西去掉*\\\/  rectangle(food.x,food.y,food.x+10,food.y-10);  snake.x[snake.node]=-20;snake.y[snake.node]=-20; \\\/*-20表示尾巴长一节*\\\/  \\\/*新的一节先放在看不见的位置,下次循环就取前一节的位置*\\\/  snake.node++;\\\/*蛇的身体长一节*\\\/  food.yes=1;\\\/*画面上需要出现新的食物*\\\/  score+=10;  PrScore();\\\/*输出新得分*\\\/  }  setcolor(4);  for(i=0;i

kbhit)*\\\/  if(snake.life==1)\\\/*如果蛇死就跳出循环*\\\/  break;  key=bioskey(0);\\\/*接收按键*\\\/  if(key==ESC)\\\/*按ESC键退出*\\\/  break;  else  if(key==UP&&snake.direction!=4)  \\\/*判断是否往相反的方向移动*\\\/  snake.direction=3;  else  if(key==RIGHT&&snake.direction!=2)  snake.direction=1;  else  if(key==LEFT&&snake.direction!=1)  snake.direction=2;  else  if(key==DOWN&&snake.direction!=3)  snake.direction=4;  }\\\/*endwhile(1)*\\\/  }  (5)游戏结束函数GameOver( )  游戏结束,清除屏幕,输出分数,显示游戏结束信息。

  void GameOver(void)\\\/*游戏结束*\\\/  {  cleardevice();  PrScore();  setcolor(RED);  settextstyle(0,0,4);  outtextxy(200,200,guojian);  getch();  }  void PrScore(void)\\\/*输出成绩*\\\/  {  char str[10];  setfillstyle(SOLID_FILL, WHITE);  bar(50,15,200,35);  setcolor(6);  settextstyle(0,0,2);  sprintf(str,score:%d,score);  outtextxy(55,20,str);  }  void Close(void)\\\/*图形结束*\\\/  {  getch();  closegraph();  }  3.4 总体流程图  }  3.5、程序代码编写及注释  #define N 200  #include   #include   #include   #define LEFT 0x4b00  #define RIGHT 0x4d00  #define DOWN 0x5000  #define UP 0x4800  #define ESC 0x011b  int i,key;  int score=0;\\\/*得分*\\\/  int gamespeed=50000;\\\/*游戏速度自己调整*\\\/  struct Food  {  int x;\\\/*食物的横坐标*\\\/  int y;\\\/*食物的纵坐标*\\\/  int yes;\\\/*判断是否要出现食物的变量*\\\/  }food;\\\/*食物的结构体*\\\/  struct Snake  {  int x[N];  int y[N];  int node;\\\/*蛇的节数*\\\/  int direction;\\\/*蛇移动方向*\\\/  int life;\\\/* 蛇的生命,0活着,1死亡*\\\/  }snake;  void Init(void);\\\/*图形驱动*\\\/  void Close(void);\\\/*图形结束*\\\/  void DrawK(void);\\\/*开始画面*\\\/  void GameOver(void);\\\/*结束游戏*\\\/  void GamePlay(void);\\\/*玩游戏具体过程*\\\/  void PrScore(void);\\\/*输出成绩*\\\/  \\\/*主函数*\\\/  void main(void)  {  Init();\\\/*图形驱动*\\\/  DrawK();\\\/*开始画面*\\\/  GamePlay();\\\/*玩游戏具体过程*\\\/  Close();\\\/*图形结束*\\\/  }  \\\/*图形驱动*\\\/  void Init(void)  {  int gd=DETECT,gm;  initgraph(&gd,&gm,c:\\\\\\\c);  cleardevice();  }  \\\/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*\\\/  void DrawK(void)  {  \\\/*setbkcolor(LIGHTGREEN);*\\\/  setcolor(11);  setlinestyle(SOLID_LINE,0,THICK_WIDTH);\\\/*设置线型*\\\/  for(i=50;i<=600;i+=10)\\\/*画围墙*\\\/  {  rectangle(i,40,i+10,49); \\\/*上边*\\\/  rectangle(i,451,i+10,460);\\\/*下边*\\\/  }  for(i=40;i<=450;i+=10)  {  rectangle(50,i,59,i+10); \\\/*左边*\\\/  rectangle(601,i,610,i+10);\\\/*右边*\\\/  }  }  \\\/*玩游戏具体过程*\\\/  void GamePlay(void)  {  randomize();\\\/*随机数发生器*\\\/  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;  while(food.x%10!=0)\\\/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*\\\/  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;i595||snake.y[0]<55||  snake.y[0]>455)\\\/*蛇是否撞到墙壁*\\\/  {  GameOver();\\\/*本次游戏结束*\\\/  snake.life=1; \\\/*蛇死*\\\/  }  if(snake.life==1)\\\/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*\\\/  break;  if(snake.x[0]==food.x&&snake.y[0]==food.y)\\\/*吃到食物以后*\\\/  {  setcolor(0);\\\/*把画面上的食物东西去掉*\\\/  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(4);\\\/*画出蛇*\\\/  for(i=0;i

kbhit)*\\\/  if(snake.life==1)\\\/*如果蛇死就跳出循环*\\\/  break;  key=bioskey(0);\\\/*接收按键*\\\/  if(key==ESC)\\\/*按ESC键退出*\\\/  break;  else  if(key==UP&&snake.direction!=4)  \\\/*判断是否往相反的方向移动*\\\/  snake.direction=3;  else  if(key==RIGHT&&snake.direction!=2)  snake.direction=1;  else  if(key==LEFT&&snake.direction!=1)  snake.direction=2;  else  if(key==DOWN&&snake.direction!=3)  snake.direction=4;  }\\\/*endwhile(1)*\\\/  }  \\\/*游戏结束*\\\/  3.6调试问题及解决方法  将已改好的程序复制到Turbo C时,由于软件的内容过多会出现右移,以致大部分的内容无法复制到Turbo C的界面上,最后导致软件无法运行。

解决方法:在改程序时应该把格式设置好,注意左对齐,同时一行的语句尽量的短,最好是一个语句占一行。

  在将程序输入到TC中,对源程序进行编译、运行,发现程序存在的多处错误, 如下图所示:  可以按照程序运行的错误提示对原程序进行修改,在调试过程中有时也会遇到不懂的问题,我去图书馆或上网查阅一些资料或者是向老师请教也解决了对源程序一一修改直到运行成功。

  3.7调试结果  1. 下图为程序调试编译结果:  2下图为程序调试运行结果(即贪吃蛇游戏界面)  4设计心得体会  经过短短两星期的计算机软件技术实习,让我对C程序有了一个更深的了解,以前总认为C语言很枯燥,认为那些我们所设计的程序没有什么用处,但现在通过设计贪吃蛇游戏这个程序使我懂得了如何将所学的知识运用于生活当中。

虽然在刚开始设计程序时不太明白如何去设计这程序,但当我看完《C语言课程设计案例精编》并用C语言做出这个贪吃蛇程序后,让我深深感受到C程序的神奇。

  在设计这个程序中我主要学会了如何运用以下有关C语言的知识  1) 函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序  十分重要,在修改这个程序的过程中也能很快找到程序各模块的作用,大大增  加了程序的可读性。

  2) 分析函数先从main()函数入手。

Main()函数是C源程序编译时的开始,  从main()函数开始读函数可将其他函数的功能理解得更透彻。

  3) 在做程序的时候先列框架,将这个程序所要达到的目的(功能)分析出  来,选择正确的数据结构然后在将程序模块化,按照模块编写函数更加简单合理。

  4) 我还了解了很多的库函数的作用,如字符串函数中有很多对字符串进行  处理的函数,起功能我都有所了解。

  同时我也获得了许多宝贵的经验:  1) 在设计程序之前,务必要对你所设计的题目和内容有一个系统的了解,  知道所设计的题目和内容包含那些资源。

  2) 设计程序采用什么编程语言并不是非常重要,关键要有一个清晰的思路  和一个完整的软件流程图,因而,要先把设计原理与思路搞清楚,再把流程图画出来,这样设计起来就简单多了。

  3) 在设计程序时,不能妄想一次就将整个程序设计好,“反复修改,不断改  进”是程序设计的必经之路,发现错误也是取得成绩的一种。

  4) 要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而  应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便。

  5、参考文献  1.郭翠英,《C语言课程设计案例精编》,中国水利水电出版社,2004.3  2徐金梧,杨德斌等,《TURBO C实用大全》,机械工程出版社,1996.5  3李丽娟 《C语言程序设计教程》 人民邮电出版社  4林华聪 《C语言程序设计思想与实践》 冶金工业出版社  5张继温 《C语言程序设计教程》 高等教育出版社  6 潘云鹤,董金祥等著.计算机图形学——原理、方法及应用.北京:高等教育出版社,2003.12  7 孙家广等,计算机图形学(第三版),清华大学出版社,2004  8 陈元琰编著.计算机图形学实用技术.北京:科学出版社,2000  9和青芳著.计算机图形学原理及算法教程.北京:清华大学出版社  10 陆润民.C语言绘图教程.北京:清华大学出版社,1996

C语言实训心得

源程序:#include stdio.h \\\/*I\\\/O函数*\\\/#include stdlib.h \\\/*其它说明*\\\/#include string.h \\\/*字符串函数*\\\/#include conio.h \\\/*屏幕操作函数*\\\/#include mem.h \\\/*内存操作函数*\\\/#include ctype.h \\\/*字符操作函数*\\\/#include alloc.h \\\/*动态地址分配函数*\\\/#include dos.h#define N 4 \\\/*定义常数*\\\/typedef struct z1 \\\/*定义数据结构*\\\/{ char no[12]; char name[20]; int score[N]; float sum; float average; int order; struct z1 *next;}STUDENT;\\\/*以下是函数原型*\\\/STUDENT *init(); \\\/*初始化函数*\\\/STUDENT *create(); \\\/*创建链表*\\\/STUDENT *delete(STUDENT *h); \\\/*删除记录*\\\/void print(STUDENT *h); \\\/* 显示所有记录*\\\/void lookup(STUDENT *h); \\\/*查找*\\\/void save(STUDENT *h); \\\/*保存*\\\/STUDENT *load(); \\\/*读入记录*\\\/void computer(STUDENT *h); \\\/*计算总分和均分*\\\/STUDENT *Modify(STUDENT *h); \\\/*修改记录*\\\/void append(); \\\/*追加记录*\\\/STUDENT *sort(STUDENT *h); \\\/*按总分排序*\\\/STUDENT *index(STUDENT *h); \\\/*按学号排序*\\\/int menu_select(); \\\/*菜单函数*\\\/\\\/******主函数开始*******\\\/main(){ int i; STUDENT *head; \\\/*链表定义头指针*\\\/ printf(\\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ \\\ ); printf( * * ******* * ***** ***** * * ******* \\\ ); printf( * * * * * * * ** * * * \\\ ); printf( * * * * ******* * * * * * *** * ******* \\\ ); printf( * * * * * * * * * * * * * \\\ ); printf( * * ******* ******* ***** * *** * * * ******* \\\ ); printf(\\\ ); printf(\\\ ); printf(\\\ ); sleep(2); head=init(); \\\/*初始化链表*\\\/ clrscr(); \\\/*清屏*\\\/ for(;;) \\\/*无限循环*\\\/ { switch(menu_select()) \\\/*调用主菜单函数,返回值整数作开关语句的条件*\\\/ { \\\/*值不同,执行的函数不同,break 不能省略*\\\/ case 0:head=init();break; \\\/*执行初始化*\\\/ case 1:head=create();break; \\\/*创建链表*\\\/ case 2:print(head);break; \\\/*显示全部记录*\\\/ case 3:head=delete(head);break; \\\/*删除记录*\\\/ case 4:lookup(head);break; \\\/*按名字查找记录*\\\/ case 5:save(head);break; \\\/*保存文件*\\\/ case 6:head=load(); break; \\\/*读文件*\\\/ case 7:computer(head);break; \\\/*计算总分和均分*\\\/ case 8:head=Modify(head); break; \\\/*修改记录,一般会插在表尾*\\\/ case 9:head=sort(head);break; \\\/*按部分排序*\\\/ case 10:append();break; \\\/*追加记录*\\\/ case 11:head=index(head);break; \\\/*按学号排序*\\\/ case 12: exit(0); \\\/*如菜单返回值为14程序结束*\\\/ } }}\\\/*菜单函数,返回值为整数*\\\/menu_select(){ char *menu[]={***************MENU***************, \\\/*定义菜单字符串数组*\\\/ 00. init list, \\\/*初始化*\\\/ 01. Enter list, \\\/*输入记录*\\\/ 02. print list , \\\/*显示单链表中所有记录*\\\/ 03. Delete a record from list, \\\/*从表中删除记录*\\\/ 04. Search record on name, \\\/*按照姓名查找记录*\\\/ 05. Save the file, \\\/*将单链表中记录保存到文件中*\\\/ 06. Load the file, \\\/*从文件中读入记录*\\\/ 07. compute the score, \\\/*计算所有学生的总分和均分*\\\/ 08. Modify an information , \\\/*修改某学号的信息*\\\/ 09. sort to make new file, \\\/*排序*\\\/ 10. append record to file, \\\/*追加记录到文件中*\\\/ 11. index on nomber, \\\/*按学号排序*\\\/ 12. Quit}; \\\/*退出*\\\/ char s[3]; \\\/*以字符形式保存选择号*\\\/ int c,i; \\\/*定义整形变量*\\\/ gotoxy(1,1); \\\/*移动光标*\\\/ textcolor(YELLOW); \\\/*设置文本显示颜色为黄色*\\\/ textbackground(BLUE); \\\/*设置背景颜色为蓝色*\\\/ gotoxy(10,2); \\\/*移动光标*\\\/ putch(0xc9); \\\/*输出左上角边框┏*\\\/ for(i=1;i<44;i++) putch(0xcd); \\\/*输出上边框水平线*\\\/ putch(0xbb); \\\/*输出右上角边框 ┓*\\\/ for(i=3;i<20;i++) { gotoxy(10,i);putch(0xba); \\\/*输出左垂直线*\\\/ gotoxy(54,i);putch(0xba); } \\\/*输出右垂直线*\\\/ gotoxy(10,20);putch(0xc8); \\\/*输出左上角边框┗*\\\/ for(i=1;i<44;i++) putch(0xcd); \\\/*输出下边框水平线*\\\/ putch(0xbc); \\\/*输出右下角边框┛*\\\/ window(11,3,53,19); \\\/* 制作显示菜单的窗口,大小根据菜单条数设计*\\\/ clrscr(); \\\/*清屏*\\\/ for(i=0;i<16;i++) \\\/*输出主菜单数组*\\\/ { gotoxy(10,i+1); cprintf(%s,menu[i]); } textbackground(BLACK); \\\/*设置背景颜色为黑色*\\\/ window(1,1,80,25); \\\/*恢复原窗口大小*\\\/ gotoxy(10,21); \\\/*移动光标*\\\/ do{printf(\\\ make by wenwei);

printf(\\\ Enter you choice(0~13):); \\\/*在菜单窗口外显示提示信息*\\\/

scanf(%s,s); \\\/*输入选择项*\\\/

c=atoi(s); \\\/*将输入的字符串转化为整形数*\\\/

}while(c<0||c>14); \\\/*选择项不在0~14之间重输*\\\/ return c; \\\/*返回选择项,主程序根据该数调用相应的函数*\\\/}STUDENT *init(){ clrscr(); return NULL;}\\\/*创建链表*\\\/STUDENT *create(){ int i; int s; STUDENT *h=NULL,*info; \\\/* STUDENT指向结构体的指针*\\\/ clrscr(); for(;;) { info=(STUDENT *)malloc(sizeof(STUDENT)); \\\/*申请空间*\\\/ if(!info) \\\/*如果指针info为空*\\\/ { printf(\\\ out of memory); \\\/*输出内存溢出*\\\/ return NULL; \\\/*返回空指针*\\\/ } inputs(enter no:,info->no,11); \\\/*输入学号并校验*\\\/ if(info->no[0]=='@') { clrscr();break; } \\\/*如果学号首字符为@则结束输入,清屏后返回*\\\/ inputs(enter name:,info->name,15); \\\/*输入姓名,并进行校验*\\\/ printf(please input %d score \\\ ,N); \\\/*提示开始输入成绩*\\\/ s=0; \\\/*计算每个学生的总分,初值为0*\\\/ for(i=0;iscore[i]); \\\/*输入成绩*\\\/ if(info->score[i]>100||info->score[i]<0) \\\/*确保成绩在0~100之间*\\\/ printf(bad data,repeat input\\\ ); \\\/*出错提示信息*\\\/ }while(info->score[i]>100||info->score[i]<0); s=s+info->score[i]; \\\/*累加各门课程成绩*\\\/ } info->sum=s; \\\/*将总分保存*\\\/ info->average=(float)s\\\/N; \\\/*求出平均值*\\\/ info->order=0; \\\/*未排序前此值为0*\\\/ info->next=h; \\\/*将头结点做为新输入结点的后继结点*\\\/ h=info; \\\/*新输入结点为新的头结点*\\\/ clrscr(); } return(h); \\\/*返回头指针*\\\/}\\\/*输入字符串,并进行长度验证*\\\/inputs(char *prompt, char *s, int count){ char p[255]; do{ printf(prompt); \\\/*显示提示信息*\\\/ scanf(%s,p); \\\/*输入字符串*\\\/ if(strlen(p)>count)printf(\\\ too long! \\\ ); \\\/*进行长度校验,超过count值重输入*\\\/ }while(strlen(p)>count); strcpy(s,p); \\\/*将输入的字符串拷贝到字符串s中*\\\/}\\\/*输出链表中结点信息*\\\/void print(STUDENT *h){ int i=0; \\\/* 统计记录条数*\\\/ STUDENT *p; \\\/*移动指针*\\\/ clrscr(); \\\/*清屏*\\\/ p=h; \\\/*初值为头指针*\\\/ printf(\\\ \\\ \\\ *********************************STUDENT************************************\\\ ); printf(|rec|nO | name | sc1| sc2| sc3| sc4| sum | ave |order|\\\ ); printf(|---|----------|---------------|----|----|----|----|--------|--------|-----|\\\ ); while(p!=NULL) \\\/*只要p不是尾结点,就输出记录*\\\/ { i++; printf(|%3d|%-10s|%-15s|%4d|%4d|%4d|%4d| %6.2f | %6.2f | %3d |\\\ , i, p->no,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->sum,p->average,p->order); p=p->next; } printf(***********************************end**************************************\\\ ); getch(); \\\/*输入任一键返回主菜单*\\\/ clrscr(); \\\/*清屏*\\\/}\\\/*删除记录*\\\/STUDENT *delete(STUDENT *h){ STUDENT *p,*q; \\\/*p为查找到要删除的结点指针,q为其前驱指针*\\\/ char s[12]; \\\/*存放学号*\\\/ char *pass=wenwei28;char a[20],b=NULL;int i=0;clrscr();printf(Input your password:);while((i<20)&&(b!='\\\\r')){ b=getch(); \\\/*无回显输入*\\\/ if(b==8) { if(i>0) {a[--i]=NULL;

putchar(8); \\\/*退格键*\\\/

putchar(' '); \\\/*以空格代替*\\\/

putchar(8);

} else putchar(7); \\\/*没有任何字符的退格,响铃警告*\\\/ } else if(b!='\\\\r') { a[i++]=b; \\\/*只要不是退格和回车就接受*\\\/ putchar('*'); } else {a[i]=NULL; break; \\\/*密码输入完了,记得加个NULL到后面*\\\/

}} if(strcmp(a,pass)!=0){clrscr();

printf(Password is mistake Tow seconds to return!);

sleep(2);clrscr();return h;

} else {printf(Password is OK! Welcome to come!); sleep(3);

} clrscr(); \\\/*清屏*\\\/ printf(please deleted no\\\ ); \\\/*显示提示信息*\\\/ scanf(%s,s); \\\/*输入要删除记录的学号*\\\/ q=p=h; \\\/*给q和p赋初值头指针*\\\/ while(strcmp(p->no,s)&&p!=NULL) \\\/*当记录的学号不是要找的,或指针不为空时*\\\/ { q=p; \\\/*将p指针值赋给q作为p的前驱指针*\\\/ p=p->next; \\\/*将p指针指向下一条记录*\\\/ } if(p==NULL) \\\/*如果p为空,说明链表中没有该结点*\\\/ { printf(\\\ list no %s student\\\ ,s);sleep(2);clrscr();return h;} else \\\/*p不为空,显示找到的记录信息*\\\/ { printf(*********************************have found********************************\\\ ); printf(|no | name | sc1| sc2| sc3| sc4| sum | ave |order|\\\ ); printf(|------------|---------------|----|----|----|----|--------|--------|-----|\\\ ); printf(|%-12s|%-15s|%4d|%4d|%4d|%4d| %6.2f | %6-5.2f | %3d |\\\ , p->no, p->name,p->score[0],p->score[1],p->score[ q=p; \\\/*保存当前结点的指针,作为下一结点的前驱*\\\/ p=p->next; \\\/*指针后移,新读入数据链到当前表尾*\\\/ } q->next=NULL; \\\/*最后一个结点的后继指针为空*\\\/ fclose(fp); \\\/*关闭文件*\\\/ printf(---You have success read data from file!!!---\\\ ); getch(); \\\/*按任意键返回主菜单*\\\/ clrscr(); return h; \\\/*返回头指针*\\\/}\\\/*成绩统计*\\\/void computer(STUDENT *h){ STUDENT *p,*t,*q; \\\/*定义移动指针*\\\/ float saverage[N]={0}; \\\/*均分初值为0*\\\/ int i; clrscr(); for (i=0;iscore[i]; \\\/*累加总分*\\\/ j++; \\\/*统计记录条数*\\\/ p=p->next; \\\/*指针后移*\\\/ h; \\\/*返回头指针 就知道这么多了,我不太懂咯~~~~心得就不来写了,自己写哈

~

~

声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。联系xxxxxxxx.com

Copyright©2020 一句话经典语录 www.yiyyy.com 版权所有

友情链接

心理测试 图片大全 壁纸图片