| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 673 人关注过本帖, 1 人收藏
标题:关于学生信息管理系统向文件输入跟输出数据问题
只看楼主 加入收藏
lxy409875745
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-11-19
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:6 
关于学生信息管理系统向文件输入跟输出数据问题
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
struct Date//出生年月日
{
    int year;//年
    char x;//分割线
    int month;//月
    char y;//分割线
    int day;//日
};

struct Student
{
    int num;//学号
    char name[20];//姓名
    char sex;//性别
    char clas;//班级
    struct Date bron;//出生年月日
    char addr[20];//地址
    int phone;//电话
}stud[50];

    void input(struct Student stud[]);//信息输入
    void retur();//返回菜单
    void read();//从文件中读入学生信息
    void find_num();//按学号查询学生信息
    void find_class();//按班级查询学生信息
    void add();//增加学生信息
    void dele();//删除学生信息
    void save(int);//存储学生信息

void retur()
{
    int a;
    printf("返回上层菜单请按1 结束程序请按任意键");
    scanf("%d",&a);
    if(a==1)
    {
        system("cls");
        main();
    }
    else
        exit(0);

}




void save(int m)//存储学生信息
{
    FILE *fp;
    int i;
       if((fp=fopen("D:stud.txt","wb"))==NULL)             //新建文件stud.txt
       {
           printf("cannot open this file\n");
            exit(0);
       }
       for(i=0;i<m;i++)
           if(fwrite(&stud[i],sizeof(struct Student),1,fp)!=1)
               printf("数据存储错误\n");
           fclose(fp);
           retur();
}



void input(struct Student stud[])//写入学生信息
{
    int i,m;
    printf("请输入学生人数:");
    scanf("%d",&m);
    for(i=0;i<m;i++)
    {
        printf("学号:");
        scanf("%d",&stud[i].num);
        printf("姓名:");
        scanf("%s",&stud[i].name);
        printf("班级:");
        scanf("%s",&stud[i].clas);
        printf("出生年月日:");
        scanf("%d%s%d%s%d",&stud[i].bron.year,&stud[i].bron.x,&stud[i].bron.month,&stud[i].bron.y,&stud[i].bron.day);
        printf("地址:");
        scanf("%s",&stud[i].addr);
        printf("电话:");
        scanf("%d",&stud[i].phone);
        printf("\n");
    }
    save(m);
}


void read()//从文件中导出学生信息
{
    int i;
    FILE*fp;
    if((fp=fopen("D:stud.txt","rb"))==NULL)        //打开文件stud.dat
       {
           printf("无法找到此文件\n");
            exit(0);
       }
    for(i=0;i<N;i++)
    {
        fread(&stud[i],sizeof(struct Student),1,fp);
        printf("学号:%d",stud[i].num);
        printf("姓名:%s",stud[i].name);
        printf("班级:%s",stud[i].clas);
        printf("出生年月日:%d%s%d%s%d",stud[i].bron.year,stud[i].bron.x,stud[i].bron.month,stud[i].bron.y,stud[i].bron.day);
        printf("地址:%s",stud[i].addr);
        printf("电话:%d",stud[i].phone);
        printf("\n");
    }
    fclose(fp);

}

void find_num()//按学号查询学生信息
{
    int i,a;
    printf("请输入所查学生学号:\n");
    scanf("%d",&a);
    for(i=0;i<N;i++)
    {
        if(a==stud[i].num)//判断学号是否存在
        {
            printf("学号:%d",stud[i].num);
            printf("姓名:%s",stud[i].name);
            printf("班级:%s",stud[i].clas);
            printf("出生年月日:%d%s%d%s%d",stud[i].bron.year,stud[i].bron.x,stud[i].bron.month,stud[i].bron.y,stud[i].bron.day);
            printf("地址:%s",stud[i].addr);
            printf("电话:%d",stud[i].phone);
            printf("\n");
        }
    }
    retur();
}


void find_class()//按班级查询学生信息
{
   
    char c,*p1,*p2;
    int i;
    printf("请输入班级");
    scanf("%s",&c);
    p2=&c;
    for(i=0;i<N;i++)
    {
            p1=&stud[i].clas;
        if(strcmp(*p1,*p2)==0)
        {
            printf("学号:%d",stud[i].num);
            printf("姓名:%s",stud[i].name);
            printf("班级:%s",stud[i].clas);
            printf("出生年月日:%d%s%d%s%d",stud[i].bron.year,stud[i].bron.x,stud[i].bron.month,stud[i].bron.y,stud[i].bron.day);
            printf("地址:%s",stud[i].addr);
            printf("电话:%d",stud[i].phone);
            printf("\n");
        }
    }
    retur();
}

void add()//增加学生信息
{

}



void dele()//删除学生信息
{


}


int main()
{
    int choice;
    struct Student *p=stud;
    printf("************学生信息管理系统*********\n");
    printf("*             1-信息输入            *\n");
    printf("*             2-读入学生信息        *\n");
    printf("*             3-按学号查询学生信息  *\n");
    printf("*             4-按班级查询学生信息  *\n");
    printf("*             5-增加学生信息        *\n");
    printf("*             6-删除学生信息        *\n");
    printf("*             0-退出程序            *\n");
    printf("*************************************\n");
    printf("(请选择0-5)\n");
    scanf("%d",&choice);
    switch(choice)
    {
        case 1:input(p);break;
        case 2:read();break;
        case 3:find_num();break;
        case 4:find_class();break;
        case 5:add();break;
        case 6:dele();break;
        case 0:exit(0);break;
        default:printf("输入错误请重新选择");break;
    }
    return 0;
}





主要是学生信息输入后再读入学生信息是总是出现应用程序错误查了好久还是没发现错误 求各位大大帮忙看看



搜索更多相关主题的帖子: 出生年月日 管理系统 include 分割线 信息 
2014-05-20 17:08
zjkedy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:131
注 册:2010-5-14
收藏
得分:0 
先确认stud文本格式的输入输出是否一致吧
2014-05-20 17:21
忘了_这一切
Rank: 3Rank: 3
来 自:星星
等 级:论坛游侠
威 望:1
帖 子:41
专家分:145
注 册:2014-4-25
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
void load();
struct Date//出生年月日
{
    int year;//
    char x;//分割线
    int month;//
    char y;//分割线
    int day;//
};

struct Student
{
    int num;//学号
    char name[20];//姓名
    char sex;//性别
    char clas;//班级
    struct Date bron;//出生年月日
    char addr[20];//地址
    int phone;//电话
}stud[50];

    void input(struct Student stud[]);//信息输入
    void retur();//返回菜单
    void read();//从文件中读入学生信息
    void find_num();//按学号查询学生信息
    void find_class();//按班级查询学生信息
    void add();//增加学生信息
    void dele();//删除学生信息
    void save(int);//存储学生信息

void retur()
{
    int a;
    printf("返回上层菜单请按1 结束程序请按任意键");
    scanf("%d",&a);
    if(a==1)
    {
        system("cls");
        load();
    }
    else
        exit(0);

}




void save(int m)//存储学生信息
{
    FILE *fp;
    int i;
       if((fp=fopen("D:stud.txt","wb"))==NULL)             //新建文件stud.txt
       {
           printf("cannot open this file\n");
            exit(0);
       }
       for(i=0;i<m;i++)
           if(fwrite(&stud[i],sizeof(struct Student),1,fp)!=1)
               printf("数据存储错误\n");
           fclose(fp);
           retur();
}



void input(struct Student stud[])//写入学生信息
{
    int i,m;
    printf("请输入学生人数:");
    scanf("%d",&m);
    for(i=0;i<m;i++)
    {
        printf("学号:");
        scanf("%d",&stud[i].num);
        printf("姓名:");
        scanf("%s",stud[i].name);
        printf("班级:");
        scanf("%s",&stud[i].clas);
        printf("出生年月日:");
        scanf("%d%s%d%s%d",&stud[i].bron.year,&stud[i].bron.x,&stud[i].bron.month,&stud[i].bron.y,&stud[i].bron.day);
        printf("地址:");
        scanf("%s",&stud[i].addr);
        printf("电话:");
        scanf("%d",&stud[i].phone);
        printf("\n");
    }
    save(m);
}


void read()//从文件中导出学生信息
{
    int i;
    FILE*fp;
    /*Student *q;
    q=(struct Student *)malloc(sizeof(struct Student);
    stud*/
    if((fp=fopen("D:stud.txt","rb"))==NULL)        //打开文件stud.dat
       {
           printf("无法找到此文件\n");
            exit(0);
       }
    for(i=0;i<N;i++)
    {
        fread(&stud[i],sizeof(struct Student),1,fp);
        printf("学号:%d",stud[i].num);
        printf("姓名:%s",stud[i].name);
        /*printf("班级:%s",stud[i].clas);
        printf("出生年月日:%d%s%d%s%d",stud[i].bron.year,stud[i].bron.x,stud[i].bron.month,stud[i].bron.y,stud[i].bron.day);
        printf("地址:%s",stud[i].addr);
        printf("电话:%d",stud[i].phone);*/
        printf("\n");
    }
    fclose(fp);

}

void find_num()//按学号查询学生信息
{
    int i,a;
    printf("请输入所查学生学号:\n");
    scanf("%d",&a);
    for(i=0;i<N;i++)
    {
        if(a==stud[i].num)//判断学号是否存在 
        {
            printf("学号:%d",stud[i].num);
            printf("姓名:%s",stud[i].name);
            printf("班级:%s",stud[i].clas);
            printf("出生年月日:%d%s%d%s%d",stud[i].bron.year,stud[i].bron.x,stud[i].bron.month,stud[i].bron.y,stud[i].bron.day);
            printf("地址:%s",stud[i].addr);
            printf("电话:%d",stud[i].phone);
            printf("\n");
        }
    }
    retur();
}


void find_class()//按班级查询学生信息
{
    
    char c,*p1,*p2;
    int i;
    printf("请输入班级");
    scanf("%s",&c);
    p2=&c;
    for(i=0;i<N;i++)
    {
            p1=&stud[i].clas;
        if(strcmp(p1,p2)==0)
        {
            printf("学号:%d",stud[i].num);
            printf("姓名:%s",stud[i].name);
            printf("班级:%s",stud[i].clas);
            printf("出生年月日:%d%s%d%s%d",stud[i].bron.year,stud[i].bron.x,stud[i].bron.month,stud[i].bron.y,stud[i].bron.day);
            printf("地址:%s",stud[i].addr);
            printf("电话:%d",stud[i].phone);
            printf("\n");
        }
    }
    retur();
}

void add()//增加学生信息
{

}



void dele()//删除学生信息
{


}
void load()
{
     int choice;
    struct Student *p=stud;
    printf("************学生信息管理系统*********\n");
    printf("*             1-信息输入            *\n");
    printf("*             2-读入学生信息        *\n");
    printf("*             3-按学号查询学生信息  *\n");
    printf("*             4-按班级查询学生信息  *\n");
    printf("*             5-增加学生信息        *\n");
    printf("*             6-删除学生信息        *\n");
    printf("*             0-退出程序            *\n");
    printf("*************************************\n");
    printf("(请选择0-5)\n");
    scanf("%d",&choice);
    switch(choice)
    {
        case 1:input(p);break;
        case 2:read();break;
        case 3:find_num();break;
        case 4:find_class();break;
        case 5:add();break;
        case 6:dele();break;
        case 0:exit(0);break;
        default:printf("输入错误请重新选择");break;
    }
}


int main()
{
    load();
    return 0;
}

给你修改了下,总算编译通过,我屏蔽了出问题的那段代码,你自己可以输入数据再查看输出,我发现输出的好像乱码了
2014-05-20 20:31
忘了_这一切
Rank: 3Rank: 3
来 自:星星
等 级:论坛游侠
威 望:1
帖 子:41
专家分:145
注 册:2014-4-25
收藏
得分:20 
程序代码:
struct Student
{
    int num;//学号
    char name[20];//姓名
    char sex;//性别
    char clas;//班级   //此处clas为字符变量
    struct Date bron;//出生年月日
    char addr[20];//地址
    int phone;//电话
}stud[50]

程序代码:
void read()//从文件中导出学生信息
{
    int i;
    FILE*fp;
    /*Student *q;
    q=(struct Student *)malloc(sizeof(struct Student);
    stud*/
    if((fp=fopen("D:stud.txt","rb"))==NULL)        //打开文件stud.dat
       {
           printf("无法找到此文件\n");
            exit(0);
       }
    for(i=0;i<N;i++)       //这里的N是什么意思???你确定保存了100个数据?
    {
        fread(&stud[i],sizeof(struct Student),1,fp);
        printf("学号:%d",stud[i].num);
        printf("姓名:%s",stud[i].name);
        printf("班级:%s",stud[i].clas);  //此处却按字符串格式输出,到处程序崩溃
        printf("出生年月日:%d%s%d%s%d",stud[i].bron.year,stud[i].bron.x,stud[i].bron.month,stud[i].bron.y,stud[i].bron.day);//此处也有上述错误
        printf("地址:%s",stud[i].addr);
        printf("电话:%d",stud[i].phone);
        printf("\n");
    }
    fclose(fp);

}

这是我检查出来的错误,修改可运行成功
2014-05-20 23:35
lxy409875745
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2013-11-19
收藏
得分:0 
回复 3 楼 忘了 _ 这一切
谢谢阿 主要还是对文件输入输出那章节没看明白 不过现在程序至少正常了
2014-05-21 11:39
cnlfcandroid
Rank: 2
等 级:论坛游民
帖 子:14
专家分:43
注 册:2014-5-14
收藏
得分:0 

2014-05-26 10:13
麦锋
Rank: 1
等 级:新手上路
帖 子:4
专家分:4
注 册:2014-7-3
收藏
得分:0 
  if((fp=fopen("D:stud.txt","rb"))==NULL) //打开文件stud.txt}
        {
        printf("无法找到此文件\n");
        exit(0);
        }
        for(i=0;i<N;i++)
        {
        fread(&stud[i],sizeof(struct Student),1,fp);
        printf("学号:%d",stud[i].num);
        printf("姓名:%s",stud[i].name);
        printf("班级:%c",stud[i].clas);
        printf("出生年月日:%d%c%d%c%d",stud[i].bron.year,stud[i].bron.x,stud[i].bron.month,stud[i].bron.y,stud[i].bron.day);
        printf("地址:%s",stud[i].addr);
        printf("电话:%d",stud[i].phone);
        printf("\n");
        }
2014-07-03 19:08
快速回复:关于学生信息管理系统向文件输入跟输出数据问题
数据加载中...
 
   



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

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