学生限时答题评测程序

怀化学院科学与工程学院
高级程序设计
1902班 第9组
工作量占比:匡祉含40%——李龙杰40%——万浩洋20%
光宗耀组
学生限时答题评测系统

一、课程设计题目基本要求介绍
学生需要凭输入自己的学号姓名进行限时答题,功能包括:1.根据一定标准,给出评判等级。2.随机出题。3.开始可以输入空格和回车。4.有限时功能和倒计时功能,超过限时时间不能答题。5.显示正确多少道题,正确率。6.不同成绩单显示的颜色不同。
用到的知识:选择结构和条件判断,循环结构,数组,数据的输入与输出,
二、
在这里插入图片描述
三、项目进程
1、限制账号要以10位学号加姓名的方式登录,否则重新登录。
2、登录成功后窗口标题改为账号名。
3、答题倒数五秒,每秒倒数一次,倒数不计时。
4、支持开头空格回车
5、完成一道题提示该同学正确多少道,耗时多少秒。
6、每道题回答正确显示绿色,错误显示红色。
7、根据不同表现显示不同等级和不同颜色的成绩单。
核心功能讲解:
(1)倒计时功能
利用循环输出倒计时倒计时还有几秒,这里要用个sleep(1000)意思是每隔1000毫秒倒数一次,该语句包含在头文件windows中。

void gzyz()
{
int i;  
for(i=5;i>0;--i)
{
  	color(2); printf("测试即将开始,倒计时%d秒\n",i);
	Sleep(1000);//每隔一秒倒数一次
}
printf("答题开始!\n");
}

在这里插入图片描述
(2)登录限制格式和修改窗口功能
定义字符数组num[ ],name[ ]分别指学号和名字,然后用sprintf将窗口改为num+name。然后用个while循环里镶嵌一个for循环,for循环中再加入if语句对学号进行判断。

int theshy 
{
char num[20];
char name[20];
char s[100];
int i;
printf("请输入您的学号姓名\n");
printf("输入格式为学号+空格+姓名\n");
scanf("%s %s",&num,&name);
while(1)
{
	for(i=0; num[i]>='0'&&num[i]<='9'; i++);
	
	if(i==10)
	{
		color(3);printf("亲爱的%s同学请做好答题准备,限时120秒\n",name);
		sprintf(s,"title %s %s",num,name);//修改窗口
	system(s);//修改窗口
	Sleep(500);
		break;
	}
	
	else
	{ 
		color(4);printf("您输入的格式错误,输入错误请重新输入\n");
	color(7);	scanf("%s",num);
		scanf("%s",name);
	}
}//判断考试信息的输入格式是否正确
return 0;
}

在这里插入图片描述
(3)判断等级
这里因为条件太多,所以选用switch函数分为五个等级。

int grade(int f)
{
	switch(f/10)
{
case 4 :color(6);printf("您的等级为最高 S 等\n");break;
case 3 :color(7);printf("您的等级为 A 等\n");break;
case 2 :color(2);printf("您的等级为 B 等\n");break;
case 1 :color(5);printf("您的等级为 C 等\n");break;
default:color(4);printf("您的等级为最低 D 等\n");
}
return 0;
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191124213253510.jpg)
}

(4)改变颜色
该函数需要从头文件windows中提取函数,SetConsoleTextAttribute是一个可以在API(应用程序编程接口)中设置控制台窗口字体颜色和背景色的计算机函数
GetStdHandle是一个Windows API函数。它用于从一个特定的标准设备(标准输入、标准输出或标准错误)中取得一个句柄(用来标识不同设备的数值)。

	void color(short x)
	{
	if(x>=0 && x<=15)
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);else
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
	}

在这里插入图片描述
在这里插入图片描述
(5)题库,随机出题,限时120秒,每题耗时,以及总耗时。

int yasuo()
{
char question[][100] =
	{
题目
};
char answer[][100] = 
{
答案
};
char myanswer[100] ;
double timesum=0;
int questionnum;
int count = 0;
int random_index;

srand((unsigned int)time(NULL));

questionnum = sizeof(question)/sizeof(question[0]);

for( i = 0 ; i < 40 ; i++)
{
	start = clock();
	random_index=rand()% questionnum ;//random_index表示随机产生的下标
	color(7);printf("--------------第%d题-----------------\n%s\n",i+1,question[random_index]);
	color(7);printf("请输入第%d题的答案\n",i+1);
	printf("\n");
	scanf("%s",myanswer);

	
	printf("-------------------------------------\n");
	//gets(myanswer);

	if( strcmp(strlwr(myanswer),answer[random_index]) == 0 )
	{
			color(2);printf("^_^恭喜你,回答正确,已经答对了%d题,",count+1);
			color(7);printf("限时120秒,");
		count++;
	}
	else
	{
		color(4);printf(">_<你回答错误!正确答案为%s,",answer[random_index]);
		color(2);printf("已经答对%d题,",count);
		color(7);printf("限时120秒,");
	}
	end = clock();
	timesum+=(double)(end - start) / CLOCKS_PER_SEC;
	printf("本题耗时%.3f秒,总耗时%.3f秒\n", (double)(end - start) / CLOCKS_PER_SEC,timesum);
	if(timesum>120.000)
	{
		break;
	}
	printf("\n");          
}

printf("%c同学的成绩单:答对%d//%d题,正确率达%.2f%%,总耗时%.3f秒\n",name,count,i,(float)count/i*100,timesum);
grade(count);
return 0;
}

在这里插入图片描述
在这里插入图片描述
四、项目未完成的功能
(1)生成.txt文件感觉对我们做的难度有点大,没有头绪,不知从何下手。需要学的还很多,在这浩瀚的的代码中,感觉自己是多么的渺小。
(2)消除答案中的空格,这个我们已经做出来了,但是输出的时候有点问题,第一题自动报错,然后其他的题都可以中间加空格。
(5)每日项目的进度及版本的更新日志说明

在这里插入图片描述

七、每位成员的过程体会
组长姓名:李龙杰
第一次当组长,有很多地方做的都不是很好,但是在这次小组合作中感觉自己成长了很多,知道了团队的重要性,一个人再怎么厉害也离不开团队。
在这次合作中我们了解到了我们的不足,还有很多知识没有掌握,我也有了一些团队做项目的经验,任务的分配很重要,让我对以后的合作更期待了,这次的项目离不开组员的支持,谢谢我的组员们。

组员:匡祉含
在这为期十来天的时间内,通过我们小组各成员之间的相互讨论和合作,我们基本完成了老师布置的程序设计任务,更值得的是我通过这次的程序设计,我得到了很多的启发。
这次设计,不仅巩固了我以前所学的知识,还让我对C语言有了更深一步的了解,掌握了更多的技巧和技能。C语言这门课呢,仅仅学习课本上的知识是不够的,我要自己经常动手编写程序,才能发现我们学习上的不足和漏洞,在实践中解决这些问题,不断的提升自己的能力。
在我们小组有解决不了的问题时,我们会主动的查阅资料,或是向其他同学询问,这不仅丰富了我们的知识,还增进了我们同学之间的友谊。在我们的不懈努力下我们完成了大部分的任务。
在这次程序设计中,我还学会了用流程图来进行构思,然后用结构分析方法进行分析,将整个系统清楚的划分为几个模块,再根据每个模块的功能编写代码。而且尽可能的将模块细分,最后再进行函数的调用。
一个团队需要的就是团结、合作、协调,所以我觉得在程序设计之前,团队成员之间的关系是至关重要的。

组员:万浩洋
这是作为我的第一次高级语言程序设计,有一种特别的感觉,虽然自己做的不是很好,敲出来的代码也不是很多,但是还是有一种特别的成就感;然后在我们的队员身上学习到了很多东西,也知道了自己的不足,让我查觉到了我的漏洞,并且能够让我去改正,所以老师给我们的这次机会,我觉得对我们意义非常重大,非常感谢老师给予的机会。我打算在以后会把自己的漏洞弥补起来,并且要时刻预习和复习,钻研新的知识,不懂得要及时问老师,学长,同学,不要把他拖欠下来,最后再次感谢老师!!!

八、组长想说的话
自我批评篇:
有时候感觉自己还是太幼稚了,没能很好的领导组员做好他们的任务,自己有时候还是太贪玩了,组员很听话但是感觉自己领导能力还是不够,对于一些问题的处理和理解做的都不是很好。
自夸篇:
个人觉得还是比较负责,自己能做的任务一般都会完成,不给组员增添更多的问题,在组员有问题是,我会组织一起讨论。本人觉得组织能力还行吧。

@高级语言程序设计学生限时答题评测程序TOC

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值