C语言程序设计课程设计要求2014资料_第1页
C语言程序设计课程设计要求2014资料_第2页
C语言程序设计课程设计要求2014资料_第3页
C语言程序设计课程设计要求2014资料_第4页
C语言程序设计课程设计要求2014资料_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《程序设计基础》课程设计安排及要求一、课程设计的考核方式课程设计的总评成绩应包括平时表现、 课设检查及课设报告三部分,三部分所占总评的比例分别为 30%,40%,30%。... ... ...平时表现的成绩可从学生是否按时出勤、课设过程中是否存在玩....游戏的情况、是否服从老师管理等方面酌情评定。课设检查的成绩根据学生完成课设的实际情况来考核。....课设报告的成绩根据学生完成的报告文档进行考核。 课设报告若....出现雷同或抄袭现象,报告的考核成绩一律为 0分。课设报告的格式及要求,课设报告的示范文档见附件三、附件四。课程设计的报告一般在课设结束后一周提交。1附件一:《程序设计基础》课程设计登记表班级 姓名 学号 电话题目题目描述及要求2小型管理系统类题目:图书信息(参考):登录号(ISBN)、书名、作者名、图书类别(自然科学、人文科学等)、出版单位、出版时间、价格、数量等。1.图书借阅管理系统实现图书的入库、修改信息、删除、借阅、归还、续借管理,以及学生、教师(读者)管理,学生、教师借阅情况查询与阅览功能。(要求:1.系统以文本菜单方式工作2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的内容需要自学)2.图书查询管理系统图书信息(参考):登录号(ISBN)、书名、作者名、图书类别(自然科学、人文科学等)、出版单位、出版时间、价格、数量等。实现图书的入库、修改信息、删除功能,能够按照图书名称、作者、出版社、类别等进行图书的查询和统计功能,并支持模糊查询。(要求:1.系统以文本菜单方式工作2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的内容需要自学)3.班级缴费信息管理系统实现班级的创建、修改、删除功能,能够对班级中的学生信息进行增、删、改操作,并能够对班级应交学费进行计算(本科生学费为专科生学费的 80%,研究生学费为本科生学费的70%)。能够按照班级、学号、姓名等对学生缴费情况进行查询,并按照学生缴费金额的多少进行排序显示。如果全班缴纳学费低于总学费的 80%则显示欠费学生信息,能查询所有欠费学生信息,也能按条件查询欠费学生的信息。(要求:1.系统以文本菜单方式工作 2.数据存储采用文件形式 3.标准的C输入输出4.功能完善,适当的注释, 5.关于文件的内容需要自学)4..学生成绩管理系统对一个有 N个学生的班级,每个学生有 M门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。功能要求:(1)本系统每个数据的结构应当包括:学号、姓名、 M门课程名称、成绩等。(2)本系统显示这样的文本菜单:请选择系统功能项:a、成绩录入 b、成绩查询 c、成绩排序 d、成绩修改(要求先输入密码)e、成绩统计1)显示每门课程成绩最高、最低的学生的基本信息2)显示每门课程的平均成绩3)显示超过某门课程平均成绩的学生人数4)显示五个分数段的学生人数( [100-90]、(90-80]、(80-70]、(70-60]、60以下)f、退出系统(3)将学生成绩保存到文件中。(要求:1.系统以文本菜单方式工作2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的内容需要自学)35.学生考勤管理系统实现学生信息的增、删、改操作。可对班级学生按照课程进行考勤(类别:出勤、迟到、早退、缺席),并提供按照班级、学号、类别、课程进行统计、查询、浏览等功能,可按出勤率对班级、学生、课程等排序,例如可按所有课程的出勤率显班级排名、学生排名,也可对某个班级的出勤率显示该班级学生信息,也可按某门课程出勤率排序等。(要求:1.系统以文本菜单方式工作2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的内容需要自学)6.学生学籍管理系统用数据文件存放学生的学籍,可对学生学籍进行注册,登录,修改,删除,查找,统计,学籍变化等操作。功能要求:系统以文本菜单方式工作。登记学生的学号,姓名,性别,年龄,籍贯,系别,专业,班级;修改已知学号的学生信息;删除已知学号的学生信息;查找已知学号的学生信息;按学号,专业输出学生籍贯表。查询学生学籍变化,比如入学,转专业,退学,降级,休学,毕业。(要求:1.系统以文本菜单方式工作2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的内容需要自学)7.商品进货管理系统商品信息(参考):商品编号、商品名称、商品类别(普通电视机、 DVD、带DVD的电视机,带 DVD的电视机的售价为普通电视机和 DVD单价之和的 80%)、商品进货价格、商品销售价格、商品数量、供应商名称等。记录每一次进货信息,对该信息可以进行增加、删除、修改,能够对仓库中的商品按照多条件(例如供应商、价格、类别等)进行查询、统计和排序,并能够对所有库存商品进行价格、数量汇总。(要求:1.系统以文本菜单方式工作2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的内容需要自学)8.商品库存管理系统商品信息(参考):商品编号、商品名称、商品类别(普通电视机、 DVD、带DVD的电视机,带DVD的电视机的售价为普通电视机和 DVD单价之和的 80%)、商品进货价格、商品销售价格、商品数量、供应商名称等。要求对所有的库存商品都能按照品名进行显示、查找、增加、删除、修改的功能。并提供按照品名进行浏览、统计和排序(价格)的功能。(要求:1.系统以文本菜单方式工作 2.数据存储采用文件形式 3.标准的C输入输出4.功能完善,适当的注释, 5.关于文件的内容需要自学)49.商品销售管理系统商品信息:商品编号、商品名称、商品类别(普通电视机、 DVD、带 DVD 的电视机,带DVD的电视机的售价为普通电视机和 DVD单价之和的 80%)、商品进货价格、商品销售价格、商品数量、供应商名称等。记录每一次销售商品的数量和价格,并提供对已售出商品的价格、数量进行统计、排序功能,但允许用户退商品。(要求:1.系统以文本菜单方式工作2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的内容需要自学)10.足球联赛积分统计系统足球联赛采用小组循环赛制,胜一场得 3分,平局各得 1分,负一场得 0分,联赛排名以积分多者在前,当两队(或多队)积分相同时,则净胜球(即进球数与失球数之差)多者在前,若净胜球相同,则进球数多者在前,若仍相同,则抽签或踢附加赛决定名次(这在联赛结束后进行,联赛未结束则两队名次并列,本程序不做这方面要求) 。试编一程序统计一轮比赛后,各队积分及排名。 基本要求:设积分表结构如下:队名,已比赛的场数,赢的场数,平的场数,负的场数,进球数,失球数,积分。积分表放在文件中。最近一轮的结果从键盘输入。程序应根据此轮结果修改各队的积分和名次, 提供以积分进行统计和排序的功能。(要求:1.源文件采用多文件的工程结构 2.数据存储采用文件形式 3.标准的 C输入输出 4.功能完善,适当的注释, 5.关于文件的内容需要自学)11.学生运动会成绩统计系统系统记录某校运动会上全部运动项目, 各学院获得的分数及排名的情况, 包括50、100、200,400,1500米,跳高,跳远,标枪,铅球铁饼等。进入系统后可以输入和修改某个项目的结果情况,可以按各系院编号输出总分;按总分排序;按男团体总分排序 ;按女团体总分排序;按学院编号查询;按项目编号查询。 (每项目取前三名,分别为 10,5,2分)。(要求:1.系统以文本菜单方式工作2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的内容需要自学)12.企业人事管理系统 --人员管理模块人员包括总经理、经理、雇员,信息包括工号、姓名、职务、身份证号、籍贯、工资(实发工资)等。实现人员信息的增、删、改操作,并实现按姓名、工号进行查询功能,按照部门、工资统计、排序功能等。能够实现人员的部门之间、职务的调动功能。(要求:1.系统以文本菜单方式工作2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的内容需要自学)513.企业人事管理系统 --人事工资管理模块人员包括总经理、 经理、雇员,信息包括工号、姓名、职务、身份证号、籍贯、工资(实发工资)等。职工工资的主要属性如下:基本工资、岗位工资、奖金、应发工资、医疗住房基金、税金、实发工资;其中应发工资等于基本工资与岗位工资、奖金之和,而实发工资等于应发工资减去医疗住房基金和税金。部门暂时分为设备处、人事处、学工处、软件学院,利用文本文件存储职工工资信息; 实现工资的录入、统计(统计整个单位的平均工资、最高工资和最低工资、工资均方差等信息;各部门的平均工资、最高工资和最低工资、 工资均方差等信息)、查询(根据工号或姓名查询) 、修改、删除等功能。(要求:1.系统以文本菜单方式工作 2.数据存储采用文件形式 3.标准的C输入输出4.功能完善,适当的注释, 5.关于文件的内容需要自学)14.火车票务管理系统火车票包括硬座票(票价 x)、硬卧票(2x+y)和软卧票( 3x+z)、实现火车票的管理、销售(可售、可退、可改签,退票和改签规则请参考实际火车票销售规则) 、统计、查询功能。(要求:1.系统以文本菜单方式工作 2.数据存储采用文件形式 3.标准的C输入输出4.功能完善,适当的注释, 5.关于文件的内容需要自学)15.航空售票管理系统飞机票分为头等舱、经济舱(经济舱价格的 y%)、折扣舱(经济舱价格的 x%),实现飞机票的管理、销售(能实现退票和更改、签转功能,请参考实际航空售票的退票、改签规则)、统计、查询等功能。(要求:1.系统以文本菜单方式工作2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的内容需要自学)16.个人通讯录管理系统设计并实现一个简单电话簿, 包括如下功能:能设置并以文件保存若干姓名、 联系电话和电邮地址(联系人分为家人、朋友、同事、同学,当选中某类时,显示出此类所有数据中的姓名和电话号码。)根据输入的姓名,在已经保存的通讯录中查询相应的联系电话和电邮地址,并显示查询结果,支持模糊查询。根据输入的电话号码, 在已经保存的通讯录中查询相应的联系人姓名,并显示查询结果,此外,能够对通讯录信息进行修改和删除等操作。(要求:1.系统以文本菜单方式工作 2.数据存储采用文件形式 3.标准的C输入输出4.功能完善,适当的注释, 5.关于文件的内容需要自学)17.小型公司公告管理系统能够对用户进行管理(管理员、普通用户),对公司公告进行管理,包括增、删、改、查询、浏览、统计等操作,并考虑用户权限。(要求:1.系统以文本菜单方式工作2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的内容需要自学)618.校友录管理系统创建校友录,对校友录中的学生进行管理(增、删、改),合法用户可以在校友录中发表信息、查询信息、浏览信息等功能。管理员可以对校友录中成员及信息进行维护操作。(要求:1.系统以文本菜单方式工作2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的内容需要自学)19.实验室设备管理系统设备信息:设备编号、设备名称、设备地点(实验室) 、设备状态等。实验室信息管理(增、删、改) 、设备信息管理(增、删、改) ,能够实现设备的统计、查询功能,以及设备的报修、报废以及修复等功能。(要求:1.系统以文本菜单方式工作 2.数据存储采用文件形式 3.标准的C输入输出4.功能完善,适当的注释, 5.关于文件的内容需要自学)机房机位预定系统机房有20台机器,编号1到20,从早八点到晚八点。两小时一个时间段,每次可预定一个时间段。功能要求:1)系统以文本菜单方式工作2)查询,根据输入时间,输出机位信息。3)机位预定,根据输入的时间查询是否有空机位,若有则预约,若无则提供最近的时间段,另:若用户在非空时间上机,则将用户信息列入等待列表。4)退出预定,根据输入的时间,机器号撤销该事件的预定!(5)查询是否有等待信息,若有则提供最优解决方案(等待时间尽量短) ,若无则显示提示信息。(要求:1.系统以文本菜单方式工作 2.数据存储采用文件形式 3.标准的C输入输出4.功能完善,适当的注释, 5.关于文件的内容需要自学)21.学生选课信息管理系统课程信息包括:课程编码、课程名称、适用专业、课程类型(必修、限选、实践、实习)、学分、学时、主讲教师等。假定有 n门课程,每门课程有课程编号,课程名称,课程性质,学时,授课学时,实验或上机学时,学分,开课学期等信息,选课规则可自定,如要求总学分不得少于 15个学分,规定必修课、限选课程的最少数量。试设计一个选课信息管理系统,使之能提供以下功能:1)系统以文本菜单方式工作2)课程信息、学生选课信息录入、修改、删除功能3)课程信息浏览、查询功能(多条件查询)4)选课结果查询功能(如按课程、学分、学号查询等)5)统计选课结果信息(如统计某门课程学生选修情况、选课不合格的学生名单等)(要求:1.系统以文本菜单方式工作2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的内容需要自学)722.自动存取款机模拟系统模拟实现一个自动存取款的系统,系统以文本菜单形式工作,要求具备以下功能:登录功能:用户输入账户名和密码,可以登录 ATM。查询功能:登陆后,可以查询存款余额。取款功能:登陆后,可以取款。注意:取款额不能超过存款余额。转账功能:登陆后,可以向其他账户转账。存款功能:登陆后,可以向账户中存款。(要求:1.系统以文本菜单方式工作2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的内容需要自学)个人财务管理软件根据日常生活中,个人财务收支情况,实现一个个人财务管理软件。功能有:登录功能:只有在输入正确的用户名和密码之后才能使用软件。收支记录管理:包括添加新的收支信息,删除已有信息和修改已有信息。收支信息应该包括收支日期(年月日)、收入/支出、金额、收入来源/支出目的、账户余额等。能够查询某天或者某月的收支情况。能够统计某段时间内(如一个月内或者一周内)的总收入和总支出。(要求:1.系统以文本菜单方式工作2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的内容需要自学)24.酒店客房管理系统设计一个管理系统对酒店的客房进行管理, 实现用户登录、客房基本信息的增、 删、改,并能实现客房查询、预订、入住、退房等功能。(要求:1.系统以文本菜单方式工作 2.数据存储采用文件形式 3.标准的C输入输出4.功能完善,适当的注释, 5.关于文件的内容需要自学)25.房屋中介管理系统设计一个系统对房屋租、售信息进行管理,系统以文本菜单形式工作,实现以下基本功能:用户管理模块房屋租、售信息的增、删、改、查询、分类统计模块房屋出租模块房屋销售模块(要求:1.系统以文本菜单方式工作2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的内容需要自学)学生宿舍管理系统设计功能:实现简单的学生宿舍基本信息管理,宿舍的基本信息包括楼号、房间号、面积、所容纳人数、已入住人数等,系统以文本菜单形式工作。基本要求:实现宿舍基本信息的录入、修改、删除。实现宿舍信息的浏览、查询实现安排学生入住、退出、调整宿舍等功能实现学生宿舍安排信息的统计功能(要求:1.系统以文本菜单方式工作2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的内容需要自学)8小学生测验管理软件面向小学1~2年级学生,随机选择两个整数和加减法形成算式要求学生解答。功能要求:1)电脑随机出10道题,每题10分,程序结束时显示学生得分;2)确保算式没有超出1~2年级的水平,只允许进行50以内的加减法,不允许两数之和或之差超出0~50的范围,负数更是不允许的;3)每道题学生有三次机会输入答案,当学生输入错误答案时,提醒学生重新输入,如果三次机会结束则输出正确答案;(4)对于每道题,学生第一次输入正确答案得 10分,第二次输入正确答案得 7分,第三次输入正确答案得 5分,否则不得分;(5)总成绩 90以上显示“SMART”,80-90显示“GOOD”,70-80显示“OK”,60-70显示“PASS”,60以下“TRYAGAIN”。6)实现用户登录模块,可以有多个用户参加测试。7)记录下每个用户的成绩、正确率,并排序。(要求:1.系统以文本菜单方式工作2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的内容需要自学)猜价格游戏猜价格游戏软件的总体目标是按照特定游戏规则为用户提供一个方便友好的游戏界面,同时给用户提供排行榜的功能使用户能够按照特定的目标提高自己的成绩, 并且提供相应的帮助功能。(1)游戏规则如下:游戏软件随机产生四位的数字(必须是整数 [1000,9999])的价格,但不显示,给用户提供输入提示符,让用户猜测这个价格的大小。如果价格正确,则猜价格成功。玩家有10次猜价格的机会,如果在10次之内仍末猜出正确的价格, 则提示用户游戏失败。一旦玩家在 10次的次数限制内猜出正确的价格,则赢得游戏。当玩家赢得游戏后, 会与排行榜中的前五名玩家的游戏记录比较, 如果排名能够进入前五名,则更新排行榜,使当前玩家成为入榜选手。记分规则:猜价格所用次数即为分数, 所以分数越少证明玩家水平越高, 排行榜中也是排列分数最少的前五名选手。(2)本游戏软件需要实现以下一些基本功能。在猜价格的过程中, 如果玩家所给价格不是正确价格, 软件需给出其提供价格大于正确价格或小于正确价格的提示刷新排行榜:当玩家成功完成一轮猜价格游戏后, 可通过和排行榜中相应记录的比较判断玩家是否可以进入排行榜,进入排行榜的资格游戏成绩在前五名的玩家。查看排行榜:玩家可以查看当前排行榜中的排名顺序, 从而确定自己的游戏目标。 排行榜的查看按一定顺序显示给用户,便于查看。清除排行榜:玩家可以选择清除排行榜功能, 使得排行榜上的玩家姓名和玩家游戏记录从系统中清除,只留下系统默认的玩家名 (player)和系统默认记录 10次。帮助:玩家通过帮助功能了解游戏规则和排行榜设置规则。(要求:1.系统以文本菜单方式工作 2.数据存储采用文件形式 3.标准的C输入输出4.功能完善,适当的注释, 5.关于文件的内容需要自学)迷宫游戏(难度系数: A)9迷宫游戏(难度系数:A)入口出口21点游戏(难度系数:B)(1)系统变量(基本)纸牌类型:inti_type(暂定4种,黑桃、红心、梅花、方块)纸牌点数:inti_card(0<=i_card<13)当前局牌库:intcards[i_card*i_type](当前待发的牌)当前纸牌:inti_cur_card(0<=i_cur_card<i_card*i_type,35代表梅花10,35=2*13+9)当前比赛选手数:inti_player_number(0<=i_player_number<10,可在比赛开始时动态指定)当前选手手中牌:inta_players[i_player_number][10](每个选手当前手中的牌,players[1][10]表示选手2手中的牌,最多10张)当前选手得分:inta_scores[i_player_number](scores[2]表示选手3当前的总得分当前下注:inta_bets[i_player_number](bets[0]表示选手0当前局下注)牌局记录:inta_record_set[step][i_player_number][10](记录牌局)(2)待实现的函数(基本)方法名称方法声明方法作用初始化voidinit()初始化当前选手、得分等相关变量开局voidbegin()某一局的开始,初始化下注,牌库等信息随机产生牌局voidgenerate_cards()随机产生当前牌库中的牌发牌voidassign_card(int给选手i_player_number发一张牌i_player_number)比较大小intcompare(int比较选手player1_number与player2_number手中牌的点数大小player1_number,int返回1—表示player1_number大;0—表示一样大;-1—player2_number)player2_number大记录选手得分intwrite_score(int为选手player_number的总得分加上当前得分player_number,intscore)当前局评分voideval()当前局结束,为当前局的所有选手比较大小,并计算出各自的得记录当前牌局voidrecord()记录当前牌局保存voidsave(char*filename)将当前牌局保存到文件filename中读取牌局voidread(char*filename)将文件filename中保存的牌局读取到牌局记录a_record_set数组屏幕显示主函数10附件三:课设报告的基本要求⒈需求分析:陈述程序设计的任务 ,强调程序要做什么 ,明确规定:⑴输入的形式和输入值的范围;⑵输出的形式;⑶程序所能达到的功能;⑷测试数据:包括正确的输入输出结果和错误的输入及其输出结果。⒉概要设计:说明用到的数据类型、主程序流程及各函数之间的调用关系。⑴本程序所用的数据类型的定义;⑵本程序所用到的标准函数名称、自定义函数名称;⑶主程序的流程及各函数之间的层次关系。 (用图来描述)⒊详细设计:⑴用流程图描述每个自定义函数,并给出适当的注释。⑵写出各函数的调用关系图。⒋调试分析:⑴调试过程中所遇到的问题及解决方法;⑵经验与体会。⒌用户使用说明:说明如何使用你的程序,详细列出每一步操作步骤。⒍测试结果:列出对于给定的输入所产生的输出结果。⒎附录:提交带注释的完整源程序。格式要求:⑴封面:(购买)标准课程设计报告封面 ——;⑵内页:(打印)纸张:16K;边距:上——2.5CM,下——2.5CM,左——2.5CM,右——2CM标题:四号,黑体,加粗,左对齐 .正文:小四号,宋体,首行缩进 2个字程序代码:五号,宋体图题:五号,宋体,居中,如:图 1.1主程序的流程图11附件四:课设文档示范文档目录一、需求分析 13二、概要设计 13三、详细设计 15四、调试分析 20五、用户手册 20六、测试数据 20七、附录 2212一、需求分析要求:本节是需求分析的部分,该节主要说明课程设计题目的具体要求, 如:程序应具备的功能、程序设计时必须使用的数据结构(数组、动态链表、文件等)、程序运行时对输入输出格式的要求以及对程序运行性能的要求等,在撰写本节的文档时,对于以上的具体要求应详细地给出明确的说明。用栈的基本操作完成迷宫问题的求解,其中栈的基本操作作为一个独立的模块存在。⒉以二维数组M[m+2][n+2]表示迷宫,M[i][j]表示迷宫中相应(i,j)位置的通行状态(0:表示可以通行,1:表示有墙,不可通行),完成迷宫的抽象数据类型,包括出口、入口位置等。用户从屏幕上输入迷宫,完成对应迷宫的初始化。⒋迷宫的入口位置和出口位置在合法范围内由用户而定。⒌程序完成对迷宫路径的搜索,如果存在路径,则以长方形形式将迷宫打印出来,用特定符号标出迷宫的物理状态,其中字符“#表”示不可行,“*表”示出口和入口,空格表示没有经过的部分,“◆”标记出可行的路径;如果程序完成搜索后没有找到通路,则提示用户 “can?tfindoneway!。 ”程序执行的命令:⑴创建初始化迷宫;⑵搜索迷宫;⑶输出搜索结果。二、概要设计要求:概要设计是在理解程序的各项需求以后,对程序的结构和模块进行设计的环节。该节主要说明的内容包括对程序中所使用数据结构的介绍(如数组、数组表示的意义、数组的名称、结构体的名称,结构体成员表示的意义,文件的名称等)、对程序中主要模块以及模块之间关系的介绍(即程序由哪些模块组成,模块之间有何种关系等),在撰写本节的文档时,对于以上的具体内容给出详尽的说明。⒈设计栈的抽象数据类型定义:ADTStack{数据对象:D={ai:|ai∈PositionSet,i=1 ⋯n,n≥0}数据关系:R1={<ai-1,ai>|ai-1,ai∈d,i=2,⋯n}基本操作: 操作结果InitStack(&S) 构造一个空栈,完成栈的初始化 S13DestoryStack(&S) 撤消一个已经存在的栈 SClearStack(&S) 将栈S重新置空StackLength(S) 返回栈的长度GetTop(S,&e) 用e返回栈S的栈顶元素StackEmpty(S) 若S为空返回1,否则返回0Push(&S,e) 将新的元素e压入栈顶Pop(&S,e) 删除栈顶元素,并用 e返回其值StackTraverse(s) 将栈S的所有元素输出}ADTStack;⒉迷宫的抽象数据类型定义:ADTMaze{数据对象:D:={aij,Start,end|aij,Start,end∈{}0≤i≤m+2,0≤j≤n+2,m,n≥0}数据关系:R={ROW.COL}Row={<ai-1j,aij>|ai-1,aij∈Di=1,⋯,m+2,j=1, ⋯,n+2}Col={<aij-1,aij>|aijaij-1∈D}基本操作:SetMaze(&Maze)初始条件:Maze已经定义,Maze的下属单元二维数组 Maze.M[row+2][d+2]已存在,Maze.start,Maze.end也已作为下属存储单元存在操作结果:构成数据迷宫,用数值标识迷宫的物理状态,以 0表示通路,以1表示障碍,由终端读取迷宫空间大小,各点处的具体物理状态及 Start和End点位置,完成迷宫构建Pass(&Mazem,&Nposition,Position,di)初始条件:已知目前迷宫状态及当前位置、下一步探索方向 di操作结果:完成相应的搜索任务,如果可行,则用Nposition返回下一步位置,并将Maze状态改变为相应点已走过情况PrintMaze(Maze)操作结果:输出字符标示的迷宫FindWay(Maze,&way)操作结果:利用 Pass搜索迷宫,用way返回搜索所得路径。如不存在,返回0PrintWay(Maze,way)操作结果:将Maze及相应最短路径一起打印输出}ADTMAZE,14⒊本程序模块结构⑴主函数模块voidmain(){初始化;do{接受命令;处理命令;while(退出命令)⑵栈模块——实现栈抽象数据类型;⑶迷宫模块——实现迷宫抽象数据类型;各模块之间的调用关系如下:主程序模块迷宫模块栈模块三、详细设计要求:详细设计是在概要设计基础上对各模块进一步细化的环节。本节需要介绍的内容包括程序中所有函数的介绍(包括函数的原型,函数的功能,各参数的名称以及表示的意义)、函数之间的调用关系(见如下的例子)、程序核心模块算法的介绍(需要用流程图描述),在撰写本节的文档时,对于以上的具体内容给出详尽的说明,作图要规范,排版要统一。⒈基本数据类型操作⑴栈模块①typedefstruct{intx,y,num; //X、Y坐标位置,NUM栈的追踪序号}Postype;②typedefstruct{SelemType*base; //在栈初始化之前和销毁之后为 NULLSelemType*top; //栈顶指针,在栈顶元素上方一单元处intstacksize; //当前已分配存储空间,以元素为单位}sqstack; //线性存储结构15③参数设置:#defineSTACK_INIT_SIZE20;#defineSTACKINIREMENT10;//----------基本操作的算法描述--------------------StatusInitStack(SqStack&s){ //构造一个空栈S.base=(SelemType)malloc(STACK_INIT_SIZE*SizeOf(SelemType));if(!S.base)exit(OVERLOW); //存储分配失败S.top=S.base;S.stacksize=STACK_INIT_SIZE;returnok;}StausDestoryStack(Sqstack&s){//销毁栈SFree(S.base);S.top=S.base;S.stacksize=o;returnok;}StatusClearStack(sqstack&S){//清空SS.top=S.base;returnok;}StatusStackEmpty(SqstackS){//若S为空返回TRUE,否则返回FALSEreturnS.base==S.top;}intstackLength(SqstackS) //返回栈S的长度,以单元为单位returnS.top-S.base;}StatusGetTop(SqStackS,Selemtype&e){//栈不空,用e返回s的栈顶元素及 OK,否则返回ERRORif(S.top==S.base)returnERROR;e=*(S.top-1);returnok;}16StatusPush(Sqstack&S,SelemTypee){//插入元素e为新的栈顶元素if(S.top-S.base>=S.stacksize){//栈满追加存储空间S.base=(SelemType)realloc(S.base,(S.stacksize+STACKICREMENT)Sizeof(Selemtype));if(!S.base)exit(OVERFLOW) //存储分配失败S.top=S.base+S.stacksize; //确定新的栈顶指针S.stacksize+=STACKINCREMENT;// 已分配空间增加}*S.top++=e;returnok;}StatusPop(Sqstack&s,SelemType&e){若栈不变,则删除栈顶元素,用e返回其值及ok,否则falseif(S.top=o=S.base)returnERROR;e=*--S.top;//顶指针减小,用e返回其数据returnok;}⑵迷宫模块:①迷宫的数据类型#defineMAXSIZE50 //屏幕宽度,迷宫的最大宽度typeofstruct{intM[][MAXSIZE]; //迷宫的物理状态描述intRow,Col; //迷宫的大小PositionStart,end; //开始与结束位置与栈的单元类型相同}MAZE; // 迷“宫”型数据②迷宫模块中的基本操作Statussemaze(MAZE&Maze){Printf( 请“输入所建迷宫的宽度 Row和高度Col”);Do{sanf( “row,col ”);if(Row>MAXSIZE-2)printf( 太“大,请重新输入 ”);}while(Row>MAXSIZE-2);for(i=0;i<=Row+1;i++){ //设置迷宫边界Maze.M[0][i]=1;Maze.M[Col+1][i]=1;}for(i=0;i<=Col+1;i++){Maze.M[i][0]=1;Maze.M[1][Row+1]=1;}for(i=1;i<=col;i++){ //输入相应迷宫各点处的具体物理状态for(j=1;j<=Row;i++)scanf( “Maze.M[i][j] ”);printf( n“”);}printf( 设“置出入口”);scanf( “Maze.start,Maz.end);17Maze.Row=Row;Maze.Col=Col;returnok;}voidprintMaze(MAZEMaze){ //打印出迷宫,包括边界for(i=0;i<=Maze.Col+1;i++)for(j=0;j<=Maze.Row+1;j++)printf( “n%c”,Maze.M[i][j]); //用字符型打印输出( i,j)状态printf( 出“口:”);}StatusPass(MAZE&Maze,PositionPos,Position,&N_pos,intdi){判断迷宫中当前位置dos在di方向上能否通过//如果通过用npos返回下一步位置,并将通信位置保留入mazeswitch(di){case1:if(Maze.M[pos.x+1][pos.y]!=1){N_posx=Posx+1;return1; //npos赋予位置,并将对应状态改为走过}break;case2:if(Maze.M[Pos.x][Pos.y+1]!=1){N_pos.x=pos.x;N_pos.y=Pos.y+1;Maze.M[N_pos]=1;return1;}break;case3:if(Maze.M[Pos.x-1][Pos.y]!=1){N_pos.x=pos.x-1;N_pos.y=Pos.y;Maze.M[N_pos]=1;return1;}break;case4:if(Maze.M[Pos.x][Pos.y-1]!=1){N_pos.x=pos.x;N_pos.y=Pos.y-1;Maze.M[N_pos]=1;return1;}break;return0;}StatusFindWay(MAZEMaze,SqStack&way){//用pass搜索maze//用way返回搜索所得路径,如果不存在返回值 0InitStack(S); //设置工作栈Push(S,Maze.start); //将开始位置入栈,工作开始P=s->base; //搜索位置开始于 start处Do{Pos=*p; //持续下一步搜索,当前位置 POSFor(i=1;i<=4;i++) //四方位全面搜索if(pass(&maze,pos&n_pos,i){ //如果通过对下一点(访问)N_pos.NOM=P->(s->base); //记下追踪序数Push(S,N_Pos); //将可行点如栈}P++; //继续下一步}if(p==s->top)return0; //无路径可达p=&Pos; //从出口入逆向路径do{p=S->base+->NUM; //由p->num找回上一步位置18Push(&way,*P);}while(p!=s->base);Destory(&s);return1;}voidPrintWay(MAZE.Maze,SqstackWay){ //将迷宫及路径一起打印print(最“短路径“”);for(p=way.base;p<way.top;p++)Maze.M[p->x][p->y]=4; //标出路径PrintMaze(Maze); //打印输出}⑶主函数算法:main(){clrscr();InitStack(&way);Do{Printf( 现“在开始构筑迷宫 ”);SetMaze(&Maze);Printf( 所“得迷宫状态为: ”);PrintMaze(Maze);Printf( 按“任意键开始搜索路径 ”);Setch();printf( 搜索结“果:”);if(FindWay(Maze,&way)){Printf( 所“锝路径:”);PrintWay(Maze,Way);}elseprintf( 没“有可到达出口处 ”);printf(按“C键继续处理其它迷宫或其它键退出 ”);getch(c);}while(c==?c?||c==?C?);destoryStack( “&Way”);}⒉函数的调用关系反映了本演示程序的层次结构main工作栈设置 迷宫处理InitStack DestoryStack FindWay PrintWay PrintMaze PassSetMaze⋯⋯Push GetTop Pop StackLength StackEmpty ClearStack19四、调试分析要求:本节为调试分析的部分,在撰写本节的文档时,应对程序调试过程中出现的问题以及如何解决的过程进行说明。说明应详尽,排版要统一。⒈开始没有将M[n][m].start.end设置为MAZE 型数据的下属单元,使得各个迷宫操作的函数参数十分散杂,调试时各参数关系不易把握。⒉另行设置PrintWay函数,使得终端输出更加友好,并巧妙地将迷宫以特殊、明朗的字符输出,效果更好。⒊只须将FindWay程序中搜索循环的结束条件改动,并增加栈便可输出迷宫的所有路径。追踪时还要多加一次循环对工作栈进行扫描。五、用户手册要求:本节需要对程序运行时的操作步骤和使用顺序做出具体的说明(如是否对路径要求,如何运行程序等)。说明应详尽,排版要统一。⒈本程序的运行环境为 DOS操作系统,执行文件为 Maze.exe;⒉进入演示程序后,即显示对话形式的提示操作过程,如:提出开始建筑迷宫输入迷宫的大小输入迷宫具体结构 现在的迷宫状态为:按任意键开始搜索搜索结果:最短路径为: 没有找到可行路径按,C?键continue或其它键Quit⒊提示输入迷宫大小后,用户输入所要处理迷宫的宽 ROW,高COL;⒋提示输入迷宫后,用户将迷宫输入, 0代表可行,1代表障碍;⒌按任意键开始后,程序自动进行对所建迷宫的搜索,并将搜索结果;⒍进行下一个迷宫处理单元或退出程序。六、测试数据20要求:本节需要对程序调试过程中所使用的测试数据以及输入测试数据以后的结果进行说明。说明应详尽,排版要统一。现在开始建筑迷宫 (settheMazenow:pleaseEnterinthesizeofthemazeyourwanttodealwith:TheRow(<50):8TheCol:8EntertheMaze:0010001000100010000011000111000000010000010001000111011010000000EntertheStartandendplease:Thestart:11Theend:88Nowthemazeis:Thestartorend完成退出Pressanykeytocontinuetodealthemaze:Theshortestwayofthemazeis: ””21七、附录要求:本节可以根据实际的需要对部分主要的程序源代码进行介绍。代码要给出注释,排版要统一⒈源程序文件清单:栈:stack.c迷宫:Maze.c⒉源程序⑴栈stack.c#defineSTACK_INIT_SIZE50#defineSTACKIN[REMENT] 10typedefstruct{intX;intY;intNum;}Position,SelemType;typedefSturct{SElemType*base;SelemType*top;intSatcksizi;}SqStack;voidInitStack(SqStack&S){Sibase=(SelemType*)malloc(STACK_INIT_SIZE*Sizeof(SelemType));if(!Sibase)exit(OVERFLOW);S top=S base;S StackSize=STACK_INIT_SIZE;}voidGetTop(SqStackS,SelemTypee&e){if(S.top==S.base)exit(-1);e.X=*(S.top-1).x;e.Y=*(S.top-1).Y;e.Num=*(S.top-1).Num;}voidPush(SqStack&s,SelemTypee){if(s.top-s.base>=s.stacksize){S.base=(SelemType*)realloc(S.base,(S.stacksize+STACKIN(EMENT)*SIZEOF(seLEMtYP));if(!S.base)exit(OVERFLOW);S.top=S.base+S.stackSize;S.stacksize+=STACKINCREMENT;}*(S.top).X=e.X;22*(S.top)

温馨提示

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

评论

0/150

提交评论