(C++)英語抽背點名器源程序-V1.3.1
#include<iostream>
#include<stdlib.h>
#include <windows.h>
using namespace std;//固定格式
int main(){?
int a,b,c,linshi,miss;
long long key;
struct test{
int total;
bool bj;
string name;
}data[100];//數據的類型聲明?
for(int i=0;i<=100;i++){
data[i].total=0;
data[i].bj=true;}
cout<<"(如需查看更新日志,請在密鑰欄輸入‘0’)"<<endl<<endl;
cout<<"請輸入隨機的八位數字密鑰:";
cin>>key;
if(key==0){
cout<<"現(xiàn)行版本:1.3.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<<"加入'更新日志'"<<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<<"如有發(fā)現(xiàn)功能異常,請及時聯(lián)系作者"<<endl;
cout<<"(120秒后自動關閉)";
Sleep(120000);
return 0;//結束?
}//更新日志?
cout<<"輸入人數及姓名:";
cin>>a;
for(int i=1;i<=a;i++){cin>>data[i].name;}
cout<<endl<<"輸入抽背人數:";
cin>>b;
cout<<"按'0'以停止"<<endl;
Sleep(2000);//人數,名字的輸入?
for(int i=1;i<=b;i++){
linshi=(key/202+rand()%a+14+b*7)%a;//取隨機數?
if(linshi==miss){linshi+=1;}
if(linshi>a){linshi-=a;}
if(linshi==0){linshi=a;}
cout<<endl;
cout<<i<<"."<<data[linshi].name<<endl; //抽背功能實現(xiàn)核心部分?
cout<<"分數決定(1或-1,0為中止并統(tǒng)計)";
cin>>c;
if(c==0){break;}
if(c==1){data[linshi].bj=true;}
if(c==-1){data[linshi].bj=false;b+=1;}
data[linshi].total+=c;
miss=linshi;}//miss令,分數計算,標記?
for(int i=2;i<=a;i++){
for(int j=2;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=1;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;}