抽签小程序(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("				 请输入:");
} 

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

原文地址:https://www.cnblogs.com/tfxz/p/12621762.html