C语言标准化选择题考试系统源代码

#include
#include
#include
#include
int flag=0;/*全局变量以实现全过程中识别不同的登陆身份*/
struct shiti/*定义结构体变量以存放试题库数据*/
{
int num;
char timu[100];
char da[50];
char db[50];
char dc[50];
char dd[50];
char zd[4];
}st[200];
int load()/*加载数目函数*/
{
FILE *fp;
int i;
if((fp=fopen("shitiku.dat","rb"))==NULL)
{
printf("\n打开文件出错\n");
}
for(i=0;!feof(fp);i++)
fread(&st[i],sizeof(struct shiti),1,fp);
fclose(fp);
return(i-1);
}
void putsall()/*显示所有记录的函数*/
{
int load();
FILE *fp;
int n,i;
n=load();
fp=fopen("shitiku.dat","rb");
for(i=0;i{ fread(&st[i],sizeof(struct shiti),1,fp);
printf("题目【%d】:%s\n【A】:%s\n【B】:%s\n【C】:%s\n【D】:%s\n【正确答案】%s\n",st[i].num,st[i].timu,st[i].da,st[i].db,st[i].dc,st[i].dd,st[i].zd);

}
fclose(fp);

}
void xianshijilu(int i)/*显示一条记录的函数*/
{
printf("题目【%d】:%s\n【A】:%s\n【B】:%s\n【C】:%s\n【D】:%s\n",st[i].num,st[i].timu,st[i].da,st[i].db,st[i].dc,st[i].dd);

}


void xuanti()/*选题并做题和系统判卷的函数*/
{
void guanli();
void add();
void xianshijilu(int i);
int load();
int n,f,i,k,c;
char ch[4];
FILE *fp;
f=load();
if(f==0)
{
printf("\n\t\t目前试题库中无试题\n\t\t【1】添加。\n\t\t【2】退出\n");
scanf("%d",&c);
if(c==1)add();
else exit(0);
}
printf("\n您要选择[?]道题(请务必小于试题库中的题目数量--目前只有%d道)",f);
scanf("%d",&n);
system("cls");
fp=fopen("shitiku.dat","ab+");
for(i=0;i{
fread(&st[i],sizeof(struct shiti),1,fp);
xianshijilu(i);
printf("请选择您第%d题的答案:",i+1);
scanf("%s",ch);
if(strcmp(ch,st[i].zd)==0)
printf("恭喜您答对了!");
else printf("很明显你答错了!");

}
printf("\n\t\t【1】继续做题\n\t\t【2】回主菜单以登录管理试题库\n");
scanf("%d",&k);
system("cls");
switch(k)
{
case 1:xuanti();break;
case 2:guanli();break;
default:printf("退出?");

}
fclose(fp);
}


void add() /*添加试题函数*/
{
void zhucaidan();
void guanli();
int i,n,k,j;
FILE *fp;
n=load();
if(flag==0)
{
printf("您不是教师不能添加试题!\n");
printf("\n正要返回主菜单………………………………………………………………\n");
zhucaidan();
}
a: printf("\n\t\t目前试题库中有【%d】道题目\n",n);
if((fp=fopen("shitiku.dat","ab"))==NULL)printf("\n打开文件出错\n");
i=n+1;
printf("请输入第%d道题目信息:",i);
printf("【序号】:");scanf("%d",&st[i].num);
for(j=0;j<=n;j++)
{
if(st[i].num==st[j].num||st[i].num==0)
{printf("不能输入0序号的题目已或已有此题号的题目

了请重新添加!\n");
goto a;}

}
printf("【题目】:");scanf("%s",st[i].timu);
printf("【答案A】:");scanf("%s",st[i].da);
printf("【答案B】:");scanf("%s",st[i].db);
printf("【答案C】:");scanf("%s",st[i].dc);
printf("【答案D】:");scanf("%s",st[i].dd);
printf("【正确答案是:】:");scanf("%s",st[i].zd);printf("\n");
printf("您的输入是:【题目】:%s\n【答案A】:%s\n【答案B】:%s\n【答案C】:%s\n【答案D】:%s\n【正确答案是:】:%s\n",st[i].timu,st[i].da,st[i].db,st[i].dc,st[i].dd,st[i].zd);

if(fwrite(&st[i],sizeof(struct shiti),1,fp)==1)
printf("保存成功!\n");
fclose(fp);
printf("\t【1】继续添加\n\t【2】返回管理主页\n\t【3】退出\n");
scanf("%d",&k);
system("cls");
switch(k)
{
case 1:add();break;
case 2:guanli();break;
case 3:printf("退出?");

}

}
void modify()/*修改试题的函数*/
{
void guanli();
int a,i,n,m,h,flag2=0;FILE *fp;static d;
W: putsall();
n=load();
printf("\n\t\t请输入您要修改的题目序号:\n");
fp=fopen("shitiku.dat","rb+");
scanf("%d",&a);
for(i=0;i{
if(a==st[i].num)
{
xianshijilu(i);
printf("\n【正确答案】:%s",st[i].zd);
d=i;
flag2=1;break;
}
else flag2=0;
}
if(flag2==1)
{
Q:
printf("\n\t\t请输入要修改的项目:\n\n");
printf("\t\t【1】题目\n");
printf("\t\t【2】A选项\n");
printf("\t\t【3】B选项\n");
printf("\t\t【4】C选项\n");
printf("\t\t【5】D选项\n");
printf("\t\t【6】正确答案\n");
fread(&st[d],sizeof(struct shiti),1,fp);
scanf("%d",&m);printf("测试出错地方语句%d",d);
st[d].num=d;
if(m==1)
{
printf("请输入修改后的题目:\n");
scanf("%s",st[d].timu);


}
else if(m==2)
{
printf("请输入修改后的A选项:\n");
scanf("%s",st[d].da);

}

else if(m==3)
{
printf("请输入修改后的B选项:\n");
scanf("%s",st[d].db);
}
else if(m==4)
{
printf("请输入修改后的C选项:\n");
scanf("%s",st[d].dc);
}
else if(m==5)
{
printf("请输入修改后的D选项:\n");
scanf("%s",st[d].dd);
}
else if(m==6)
{
printf("请输入修改后的正确答案:\n");
scanf("%s",st[d].zd);
}

fclose(fp);
fp=fopen("shitiku.dat","wb");
for(i=0;ifwrite(&st[i],sizeof(struct shiti),1,fp);
fclose(fp);
printf("\n修改成功!\n");
printf("\n\t\t【1】继续修改本题\n\t\t【2】修改其他题目\n\t\t【3】返回管理主菜单\n\t\t【4】去做题\n\t\t");
scanf("%d",&h);
system("cls");
switch(h)
{case 1:goto Q;break;
case 2:goto W;break;
case 3:guanli();break;
case 4:xuanti();break;
}
}
else
{

printf("\n\t\t无此序号的题目!\n\t\t正在返回管理界面………………………\n");
guanli();
}
}
void del()/*删除试题的函数*/
{
void guanli();
int a,n,i,k,j,c,ch;FILE *fp;FILE *fp1;int flag1=0;
n=load();
if(n==0)/*n=0的情况*/
{
printf("\n\t\t目前试题库中无试题\n\t\t【1】添加。\n\t\t【2】退出\n");
scanf("%d",&c);
if(c==1&&flag==1)add();
else if(c==1&&flag==0)printf("您不是教师不能添加试题!");
else exit(0);
}
else if(n==1)/*n=1的情况*/
{
putsall();
printf("\n\t\t只有一道题目按任意【数字键】删除\n\t\t【其他键】回到主菜单\n");
scanf("%d",&ch);
if(ch>=0&&ch<=9)
{
fp=fopen("shitiku.dat","w");
fclose(fp);
fp=fopen("shitiku.dat","rb+");
fclose(fp);
printf("\n\t\t删除操作成功\n\t正在重新回到主菜单………………………\n");
zhucaidan();
}
else
{
printf("\n\t\t删除操作成功\n\t正在重新回到主菜单………………………\n");
system("cls");
zhucaidan();
}

}
else/*n=0的情况以下全部是此情况下的代码*/
{
putsall();
printf("\n\t请输入您要删除的题序号(谨慎操作不可恢复):\n");
scanf("%d",&a);
fp=fopen("shitiku.dat","rb");
for(i=0;i{ if(a==st[i].num)
{ flag1=1;
break;}
}
if(flag1==0)
{
printf("\n\t无此题号的题目正在重新回到主菜单………………………\n");
guanli();
}
fclose(fp);

if(flag1==1)
{ fp=fopen("shitiku.dat","rb+");
if(a==st[n-1].num)
{
for(j=0;j{
st[j].num=st[j].num;
strcpy(st[j].timu,st[j].timu);
strcpy(st[j].da,st[j].da);
strcpy(st[j].db,st[j].db);
strcpy(st[j].dc,st[j].dc);
strcpy(st[j].dd,st[j].dd);
strcpy(st[j].zd,st[j].zd);
} fclose(fp);
fp1=fopen("shitiku.dat","wb");
for(i=0;ifwrite(&st[i],sizeof(struct shiti),1,fp1);
fclose(fp1);
fp1=fopen("shitiku.dat","rb+");
fclose(fp1);
puts("\n删除操作成功!\n接下来您可以:\n");
printf("\t\t【1】继续删除试题\n\t\t【2】回主菜单\n\t\t【3】做题\n");
scanf("%d",&k);
system("cls");
switch(k)
{
case 1:del();break;
case 2:guanli();break;
case 3: xuanti();break;
}

}
else
{
for(i=0;i{
if(a==st[i].num)

{ k=i;
for(j=k;j{
st[j].num=st[j+1].num;
strcpy(st[j].timu,st[j+1].timu);
strcpy(st[j].da,st[j+1].da);
strcpy(st[j].db,st[j+1].db);
strcpy(st[j].dc,st[j+1].dc);
strcpy(st[j].dd,st[j+1].dd);
strcpy(st[j].zd,st[j+1].zd);
}

fclose(fp);
fp1=fopen("shitiku.dat","wb");
for(i=0;ifwrite(&st[i],sizeof(struct shiti),1,fp1);

fclose(fp1);
puts("\n删除操作成功!\n接下来您可以:\n");
printf("\t\t【1】继续删除试题\n\t\t【2】回主菜单\n\t\t【3】做题\n");
scanf("%d",&k);
system("cls");
switch(k)
{
case 1:del();break;
case 2:guanli();break;
case 3: xuanti();break;
}
}/*if语句的括号*/


}/*for循环的括号*/

}/*else的括号*/
}/*if(flag1==1)的括号*/
}/*整个else(n不等于0跟1的情况)的括号*/
}/*整个删除数据函数的括号*/
/***********************************管理试题库的主菜单*******************************************/
void guanli()
{
int n;
printf("\t\t请选择操作\n【1】:增加【2】:删除【3】修改");
scanf("%d",&n);
switch(n)
{case 1:add();break;
case 2:del();break;
case 3:modify();break;
default:exit(0);
}
}
/***********************************管理试题库的主菜单*******************************************/

void xueshengcaidan()
{
flag=0;
printf("\t\t祝您做题做的愉快!\n");

xuanti();

}
void laoshicaidan()
{
void zhucaidan();
int ch2;char str[10],str1[10]="123";
printf("您是教师请输入密码:");
scanf("%s",str);
system("cls");
if (strcmp(str,str1)==0)

{
flag=1;
printf("\t\t密码正确!\n您可以\n\t\t【1】:管理试题库。\n\t\t【2】:做题并查看质量和修改。\n\t\t【3】: 退出(任意键)\n");
scanf("%d",&ch2);
switch(ch2)
{ case 1:guanli();break;
case 2:xuanti();break;
default:exit(0);
}
}
else {printf("密码错误!正在返回主菜单.............................................");
system("cls");
zhucaidan() ;}
}


/*************************************主菜单**********************************************/
void zhucaidan()
{
int c;
printf("\t\t欢迎使用标准化选择题考试系统,请登录:\n\n");
printf("\t\t学生请按【1】,教师请按【2】并输入密码:\n\t\t");
scanf("%d",&c);
system("cls");
switch(c)
{case 1:xueshengcaidan();break;
case 2:laoshicaidan();break;
default:exit(0);
}

}
/*************************************主菜单**********************************************/

void main()/*主函数*/
{
zhucaidan();
}

相关文档
最新文档