c語言隨機點名系統
㈠ c語言 隨機點名
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#defineSTU_NUM_MAX64//假設最多有64個學生
structStudent
{
charname[10];
intstuID;
}stu[STU_NUM_MAX];
intexist[STU_NUM_MAX];//用以保存被點過名
staticintindex=0;//記住點名的次數
voidIitialize(){
for(inti=0;i<STU_NUM_MAX;i++)exist[i]=0;
}
boolIsExist(intid){
for(inti=0;i<STU_NUM_MAX;i++)
if(exist[i]==id)returntrue;//已存在
returnfalse;//不存在
}
voidAdd()//添加數據
{
FILE*fp;
intstu_num;
printf(" ?:");
scanf("%d",&stu_num);
for(inti=0;i<stu_num;i++){
printf(" ");
printf(" PleaseinputstudentID:");
scanf("%d",&stu[i].stuID);
printf(" Pleaseinputstudentname:");
scanf("%s",stu[i].name);
fflush(stdin);
}
if((fp=fopen("stu.dat","ab"))==NULL) {
printf("Can'topenfile ");
exit(1);
}
for(intj=0;j<stu_num;j++)
{
if(fwrite(&stu[j],sizeof(structStudent),1,fp)!=1)
printf("Errorwritingfile. ");
}
fclose(fp);
}
voidrollcall()//隨機點名
{
FILE*fp;
if((fp=fopen("stu.dat","rb"))==NULL)
{
printf("Can'topenfile. ");
exit(1);
}
srand((unsigned)time(NULL));
inti=0;
intrandID=rand()%(64-1+1)+1;//1~64
printf(" 隨機點到的學號為:%d %s %s ",randID,"StuID","StuName");
do
{
fseek(fp,i*sizeof(structStudent),SEEK_SET);
if(fread(&stu[i],sizeof(structStudent),1,fp))
{
if(stu[i].stuID==randID&&!IsExist(randID)){
printf(" %4d %5s ",stu[i].stuID,stu[i].name);
exist[index++]=randID;
break;}
}
i++;
}while(!feof(fp));
fclose(fp);
}
intmain()
{
intselect=0;
charanswer='y';
Iitialize();
do
{
printf("1.添加數據2.隨機點名3.退出 請選擇:");
fflush(stdin);
scanf("%d",&select);
switch(select)
{
case1:
Add();
break;
case2:
rollcall();
break;
case3:
return0;
}
fflush(stdin);
printf("Youwanttocontinue?:");
scanf("%c",&answer);
}while(answer=='y'||answer=='Y');
return0;
}
上面的代碼,我留下幾個細節問題留給你自己學著解決,都是很簡單的:
上面的代碼,我沒有對重復的學號作判斷。
上面的代碼,我沒有把點名存放到另一個文件,而是用數組替代(可以實現的也很簡單)。我怕寫得代碼太多,網路限制提交。
上面的代碼,是測試數據,stu.dat目標文件並沒有64個學生,我只寫入了12條數據。
上面的代碼,我沒有對數據數量(最多64條)作判斷。
㈡ c語言課堂隨機點名
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#defineMAXSTUDENT100
charName[MAXSTUDENT][16];
//讀文件內保存的學生姓名
intreadName(constchar*fileName)
{
intpos,slen;
FILE*fp=fopen(fileName,"r");
if(fp==NULL)return0;
memset(Name,0,sizeof(Name));
pos=0;
while(!feof(fp)&&pos<MAXSTUDENT)
{
fgets(Name[pos],16,fp);
slen=strlen(Name[pos]);
if(slen>0)
{
slen--;
while(Name[pos][slen]==10||Name[pos][slen]==13)Name[pos][slen--]=0;//去掉字元串後的換行符
pos++;
}
}
printf("讀入%d人姓名 ",pos);
fclose(fp);
returnpos;
}
voidmain()
{
charfileName[32];
intn,pos,loop;
charflag[100];
srand(time(NULL));
printf("請輸入學生姓名文件名:");
scanf("%s",fileName);
n=readName(fileName);
if(n==0)
{
printf("讀取錯誤,請確認文件%s是否名是否正確,文件的格式是否正確! ",fileName);
return;
}
getchar();
memset(flag,0,sizeof(flag));
while(1)
{
pos=rand()%n;
loop=0;
while(flag[pos])//可以保證每個人都點到一次
{
if(++loop>n)memset(flag,0,sizeof(flag));
pos=rand()%n;
}
flag[pos]=1;
printf("點%s",Name[pos]);
if(getchar()!=10)break;
}
}
㈢ 用c語言編一個上課點名系統
是作業嗎?
如果不是作業的話,建議還是別這么麻煩,弄一張表把。
現在外國都流行用EXCEL抽人,EXCEL(新版本的,好像2010裡面有),有一個 抽樣的類型,能夠從表中隨機抽出數據。。
然後在用VLOOKUP顯示人名就好了。。。
如果是作業的話。。。用C++,面向對象,秒殺級別的作業。。
新建一個STUDENT類,然後將學好和姓名設置成PUBLIC成員。
然後再新建一個STUDENT類數組,然後讀入文件即可。。。關鍵還是在於TXT文件格式怎麼分割的問題。。其實也不難,CSTRING裡面有很豐富的成員方法,用一些來拼接就好。
最後再找在VC的庫裡面找一個隨機函數,或者自己寫一個也行。。。
秒殺級別的作業。。。。自己動手把樓主,很簡單的說。。。
㈣ 怎麼用C語言編寫隨機點名
使用系統函數 int rand(void)產生偽隨機數,先用void srand(unsigned int seed)函數設置隨機種子,這樣就會產生真正的隨機函數
㈤ 隨機點名程序設計 C語言編程
設置一個足夠大的隨機池,給每一個學生分配相同的空間,然後利用隨機數來選取被點名的學生,同時對該學生所分配的空間和其他學生的空間進行縮減或增加。然後執行下一輪。
大致思路就是這樣,希望能夠幫到你哦~
㈥ c語言 隨機點名
「為了公平起見,我們決定做一個隨機點名小程序」不是說你們決定做一個小程序嗎?為什麼不自己做呀?沒有必要一個班的學生都沒有能力編寫一個這種簡單程序吧
網路知道並不是一個提交結果的平台,所謂知道就是將知識貢獻,讓大家獲得啟發,不是給人當奴隸幹活!
㈦ c語言 課堂隨機點名程序 跪求大神幫我修改正確!
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include <time.h>
func1(char stubuff[100][100],int stucnt);
func2(char stubuff[100][100],int stucnt);
struct Student
{
int stdno;
char name[20];
char sex[20];
};
int main()
{
FILE *fp;
int stucnt=0,x;
char line[100]="\0",stubuff[100][100];
char filename[20];
struct Student *st;
printf("\t\t\t歡迎使用課堂隨機點名程序!\n\n");
printf("點名前請輸入您要點名的班級:");
scanf("%s",filename);
fp=fopen(filename,"r");
while (fgets(line,99,fp)!=NULL)
{
strcpy(stubuff[stucnt++],line);
}
printf("該班一共有%d個學生\n",stucnt);
srand((unsigned)time(NULL));
printf("請選擇:\n");
printf("1:開始點名\n2:查看全班具體情況\n3:結束程序\n");
printf("請輸入您的選擇:");
scanf("%d",&x);
switch(x)
{
case 1:
func1(stubuff[100][100],stucnt);break;
case 2:
func2(stubuff[100][100],stucnt);break;
case 3:
printf("\t\t\t謝謝使用!\n");
}
fclose(fp);
return 0;
}
func1(char stubuff[100][100],int stucnt)
{
int i,j,chou,tmp,sel[100]={0},flag;
do
{
printf("請輸入這次要點名的人數:");
scanf("%d",&chou);
if (chou>stucnt)
{
printf("這個班沒有這么多學生\n");
}
} while(chou>stucnt ||chou<0);
for (i=0;i<chou;i++)
{
flag=0;
tmp=rand()%stucnt+1;
for (j=0;j<i;j++)
{
if (sel[j]==tmp)
{
flag=1;
break;
}
}
if (flag==1)
{
i--;
}else
{
sel[i]=tmp;
}
}
printf("點名情況如下:\n");
printf("學號\t\t姓名\t性別\n");
for (i=0;i<chou;i++)
{
fflush(stdin);
getchar();
printf("%s",stubuff[sel[i]-1]);
}
}
func2(char stubuff[100][100],int stucnt)
{
int i;
for (i=0;i<stucnt;i++)
{
fflush(stdin);
getchar();
printf("%s",stubuff[i]);
}
}