Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2349128
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:08:51

我想编一个学生数据表,能够进行文件操作(追加记录之用),编译时,不稳定。请高人指点。
要求:
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;ifwrite(&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;iprintf("\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;ib[i]=ina[i].score;
for(i=0;ia[i]=i;
for(i=0;i {for(j=i+1;j  {if(b[i]     {m=b[i];
     b[i]=b[j];
     b[j]=m;
     m=a[i];
     a[i]=a[j];
     a[j]=m;}}
  }
for(j=0;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();
}


--------------------next---------------------

阅读(1441) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~