1901班第1组博文

单位名怀化学院计算机科学与工程学院
课程名称高级语言程序设计
班级 小组序号1901班 第1组
团队名称Power组
课程设计题目随机答题程序

一、课程设计题目基本要求介绍

功能模块1:登录
(1)限制账号要以10位学号+姓名的方式登录,否则重新登录
(2)登录成功后将基本信息(账号,IP地址)发送给服务器
(3)登录成功后窗口标题应该修改为该账号名

功能模块2:测验前预备工作
(1)输出倒计时,1000ms一次,输出倒计时剩余时间,倒计时结束后输出“开始答题”(新模式可自行输入倒计时时间)

功能模块3:正式开始答题
(1)随机导入一道不重复的题
(2)开始答题限时计时,每答一道题输出一次时间(新模式可自行输入答题限时)
(3)考生输入答案,大小写,输入答案前的空格回车,答案中的空格均被自动删除
(4)考生输入的答案与题库答案对比,输出回答正确/错误,答对题数,已答题数
(5)判断时长与答题数,达到限定时间或做满题目后进行下一模块,否则调回模块3(1)

功能模块4:对答题结果进行判定
(1)输出考试的正确率,以正确率为准输出不同梯度等级(90%以上为S,80%以上90%以下为A,70%分以上80%以下为B,60%以上70%以下为C,60%以下为D)和不同的鼓励语

功能模块5:答题日志
(1)设置语句达到与建立的txt文件能相联系,以达到后续记录步骤的稳定执行
(2)将编译开始后在程序上所显示的全部内容打印至上述txt文件中
(3)若进行多次编译同样地将每一次所显示的编译内容保存在同一个txt文件中,每次编译的结果用换行的方式相隔开以供查阅

功能模块6:网络程序
(1)考生完成答题程序后将答题记录自动上传到服务端电脑文件中
(2)如果考生成绩达到某个级别,考生文件自动发送到服务端保存下来
版本发布:发布Release版,不再使用默认的Dubug版本

二、流程图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
三、项目目前的进展
主要写已实现的功能,功能完成的具体程度。
1.限制账号要以10位学号+姓名的方式登录,否则重新登录
通过循环和if语句,判断10位数的学号以及第11位的字符

核心代码

void islogin()//输入学号
{
	printf("请输入学号+姓名:");
	do{
		gets(account);
		if(account[0]!='1'||account[1]<'6'||account[1]>'9'||account[2]!='0'||account[3]!='0'||account[4]!='1'||account[5]!='3'||account[6]!='0'||account[7]<'0'||account[7]>'9'||account[8]<'0'||account[8]>'9'||account[9]<'0'||account[9]>'9'||account[10]<'A'||account[10]>'z')
		printf("输入错误请重新输入:");
		//fprintf(file,);
	}while(account[0]!='1'||account[1]<'6'||account[1]>'9'||account[2]!='0'||account[3]!='0'||account[4]!='1'||account[5]!='3'||account[6]!='0'||account[7]<'0'||account[7]>'9'||account[8]<'0'||account[8]>'9'||account[9]<'0'||account[9]>'9'||account[10]<'A'||account[10]>'z');
	printf("输入正确\n");
}

效果图
在这里插入图片描述

2.输出考试信息(测试考试马上开始,你的学号和姓名)
核心代码

printf("测试考试马上开始,你的学号姓名:%s\n",account);

效果图
在这里插入图片描述
3.开始可自行输入的倒计时
核心代码

for(k=j;k>0;k--)
	{
		printf("测试即将开始,倒计时:%d秒\n",k);
		Sleep(1000);
	}
**效果图**
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191124214520858.png)

4.随机不重复抽取答案
核心代码

srand((int)time(0));
	while(1)
	{
		k=rand()%math;
		for(j=0;j<math;j++)
			if(b[j]==k) break;
		if(j==math){
			b[c]=k;
			//printf("%d\n",b[c]);
			c++;
		}
		if(c==math) break;
	}

5.开始答题限时计时,每答一道题输出一次时间
核心代码

ts=time(NULL);
te=time(NULL);
T=te-ts;

效果图
在这里插入图片描述
6.考生输入答案,输入答案前的空格回车,答案中的空格均被自动删除
核心代码

for(l=0;l<M;l++)
	{
		scanf("%c",&a[l]);
		if(a[l]!=' '&&a[l]!='\n')
		{
			count++;
		}
		if(a[l]==' '&&a[l]!='\n')
			continue;
		b[j]=a[l];
		j++;
		if(a[l]=='\n'&&count>0)
			break;
	}
	for(l=0;l<j;l++)
	{
		if(b[l]!='\n'&&b[l]!='\r')
		{
			c[k]=b[l];
			k++;
		}
	}

效果图
在这里插入图片描述
在这里插入图片描述
7,考生输入的答案与题库答案对比
核心代码

if(strcmp(strlwr(myanswer),answer[random_index])==0)

8.判断时长
核心代码

if(te-ts<=60)

9.输出考试的正确率,以正确率为准输出不同梯度等级和不同的鼓励语
核心代码

printf("正确%d道题,你已完成%d道题,正确率%.2f%%,你已经用时%ds,总时间120s\n",count,i,(float)count/i*100,te-ts);
switch(count)
	{
		case 5:printf("你的等级:S,NB\n");break;
		case 4:printf("你的等级:A,优秀\n")break;
		case 3:printf("你的等级:B,很强\n");break;
		case 2:printf("你的等级:C,还可以\n");break;
		case 1:printf("你的等级:D,及格了\n");break;
		case 0:printf("你的等级:E,未及格,多加努力\n");break;
		default:printf("数据错误!\n");break;
	}

10.答题日志
核心代码

FILE*file;
file=fopen("TEST4.txt","a+");
fprintf(file,"%s%d%s%d%s%.2f%%\n","你已正确",count,"道题,完成",i,"道题",(float)count/i*100);

11.网络程序客户端
核心代码

if (WSAStartup(MAKEWORD(2 , 2) , &wsd) != 0) {
        printf("Winsock    初始化失败!\n");
        return 1;
    }
    /*创建Socket*/
    sClient = socket(AF_INET , SOCK_STREAM , IPPROTO_TCP);
    if (sClient == INVALID_SOCKET) {
        printf("socket() 失败: %d\n" , WSAGetLastError());
        return 1;
    }
    /*指定服务器地址*/
    server.sin_family = AF_INET;
    port = atoi(getparameter[PORT]);
    server.sin_port = htons(port);
    server.sin_addr.s_addr = inet_addr(getparameter[IP]);
    if (server.sin_addr.s_addr == INADDR_NONE) {
        host = gethostbyname(getparameter[IP]);    //输入的地址可能是域名等
        if (host == NULL) {
            printf("无法解析服务端地址: %s\n" , getparameter[IP]);
            return 1;
        }
        CopyMemory(&server.sin_addr ,
                    host->h_addr_list[0] ,
                    host->h_length);
    }
    /*与服务器建立连接*/
    if (connect(sClient , (struct sockaddr*)&server ,
                    sizeof(server)) == SOCKET_ERROR) {
        printf("connect() 失败: %d\n" , WSAGetLastError());
        return 1;
    }
memset(Buffer,0,sizeof(Buffer));
        sprintf(Buffer,"学号姓名:%s,正确%d道题,完成%d道题,用时%d秒",account,count,i,te-ts);
		printf("%s",Buffer);
        //向服务器发送消息
        ret = send(sClient , Buffer , strlen(Buffer) , 0);
        printf("已发送字符 %d bytes\n" , ret);
        //接收从服务器来的消息
        ret = recv(sClient , Buffer , BUFSIZE , 0);
        Buffer[ret] = '\0';
        printf("已接收字符 %d bytes:\n\t%s\n" , ret , Buffer);
    //用完了,关闭socket句柄(文件描述符)
    closesocket(sClient);
    WSACleanup();

11,窗口修改为学号和姓名
核心代码

	sprintf(s,"title 学号,姓名:%s",account);
    system(s);

13.网络程序服务端文件的创建与保存
核心代码

FILE*file;
fprintf(file,"%s\n",Buffer);
fclose(file);

四、项目未完成的功能

正在实现的功能有哪些(觉得能做出来的,技术层面已经没什么问题了,只是时间问题)
1,题库按难易比例输出

今后打算实现的功能哪些(觉得现阶段自己无法完成的功能)
客户端自动输入服务器IP地址

五、每日项目进度表及版本更新日志说明

编号功能负责人姓名完成日期该功能的工作量占总工作量的比例
V1.01,倒数5s2,随机出题3,比较输入的答案与标准答案,输出不同语句4,输出正确数,答题数,正确率阮涛(5%),余勇(15%)11.1520%
V1.11.加入学号姓名的输入以及学号纠错功能2.加入答案公布的颜色评定3,加入120s限时功能4,加入成绩等级阮涛(10%),刘晓鹏 (5%)11.1615%
V1.21,加入对错的颜色余勇11.175%
V1.31,加入考生答案输入自动删除字符前空格回车换行以及字符中的空格阮涛11.1810%
V1.41,加入文件的输入与输出刘晓鹏(5%),蒋歆銮(5%)11.1910%
V1.51,修改主函数内一部分为自定义函数阮涛11.205%
V1.61,加入网络客户端功能阮涛11.215%
V2.01,加入随机不重复出题2,加入自动修改为学号姓名的窗口刘晓鹏(5%),阮涛(5%)11.2410%
服务器模块服务器自动保存文件刘晓鹏(5%),蒋歆銮(5%)11.2510%
其他参与代码的修改刘晓鹏(5%),蒋歆銮(5%)11.2510%
总计阮涛(40%),刘晓鹏(25%),余勇(20%),蒋歆銮(15%)100%

六、相关文档地址

七、每位成员的过程体会
组长:阮涛
这是我第一次当一个项目的组长,在分配任务时我觉得我还是差了一点经验。在这次的项目作业中我学到了如何去主动学习新的知识,我知道我们组的程序不会是最好的,但我能感觉到我们每一个人的努力,我希望接下来的大学生活里我能和大家一起去解决更多的难题。
组员1:刘晓鹏
学习C语言来的第一次大作业,需要用到许多未学甚至没见过的知识与方法,而这次任务的完成同时也说明的大学与高中学习方法的区别不仅要用已知解决未知,同时也需将未知转为已知,而后者的方法便是自学,“有问题上百度”就可以解决许多问题,虽是如此但要用到更简便的方法化难为易则需要更多的思考与经验的积累,此次学习收获了许多同时也巩固了许多知识,但不能满足,每一门行业都有卓越的人才,计算机更是如此,日后的学习中需要思考地更多,用到不同的方法,待到回头望向身后时
能看到一个个脚印.
组员2:余勇
这次课程项目的设计让我学到了很多新的东西,也意识到自身能力的不足,还有很多东西没有学会,并且也意识到团队合作的重要性,只有团结合作、同心协力才能把一个个难题克服,并圆满的完成任务。
组员3:蒋歆銮
这次的小组合作让我学习到了许多知识,其实我是一直在学习(基本是对友打的代码。。)。
不过正是一次一次的代码错误让我认识到了自己,使我愈发努力起来,队友之间的差距让我有了更强的斗志。这次的学习中我也认识到了团结的力量,团结起来的小组是强大的,我们也是坚持不懈的(3点还在快乐的学习,,)。其实,学习的过程还是蛮有味道到(v),希望以后更强大吧。

八、组长想说的话
自我批评篇
在分配任务时我觉得我还是差了一点经验,任务分配不均就是我的锅。有一些基础知识不是很牢固,学过的一些东西还要去查才能记得起来。
自夸篇
虽然编辑程序遇到了很多难题,但是我们通过百度等一些途径学习,一个一个地去解决了问题。还有一次,我、刘晓鹏、蒋歆銮一起码字通宵到凌晨3点,把程序功能全做出来的时候还是有成就感的。我有点喜欢做一些比较灵活的东西,觉得能做出来就很好玩。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
乐山师范学院数据库编程期末答疑,卷子讲解,SQL server相关 如下是一个简化的员工考勤应用E-R图,请在SQL Server中创建名为YQKG的数据库,包括两个数据文件,一个日志文件,文件名按SQL Server对象命名规范定义,数据文件按10%的比例增长,数据库定义完成后输入如下样本数据。完成后请将新定义的对象及数据生成到脚本文件3_1.sql,并分离数据库。(数据表标识说明:BMXX 部门信息,QQLX 考勤类型, JBXX 基本信息,各字段定义请根据实际语义自行定义)。 2. 运行CreateTeaching.sql在系统数据库tempdb中生成解答用数据库对象,完成如下安全定义。每小题2分,共6分。 (1) 创建名为L+考生学号的登录名,密码为考生学号。完成后请将定义程序代码保存到脚本文件3_2_1.sql。 (2) 为tempdb数据库创建名为U+考生学号的带登录名的用户名,使用本题(1)中创建的登录名。完成后请将定义程序代码保存到脚本文件3_2_2.sql。 (3) 为学生表Student、课程表Course、教师表Teacher分配只读权限,成绩表分配读写权限。完成后请将程序代码保存到脚本文件3_2_3.sql。 3.运行CreateTeaching.sql在系统数据库tempdb中生成解答用数据库对象,完成如下完整性定义。每小题4分,共12分 (1) 在SC与Teacher之间定义参照完整性,外码名为FK_SC_Teacher_Tno,并定义违约处理规则:修改规则为 Cascade,删除规则为 No Action。完成后请将本操作的程序保存到脚本文件3_3_1.sql。 (2) 学生表Student中学生姓名不允许重复,将此规则保存为UQ_Sname。完成后请将本操作的程序保存到脚本文件3_3_2.sql。 (3) 在学生表上规定学生的性别只能是“男”、“女”,将此规则保存为CK_Student_Ssex。完成后请将本操作的程序保存到脚本文件3_3_3.sql。 4. 运行CreateTeaching.sql在系统数据库tempdb中生成解答用数据库对象,在SSMS中查询分析器中设计并调试如下查询,把SQL脚本代码分别保存到指定的SQL程序文件中。每小题3分,共15分 (1) 新增一位同学:200215129,王大鹏,男,23,CS,新增该生一条选课数据:该生选了数据库课程,该课主教教师未知,还未考试。完成后请将查询代码保存到脚本文件3_4_1.sql。 (2) 修改少数民族学生李勇所有选修课成绩,都加5分。完成后请将查询代码保存到脚本文件3_4_2.sql。 (3) 因为考试事故,删除计科系的所有选课信息。完成后请将查询代码保存到脚本文件3_4_3.sql。 (4) 查询与“刘晨”同一个院系的其他同学的所有信息。完成后请将查询代码保存到脚本文件3_4_4.sql。 (5) 生成选修课为达标的学生的信息,包括学号、姓名、院系、总学分,达标条件:选修课门数达到6门。完成后请将查询代码保存到脚本文件3_4_5.sql。 5. 运行CreateTeaching.sql在系统数据库tempdb中生成解答用数据库对象,为计科系生成如下选修课综合信息视图(仅包括计科系学生的选课信息,未选课的计科系学生也包括在视图的数据集中,如果未选课则课程等相关字段记为NULL,选了课但未考试则成绩等相关字段记为NULL,如果考试成绩未及格学分记为0,否则得到课程学分)。完成后请将本视图定义的程序保存到脚本文件3_5.sql。7分 6. SQL 程序设计:运行CreateTeaching.sql在系统数据库tempdb中生成解答用数据库对象,完成如下对象定义,把相应的SQL程序分别保存到指定的SQL文件中。每小题7分,共21分 (1) 为教师表定义一个名为Tr_Insert_Or_Update_Sal触发器,实现如下完整性规则:“教授的工资不得低于4000元,如果低于4000元,自动改为4000元”。请完成触发体设计,完成后请将本定义的程序保存到脚本文件3_6_1.sql。 Create Trigger Insert_Or_Update_Sal On Teacher After INSERT, UPDATE AS (2) 利用ROW_NUMBER() OVER设计一分页查询存储过程DividePage,每次调用返回指定数据表中指定页大小及页码的满足条件的记录结果集,其参数设计如下,请完成过程体设计,完成后请将本定义的程序保存到脚本文件3_6_2.sql。 Create Procedure DividePage ( @tblName varchar(255), -- 表
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值