我是靠谱客的博主 温暖毛巾,最近开发中收集的这篇文章主要介绍C++实现随机点名器(支持文件读入、手动输入、不重复点名),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录一览

一.使用效果​​​

二.代码分析功能分解

1.copyright(制作说明模块)

2.input(选择/输入模块)

3.work(核心工作点模块)

4.main(主函数)

三.完整源码资源下载



一.使用效果




 



二.代码分析功能分解

1.copyright(制作说明模块)

Sleep函数
使用时需要包含头文件<windows.h>
函数原型:void Sleep(DWORD ms);
Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是Sleep(1000)。

copyright模块功能声明版权或者制作说明

-代码

inline void copyright()
{
 cout<<"Program Name: Random Name.n";
 cout<<"Improver: DSn";
 Sleep(500);
 cout<<"Get ready.n"<<endl;
 //Sleep(1000);
}

2.input(选择/输入模块)

①fopen函数
使用时需要包含头文件<stdio.h>或者<cstdio>
函数原型:FILE *fopen(const char *filename, const char *mode);
调用方式:fopen(文件名,使用文件方式)
本程序中使用文件方式有:r(只读)、w+(读和写--指定文件不存在时建立新文件)

②rewind函数
使用时需要包含头文件<stdio.h>或者<cstdio>
函数原型:void rewind(FILE *fp);
功能: 用rewind函数可以使文件位置标记指向文件开头

input模块功能可以选择输入若干名字的方式,1表示可以直接读取文件;2表示直接在控制台输入若干名字

-代码

inline void input()
{
 cout<<"Welcome OVO~nn输入1为读取文件(.txt), 输入2为手动输入若干名字.n";
 cin>>temp;
 getchar();
 
 if(temp == 1) { //导入txt文本文件 
 	
	cout<<"请输入文件名:n";
 	cin.getline(filename,MAXN);
 	fp=fopen(filename,"r"); //读入文本文件
	  
 if(fp==NULL) { 
	cout<<"无法打开文件!n";
	exit(0);
  } 
  
}else{ //手动输入名字 
	
  	cout<<"输入几个名字(名字间以空格分隔, 以-1结束):n";
  	fp=fopen("Test111.txt","w+");
  	cin>>namestr;
  	while(namestr[0] != '-') {
  		fputs(namestr,fp);
  		fputc('n',fp);
  		cin>>namestr;
  	}
  	rewind(fp);//使文件位置标记返回文件开头 
  	
}
 
 puts("Everything is ready.n");
}

3.work(核心工作点模块)

①fgets函数
使用时需要包含头文件<stdio.h>或者<cstdio>
函数原型:char *fgets(char *str, int n, FILE *stream);
调用形式: fgets(str, n, fp)
功能: 从fp指向的文件读入一个长度为(n-10)的字符串(因为最后一个放''),存放到字符数组str中

②sscanf函数
使用时需要包含头文件<stdio.h>或者<cstdio>
函数原型:int sscanf(const char *buffer , const char *format , [argument ]...);
功能:从一个字符串中读进与指定格式相符的数据的函数,即sscanf会从buffer里读取数据,依照format的格式将数据写入到argument里

③getch函数
使用时需要包含头文件<conio.h>
函数原型:int getch(void)
功能:从控制台读取一个字符,但不显示在屏幕上,此程序用这个来判断用户是否按下空格以决定是否开始输出随机名

④随机数产生函数(time函数、srand函数 和 rand函数)---核心

  1. time函数
    使用时需要包含头文件<time.h>
    函数原型: time_t time(time_t *timer)
    time(0)的返回的是从1970 UTC Jan 1 00:00到当前时刻的秒数,为unsigned int类型
  2. srand函数
    使用时需要包含头文件<stdlib.h>
    函数原型:void srand(unsigned int seed);
    srand()为初始化随机数发生器,用于设置rand()产生随机数时的种子。
    如果不调用srand()的话,默认为srand(1),也就是seed是固定的,那么多次运行固定seed的程序rand()所得到的结果是不变的
  3. rand函数
    使用时需要包含头文件<stdlib.h>
    函数原型:int rand(void);
    rand()函数不需要任何参数,直接返回一个随机数,注意,这个随机数是有范围的,在0~RAND_MAX之间,RAND_MAX一般最小取值为32767,其具体值在头文件stdlib.h中进行定义

实现防止重复抽取功能 
  while(occupy[randnum]) randnum=rand()%cnt;
  occupy[randnum]=true;

work模块功能实现读入名字信息和随机抽取不重复的人名

-代码

inline void work()
{ 
	
	while(fgets(line,sizeof(line),fp)) if(line[0]!='n'&&line[0]!=' ') sscanf(line,"%sn",info[cnt++].name);//input information
 	cout<<"按下空格生成一个随机名字,按其它键则退出程序.n";
  
 	srand(time(0));//time(0)的返回的是从1970 UTC Jan 1 00:00到当前时刻的秒数,为unsigned int类型
 while((ch=getch())==' ') //实现随机功能的核心部分! 
 {

  int randnum=rand()%cnt; //产生随机数randnum 
  
  while(occupy[randnum]) randnum=rand()%cnt; //实现防止重复抽取功能 
  occupy[randnum]=true;
  
  printf("%sn",info[randnum].name);
  system("pause");//从程序里调用“pause”命令。
    
  if(++num==cnt)
  {
   puts("~Program has been exited.n");
   puts("~Thank you for your using.n");
   return ;
  }
  
 }
 
}

4.main(主函数)

-代码

int main()
{
 copyright();//Production instructions  制作说明模块 
 input();//Input module 输入模块 
 work();//Core work points 核心工作点模块 
 fclose(fp);//关闭数据文件 
 return 0;
}

三.完整源码资源下载

欢迎去我的资源进行下载(有源码和exe),你的点赞是我莫大的动力~
传送门:随机点号器 v1.0    

最后

以上就是温暖毛巾为你收集整理的C++实现随机点名器(支持文件读入、手动输入、不重复点名)的全部内容,希望文章能够帮你解决C++实现随机点名器(支持文件读入、手动输入、不重复点名)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部