zoukankan      html  css  js  c++  java
  • 软件工程-个人项目

    1.GitHub存储库链接:https://github.com/1078862512/Software-Engineering

    2.开发程序前,模块开发预计时间

    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划    
    · Estimate ·估计这个任务需要多长时间 30  
    Development 开发    
    · Analysis ·需求分析(包括学习新技术) 180  
    · Design Spec ·生成设计文档 20  
    · Design Review ·设计复审(和同事审核设计文档)    
    · Coding Standard ·代码规范(为目前的开发制定合适的规范)    
    · Design ·具体设计 40  
    · Coding ·具体代码 300  
    · Code Review ·代码复审 60  
    · Test ·测试(自我测试,修改代码,提交修改) 40  
    Reporting 报告    
    · Test Report ·测试报告 20  
    · Size Measurement ·计算工作量 10  
    · Postmortem & Process Improvement Plan ·事后总结,并提出过程改进计划 10  
    合计   710  

    3.解题思路

    编程语言:C

    需要用到的知识:C语言对文件流的控制、字符串、字符数组、图形化界面等

    结构分析:分为c、w、l、x、a四种模式,故可分为一个主函数调用四个函数实现

    4.设计实现过程

    根据用户输入的“order”的不同,主函数会调用不同的函数来实现相应功能:-c是调用字符数,-w是词的数,-l是行数,-s可调用递归,-a可现实复杂统计,-x参数可以启动图形化操作。

    5.代码说明主程序

    (1).字符统计

    int charcount(char file[])//字符统计函数
    {
        FILE *p = NULL;
        int charcount = 0;
        char c;
        fopen_s(&p,file, "r");
        if (p==NULL)
        {
            printf("文件打开失败
    ");
            return -1;
        }
        printf("文件打开成功
    ");
        c=fgetc(p);
        while (c != EOF)
        {
            c = fgetc(p);
            charcount++;
        }
        fclose(p);
        return charcount;
    }

    (2)行数统计

    int linecount(char file[])//行数统计函数
    {
        FILE *p = NULL;
        char c;
        int linecount = 0;
        fopen_s(&p,file, "r");
        if (p == NULL)
        {
            printf("文件打开失败
    ");
            return -1;
        }
        c = fgetc(p);
        while (c != EOF)
        {
            if (c == '
    ')
            {
                linecount++;
            }
            c = fgetc(p);
        }
        linecount++;
        fclose(p);
        return linecount;
    }

    (3)单词统计

    int wordcount(char file[])//单词数统计函数
    {
        FILE *p = NULL;
        char c;
        int wordcount = 0;
        fopen_s(&p, file, "r");
        if (p == NULL)
        {
            printf("文件打开失败
    ");
            return -1;
        }
        c = fgetc(p);
        while (c != EOF)
        {
            if (c >= 'a'&&c <= 'z' || c >= 'A'&&c <= 'Z' || c >= '0'&&c <= '9')
            {
                while (c >= 'a'&&c <= 'z' || c >= 'A'&&c <= 'Z' || c >= '0'&&c <= '9' || c == '_')
                {
                    c = fgetc(p);
                }
                wordcount++;
                c = fgetc(p);
            }
            c = fgetc(p);
        }
        fclose(p);
        return wordcount;
    }

    (5)空行统计:

    int spacecount(char file[])//a模式下的空行统计函数
    {
        FILE *p = NULL;
        char c;
        int spacecount = 0;
        int codecount = 0;
        int annocount = 0;
        int count = 0;
        fopen_s(&p, file, "r");
        if (p == NULL)
        {
            printf("文件打开失败
    ");
            return -1;
        }
        c = fgetc(p);
        while (c != EOF)
        {
            if (c != ' ')
            {
                count++;
            }
            if (count<2&&c == '
    ')
            {
                spacecount++;
            }
            if (c == '
    ')
            {
                count = 0;
            }
            c = fgetc(p);
        }
        fclose(p);
        return spacecount;
    }

    (6)代码行统计

    int codecount(char file[])//a模式下的代码行统计函数
    {
        FILE *p = NULL;
        char c;
        int codecount = 0;
        int count = 0;
        int flag = 0;
        fopen_s(&p, file, "r");
        if (p == NULL)
        {
            printf("文件打开失败
    ");
            return -1;
        }
        c = fgetc(p);
        while (c != EOF)
        {
            if (c == '/')
            {
                c = fgetc(p);
                if (c == '/')
                {
                    flag=1;
                }
            }
            if (c != ' ')
            {
                count++;
            }
            if (count>=2 && c == '
    '&&flag==0)
            {
                codecount++;
            }
            if (c == '
    ')
            {
                count = 0;
                flag = 0;
            }
            c = fgetc(p);
        }
        fclose(p);
        return codecount;
    }

    (7)注释行统计

    int annocount(char file[])//a模式下的注释行统计函数
    {
        FILE *p = NULL;
        char c;
        int annocount = 0;
        int count = 0;
        fopen_s(&p, file, "r");
        if (p == NULL)
        {
            printf("文件打开失败
    ");
            return -1;
        }
        c = fgetc(p);
        while (c != EOF)
        {
            if (c == '/')
            {
                c = fgetc(p);
                if (c == '/')
                {
                    annocount++;
                }
            }
            c = fgetc(p);
        }
        fclose(p);
        return annocount;
    }

    (8)主程序

    int main()
    {
        int final;
        char order;
        char file[50];
        while (1)
        {
            printf("***********************************
    ");
            printf("欢迎使用,字符统计工具
    ");
            printf("请选择要实现的功能:
    c:字符数统计
    l:行数统计
    w:单词数统计
    a:进行文件中空行、代码行与注释行统计
    ");
            printf("***********************************
    ");
            printf("要结束,请输入q
    ");
            scanf_s("%c", &order,1);
            switch(order-'a')
            {
                case 2:
                {
                    printf("请输入文件名称:
    ");
                    scanf_s("%s", file, 50);
                    final = charcount(file);
                    if (final == -1)
                    {
                        printf("文件名出错
    ");
                        break;
                    }
                    printf("文件字符总数为:%d
    ", final);
                    break;
                }
                case 11:
                {
                    printf("请输入文件名称:
    ");
                    scanf_s("%s", file, 50);
                    final = linecount(file);
                    if (final == -1)
                    {
                        printf("文件名出错
    ");
                        break;
                    }
                    printf("文件行总数为:%d
    ", final);
                    break;
                }
                case 22:
                {
                    printf("请输入文件名称:
    ");
                    scanf_s("%s", file, 50);
                    final = wordcount(file);
                    if (final == -1)
                    {
                        printf("文件名出错
    ");
                        break;
                    }
                    printf("文件单词总数为:%d
    ", final);
                    break;
                }
                case 0:
                {
                    printf("请输入文件名称:
    ");
                    scanf_s("%s", file, 50);
                    final = spacecount(file);
                    if (final == -1)
                    {
                        printf("文件名出错
    ");
                        break;
                    }
                    printf("文件空行总数为:%d
    ", final);
                    final = codecount(file);
                    if (final == -1)
                    {
                        printf("文件名出错
    ");
                        break;
                    }
                    printf("文件代码行总数为:%d
    ", final);
                    final = annocount(file);
                    if (final == -1)
                    {
                        printf("文件名出错
    ");
                        break;
                    }
                    printf("文件注释行总数为:%d
    ", final);
                    break;
                }
                case 16:
                {
                    printf("本次运行结束,感谢使用
    ");
                    return 0;
                }
            }
        }
    }

    6.运行测试

     

     

     

     

     

     

     7.实际花费时间

    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划    
    · Estimate ·估计这个任务需要多长时间   34
    Development 开发    
    · Analysis ·需求分析(包括学习新技术)   200
    · Design Spec ·生成设计文档   32
    · Design Review ·设计复审(和同事审核设计文档)    
    · Coding Standard ·代码规范(为目前的开发制定合适的规范)    
    · Design ·具体设计   20
    · Coding ·具体代码   342
    · Code Review ·代码复审   50
    · Test ·测试(自我测试,修改代码,提交修改)   35
    Reporting 报告    
    · Test Report ·测试报告   10
    · Size Measurement ·计算工作量   10
    · Postmortem & Process Improvement Plan ·事后总结,并提出过程改进计划   10
    合计      743

    8.项目小结

      我承认这是个不完整的项目。由于个人技术原因,递归以及图形化界面还在制作中。我在这之前是主要在钻研前端开发的一些东西,我个人是比较喜欢那些能看见的东西的,所以就没太注意后台的编程技术这方面。接到这个项目之后,首先是惊诧——我根本没这些技术,就要我自己去做一个这样的程序了?后来还是硬着头皮一点点学文档函数,并且在网上寻找C语言图形化选择文件的办法。

      在这个项目做到差不多现在这个样子的时候,我觉得自己的技术确实跟别人差了太多,我们学习的大部分是后台的东西,前端的东西好像在课程上暂时用不到。所以就制定了这学期学习新技术的计划。这一次的时间耗费上与预期相差不大,主要花在学新技术上。我希望通过自己的学习以及一次次的项目作业,自己在这个学期能有很大进步。我也将在之后的时间里完善这个不怎么美好的开始。

  • 相关阅读:
    文件操作类File
    文件流操作
    自动登录和解/加密
    redis---set类型常用命令
    div
    css2
    css-id选择器
    table标签
    段落标签-换行标签
    input-form-select-a-img-ul-dl标签
  • 原文地址:https://www.cnblogs.com/TongGeGe/p/12492794.html
Copyright © 2011-2022 走看看