C语言课程设计实习报告
{ FILE *fp;
if((fp=fopen(\ { printf(\ exit (0);
}
if(fwrite(a,sizeof(int),N,fp)!=N)
printf(\
if(fwrite(b,sizeof(int),N,fp)!=N)
printf(\
fclose(fp);
}
3 从sturecord.dat读取点名记录的函数
void loadrecord(int *a,int *b) { FILE *fp;
if((fp=fopen(\
{
11
//二进制方式存数据 C语言课程设计实习报告
}
printf(\
saverecord(a,b); //如果 sturecord.data不存在则新建立一个 exit (0);
if(fread(a,sizeof(int),N,fp)!=N)
printf(\
if(fread(b,sizeof(int),N,fp)!=N)
printf(\
fclose(fp);}
(2)基本函数
1 数组最小值函数
求数组中的最小值,由choose函数调用,choose函数中的随机数r要满足a[r]=miminum(a)才使用。即每次只点被点过次数最少的学生。
int minimum(int *a) {
int mi,i;
mi=a[0]; for(i=0;i if(mi>a[i]) 12 C语言课程设计实习报告 } mi=a[i]; return (mi); } 2 点名函数 Choose函数可以用随机数r从stu[N]结构体中随机选择一个再输出相应学生信息,a[N]记录下被点学生(a[r]++;),之后可以用b[N]记录学生是否到课(y/n)。c[N]记录此次课(此次运行程序)的点名,不保存到sturecord.dat,用于防止此次上课点名已经由随机点名模块(pickn,pickc)点到的,不会出现在旷到学生点名模块(pickhistory)。将在pickc、pickn函数中调用。 void choose(Student *stu,int *a,int *b,int *c) { do { } r=rand()%N; //r为0到N-1的随机数 int r; char yon,e; //’yon’ yes or no ,’e’接收回车 while(a[r]!=minimum(a)); 13 a[r]++; //记录下被点学生 c[r]++; C语言课程设计实习报告 printf(\ %s\\n\printf(\ %s\\n\ printf(\ Enter 'y' or 'n' to record attendance:[ ]\\b\\b\yon=getchar(); e=getchar(); //接收回车 putchar('\\n'); if(yon=='n') { b[r]++; //记录旷到 printf(\ ****************************\\n\ printf(\ the absence has been saved.\\n\ } printf(\ ****************************\\n\\n\ } (3)功能模块 1 连续点名函数 输入’c’ 点名,直到输入’e’时结束 void pickc(Student *stu,int *a,int *b,int *c) //参数在调用chooses时使用 { char coe='c',e; //’coe’控制点名或是结束,'e' 接收回车 borderup(); //打印边界,每个功能函数开始结尾都有 14 C语言课程设计实习报告 //使程序运行时显得清晰 while(coe=='c') { printf(\ Enter 'c' to choose,enter 'e' to end:[ ]\\b\\b\coe=getchar(); e=getchar(); if(coe=='c') { putchar('\\n'); choose(stu,a,b,c); } } } 2 点n人函数 输入要点的人数点名 borderdown(); void pickn(Student *stu,int *a,int *b,int *c) { int n,i,e; borderup(); 15