抽签小程序(C语言随机数)

来源:互联网转载 | 更新日期:2023-09-14 13:54:41

最近班级里需要人员抽签参加活动,闲来无事用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("--抽取中--\n");printf("计数 丨%s丨%s\t %s\n",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();}elsecontinue;}//printf("%d\n",Lucky[i]);随机数重复测试 printf("第%-3d. %-4d% -13s %-5s\n",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("输出成功!\n");elseprintf("错误!\n"); ;break;default:printf("输入错误!\n");} }while(choose==1);;break;case 2:exit(0);break;case 8:printf("%s\t%s",data[0].no,data[0].name);break; case 9://TestInput(data);WriteStuInvisible(data);break;default:printf("\t\t\t\t\t输入错误!");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\t %s\n",pflag,pno,pname);for(i=0;i<n;i++){fprintf(lu,"第%-4d. %-4d% -13s %-5s\n",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----\n",i+1);printf("学号:");scanf("%s",(p+i)->no);printf("姓名;");scanf("%s",(p+i)->name);} } void DivCount(int *n) {for(;;){system("cls");printf("\t\t\t\t请输入本次准备抽取人数:");scanf("%d",n);if(*n<1||*n>COUNT){printf("\t\t\t\t抽取人数不合法!");system("pause");continue; }elsebreak; }} unsigned int RandomNum() {unsigned int x;srand(time(NULL));for(;;){Sleep(1000);x=rand()%COUNT+1;if(x!=46)break;elsecontinue;}return x; } void MENU() {system("cls");printf("\t\t\t\t --------------------\n");printf("\t\t\t\t丨 1.抽取 2.结束 丨\n");printf("\t\t\t\t --------------------\n");printf("\t\t\t\t 请输入:"); }

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

上一篇:Coreldrawx6(cdrx6)

下一篇:x264编码参数详细介绍:Encoder

相关文章

Copyright © 网站出售-网站交易平台 版权信息

网站备案号:黔ICP备2023004141号