欢迎光临散文网 会员登陆 & 注册

(C++)英语抽背点名器源程序-V1.4.1

2023-02-28 08:43 作者:进击的水瓶  | 我要投稿

#include<iostream>

#include<stdlib.h>

#include<windows.h>

using namespace std;//固定格式


int main(){

int a,b,c,miss;

long long key,linshi;//数据的类型声明


SYSTEMTIME sys; 

GetLocalTime(&sys);

printf("%4d/%02d/%02d %02d:%02d:%02d.%03d 星期%1d",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute, sys.wSecond,sys.wMilliseconds,sys.wDayOfWeek);//本地时间的调用 

cout<<endl;

long long wDay=sys.wDay;

cout<<"已将密钥设定为:";

key=sys.wMonth*100000000000+wDay*1000000000+sys.wHour*10000000+sys.wMinute*100000+sys.wSecond*1000+sys.wMilliseconds;

cout<<endl<<key;

cout<<endl<<"(如需查看更新日志,请在输入人数时输入'0')"<<endl<<endl;


cout<<"输入人数及姓名(≥3):";

cin>>a;


if(a==0){

system("cls");

cout<<"编译器:Dev-C++ 5.11/TDM-GCC 4.9.2 64-bit Release"<<endl;

cout<<"现行版本:1.4.1"<<endl<<endl;

cout<<"更新日志:"<<endl;


cout<<"(2022-12-14)update-1.0.0:"<<endl;

cout<<"系统初步建立"<<endl<<endl;


cout<<"(2022-12-17)update-1.0.1:"<<endl;

cout<<"加入'中止抽背并统计'的功能" <<endl;

cout<<"将结尾等待时间从100秒改至99999秒"<<endl<<endl;


cout<<"(2023-1-15)update-1.1.0:"<<endl;

cout<<"引入'密钥',通过一定算法(动态数+常数)在不更换名单顺序的情况下实现不同次序,纠正伪随机算法"<<endl;

cout<<"加入'更新日志',便于程序优化更新"<<endl;

cout<<"将抽背完成后等待时间从99999秒改至999秒,减少非必要的内存消耗,加入时间提示"<<endl;

cout<<"解决'特殊位置无法抽到'的问题"<<endl;

cout<<"微量优化UI,在姓名间加入换行,使姓名更易读取"<<endl<<endl;


cout<<"(2022-1-19)update-1.1.1:"<<endl;

cout<<"简化了简单计算的写法,减少运行内存"<<endl;

cout<<"将站立标记的定义类型从int改为bool"<<endl<<endl;


cout<<"(此正式版未发布)update-1.2.0:"<<endl;

cout<<"完全改变数据的结构,用结构体data整合原变量,使程序结构更清晰,做好排序功能准备"<<endl;

cout<<"抽背人数上限定为100人,减少存储空间"<<endl<<endl;


cout<<"(2023-1-21)update-1.3.0:"<<endl;

cout<<"加入数据的排序功能(冒泡排序),在输出时按需输出"<<endl;

cout<<"将程序.cpp的源文件中分段并加入注释,便于理解和改写"<<endl<<endl;


cout<<"(2023-1-23)update-1.3.1:"<<endl;

cout<<"头文件从bits/stdc++.h中拆解出两条有效头文件--iostream(基础结构头文件)和stdlib.h(rand函数头文件)"<<endl;

cout<<"加入windows.h头文件,原'_sleep'非法等待函数调用出现的警告被修复,改为合法的'Sleep'函数,可在手机Dev编译器上运行等待函数"<<endl;

cout<<"补充了源文件注释"<<endl<<endl;


cout<<"(2023-1-28)update-1.3.2:"<<endl;

cout<<"修改源文件注释及少量使用说明"<<endl;

cout<<"将数组定义板块后置,使数组总量与需抽背人数相配,按需提高上限/减少运行空间"<<endl;

cout<<"显示每次开始运行时的系统时间,防止同时挂有多次运行时的统计错误"<<endl<<endl;


cout<<"(2023-2-15)update-1.4.0:"<<endl;

cout<<"密钥随系统时间动态变化,无需手动输入,解决'手动输入密钥相同'的问题"<<endl;

cout<<"加入windows.h库以支持系统时间调取"<<endl;

cout<<"将变量'linshi'的定义从int改为long long防止因密钥过长造成的错误"<<endl<<endl;


cout<<"(2023-2-28)update-1.4.1:"<<endl;

cout<<"少量修改1.4.1版本以前的更新日志"<<endl; 

cout<<"用while的循环判定linshi是否等于上一次的抽背序号(miss),解决'特殊情况下多次抽背时序列相同'的问题"<<endl;

cout<<"结构体data从零开始记录,删去了取随机数时'防止取到空结构体组'的冗余代码(if(linshi==0){linshi=a;})"<<endl;

cout<<"在不影响抽背次序的情况下加入清屏功能(通过system( cls )实现)"<<endl;

cout<<"弹出更新日志后的等待查看时间从120s变为240s"<<endl;

cout<<"完善了部分使用说明"<<endl<<endl;


cout<<"如有发现功能异常,请及时联系作者"<<endl;

cout<<"(240秒后自动关闭)";

Sleep(240000);

return 0;//结束

}//更新日志


struct test{

int total;

bool bj;

string name;

}data[a+1];//结构体 

for(int i=0;i<a;i++){cin>>data[i].name;}


for(int i=0;i<a;i++){

data[i].total=0;

data[i].bj=true;}//批量定义结构体数据 


cout<<endl<<"输入抽背人数:";

cin>>b;

cout<<"在决定分数时按'0'以停止,按'2'以清空屏幕"<<endl;

Sleep(2000);//人数,名字的输入


for(int i=1;i<=b;i++){

linshi=(key/202+rand()%a+14+b*7)%a;//取随机数


while(linshi==miss){linshi+=1;}

linshi=linshi%a;

cout<<endl;

cout<<i<<"."<<data[linshi].name<<endl;//抽背功能实现核心部分


cout<<"分数决定(1或-1):";

cin>>c;

if(c==2){

system("cls");

cout<<endl;

cout<<i<<"."<<data[linshi].name<<endl;

cout<<"分数决定(1或-1):";

cin>>c;}

if(c==0){break;}

if(c==-1){data[linshi].bj=false;b+=1;}

if(c==1){data[linshi].bj=true;}

data[linshi].total+=c;

miss=linshi;}//miss令,分数计算,标记


for(int i=1;i<a;i++){

for(int j=1;j<a;j++){//冒泡排序法

if(data[j-1].total<data[j].total){

swap(data[j-1].name,data[j].name);

swap(data[j-1].bj,data[j].bj);

swap(data[j-1].total,data[j].total);}}}//交换排序功能


cout<<endl<<endl<<"分数统计:"<<endl;

for(int i=0;i<a;i++){

if(data[i].bj==false){cout<<"(站立中)";}

else{cout<<"        ";}

cout<<data[i].name<<" "<<data[i].total<<endl;}


cout<<endl<<"999秒后自动关闭";

Sleep(999999);//按序输出,结束


return 0;}

(C++)英语抽背点名器源程序-V1.4.1的评论 (共 条)

分享到微博请遵守国家法律