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: DS\n";
 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~\n\n输入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)的字符串(因为最后一个放'\0'),存放到字符数组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,"%s\n",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("%s\n",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    

  • 13
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

重剑DS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值