基于C语言的随机点名器

  • 【1】C语言-》控制台颜色绚丽多彩
  • 【2】C语言-》 printf 输出颜色花样百出
  • 【3】C语言-》 随机点名试炼中
  • 【4】C语言-》 随机点名项目实现

【1】C语言-》控制台颜色绚丽多彩

0=黑色 8=灰色  
1=蓝色 9=淡蓝色   
2=绿色 10=淡绿色   
3=蓝色 11=浅绿色
4=红色 12=淡红色  
5=紫色 13=淡紫色   
6=黄色 14=淡黄色   
7=白色 15=亮白色

#include <stdio.h>
#include <windows.h>
void color(int x) //设置字体颜色
{if(x>=0 && x<=15)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
else//其他白色SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}
int main(){color(6);   //在打印前设置颜色,6是黄色
printf("hello world!\n");
}

【2】C语言-》 printf 输出颜色花样百出

#include <stdio.h>
int main()
{printf("以下是测试文字:\n");printf("\033[0m默认文字\033[0m\n");printf("\033[1m高亮文字\033[0m\n");printf("\033[2m低亮文字\033[0m\n");//printf("\033[3m无效文字\033[0m\n");printf("\033[4m下划线文字\033[0m\n");printf("\033[5m闪烁文字(无效)\033[0m\n");//printf("\033[6m无效文字\033[0m\n");printf("\033[7m反显文字\033[0m\n");printf("\033[8m消隐文字(无效)\033[0m\n");printf("\n\033[31;1m字体颜色\033[0m测试文字\n");printf("\033[30m低亮黑色文字\033[0m\t\033[30;1m高亮黑色文字\033[0m\n");printf("\033[31m低亮红色文字\033[0m\t\033[31;1m高亮红色文字\033[0m\n");printf("\033[32m低亮绿色文字\033[0m\t\033[32;1m高亮绿色文字\033[0m\n");printf("\033[33m低亮黄色文字\033[0m\t\033[33;1m高亮黄色文字\033[0m\n");printf("\033[34m低亮蓝色文字\033[0m\t\033[34;1m高亮蓝色文字\033[0m\n");printf("\033[35m低亮紫色文字\033[0m\t\033[35;1m高亮紫色文字\033[0m\n");printf("\033[36m低亮浅蓝文字\033[0m\t\033[36;1m高亮浅蓝文字\033[0m\n");printf("\033[37m低亮白色文字\033[0m\t\033[37;1m高亮白色文字\033[0m\n");//printf("\033[38m测试文字\033[0m\n");//printf("\033[39m测试文字\033[0m\n");printf("\n\033[31;1m背景颜色\033[0m测试文字\n");printf("\033[40m低亮文字黑色背景\033[0m\t\033[40;1m高亮文字黑色背景\033[0m\n");printf("\033[41m低亮文字红色背景\033[0m\t\033[41;1m高亮文字红色背景\033[0m\n");printf("\033[42m低亮文字绿色背景\033[0m\t\033[42;1m高亮文字绿色背景\033[0m\n");printf("\033[43m低亮文字黄色背景\033[0m\t\033[43;1m高亮文字黄色背景\033[0m\n");printf("\033[44m低亮文字蓝色背景\033[0m\t\033[44;1m高亮文字蓝色背景\033[0m\n");printf("\033[45m低亮文字紫色背景\033[0m\t\033[45;1m高亮文字紫色背景\033[0m\n");printf("\033[46m低亮文字浅蓝背景\033[0m\t\033[46;1m高亮文字浅蓝背景\033[0m\n");printf("\033[47m低亮文字白色背景\033[0m\t\033[47;1m高亮文字白色背景\033[0m\n");//printf("\033[48m测试文字\033[0m\n");//printf("\033[49m测试文字\033[0m\n");return 0;
}

【3】C语言-》 随机点名试炼中

文件内容
studentname.txt

曹植
曹丕
小乔
孙尚香
曹操
诸葛亮
陆逊
周瑜
司马懿
张飞
刘备
关羽
庞统
袁绍
孙仲谋

#include<stdio.h>
#include<stdlib.h>
#include <windows.h>
#include <unistd.h>
#include<time.h>
char appear[15];//全局变量
int main()
{  char ID[15][30];//存放.txt的字符二维数组bzero(ID,sizeof(ID));//清空FILE*fp;fp=fopen("studentname.txt","rb");//只读方式打开文件if(fp==NULL)//判断文件是否为空{printf("error opening file\n");exit(1);//退出程序  0正常退出  其他异常退出 }else //正常打开文件{   printf("\033[45msuccessful opening file\033[0m\n");printf("\n");for(int i = 0; i<15; i++){//将文件指针fp指向的数据,以字符串的格式存入ID[]数组fscanf(fp, "%s", ID[i]);//读取文本文件内容}     }fclose(fp);int number=1;//int number;printf("\033[36m你想抽取几位幸运者:\033[0m");
//方法1:
//    while (1)
//     {   scanf("%d",&number); //有输入部分就是  选做部分
//         getchar();//         if( number == 0 || number< 1 || number > 15 )
//         {//             printf("警告!请正确输入抽取数据!\n");
//             printf("请输入 1 ~ 15内的整数: ");
//         }
//         else break;
//     }int i,j;int t=50;int q[15];srand((unsigned) time(NULL));//time(NULL)1970/1/1 0点走过的秒数//产生不同的随机数for(i=0;i<26;i++){for(j=0;j<number;j++) {q[j]=rand()%15;//通过srand给rand配置不同的系数printf("        ");//强制刷新在屏幕fflush(stdout);//解决名字长度不一样的问题printf("\r%s",ID[q[j]]);//被点到的对象fflush(stdout);//stdout像一个行缓冲区//fflush 的作用就是直接把缓冲区的内容打印到屏幕上,并清空缓冲区。不必等换行符}printf("\r                                   \r");Sleep(t);//延迟t += 5;}for(int j=0; j<number; j++){printf("\033[34m幸运者是:\033[0m\033[32m%s\033[0m\t",ID[q[j]]);//输出被点到的对象//重复刷新一行,新内容覆盖旧内容(不断闪烁不同名字)printf("\n");}return 0;
}

【4】C语言-》 随机点名项目实现

文件name.txt

艾琳
云樱
司空震

夏洛特
阿古朵
蒙恬

蒙犽
鲁班大师
李信
上官婉儿
嫦娥
猪八戒
盘古
云中君



马超
西施
沈梦溪
伽罗
盾山
司马懿
孙策
元歌
米莱迪
狂铁
弈星
裴擒虎
杨玉环
公孙离
明世隐
女娲
梦奇
苏烈
百里玄策
百里守约
鬼谷子
杨戬
雅典娜
蔡文姬
太乙真人
哪吒
诸葛亮
黄忠
大乔
东皇太一
干将莫邪
成吉思汗
钟馗
虞姬
李元芳
张飞
刘备
后羿
牛魔
孙悟空
亚瑟
姜子牙
刘邦
韩信
王昭君
兰陵王
花木兰
张良
不知火舞
娜可露露
橘右京
露娜
程咬金
安琪拉
貂蝉
关羽
老夫子
武则天
项羽
达摩
狄仁杰
芈月
吕布
周瑜
夏侯惇
甄姬
曹操
典韦
宫本武藏
李白
马可波罗
白起
扁鹊
孙膑
钟无艳
阿珂
高渐离
刘禅
庄周
鲁班七号
孙尚香
嬴政
妲己
墨子
小乔
廉颇
赵云

project.h

#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>#define M 106       // 假设最多有 106 名同学#define N "\033[0m"         // 清除 前面设置的格式#define RED "\033[1;31;40m"  // 红色高亮
#define G "\033[1;32;40m"   // 绿色高亮
#define Y "\033[1;33;40m"   // 黄色高亮// 函数的声明
bool isChinese();       // 判断输入是否为中文bool isAppear(int id);  // 功能:判断该学号是否出现过bool myPass();          // 功能:输入密码,如果输错超过 3 次就退出程序int myGUI(int num);     // 功能:显示主界面int b1(); // 功能:查看名单int b2(); // 功能:修改名单int b3(); // 功能:进行点名// 定义全局变量
struct student      // 结构体数组
{unsigned char s[30];     // 用于存放每一个名字int id;         // 学号
} stu[M];int appear[M];      // 用以保存出现过的学号

main.c

#include "project.h"
int main(int argc, char const *argv[])
{FILE *fp;       // 定义一个文件指针fp (file pointer)fp = fopen("name.txt", "r");     // 以 只读 方式打开 "name.txt"// 将名单存入 stu[k].sint k = 0;// feof(fp): 如果没到文件尾,则一直返回 0while ( !feof(fp) )//!1=0退出循环{fgets(stu[k++].s,sizeof(struct student),fp);//文件内容写进结构体}fclose(fp);     // 关闭 fp 指向的文件// 按照名单顺序设置 idfor(int i=0; i<M; i++){stu[i].id = i+1;    // id 从 1 开始}int num = 0;        // 定义输入的序号k = 1;              // 把 k 重置为 1if ( myPass() )         // 如果密码正确{while ( num != 4 ){switch ( num ){case 0:num = myGUI(num);   // 显示主界面break;case 1:num = b1();         // 查看名单break;case 2:     num = b2();         // 修改名单break;case 3:num = b3();         // 进行点名break;}}}return 0;
}
/*****************  分割线  *****************/// 功能:判断输入是否为中文
bool isChinese(char *str)//返回0:无中文,返回1:有中文
{char c;while (1){c = *str++;if (c==0) break;   //如果到字符串尾则说明该字符串没有中文字符if (c&0x80)        //如果字符高位为1且下一字符高位也是1则有中文字符if (*str & 0x80) return true;}return false;
}
/*****************  分割线  *****************/// 功能:判断该学号是否出现过
bool isAppear(int id)
{for(int i=0; i<M; i++){if(appear[i] == id) return true;}return false;
}
/*****************  分割线  *****************/// 功能:输入密码,如果输错超过 3 次就退出程序
bool myPass()
{   char pw[7];         // 用于存放从 键盘 输入的密码printf("请输入密码:");for(int i=0; i<3; i++){gets(pw);       // 输入密码if( strcmp(pw, "wzg666") == 0 )  // 将输入的密码 逐个 与"wzg666"比较{printf(G"密码输入正确!\n"N);return true;}else if( i<2 ) printf(RED"密码错误!你还有 %d 次机会\n请重新输入:"N, 2-i);}return false;
}
/*****************  分割线  *****************/// 功能:显示主界面
int myGUI(int num)
{printf("|\t欢迎使用随机点名器!\t|\n");printf("|   1. 查看名单   2. 修改名单   |\n");printf("|   3. 进行点名   4. 退出程序   |\n");usleep(600*1000);       // 延时 600 mswhile (1){printf("请输入序号以执行相应功能:");int sc = scanf("%d", &num);getchar();if( sc == 0 || num < 0 || num > 4 )printf(RED"读取错误!\n"N);else break;}return num;
}
/*****************  分割线  *****************/// 功能:查看名单
int b1()
{for(int i=0; i<M; i++)printf("| id: %03d | name: %s", i+1, stu[i].s);printf("\n");usleep(600*1000);return 0;
}
/*****************  分割线  *****************/// 功能:修改名单
int b2()
{int id;printf("请输入需要修改的id: ");while (1){int sc = scanf("%d", &id);getchar();if( sc == 0 || id < 1 || id > 106 ){printf(RED"读取错误!\n"N);printf("请输入 1 ~ 106 内的整数: ");}else break;}printf("原来的名字:%s", stu[id-1].s);   // id 是从 1 开始的printf("现在的名字:");                 // 因此对应的数组下标为 id-1while (1){char *str = fgets(stu[id-1].s, 100, stdin);if( !isChinese(str) ){printf(RED"读取错误!\n"N);printf("请输入中文名字: ");}else break;}usleep(600*1000);return 0;
}
/*****************  分割线  *****************/// 功能:进行点名
int b3()
{int x = 0;      // 用于存放人数printf("请输入要抽取的人数:");while (1){int sc = scanf("%d", &x);getchar();if( sc == 0 || x < 1 || x > 106 ){printf(RED"读取错误!\n"N);printf("请输入 1 ~ 106 内的整数: ");}else break;}// 每循环一次,就获得一个随机数,这个随机数就是 idfor(int i=1; i<=x; i++){int t = 100*1000;                 // 设定延迟时间的初始值: 100mstime_t n = time(NULL);          srand(n);                       // 获得随机数种子int rand_id = rand() % (M+1);   // 取随机数范围: 0 ~ (M+1)// 只有当通过 随机数 产生的 rand_id 没有出现过的时候,// 才将那个 id 对应的名字输出// 否则 i--, 再继续上一次循环if( isAppear(rand_id) ){i--;continue;}appear[i] = rand_id;            // 将出现过的 随机学号 保存起来// 从名单的第 1 个名字开始,遍历数组,直至出现随机数对应的名字for(int j=1; j<=rand_id; j++){char *find = strchr(stu[j].s, '\n'); // 查找 换行符if(find)                            // 如果 find 不为空指针*find = '\r';                   // 就使 光标 移到左边usleep(t);printf(G"第 %d 位:"N,i);if( j < (rand_id * 2/3) )   // 设置速度变化的节点{printf(RED"%+12s"N, stu[j].s);t -= 420;               // 延迟时间不断减少,即循环变快}else if( j == rand_id )     // 直至出现 rand_id,循环结束{usleep(420*1000);printf(G"%+12s\n"N, stu[j].s);usleep(600*1000);break;}else{printf(Y"%+12s"N, stu[j].s);t += 8000;              // 延迟时间不断增加,即循环变慢}fflush(stdout);}}return 0;
}

【基于C语言的随机点名器】相关推荐

  1. 基于C语言的随机点名器设计

    基于C语言的随机点名器设计 项目描述 使用C语言,制作一个在命令行运行的点名程序,该程序运行时可指定班级的花名册文件,运行后在界面上显示随机抽取名字的过程,速度由快到慢,逐渐定格到某一个"幸 ...

  2. C语言实现随机点名器

    目录 1.程序描述 2.程序功能 3.功能详细实现过程 学生结构体声明和定义 菜单(menu)函数 文件读取和保存函数 查询函数 点名函数 rand函数 点名函数实现 点名次数归零函数 字体颜色变化函 ...

  3. JavaScript 语言之随机点名器制作训练

    题目 为了活跃班级气氛,Mr.王想通过一个随机点名器来随机抽取学员回答问 题,故安排你来使用 HTML+CSS+JavaScript 来实现如下图所示的随机点名 器,第一张图是随机点名器的初始页面,当 ...

  4. 基于R语言的随机森林算法运用

    有关数据挖掘中的分类算法有很多,如贝叶斯判别法.Fisher判别法.决策树.支持向量机和随机森林等,本文将对随机森林做一个介绍,并使用R语言实现该算法的应用. 随机森林算法的实质是基于决策树的分类器集 ...

  5. java kdj_基于Java语言开发的个性化股票分析技术随机指数[KDJ].doc

    基于Java语言开发的个性化股票分析技术:随机指数(KDJ) KDJ指标又叫随机指标,是由乔治·蓝恩博士(GeorgeLane)最早提出的,是一种相当新颖.实用的技术分析指标,它起先用于期货市场的分析 ...

  6. java kdj_基于java语言开发的个性化股票分析技术:随机指数(kdj).doc

    基于java语言开发的个性化股票分析技术:随机指数(kdj).doc 还剩 17页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环 ...

  7. C语言随机点名器程序

    //一个随机点名器程序,因为代码量较少,我就没有封装函数#include <stdio.h> #include <stdlib.h> #include <string.h ...

  8. c语言随机点名器(源码)

    突发奇想写了个随机点名器-以供使用 随机点名器 main函数 #include "myList.h"#define FILENAME "stu.txt"void ...

  9. c语言编写订货系统,学位论文_基于c语言的仓库订货系统的仿真.doc

    学位论文_基于c语言的仓库订货系统的仿真 本科毕业论文(设计.创作) 题目: 基于C语言的仓库订货系统的仿真 学生姓名: 学号: 所在系院: 信息与通信技术系 专业: 电子信息工程 入学时间: 201 ...

最新文章

  1. MySQL开启远程连接权限
  2. [转] Jenkins实战演练之Windows系统节点管理
  3. 【Linux】34. shell脚本判断当前年份是否正确
  4. 8086存储器编址 和 I/O编址
  5. Java 的Comparator比较器用法
  6. Yii中使用的简单方法
  7. 从工程文化和运维理念理解Netflix
  8. C语言(CED)编写程序,求sum=1*1*1+2*2*2+3*3*3+4*4*4+5*5*5+····+n*n*n
  9. Windows域环境下部署ISA Server 2006防火墙(二)
  10. RocketMQ的各种集群模式的搭建和消息可靠性保证和服务可用性描述
  11. 萌新学python(输入与输出)
  12. 又一款神器:半小时带你轻松上手k8s
  13. UltraEdit汇编语言高亮
  14. [NPOI2.0] 使用NPOI读取和导出Excel文件
  15. layui表单基本使用
  16. 我也来开发2048之确定思路
  17. python暴力破解压缩密码?
  18. 论文笔记:TrafficPredict: Trajectory Prediction for Heterogeneous Traffic-Agents
  19. 一文详解超纤皮和真皮的区别,别再傻傻分不清了
  20. SpringBoot+Vue+Element-UI实现人事管理系统

热门文章

  1. linux解压gcc,Linux,GCC安装(解压版)
  2. 2.2 法学的历史(二):中国法学的历史
  3. java生成excel/zip压缩文件下载
  4. ENVI执行几何校正+地形校正+大气校正
  5. R使用仿真数据快速构建列线图(nomogram)示例
  6. 7 .Linux文件目录类——pwd,ls,cd,mkdir,rmdir,touch,cp,rm,mv,cat,more,less,echo,head,tail,> 重定向 >> 追加,history
  7. 【FPGA】 十二、Vivado DDS IP核实现扫频信号
  8. OpenGL入门(一)
  9. WM5的智能手机D600共享电脑上网设置
  10. 【文献调研】在Pubmed上搜索特定影响因子期刊上的论文