[高级软件工程实验]内部模块化的命令行菜单小程序V2.0

来源:互联网 发布:淘宝自动装修软件 编辑:程序博客网 时间:2024/06/05 02:32

版本库URL:https://github.com/swagnhen/Advanced-Software-Engineering-Exercise.git

实验要求

1)遵守代码风格规范,参考借鉴代码设计规范的一些方法;
2)代码的业务逻辑和数据存储使用不同的源文件实现,即应该有2个.c和一个.h作为接口文件;

实验内容

shell中各命令功能的实现包含在cmdopt.h与cmdopt.c中
main函数包含于shelllet.c中
通过gcc编译时请使用命令

gcc shelllet.c cmdopt.c -o shelllet

cmdopt.h

#ifndef _CMDOPT_H#define _CMDOPT_Hextern void cmdAdd();extern void cmdMinus();extern void cmdMultiply();extern void cmdDivide();extern void cmdHello();extern void cmdQuit();extern void cmdShowUID();extern void cmdHelp();extern void cmdElse();#endif

cmdopt.c

#include "cmdopt.h"#include <stdio.h>#include <stdlib.h>#include <unistd.h>void cmdAdd(){    int a, b;    printf(">>>");    scanf("%i", &a);    printf(">>>");    scanf("%i", &b);    printf(">>>%i\n", a+b);}void cmdMinus(){    int a, b;    printf(">>>");    scanf("%i", &a);    printf(">>>");    scanf("%i", &b);    printf(">>>%i\n", a-b);}void cmdMultiply(){    int a, b;    printf(">>>");    scanf("%i", &a);    printf(">>>");    scanf("%i", &b);    printf(">>>%i\n", a*b);}void cmdDivide(){    int a, b;    printf(">>>");    scanf("%i", &a);    printf(">>>");    scanf("%i", &b);    printf(">>>%i\n", a/b);}void cmdHello(){    printf(">>>Welcome to shelllet!\n");}void cmdQuit(){    printf("**********Shelllet End**********\n");    exit(0);}void cmdShowUID(){    printf(">>>UID: %i\n", getuid());}void cmdHelp(){    printf("|help\n");    printf("|hello\n");    printf("|add\n");    printf("|minus\n");    printf("|multiply\n");    printf("|divide\n");    printf("|showuid\n");    printf("|quit\n");}void cmdElse(){    printf(">>>Wrong Commend\n");}

shelllet.c

#include "cmdopt.h"#include <stdio.h>#include <string.h>int main(){    char cmd[128];    printf("**********Shelllet Running**********\n");    while (1)    {        printf(">>>");        scanf("%s", cmd);        if (strcmp(cmd, "hello") == 0)        {            cmdHello();        }        else if (strcmp(cmd, "showuid") == 0)        {            cmdShowUID();        }        else if (strcmp(cmd, "add") == 0)        {            cmdAdd();        }        else if (strcmp(cmd, "minus") == 0)        {            cmdMinus();        }        else if (strcmp(cmd, "multiply") == 0)        {            cmdMultiply();        }        else if (strcmp(cmd, "divide") == 0)        {            cmdDivide();        }        else if (strcmp(cmd, "help") == 0)        {            cmdHelp();        }        else if (strcmp(cmd, "quit") == 0)        {            cmdQuit();        }        else        {            cmdElse();        }    }    return 0;}

运行效果
这里写图片描述

实验总结与问题

第一次写包含多个文件的c程序,在编译的时候遇到了一点问题
以前在windows下写C++的时候根本没想过多个文件的时候怎么编译
虽然vs比较笨重老被人鄙视,但确实还是为菜鸟程序员屏蔽了一些复杂的细节
对于gcc,一般来讲是写一个小的Makefile文件来编译整个程序的
原理上就是将工程中所有用到的.c文件编译为.o文件然后连接到一起
在这个实验中不需要这么复杂,在gcc后把两个要编译的.c文件都加上即可

【Swegnhan + 《软件工程(C编码实践篇)》MOOC课程作业http://mooc.study.163.com/course/USTC-1000002006】

阅读全文
0 0
原创粉丝点击