fwrite(&Testquestions[i],sizeof(TestNode),1,fp);
fclose(fp);
returnTRUE;
FILE*fp;
inti=0;
if((fp=fopen("shiti.txt","rb"))==NULL)returnERROR;
while(!
feof(fp))
{fread(&Testquestions[i],sizeof(TestNode),1,fp);
i++;
}
N=i-1;
returnTRUE;
}
添加试题
StatusInsertNode(int&N)
{
if(N>MAX)returnERROR;
printf("请输入所要插入题题目、题干和选项:
\n");
printf("请输入题目:
");
gets(Testquestions[N].subject);
printf("请输入选项A:
");
gets(Testquestions[N].option1);
printf("请输入选项B:
");
gets(Testquestions[N].option2);
printf("请输入选项C:
");
gets(Testquestions[N].option3);
printf("请输入选项D:
");
gets(Testquestions[N].option4);
printf("请输入答案:
");
scanf("%c",&Testquestions[N].result);
getchar();
N++;
returnTRUE;
}
修改试题
StatusChangeNode(inty)
{
printf("(%d)",y);
printf("%s\n",Testquestions[y-1].subject);
printf("A%s",Testquestions[y-1].option1);
printf("B%s\n",Testquestions[y-1].option2);
printf("C%s",Testquestions[y-1].option3);
printf("D%s",Testquestions[y-1].option4);
printf("\n");
printf("请输入修改后的题目:
\n");getchar();
gets(Testquestions2[y].subject);
printf("请输入修改后的选项A:
");
gets(Testquestions2[y].option1);
printf("请输入修改后的选项B:
");
gets(Testquestions2[y].option2);
printf("请输入修改后的选项C:
");
gets(Testquestions2[y].option3);
printf("请输入修改后的选项D:
");
gets(Testquestions2[y].option4);
printf("请输入修改后的答案:
");
scanf("%c",&Testquestions2[y].result);getchar();
strcpy(Testquestions[y-1].subject,Testquestions2[y].subject);
strcpy(Testquestions[y-1].option1,Testquestions2[y].option1);
strcpy(Testquestions[y-1].option2,Testquestions2[y].option2);
strcpy(Testquestions[y-1].option3,Testquestions2[y].option3);
strcpy(Testquestions[y-1].option4,Testquestions2[y].option4);
Testquestions[y-1].result=Testquestions2[y].result;
returnTRUE;
}
删除试题
StatusDeleteNode(intx,intN)
{
system("cls");
inti;
for(i=x;i<=N;i++){
strcpy(Testquestions[i].subject,Testquestions[i+1].subject);
strcpy(Testquestions[i].option1,Testquestions[i+1].option1);
strcpy(Testquestions[i].option2,Testquestions[i+1].option2);
strcpy(Testquestions[i].option3,Testquestions[i+1].option3);
strcpy(Testquestions[i].option4,Testquestions[i+1].option4);
}
returnTRUE;
system("cls");
}
输出界面
voidprintNode(TestNodep,intn)
{
printf("(%d)",n);
printf("%s\n",p.subject);
printf("A%s",p.option1);
printf("B%s\n",p.option2);
printf("C%s",p.option3);
printf("D%s",p.option4);
}
voidprintNode2(TestNodep,intn)
{
printf("(%d)",n);
printf("%s\n",p.subject);
printf("A%s",p.option1);
printf("B%s\n",p.option2);
printf("C%s",p.option3);
printf("D%s",p.option4);
printf("%s",&p.result);
}
答题界面
voidanswer(intsum)
{
inti,score=0,Num;
charr;
srand((int)time(0));
for(i=1;i<=sum;i++)
{Num=rand()%19+1;
printNode(Testquestions[Num],Num+1);
printf("\n请输入答案:
");
scanf("%s",&r);getchar();
if(Match(Testquestions[Num],r))
{
printf("\n答案正确!
\n");
score++;
}
elseprintf("\n答案错误!
\n");
}
printf("\n你的总成绩为:
%d\n",score);
}
密码进入
intmm(intb)
{
inta=1748,i,c;
do{
for(i=1;i<=3;i++){
printf("Pleaseenterpassword:
");
scanf("%d",&b);
if(b==a){
c=1;
break;}
printf("Error\n");}
}while(i==4);
returnc;
}
教师界面
voidteacher(){
intchose2,i;//,N
charflag='N';
system("cls");
printf("\n\t\t*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~\n");
printf("\t\t\t1插入试题内容\n");
printf("\t\t\t2显示试卷内容\n");
printf("\t\t\t3修改试题\n");
printf("\t\t\t4删除试题\n");
printf("\t\t\t0返回上一界面\n");
printf("\t\t\t请选择:
");
printf("\n\t\t*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~\n");
scanf("%d",&chose2);getchar();
while(!
0){
system("cls");
switch(chose2)
{case1:
system("cls");
InsertNode(N);
if(SaveNode(N))printf("保存成功!
\n");
elseprintf("保存失败!
\n");
break;
case2:
system("cls");
for(i=1;i<=N;i++){
printNode2(Testquestions[i-1],i);
printf("\n");}
break;
case3:
system("cls");
inty;
printf("输入想要修改的题号:
\t\n");
scanf("%d",&y);
ChangeNode(y);
printf("修改成功\n");
if(SaveNode(N))printf("保存成功!
\n");
elseprintf("保存失败!
\n");
break;
case4:
system("cls");
intx;
printf("输入想要删除的题号:
\t\n");
scanf("%d",&x);
DeleteNode(x,N);
printf("删除成功!
\t\n");
if(SaveNode(N))printf("保存成功!
\n");
elseprintf("保存失败!
\n");
N=N-1;
break;
case0:
exit(0);
}
printf("\n\t\t*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~\n");
printf("\t\t\t1插入试题内容\n");
printf("\t\t\t2显示试卷内容\n");
printf("\t\t\t3修改试题\n");
printf("\t\t\t4删除试题\n");
printf("\t\t\t0返回上一界面\n");
printf("\t\t\t请选择:
");
printf("\n\t\t*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~\n");
scanf("%d",&chose2);getchar();
system("cls");
if(chose2==0)break;
}
}
主函数
voidmain()
{charflag='N';
intb,m;
intmm(intb);
ReadNode(N);
while(flag=='N'||flag=='n')
{
printf("\n\t\t*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*\n");
printf("\t\t\t单项选择题标准化考试系统\n");
printf("\n");
printf("\t\t\t1学生端\n");
printf("\t\t\t2教师端\n");
printf("\t\t\t3退出系统\n");
printf("\t\t\t请选择:
");
printf("\n\t\t*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*\n");
scanf("%d",&chose1);
switch(chose1)
{
case1:
system("cls");
printf("请输入你想要的答题数目:
");
scanf("%d",&sum);
answer(sum);
break;
case2:
system("cls");
m=mm(b);
if(m==1){
printf("Right\n");
teacher();}
else
{
printf("Wrong\n");
exit(0);
}
break;
case3:
printf("你将退出系统(YorN)?
");
scanf("%c",&flag);getchar();
if(flag=='Y'||flag=='y')exit(0);
system("cls");
break;
}
}
}
4调试分析
1、试题的插入在运行程序时无法实现,后来通过数组实现。
2、题号与程序中的序号不一致,导致答案出错,调试后,正确。
5测试结果
主界面
教师显示界面
学生界面
答题界面
添加界面
删除界面
6课程心得总结
1、进过这两天的编程实践,我发觉到了我在这方面的严重不足,有待提高之处还有很多。
2、虽然感到了编程的吃力,但经过这两天的努力,感觉还是有了一定的提高,更重要的是找到了编程序的乐趣。
3、编程需要心思缜密,艰苦耐劳。
附录:
源程序
#include
#include
#include
#include
#include
#defineTRUE1
#defineERROR0
#defineMAX30
typedefintStatus;
typedefstruct{
charoption1[30],option2[30],option3[30],option4[30],subject[150];
charresult;
}TestNode;
TestNodeTestquestions[MAX];
TestNodeTestquestions2[MAX];
intN=0,sum,score=0,chose1;
StatusSaveNode(intN)
{inti;
FILE*fp;
if((fp=fopen("shiti.txt","wb"))==NULL)returnERROR;
for(i=0;ifwrite(&Testquestions[i],sizeof(TestNode),1,fp);
fclose(fp);
returnTRUE;
}
StatusReadNode(int&N)
{FILE*fp;
inti=0;
if((fp=fopen("shiti.txt","rb"))==NULL)returnERROR;
while(!
feof(fp))
{fread(&Testquestions[i],sizeof(TestNode),1,fp);
i++;
}
N=i-1;
returnTRUE;
}
StatusInsertNode(int&N)
{
if(N>MAX)returnERROR;
printf("请输入所要插入题题目、题干和选项:
\n");
printf("请输入题目:
");
gets(Testquestions[N].subject);
printf("请输入选项A:
");
gets(Testquestions[N].option1);
printf("请输入选项B:
");
gets(Testquestions[N].option2);
printf("请输入选项C:
");
gets(Testquestions[N].option3);
printf("请输入选项D:
");
gets(Testquestions[N].option4);
printf("请输入答案:
");
scanf("%c",&Testquestions[N].result);
getchar();
N++;
returnTRUE;
}
StatusChangeNode(inty)
{
printf("(%d)",y);
printf("%s\n",Testquestions[y-1].subject);
printf("A%s",Testquestions[y-1].option1);
printf("B%s\n",Testquestions[y-1].option2);
printf("C%s",Testquestions[y-1].option3);
printf("D%s",Testquestions[y-1].option4);
printf("\n");
printf("请输入修改后的题目:
\n");getchar();
gets(Testquestions2[y].subject);
printf("请输入修改后的选项A:
");
gets(Testquestions2[y].option1);
printf("请输入修改后的选项B:
");
gets(Testquestions2[y].option2);
printf("请输入修改后的选项C:
");
gets(Testquestions2[y].option3);
printf("请输入修改后的选项D:
");
gets(Testquestions2[y].option4);
printf("请输入修改后的答案:
");
scanf("%c",&Testquestions2[y].result);getchar();
strcpy(Testquestions[y-1].subject,Testquestions2[y].subject);
strcpy(Testquestions[y-1].option1,Testquestions2[y].option1);
strcpy(Testquestions[y-1].option2,Testquestions2[y].option2);
strcpy(Testquestions[y-1].option3,Testquestions2[y].option3);
strcpy(Testquestions[y-1]