[高级软件工程实验]内部模块化的命令行菜单小程序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
- [高级软件工程实验]内部模块化的命令行菜单小程序V2.0
- “软件工程(C编码实践篇)”实验报告【实验三:内部模块化的命令行菜单小程序V2.0】
- 实验报告三:内部模块化的命令行菜单小程序V2.0
- 实验三:内部模块化的命令行菜单小程序V2.0
- 实验三:内部模块化的命令行菜单小程序V2.0
- 文章标题 实验三:内部模块化的命令行菜单小程序V2.0
- 实验三:内部模块化的命令行菜单小程序V2.0
- 实验三:内部模块化的命令行菜单小程序V2.0
- 实验三:内部模块化的命令行菜单小程序V2.0
- 实验三:内部模块化的命令行菜单小程序V2.0
- 实验报告三:内部模块化的命令行菜单小程序V2.0
- 实验三:内部模块化的命令行菜单小程序V2.0
- 实验三:内部模块化的命令行菜单小程序V2.0
- [高级软件工程实验]命令行菜单小程序V1.0
- 内部模块化的命令行菜单小程序
- 内部模块化的命令行菜单小程序
- [高级软件工程实验]用可重用的链表模块来实现命令行菜单小程序V2.5
- [高级软件工程实验]用callback增强链表模块来实现命令行菜单小程序V2.8
- 二维数组中的查找
- CentOS7的网络配置
- 课后习题page101.pp3.4
- 请详细说下你对vue生命周期的理解?
- Homebrew包管理器的安装与使用
- [高级软件工程实验]内部模块化的命令行菜单小程序V2.0
- C 语言的浮点型问题
- Python Basics: Working with Strings
- PyQt5系列学习笔记之01:通过Qt Creator创建.ui文件,pyuic5翻译.ui文件为.py文件,在PyCharm中调用.py文件
- 承德算命大师解读命与运的奥秘,承德算命大师预测指导
- Python时间差中seconds和total_seconds的区别
- 图像增强技术基础、评价指标及其经典算法
- MyBatis框架理解与使用
- 手游服务端框架之使用Redis实现跨服排行榜