文档章节

“软件工程(C编码实践篇)”实验报告(三)

逍遥蓝云
 逍遥蓝云
发布于 2016/03/04 15:01
字数 494
阅读 11
收藏 0

实验过程

看了课件,看视频,了解了模块化的思想 然后自己实现

实验代码

menu.c

引入头文件

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"link_list.h"
#include<sys/types.h>
#include<unistd.h>
#include<dirent.h>

声明函数

void Help();
void Quit();
void Mkdir();
void Mkfile();
void Ls();

命令的链表

static tDataNode Head[]={
    {"help","this command can list all menu command",Help,&Head[1]},
    {"quit","this command can quit from menu",Quit,&Head[2]},
    {"mkdir","this command can creat a new dir in current dir",Mkdir,&Head[3] },
    {"mkfile","this command can creat a new file in current dir",Mkfile,&Head[4]},
    {"ls","this command can list all file in current dir",Ls,NULL}
};

define

#define CMD_LEN 10
#define NAME_LEN 1028
#define BUF_LEN 1028

main函数

int main()
    {  
        char cmd[CMD_LEN];
        printf("Ctrl c to exit\n"); 
        //循环输入cmd 按Ctrl c退出
        while(printf("command:"),scanf("%s",cmd))
        {
            tDataNode *p=Find_cmd(cmd,Head);  
            if(p==NULL)
            { 
                printf("this command is error\n");
                continue;
            } 
            if(p->handler!=NULL)
            {
                p->handler();
            }
        }
    }

各种命令的函数定义部分

void Help()
    {
        ShowAllcmd(Head);//调用ShowAllcmd函数此函数在link_list.c中
    } 
void Quit()
    {
        exit(0);
    }    
void Mkdir()
    {
        char name[NAME_LEN]; 
        printf("please write down the name of new dir\n");
        scanf("%s",name);
        if(access(name,0)==-1)//判断制定文件夹是否存在
        {
            if(mkdir(name,0777))
            { 
                printf("creat dir failed");
            }
        }
    }
 void Mkfile()
    { 
        char name[NAME_LEN]; 
        printf("please write down the name of new file\n"); 
        scanf("%s",name);
        FILE *file; 
        if(file=fopen(name,"w"))//判断指定文件是是否存在不存在就新建 存在就重写文件
        { 
            printf("create success\n");
        } 
        fclose(file);
    }
 void Ls()
    { 
        char buf[BUF_LEN];    int i=1;
        DIR *dir;    struct dirent *ptr;
        getcwd(buf,sizeof(buf));//获取当前地址
        dir=opendir(buf); 
        while(ptr=readdir(dir))
        { 
            printf("%s\t",ptr->d_name);
            if(i%4==0)
            { 
                printf("\n");
            }    
            i++;
        } 
        printf("\n");
        closedir(dir);
    }

link_list.h

#define CMD_MAX 10 
#define DESC_LEN 1028 
typedef struct DataNode
{ 
    char cmd[CMD_MAX]; 
    char Desc[DESC_LEN]; 
    void  (*handler)(); 
    struct DataNode *next;
}tDataNode; 
tDataNode *Find_cmd(char *cmd,tDataNode *head);
int ShowAllcmd(tDataNode *p);

link_list.c

#include <stdio.h> 
#include <stdlib.h>
#include <string.h> 
#include "link_list.h" 
tDataNode *Find_cmd(char * cmd,tDataNode *head)
    {
        tDataNode *p=head;
        while(p!=NULL)
        { 
            if(!strcmp(p->cmd,cmd))
            {    
                return p;
            }
        p=p->next;
        }  
        return NULL;
    } 
 int ShowAllcmd(tDataNode *head)
    {
        tDataNode *p=head; 
        printf("menu list:\n"); 
        while(p!=NULL)
            {
                printf("%s--%s\n",p->cmd,p->Desc);
                p=p->next;
            }
    }

  

实验代码

© 著作权归作者所有

共有 人打赏支持
逍遥蓝云
粉丝 2
博文 23
码字总数 17574
作品 0
合肥
高级程序员
软件工程(C编码实践篇)学习总结

真实姓名(姬祥) + 原创作品转载请注明出处 + 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006 整体概括: 这学期学习了中国科学技术大学孟宁老师的...

神迹难觅
2017/11/11
0
0
甲骨文CSO批企业用户用逆向工程寻漏洞

  【IT168 资讯】周一,甲骨文(Oracle)公司的首席安全官Mary Ann Davidson在其博客上发表了一篇颇具争议的博文,题为《不,这样不行(No,You Really Can't)》 。大致为批评使用甲骨文软件的...

cnbeta
2015/08/12
0
0
西工大-云创大数据联合实验室签约暨揭牌仪式隆重举行

  2017年12月19日,西工大-云创大数据联合实验室签约仪式暨揭牌仪式在西北工业大学长安校区计算机学院隆重举行。西北工业大学工业和信息化部大数据存储与管理重点实验室主任李战怀教授、教...

大数据头条
2017/12/21
0
0
编程更像写作

本文是从 Programmers Are Writers 这篇文章翻译而来。 早在2009年,Bruce Eckel 写了一篇文章,道出了我的想法。 “我终于给软件开发找到了一个好的类比,” Bruce 写到。“可是,我的读者们...

红薯
2012/01/12
2K
18
框架比较:Scrum vs Kanban vs Lean vs XP

  【IT168 资讯】在这篇文章中, Alesia Krush将对四种最流行的敏捷开发方法进行比较,给出了每种方法的优缺点。   市场上有各种各样的面向实践的敏捷框架,其中最受欢迎的是Scrum、Kan...

it168网站
2017/11/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

10-《深度拆解JVM》JVM是怎么实现invokedynamic的?(下)

一、问题引入 上回讲到,为了让所有的动物都能参加赛马,Java 7 引入了 invokedynamic 机制,允许调用任意类的“赛跑”方法。不过,我们并没有讲解 invokedynamic,而是深入地探讨了它所依赖...

飞鱼说编程
4分钟前
0
0
457. Circular Array Loop

Description Difficulty : Medium You are given an array of positive and negative integers. If a number n at an index is positive, then move forward n steps. Conversely, if it's n......

52iSilence7
20分钟前
0
0
MySQL SQL 常见用法

某字段重复记录 select a.fieldA from tableA a group by a.fieldA having count(a.fieldA)>1;==select * from (select a.fieldA, count(1) as faCount from tableA a group......

园领T
今天
1
0
如何使用 iptables 和 firewalld 工具来管理 Linux 防火墙规则

以下是如何使用 iptables 和 firewalld 工具来管理 Linux 防火墙规则。 防火墙 防火墙是一组规则。当数据包进出受保护的网络区域时,进出内容(特别是关于其来源、目标和使用的协议等信息)会...

linuxprobe16
今天
1
0
发生系统错误 5 拒绝访问

1、使用命令net start *开启一个服务的时候,出现发生系统错误5,拒绝访问。 解决:切换到管理员模式执行此命令即可。

fang_faye
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部