实验报告三:内部模块化的命令行菜单小程序V2.0
2017-09-27 22:08
633 查看
实验报告三:内部模块化的命令行菜单小程序V2.0
学号:SA17225091
1.实验内容
实现内部模块化的命令行菜单小程序V2.0
注意代码的业务逻辑和数据存储之间的分离,即将系统抽象为两个层级:菜单业务逻辑和菜单数据存储
要求:
2.实验过程
下载克隆版本库到本地 创建目录lab3
编写linklist.h
编写linklist.c
编写menu.c
运行测试
提交代码到版本库
3 实验心得
明白了程序模块化的重要性
明白了代码重用的好处
对c编码调试 Ubuntu基本操作 Git操作更加熟练
4 实验总结
学习了如何将程序模块化,以及软件开发过程中的常见原则,受益良多
github地址:https://github.com/lgddd/gr_lab/lab3
学号:SA17225091
1.实验内容
实现内部模块化的命令行菜单小程序V2.0
注意代码的业务逻辑和数据存储之间的分离,即将系统抽象为两个层级:菜单业务逻辑和菜单数据存储
要求:
遵守代码风格规范,参考借鉴代码设计规范的一些方法; 代码的业务逻辑和数据存储使用不同的源文件实现,即应该有2个.c和一个.h作为接口文件。
2.实验过程
下载克隆版本库到本地 创建目录lab3
编写linklist.h
编写linklist.c
编写menu.c
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <unistd.h> #include "linklist.h" int Help(); int Addition(); int Fact(); int SleepCmd(); int EchoCmd(); int TimeCmd(); int Quit(); #define CMD_MAX_LEN 128 #define DESC_LEN 1024 #define CMD_NUM 10 static tDataNode head[] = { {"help", "This is a help cmd.", Help, &head[1]}, {"version", "Menu program v1.0.", NULL, &head[2]}, {"add", "Addition for two integer.", Addition, &head[3]}, {"author", "The author of this program is a good person.", NULL, &head[4]}, {"fact", "Factorial for one integer.", Fact, &head[5]}, {"sleep", "Sleep several seconds by input value.", SleepCmd, &head[6]}, {"echo", "Show what you input in the command line.", EchoCmd, &head[7]}, {"time", "Show the system time.", TimeCmd, &head[8]}, {"quit", "Quit from menu.", Quit, NULL} }; int main() { char cmd[CMD_MAX_LEN]; Help(); printf("\n"); while (1) { printf("Please input a cmd: \n>"); scanf("%s", cmd); tDataNode *p = FindCmd(head, cmd); if (p == NULL) { printf("You have entered a wrong cmd.\n"); printf("Please use 'help' to get the help!\n\n"); continue; } printf("%s - %s\n", p -> cmd, p -> desc); if (p -> handler != NULL) p -> handler(); printf("\n"); } return 0; } /* Call ShowAllCmd() in module linklist to implement Help(). */ int Help() { ShowAllCmd(head); return 0; } /* Ask the user to input two integers and compute its addition results where no error detection. */ int Addition() { int addnum1, addnum2; printf("Please input two numbers.\n"); printf("Use 'Blank' or 'Enter' to divide the two numbers.\n"); scanf("%d", &addnum1); scanf("%d", &addnum2); printf("The answer of these two numbers is %d.\n", addnum1 + addnum2); return 0; } int Fact() { int factnum, factans; factans = 1; printf("Please input a number you want to compute factorial(less than 31).\n"); scanf("%d", &factnum); //Use iteration to compute factorial if (factnum < 0) printf("Wrong input, abort!\n"); else { while (factnum >= 1) { factans *= factnum; --factnum; } } printf("The answer is %d.\n", factans); return 0; } /* Ask the user how many seconds they want to sleep and notice the user every second. */ int SleepCmd() { int i, sleeptime; printf("Please input the time you want to sleep(better smaller one):\n"); scanf("%d", &sleeptime); for (i = 0; i < sleeptime; ++i) { printf("I have slept %d seconds.\n", i); sleep(1); } printf("Time to wake up.\n"); return 0; } /* Output what the user input before the user input EOF. */ int EchoCmd() { char ch; printf("Please end your input with 'CTRL' + 'D'(means EOF in UNIX/LINUX).\n"); while ((ch = getchar()) != EOF) printf("%c", ch); printf("\n"); return 0; } /* Call ShowLocalTime() in module linklist to implement TimeCmd(). */ int TimeCmd() { ShowLocalTime(); return 0; } int Quit() { printf("Bye, see you!\n"); exit(0); }
运行测试
提交代码到版本库
3 实验心得
明白了程序模块化的重要性
明白了代码重用的好处
对c编码调试 Ubuntu基本操作 Git操作更加熟练
4 实验总结
学习了如何将程序模块化,以及软件开发过程中的常见原则,受益良多
github地址:https://github.com/lgddd/gr_lab/lab3
相关文章推荐
- “软件工程(C编码实践篇)”实验报告【实验三:内部模块化的命令行菜单小程序V2.0】
- 实验报告三:内部模块化的命令行菜单小程序V2.0
- 实验三:内部模块化的命令行菜单小程序V2.0
- 实验三:内部模块化的命令行菜单小程序V2.0
- 实验三:内部模块化的命令行菜单小程序V2.0
- 文章标题 实验三:内部模块化的命令行菜单小程序V2.0
- 实验三:内部模块化的命令行菜单小程序V2.0
- 实验三:内部模块化的命令行菜单小程序V2.0
- 实验三:内部模块化的命令行菜单小程序V2.0
- [高级软件工程实验]内部模块化的命令行菜单小程序V2.0
- “软件工程(C编码实践篇)”实验报告【实验二:命令行菜单小程序V1.0】
- 软件工程(C编码实践篇) 实验三:内部模块化的命令行菜单
- 软件工程(C编码实践篇)”实验报告 实验二:命令行菜单小程序V1.0
- “软件工程(C编码实践篇)”实验报告【实验四:用可重用的链表模块来实现命令行菜单小程序V2.5】
- 实验报告四:用可重用的链表模块来实现命令行菜单小程序V2.5
- 实验报告二:命令行菜单小程序V1.0
- 实验报告五:用callback增强链表模块来实现命令行菜单小程序V2.8
- 软件工程(C编码实践篇)”实验报告 实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
- 内部模块化的命令行菜单小程序
- 软件工程(C编码实践篇)”实验报告 实验五:用callback增强链表模块来实现命令行菜单小程序V2.8