C语言通用数据管理系统(含文件操作)

这个是一个用文件保存的通用管理系统,可以将在此程序下保存的文件通过查找找出来并将统计的数据展示在屏幕上

软件的运行截图:
C语言通用数据管理系统(含文件操作)
C语言通用数据管理系统(含文件操作)
C语言通用数据管理系统(含文件操作)
C语言通用数据管理系统(含文件操作)
C语言通用数据管理系统(含文件操作)
C语言通用数据管理系统(含文件操作)
C语言通用数据管理系统(含文件操作)

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void menu();
void findfile();
char filename[20];
int word,number;
struct distribution
{
    int ID;
    char wordtype[20];
    int length;
    char type[30];
}*p,*origin,*originx,*origins,*originf,*head;
struct intcount
{
    int i;

}*pint,*pintorigin;
struct stringcount
{
    char string[30];
}*pstring,*pstringorigin;
void menu()
{
    char input;
    printf("通用统计系统\n");
    printf("创建文件(C),查找文件(L),退出程序(Q)\n");
    scanf(" %c",&input);
    if(input=='C'||input=='c')
    {
        system("cls");
        printf("开始创建文件\n");
        return;
    }
    else if(input=='L'||input=='l')
    {
        findfile();
    }
    else if(input=='Q'||input=='q')
    {
        printf("\n\n程序退出!");
        exit(0);
        getch();
    }
}
void findfile()
{
    FILE *fp;
    struct dis
    {
        int ID;
        char wordtype[20];
        int length;
        char type[30];
    } wordx[10];
    int i,word,number,findword=0,findnumber=0;
    char mainchar;
    char str[50];
    system("cls");
    for(i=0; i<10; i++)
    {
        wordx[i].ID=0;
    }
    printf("开始查找文件!");
    printf("请输出你存入的文件地址(文件名):\n");
    getchar();
    gets(str);
    fp=fopen(str,"r");
    fscanf(fp,"%d ",&word);
    fscanf(fp,"%d ",&number);
    if(fp==NULL)
    {
        printf("文件可能不存在或者打开失败!按任意键返回主菜单!");
        fclose(fp);
        getch();
        system("cls");
        return main();

    }
    system("cls");
    printf("版本号:18\n");
    printf("记录条数:%d\n",number);
    printf("记录字段数:%d\n",word);
    printf("\n\n");
    printf("以下是字段信息:\n");
    for(i=0; i<word; i++)
    {
        fscanf(fp,"%d ",&wordx[i].ID);
        fscanf(fp,"%s ",wordx[i].wordtype);
        fscanf(fp,"%d ",&wordx[i].length);
        fscanf(fp,"%s ",wordx[i].type);
    }

    for(i=0; wordx[i].ID!=0; i++)
    {
        printf("ID:%d\t",wordx[i].ID);
        printf("字段名:%s\t",wordx[i].wordtype);
        printf("长度:%d\t",wordx[i].length);
        printf("类型:%s\t",wordx[i].type);
        printf("\n\n");
    }
    printf("\n");
    printf("统计总览:\n");
    for(i=0; i<word; i++)
    {
        printf("%s\t",wordx[i].wordtype);
        fscanf(fp,"%s ");
    }
    printf("\n\n");
    while(!feof(fp))
    {
        fscanf(fp,"%c",&mainchar);
        printf("%c",mainchar);
        if(mainchar==' ')
        {
            findword+=1;
            printf("\t");
        }
        if(findword==word)
        {
            printf("\n");
            findword=0;
        }
    }
    fclose(fp);
    printf("\n\n");
    printf("文件浏览完成,按任意键返回菜单。");
    getch();
    system("cls");
    return main();

}
int main()
{
    FILE *fp;
    system("color 0B");
    menu();
    int countn=0,counts=0,stringlength,stringmax=0;
    int i,j;
    char inputvalue;
    getchar();
    printf("请输入文件地址(文件名)");
    gets(filename);//获取文件名
    fp=fopen(filename,"wb");//打开文件
    printf("已输入文件名!");
    printf("统计系统开始运行!\n\n");
    printf("操作文件名:%s\n",filename);
    printf("请输入你要录入的字段数:");
    scanf("%d",&word);

    fprintf(fp,"%d ",word);

    printf("请输入你要记录的条数:");
    scanf("%d",&number);

    fprintf(fp,"%d ",number);

    system("cls");
    p=(struct distribution*)calloc(word,sizeof(struct distribution));
    if(p==NULL)
    {
        printf("没有足够内存!程序结束!");
        exit(0);
    }
    origin=p;
    originx=p;
    origins=p;
    originf=p;
    head=p;
    for(i=1; i<=word; i++)
    {
        printf("请输入字段名称:");
        scanf("%s",p->wordtype);
        printf("请输入字段类型(输入n设为整型数据,输入s设为字符串数据):");
        while(1)
        {
            scanf(" %c",&inputvalue);
            if(inputvalue=='n')
            {
                p->length=4;
                strcpy(p->type,"整型数据");
                printf("成功录入一个整型字段信息!\n\n");
                countn++;
                break;
            }
            else if(inputvalue=='s')
            {
                printf("请输入字符串长度:");
                scanf("%d",&stringlength);
                if(stringlength>stringmax)
                {
                    stringmax=stringlength;
                }
                p->length=++stringlength;
                strcpy(p->type,"字符型数据");
                counts++;
                printf("成功录入一个字符型字段信息!\n\n");
                break;
            }
            else
            {
                printf("请勿输入非法值!请重新输入!");
            }
            inputvalue=0;
        }
        p++;
    }
    system("cls");
    printf("以下是已经录入的字段数据:\n");
    for(i=1; i<=word; i++)
    {
        fprintf(fp,"%d ",i);
        fprintf(fp,"%s ",origin->wordtype);
        fprintf(fp,"%d ",origin->length);
        fprintf(fp,"%s ",origin->type);

        printf("ID:%d\t",i);
        printf("字段名:%s\t",origin->wordtype);
        printf("长度:%d\t",origin->length);
        printf("类型:%s\t",origin->type);
        printf("\n\n");
        origin++;
    }
    pint=(struct intcount*)calloc(number*countn,sizeof(struct intcount));
    pstring=(struct stringcount*)calloc(number*(stringmax+1)*counts,sizeof(struct stringcount));
    pintorigin=pint;
    pstringorigin=pstring;
    printf("按任意键开始录入信息!");
    getch();
    system("cls");
    printf("录入信息系统开始执行!\n\n");
    for(j=1; j<=number; j++)
    {
        for(i=1; i<=word; i++,originx++)
        {
            printf("%s=",originx->wordtype);
            if(strcmp(originx->type,"字符型数据")==0)
            {
                scanf("%s",pstring->string);
                pstring++;
            }
            else
            {
                scanf("%d",&pint->i);
                pint++;
            }
        }
        printf("一个单位的信息输入完毕!\n\n");
        originx=originx-word;
    }
    printf("所有单位的信息已经输入完毕,按任意键进行浏览!\n");
    getch();
    system("cls");
    printf("统计总览:\n");
    for(i=1; i<=word; i++)
    {
        fprintf(fp,"%s ",origins->wordtype);
        printf("%s\t",origins->wordtype);
        origins++;
    }
    printf("\n\n");
    for(i=1; i<=number; i++)
    {
        for(j=1; j<=word; j++)
        {
            if(strcmp(originf->type,"字符型数据")==0)
            {
                fprintf(fp,"%s ",pstringorigin->string);
                printf("%s\t",pstringorigin->string);
                pstringorigin++;
            }
            else
            {
                fprintf(fp,"%d ",pintorigin->i);
                printf("%d\t",pintorigin->i);
                pintorigin++;
            }
            originf++;
        }
        originf=originf-word;
        printf("\n");
    }
    free(origin);
    free(p);
    free(pint);
    free(pstring);
    free(originx);
    free(pintorigin);
    free(pstringorigin);
    free(origins);
    free(originf);
    free(head);
    fclose(fp);
    printf("\n\n一个统计文件已经储存完毕!按任意键返回主菜单!");
    getch();
    system("cls");
    return main();
}

这个文件的本质是C语言的动态数据结构和文件管理操作,是相对基础的但是很实用的部分。