2017 Fall SoftwareEngineering Learning (2)

来源:互联网 发布:微信公众开发java教程 编辑:程序博客网 时间:2024/05/21 06:15

2017 Fall Software Engineering Learning (2)

My first C project

公开发表一篇实验报告,并在实验报告中注明【网易云课堂昵称 + 《软件工程(C编码实践篇)》MOOC课程作业http://mooc.study.163.com/course/USTC-1000002006 】


一、实验需求分析

  • 可以广泛通用的命令行菜单子系统组件,可方便地定制而嵌入到其他系统;
  • 程序循环、接收用户的命令,如help、others等命令;
  • 类似ftp的help目录或者bash的help目录;
  • 实现一个命令行的菜单小程序,执行某个命令时调用一个特定的函作为执行动作,实现的命令个数不少于8个;

首先循环、接受用户命令——运用while(1)循环
用scanf()语句将每次用户输入的命令存进变量,然后用if-else控制判断从而执行每一个指令的具体实现。

二、程序具体实现

1、程序分解

为了程序的可维护性与可扩展性,我们将程序分为两个部分
在forgebash.c文件里面是程序的主循环。
在command.c里面是每一条命令的具体实现。
command.h是函数声明。
这里写图片描述

2、具体实现

首先是主程序,依照《构建之法》4.1代码规范 和高质量C++/C编程指南(林锐) 上面讲解的代码规范方式,我们写出了如下程序

/**************************************************************************************************//*   >File Name: forgebash.c                                                                      *//*    >Author: AcrididCheng                                                                       */  /*    >Mail: chenghuaming@aliyun.com                                                              *//**************************************************************************************************/#include <stdio.h>#include <string.h>#include <stdlib.h>#include "command.h"int main(){    char cmd[128];    printf("Thank you for using the forgebash program, type help for commands that sopport.\n");    while(1)    {        scanf("%s",cmd);        if (strcmp(cmd, "exit") == 0)        {            exit(0);        }        else if(strcmp(cmd, "help") == 0)        {            printf("\n");       //command1's description.... and so on            printf("\n");            printf("\n");            printf("\n");            printf("\n");            printf("\n");            printf("\n");            printf("exit    ----    type 'exit' to terminal the forgebash program.\n");        }        else if(strcmp(cmd, "command1") == 0)        {            do_command1();        }        else if(strcmp(cmd, "command2") == 0)        {            do_command2();        }        else if(strcmp(cmd, "command3") == 0)        {            do_command3();        }        else if(strcmp(cmd, "command4") == 0)        {            do_command4();        }        else if(strcmp(cmd, "command5") == 0)        {            do_command5();        }        else if(strcmp(cmd, "command6") == 0)        {            do_command6();        }        else if(strcmp(cmd, "command7") == 0)        {            do_command7();        }    }    return 0;}

上述程序将每一个命令封装起来了,可以在其他文件中实现,这样便于管理和维护。
接下来是命令的具体实现程序,当然,这个程序可以在一个文件里,也可以在多个文件中。现在,我们为了保持代码的可读性,全放在一个文件里

/**************************************************************************************************///    >File Name: command.c//    >Author: AcrididCheng//   >Mail: chenghuaming@aliyun.com/**************************************************************************************************/#include <stdio.h>void do_command1(){    printf("command1 processing ...\n");}void do_command2(){}void do_command3(){}void do_command4(){}void do_command5(){}void do_command6(){}void do_command7(){}

可以看到,中间有许多空白。由于这次实验只要求编写一个支持多命令的伪命令行,所以对于每个命令是什么和具体做什么内容,我们留空以待之后编写。
再就是,我们将函数声明放到了统一的头文件中,这样便于阅读。

#pragma oncevoid do_command1();void do_command2();void do_command3();void do_command4();void do_command5();void do_command6();void do_command7();

3、编写Makefile

跟在windows上用IDE编写程序不同,我们编写的多文件项目要自己手动进行编译和连接。但是如果文件很多层次很复杂,那么要输入的命令就非常多。为了解决这一问题,Linux提供了一个很好的命令make,通过编写一个Makefile然后执行make这一指令我们就能告诉操作系统该如何处理这一系列操作。关于make 的教程,网上存在很多,而且Makefile里面的语法变化迅速,所以我仅仅贴出我的makefile代码。
在clone到我的代码 之后,进入目录下执行

make

你就能看到forgebash这一可执行文件
这里写图片描述
如果再执行

make clean

你就会发现所有的生成的文件被清楚掉了,这样保持了源码的纯粹性。
这里写图片描述
以下是Makefile的代码

objects = forgebash.o command.occ = gccforgebash : $(objects)    cc -o forgebash $(objects)forgebash.o : command.h.PHONY : cleanclean :    rm forgebash $(objects)

三、实验结果展示

为了更好的演示实验过程,一下进行一下实验展示
这里写图片描述
如图,我们先从github上clone下我的代码 然后编译
这里写图片描述
这里由于我们仅实装了help和exit命令,所以我只展示了这一部分
这里写图片描述
运行完后清理一下项目
这里写图片描述
至此实验就结束了。

四、实验总结

这次实验帮我们整体了解了一个项目的架构与过程,在编写过程中参考代码规范让我们的代码清晰易读,更重要的是,重新温习了一下Makefile的编写。这非常有意义!


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 mykung充不了电怎么办 脑出血恢复期身体软怎么办 腿里面有积水怎么办 手臂伤筋了怎么办 想打羽毛球没人怎么办 对看书没有兴趣怎么办 痴呆老人晚上闹怎么办 高中毕业证没拿怎么办 高考志愿同分怎么办 儿童吃虾过敏怎么办 滑板湿水了怎么办 老员工不听指挥怎么办 手机显示连接itunes怎么办 苹果手机下载不信任怎么办 暗影格斗3进不去怎么办 喝酒第二天头痛怎么办 加油忘记拔枪怎么办 刷机完成后怎么办 苹果8按键音太小怎么办 电脑蓝屏出英文怎么办 win10蓝屏重启怎么办 苹果手机变蓝屏怎么办 nga账号声望不足怎么办 鬃狮蜥胆小咬人怎么办 小狗拉稀脱水了怎么办 泰迪刚到家老叫怎么办 开车遇到拉死人怎么办 斯诺克解不到球怎么办 颈椎和腰椎不好怎么办 车祸肇事者不赔偿怎么办 交强险自赔吃亏怎么办 交通事故保险不结案怎么办 马蚁借呗超出一天还款怎么办 千里追风油太辣怎么办 蛀牙牙肉肿痛怎么办 转转删除的东西怎么办 专票开给了个人怎么办 手机用户密码忘了怎么办 手机用户密码忘记了怎么办 悦借钱账户锁定怎么办 手势密码锁忘了怎么办