试卷管理
老师在教学过程中,会经常以试卷的形式来检验学生的学习情况。先由你来 帮助老师设计一个系统。该系统中只有 2 种题型:单项选择题、填空题。其中 单项选择题:题目编号、题目、选项 A、选项 B、选项 C、选项 D、答案 填空题:题目编号、题目、答案 功能: 功能:试题添加、删除、修改、查询功能
(1)试题添加:向试题库追加写入一道新的题目,要求题目编号与已存题目 的编号不重复;所有内容不能为空;
(2)试题删除:通过题目编号进行题目的删除;
(3)删除全部题目;
(4)试题修改:通过题目编号修改指定的题目的内容;
(5)试题查询:通过题目编号查询指定的题目的所有内容;
(6)统计共有多少道题目;
(7)查询题目中含有某个特定内容(用户输入)的所有题目内容;
(8)自动随机生成由单项选择题、填空题合在一起的试卷及答案 2 个文件, 各题型的题目数由用户输入;
(9)以上功能要求通过菜单的方式进行操作;要求对相应内容进行必要的合 法性检查
主函数
#include <bits/stdc++.h>
using namespace std;
const int N = 1024;
const int N1 = 120;
int main()
{
int n;
int i,j;
printf(" -------------------试卷管理系统------------------\n");
printf(" -------------------------------------------------\n");
printf(" ------------**************************-----------\n");
printf(" -------------------1-试题添加--------------------\n");
printf(" -------------------2-试题删除--------------------\n");
printf(" -------------------3-删除全部--------------------\n");
printf(" -------------------4-试题查询--------------------\n");
printf(" -------------------5-统计题目--------------------\n");
printf(" -------------------6-查询特定--------------------\n");
printf(" -------------------7-生成试卷--------------------\n");
printf(" -------------------8-试题修改--------------------\n");
printf("\n");
printf("\n");
printf(" --------------->输入你想选择的操作<--------------\n");
printf(" --------------------------> <-------------------\n");
printf(" ---------------1-8-功能键--0-退出键--------------\n");
for(i = 0; i < 5; i ++)
{
printf(" -----------------------------------------------Q-Q\n");
}
while(scanf("%d",&n)&&n!=0)
{
if(n==1)
{
printf("**试题增加**\n");
printf("-- --\n");
printf("-- --\n");
printf("选,填,退出(1,2,0)\n");
int cc = 1;
int zc1;
scanf("%d",&zc1);
while(cc)
{
if(0<=zc1&&zc1<=2)
{
cc = 0;
printf("输入合法\n");
}
else
{
printf("请重新输入\n");
scanf("%d",&zc1);
}
}
if(zc1==0)
{
printf("正在退出\n");
printf("请重新选择功能\n");
printf("---> <----\n");
printf("请输入1-8是功能键,0是退出键\n");
for(i = 0; i < 5; i ++)
{
printf("-----------------------------------------------Q-Q\n\n");
}
continue;
}
else if(zc1==1)
{
printf("进入选择题填入模式\n");
printf("你想增加多少题目?\n");
FILE *fp;
fp = fopen("选择题.txt","a");
if(fp==NULL)
{
printf("无法打开文件");
exit(0);//退出文件
}
int wgg;
scanf("%d",&wgg);
for(i = 0; i < wgg;i ++)
{
printf("请你准备好输入题目\n");
char *th = NULL;
char *tm = NULL;
char *answer = NULL;
th = (char*)malloc(N1);
tm = (char*)malloc(N);
answer = (char*)malloc(N1);
printf("输入题号\n");
scanf("%s",th);
printf("输入题目\n");
scanf("%s",tm);
printf("输入answer\n");
scanf("%s",answer);
FILE *fp4,*fpzc;
fp4 = fopen("选择题题号.txt","a");
if(fp4==NULL)
{
printf("无法打开文件");
exit(0);//退出文件
}
fpzc = fopen("answer.txt","a");
if(fpzc==NULL)
{
printf("无法打开文件");
exit(0);//退出文件
}
fprintf(fp,"%s\n",tm);
fprintf(fp4,"%s\n",th);
fprintf(fpzc,"%s\n",answer);
fclose(fp4);
fclose(fpzc);
free(th);
free(tm);
free(answer);
}
fclose(fp);
printf("加题结束\n");
printf("请重新选择功能\n");
printf(" ---> <---\n");
printf("请输入1-8是功能键,0是退出键\n");
for(i = 0; i < 5; i ++)
{
printf("-----------------------------------------------Q-Q\n\n");
}
}
else
{
printf("进入填空题填入模式\n");
printf("你想增加多少题目?\n");
FILE *fp2;
fp2 = fopen("填空题.txt","a");
if(fp2==NULL)
{
printf("无法打开文件");
exit(0);//退出文件
}
int wgg1;
scanf("%d",&wgg1);
for(i = 0; i < wgg1;i ++)
{
printf("请你准备好输入题目\n");
char *th1 = NULL;
char *tm1 = NULL;
char *answer1 = NULL;
th1 = (char*)malloc(N1);
tm1 = (char*)malloc(N);
answer1 = (char*)malloc(N1);
printf("输入题号\n");
scanf("%s",th1);
printf("输入题目\n");
scanf("%s",tm1);
printf("输入answer\n");
scanf("%s",answer1);
FILE *fp3,*fpgg;
fp3 = fopen("填空题题号.txt","a");
if(fp3==NULL)
{
printf("无法打开文件");
exit(0);//退出文件
}
fpgg = fopen("answer1.txt","a");
if(fpgg==NULL)
{
printf("无法打开文件");
exit(0);//退出文件
}
fprintf(fp2,"%s\n",tm1);
fprintf(fp3,"%s\n",th1);
fprintf(fpgg,"%s\n",answer1);
fclose(fp3);
fclose(fpgg);
free(th1);
free(tm1);
free(answer1);
}
fclose(fp2);
printf("加题结束\n");
printf("请重新选择功能\n");
printf("---> <----\n");
printf("请输入1-8是功能键,0是退出键\n");
for(i = 0; i < 5; i ++)
{
printf("-----------------------------------------------Q-Q\n\n");
}
}
}
else if(n==5)
{
printf("**统计功能**\n");
printf("-- --\n");
printf("-- --\n");
int x1 = 0;
int x2 = 0;
char buf1[N];
char buf2[N];
int len1;
int len2;
FILE *fp10,*fp11;
fp10 = fopen("选择题题号.txt","r");
if(fp10==NULL)
{
printf("无法打开文件");
exit(0);//退出文件
}
printf("1\n");
while(fgets(buf1,N,fp10) != NULL )
{
x1++;
}
printf("1\n");
fp11 = fopen("填空题题号.txt","r");
if(fp11==NULL)
{
printf("无法打开文件");
exit(0);//退出文件
}
while(fgets(buf2,N,fp11) != NULL )
{
x2++;
}
printf("选择题%d 填空题 %d\n",x1,x2);
printf("总计%d\n",x1+x2);
printf("结束\n");
printf("请重新选择功能\n");
printf("---> <---\n");
printf("请输入1-8是功能键,0是退出键\n");
for(i = 0; i < 5; i ++)
{
printf("<-AVA->\n");
}
}
else if(n==2)
{
printf("**试题删除**\n");
printf("-- --\n");
printf("-- --\n");
int m;
printf("选择题.填空题( 1 or 2 )\n");
printf("输入‘0’退出\n");
scanf("%d",&m);
int mm=1;
while(mm)
{
if(m==1||m==2||m==0)
{
mm=0;
}
else
{
printf("》输入数据错误请重新输入《\n");
scanf("%d",&m);
}
}
if(m==0)
{
printf("正在退出\n");
printf("结束\n");
printf("请重新选择功能\n");
printf("---> <---\n");
printf("请输入1-8是功能键,0是退出键\n");
for(i = 0; i < 5; i ++)
{
printf("-----------------------------------------------Q-Q\n\n");
}
}
else if(m==1)
{
printf("选择题删除\n");
int ff;
printf("输入需要删除的题数\n");
scanf("%d",&ff);
for(i = 0; i < ff; i ++)
{
char tth[N1];
char ttm[N1];
char answer0[N1];
printf("输入题号\n");
scanf("%s",tth);
printf("输入题目\n");
scanf("%s",ttm);
printf("输入答案\n");
scanf("%s",answer0);
printf("调试中\n");
char edg[N];
char Rng[N];
char WE[N];
FILE *fpw,*fpa,*fpcz,*fp77,*fp78,*fpdd;
fpw = fopen("选择题.txt","r");
fpcz = fopen("选择题题号.txt","r");
fpdd = fopen("exchange1.txt","a");
fp77 = fopen("answer.txt","r");
fp78 = fopen("exchange2.txt","a");
fpa = fopen("exchange.txt","a");
if(fpw==NULL||fpa==NULL||fpcz==NULL||fp77==NULL||fp78==NULL||fpdd==NULL)
{
printf("open the file failure\n");
exit(0);
}
while(fgets(edg,N,fpw))
{
if(strcmp(edg,ttm)!=0)
{
fputs(edg,fpa);
}
}
while(fgets(Rng,N,fpcz))
{
if(strcmp(Rng,tth)!=0)
{
fputs(Rng,fpdd);
}
}
while(fgets(WE,N,fp77))
{
if(strcmp(WE,answer0)!=0)
{
fputs(WE,fp78);
}
}
fclose(fpa);
fclose(fpw);
fclose(fpcz);
fclose(fpdd);
fclose(fp77);
fclose(fp78);
remove("选择题.txt");
remove("选择题题号.txt");
remove("answer.txt");
rename("exchange.txt","选择题.txt");
rename("exchange1.txt","选择题题号.txt");
rename("exchange2.txt","answer.txt");
}
printf("请重新选择功能\n");
printf("---> <---\n");
printf("请输入1-8是功能键,0是退出键\n");
for(i = 0; i < 5; i ++)
{
printf("-----------------------------------------------Q-Q\n\n");
}
}
else
{
printf("填空题删除\n");
int ff;
printf("输入需要删除的题数\n");
scanf("%d",&ff);
for(i = 0; i < ff; i ++)
{
char tth[N1];
char ttm[N1];
char answer0[N1];
printf("输入题号\n");
scanf("%s",tth);
printf("输入题目\n");
scanf("%s",ttm);
printf("输入答案\n");
scanf("%s",answer0);
printf("调试中\n");
char edg[N];
char Rng[N];
char WE[N];
FILE *fpw,*fpa,*fpcz,*fp77,*fp78,*fpdd;
fpw = fopen("填空题.txt","r");
fpcz = fopen("填空题题号.txt","r");
fpdd = fopen("exchange1.txt","a");
fp77 = fopen("answer1.txt","r");
fp78 = fopen("exchange2.txt","a");
fpa = fopen("exchange.txt","a");
if(fpw==NULL||fpa==NULL||fpcz==NULL||fp77==NULL||fp78==NULL||fpdd==NULL)
{
printf("open the file failure\n");
exit(0);
}
while(fgets(edg,N,fpw)!=NULL)
if(strcmp(edg,ttm)!=0)
fputs(edg,fpa);
fclose(fpa);
fclose(fpw);
while(fgets(Rng,N,fpcz)!=NULL)
if(strcmp(Rng,tth)!=0)
fputs(Rng,fpdd);
fclose(fpcz);
fclose(fpdd);
while(fgets(WE,N,fp77))
if(strcmp(WE,answer0)!=0)
fputs(WE,fp78);
fclose(fp77);
fclose(fp78);
remove("选择题.txt");
remove("选择题题号.txt");
remove("answer1.txt");
rename("exchange.txt","选择题.txt");
rename("exchange1.txt","选择题题号.txt");
rename("exchange2.txt","answer1.txt");
}
printf("请重新选择功能\n");
printf("---> <---\n");
printf("请输入1-8是功能键,0是退出键\n");
for(i = 0; i < 5; i ++)
{
printf("-----------------------------------------------Q-Q\n\n");
}
}
}
}
return 0;
}