工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1961|回复: 4

见到一个程序但系有吾明~边位可以讲解下~

[复制链接]
发表于 2006-6-28 00:34 | 显示全部楼层 |阅读模式
#include
#include
#include
#include

#define K 5
#define ERROR 0
#define OK 1

char km[K][20]; //科  目
int KM=0 ; //科目数
int n=0 ; //人  数

/*单链表结构*/
typedef struct LNode
{
    long ID ;  //ID号
    char name[10]; //姓名
    char ***[3]; //性别
    int  age ;  //年龄
    double cj[K]; //成绩
    struct LNode*next ;
}
*LinkList ;

LinkList Insert(LinkList head);
LinkList sort(LinkList head,int x);
void m(int x);

/*创建一个带头结点的空链表*/
LinkList create(void)
{
    LinkList L ;
    L=(LinkList)malloc(sizeof(struct LNode));
    if(L!=NULL)L->next=NULL ;
    return L ;
}

/*设置科目:返回科目数*/
int setKM()
{
    int i=0,x=0 ;
    if(KM>0)
    {
        printf("当前设置:");
        for(i=0;i        printf("%s ",km[ i]);
        printf("\n");
    }
    printf("设置科目数[0-退出]<最大值:%d>:",K);
    scanf("%d",&x);
    if(x==0)return KM ;
    while(x<1||x>K)
    {
        system("cls");
        m(1);
        printf("输入不合法!\n");
        printf("设置科目数[0-退出]<最大值:%d>:",K);
        scanf("%d",&x);
        if(x==0)return KM ;
    }
    for(i=0;i    {
        printf("输入第%d门科目名称:",i+1);
        scanf("%s",km[ i]);
    }
    return x ;
}


/*读入数据*/
int loadkm()
{
    int i ;
    FILE*fp ;
    if((fp=fopen("km.txt","rb+"))==NULL)
    fp=fopen("km.txt","wb+");
    for(i=0;!feof(fp);i++)
    {
        fscanf(fp,"%s\n",km[ i]);
        if(strlen(km[ i])!=0)KM++;
    }
    fclose(fp);
    return OK ;
}


LinkList load(LinkList head)
{
    int i=0,j ;
    LinkList s,t,p ;
    FILE*fp ;
    loadkm();
    if((fp=fopen("data.txt","a+"))==NULL)return head ;
    if(fgetc(fp)==EOF)
    {
        system("cls");
        m(1);
        while(KM==0)
        {
            system("cls");
            m(1);
            printf("没有科目,请设置科目!\n");
            KM=setKM();
            printf("\n");
        }
        printf("添加数据:\n");
        Insert(head);
        return head ;
    }
    //fseek(fp,0L,0);
    rewind(fp);
    p=(LinkList)malloc(sizeof(struct LNode));
    fscanf(fp,"%ld %s %s %d ",&p->ID,p->name,p->***,&p->age);
    for(i=0;i    for(i=KM;icj[ i]=0.0 ;
    p->next=NULL ;
    head->next=p ;
   
    while(!feof(fp))
    {
        p=p->next ;
        p=(LinkList)malloc(sizeof(struct LNode));
        fscanf(fp,"%ld %s %s %d ",&p->ID,p->name,p->***,&p->age);
        for(i=0;i        for(i=KM;icj[ i]=0.0 ;
        p->next=NULL ;
        i=j=0 ;
        s=head->next ;
        while(s->ID<=p->ID&&p->next)
        {
            s=s->next ;
            i++;
        }
        s=head->next ;
        while(s->next&&j        {
            s=s->next ;
            j++;
        }
        t=s->next ;
        s->next=p ;
        p->next=t ;
    }
    s=head ;
    i=0 ;
    while(s->next)
    {
        s=s->next ;
        i++;
        n=i ;
    }
    fclose(fp);
    return head ;
}

/*保存文件*/
int save(LinkList head)
{
    int i ;
    LinkList p=head->next ;
    FILE*fp,*fpp ;
    if((fp=fopen("data.txt","w+"))==NULL)return ERROR ;
    if((fpp=fopen("km.txt","wb+"))==NULL)return ERROR ;
   
    for(i=0;i    fprintf(fpp,"%s\n",km[ i]);
    while(p)
    {
        fprintf(fp,"%ld %s %s %d ",p->ID,p->name,p->***,p->age);
        for(i=0;i        p=p->next ;
    }
    fclose(fp);
    fclose(fpp);
    return OK ;
}

/*平均成绩*/
double pj(LinkList p)
{
    int i ;
    double pj=0 ;
    for(i=0;i    pj+=p->cj[ i];
    pj/=KM ;
    return pj ;
}

/*排头*/
bt()
{
    int i ;
    printf("ID号\t姓名\t性别\t年龄\t");
    for(i=0;i<KM;I++)PRINTF("%S\T",KM[I]);
    printf("平均\n\n");
}

/*输出当前指针信息*/
void put(LinkList p)
{
    int i ;
    printf("%ld\t",p->ID);
    printf("%s\t",p->name);
    printf("[%s]\t",p->***);
    printf("%d\t",p->age);
    for(i=0;i<KM;I++)PRINTF("%G\T",P->cj[ i]);
    printf("%3.2f\n",pj(p));
}

/*输出信息*/
void all(LinkList head,int x)
{
    LinkList p=head->next ;
    int i,j=0 ;
    int k,a1,a2 ;
    long d ;
    double c1,c2,z[K]={0},zpj=0.0 ;
    char n[10],s[3];
    if(x==0)
    {
        system("cls");
        bt();
        while(p)
        {
            put(p);
            for(i=0;icj[ i];
            j++;
            if(j%20==0)
            {
                printf("\n按任意键继续");
                getch();
                system("cls");
                bt();
            }
            p=p->next ;
        }
    }
   
    if(x==1)
    {
        printf("ID号:");
        scanf("%ld",&d);
        system("cls");
        bt();
        while(p)
        {
            if(d==p->ID)
            {
                put(p);
                for(i=0;icj[ i];
                j++;
                if(j%20==0)
                {
                    printf("\n按任意键继续");
                    getch();
                    system("cls");
                    bt();
                }
            }
            p=p->next;
        }
    }
   
    if(x==2)
    {
        printf("姓名:");
        scanf("%s",n);
        system("cls");
        bt();
        while(p!=NULL)
        {
            if(strcmp(n,p->name)==0)
            {
                put(p);
                for(i=0;icj[ i];
                j++;
                if(j%20==0)
                {
                    printf("\n按任意键继续");
                    getch();
                    system("cls");
                    bt();
                }
            }
            p=p->next;
        }
    }
   
    if(x==3)
    {
        printf("年龄范围:");
        scanf("%d",&a1);
        scanf("%d",&a2);
        system("cls");
        bt();
        while(p)
        {
            if(p->age>=a1)
            {
                if(p->age<=a2)
                {
                    put(p);
                    for(i=0;icj[ i];
                    j++;
                    if(j%20==0)
                    {
                        printf("\n按任意键继续");
                        getch();
                        system("cls");
                        bt();
                    }
                }
            }
            p=p->next ;
        }
    }
   
    if(x==4)
    {
        printf("1.男 2.女\n");
        printf("性别:");
        scanf("%d",&x);
        if(x==1)strcpy(s,"男");
        else if(x==2)strcpy(s,"女");
        else strcpy(s,"男");
        
        system("cls");
        bt();
        while(p)
        {
            if(strcmp(s,p->***)==0)
            {
                put(p);
                for(i=0;icj[ i];
                j++;
                if(j%20==0)
                {
                    printf("\n按任意键继续");
                    getch();
                    system("cls");
                    bt();
                }
            }
            p=p->next ;
        }
    }
   
    if(x==5)
    {
        printf("当前设置:");
        for(i=0;i        {
            printf("%d.",i+1);
            printf("%s ",km[ i]);
        }
        printf("\n选择科目:");
        scanf("%d",&k);
        while(k>KM||k<=0)
        {
            system("cls");
            m(2);
            printf("超出范围!\n");
            printf("当前设置:");
            for(i=0;i            {
                printf("%d.",i+1);
                printf("%s ",km[ i]);
            }
            printf("\n选择科目:");
            scanf("%d",&k);
        }
        
        printf("成绩范围:");
        scanf("%lf",&c1);
        scanf("%lf",&c2);
        if(c2>100.0)c2=100.0 ;
        system("cls");
        bt();
        while(p)
        {
            if(p->cj[k-1]>=c1)
            {
                if(p->cj[k-1]<=c2)
                {
                    put(p);
                    for(i=0;icj[ i];
                    j++;
                    if(j%20==0)
                    {
                        printf("\n按任意键继续");
                        getch();
                        system("cls");
                        bt();
                    }
                }
            }
            p=p->next ;
        }
    }
    printf("\n共有 %d 人\t",j);
    if(j>0)printf("各科平均成绩:\t");
    for(i=0;i    {
        z[ i]/=j ;
        if(z[ i]>=0&&z[ i]<=100)printf("%.2f\t",z[ i]);
        zpj+=z[ i];
    }
    zpj/=KM ;
    if(zpj>=0&&zpj<=100)printf("%3.2f\n",zpj);
    getch();
}

/*逆序表*/
void L_convert(LinkList head)
{
    LinkList s=head ;
    LinkList p1=(LinkList)malloc(sizeof(struct LNode));
    LinkList p2=(LinkList)malloc(sizeof(struct LNode));
    LinkList p3=(LinkList)malloc(sizeof(struct LNode));
    p1=s->next ;
    p2=p1->next ;
    p3=p2->next ;
    p1->next=NULL ;
    while(p3->next)
    {
        p2->next=p1 ;
        p1=p2 ;
        p2=p3 ;
        p3=p3->next ;
    }
    p2->next=p1 ;
    p3->next=p2 ;
    s->next=p3 ;
    head=s ;
}
 楼主| 发表于 2006-6-28 00:35 | 显示全部楼层
觉得好似缺左D野~
回复

使用道具 举报

发表于 2006-6-28 00:39 | 显示全部楼层
感觉不是偶学的东西
回复

使用道具 举报

 楼主| 发表于 2006-6-28 00:44 | 显示全部楼层
C既文件 指针同链表咋~
回复

使用道具 举报

发表于 2006-6-28 00:48 | 显示全部楼层
太长了,楼主又不加点注释!
太晚了,又没宵夜。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-15 05:10

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表