curriculum design final

master
parent 91849d9bee
commit 93137c6454

@ -0,0 +1,284 @@
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
typedef struct exam_system //定义链表
{
char problem[150];
char answer[4][20];
char right;
char input;
struct exam_system *next;
}EXAM; //类型名自定义
void management(); //题目管理函数
void add(); //添加题目函数
void show(); //遍历题库函数
void preservation(); //保存文档函数
void change(); //修改题目函数
void exam(); //考试初始界面函数
void link(); //创建链表函数
void Answer(); //答题函数
int sum; //题目总数
struct exam_system *p1,*p2,*head;
FILE *fp;
int main()
{
link();
system("color 75"); //自定义background
exam();
return 0;
}
void link() //创建链表
{
head=(EXAM *)malloc(sizeof(EXAM)); //创建头节点,并给予一个动态内存
p2=p1=head; //连续赋值
p1->next=NULL; //令p1指向末尾
if((fp=fopen("D:\\exam.txt","r+"))==NULL)
{
printf("文件打开失败!!");
exit(0);
}
while(1)
{
p1=(EXAM*)malloc(sizeof(EXAM));
if(fread(p1,sizeof(EXAM),1,fp)==0) //读取信息
break; //否则退出
p2->next=p1; //与第一个节点连接
p2=p1; //p1与p2同时指向新开辟的节点
sum++;
p2->next=NULL; //另p2指向末尾
}
fclose(fp);
}
void exam() //考试界面函数
{
int x;
system("cls");
printf("\t\t*********欢迎来到单项选择题考试系统*********\n");
printf("\t\t* *\n");
printf("\t\t* 1.题目管理 *\n");
printf("\t\t* *\n");
printf("\t\t* 2.开始考试 *\n");
printf("\t\t* *\n");
printf("\t\t* 3.退出 *\n");
printf("\t\t* *\n");
printf("\t\t********************************************\n");
printf("\n");
printf("请选择:");
scanf("%d",&x);
switch(x)
{
case 1:management();break;
case 2:Answer();break;
case 3:exit(0);break;
default :printf("输入有误!\n");break;
}
}
void management() //题目管理函数
{
int x;
system("cls");
printf("\t\t************欢迎来到题目管理系统************\n");
printf("\t\t* *\n");
printf("\t\t* 1.新增题目 *\n");
printf("\t\t* *\n");
printf("\t\t* 2.遍历题库 *\n");
printf("\t\t* *\n");
printf("\t\t* 3.修改题目 *\n");
printf("\t\t* *\n");
printf("\t\t* 4.返回上一级 *\n");
printf("\t\t* *\n");
printf("\t\t********************************************\n");
printf("\n");
printf("请选择:");
scanf("%d",&x);
switch(x)
{
case 1:add();management();break;
case 2:show();management();break;
case 3:change();management();break;
case 4:;exam();break;
default :printf("输入有误!\n");break;
}
}
void preservation() //保存文档函数
{
EXAM *current=NULL;
current=head->next;
fp=fopen("D:\\exam.txt","w+");
do
{
fwrite(current,sizeof(EXAM),1,fp); //逐个存储
current=current->next; //当前指针指向下一个
}while(current!=NULL); //直到指向末尾
fclose(fp);
printf("\n保存成功!!");
getch();
}
void show() //遍历题库函数
{
int c,i;
EXAM *p=NULL;
system("cls");
if(sum==0)
{
printf("题库中没有题目!\n");
printf("按任意键继续!");
getch();
}
else
{
p=head;
i=0;
do
{
p=p->next;
printf("%d.%s\n",i+1,p->problem);
c=0;
while(c<4)
{
printf("%c:",c+'A');
printf("%s\n",p->answer[c++] );
}
printf("正确答案:");
printf("%c\n",p->right);
i=i+1;
printf("\n-------------------------------------------------------------\n");
}while(p->next!=NULL);
p=NULL;
printf("按任意键继续!\n");
getch();
}
}
void add() //题目添加函数
{
int x,i;
system("cls");
printf("\t\t**************欢迎来到题目管理系统****************\n");
do
{
p1=(EXAM *)malloc(sizeof(EXAM));
p2->next=p1; //相连p1、p2
p2=p1; //指向相同
printf("请输入第%d个题目",sum+1);
scanf("%s",p1->problem);
printf("请输入备选答案:\n");
for(i=0;i<4;i)
{
printf("%c)",i+'A');
scanf("%s",p1->answer[i++] );
}
printf("输入正确答案:");
p1->right =getchar();
scanf("%c",&p1->right );
sum+=1;
printf("\n");
printf("\t是否继续添加\n\t1.继续\n\t2.退出\n请选择:");
scanf("%d",&x);
if(x==2)
{
p2->next=NULL;
break;
}
system("cls");
}while(x==1);
preservation();
}
void change() //修改题目函数
{
int i,num;
EXAM *p1=NULL;
EXAM *p2=NULL;
show();
if(sum>=1)
{
p1=(EXAM *)malloc(sizeof(EXAM)); //为P1分配一个动态内存
p2=head;
printf("请选择修改的题目序号:");
scanf("%d",&num);
for(i=0;i<num-1;i++)
{
p2=p2->next;
} //此时p2终于依次挪到num-1处
printf("请输入题目:");
scanf("%s",p1->problem);
printf("请输入备选答案:\n");
for(i=0;i<4;)
{
printf("%c:",i+'A');
scanf("%s",p1->answer[i++] );
}
printf("输入正确答案:");
p1->right=getchar();
scanf("%c",&p1->right);
p1->next=p2->next->next; //此时新节点将代替原节点
p2->next=p1; //p1、p2连接
p1=NULL;
p2=NULL; //最后都置为末尾
preservation();
}
}
void Answer() //答题函数
{
int i,j,c;
int n;
int score=0;
EXAM *p=NULL;
printf("祝你考试顺利!!\n");
system("cls");
if(sum>0)
{
i=0;
p=head;
printf("请输入你需要的题量:");
scanf("%d",&n);
do
{
p=p->next; //更新指针,输出下一个结构体的数据
printf("%d.%s\n",i+1,p->problem);
c=0;
while(c<4)
{
printf("%c:",c+'A');
printf("%s\n",p->answer[c++] );
}
printf("请输入你的答案:");
p->input=getchar();
scanf("%c",&p->input);
if(p->right==p->input)
{
printf("\n恭喜!!你的答案是 %c ,正确答案是 %c ",p->input,p->right);
score+=1;
}
else
{
printf("\n太可惜了~你的答案是 %c ,正确答案是 %c ",p->input,p->right);
}
i=i+1;
printf("\n----------------------------------------------------------\n");
if(i==n)
break;
}while(p->next!=NULL);
printf("考试结束!\n");
printf("总题数:%d\n正确数:%d\n",n,score);
getch();
;
}
else
printf("题库中没有题目!\n");
printf("按任意键继续!\n");
getchar();
}
Loading…
Cancel
Save