单位:怀化学院计算机科学与工程学院
课程:C语言
班级:1902
小组序号:10
团队名称:如来佛组
课程设计题目:答题程序
一、课程设计题目基本要求介绍
本次课题需要制作一个简单的答题程序。
有输入姓名学号、答题不重复、倒计时、限时、评测等级、将答题过程计入文档、将成绩发送给服务器等功能。
二、流程图
三、项目目前进展
1.按照学号加姓名的方式输入,输入错误则提示:输入错误,请继续输入。
2.输入正确学号加姓名后,终端标题改为该学生输入正确的学号加姓名。
3.支持大小写答题功能,如学生输入fF,等同于ff。
4.支持开头是空格或者回车的错误输入,不会因为误输入而判错,如输入 空格+ff,等同于ff。
5.支持学生输入的答案中可以有空格,如学生输入f f,等同于输入ff。
6.题库中的题目分为难易两档,随机抽题时,可以设定抽题难度比例,例如70%抽到难题,30%抽到简单题。
7.每完成一道题目,提示该同学已正确多少道,已耗时多少秒。
8.每道题回答正确还是错误,应该易于辨识,比如正确的提示为绿色,错误的提示为红色。
9.超时后不再允许学生输入,但不关闭该程序。
10.根据学生表现的不同等级,显示不同颜色的成绩单,还可以根据学生不同的等级,输出不同的提示话语。
11.记录所有屏幕上打印出的语句,将所有语句按输出的程序全都记录在【学生基本信息_EXAM.txt】之中。
四、核心功能讲解
(1)
①支持开头是空格或者回车的错误输入,不会因为误输入而判错,如输入 空格+ff,等同于ff.
②实现该功能的思想:如果输入空格或回车,就循环输入,直到输入正确的字符或数字。
③核心代码:
#include<stdio.h>
int main()
{
int i=0;
char a[20];
scanf("%c",&a[i]);
while(a[i]=='\n'||a[i]==' ')
{
scanf("%c",&a[i]);
}
while(a[i]!='\n')
{
if(a[i]==' ')
{
scanf("%c",&a[i]);
}
else
{
i++;
scanf("%c",&a[i]);
}
}
a[i]='\0';
printf("%s\n",a);
return 0;
}
④效果图:
f f
ff
(2)
①记录所有屏幕上打印出的语句,将所有语句按输出的程序全都记录在【学生基本信息_EXAM.txt】之中。
②用到C语言文件功能,先创建一个.txt文件,然后使用fprintf(),将所需要记录的文字,放入该.txt文件。
③核心代码:
#include<stdio.h>
#include<stdlib.h>
#include <stdarg.h>
void wenjian(const char *cmd, ...);
FILE * file;
int main()
{
char a[10]={"q.txt"};
file = fopen(a,"w+");
if(file == NULL)
{
printf("文件打开失败");
}
wenjian("hello world");
fclose(file);
return 0;
}
void wenjian(const char *cmd, ...)//函数的封装,摘自他人
{
va_list args; //定义一个va_list类型的变量,用来储存单个参数
va_start(args,cmd); //使args指向可变参数的第一个参数
vprintf(cmd,args);//必须用vprintf等带V的
vfprintf(file,cmd,args);
va_end(args);
}
④效果图
(3)
①循环不重复抽取题目.
②核心代码:
if(p!=index_random){
for(k=0;k<100;k++)
{
temp[k]=question[index_random][k]
}
for(k=0;k<100;k++)
{
question[index_random][k]=question[p][k];
}
for(k=0;k<100;k++)
{
question[p][k]=temp[k];
}
for(k=0;k<100;k++)
{
tempp[k]=answer[index_random][k];
}
for(k=0;k<100;k++)
{
answer[index_random][k]=answer[p];
}
for(k=0;k<100;k++)
{
answer[p][k]=tempp[k];
}
}
③更新的核心代码(2019.12.30更新)
需要增加头文件:
#include<string.h>
if(p!=index_random)
{
strcpy(temp,question[index_random]);
strcpy(question[index_random],question[p]);
strcpy(question[p]=temp[k]);
strcpy(tempp,answer[index_random]);
strcpy(answer[index_random],answer);
strcpy(answer[p],tempp[k]);
}
五、项目未完成的功能
1.考生答完时(客户端)将某些重要的连接信息发给服务端,服务端可以生成特定的文件来记录下这些客户端发来的连接信息。
2.考生答完后(客户端)将某些重要的考生完成信息发给服务端,服务端可以生成特定的文件来记录下这些客户端发来的考生完成信息。
3.如果考生达到某个级别以上,考生会将【学生基本信息_EXAM.txt】自动发送给服务器端,在服务器端中保存下来。
六、每日项目进度表及版本更新日志说明
1.| 按照学号加姓名的方式输入 | 胡世阳 |2019.11.19
2.|-输入正确学号加姓名后,终端标题改为该学生输入正确的学号加姓名。|米绍玮|2019.11.20
3.|支持大小写答题功能 | 胡世阳 |2019.11.20
4.|支持开头是空格或者回车的错误输入|胡世阳|2019.11.20
5.|支持学生输入的答案中可以有空格|胡世阳|2019.11.21
6.|题库中的题目分为难易两档|米绍玮|2019.11.22
7.|每道题回答正确还是错误,改变颜色|米绍玮|2019.11.22
8.|根据学生表现的不同等级,显示不同颜色的成绩单|米绍玮|2019.11.23
9.|记录所有屏幕上打印出的语句,将所有语句按输出的程序全都记录在【学生基本信息_EXAM.txt】之中|米绍玮|2019.11.23
七、相关文档地址
八、每位成员的过程体会
1.组长:米绍玮
体会:
这是我在刚进入大学的第一个小组合作编程项目,而且很荣幸得能担任我们第十小组的小组长。
之前我没有管理过小团体的经历,所以这一次对完成组长该做的任务和职责时,我拥有一种前所未有的兴奋,这是一种全新的体验。我们是一个三人小组,每一个人都在小组中承担不可替代的责任,我们是密不可分,团结一心的,我们对待问题敢于挑战,敢于创新,尝试用不同的方法写出更优秀的代码。
在这持续一个星期的小组合作中,我们组对每个人分工都做出了合理的安排,所以才有如此高的完成度,虽然没有完成所有项目,但是我们都把自己的实力尽情地发挥出来,在相互交流心得的过程中,我觉得我们小组的所有成员,对高级语言程序的编写能力都得到了相应的提升。
刘毅文老师的这种合作完成项目的课题,让我们明白合作的重要性,也让我们体验到将来工作编写程序的大致流程,让我们有一个好的适应过程在今后的工作中。
2.组员:胡世阳
体会:
在初学c语言的一个学期后,我们进行了c语言阶段,尝试编写各种类型的程序。在为期一个周时间中,我的感受是:c语言实训和平时上课所接触的成有很多不同,所经受的考验和克服的困难和平时的相差不大,遇到不会做的题同学互相讨论,互相帮助,共同解决,攻克了c语言的复杂程序,我感触良多。在这次实训中,我对c语言有了一个更深的认识了解,也对这学期的知识得到巩固,还尝试了运行编程,每次运行程序成功,让我对下面的项目充满了信心通过自己的努力最终把最初的理论知识转化成基本技能,这次的实训,是我对c语言的学习产生了农活的兴趣。还是这次实训,最令人激动的就是同学遇到问题互相帮助虽然只是一个很小得实训,但同学们的满腔人情却是值得骄傲的,我们在实训中取长补短在实训中长知识,提高了我们学习,虽然对有些时候老师没给我们指出解决问题的方法有一些小抱怨,但到了结束是才知道,这种教学让还是这次实训,最令人激动的就是同学遇到问题互相帮助虽然只是一个很小得实训,但同学们的满腔人情却是值得骄傲的,我们在实训中取长补短在实训中长知识,提高了我们学习,虽然对有些时候老师没给我们指出解决问题的方法有一些小抱怨,但到了结束是才知道,这种教学让我们自己学会了自学,学会了去看懂别人的代码。更多的是老师的感动,每天在我们来之前家到了机房,给我们我分享他学c语言的感受,还提醒我们注意在编程时与遇到的事项,这些是我们平时上课无发了解到的知识是我们更深层次的极大收获。
3.组员:黄冰麒
体会:
从编程菜鸟一路走来,慢慢对编程习惯有了一个新的认识。因为曾经我写的代码的可读性令自己也感到哭啼皆非,搞得自己晕头转向。今天来分享一下自己的一些关于编程的心得。
很多人以为代码一敲完,能得到预期的结果,就万事ok,其实不然。后面的程序调试、维护和升级是一个项目中很重要的一部分,这就要求我们必须规范编程习惯。
在写C语言程序的时候为了书写清晰、便于阅读、便于理解、便于维护,在编写程序时应遵循编程规则。