可用一个特殊的ASCII字符(如(012)8)标识。此外,还应记住活区起始行号。行插入将引起随后各行行号的顺序下推。
(2) 初始化过程包括:请用户提供输入文件名(空串表示无输入文件)和输出文件名,两者不能相同。然后尽可能多地从输入文件中读入各行,但不超过activemaxlen-x。x的值可以自定,例如20。
(3) 在执行行插入命令的过程中,每接收到一行时到要检查活区大小是否已达activemaxlen。如果是,则为了在插入这一行之后仍保持活区大小不超过activemaxlen,应将插入点之前的活区部分中第一行输出到输出文件中;若插入点为第一行之前,则只得将新插入的这一行输出。
(4) 若输入文件尚未读完,活区切换命令可将原活区中最后几行留在活区顶部,以保持阅读连续性;否则,它意味着结束编辑或开始编辑另一个文件。
(5) 可令前三条命令执行后自动调用活区显示。 [选作内容]
(1) 对于命令格式非法等一切错误作严格检查和适当处理。
(2) 加入更复杂的编辑操作,如对某行进行串替换;在活区内进行模式匹配等,格式可以为S<行号>@<串1>@<串2><回车>和m<串><回车>。
59.员工管理系统
[问题描述]
每个员工的信息包括:编号、姓名、性别、出生年月、学历、职务、电话、住址等。系统能够完成员工信息的查询、更新、插入、删除、排序等功能。
[基本要求]
(1) 排序:按不同关键字,对所有员工的信息进行排序。 (2) 查询:按特定条件查找员工。
(3) 更新:按编号对某个员工的某项信息进行修改。 (4) 插入:加入新员工的信息。
(5) 删除:按编号删除已离职的员工的信息。 [选作内容] 实现图形用户界面。
60.家族关系查询系统
[问题描述]
建立家族关系数据库,实现对家庭成员的相关查询。 [基本要求]
(1)建立家族关系并能存储到文件中。 (2)实现家族成员的添加。
(3)可以查询家族成员的双亲、祖先、兄弟、 孩子和后代等信息。 [实现提示]
本课程设计使用的数据结构有树状结构和队列。树状结构采用三叉链表表示,队列采用链式队列实现。
[测试数据]
由学生依据软件工程的测试技术自己确定。注意测试边界数据。
61.地铁站建设问题
[问题描述]
某城市要在其各个辖区之间修建地铁来加快经济发展,但由于建设地铁的费用昂贵,因此需要合理安排地铁的建设路线,使乘客可以沿地铁到达各个辖区,并使总的建设费用最小。
[基本要求]
(1)从包含各辖区的地图文件中读入辖区名称和各辖区间的直接距离。 (2)根据读入的各辖区的距离信息,计算出应该建设哪些辖区间的地铁路线。 (3)输出应该建设的地铁路线及所需要建设的总里程信息。 [实现提示]
本课程设计使用的数据结构是无向网络,采用邻接矩阵或作为无向网络的存储结构。 [测试数据]
可以选择一个自己熟悉的城市,了解该城市的各个辖区名称,根据自己所选的数据进行测试。
62.管道铺设施工的最佳方案
问题描述:需要在某个城市的n个小区铺设管道,则在这n个小区之间铺设n-1条管道即可,假设任意两个居民区之间都可以架设管道,但由于地理环境的不同,所需经费不同,选择最优的施工方案使总投资尽可能的少。
基本要求:输入表示小区间关系的图及每条管道的权值,选择出n-1条管道, 使总投资最小。图的信息输入一次后, 保存到文件中, 选择的n-1条管道输出到显示器的同时, 也保存于文件中。
测试用例:任意选择一个图,模拟小区间可能铺设的管道及费用。 提高要求:显示原始图及选择n-1条管道后的图。
63.银行业务模拟
问题描述:设银行有四个服务窗口,一个等待队列, 每个窗口均可以办理存款、取款、挂失、还贷业务,每种业务所需的服务时间不同,客户到达银行后,先到打号机上打号,号票上包括到达时间、编号和需要办理的业务,然后在银行内等候, 当任一服务窗口空闲时,处理等候客户中排在最前面的客户的业务。写一个上述银行业务的模拟系统,通过模拟方法求出客户在银行内逗留的平均时间和每个窗口办理的客户数及办理的每种业务数。
基本要求:每个客户到达银行的时间和需要办理的业务随机产生,输出一天客户在银行的平均逗留时间和每个窗口每天办理的客户数和每种业务数。 测试数据:营业时间为8小时,其他模拟量自行设定。
64.程序源代码的相似性
问题描述:对于两个C++语言的源程序代码,用哈希表的方法分别统计两个程序中使用C++语言关键字的情况,并最终按定量的计算结果,得出两份程序的相似性。
基本要求:建立C++语言关键字的哈希表,统计在每个源程序中C++关键字出现的频度, 得到两个向量X1和X2,通过计算向量X1和X2的相对距离来判断两个源程序的相似性。
例如:
关键字 Void Int For Char if else while do break class 程序1关键字频度 4 3 0 4 3 0 7 0 0 2 程序2关键字频度 4 2 0 5 4 0 5 2 0 1 X1=[4,3,0,4,3,0,7,0,0,2]
X2=[4,2,0,5,4,0,5,2,0,1]
设s是向量X1和X2的相对距离,s=sqrt( ∑(xi1-xi2) 2 ),当X1=X2时,s=0, 反映出可能是同一个程序;s值越大,则两个程序的差别可能也越大。
测试数据: 选择若干组编译和运行都无误的C++程序,程序之间有相近的和差别大的,用上述方法求s, 对比两个程序的相似性。
提高要求:建立源代码用户标识符表,比较两个源代码用户标识符出现的频度,综合关键字频度和用户标识符频度判断两个程序的相似性。
65.小型英汉词典
问题描述:设计一个英汉词典,支持Member (查找)、Insert (插入)、Delete (删除) 操作。
基本要求:实现字典的常用方法有:有序线性表(Memeber用二分检索实现)、AVL树(二叉搜索树)、Patricia Trie、散列表等,任选一种方法实现字典的操作,查找单词、插入单词(插入时,先查找,找不到插入,找到提示用户)、删除单词(删除时,先查找,找到删除,找不到提示用户)。
测试数据:任一英文单词。 提高要求:选用两种以上的方法实现字典的操作,并比较不同实现算法的时间复杂度和空间复杂度。
提示:字典可以自己建立,但必须按字母a~z建立26个文件,建议从网上下载,文件类型为txt。
66.分酒问题
已知有3个容量分别为3千克、5千克和8千克且没有刻度的酒瓶,3千克和5千克的瓶子均已装满了酒,而8千克的瓶子为空。现要求仅用这3个酒瓶将这些酒均分为两个4千克分别装入5千克和8千克的瓶子中。
67.马的遍历问题
在中国象棋棋盘上,对任一位置上放置的一个马,均能选择一个合适的路线,使得棋子能按象棋的规则不重复地走过棋盘上的每一位置。 要求:
(1)依次输出所走过的各位置的坐标;
(2)最好能画出棋盘的图形形式,并在其上动态地标注行走轨迹 ; (3)程序能方便地移植到其他规格的棋盘上。
68.兔子、蔬菜和狐狸问题
有一人要将自己的兔子、蔬菜和狐狸等3件物品运过河。但过河所用的船每次只能装其中的两件,而这3件物品之间又存在一定的制约关系,即:兔子不能单独和狐狸及蔬菜一起,因为狐狸会吃兔子,兔子也能吃蔬菜。构造出问题模型,并编程实现这一问题的求解。
69.九宫问题
在一个3X3的九宫格中有1—8这8个数字,一个空格随机地摆放在一个格子里,图83-a所示。现要求将该九宫格调整为如图83-b所示的形式。调整的规则是:每次只能将与空格(上、下或左、右)相邻的一个数字平移到空格中。编程实现这一问题的求解。
2 1 5
1 8 7
70.电网建设造价计算
[问题描述]
假设一个城市有n个小区,要实现n个小区之间的电网都能够相互接通,构造这个城市n个小区之间的电网,使总工程造价最低。请设计一个能满足要求的造价方案。
[实现提示]
本课程设计使用的数据结构是无向网络,构造连通网的最小代价生成树的问题,一颗生成树的代价就是树上各边的代价之和。
[测试数据]
可以选择一个自己熟悉的城市,了解该城市的各个辖区名称,根据自己所选的数据进行测试。
2 6 图83-b
3 4 5 3 8 图83-a
7 6 4
71.软件工程进度规划
[问题描述]
设计一个软件,需要进行用户需求分析、系统需求确认、系统概要设计、设计用例场景、系统的详细设计、数据库详细设计、编码、单元测试、集成测试、系统测试、维护等活动。用户需求分析需要在系统需求确认之前完成,系统的系统的详细设计必须在系统的概要设计、设计系统用例和设计用例场景之前完成。
如表所示,是一系列活动之间的关系。
表 系统活动之间的关系
活动代码 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11
图所示是设计一个软件的AOV网示意图。
4 5 7 1 2
图 软件设计流程的AOV网
请设计算法判断该软件设计流程是否有回路,若无请给出该软件设计AOV网的拓朴序
3 6 10 活动名称 用户需求分析 系统需求确认 系统概要设计 设计用例场景 系统的详细设计 数据库详细设计 编码 单元测试 集成测试 系统测试 维护 先需活动 无 A1 A2 无 A3, A4 A3 A5, A6 A7 A8 A7 A11 8 9 11