限时答题软件
怀化学院计算机科学与工程学院
课程 | 高级语言程序设计(c语言) |
---|---|
班级,组别 | 1902班,第5组 |
组员 | 郑少杰,苏昭健,刘鑫 |
团队名称 | 祖安工程师 |
课程设置题目 | 学生限时答题评测系统 |
一 课程设计题目基本要求介绍
1,学生输入学号加姓名后开始答题
2,答题限时120秒,题目随机从题库抽取
3,答题结束后根据公式算出成绩等级并将答题情况打成txt文档
4.制作服务端与客户端将答题情况发送到服务
二.流程图
三.项目目前的进展
1.检查id的格式正确与否
2.输入的字符可由回车和空格开头,系统去除空格回车大小写转换
3.限时120秒答题(每答一道题提示本题耗时与总耗时)
4.从题库随机抽取题目
5.答题完后根据已制定的评判等级公式判断学生的答题等级
6.可跟根据不同的情况输出的不同颜色的语句
7.可以将答题情况打印成txt文档(程序中途停止也能打印之前的)
核心功能讲解
1.空格的回车的去除
void myGets(char *s)//修改空格回车输入
{
char c;
int i=0;
//如果接收的字符为回车或者空格,就重新接收
do
{
c=getchar();
}
while(c=='\n'||c==' ');//当开头是空格或回车是重新吸收字符
s[i]=c;
i++;
while(1)
{
c=getchar();
if(c==' ')//如果s[i]是空格跳出循环重新吸收字符
{
continue;
}
else if(c=='\n')//如果s[i]是回车结束循环
{
break;
}
else
{
s[i]=c;//以上都不是就正常吸收字符
i++;
}
}
s[i]='\0';
}
2.随机不重复数的生成
int Randomnumber(int *b,int x)//随机不重复数
{
int j,a;
srand((unsigned int)time(NULL));//随机数种子
while(1)
{
a=rand()%40;//生成0-39的随机数
j=0;
while(1)
{
if(a==b[j])//检测随机数是否出现过一个个比
{
break;
}
else if(j==x)//如果没出现过就赋值给数组
{
b[x]=a;
return a;//返回这个随机数给来用
}
j++;
}
}
return 0;
}
升级的随机不重复数
void randomsize_array(int array[ ],int size)
{
int i ;
int j;
int temp;
srand((unsigned short)time(NULL));
for( i = 0 ; i < size ;i++)
{
j = rand()%(size-i);//生成一个随机数下标(0-size-i)
temp = array[j];
array[j] = array[size-1-i];
array[size-1-i]=temp;
//将该下标对应的数组的值与size-i下标对应一个数交换,也就每次的最后一个数组值是上一次的倒数第二个数组值
}
}
3.倒计时
void Coundown()//倒计时
{
int i;
answerFontcolorandfile(GREEN,"欢迎来到祖安(滑稽)同学祝你答题愉快\n");
for(i=5;i>0;i--)
{
Sleep(1000);//------暂停1秒
answerFontcolorandfile(RED,"=========倒计时%d秒===========\n",i);
}
}
4.printf函数的封裝(包含字体颜色的改变以及txt文档)
#define GREEN 0
#define RED 1
#define BLUE 2
#define YELLOW 3
#define PURPLE 4
#define WHITE 5
FILE*fp
void answerFontcolorandfile(int x,const char *cmd, ...)//封装改字体的颜色和包含封装的文件打印函数
{
va_list args;
if(x==0)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN);
}
else if(x==1)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);
}else if(x==2)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE);
}else if(x==3)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_RED);
}else if(x==4)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_BLUE);
}
else if(x==WHITE)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
}
File_txt();
va_start(args,cmd);
vprintf(cmd,args);
vfprintf(fp,cmd,args);
va_end(args);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
fclose(fp);
}
void File_txt()//txt文档
{
if((fp = fopen(fileName,"ab"))==NULL)//文件就以id.txt文档形式保持
{
printf("NO!!!!");
return;
}
}
4.限时答题
#include <stdio.h>
#include<string.h>
#include<windows.h>
#include<time.h>
#define MAXTIME 5
int main()
{
char s[100],answer[100];
clock_t endtime,startime;
float counttime,sumTime=0;
while(1)//这里用了一个循环来验证单次答题时间,总答题时间,剩余答题时间是否正确(调用时需要做改动哦!)
{
printf("-1的buma?\n");
startime=clock();//---------------------------------答题开始时的时间
scanf("%s",answer);
endtime=clock();//-------------------------------------结束后的时间
counttime=(float)(endtime-startime)/CLOCKS_PER_SEC;//-----------本题消耗的时间
sumTime+=counttime;//----------------------------所有答题所过时间的总和
printf("此次答题消耗时间%.2fs,总消耗时间%.2fs\n",counttime,sumTime);
if(sumTime>MAXTIME)//-----------------------------------时间总和超过120秒停止
break;
}
{
printf("超时,请停止答题!\n");
}
puts(answer);
return 0;
}
5.程序关闭
void quit()
{ char a[100];
char b[100]={"esc"};
while(1)
{ answerFontcolorandfile(YELLOW,"===========================================================\n");
answerFontcolorandfile(BLUE,"输入esc退出");
myGets(a);
if(strcmp(strlwr(a),b)==0)
{
break;
}
}
}
四.项目未完成功能
1.题库的难题程度设计(按照一定比例来抽取题目中的难易不同的题如难比易3:7)
2.网络版的设置(将学生答题的txt文档从客户端发送给服务端)
五每日项目进度表以及总占比
功能1 | id检查 | 刘鑫 | 11月8日 |
---|---|---|---|
功能2 | 窗口的改名 | 刘鑫 | 11月18号 |
功能3 | 倒计时5秒 | 刘鑫 | 11月18号 |
功能4 | 限时120秒 | 刘鑫 | 11月19号 |
功能5 | 输入字符的空格回车去除 | 刘鑫 | 11月9号 |
功能6 | 题库与题库赋值 | 苏昭健 | 11月18号 |
功能6 | 随机数(随机题库) | 郑少杰 | 11月19号 |
功能7 | 字体颜色的改变 | 苏昭健 | 11月19号 |
功能8 | txt文档的打印 | 苏昭健 | 11月20号 |
功能9 | 答题耗时的输出 | 郑少杰 | 11月20号 |
功能10 | 成绩等级的评判 | 郑少杰 | 11月20号 |
功能11 | printf函数与字体以及文件打印函数的封装,中途停止程序仍然又文档打印 | 郑少杰,苏昭健 | 11月22号 |
功能12 | 清屏与输入esc退出程序 | 郑少杰 | 11月23号 |
郑少杰:29%
苏昭健:28%
刘鑫:43%
六.相关文档地址
程序制作相关ppt
程序视频讲解
(若有提取码则是ksnc)
七.每位成员的体会
组长郑少杰心得
作为2次摇骰子都输了选出来的组长我亚历山大,想想天降大任于斯人也,必先伤我身体,秃我额头,哎越想越气(哭辽)。既然都这样了就做吧。
第一次写的自认为良好的需求分析被老师一点,少了“亿”点细节,改吧哎,分配下任务后,我们组里唯一的女成员隔了一天就把她所有的任务都完成了,我们两个男生都还没怎么动笔,心灵受到了极大的挫伤,后面又发现给她分配的任务在其他小组上都困扰了很久,不得不说她大大提高了我们进度。粗略制作的第一个版本给老师看了一下又是“亿”点问题。哎,改吧。整理成员代码,提函数,找细节,一点一滴,一天一天不断改进,这过程痛苦并快乐着,每次完成一点都让我有一总成就感,有着打游戏上分的快乐。此次程序设计我作为组长,首先肯定要肯定一下我的成员,嗯点到为止(笑哭)。我们三个人都为这个程序付出了自己的力量。
这个程序是大家一起完成的,而我整合了他们的代码自己也学到了很多新的知识,当然我也愿意把我负责的共享给他们,大家一起完成,一起学习,一起进步。这就是我们第5组祖安工程师。我靠猛然想起好久没陪游戏了,告辞(滑稽)。。
附加:已经大一上学期期末的我再次观看期中作业,我发现有些代码可以更加简化的写出来,也是自我的一种提升,想起当时的我每时都沉浸与代码改变升级都会感到一种成就感现在也依旧有一点,毕竟这是我第一次程序设计所设计的程序啊,还有最后一点,网络版还是不懂啊,好难啊!!
组员苏昭健;
我是祖安工程师小组里的一名小小的“工程师”在这次的程序设计作业中,我看到我自己能力方面上的不足,还有很多需要努力的地方。
在这次的合作程序设计中,我贡献了个人小小的能力,结合团队的力量将这个程序设计不是很完美的完成了,但是在这个过程中,我看到团队的力量是多么的重要,最开始的,我为了完成程序中的一个要求的设计,熬夜到差不多两点,看了看需求分析里的一条一例,真的想象不出要是一个人(我这样的菜鸡)完成这样一个程序需要多久的时间,团队的力量真的很重要,团队分工,各司其职,任务就会一点一点的细化,然后再就是团队的融合,将一个一个分散的代码整合在一起。团队真的很重要,还有就是个人能力的问题,那时候我负责网络版的设计,能力不足,完全没弄出来,导致整个任务被搁置了一段时间。这也展现了个人能力的重要性。
个人,团队,整合在一起就是一个就是坚不可摧的!
组员刘鑫:
这是我第一次进行小组程序设计,接触高级程序语言设计仅仅几个月的时间,当我刚刚接到这个任务时,是非常迷茫,不知所措的。直到现在,此次设计即将结束之际,我才发现并没有那么难,但是也并非那么简单。我能做出部分程序功能,这是值得我高兴的。但是许多稍微复杂的程序功能,并不是能那么能得心应手的思考出来,这是我应该进行反思的,也证明着我的能力还是远远不够的,在以后的日子里需要更加努力地去学习。
在程序设计的过程中,我还负责了流程图的绘制和需求分析的分模块与整理,虽然二者有相似之处,但当进行完讨论后,才发现区别是很大的。流程图讲究的主要是流程,得注意流程的完整性以及其先后顺序。需求分析更加注重的是内容,模块的划分得合理,每个步骤需要详细记载,细节则显得更加重要。这都是我当时在制作时没有注意的,这也算此次小组设计我收获的一个犯错经验。
作为小组成员之一,首先我要为我们这个团队点一个大大的赞。我们三个人能够很好的分工与合作,这是一个团队必不可少的。其次,也给小组其他两位献上掌声,他们都为这个程序设计付出很多努力。希望我们都能从犯错中获得经验与成长,越挫越勇,败不馁胜不骄。祖安工程师队加油!