各位大侠,求解,请问下面当中fwrite,fread该怎样用?PS:单项选择题判断系统,我老是通过不,快交作业了,麻烦各位帮我看看,谢谢了!
程序代码:#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#define NULL 0
#define ARRAY_SIZE 100
typedef struct question
{
char tm[500];
char op1[50],op2[50],op3[50],op4[50];
char as;
}QS;
int menu_a() //菜单模块1
{
int op;
printf("\t\t欢迎进入单项选择题标准化考试系统\n");
printf("\t\t目前题库为空,请按照以下提示操作...\n");
printf("\t\t1.手动录入试题\n);
printf("\t\t2.载入试题\n");
printf("\t\t请选择。。。。");
scanf("%d",&op);
if(op<1||op>2)
{
printf(" 输入数据有误,请重新输入\n");
return 0;
}
else return op;
}
int menu_b() //菜单模块2
{
int op;
printf(" **********************主菜单**********************\n");
printf(" 1、进入答题系统\n");
printf(" 2、用文件保存试题\n");
printf(" 3、插入试题\n");
printf(" 4、展示试卷\n");
printf(" 5、退出\n");
printf(" **************************************************\n");
printf(" 请选择....\n");
scanf("%d",&op);
if(op<1||op>6)
{
printf(" 输入数据有误,请重新输入\n");
return 0;
}
else return op;
}
int file_answer(QS *f,int N) //答题模块,返回 成绩
{
int i,score=0,no;
char r;
for(i=0;i<N;i++)
{
no=rand()%N; //抽取试题编号。待解决问题:抽到重复的试题?
printf("\t\t%s%s%s%s%s\n",f[no].tm,f[no].op1,f[no].op2,f[no].op3,f[i].op4);
printf("\t\t请输入正确答案:\n");
scanf("%c",&r);getchar();
if(r==f[no].as)
{
printf("\t\t答案正确\n");
score++;
}
else printf("\t\t答案错误\n");
printf("\t\t你的总成绩为:%d\n",score);
}
}
void file_save(QS *f,int n)
{
FILE *fp;
int i=0;
char filename[50];
printf(" 请输入保存文件地址: 如:E:\\abc.txt\n");
scanf("%s",filename);
fp=fopen("filename","w+");
if(fp==NULL)
{
printf(" 文件保存失败,请重新输入\n");
exit(1); //exit(?)
}
while(i<n)
{
fwrite(fp,sizeof(QS),1,f); //fwrite
i++;
}
fclose(fp);
printf(" 文件成功保存在 %s 中\n",filename);
}
void file_in(QS *f,int n) //试题录入
{
int i;
for(i=0;i<n;i++)
{
printf(" ***************请按照提示录入******************\n"); //注意:如果题号重复怎么办?
printf(" 1、请输入试题题目\n");
gets(f[i].tm);
printf(" 2、请输入选项A:\n");
gets(f[i].op1);
printf(" 请输入选项B:\n");
gets(f[i].op2);
printf(" 请输入选项C:\n");
gets(f[i].op3);
printf(" 请输入选项D:\n");
gets(f[i].op4);
printf(" 请输入正确答案:\n");
scanf("%c",&f[i].as);
getschar();
}
}
void file_load()
{
FILE *fp;
int i=0;
char filename[50];
here: printf(" 请输试题库文件的地址: 如:E:\\abc.txt\n");
scanf("%s",filename);
fp=fopen("filename","r+");
if((fp)==NULL)
{
printf("\t\t地址无效,请重新输入");
goto here;
}
else
while(!feof(fp)) //判断文件是否结束
{
fread(&f[i],sizeof(QS),1,fp); //fread
i++;
}
}
void file_out(QS *f,int i)
{
printf("\t\t题号:%d\n",n);
printf("\t\t题目:%s\n",f[i].tm);
printf("\t\tA.%s\n",f[i].op1);
printf("\t\tB.%s\n",f[i].op2);
printf("\t\tC.%s\n",f[i].op3);
printf("\t\tD.%s\n",f[i].op4);
}
void file_insert(QS *f,int n)
{
if(n>ARRAY_SIZE) printf("\t\t输入错误!\n");
else
{
printf("\t\t请根据提示输入:\n");
printf("\t\t请输入题目:\n");
gets(f[n].tm);
printf("\t\t请输入选项A:\n");
gets(f[n].op1);
printf("\t\t请输入选项B:\n");
gets(f[n].op2);
printf("\t\t请输入选项C:\n");
gets(f[n].op3);
printf("\t\t请输入选项D:\n");
gets(f[n].op4);
printf("\t\t请输入正确答案!\n");
scanf("%c",&f[n].as);
getchar();
}
}
void main()
{
int n=0,N,i,max,pos;
char flag;
QS f[ARRAY_SIZE];
switch(menu_a()) //菜单A
{
case 1:printf("\t\t请输入需要建立的题目个数:\n");
scanf("%d",&max);
getchar();
file_in(f,max);break;
case 2:file_load();break;
}
while(1)
{
switch(menu_b()) //菜单B
{
case 1:system("cls");
printf("\t\t请输入您想要的题目个数N:");
scanf("%d",&N);
getchar();
file_answer(f,N);break;
case 2:printf("\t\t需保存的题数目:");
scanf("%d",n);
getchar();
file_save(f,n);break;
case 3:printf("\t\t请输入您要插入试题的题号");
scanf("%d",&n);
getchar();
for(i=max;i>=n;i--)
{
f[i]=f[i-1];
}
pos=i-1;
file_in(f,pos);break; //功能未完成
case 4:system("cls");
for(i=0;i<N;i++)
{
file_out(f,i);
printf("\n");
}break;
case 5:printf("\t\t您确认退出系统(Y/N)?");
scanf("%s",&flag);
if(flag=='y'||flag=='Y') return 0;
else return 1;
default:printf("\t\t请正确选择!");
}
}
}[ 本帖最后由 cnsongzi 于 2011-2-15 00:30 编辑 ]






