(C++)英語抽背點名器源程序-V1.4.1
#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<<"現(xiàn)行版本:1.4.1"<<endl<<endl;
cout<<"更新日志:"<<endl;
cout<<"(2022-12-14)update-1.0.0:"<<endl;
cout<<"系統(tǒng)初步建立"<<endl<<endl;
cout<<"(2022-12-17)update-1.0.1:"<<endl;
cout<<"加入'中止抽背并統(tǒng)計'的功能" <<endl;
cout<<"將結尾等待時間從100秒改至99999秒"<<endl<<endl;
cout<<"(2023-1-15)update-1.1.0:"<<endl;
cout<<"引入'密鑰',通過一定算法(動態(tài)數+常數)在不更換名單順序的情況下實現(xiàn)不同次序,糾正偽隨機算法"<<endl;
cout<<"加入'更新日志',便于程序優(yōu)化更新"<<endl;
cout<<"將抽背完成后等待時間從99999秒改至999秒,減少非必要的內存消耗,加入時間提示"<<endl;
cout<<"解決'特殊位置無法抽到'的問題"<<endl;
cout<<"微量優(yōu)化UI,在姓名間加入換行,使姓名更易讀取"<<endl<<endl;
cout<<"(2022-1-19)update-1.1.1:"<<endl;
cout<<"簡化了簡單計算的寫法,減少運行內存"<<endl;
cout<<"將站立標記的定義類型從int改為bool"<<endl<<endl;
cout<<"(此正式版未發(fā)布)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'非法等待函數調用出現(xiàn)的警告被修復,改為合法的'Sleep'函數,可在手機Dev編譯器上運行等待函數"<<endl;
cout<<"補充了源文件注釋"<<endl<<endl;
cout<<"(2023-1-28)update-1.3.2:"<<endl;
cout<<"修改源文件注釋及少量使用說明"<<endl;
cout<<"將數組定義板塊后置,使數組總量與需抽背人數相配,按需提高上限/減少運行空間"<<endl;
cout<<"顯示每次開始運行時的系統(tǒng)時間,防止同時掛有多次運行時的統(tǒng)計錯誤"<<endl<<endl;
cout<<"(2023-2-15)update-1.4.0:"<<endl;
cout<<"密鑰隨系統(tǒng)時間動態(tài)變化,無需手動輸入,解決'手動輸入密鑰相同'的問題"<<endl;
cout<<"加入windows.h庫以支持系統(tǒng)時間調取"<<endl;
cout<<"將變量'linshi'的定義從int改為long long防止因密鑰過長造成的錯誤"<<endl<<endl;
cout<<"(2023-2-28)update-1.4.1:"<<endl;
cout<<"少量修改1.4.1版本以前的更新日志"<<endl;?
cout<<"用while的循環(huán)判定linshi是否等于上一次的抽背序號(miss),解決'特殊情況下多次抽背時序列相同'的問題"<<endl;
cout<<"結構體data從零開始記錄,刪去了取隨機數時'防止取到空結構體組'的冗余代碼(if(linshi==0){linshi=a;})"<<endl;
cout<<"在不影響抽背次序的情況下加入清屏功能(通過system( cls )實現(xiàn))"<<endl;
cout<<"彈出更新日志后的等待查看時間從120s變?yōu)?40s"<<endl;
cout<<"完善了部分使用說明"<<endl<<endl;
cout<<"如有發(fā)現(xiàn)功能異常,請及時聯(lián)系作者"<<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;//抽背功能實現(xiàn)核心部分
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<<"分數統(tǒng)計:"<<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;}