实验10 设计性实验:小型实用程序设计
本实验为设计性实验,采用五选一方式:从下面 5 个选题中任选其一,独立设计并实现一个基于文本菜单的小型实用程序。本实验只给出题目与功能要求,不规定输入/输出格式,也不提供参考代码,数据结构、菜单交互、文件格式均由学生自行设计。 每个选题都鼓励包含“增、删、改、查”(CRUD)类操作与文件持久化。
一、实验目的
- 综合运用结构体、数组、函数、循环、文件等知识,完成一个较完整的小型应用程序。
- 训练需求分析与模块划分能力:将题目要求拆解为若干功能模块。
- 掌握菜单驱动程序的设计:用循环与 switch 组织多功能的持续交互。
- 体会“增删改查(CRUD)+ 文件存取”这一常见信息管理系统的通用框架。
二、总体设计要求
- 菜单驱动:程序以文本菜单持续运行,用户选择功能编号执行,选择退出项时结束。
- 数据组织:用结构体(struct)与数组组织主要数据,用整型变量记录当前数据条数。
- 持久化(建议):程序启动时从数据文件读入已有数据,退出时保存全部数据,使下次可继续管理。
- 健壮性:对“查无此项”“容量已满”“文件打开失败”等情况给出友好提示。
- 各选题的具体功能见下方 5 个实验内容,学生据此自行设计细节。
实验内容1 通讯录管理系统(选题一)
功能说明
设计并实现一个文本菜单式的通讯录(联系人)管理系统,管理对象为联系人,建议包含:姓名、电话、邮箱、分组(如 家人 / 同学 / 同事 / 其他)。需实现以下能力:
- 新增:录入一名联系人并加入通讯录(增)。
- 浏览:以表格形式列出全部联系人,建议可按姓名排序显示(查 / 显示)。
- 查询:支持按姓名查询,也支持按电话查询,输出完整信息(查)。
- 修改:按姓名定位联系人,修改其电话、邮箱或分组(改)。
- 删除:按姓名定位联系人并将其删除(删)。
- 统计:统计总人数及按分组的人数分布(统计)。
- 文件存取:启动时读入、退出时保存(建议)。
设计要求
自行定义联系人结构体与数组、设计菜单与各功能的处理流程、选择文件存储格式。无需给出固定的输入/输出样例,按你设计的交互方式实现即可。
设计提示
姓名、电话、邮箱、分组均可用字符数组存储;分组可约定为有限几类,便于统计;查找与排序注意字符串比较。
实验内容2 图书信息管理系统(选题二)
功能说明
设计并实现一个文本菜单式的图书信息管理系统,管理对象为图书,建议包含:书号、书名、作者、价格、库存。需实现以下能力:
- 新增:录入一本新书并加入系统(增)。
- 浏览:列出全部图书,建议可按价格或书名排序显示(查 / 显示)。
- 查询:支持按书号、书名或作者查询,输出图书完整信息(查)。
- 修改:按书号定位图书,修改其价格或库存(改)。
- 删除:按书号定位图书并将其下架删除(删)。
- 统计:统计藏书总量、各作者或各分类的册数等(统计)。
- 文件存取:启动时读入、退出时保存(建议)。
设计要求
自行设计图书结构体、各功能模块与交互方式、文件存储格式。价格用实型、库存用整型,其他细节由你决定。
设计提示
排序与查找可复用数组遍历、冒泡/选择排序、字符串比较等基础算法;统计可按作者或分类计数。
实验内容3 英语单词测验系统(选题三)
功能说明
设计并实现一个文本菜单式的英语单词测验系统,管理对象为词库条目,建议包含:英文单词、中文释义、掌握程度(如 已掌握 / 待巩固)。需实现以下能力:
- 新增:向词库添加单词及其中文释义(增)。
- 浏览:列出全部词库条目(查 / 显示)。
- 查询:按英文单词查询其释义(查)。
- 修改 / 删除:修改某单词的释义或掌握程度,或将其从词库删除(改 / 删)。
- 测验:随机抽取单词进行中译英或英译中测验,并给出判分与反馈。
- 统计:统计词库总量及按掌握程度的人数/条数分布(统计)。
- 文件存取:启动时读入词库、退出时保存(建议)。
设计要求
自行设计词库结构体、测验流程(抽题方式、答题与判分规则)、交互界面与文件格式。
设计提示
掌握程度可用整型标记(如 0 待巩固、1 已掌握);测验抽题可用随机数;判分规则自行约定。
实验内容4 表达式计算器(含计算历史管理)(选题四)
功能说明
实现一个支持 + - * / 及括号的算术表达式求值程序(整数除法建议向零取整),并在此基础上管理“计算历史”,每条历史包含表达式与计算结果。需实现以下能力:
- 求值(核心):输入一个合法表达式,输出计算结果。
- 保存历史:将本次表达式与结果记入历史(增)。
- 浏览历史:列出全部历史记录(查 / 显示)。
- 删除历史:删除某条历史或清空全部历史(删)。
- 文件存取:建议将历史保存到文件,启动时读入(可选)。
设计要求
自行选择实现求值的方法(如双栈处理优先级与括号、或先将中缀转后缀再计算),自行设计历史的数据结构与菜单交互。
设计提示
操作数栈与运算符栈配合、按优先级与括号决定入栈出栈,是常见的可行思路;注意除零与非法输入的处理。
实验内容5 井字棋对战游戏(含对局记录管理)(选题五)
功能说明
实现一个双人(X / O)井字棋对战游戏,包含棋盘显示、轮流落子与胜负判定,并在此基础上管理“对局记录”,每条记录包含双方选手名与胜负结果。需实现以下能力:
- 对局:显示 3×3 棋盘,双方轮流落子,自动判定横、竖、斜连珠或平局。
- 记录对局:每局结束后保存双方选手名与胜负结果(增)。
- 查看记录:列出历史对局战绩(查 / 显示)。
- 修改 / 删除:修改某条记录的选手名,或删除某条记录(改 / 删)。
- 文件存取:建议将历史战绩保存到文件,启动时读入(可选)。
设计要求
自行设计棋盘的表示(如 3×3 字符数组,X / O / 空位)、落子交互方式、胜负判定逻辑与记录管理。
设计提示
胜负判定可检查 3 行、3 列、2 条对角线;落子合法性(空格才能落子)需校验;平局即棋盘填满且无人连珠。