各位大侠,求解,请问下面当中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 编辑 ]