#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define max 100
#define len 5
#define lens 20
typedef struct Que{
int id;
char que[max];
char a[max];
char b[max];
char c[max];
char d[max];
char ans[max];
struct Que*next;
}que;
1.创建每个题目的结构体
int ids=1;
que* reading(){
char ch[max];//每一行
FILE*fp=fopen("《西游记》程序设计期末考试.txt","r");
que*head=(que*)malloc(sizeof(que));//表头
que*s;
head->next=NULL;
head->id=-1;
strcpy( head->que,"请选择你的科目");
strcpy( head->a,"1.C语言");
strcpy( head->b,"2.英语");
strcpy( head->c,"3.日语");
strcpy( head->d,"4.高数");
strcpy( head->ans,"");
s=head;
if(NULL==fp){
printf("no\n");
return NULL;
}
while(NULL!=fgets(ch,max,fp)){
que*newque;
if(ch[0]=='#'&&ch[1]!='#'){
//title
newque=(que*)malloc(sizeof(que));
newque->id=ids;
ids++;
strcpy(newque->que,&ch[1]);
newque->next=NULL;
if(head->next==NULL){
head->next=newque;
}else{
s->next=newque;
}
s=newque;
}
else if(ch[0]=='#'&&ch[1]=='#'){
//ans
strcpy(newque->ans,&ch[2]);
// printf("%d\n",newque->id);
// puts(newque->que);
// puts(newque->ans);
}
else if(ch[0]=='A'&&ch[1]==' '){
strcpy(newque->a,ch);
}
else if(ch[0]=='B'&&ch[1]==' '){
strcpy(newque->b,ch);
}
else if(ch[0]=='C'&&ch[1]==' '){
strcpy(newque->c,ch);
}
else if(ch[0]=='D'&&ch[1]==' '){
strcpy(newque->d,ch);
}
}
fclose(fp);
return head;
}
2.读取txt文件
void show(que*s){//show题库
que*p;
p=s->next;
while(p){
printf("%d\n",p->id);
printf("%s",p->que);
printf("%s",p->a);
printf("%s",p->b);
printf("%s",p->c);
printf("%s",p->d);
printf("答案: %s",p->ans);
p=p->next;
}
}
3.显示题库内容(可写可不写)
int*randlist(int list[len]){//随机不重复数字
int i;
int j;
int a;
srand((unsigned)time(NULL));
for(i=0;i<len;i++){
while(true){
a=rand()%19+1;//随机数范围1-19;
for(j=0;j<i;j++){
if(list[j]==a){
break;
}
}
if(j==i){
list[i]=a;
break;
}
}
}
for(i=0;i<len;i++){
printf("%d ",list[i]);
}
printf("\n");
return list;
}
4.创建随机不重复数字
void showque(que*p){//show题目
printf("%s",p->que);
printf("%s",p->a);
printf("%s",p->b);
printf("%s",p->c);
printf("%s",p->d);
printf("%s",p->ans);//答案
}
5.显示题目子功能
void showtitle(que*p){//show标题
puts(p->que);
puts(p->a);
puts(p->b);
puts(p->c);
puts(p->d);
printf("\n");
}
6.显示标题子功能
char* touppercase(char *a){
int i;
for(i=0;i<strlen(a);i++){
if(a[i]>=97){
a[i]=a[i]-32;
}
}
return a;
}
7.小写字母转换成大写
void start(que*head,int list[len]){
int i;
int j;
int k;
int time1;
int time2;
int cmp=0;
int result=0;
que*p;
char set[max];
char s;
int sumgrate=0;
int userans;
p=head;
que**listque=(que**)malloc(sizeof(que*)*lens);
for(i=0;i<lens;i++){//把题库用堆数组存储
listque[i]=p;
p=p->next;
}
for(i=0;i<lens;i++){
printf("%d ",listque[i]->id);
}
printf("\n");
showtitle(listque[0]);
printf("进入考试界面: \n");
scanf("%s",&set);
time1=time(NULL);
for(i=0;i<len;i++){//随机五道题
showque(listque[list[i]]);
printf("请输入您的正确答案: \n");
scanf("%s",&set);
for(k=0;k<strlen(set);k++){
if(set[k]>=97&&set[k]<=122){
set[k]=set[k]-32;
}
}//大小写转换
// puts(set);
// printf("%s",listque[list[i]]->ans);
if(listque[list[i]]->ans[strlen(listque[list[i]]->ans)-1]=='\n'){
listque[list[i]]->ans[strlen(listque[list[i]]->ans)-1]=0;
}
cmp=strcmp(set,listque[list[i]]->ans);
// printf("%d\n",cmp);
if(cmp==0){
printf("RIGHT\n");
result=result+20;
}else{
printf("ERROR\n");
}
}
time2=time(NULL);
int finatime=time2-time1;
printf("最终成绩: %d分\n",result);
printf("答题所用时间: %ds\n",time2-time1);
fps=fopen("日志.txt","w");
char str[max];
char str2[max];
sprintf(str,"%d",result);
sprintf(str2,"%d",finatime);
fputs("总分:",fps);
fputs(str,fps);
fputs("分",fps);
fputs("\n",fps);
fputs("答题所用时间:",fps);
fputs(str2,fps);
fputs("s",fps);
fclose(fps);
}
8.项目总体运行代码
int main(){
int list[len]={0};
que*head;
head=reading();
// show(head);
randlist(list);
start(head, list);
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define max 100
#define len 5
#define lens 20
typedef struct Que{
int id;
char que[max];
char a[max];
char b[max];
char c[max];
char d[max];
char ans[max];
struct Que*next;
}que;
int ids=1;
que* reading(){
char ch[max];//每一行
FILE*fp=fopen("《西游记》程序设计期末考试.txt","r");
que*head=(que*)malloc(sizeof(que));//表头
que*s;
head->next=NULL;
head->id=-1;
strcpy( head->que,"请选择你的科目");
strcpy( head->a,"1.C语言");
strcpy( head->b,"2.英语");
strcpy( head->c,"3.日语");
strcpy( head->d,"4.高数");
strcpy( head->ans,"");
s=head;
if(NULL==fp){
printf("no\n");
return NULL;
}
while(NULL!=fgets(ch,max,fp)){
que*newque;
if(ch[0]=='#'&&ch[1]!='#'){
//title
newque=(que*)malloc(sizeof(que));
newque->id=ids;
ids++;
strcpy(newque->que,&ch[1]);
newque->next=NULL;
if(head->next==NULL){
head->next=newque;
}else{
s->next=newque;
}
s=newque;
}
else if(ch[0]=='#'&&ch[1]=='#'){
//ans
strcpy(newque->ans,&ch[2]);
// printf("%d\n",newque->id);
// puts(newque->que);
// puts(newque->ans);
}
else if(ch[0]=='A'&&ch[1]==' '){
strcpy(newque->a,ch);
}
else if(ch[0]=='B'&&ch[1]==' '){
strcpy(newque->b,ch);
}
else if(ch[0]=='C'&&ch[1]==' '){
strcpy(newque->c,ch);
}
else if(ch[0]=='D'&&ch[1]==' '){
strcpy(newque->d,ch);
}
}
fclose(fp);
return head;
}
void show(que*s){//show题库
que*p;
p=s->next;
while(p){
printf("%d\n",p->id);
printf("%s",p->que);
printf("%s",p->a);
printf("%s",p->b);
printf("%s",p->c);
printf("%s",p->d);
printf("答案: %s",p->ans);
p=p->next;
}
}
int*randlist(int list[len]){//随机不重复数字
int i;
int j;
int a;
srand((unsigned)time(NULL));
for(i=0;i<len;i++){
while(true){
a=rand()%19+1;//随机数范围1-19;
for(j=0;j<i;j++){
if(list[j]==a){
break;
}
}
if(j==i){
list[i]=a;
break;
}
}
}
for(i=0;i<len;i++){
printf("%d ",list[i]);
}
printf("\n");
return list;
}
void showque(que*p){//show题目
printf("%s",p->que);
printf("%s",p->a);
printf("%s",p->b);
printf("%s",p->c);
printf("%s",p->d);
printf("%s",p->ans);//答案
}
void showtitle(que*p){//show标题
puts(p->que);
puts(p->a);
puts(p->b);
puts(p->c);
puts(p->d);
printf("\n");
}
char* touppercase(char *a){
int i;
for(i=0;i<strlen(a);i++){
if(a[i]>=97){
a[i]=a[i]-32;
}
}
return a;
}
void start(que*head,int list[len]){
int i;
int j;
int k;
int time1;
int time2;
int cmp=0;
int result=0;
que*p;
char set[max];
char s;
int sumgrate=0;
int userans;
FILE*fps;
p=head;
que**listque=(que**)malloc(sizeof(que*)*lens);
for(i=0;i<lens;i++){//把题库用堆数组存储
listque[i]=p;
p=p->next;
}
for(i=0;i<lens;i++){
printf("%d ",listque[i]->id);
}
printf("\n");
showtitle(listque[0]);
printf("进入考试界面: \n");
scanf("%s",&set);
time1=time(NULL);
for(i=0;i<len;i++){//随机五道题
showque(listque[list[i]]);
printf("请输入您的正确答案: \n");
scanf("%s",&set);
for(k=0;k<strlen(set);k++){
if(set[k]>=97&&set[k]<=122){
set[k]=set[k]-32;
}
}//大小写转换
// puts(set);
// printf("%s",listque[list[i]]->ans);
if(listque[list[i]]->ans[strlen(listque[list[i]]->ans)-1]=='\n'){
listque[list[i]]->ans[strlen(listque[list[i]]->ans)-1]=0;
}
cmp=strcmp(set,listque[list[i]]->ans);
if(cmp==0){
printf("RIGHT\n");
result=result+20;
}else{
printf("ERROR\n");
}
}
time2=time(NULL);
int finatime=time2-time1;
printf("最终成绩: %d分\n",result);
printf("答题所用时间: %ds\n",time2-time1);
fps=fopen("日志.txt","w");
char str[max];
char str2[max];
sprintf(str,"%d",result);
sprintf(str2,"%d",finatime);
fputs("总分:",fps);
fputs(str,fps);
fputs("分",fps);
fputs("\n",fps);
fputs("答题所用时间:",fps);
fputs(str2,fps);
fputs("s",fps);
fclose(fps);
}
int main(){
int list[len]={0};
que*head;
head=reading();
// show(head);
randlist(list);
start(head, list);
}
我会长期保持更新滴!
喜欢的朋友记得点个关注哟!