| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 576 人关注过本帖
标题:做到半的学生系统,遇 问题了
只看楼主 加入收藏
多布斯的喵喵
Rank: 2
等 级:论坛游民
帖 子:133
专家分:24
注 册:2011-3-29
结帖率:94.74%
收藏
已结贴  问题点数:20 回复次数:8 
做到半的学生系统,遇 问题了
#include<stdio.h>
#include<string.h>
int main ()
{
    struct Student
    {
        int num;
        char name[20];
        int classes;
        char sex;
        int brith;
        int grade;
    };
    FILE *fp;
    struct Student st[30],st1,st2[30];
    int b,c,d=0,i,j,z=0;
    char a[20];
    if((fp=fopen("E:\\student.dat","rb"))==NULL)
    {
        printf("不能打开文件\n");
        return 0;
    }
    printf("******************************\n");
    printf("      1----------查询\n");
    printf("      2----------排序\n");
    printf("      3----------插入\n");
    printf("      4----------删除\n");
    printf("      5----------退出\n");
    printf("******************************\n");
    for(i=0;i<30;i++)
    {
        fread(&st[i],sizeof(struct Student),1,fp);
        st2[i]=st[i];
    }
    scanf("%d",&b);
    if(b==1)
    {
        printf("******************************\n");
        printf("      1.1----------按学号查\n");
        printf("      1.2----------按姓名查\n");
        printf("      1.3----------按成绩查\n");
        printf("******************************\n");
        scanf("%d",&c);
        if(c==1)
        {
            printf("输入学号\n");
            scanf("%d",&d);
            printf("学号\t姓名\t班级\t性别\t出生年月\t分数\n");
            for(i=0;i<30;i++)
            {
                fread(&st[i],sizeof(struct Student),1,fp);
                if(d==st[i].num)
                {
                    printf("%d\t%s\t%d\t%c\t%d\t\t%d\n",st2[i].num,st2[i].name,st2[i].classes,st2[i].sex,st2[i].brith,st2[i].grade);
                    z++;
                }
                if (z==0)
                    printf("无此学号学生\n");
            }
            printf("\t\t谢谢使用\n");
        }
        if(c==2)
        {
            printf("输入姓名\n");
            scanf("%s",a);
            printf("学号\t姓名\t班级\t性别\t出生年月\t分数\n");
            for(i=0;i<30;i++)
            {
                fread(&st[i],sizeof(struct Student),1,fp);
                if(strcmp(st[i].name,a)==0)
                {
                    printf("%d\t%s\t%d\t%c\t%d\t\t%d\n",st2[i].num,st2[i].name,st2[i].classes,st2[i].sex,st[i].brith,st2[i].grade);
                    z++;
                }
                if(z==0)
                    printf("无此姓名学生\n");
            }
            printf("\t\t谢谢使用\n");
        }
        if(c==3)
        {   
            printf("输入成绩\n");
            scanf("%d",&d);
            printf("学号\t姓名\t班级\t性别\t出生年月\t分数\n");
            for(i=0;i<30;i++)
            {
                fread(&st[i],sizeof(struct Student),1,fp);
                if(d==st[i].grade)
                {
                    printf("%d\t%s\t%d\t%c\t%d\t\t%d\n",st2[i].num,st2[i].name,st2[i].classes,st2[i].sex,st2[i].brith,st2[i].grade);
                    z++;
                }
                if(z==0)printf("无此成绩学生\n");
            }
            printf("\t\t谢谢使用\n");
        }
        else
            printf("输入错误\n谢谢使用\n");
            return 0;
    }
    if(b==2)
    {
            printf("学号\t姓名\t班级\t性别\t出生年月\t分数\n");
            for(j=0;j<19;j++)
            for(i=0;i<19-j;i++)
            {
                if(st2[i].grade<st2[i+1].grade&&st2[i].grade!=0)
                {st1=st2[i];st2[i]=st2[i+1];st2[i+1]=st1;}
            }
            for(i=0;i<21;i++)
            if(st2[i].grade!=0)
                printf("%d\t%s\t%d\t%c\t%d\t\t%d\n",st2[i].num,st2[i].name,st2[i].classes,st2[i].sex,st2[i].brith,st2[i].grade);
            printf("\t\t谢谢使用\n");
            return 0;
    }
    if(b==3)
    {
        printf("需要插入几个数据\n");
        scanf("%d",&d);
        printf("输入数据\n");
        printf("学号\t姓名\t班级\t性别\t出生年月\t分数:(以空格区分)\n");
        for(i=20;i<20+d;i++)
        scanf("%d %s %d %c %d %d\n",&st[i].num,st[i].name,&st[i].classes,&st[i].sex,&st[i].brith,&st[i].grade);//为什么这里要输入第7 个数据它才往下走
        printf("最新数据列表:\n");
        for(i=0;i<20+d;i++)
        printf("%d\t%s\t%d\t%c\t%d\t\t%d\n",st[i].num,st[i].name,st[i].classes,st[i].sex,st[i].brith,st[i].grade);
        printf("\t\t谢谢使用\n");
            return 0;
    }
    if(b==4)
    if(b==5)
        return 0;
    else
        printf("\t\t输入错误!!\n");
            return 0;
}[附件ID:attach_1名称:student.rar]
搜索更多相关主题的帖子: classes include return 
2011-07-06 15:58
多布斯的喵喵
Rank: 2
等 级:论坛游民
帖 子:133
专家分:24
注 册:2011-3-29
收藏
得分:0 
student.rar (672 Bytes)
补上……
2011-07-06 16:07
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:19 
可以改用链表做吗

                                         
===========深入<----------------->浅出============
2011-07-06 16:08
多布斯的喵喵
Rank: 2
等 级:论坛游民
帖 子:133
专家分:24
注 册:2011-3-29
收藏
得分:0 
回复 3楼 laoyang103
谢谢哈,豁然开朗!
2011-07-07 17:39
多布斯的喵喵
Rank: 2
等 级:论坛游民
帖 子:133
专家分:24
注 册:2011-3-29
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<string.h>
struct Student
{
    int num;
    char name[20];
    int classes;
    char sex;
    int brith;
    int grade;
    struct Student *next;
};
int main ()
{
   
    FILE *fp;
    struct Student st[30],st1,st2[30],*p;
    int b,c,ch,d,i,j,k,y=0,z=0;
    char a[20],x;
    if((fp=fopen("D:\\student2.dat","rb"))==NULL)
    {
        printf("不能打开文件\n");
        return 0;
    }
   
    printf("       ******************************\n");
    printf("              1----------查询\n");
    printf("              2----------排序\n");
    printf("              3----------插入\n");
    printf("              4----------删除\n");
    printf("              5----------退出\n");
    printf("       ******************************\n");
    p=st;
    for(i=0;i<30;i++)
    {
        fread(&st[i],sizeof(struct Student),1,fp);
        z++;
        if(st[i].next==NULL)break;
       } 
    for(i=0;i<z-1;i++)
        st[i].next=&st[i+1];
    scanf("%d",&b);
    if(b==1)
    {
        printf("       ******************************\n");
        printf("            1.1----------按学号查\n");
        printf("            1.2----------按姓名查\n");
        printf("            1.3----------按成绩查\n");
        printf("       ******************************\n");
        scanf("%d",&c);
        if(c==1)
        {
            printf("输入学号\n");
            scanf("%d",&d);
            for(i=0;i<z;i++)
            {
                if(d==p->num)
                {
                    y++;
                    if(y==1)
                        printf("学号\t姓名\t班级\t性别\t出生年月\t分数\n");
                    printf("%d\t%s\t%d\t%c\t%d\t\t%d\n",p->num,p->name,p->classes,p->sex,p->brith,p->grade);
                    y++;
                }
                p=p->next;
            }
            if(y==0)
                printf("查无此学号\n");
        }
        else
            if(c==2)
            {
                printf("输入姓名\n");
                scanf("%s",a);
                for(i=0;i<z;i++)
                {
                    fread(&st[i],sizeof(struct Student),1,fp);
                    if(strcmp(st[i].name,a)==0)
                    {
                        y++;
                        if(y==1)
                            printf("学号\t姓名\t班级\t性别\t出生年月\t分数\n");
                        printf("%d\t%s\t%d\t%c\t%d\t\t%d\n",p->num,p->name,p->classes,p->sex,p->brith,p->grade);
                    }
                    p=p->next;
                }
                if(y==0)
                    printf("查无此人\n");
            }
            else
                if(c==3)
                {  
                    printf("输入成绩\n");
                    scanf("%d",&d);
                    for(i=0;i<z;i++)
                    {
                        fread(&st[i],sizeof(struct Student),1,fp);
                        if(d==st[i].grade)
                        {
                            y++;
                            if(y==1)
                                printf("学号\t姓名\t班级\t性别\t出生年月\t分数\n");
                            printf("%d\t%s\t%d\t%c\t%d\t\t%d\n",p->num,p->name,p->classes,p->sex,p->brith,p->grade);
                        }
                        p=p->next;
                    }
                    if(y==0)
                        printf("查无成绩\n");
                }
                else
                    printf("输入错误\n\t\t谢谢使用\n");
    }
    else
        if(b==2)
        {
            printf("学号\t姓名\t班级\t性别\t出生年月\t分数\n");
            for(i=0;i<z;i++,p++)
                st2[i]=*p;
            for(j=0;j<z;j++)
                for(i=0;i<z-j;i++)
                {
                    if(st2[i].grade<st2[i+1].grade)
                    {st1=st2[i];st2[i]=st2[i+1];st2[i+1]=st1;}
                }
                for(i=0;i<z;i++)
                {
                    printf("%d\t%s\t%d\t%c\t%d\t\t%d\n",st2[i].num,st2[i].name,st2[i].classes,st2[i].sex,st2[i].brith,st2[i].grade);
                    y++;
                }
                printf("%d",y);
        }
        else
            if(b==3)
            {
                /*fclose(fp);
                if((fp=fopen("D:\\student2.dat","a+"))==NULL)
                {
                    printf("不能打开文件\n");
                    return 0;
                }*/
                for(i=0;i<z;i++)
                    fread(&st[i],sizeof(struct Student),1,fp);
                printf("需要输入几组数据\n");
                scanf("%d",&d);
                for(i=0;i<z-1+d;i++)
                {
                    st[i].next=&st[i+1];
                    st2[i].next=&st2[i+1];
                }
                st[z-1+d].next=NULL;
                st2[z-1+d].next=NULL;
                printf("请输入数据(以一个空格区分)\n");
                printf("学号\t姓名\t班级\t性别\t出生年月\t分数\n");
                for(i=z;i<z+d;i++)
                {
                    scanf("%d %s %d %c %d %d",&st[i].num,st[i].name,&st[i].classes,&st[i].sex,&st[i].brith,&st[i].grade);
                    fwrite(&st[i],sizeof(struct Student),1,fp);
                }
                for(i=0;i<z;i++)
                {
                    for(j=0;j<d;j++)
                    if(st[i].num==st[z+j].num)
                    {
                        printf("\t\t学号有重复\n");
                        printf("\t\t谢谢使用\n");
                        return 0;
                    }
                    
                }
                for(i=0;i<z+d;i++)
                {   
                    printf("%d\t%s\t%d\t%c\t%d\t\t%d\n",p->num,p->name,p->classes,p->sex,p->brith,p->grade);
                    p=p->next;
                }

            }
            else
                if(b==4)
                {
                    printf("输入学号\n");
                    scanf("%d",&d);
                    for(i=0;i<z;i++)
                    {
                        if(p->num==d)
                        {
                            y++;
                            k=i;
                            printf("学号\t姓名\t班级\t性别\t出生年月\t分数\n");
                            printf("%d\t%s\t%d\t%c\t%d\t\t%d\n",p->num,p->name,p->classes,p->sex,p->brith,p->grade);
                        }
                        p=p->next;
                    }
                    if(y!=0)
                    {
                        printf("确认要删除此生信息?Y/N\n");
                        while ((ch=getchar()) != '\n' && ch != EOF);
                        scanf("%c",&x);
                        if(x=='Y')
                        {
                            if(st[k].next!=NULL&&k!=0)
                            {
                                st[k-1].next=&st[k+1];
                                p=st;
                            }
                            else
                                if(k==0)
                                    p=&st[1];
                                else
                                {
                                    st[k-1].next=NULL;
                                    p=st;
                                }
                                printf("已删除\n");
                               
                        }
                        else
                            if(x!='Y'||x!='N')
                            {
                                printf("\n输入错误\n");
                                printf("\t\t谢谢使用\n");
                                return 0;
                            }
                    }
                    else
                        printf("查无此学号\n");
               
                    for(i=0;i<z-1;i++)
                    {
                        printf("%d\t%s\t%d\t%c\t%d\t\t%d\n",p->num,p->name,p->classes,p->sex,p->brith,p->grade);
                        p=p->next;
                    }
                }
                else
                    if(b==5)
                        return 0;
                    else
                        printf("输入错误!!\n");
                    fclose(fp);
                    printf("\t\t谢谢使用\n");
                    return 0;
}
student2.rar (685 Bytes)

现在做得差不多了!!
就差删除和插入了……
表面上看是删除了,再重新进入,选择排序,它还是20 组数,没删也没加……
求解………………
2011-07-08 20:47
林发扬
Rank: 2
等 级:论坛游民
帖 子:38
专家分:56
注 册:2011-4-12
收藏
得分:1 
都是牛人
2011-07-08 21:56
多布斯的喵喵
Rank: 2
等 级:论坛游民
帖 子:133
专家分:24
注 册:2011-3-29
收藏
得分:0 
回复 3楼 laoyang103
完成了!!
2011-07-09 18:29
多布斯的喵喵
Rank: 2
等 级:论坛游民
帖 子:133
专家分:24
注 册:2011-3-29
收藏
得分:0 
回复 6楼 林发扬
其实只是你没耐心慢慢看这种长长的代码而已,其实我这个很简单
2011-07-09 18:30
t0220
Rank: 1
来 自:湖南省永顺县
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-7-10
收藏
得分:0 
新手路过 虽然看不懂  也顶顶
2011-07-10 08:53
快速回复:做到半的学生系统,遇 问题了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024135 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved