| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 580 人关注过本帖
标题:一道c语言文件题
只看楼主 加入收藏
上官羽陵
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-4-11
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
一道c语言文件题
问题描述:综合设计一个程序,要求存储每个学生的信息,包括学号、姓名、性别、年龄、电话、住址等。程序能够完成学生信息的显示、查询、插入、删除功能。要求学生的信息存储在文件中。
基本要求:本实验是综合型实验。要求初步掌握设计较完整的应用程序的方法,运用结构体的方法设计数据格式,运用文件的输入和输出读写数据。


请各位帮忙写一下这道题的代码,感激不尽!
这不是作业题,是我自己找的题目,因为我想熟悉有关c语言文件的操作,之前自己写了代码但是老是有问题,实在是没办法了才来求助的,麻烦会的人写一下,让我看看,这真不是抄作业!!!
    请各位帮忙看看下面的代码哪里有问题!!!



#include<stdio.h>
#include<stdlib.h>
#define N 100
typedef struct std
{
    long num;
    char sex[10],name[20],phone[15],adr[50];
    int age;
}str,*build;
str stdl;
void print();
void input();
void search(long);
void insert(int);
void del(long);
int main()
{
    int i,j;
    char k;
    long n;
    do{
        system("cls");
        printf("\n\n*****************************\n1-输入学生数据          2-查询\n\n3-插入                  4-删除\n*****************************\n");
        scanf("%d",&i);
        switch(i)
        {
        case 1:input();break;
        case 2:printf("请输入需要查询的学生的学号:");
            scanf("%ld",&n);
            search(n);
            break;
        case 3:printf("请输入要在第几个学生之后插入新的数据:");
            scanf("%d",&j);
            insert(j);
            break;
        case 4:printf("请输入要删除的学生学号:");
            scanf("%ld",&n);
            del(n);
            break;
        default:printf("输入错误,请重新输入!");
            scanf("%d",&i);
            continue;
        }
        printf("继续:输入 a     退出:输入 b\n");
        scanf("%c",&k);
    }while(k=='a'||(i!=1&&i!=2&&i!=3&&i!=4));
    return 0;
}
void input()
{
    FILE *fp;
    int n,i;
    printf("请输入学生的人数:");
    scanf("%d",&n);
    printf("请依次输入学生的学号、姓名、性别、年龄、电话、地址\n");
    if((fp=fopen("c:\\学生.dat","wb"))==NULL)
    {
        printf("文件打开失败!");
        exit(-1);
    }
    for(i=1;i<=n;i++)
    {
        scanf("%ld%s%s%d%s%s",&stdl.num,stdl.name,stdl.sex,&stdl.age,stdl.phone,stdl.adr);
        fwrite(&stdl,sizeof(struct std),1,fp);
    }
    fclose(fp);
}
void search(long numl)
{
    build p=&stdl;
    FILE *pp;
    if((pp=fopen("c:\\学生.dat","rb"))==NULL)
    {
        printf("文件打开失败!");
        exit(-1);
    }
    fread(p,sizeof(str),1,pp);
    while(p->num!=numl)
    {
        fread(p,sizeof(str),1,pp);
    }
    printf("查找的学生资料如下:");
    printf("学号:%ld\n姓名:%s\n性别:%s\n年龄:%d\n电话:%s\n住址:%s\n",p->num,p->name,p->sex,p->age,p->phone,p->adr);
    fclose(pp);
}
void insert(int i)
{
    int n,m,j;
    FILE *f,*ff;
    str stdd[N];
    build s=stdd;
    printf("请输入原来学生总人数和要插入的新学生的人数:");
    scanf("%d%d",&n,&m);
    if((f=fopen("c:\\学生.dat","rb"))==NULL)
    {
        printf("文件打开失败!");
        exit(-1);
    }
    if((ff=fopen("c:\\学生副本.dat","wb"))==NULL)
    {
        printf("文件打开失败!");
        exit(-1);
    }
    fseek(f,i,0);
    if(n!=i)
    {
        fread(s,sizeof(str),(n-i),f);
        fwrite(s,sizeof(str),(n-i),ff);
        rewind(f);
        rewind(ff);
        fseek(f,i,0);
        for(j=1;j<=m;j++)
        {
            printf("请输入新学生的数据:(学号,姓名,性别,年龄,电话,住址)\n");
            scanf("%ld%s%s%d%s%s",&stdd[N-1].num,stdd[N-1].name,stdd[N-1].sex,&stdd[N-1].age,stdd[N-1].phone,stdd[N-1].adr);
            fwrite(stdd+N-1,sizeof(str),1,f);
        }
        fread(s,sizeof(str),(n-i),ff);
        fwrite(s,sizeof(str),(n-i),f);
    }
    else
    {
        for(j=1;j<=m;j++)
        {
            printf("请输入新学生的数据:(学号,姓名,性别,年龄,电话,住址)\n");
            scanf("%ld%s%s%d%s%s",&stdd[N-1].num,stdd[N-1].name,stdd[N-1].sex,&stdd[N-1].age,stdd[N-1].phone,stdd[N-1].adr);
            fwrite(stdd+N-1,sizeof(str),1,f);
        }
    }
    print();
    fclose(f);
    fclose(ff);
}
void del(long numd)
{
    int i=1,n;
    build p=&stdl;
    str stdd[N];
    FILE *pp;
    if((pp=fopen("c:\\学生.dat","rb"))==NULL)
    {
        printf("文件打开失败!");
        exit(-1);
    }
    printf("请输入原来学生的总人数:\n");
    scanf("%d",&n);
    fread(p,sizeof(str),1,pp);
    while(p->num!=numd)
    {
        fread(p,sizeof(str),1,pp);
        i++;
    }
    fread(stdd,sizeof(str),(n-i),pp);
    rewind(pp);
    fseek(pp,i-1,0);
    fwrite(stdd,sizeof(str),(n-i),pp);
    printf("删除后的数据如下:\n");
    print();
}
void print()
{
    FILE *fp;
    str stdd;
    if((fp=fopen("c:\\学生.dat","rb"))==NULL)
    {
        printf("文件打开失败!");
        exit(-1);
    }
    while(!feof(fp))
    {
        fread(&stdd,sizeof(str),1,fp);
        printf("%ld,%s,%s,%d,%s,%s\n",stdd.num,stdd.name,stdd.sex,stdd.age,stdd.phone,stdd.adr);
    }
}

[ 本帖最后由 上官羽陵 于 2013-4-18 22:53 编辑 ]
搜索更多相关主题的帖子: 信息 应用程序 结构体 
2013-04-11 14:26
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:7 
不用你感激,这个论坛有良知的人都不会帮你做作业的

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-04-11 14:35
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:7 
haha

DO IT YOURSELF !
2013-04-11 14:48
吃肉无罪
Rank: 2
等 级:论坛游民
帖 子:7
专家分:30
注 册:2013-4-10
收藏
得分:7 
呵呵。你还是自己快点去写吧
2013-04-11 14:55
快速回复:一道c语言文件题
数据加载中...
 
   



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

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