当前位置: 代码迷 >> C语言 >> [求助]文件操作!
  详细解决方案

[求助]文件操作!

热度:326   发布时间:2005-07-27 11:33:00.0
[求助]文件操作!

我想编一个学生数据表,能够进行文件操作(追加记录之用),编译时,不稳定。请高人指点。

要求:

1、记录学生的学号、姓名、性别、成绩。

2、能够追加记录

3、可以查看

4、按成绩排序。

思路以下:

主菜单(main()):录入数据请按1(writein())(数据文件G\DATA

查看数据请按2(fine())

排序请按3(taxis())

退出请按其它键!

另外建立一个文件G:\NOTE用于记录学生的记录数(学生人数)用了两个函数:录入完毕时写记录数和记录开始时读记录数。

问题:1、如何初始化读记录数函数N。初始用feof函数判断是否有记录数,但返回值始终是0,后自己测验后为-1,故不用函数而直接用-1

2、设计自动生成序列数作为学号,付值不到!

3、如何将性别记为枚举数和共同体?

问题之处用蓝色色标出,请高人指点指点小弟。

#include"stdio.h"

#include"conio.h"

struct stu

{char num[2];

char name[10];

char sex[2];(如何将性别记为枚举类和共同体?)

int score;

}ina[10];

FILE *np,*fp;

main()

{char a;/*主界面*/

void taxis();

void writein();

void find();

void noten(int a);

int readn();

clrscr();

printf("录入数据请按1\n\n查看数据请按2\n\n排序请按3\n\n退出请按其它键!\n");

a=getch();

putchar(a);

switch(a)

{case '3': taxis();break;

case '1': writein();break;

case '2': find();break;

default: exit();}

}

void noten(int a)/*写记录个数存放在n*/

{int n;

n=a;

np=fopen("g:\NOTE","w");

/*if(np==NULL)

printf("无法创建军记录数N");*/

fputc(n,np);

printf("记录时n=%d",n);

getch();

fclose(np);

}

int readn()/*读记录个数存放在n*/

{int n;

np=fopen("g:\\NOTE","r");

n=(int)(fgetc(np));

if(n==-1)n=0;

printf("读取时n=%d",n);/*调试用*/

getch();

fclose(np);

return n;

}

void writein()/*录入数据*/

{int i,n,m,p,q;

char a;

n=readn();

a=getch();

if(a==9)exit(0);

clrscr();

printf("\n开始录入学生资料。完成录入请按“Tab”键。\n");

m=n;

do

{printf("学号:%d",n+1);

ain[n]=n+1;(付值不了,编译错误!!)

printf("\t姓名:");

scanf("%s",&ina[n].name);

printf("\t性别:");

scanf("%s",&ina[n].sex);

printf("\t成绩:");

scanf("%d",&ina[n].score);

n++;

a=getch();

}while(a!=9);

fp=fopen("g:\\DATA","at+");

for(i=m+1;i<n;i++,m++)

fwrite(&ina[i],sizeof(struct stu),1,fp);

fclose(fp);

noten(n);

main();

}

void find()/*浏览数据*/

{int n,i;

clrscr();

fp=fopen("g:\\DATA","r");

n=readn();

fread(ina,sizeof(struct stu),n,fp);

for(i=0;i<n;i++)

printf("\n学号:%s\t姓名:%s\t性别:%s\t成绩:%d\n",ina[i].num,ina[i].name,ina[i].sex,ina[i].score);

fclose(fp);

printf("\n按任意键返回上一层.");

getch();

main();

}

void taxis()

{int i,j,n,a[10],b[10],m;

clrscr();

printf("按成绩排序得。\n");

np=fopen("g:\\NOTE","r");

if(np==NULL)printf("无法读取记录数N");

n=fgetc(np);

fclose(np);

fp=fopen("g:\data","r");

fread(ina,sizeof(struct stu),n,fp);

fclose(fp);

for(i=0;i<n;i++)

b[i]=ina[i].score;

for(i=0;i<n;i++)

a[i]=i;

for(i=0;i<n-1;i++)

{for(j=i+1;j<n;j++)

{if(b[i]<b[j])

{m=b[i];

b[i]=b[j];

b[j]=m;

m=a[i];

a[i]=a[j];

a[j]=m;}}

}

for(j=0;j<n;j++)

{i=a[j];

printf("学号:%s\t姓名:%s\t性别:%s\t成绩:%d\n",ina[i].num,ina[i].name,ina[i].sex,ina[i].score);

}

printf("按任意键返回主菜单。");

getch();

main();

}

搜索更多相关的解决方案: 文件  

----------------解决方案--------------------------------------------------------
  相关解决方案