ImageVerifierCode 换一换
格式:DOC , 页数:39 ,大小:476.55KB ,
资源ID:2747111      下载积分:20 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-2747111.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(《物联网软件基础课程设计》指导书.doc)为本站会员(dreamzhangning)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

《物联网软件基础课程设计》指导书.doc

1、0物联网软件基础课程设计指导书计算机科学与技术学院计工系2016 年 6 月 12 日1前 言软件基础课程设计是物联网专业的重要实践性课程。目的在于培养学生分析问题和解决问题的能力,为学生提供了一个既动手又动脑,独立实践的机会。将课本上的数据结构、离散数学和 C 语言的理论知识和实际应用问题进行有机结合,提高学生程序设计、程序调试及项目开发能力。为后续课程: 操作系统、软件工程,编译原理等课程的学习奠定必要的实践基础。本课程设计是利用数据结构、离散数学、C/C+语言理论和实验课中学到的编程知识和编程技巧,通过布置具有一定难度、一定编程量的课程设计题目,利用 C/C+语言作为开发工具,使学生通过

2、课程设计掌握高级编程语言的知识和编程技术,掌握程序设计的思想和方法,初步具备利用计算机求解实际问题的能力。通过程序设计课程设计课程的学习,能够帮助学生加深理解数据结构、离散数学、C语言基本概念,达到培养学生良好程序设计的习惯和运用 C 语言编写程序解决实际问题的能力。使学生学会把书本知识用于解决实际问题,起到深化理解和灵活掌握教学内容的目的。同时使学生在程序设计方法及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。通过该课程设计,学生应该掌握 C 或 C+语言程序设计的方法、数据结构和离散数学理论知识,熟悉 C 或 C+程序的开发环境及 C 或 C+程序的调试过程,巩固和加深对理论课

3、中知识的理解,提高学生对所学知识的综合运用能力;学生应该具有如下基本技能:培养学生查阅参考资料、手册的自学能力,通过独立思考深入钻研问题,学会自己分析、解决问题。通过对所选题目方案分析比较,确立方案,编制程序与调试程序。能熟练调试程序,在教师的指导下,完成课题任务。根据个人的设计调试过程,按课程设计报告的要求撰写设计报告。选用教材及主要参考书:1. 教材1 呼克佑. C 语言程序设计(计算机专业). 中国宇航出版社,20022 严蔚敏. 数据结构(C 语言版) 清华大学出版社,20073 宋春花、吕进来等. C+面向对象程序设计. 2. 主要参考书1 谭浩强. 程序设计题解与上机指导( 三版)

4、 . 清华大学出版社,20052 邱仲潘. C 语言参考手册. 机械工业出版社,20043 郑莉. C+语言程序设计. 清华大学出版社,20104 方世昌. 离散数学. 西安电子科技大学出版社,20032目 录前 言 1一.课程设计报告要求.4二.课程设计报告示例 迷宫问题 .5【问题描述】 5【需求分析】 5【概要设计】 5【详细设计】 7【功能的实现】 (用 C 或 C+语言描述) .11【实例测试及运行结果】 11【实现提示】 13【用户手册】 13【选作内容】 14三设计题目 151保龄球计分 151.1 问题描述 .151.2 基本要求 .151.3 测试数据 .162.文本文件单词

5、的检索与计数 .162.1 问题描述 162.2 设计需求及分析 162.2.1 串模式匹配算法的设计要求 .162.2.2 文本文件单词的检索与计数的设计要求 .162.3 设计功能的实现(用 C 或 C+语言描述) .172.3.1 朴素模式匹配算法 .172.3.2 给定位置的串匹配算法 .172.3.3 建立文本文件 .182.3.4 给定单词的计数 .182.3.5 检索单词出现在文本文件中的行号、次数及其位置 .192.3.6 运行主控程序 .192.4【实例测试及运行结果】 .192.4.1 运行实例一 .1932.4.2 运行实例二 192.5【实现提示】 .193.停车场管理

6、 .203.1 问题描述 203.2 设计需求及分析 203.3 设计功能的实现(用 C 或 C+语言描述) .203.4 实例测试及运行结果 203.5 实现提示 204.交通咨询系统设计(最短路径问题) .214.1 问题描述 214.2 设计需求及分析 214.2.1 建立图的存储结构 214.2.2 单源最短路径 224.2.3 任意一对顶点间最短路径 224.3 设计功能的实现(用 C 或 C+语言描述) .234.3.1 建立有向图的存储结构 .234.3.2 迪杰斯特拉算法 .234.3.3 费洛伊德算法 .234.3.4 运行主控程序 .234.4 实例测试及运行结果 .234

7、.4.1 运行实例一 .234.4.2 运行实例二 .245校园导游咨询 255.1 问题描述 255.2 基本要求 255.3 测试数据 255.4 实现提示 256.学生管理系统 .266.1 问题描述 266.2 设计需求及分析 266.3 设计功能的实现(C+语言描述) .266.4 实例测试及运行结果 376.5 实现提示 384一、课程设计报告要求课程设计要求选做任意四个题目即可。课程设计报告封面应给出专业、班级、姓名、学号、指导教师和完成日期,报告开头给出题目,内容包括以下五项:1 【问题描述】简要描述问题,然后说明程序设计的任务,程序要做什么。明确规定以下内容:(1) 输入的形

8、式和输入值的范围;(2) 输出的形式;(3) 程序所能达到的功能;(4) 测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。2 【问题分析与设计】分析问题,简述解决的思想或方法,说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。实现设计中定义的所有数据类型,对每个操作写出伪码算法;对主程序和其他模块也写出伪码算法(伪码算法的详细程度为按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序) ;画出函数的调用关系图。3 【功能实现】 (用 C 或 C+描述)/说明:用 C 或 C+实现代码设计。4 【实例测试及运行结果】列出测试结果,包

9、括输入和输出。测试数据应该完整、严格。测试分析内容包括:(1) 测试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论与分析;(2) 算法的时空分析和改进设想;(3) 经验和体会。5 【心得体会】谈谈在设计和调试过程中的收获。5二课程设计报告示例迷宫问题(参考)专业:_ 班级:_ 姓名:_ 学号:_ 完成日期:_【问题描述】编制一个求解迷宫通路的程序。以一个 m*n 的长方阵表示迷宫, 0 和 1 分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以

10、三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d 表示走到下一坐标的方向。如:对于下列数据的迷宫,输出的一条通路为:(1,1,1) , (1,2,2) , (2,2,2) , (3,2,3) , (3,1,2)【问题分析与设计】一、问题分析(1)以二维数组 MAZEM+2N+2表示迷宫,其中:MAZE0J和 MAZEM+1J(0JN+1)及 MAZEI0和 MAZEIN+1(0IM+1 )为添加的一圈障碍。数组中以元素值为 0 表示通路,1 表示障碍。限定迷宫的大小 M,N10。(2)用户以文件的形式输入迷宫的数据:文件中第一行的数据为迷宫的行数 M 和列数 N;从第

11、2 行至第 M+1 行(每行 N 个数)为迷宫值,同一行中的两个数字之间用空白字符相隔。(3)迷宫的入口位置和出口位置可由用户随时设定。(4)若设定的迷宫存在通路,则以长方阵形式将迷宫及其通路输出到标准输出文件(即终端)上,其中,字符“#”表示障碍,字符“*”表示路径上的位置,字符“”表示“死胡同”,即曾经经过但不能到达出口的位置,其余用空格符表示。若设定的迷宫不存在通路,则报告相应信息。(5)本程序只求出一条成功的通路。然而,只需要对迷宫求解的函数作小量修改,便可求得全部路径。 (6)程序执行的命令为:1)创建迷宫; 2)求解迷宫; 3)输出迷宫的解。二、概要设计1设定栈的抽象数据类型定义为

12、:ADT stack数据对象:D=a i|aicharset,i=1,2,n,n0数据关系:R1=|ai-1,aiD,i=2,n基本操作:InitStack(3.本程序包含三个模块71)主程序模块void main( ) 初始化do接受命令;处理命令;while(命令!=“退出”);2)栈模块-实现栈抽象数据类型3)迷宫模块-实现迷宫抽象数据类型各模块之间的调用关系如下:主程序模块迷宫模块栈模块4求解迷宫中一条通路的伪码算法:设定当前位置的初值为入口位置;do若当前位置可通,则 将当前位置插入栈顶; /纳入路径若该位置是出口位置,则结束; /求得路径存放在栈中否则切换当前位置的东邻方块为新的当

13、前位置;否则若栈不空且栈位置尚有其他方向未被探索,则设定新的当前位置为沿顺时针方向旋转找到的栈顶位置的下一相邻块;若栈不空但栈顶位置的四周均不可通,则删去栈顶位置; /后退一步,从路径中删去该通道块,若栈不空,则重新测试新的栈顶位置,直到找到一个可通的相邻块或出栈至栈空;while(栈不空);栈空说明没有路径存在三、详细设计1坐标位置类型typedef structint r,c; /迷宫中行、列的范围8PosType;2迷宫类型typedef structint m,n;char arrRANGERANGE; /各位置取值 ,#,或*MazeType;void InitMaze(MazeTy

14、pe /当前位置在路径上的“序号”PosType seat; /当前的坐标位置directiveType di; /往下一坐标位置的方向ElemType; /栈的元素类型typedef struct NodeTypeElemType data;NodeType *next;NodeType,*LinkType; /结点类型,指针类型typedef structLinkType top;int size;Stack; /栈类型栈的基本操作设置如下:void InitStack(Stack 否则返回 FALSEStatus GetTop(Stack s,ElemType e)/若栈 S 不空,则以

15、 e 带回栈顶元素并返回 TRUE,否则返回 FALSE;Status Push(Stack s.top=p;s.size+; return TRUE;else return FALSE;Status Pop(Stack elsep=S.top; S.top=S.top-next;e=p-date; S.size-; return TRUE;4.求迷宫路径的伪码算法:Status MazePath(MazeType maze,PosType start,PosType end)/若迷宫中存在从入口 start 到出口 end 的通道,则求得一条存入在栈中/(从栈底到栈顶为从入口到出口的路径)

16、,并返回 TRUE;否则返回 FALSEInitStack(S); curpos=start; /设定“当前位置”为“ 入口位置”curstep=1; found=FALSE; /探索第一步doif (Pass(maze,curpos)/当前位置可以通过,即是未曾走到过的通道块留下足迹FootPrint(maze,curpos); e=(curstep,curpos,1);Push(S,e); /加入路径if(Same(curpos,end) found=TRUE; /到达终点(出口)elsecurpos=NextPos(curpos,1); /下一位置是当前位置的东邻curstep+; /探

17、索下一步/else/ifelse /当前位置不能通过10if(!StackEmpty(S)Pop(S,e);while(e.di=4 Pop(S,e);curstep-; /留下不能通过的标记,并退回一步/whileif(e.di=s2.length)return i- s2.length; /表示 s1 中存在 s2,返回其起始位置elsereturn -1; /表示 s1 中不存在 s2, 返回-1 /函数结束说明:以上两个算法可统一为一个算法,即在子串定位算法 Index(S,T)的参数中增加一个起始位置参数即可。2.3.3 建立文本文件建立文件的实现思路是:(1)定义一个串变量;(2)

18、定义文本文件;(3)输入文件名,打开该文件;(4)循环读入文本行,写入文本文件,其过程如下:While ( 不是文件输入结束 ) 读入一文本行至串变量;串变量写入文件;输入是否结束输入标志;(5)关闭文件。2.3.4 给定单词的计数该功能需要用到前一节中设计的模式匹配算法,逐行扫描文本文件。匹配一个,计数器加1,直到整个文件扫描结束;然后输出单词出现的次数。其实现过程如下:(1)输入要检索的文本文件名,打开相应的文件;(2)输入要检索统计的单词;(3)循环读文本文件,读入一行,将其送入定义好的串中,并求该串的实际长度,调用串匹配函数进行计数。具体描述如下:While (不是文件结束) 18读入

19、一行并到串中;求出串长度;模式匹配函数计数;(4)关闭文件,输出统计结果。2.3.5 检索单词出现在文本文件中的行号、次数及其位置这个设计要求与上一个类似,但要相对复杂一些。其实现过程描述如下:(1)输入要检索的文本文件名,打开相应的文件;(2)输入要检索统计的单词;(3)行计数器置初值 0;(4)while (不是文件结束) 读入一行到指定串中;求出串长度;行单词计数器置 0;调用模式匹配函数匹配单词定位、该行匹配单词计数;行号计数器加 1;If (行单词计数器 !=0)输出行号、该行有匹配单词的个数以及相应的位置;2.3.6 运行主控程序主控菜单程序的结构要求内容如下:(1)头文件包含;(

20、2)菜单选项包括:1建立文件2单词计数3单词定位4退出程序(3)选择 14 执行相应的操作,其他字符为非法。2.4【实例测试及运行结果】2.4.1 运行实例一(说明:由学生自己来给出)2.4.2 运行实例二(说明:由学生自己来给出)192.5【实现提示】(说明:由学生自己来补充)203.停车场管理 3.1 问题描述设停车场是一个可停放 n 辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若停车场内已停满 n 辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一

21、辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。3.2 设计需求及分析以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“ 离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上

22、停留的时间不收费) 。栈以顺序结构实现,队列以链表结构实现。3.3 设计功能的实现(用 C 或 C+语言描述)/说明:此内容由学生自己设计完成。3.4 实例测试及运行结果设 n=2,输入数据为:(A,1,5),(A,2,10),(D,1,15),(A,3,20 ),(A,4,25),(A5,30),( D,2,35),(D,4,40),(E,0,0) 。其中: A表示到达(arrival) ;D表示离去(departure) ;E 表示输入结束( end) 。3.5 实现提示需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。

23、栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。/说明:要求由学生来补充。214.交通咨询系统设计(最短路径问题)4.1 问题描述在交通网络非常发达,交通工具和交通方式不断更新的今天,人们在出差、旅游或做其他出行时,不仅关心节省交通费用,而且对里程和所需要的时间等问题也感兴趣。对于这样一个人们关心的问题,可用一个图结构来表示交通网络系统,利用计算机建立一个交通咨询系统。图中的顶点表示城市,边表示城市之间的交通关系。这个交通系统可以回答出行旅客提出的各种路径选择问题。例如,问题之一:“一位旅客要从 A 城到 B 城,他希望选择一条途中中转次数最少的路线。”假设图中每一

24、站都需要换车,那么这个问题反映到图上就是要找一条从顶点 A 到顶点 B 的所含边数目最少的路径。我们只需要从顶点 A 出发对图作广度优先搜索,一旦遇到顶点 B 就终止。由此所得广度优先生成树上,从根顶点 A 到顶点 B 的路径就是中转次数最少的路径。路径上 A与 B 之间的顶点就是路径的中转站,但这只是一类最简单的图的最短路径问题。系统还可以回答诸如此类的等等的路径选择问题。设计一个交通咨询系统,为出差、旅游或做其他出行的客人提供各种路径选择信息查询服务。4.2 设计需求及分析设计一个交通咨询系统,能让旅客咨询从任一个城市顶点到另一城市顶点之间的最短路径(里程)或最低花费或最少时间等问题。对于

25、不同的咨询要求,可输入城市间的路程或所需时间或所需费用。本设计共分三部分,一是建立交通网络图的存储结构;二是解决单源最短路径问题;三是实现任两个城市顶点之间的最短路径问题。4.2.1 建立图的存储结构邻接矩阵是表示图形中顶点之间相邻关系的矩阵。图的邻接矩阵是定义如下的 n 阶方阵:设 G=( V,E )是一个图,结点集为 nvV,21。G 的邻接矩阵 ,E,0)(,)( jiji jijinjiijnij vwaA) 或当 (,或 ) 或当 (,当邻接矩阵的行表头、列表头顺序一定时,一个图的邻接矩阵表示是唯一的。图的邻接矩阵表示,除了需用一个二维数组存储顶点之间的相邻关系的邻接矩阵外,通常还需

26、要使用一个具有 n 个元素的一维数组来存储顶点信息,其中下标为 i 的元素存储顶点 i 的信息。因此,图的邻接矩阵的存储结构定义如下:#definf MVNum 50 /最大顶点数typedef structVertexType vexsMVNum; /顶点数组,类型假定为 char 型22Adjmatrix arcsMVNumMVNum; /邻接矩阵,假定为 int 型MGraph;4.2.2 单源最短路径最短路径的提法很多。在这里先讨论单源最短路径问题:即已知有向图(带权) ,我们希望找出从某个源点 S V 到 G 中其余各顶点的最短路径。为了叙述方便,我们把路径上的开始点称为源点,路径的

27、最后一个顶点为终点。那么,如何求得给定有向图的单源最短路径呢?迪杰斯特拉(Dijkstra)提出按路径长度递增产生诸点的最短路径算法,称之为迪杰斯特拉算法。迪杰斯特拉算法求最短路径的实现思想是:设 G=(V,E)是一个有向图,结点集为,cost 是表示 G 的邻接矩阵,costij表示有向边的权。若不存在有向边v,n21,则 costij的权为无穷大(这里取值为 32767) 。设 S 是一个集合,其中的每个元素表示一个顶点,从源点到这些顶点的最短距离已经求出。设顶点 v1 为源点,集合 S 的初态只包含一个元素,即顶点 v1。数组 dist 记录从源点到其他顶点当前的最短距离,其初值为 di

28、sti=costv1i,i=1,2,n。从 S 之外的顶点集合 V-S 中选出一个顶点 w,使 distw的值最小。于是从源点到达w 只通过 S 中顶点,把 w 加入集合 S 中,调整 dist 中记录的从源点到 V-S 中每个顶点 v 的距离:从原来的 distv和 distw+costwv中选择较小的值作为新的 distv。重复上述过程,直到 V-S为空。最终结果是:S 记录了从源点到该顶点存在最短路径的顶点集合,数组 dist 记录了源点到 V中其余各顶点之间的最短路径,path 是最短路径的路径数组,其中 pathi表示从源点到顶点 i 之间的最短路径的前驱顶点。因此,迪杰斯特拉算法可

29、用自然语言描述如下:初始化 S 和 D,置空最短路径终点集,置初始的最短路径值;Sv1=TRUE; Dv1=0; /S 集初始时只有源点,源点到源点的距离为 0;While (S 集中顶点数和是否存在。如果存在,则比较和的路径长度,取长度较短者为当前所求得的最短路径。该路径是中间顶点序号不大于 1 的最短路径。其次,考虑从 vi 到 vj 是否包含有顶点 v2 为中间顶点的路径,若没有,则说明从 vi 到 vj 的当前最短路径就是前一步求出的;若有,那么可分解为和,而这两条路径是前一次找到的中间顶点序号不大于 1 的最短路径,将这两条路径长度相加就得到路径的长度。将该长度与前一次中求出的从 v

30、i 到 vj 的中间顶点序号不大于 1 的最短路径比较,取其长度较短者作为当前求得的从 vi 到 vj 的中间顶点序号不大于 2 的最短路径。依此类推,直到顶点 vn加入当前从 vi 到 vj 的最短路径后,选出从 vi 到 vj 的中间顶点序号不大于 n 的最短路径为止。由于图 G 中顶点序号不大于 n,所以 vi 到 vj 的中间顶点序号不大于 n 的最短路径,已考虑了所有顶点作为中间顶点的可能性,因此,它就是 vi 到 vj 的最短路径。4.3 设计功能的实现(用 C 或 C+语言描述)4.3.1 建立有向图的存储结构/说明:要求由学生来完成代码的编写。4.3.2 迪杰斯特拉算法/说明:

31、要求由学生来完成代码的编写。4.3.3 费洛伊德算法/说明:要求由学生来完成代码的编写。4.3.4 运行主控程序/说明:要求由学生来完成代码的编写。4.4 实例测试及运行结果4.4.1 运行实例一(求给定有向图 4-1 的最短路径)24agbcd ef209101585181 03012图 4-1 一个有向图具体要求之一:求顶点 到其余顶点的最短路径;分别求顶点 b 到顶点 d 之间的最短路径、a顶点 到顶点 d 之间的最短路径。a提示:为了操作方便,对于图的顶点都是用序号来表示的,所以顶点的字母就用其对应的序号来操作:如 用 1 来代替,。4.4.2 运行实例二(求给定有向图 4-2 的最短

32、路径)上海广州西安徐州郑州北京21536748122553704236834913856516951579511成都图 4-2 一个简单的交通网络图图 4-2 是一个简单的交通网络图。具体要求之一:求顶点“北京”到其余各城市之间的最短路径;并分别求“成都”到“ 上海”之间以及“上海”到“ 西安”之间的最短路径。提示:为了操作方便,对于图的顶点都是用序号来表示的,所以顶点的城市名称就用其对应的编号来操作:如北京用 1 来代替,。255校园导游咨询5.1 问题描述设计一个校园导游程序,为来访的客人提供各种信息查询服务。5.2 基本要求(1)设计你所在学校的校园平面图,所含景点不少于 10 个。以图

33、中顶点表示校园内各景点,存放景点名称、代号、简介等信息:以边表示路径,存放路径长度等相关信息。(2)为来访客人提供图中任意景点相关信息的查询。(3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。5.3 测试数据根据实际情况自定。5.4 实现提示一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向网。顶点和边均含有相关信息。266.学生管理系统6.1 问题描述大学里有各种类型的学生,校方需要对这些学生的信息进行计算机管理。所开发的软件应包括各类学生的添加、修改、删除和查找等功能。考虑到软件的可重用性、可扩展性和可维护性,校方决定采用面向对象的程序设计方

34、法来开发系统。学生信息需要以文件方式保存到计算机硬盘中。另外,系统的用户界面应该尽可能友好,方便用户使用。6.2 设计需求及分析(1) 使用 C+语言开发,充分利用面向对象程序设计的类、对象、继承、封装和多态性等(2) 概念来设计和实现该管理系统。(3) 设计一个 Person(人员)类,考虑到通用性,只抽象出所有类型人员都具有的属性:name(姓名), id(身份证号) ,gender(性别) ,birthday(出生日期)等等。其中“出生日期”为内嵌子对象,是一个 Date(日期)类型,Date 类具有属性: year(年) ,month(月) ,day(日) 。用成员函数实现对人员信息的

35、录入和显示等必要功能操作。(4) 从 Person 类派生出 Student(学生)类,添加属性: studentNo(学号) ,schoolName(学校) ,classIn (班级) 。从 Person 类派生出 Teacher(教师)类,添加属性:teacherNo(教师编号) ,schoolName(学校) ,department(部门) 。(5) 从 Student 类中派生出 UnderGraduate(本科生)类,添加属性:major(专业) 。从 Student类中派生出 Graduate(研究生)类,添加属性:direction(研究方向) ,adviserName(导师姓名

36、) 。(6) 从 Graduate 类和 Teacher 类派生出 T(助教博士生)类。(7) 写程序测试上述各类,看能否正常运行。(8) 构建必要的辅助类,实现对本科生、研究生和助教博士生的添加、修改、删除、查询管理。(9) 根据需要定义类的构造函数、析构函数、拷贝构造函数、成员函数。必要时重载函数。(10)要求将 Person 类设置为虚基类,以消除其派生类成员访问的二义性问题(注意在虚基类各级派生类的构造函数实现时调用虚基类的构造函数) 。(11)要求在 Person 类中定义虚函数 displayDetails() ,用于显示当前对象的信息;同时定义虚函数 inputData( ),用

37、于从键盘获取当前对象的信息。Person 类所有派生类也要定义同名虚函数,使程序可以实现动态多态性。(12)用菜单方式设计主控模块程序。(13)对程序源代码要给出各部分的详细注释,这也是该题目的考核重点之一。(14)用 UML 语言描述系统用到的类及其关系。6.3 设计功能的实现(C+语言描述)/说明:此内容由学生自己设计完成。/以下代码仅供参考。程序框架:/*Copyright (C), 2010, Tyut27File name: main.cppAuthor: gaobaolu Version: 1.0 Date: 2010.6.28Description: 应用程序主函数 */#inc

38、lude #include #include “date.h“#include “person.h“#include “student.h“#include “teacher.h“#include “undergraduate.h“#include “graduate.h“#include “ta.h“#include “undergraduateManager.h“using namespace std;int main(int argc, char *argv) int choiceN;UndergraduateManager unMan; cout“ “ choiceN;switch(c

39、hoiceN)case 1:unMan.dataManage();break;case 2:/break;28case 3:/break;default:break;while(choiceN!=0);cout#include #include #include “undergraduate.h“using namespace std;/* Define a Class : UndergraduateManager 本科生管理类*/class UndergraduateManager private: int top; /记录指针Undergraduate undergraduates100;

40、 /本科生记录public: UndergraduateManager();/构造函数,将 Undergraduate.txt 读到 undergraduates中 int queryByNo(string sno);/按本科生号查找 /找到:返回数组下标/没找到:返回-1void clearStudent(); /删除所有本科生信息 int addStudent(Undergraduate s); /添加本科生,需要先查找是否存在 int modifyStudent(string sno); /修改学生信息 ,需要先查找是否存在int deleteStudent(string sno);/删

41、除本科生,删除前先查找其是否存在 int queryStudent(string sno);/查找本科生,查到则显示,否则提示未查到 void displayAll();/输出所有本科生信息void dataManage(); /本科生库维护void dataSave();void dataRead(); UndergraduateManager();/析构函数,将 undergraduates写入 Undergraduate.txt 文件中29;/构造函数,将 Undergraduate.txt 读到 undergraduates中 UndergraduateManager:UndergraduateManager() dataRead(); /按本科生号查找/找到:返回数组下标/没找到:返回-1 int UndergraduateManager:queryByNo(string sno)for(int i=0;i此学生已经存在 !-“endlendl;return 0;/修改科生,删除前先查找其是否存在int UndergraduateManager:modifyStudent(string sno) int p=queryByNo(sno);if (p=-1)

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报