zoukankan      html  css  js  c++  java
  • 抽签小程序(C语言随机数)

    最近班级里需要人员抽签参加活动,闲来无事用java的(Math.random()方法||java.util.Random())写了一个随机抽签的,所以我又了解了一下C语言的随机数获取。

    C语言的随机数获取:
    参考:http://c.biancheng.net/view/2043.html
    程序的抽签信息源文件可以自己通过程序去做出来。。。咳咳,虽然方法很笨…
    程序中有些函数注释掉了,还有的隐藏了,就是制作源信息文件的。
    你们可以改进改进,我这个写的比较乱。。。
    还有就是因为我不太喜欢参加活动,所以在随机数函数里是输出不出来46号的。。
    具体程序代码

    #include<stdio.h>
    #include<time.h>
    #include<stdlib.h>
    #include<windows.h>
    #include<string.h>
    #define COUNT 48 //总人数
    //#define STU 20   //抽取学生人数 -为用户自定义人数,所以不启用 
    //#define INITCOUNT 100 顺序表初始化量 
    //#define INCREMENT 10  顺序表增量 
    typedef struct
    {
    	char no[15];//学号
    	char name[10];//姓名 
    }student;
    //-----------------------------------
    FILE *stu,*lu;//定义学生信息源文件指针,幸运儿文件指针 
    char *pno="学号",*pname="姓名",*pflag="编号";//字符串指针
    int n;//抽取幸运儿数量 
    //-----------------------------------
    /*typedef struct
    {
    	student *data;//基地址
    	int length;//长度 
    }StuList; 顺序表-暂不启用 
    */ 
    //----函数声明---
    void MENU();//菜单 
    unsigned int RandomNum();//随机数,Seed为time,单位为秒 
    void DivCount(int *n);//用户自定义抽取人数
    void TestInput(student *p);//测试输入
    int WriteLuckyVisible(student *p,int *Lucky);//写入幸运儿txt文件,用户可视化的
    int ReadStu(student *p); //读取信息源文件 
    int WriteStuInvisible(student *p);//制作信息源文件时使用
    int ReadStuVisible(student *p);//制作读取数据源信息时使用 
    //--------------
    void main()
    {
    	//-----变量定义----------
    	 
    	int choose,i,j;
    	int Lucky[COUNT];//幸运儿 
    	student data[COUNT];
    	//----------------------
    	DivCount(&n); 
    	//ReadStuVisible(data);制作完毕-暂不启用 
    	ReadStu(data);
    	for(;;)
    	{
    	MENU();
    	scanf("%d",&choose); 
    	switch(choose)
    	{
    		case 1:
    		do
    		{
    			printf("--抽取中--
    ");
    			printf("计数 丨%s丨%s	  %s
    ",pflag,pno,pname);
    			for(i=0;i<n;i++)
    			{
    				 
    				Lucky[i]=RandomNum();
    				for(j=0;j<i;j++)//---寻找重复项 
    				{
    					
    					if(Lucky[j]==Lucky[i])
    						while(Lucky[i]==Lucky[j])
    						{
    							Lucky[i]=RandomNum();
    						}
    							 
    					else
    						continue;
    				}
    				
    			
    				//printf("%d
    ",Lucky[i]);随机数重复测试 
    				printf("第%-3d. %-4d% -13s %-5s
    ",i+1,Lucky[i],data[Lucky[i]-1].no,data[Lucky[i]-1].name);//下标从0开始 
    			}
    			
    				
    			//------------------------------
    			printf("【1.重新抽取丨2.输出至TXT文件丨】:");
    			scanf("%d",&choose); 
    			switch(choose)
    			{
    				case 1:;break;
    				case 2:
    				if((WriteLuckyVisible(data,Lucky)==1))
    					printf("输出成功!
    ");
    				else
    					printf("错误!
    "); 
    				;break;
    				
    				default:printf("输入错误!
    ");
    			} 
    			
    		}while(choose==1);
    		;break;
    		case 2:exit(0);break;
    		case 8:printf("%s	%s",data[0].no,data[0].name);break; 
    		case 9:
    		//TestInput(data);
    		WriteStuInvisible(data);break;
    		default:printf("					输入错误!");break;
    	}
    	system("pause"); 
    	}
    	
    	
    }
    int ReadStuVisible(student *p)
    {
    	int i;
    	if((stu=fopen("002.txt","r"))==NULL)
    	return 0;
    	for(i=0;i<COUNT;i++)
    	fscanf(stu,"%s %s",(p+i)->name,(p+i)->no);
    	fclose(stu);
    	return 1;
    }
    int ReadStu(student *p)
    {
    	if((stu=fopen("Source.data","r"))==NULL)
    		return 0;
    	fread(p,sizeof(student),COUNT,stu);
    	fclose(stu);
    	return 1;
    }
    int WriteStuInvisible(student *p)
    {
    	if((stu=fopen("Source.data","wt+"))==NULL)
    		return 0;
    		fwrite(p,sizeof(student),COUNT,stu);
    	fclose(stu);
    		return 1;
    }
    int WriteLuckyVisible(student *p,int *Lucky)
    {
    	int i;
    	if((lu=fopen("LuckyDog.txt","wt+"))==NULL)
    		return 0;
    
    	fprintf(lu,"计数 丨%s丨%s	           %s
    ",pflag,pno,pname);
    	for(i=0;i<n;i++)
    	{
    		fprintf(lu,"第%-4d.    %-4d% -13s %-5s
    ",i+1,Lucky[i],p[Lucky[i]-1].no,p[Lucky[i]-1].name);
    	}
    	fclose(lu);
    	return 1;
    }
    void TestInput(student *p)
    {
    	int i;
    	for(i=0;i<COUNT;i++)
    	{
    		system("cls");
    		printf("----No.%d----
    ",i+1);
    		printf("学号:");
    		scanf("%s",(p+i)->no);
    		printf("姓名;");
    		scanf("%s",(p+i)->name);
    		
    	}
    }
    void DivCount(int *n)
    {
    	for(;;)
    	{
    	system("cls");
    	printf("				请输入本次准备抽取人数:");
    	scanf("%d",n);
    	if(*n<1||*n>COUNT)
    	{
    		printf("				抽取人数不合法!");
    		system("pause");
    		continue; 
    	}
    	else
    		break; 
    		
    	}
    
    		
    }
    unsigned int RandomNum()
    {
    	unsigned int x;
    	srand(time(NULL));
    	for(;;)
    	{
    		Sleep(1000);
    		x=rand()%COUNT+1;
    		if(x!=46)
    			break;
    		else
    			continue;
    	}
    	
    	return x;
    }
    void MENU()
    {
    	system("cls");
    	printf("				 --------------------
    ");
    	printf("				丨 1.抽取    2.结束 丨
    ");
    	printf("				 --------------------
    ");
    	printf("				 请输入:");
    } 
    
    

    呃呃,自己预想的好多功能还没有实现,而且抽签的实现方法还有点复杂。。。

  • 相关阅读:
    简单登录接口
    While循环猜年龄
    linux全面详细转载文章
    ansible
    Python之OS模块函数
    Python脚本-自动下载安装
    LVS(3种模式+10种调度算法)
    Dockerfile构建镜像
    Docker简易安装及命令实例
    find命令实例
  • 原文地址:https://www.cnblogs.com/tfxz/p/12621762.html
Copyright © 2011-2022 走看看