软件工程课程实验报告:实验三
实验三:内部模块化的命令行菜单小程序V2.0
咖啡机《软件工程(C编码实践篇)》MOOC课程作业http://mooc.study.163.com/course/USTC-1000002006
在版本库根目录下新创建一个目录lab3完成实验。
一、实验要求
- 注意代码的业务逻辑和数据存储之间的分离,即将系统抽象为两个层级:菜单业务逻辑和菜单数据存储
- 要求:
a. 遵守代码风格规范,参考借鉴代码设计规范的一些方法;
b. 代码的业务逻辑和数据存储使用不同的源文件实现,即应该有2个.c和一个.h作为接口文件。 - 及时提交代码以防丢失
二、实验过程
1. 创建lab3文件夹
2. 编写程序
- linklist.h
//定义菜单项数据结构
typedef struct DataNode
{char* cmd;char* desc;void (*handler)();struct DataNode *next;
} tDataNode;
//在菜单列表*head中寻找与cmd相符的菜单项
tDataNode* FindCmd(tDataNode *head, char *cmd);
//显示所有菜单项
int ShowAllCmd(tDataNode *head);
- linklist.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "linklist.h"tDataNode* FindCmd(tDataNode *head, char *cmd)
{if(head == NULL || cmd == NULL){return NULL;}tDataNode *p = head;while(p != NULL){if(strcmp(p->cmd, cmd) == 0){return p;}p = p->next;}return NULL;
}int ShowAllCmd(tDataNode *head)
{tDataNode *p = head;while(p != NULL){printf("%s - %s\n", p->cmd, p->desc);p = p->next;}return 0;
}
- menu.c
主程序如下:
int main ()
{char cmd[CMD_MAX_LEN];info();printf("Plesea input a command:\n");while (1){printf(">>>");scanf("%s", cmd);tDataNode *p = FindCmd(head, cmd);if (p == NULL){printf("Error: Wrong command!\n");printf("Type 'info' for available commands.\n");}printf("%s - %s\n", p->cmd, p->desc);if(p->handler != NULL){p->handler();}}return 0;
}
数据模块分离:
#define CMD_MAX_LEN 128
#define DESC_LEN 1024
#define CMD_NUM 20static tDataNode head[] =
{{"info", "Command Informations", info, &head[1]},{"plus", "result of a + b", plus, &head[2]},{"minus", "result of a - b", minus, &head[3]},{"multiply", "result of a * b", multiply, &head[4]},{"divide", "result of a / b", divide, &head[5]},{"power", "result of a ^ b", power, &head[6]},{"square", "result of square root of a", square, &head[7]},{"factorial", "result of a!", factorial, &head[8]},{"absolute", "result of |a|", absolute, &head[9]},{"quit", "end this program", quit, NULL},
};
菜单命令包括以下9种:
- 介绍命令信息info()
- 加法运算plus()
- 减法运算minus()
- 乘法运算multiply()
- 除法运算divide()
- 幂运算power()
- 平方根运算square()
- 阶乘运算factorial()
- 绝对值运算absolute()
- 退出quit()
限制于报告篇幅,以上命令的具体实现代码就不在文中贴出,烦请移步github工程中查看。
https://github.com/973301529/se/tree/master/lab3
3. 编译执行
- 初始运行情况,info()介绍可用指令的相关信息
- 检测minus()、divide()、absolute()、quit()等指令的运行情况
4. 将代码同步到github
三、实验总结
本次实验在上次实验的基础上更进一步,实现了代码的模块化,将代码的业务逻辑和数据存储分离。模块化有利于代码的修改、阅读,以后要将模块化的思想应用到实际的工作中去。
软件工程课程实验报告:实验三相关推荐
- 实训报告html前端开发,web前端开发技术实验报告 实验三.doc
web前端开发技术实验报告 实验三.doc (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 长 春 大 学 20 15 - 20 ...
- java程序设计教程实验报告_java程序设计课程--实验报告-实验13.doc
java程序设计课程--实验报告-实验13.doc 还剩 12页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: ...
- 信息论与编码matlab实验报告,信息论实验报告(实验三、香农编码)
<信息论实验报告(实验三.香农编码)>由会员分享,可在线阅读,更多相关<信息论实验报告(实验三.香农编码)(3页珍藏版)>请在人人文库网上搜索. 1.学生实验报告院别电子工程学 ...
- 大学计算机实验三,《大学计算机Ⅰ》实验报告实验三
<大学计算机Ⅰ>实验报告实验三 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 广东金融学院实验报告课程名称:大学计算机I实 ...
- 计算机网络课程设计综合实验,计算机网络课程设计报告实验报告
计算机网络课程设计报告实验报告 (21页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 24.9 积分 中南大学课程设计报告课程:计算机网络课程设计 题目: ...
- Web前端开发技术课程实验报告实验3:Vue路由实验
实验代码:实验3第2题实验参考.rar-互联网文档类资源-CSDN下载 Web前端开发技术课程实验报告 实验3:Vue路由实验 姓名:_ __ _ ___ ___ 班级:_ _ _ ___ _ _ ...
- 区块链技术与应用实验报告(实验三)
文章目录 区块链技术与应用实验报告(实验三) 关于作者 作者介绍 一.实验目的 二.实验原理简介 三.实验环境 四.实验步骤 1.链状态 2.区块状态 3.交易状态 4.账户状态 练习题 总结 区块链 ...
- 计算机结构实验三,计算机体系结构实验报告——实验三.pdf
计算机体系结构实验报告--实验三 1.实验目的: 通过实验,熟练掌握WINDLX 的操作方法,特别注意在单步执行WinDLX程序中,流水线 中指令的节拍数. 2.实验内容: (1) 用WinDLX模拟 ...
- Java语言 实验报告(三)
实验报告(三) 实验目的 熟悉 Java 综合应用程序的开发. 实验任务 编写一个 Java 应用程序,实现图形界面多人聊天室(多线程实现),要求聊天室窗口标题是"欢迎使用 XXX 聊天室应 ...
- webservice-UML课内实验报告实验三
1.webservice 现将网上关于webservice的讲解提炼出来,通过一个最简单使用并且方便的例子,告诉大家什么是webservice. 简单来说,webservice就是远程调用技术,也叫X ...
最新文章
- ios xib 四等分_ios Xib的几种用法[转]
- SharePoint 2013 配置基于AD的Form认证
- vue 打包上线后字体图标不显示
- JavaScript DOM 编程艺术 公用方法
- Python组合列表中多个整数得到最小整数(一个算法的巧妙实现)
- sdibt 1244类似于拓扑排序
- 5G+北斗RTK定位:高精度定位技术发展更进一步
- 腾讯笔试题——逆序对
- 【bzoj4173】数学
- 监控工具Zabbix之原理及部署
- oracle数据库user表空间不足,oracle 表空间不足解决办法大全
- 使jets3t支持https
- 惠海半导体H7230直接替换BP1371 BP1361方案设计
- 求最长递增子序列个数——C++
- 数据挖掘算法——常用分类算法总结
- Python爬虫进阶之字体反扒保姆级教程!
- 全球与中国农用软管卷盘市场现状及未来发展趋势
- C语言入门:华氏温度转换为摄氏温度
- 【Python】模拟radius coa报文
- 你见过程序员跳槽宝典吗,35岁后慎点