目录
引言
需要源文件或exe的可以私信我,也可以代理编辑
- 随机点名系统的应用场景(课堂、会议、活动等
- 传统点名方式的局限性
- 技术解决方案的价值与优势
系统需求分析
- 功能需求:随机选择、多功能点名、指定性操作
- 非功能需求:响应速度、兼容性、界面美化
技术选型与架构设计
- 应用语言:C++
- 随机算法设计:随机数生成(Cpp)
核心功能实现
- 名单录入:仅支持代码内更改
- 随机选择:算法实现防伪随机现象
- 交互设计:点击触发、动画效果、舒适界面
扩展功能
- 多模式支持:单人/多人抽取、分组抽取
总结与展望
- 项目总结:目前仍只实现控制台模式,后续等待开发,且希望更多技术人员参与开发
- 未来改进方向:界面美化、动态增强、支持本地导入以及动态增删改查、AI 语音合成、云同步等功能
代码大纲
1. 单人点名
2. 双人点名
3. 列点名
4. 组点名
美化预期
1.通过较为和谐的颜色调节整体页面。
2.通过更改字体颜色等使程序更加完美。
3.通过动画使程序美观
代码
美化输出
void slowout(char* p)
{
while (1)
{
if (*p != 0)
printf("%c", *p++);
else
break;
Sleep(20);
}
Sleep(500);
}
上述代码为让文字逐字输出,可以使字符串缓慢输出
void setsize(int col, int row)
{
char cmd[64];
sprintf(cmd, "mode con cols=%d lines=%d", col, row);
system(cmd);
}
这一串作用也是美化输出
void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
以上为隐藏光标的函数
随机抽取动画
这一部分作为随机抽取动画,会在抽取式效果更真实
1. 单人名单打印
void all_print()
{
string name[50]={"名单"};
for(int i=0;i<44;i++){
cout<<"恭喜幸运的";
cout<<name[i];
cout<<"准备发言";
Sleep(0.5);
system("cls");
}
}
2. 双人名单打印
void all_print_two()
{
string name[50]={"名单"};
for(int i=1;i<44;i++){
cout<<"恭喜幸运的";
cout<<name[i];
cout<<"和";
cout<<name[i-1];
cout<<"准备发言";
Sleep(0.5);
system("cls");
}
}
3. 列打印
void all_print_lie()
{
string lie[9]={"第一列","第二列","第三列","第四列","第五列","第六列","第七列","第八列"};
for(int i=0;i<8;i++){
for(int j = 0;j<8;j++){
cout<<"恭喜幸运的";
cout<<lie[j];
cout<<"选择列内员或全体准备发言";
Sleep(0.5);
system("cls");
}
}
}
这里我分了8列,有需求的可以自己改变
4. 组打印
void all_print_zu()
{
string zu[5]={"第一组","第二组","第三组","第四组"};
for(int i=0;i<4;i++){
for(int j = 0;j<4;j++){
cout<<"恭喜幸运的";
cout<<zu[j];
cout<<"选择组员或全体准备发言";
Sleep(1);
system("cls");
}
}
}
这里分了4组
主函数
下面就是随机点名系统的主体了,包含了开始的界面、说明以及随机抽取内容
int main()
{
int ch;
SetConsoleTitle("随机点名系统1.20 Willstar");
HideCursor();
HANDLE hOutPut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_FONT_INFOEX consoleCurrentFontEx;
consoleCurrentFontEx.cbSize = sizeof(CONSOLE_FONT_INFOEX);
consoleCurrentFontEx.nFont = 0;
consoleCurrentFontEx.dwFontSize.X = 60;//是字体的宽度
consoleCurrentFontEx.dwFontSize.Y = 100;//字体的高度
consoleCurrentFontEx.FontFamily = TMPF_VECTOR;
consoleCurrentFontEx.FontWeight = 400;//字体的粗细(正常字体400 加粗700)
//wcscpy_s(consoleCurrentFontEx.FaceName, __TEXT("Courier"));
SetCurrentConsoleFontEx(hOutPut, FALSE, &consoleCurrentFontEx);
system("color E4");
//system("color 02");
cout<<" 随机点名系统 \n 1.2.0 \n 奶黄限定版本\n Willstar团队 出品"<<endl;
cout<<"系统说明:\n1.按下R键随机抽取\n2.按下T键随机抽取2人\n3.按下E键抽取小组\n4.按下Y键抽取列\n5.抽取后按下任意键重新抽取\n6.禁止按下数字/快捷键/功能键,严禁刷屏\n7.按下P键全体安静\n";
string name[50]={"名单"};
string zu[5]={"第一组","第二组","第三组","第四组"};
string lie[9]={"第一列","第二列","第三列","第四列","第五列","第六列","第七列","第八列"};
Sleep(1000);
system("pause");
while (1)
{
system("cls");
system("color E4");
cout << "按“R”随机抽取1人\n按“T”随机抽取2人\n按“E”先抽取一组\n按“Y”抽取一列" << endl;
srand(time(NULL)); // 初始化随机数生成器
int randinta = rand() % 44; // 生成 0 到 99 之间的随机数
int randintb = rand() % 44; // 生成 0 到 99 之间的随机数
int randintc = rand() % 4;
int randintd = rand() % 9;
srand(time(NULL)); // 初始化随机数生成器
ch = getch();
switch (ch-32) {
case 87:all_print();
slowout("恭喜幸运的");
cout<<"A";
slowout("准备发言\n"); break;
case 83:all_print();
slowout("恭喜幸运的");
cout<<"B";
slowout("准备发言\n"); break;
case 65:all_print();
slowout("恭喜幸运的");
cout<<"C";
slowout("准备发言\n"); ; break;
case 68:all_print();
slowout("恭喜幸运的");
cout<<"D";
slowout("准备发言\n"); break;
case 90:all_print_two();
slowout("恭喜幸运的");
cout<<"A和B";
slowout("准备发言\n"); break;
case 88:all_print_two();
slowout("恭喜幸运的");
cout<<"C和D";
slowout("准备发言\n"); break;
case 67:all_print_two();
slowout("恭喜幸运的");
cout<<"E和F";
slowout("准备发言\n"); break;
case 82:all_print();
slowout("恭喜幸运的");
cout<<name[randinta];
slowout("准备发言\n");
srand(time(NULL)); // 初始化随机数生成器
break;
case 84:all_print_two();
slowout("恭喜幸运的");
cout<<name[randinta];
cout<<"和";
cout<<name[randintb];
slowout("准备发言\n");
srand(time(NULL)); // 初始化随机数生成器
break;
case 69:all_print_zu();
slowout("恭喜幸运的");
cout<<zu[randintc];
slowout("选择组员或全体准备发言\n");
srand(time(NULL)); // 初始化随机数生成器
break;
case 89:all_print_lie();
slowout("恭喜幸运的");
cout<<lie[randintd];
slowout("选择列内员或全体准备发言\n");
srand(time(NULL)); // 初始化随机数生成器
break;
case 80:system("cls");
system("color fc");
for(int i=1;i<=10;i++){
cout<<"全体保持安静\n";
}
break;
default:slowout("输入有误!\n");break;
}
srand(time(NULL)); // 初始化随机数生成器
system("pause");
srand(time(NULL)); // 初始化随机数生成器
}
END:;
}
首先,通过aksma值接受键盘输入,然后根据输入内容进行相应的操作。
当然,这里也存在一些“暗箱操作”,比如按下指定按键时,你可以指定一个人或两个人上台发言或回答问题,这些都可以自己更改。
按键WASD:指定单人
按键ZXC:指定双人
完整代码
#include<bits/stdc++.h>
#include<windows.h>
#include<dir.h>
#include <conio.h>
#include<Windows.h>//必须包含这个头
#include<iostream>
using namespace std;
void slowout(char* p)
{
while (1)
{
if (*p != 0)
printf("%c", *p++);
else
break;
Sleep(20);
}
Sleep(500);
}
void setsize(int col, int row)
{
char cmd[64];
sprintf(cmd, "mode con cols=%d lines=%d", col, row);
system(cmd);
}
void all_print()
{
string name[50]={"名单"};
for(int i=0;i<44;i++){
cout<<"恭喜幸运的";
cout<<name[i];
cout<<"准备发言";
Sleep(0.5);
system("cls");
}
}
void all_print_two()
{
string name[50]={"名单"};
for(int i=1;i<44;i++){
cout<<"恭喜幸运的";
cout<<name[i];
cout<<"和";
cout<<name[i-1];
cout<<"准备发言";
Sleep(0.5);
system("cls");
}
}
void all_print_zu()
{
string zu[5]={"第一组","第二组","第三组","第四组"};
for(int i=0;i<4;i++){
for(int j = 0;j<4;j++){
cout<<"恭喜幸运的";
cout<<zu[j];
cout<<"选择组员或全体准备发言";
Sleep(1);
system("cls");
}
}
}
void all_print_lie()
{
string lie[9]={"第一列","第二列","第三列","第四列","第五列","第六列","第七列","第八列"};
for(int i=0;i<8;i++){
for(int j = 0;j<8;j++){
cout<<"恭喜幸运的";
cout<<lie[j];
cout<<"选择列内员或全体准备发言";
Sleep(0.5);
system("cls");
}
}
}
void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
int main()
{
int ch;
SetConsoleTitle("随机点名系统1.20 Willstar");
HideCursor();
HANDLE hOutPut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_FONT_INFOEX consoleCurrentFontEx;
consoleCurrentFontEx.cbSize = sizeof(CONSOLE_FONT_INFOEX);
consoleCurrentFontEx.nFont = 0;
consoleCurrentFontEx.dwFontSize.X = 60;//是字体的宽度
consoleCurrentFontEx.dwFontSize.Y = 100;//字体的高度
consoleCurrentFontEx.FontFamily = TMPF_VECTOR;
consoleCurrentFontEx.FontWeight = 400;//字体的粗细(正常字体400 加粗700)
//wcscpy_s(consoleCurrentFontEx.FaceName, __TEXT("Courier"));
SetCurrentConsoleFontEx(hOutPut, FALSE, &consoleCurrentFontEx);
system("color E4");
//system("color 02");
cout<<" 随机点名系统 \n 1.2.0 \n 奶黄限定版本\n Willstar团队 出品"<<endl;
cout<<"系统说明:\n1.按下R键随机抽取\n2.按下T键随机抽取2人\n3.按下E键抽取小组\n4.按下Y键抽取列\n5.抽取后按下任意键重新抽取\n6.禁止按下数字/快捷键/功能键,严禁刷屏\n7.按下P键全体安静\n";
string name[50]={"名单"};
string zu[5]={"第一组","第二组","第三组","第四组"};
string lie[9]={"第一列","第二列","第三列","第四列","第五列","第六列","第七列","第八列"};
Sleep(1000);
system("pause");
while (1)
{
system("cls");
system("color E4");
cout << "按“R”随机抽取1人\n按“T”随机抽取2人\n按“E”先抽取一组\n按“Y”抽取一列" << endl;
srand(time(NULL)); // 初始化随机数生成器
int randinta = rand() % 44; // 生成 0 到 99 之间的随机数
int randintb = rand() % 44; // 生成 0 到 99 之间的随机数
int randintc = rand() % 4;
int randintd = rand() % 9;
srand(time(NULL)); // 初始化随机数生成器
ch = getch();
switch (ch-32) {
case 87:all_print();
slowout("恭喜幸运的");
cout<<"A";
slowout("准备发言\n"); break;
case 83:all_print();
slowout("恭喜幸运的");
cout<<"B";
slowout("准备发言\n"); break;
case 65:all_print();
slowout("恭喜幸运的");
cout<<"C";
slowout("准备发言\n"); ; break;
case 68:all_print();
slowout("恭喜幸运的");
cout<<"D";
slowout("准备发言\n"); break;
case 90:all_print_two();
slowout("恭喜幸运的");
cout<<"A和B";
slowout("准备发言\n"); break;
case 88:all_print_two();
slowout("恭喜幸运的");
cout<<"C和D";
slowout("准备发言\n"); break;
case 67:all_print_two();
slowout("恭喜幸运的");
cout<<"E和F";
slowout("准备发言\n"); break;
case 82:all_print();
slowout("恭喜幸运的");
cout<<name[randinta];
slowout("准备发言\n");
srand(time(NULL)); // 初始化随机数生成器
break;
case 84:all_print_two();
slowout("恭喜幸运的");
cout<<name[randinta];
cout<<"和";
cout<<name[randintb];
slowout("准备发言\n");
srand(time(NULL)); // 初始化随机数生成器
break;
case 69:all_print_zu();
slowout("恭喜幸运的");
cout<<zu[randintc];
slowout("选择组员或全体准备发言\n");
srand(time(NULL)); // 初始化随机数生成器
break;
case 89:all_print_lie();
slowout("恭喜幸运的");
cout<<lie[randintd];
slowout("选择列内员或全体准备发言\n");
srand(time(NULL)); // 初始化随机数生成器
break;
case 80:system("cls");
system("color fc");
for(int i=1;i<=10;i++){
cout<<"全体保持安静\n";
}
break;
default:slowout("输入有误!\n");break;
}
srand(time(NULL)); // 初始化随机数生成器
system("pause");
srand(time(NULL)); // 初始化随机数生成器
}
END:;
}
效果图片



总结
以上就是全部内容了
复制代码麻烦在评论区吱一声
有程序猿想合作的麻烦私信或邮箱加入我们
这里是Willstar团队官方账号,下期不见不散。

被折叠的 条评论
为什么被折叠?



