C语言课设——单词统计系统

 C语言课设——单词统计系统
 课设是大一做的,很简陋的用c做的小程序,传上来给大家分享一下。
当时vc实在是装不上了,一气之下用记事本写的,所以排版很乱。

当时接的课设要求核心是用冒泡法,所以就是用冒泡法写的,其他方法当然也可以,只要把核心的那部分替换成你要的方法就行了。

下面是代码部分:


 

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

struct word{
    char w[20];     //存储单词
    int i;         //出现次数
    int n[10];           //记录位置
}a[200];
int num1=0,num2=0;         //1记录字符数,2记录单词数
FILE *fp=NULL;         //文件指针
char file[1000];        //存储所有数据



void openfile()                                                  //打开文件并取出数据
{
        //char s[100];
        //printf("请输入文件完整的路径:");
        //scanf("%s",&s);
        //gets(s);
    if(fp!=NULL)
        printf("文件已打开\n");
    else if((fp=fopen("d:\\chapter.dat","r"))==NULL)
        {
        printf("打开失败,请检查路径是否正确或文件是否存在\n");
        exit(0);
    }
    else
    {
        printf("打开文件成功!\n");
        while(!feof(fp))
        {
            file[num1]=fgetc(fp);
            num1++;
        }
        fclose(fp);
    }
}


void keep()                                    //存入文件
{
    FILE *ft;
    int i;
    if((ft=fopen("d:\\out.dat","w"))==NULL)
    {
        printf("打开文件“out.dat”失败\n");
        exit(0);
    }
    fputs("单词名          数量\n",ft);
    for(i=1;i<num2;i++)
    {
        fprintf(ft,"%s",a[i].w);
        fprintf(ft,"          %d\n",a[i].i);
    }
    fclose(ft);
    printf("生成数据已导入至文件d:out.dat中\n");
}




void account()                                       //统计
{
    char word[20];
    int i=0,j=0,k=0,flag=0;                            //i统计
    if(fp==NULL)
    {
        printf("文件未打开\n");
    }
    else
    {
        strcpy(word," ");
        for(;i<=num1;i++)
        {
            if((file[i]>='a'&&file[i]<='z')||(file[i]>='A'&&file[i]<='Z'))     //存入单词
            {
                if(file[i]>='A'&&file[i]<='Z')
                    file[i]=file[i]-'A'+'a';
                word[j]=file[i];
                word[j+1]='\0';
                j++;
            }
            else if(file[i]==' '&&file[i+1]!=' ')
            {
                for(k=0;k<num2;k++)
                {
                    if(strcmp(word,a[k].w)==0)
                    {
                        a[k].i++;
                        a[k].n[a[k].i]=num2;
                        flag=1;
                    }
                }
                if(flag==0)
                {
                    strcpy(a[num2].w,word);
                    a[num2].i=1;
                    a[num2].n[a[k].i]=num2;
                    num2++;
                    strcpy(word," ");
                    strcpy(a[num2].w," ");
                    a[num2].i=0;
                }
                j=0;
                flag=0;
            }
        }
        //printf("统计后的单次序列为:\n");
        //for(i=1;i<num2;i++)
            //printf("%s,出现次数为:%d\n",a[i].w,a[i].i);
        keep();
    }
}


void sort()                                      //排序
{
    int i,j;
    struct word t;
    if(fp==NULL)
        printf("文件未打开\n");
    else
    {
        for(i=1;i<num2;i++)
        {
            for(j=num2-1;j-1>=i;j--)
            {
                if(a[j].i>a[j-1].i)
                {
                    t=a[j];
                    a[j]=a[j-1];
                    a[j-1]=t;
                }
            }
        }
        //printf("排序后的单次序列为:\n");
        //for(i=1;i<num2;i++)
            //printf("%s,出现次数为:%d\n",a[i].w,a[i].i);
        keep();
    }
}


void consult()                               //查询
{
    int i,j,flag2=0;                 //flag2用于判断是否存在
    char word[20];
    if(fp==NULL)
    {
        printf("文件未打开\n");
    }
    else
    {
        printf("请输入要查询单词\n");
        scanf("%s",&word);
        for(i=1;i<num2;i++)
        {
            if(strcmp(word,a[i].w)==0)
            {
                printf("%s存在于该文章中,出现次数为%d\n",word,a[i].i);
                printf("出现的位置为:\n");
                for(j=1;j<=a[i].i;j++)
                    printf("第%d处:第%d个单词\n",j,a[i].n[j]);
                flag2=1;
            }
        }
        if(flag2==0)
            printf("%s不存在于该文章中\n",word);
    }
}



void menu()                                 //菜单
{
    printf("**************************   欢迎使用单词统计系统    **************************\n");
    printf("**************************      1.打开文件           **************************\n");
    printf("**************************      2.开始统计           **************************\n");
    printf("**************************      3.开始排序           **************************\n");
    printf("**************************      4.开始查询           **************************\n");
    printf("**************************      5.退出               **************************\n");
}



void main()
{
    int i;
    while(1)
    {
        menu();
        printf("请输入操作代码!\n");
        scanf("%d",&i);
        switch(i)
        {
        case 1:
            openfile();break;
        case 2:account();break;
        case 3:sort();break;
        case 4:consult();break;
        case 5:
            {
                printf("谢谢使用!\n");
                exit(0);
            }
        }

    }

}

 

 

 

 

  • 4
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值