实验三:内部模块化的命令行菜单小程序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

三、实验总结

本次实验在上次实验的基础上更进一步,实现了代码的模块化,将代码的业务逻辑和数据存储分离。模块化有利于代码的修改、阅读,以后要将模块化的思想应用到实际的工作中去。

软件工程课程实验报告:实验三相关推荐

  1. 实训报告html前端开发,web前端开发技术实验报告 实验三.doc

    web前端开发技术实验报告 实验三.doc (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分  长 春 大 学 20 15 - 20 ...

  2. java程序设计教程实验报告_java程序设计课程--实验报告-实验13.doc

    java程序设计课程--实验报告-实验13.doc 还剩 12页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: ...

  3. 信息论与编码matlab实验报告,信息论实验报告(实验三、香农编码)

    <信息论实验报告(实验三.香农编码)>由会员分享,可在线阅读,更多相关<信息论实验报告(实验三.香农编码)(3页珍藏版)>请在人人文库网上搜索. 1.学生实验报告院别电子工程学 ...

  4. 大学计算机实验三,《大学计算机Ⅰ》实验报告实验三

    <大学计算机Ⅰ>实验报告实验三 (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 广东金融学院实验报告课程名称:大学计算机I实 ...

  5. 计算机网络课程设计综合实验,计算机网络课程设计报告实验报告

    计算机网络课程设计报告实验报告 (21页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 24.9 积分 中南大学课程设计报告课程:计算机网络课程设计 题目: ...

  6. Web前端开发技术课程实验报告实验3:Vue路由实验

    实验代码:实验3第2题实验参考.rar-互联网文档类资源-CSDN下载 Web前端开发技术课程实验报告 实验3:Vue路由实验 姓名:_ __ _ ___ ___   班级:_ _ _ ___ _ _ ...

  7. 区块链技术与应用实验报告(实验三)

    文章目录 区块链技术与应用实验报告(实验三) 关于作者 作者介绍 一.实验目的 二.实验原理简介 三.实验环境 四.实验步骤 1.链状态 2.区块状态 3.交易状态 4.账户状态 练习题 总结 区块链 ...

  8. 计算机结构实验三,计算机体系结构实验报告——实验三.pdf

    计算机体系结构实验报告--实验三 1.实验目的: 通过实验,熟练掌握WINDLX 的操作方法,特别注意在单步执行WinDLX程序中,流水线 中指令的节拍数. 2.实验内容: (1) 用WinDLX模拟 ...

  9. Java语言 实验报告(三)

    实验报告(三) 实验目的 熟悉 Java 综合应用程序的开发. 实验任务 编写一个 Java 应用程序,实现图形界面多人聊天室(多线程实现),要求聊天室窗口标题是"欢迎使用 XXX 聊天室应 ...

  10. webservice-UML课内实验报告实验三

    1.webservice 现将网上关于webservice的讲解提炼出来,通过一个最简单使用并且方便的例子,告诉大家什么是webservice. 简单来说,webservice就是远程调用技术,也叫X ...

最新文章

  1. ios xib 四等分_ios Xib的几种用法[转]
  2. SharePoint 2013 配置基于AD的Form认证
  3. vue 打包上线后字体图标不显示
  4. JavaScript DOM 编程艺术 公用方法
  5. Python组合列表中多个整数得到最小整数(一个算法的巧妙实现)
  6. sdibt 1244类似于拓扑排序
  7. 5G+北斗RTK定位:高精度定位技术发展更进一步
  8. 腾讯笔试题——逆序对
  9. 【bzoj4173】数学
  10. 监控工具Zabbix之原理及部署
  11. oracle数据库user表空间不足,oracle 表空间不足解决办法大全
  12. 使jets3t支持https
  13. 惠海半导体H7230直接替换BP1371 BP1361方案设计
  14. 求最长递增子序列个数——C++
  15. 数据挖掘算法——常用分类算法总结
  16. Python爬虫进阶之字体反扒保姆级教程!
  17. 全球与中国农用软管卷盘市场现状及未来发展趋势
  18. C语言入门:华氏温度转换为摄氏温度
  19. 【Python】模拟radius coa报文
  20. 你见过程序员跳槽宝典吗,35岁后慎点

热门文章

  1. CMD中文乱码永久解决方案
  2. 一个行向量与一个列向量的乘积的值等于该列向量与行向量乘积矩阵的迹的值
  3. NX二次开发-使用MFC的CImage裁剪图片
  4. 微信小程序跳一跳辅助之路(ios直接改分版)
  5. 如何快速制作专属的电子名片?这简单的五步操作让你快速拥有
  6. 第四章 前馈神经网络
  7. SpringAOP原理+使用
  8. 编写第一个c语言程序
  9. PS 学习笔记 11--画笔工具
  10. 加密解密五种算法的实现