一道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 编辑 ]