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

教师在每次上课时,需要对学生随机点名提问:学生信息保存在文件myfile.dat中。学生共有4人,名单如下:2013011001杜永宁2013011002王传华20130... 教师在每次上课时,需要对学生随机点名提问:学生信息保存在文件myfile.dat中。学生共有4人,名单如下:
2013011001 杜永宁 2013011002 王传华
2013011003 殷泳 2013011004 杨柳青
所谓点名,是指将某位同学的姓名和学号打印到屏幕上,则表示该同学被点名1次;注意点名的随机性,即公正性。
展开
 我来答
仙戈雅3n
2013-08-30 · TA获得超过5790个赞
知道大有可为答主
回答量:2398
采纳率:75%
帮助的人:897万
展开全部
#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]);

}

运行效果截图:


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

更多追问追答
追问
你能不能把邮箱给我,我把半成品发给你,你帮我改下
追答
抱歉我的邮箱不能在此公开,你可以把你的半成品发上来,给你看看。
徐veny伟
2013-08-30 · TA获得超过137个赞
知道小有建树答主
回答量:240
采纳率:0%
帮助的人:71万
展开全部
是C编程吗?
C的话,先把myfile.dat的信息读到结构类型数组里面
然后随机函数 随机把数组的某个打印出来
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友455632d898
2013-08-30 · TA获得超过275个赞
知道小有建树答主
回答量:804
采纳率:0%
帮助的人:338万
展开全部
随机数点名就可以了。很简单的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式