命令行菜单小程序V1.0
【zhanghughsw + 《软件工程(C编码实践篇)》MOOC课程作业http://mooc.study.163.com/course/USTC-1000002006 】
本文为网易云课堂课程《软件工程(C编码实践)》的实验报告,本次实验的目的为实现一个命令行的菜单小程序,执行某个命令时调用一个特定的函数作为执行动作,实现的命令个数不少于8个。
按照上述要求,在本次实验中,利用Linux下的C程序实现了如下命令:
- time:获取当前的日期与时间
- calculation:进行加减乘除四则运算
- notepad :在当前文件夹创建并使用vim打开一个文本文档*.txt
- game :打开Linux自带游戏gnomine
- mac : 打开文件管理器nautilus
- explore :打开浏览器
- help :列出所有指令及解释
- quit :退出程序
一、实验思路
本次实验的目的是写一个简单的命令行菜单,通过读取用户输入来判断并执行对应的操作。使用了字符数组cmd来存储用户输入,然后通过对cmd字符串的比对来确定所需执行的操作。在决定实现何种功能时,由于自身编程能力局限,仅实现了上述较为简单的8项,其中time、calculation、help以及quit使用基本的C语言函数实现,notepad、game、mac以及explore则过Linux的system()函数,通过新建线程调用shell执行对应操作来实现。
二、代码分解
1. time指令:获取当前时间
#include <time.h>
41 if(strcmp(cmd,"time") == 0)
42 {
43 getLocaltime();
44 }
74 int getLocaltime()
75 {
76 time_t now;
77 struct tm *tm_now;
78 time(&now);
79 tm_now = localtime(&now);
80 printf("now datetime:%d-%d-%d %d:%d:%d\n",tm_now->tm_year+1900,tm_now->tm_mon+1,tm_now->tm_mday,tm_now->tm_hour,tm_now->tm_min,tm_now->tm_sec);
81 }
程序使用time.h库函数中定义的结构体tm和localtime()实现时间的获取,运行结果为:
2.calculation指令:进行加减乘除运算
30 if(strcmp(cmd,"calculation") == 0)
31 {
32 printf("Which calculations:+ - * /\n");
33 letsCalculate();
34 }
83 int letsCalculate()
84 {
85 char ch;
86 int num1,num2;
87 while(1)
88 {
89 scanf("%c",&ch);
90 setbuf(stdin,NULL);
91 if(ch == 'Q')
92 {
93 return 1;
94 }
95 else if(ch != '+' && ch != '-' && ch != '*' && ch!= '/')
96 {
97 printf("Input Wrong!please input the one of '+','-','*','/'\n");
98 }
99 else
100