跪求c语言上课随机点名程序设计

教师在每次上课时,需要对学生随机点名提问:学生信息保存在文件myfile.dat中。学生共有4人,名单如下:
2013011001 杜永宁 2013011002 王传华
2013011003 殷泳 2013011004 杨柳青
所谓点名,是指将某位同学的姓名和学号打印到屏幕上,则表示该同学被点名1次;注意点名的随机性,即公正性。

#include<stdio.h>
#include <stdlib.h>
#include <time.h>
#define  STU_NUM_MAX 4
struct StudentInfo  // 学生信息结构
{
 char name[15];
 int stu_id;
}stu[STU_NUM_MAX];

void WriteData()  //写入学生信息
{
FILE *fp;
int stu_num=4;
   
for (int i=0;i<stu_num;i++)
{
       printf("请输入第%d个学生的姓名:",i+1);
   scanf("%s",stu[i].name);
   printf("请输入第%d个学生的学号:",i+1);
   scanf("%d",&stu[i].stu_id);
}

if ((fp=fopen("myfile.dat","ab"))==NULL)
{
printf("Can't open file\n");
exit(1);
}
for (int j=0;j<stu_num;j++)
{
if(fwrite(&stu[j],sizeof(struct StudentInfo),1,fp)!=1)
 printf("Error writing file.\n");
}
fclose(fp);
}
void TeacherDM(int stuID) // 教师点名
{
FILE *fp;
bool find_mark=false;

    
printf("\n\t%s\t\t%s\n","学号","姓名"); 
if((fp=fopen("myfile.dat","rb"))==NULL) 
{
printf("Can't open file\n");
exit(1);
}

    int i=0;
do
{
        fseek(fp,i*sizeof(struct StudentInfo),SEEK_SET);
fread(&stu[i],sizeof(struct StudentInfo),1,fp); 
if(stu[i].stu_id==stuID)
{
printf("\t%4d\t%s\n",stu[i].stu_id,stu[i].name);
printf("\n\n\t请【%s】同学回答某某问题.\n",stu[i].name);
find_mark=true;
break;
}

i++;
}while(!feof(fp));

if(!find_mark) printf("\n\t\t未能找到学生号为:%d的记录!\n",stuID);

fclose(fp);
}
void main(void)
{
int stuID[4]={2013011001,2013011002,2013011003,2013011004};
    //WriteData();
srand((unsigned)time(NULL));//随机种子
    TeacherDM(stuID[rand()%(3-0+1)+0]);

}

运行效果截图:


另外多说一句,你所说的公正性,是不是指被点名过的同学不会再次被随机点名到。如果是这个意思,那么你可以通过数组来设置它,即把点名过的同学的学号或姓名保存到一维数组里,随机判断时只需循环检查下该同学是否已被点名过。这里就留给你做了。

追问

你能不能把邮箱给我,我把半成品发给你,你帮我改下

追答

抱歉我的邮箱不能在此公开,你可以把你的半成品发上来,给你看看。

追问

qq私聊行吗

追答

OK,把你的扣扣发上来。

追问

1900839626

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-30
是C编程吗?
C的话,先把myfile.dat的信息读到结构类型数组里面
然后随机函数 随机把数组的某个打印出来
第2个回答  2013-08-30
随机数点名就可以了。很简单的。

跪求c语言上课随机点名程序设计
\\n",stuID);fclose(fp);}void main(void){int stuID[4]={2013011001,2013011002,2013011003,2013011004}; \/\/WriteData();srand((unsigned)time(NULL));\/\/随机种子 TeacherDM(stuID[rand()%(3-0+1)+0]);}运行效果截图:另外多说一句,你所说的公正性,是不是指被点名过的同学不会再次被...

用C语言编写一个随机点名程序
printf("%s\n","点名结束");break;} RN=rand()%i;/*产生一个随机数*/ while(hash[RN]==1)/*判断有没有完成某个一个学生点名*/ RN=rand()%i;/*产生随机数*/ flag++;/*计数*/ printf("\n~~~\n%s\n%s\n%s\n---\n",s...

c语言 课堂随机点名程序 跪求大神帮我修改正确!
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(...

c语言 随机点名
feof(fp));fclose(fp);}int main(){int select=0;char answer='y';Iitialize();do {printf("1.添加数据 2.随机点名 3.退出\\n请选择:");fflush(stdin);scanf("%d",&select);switch(select){case 1:Add();break;case 2:rollcall();break;case 3: return 0;}fflush(stdin);printf(...

求C++的随机点名程序。。。要有随机点名和顺序点名
2、使用fopen读取学生名单到一个char*的缓冲区, 使用stl string来处理这段缓冲区, 并使用stl vector<SStudentInfo*> 存储学生信息 struct SStudentInfo { };vector<SStudentInfo*> m_vInfo;3、使用C语言随机函数取得随机数,srand((unsigned)time(0)); int rid = rand()%m_vInfo.size() - ...

课堂随机点名系统程序设计。
随机点名:从网上下载个汉语的发音包,用c调用即可。rand(srand)用法:计算机的随机数都是由伪随机数,即是由小M多项式序列生成的,其中产生每个小序列都有一个初始值,即随机种子。(注意: 小M多项式序列的周期是65535,即每次利用一个随机种子生成的随机数的周期是65535,当你取得65535个随机数后它们...

急求一个C语言代码求高手帮忙
1、输入班级 2、输入随即抽取人数 3、打开班级名单 4、读取班级人数 5、判断班级人数是否少于随即抽取人数,少于返回第2步,否则执行下一步 6、读取班级名单 7、在1-总人数范围内取“抽取人数”个不重复的随机数 8、点名次数=0 9、判断点名次数,如果次数小于抽取人数,执行下一步,否则跳转到第14...

课堂随机点名系统(用C语言编写)
没有规矩不成方圆,如果没有人翘课,教务处也不会要求点名。学风一年不如一年。

.NET老师布置的随机点名系统
什么随机点名系统?是要用B\/S结构还是C\/S结构开发?随便写个简单的给你随机点名也就是用到随机函数string[] name=new string[]{"张三","李四","王麻子","小名","小红","小强"};string person=name[new Random().Next(0,name.length-1)];Console.WriteLine("被点名的人是:{0}",name); ...

西北工业大学有哪些教授的课是必须要去蹭的?
首先说的是航模,西工大有门选修课大概是叫航模制作,航空模型简单来说就是用木料,碳纤维,泡沫等各种材料做的,安装了电子设备,遥控的,可以飞上天的各种小飞机。西工大还有个航模队,也很出名。这个选修课做的飞机相较于航模队的比较简单,毕竟航模队是要代表学校参加全国比赛的,选修课大概就是起...

相似回答