请问上面这段代码添加注释
时间: 2023-12-26 10:12:24 浏览: 27
好的,以下是对代码的注释:
```c
void endwork(struct student *head) {
FILE *fp; // 定义文件指针
struct student *p1,*p2; // 定义学生结构体指针
double money; // 定义学生余额
char num[30]; // 定义学生学号
int hour,minute,second,flag=0,dif; // 定义时间和标志变量
printf("输入学号:"); // 提示输入学号
scanf("%s",num); // 获取输入的学号
p1=head; // 将头指针指向p1
while(p1) // 遍历学生链表
{
if(strcmp(p1->num,num)==0) // 如果找到该学生
{
printf("输入正确\n"); // 提示输入正确
flag++; // 将标志变量设置为1
break; // 跳出循环
}
p1=p1->next; // 指向下一个节点
}
if(flag==0) // 如果未找到该学生
{
printf("该学号不存在!\n"); // 提示学号不存在
getchar(); // 读取一个字符
printf("---按任意键返回主菜单---\n"); // 提示按任意键返回主菜单
getchar(); // 读取一个字符
return; // 返回
}else{ // 如果找到了该学生
end =time(NULL); // 获取当前时间
printf ("已对您停止计时!\n"); // 提示停止计时
printf ("您上机前的余额为: %.2f\n",p1->money); // 显示该学生上机前的余额
dif=difftime(end,start); // 计算上机时间
hour=dif/3600; // 将秒数转换为小时数
minute=(dif%3600)/60; // 将秒数转换为分钟数
second=dif%60; // 获取秒数
if(minute<=30) // 如果上机时间不超过30分钟
{
money=p1->money-(2*hour+1); // 计算扣费金额
}
if(minute>30&&minute<60) // 如果上机时间超过30分钟但不到60分钟
{
money=p1->money-2*(hour+1); // 计算扣费金额
}
}
printf ("\n您上机的时间为%d: %d: %d\n",hour,minute,second); // 显示上机时间
printf ("\n您的余额为%.2f\n",money); // 显示扣费后的余额
p1->money=money; // 更新学生的余额
p2=p1->next; // 将p2指向下一个节点
if((fp=fopen("duli16.3.dat","wb+")) == NULL) // 打开文件
{
printf("File open error!\n"); // 提示打开文件错误
printf("---输入任意键继续---\n"); // 提示输入任意键继续
getchar(); // 读取一个字符
exit(0); // 退出程序
}
while(p2) // 遍历学生链表
{
fprintf(fp,"%s %s %.2f\n",p2->num,p2->name,p2->money); // 将学生信息写入文件
p2=p2->next; // 指向下一个节点
}
fclose(fp); // 关闭文件
getchar(); // 读取一个字符
printf ("---请按任意键继续---\n"); // 提示请按任意键继续
getchar(); // 读取一个字符
}
```