void jie_num() { long i,k=0,book_xb,book_num;/k用来标记是否存在该书/ char jy[2];/jy用来表示是否确定借阅/ printf("\t\t ====================== \n"); printf("\t\t 按书号借阅 \n"); printf("\t\t ====================== \n"); while(1) { printf("\n\t\t请输入书号:"); scanf("%d",&book_num); for(i=0;i<N;i++) if(bk[i].num==book_num&&bk[i].jie!=1) { book_xb=i; k++; } if(k==0) { printf("\t不存在该书,或该书已经借出!请正确输入图书名称!\n\t\t按任意键返回..."); getch(); break; } printf("\t编号 图书名称 出版社 出版时间 状态\n"); printf("\t%-7d %-8s %12s %4d年%2d月%2d日 ",bk[book_xb].num,bk[book_xb].name,bk[book_xb].publish,bk[book_xb].t.year,bk[book_xb].t.month,bk[book_xb].t.day); if(bk[book_xb].jie==1) printf("已被借阅\n"); else { printf("可以借阅\n\t是否借阅?(是:'y',否:'n'):"); scanf("%s",jy); if(strcmp(jy,"n")==0) { printf("\t借阅取消,按任意键返回...."); getch(); break; } else if(strcmp(jy,"y")==0) { printf("\t借阅成功!按任意键返回..."); bk[book_xb].jie=1; getch(); break; } else { printf("\t输入有错!按任意键重新输入...");
时间: 2024-04-28 09:18:43 浏览: 6
这段代码是图书借阅系统中按照书号借阅的功能实现部分。与按书名借阅的流程类似,用户输入书号,系统在图书库中查找是否有该书,如果有且未被借出,则显示该书的信息,询问用户是否借阅;如果用户确认借阅,则将该书的借阅状态标记为已借阅。
具体解释如下:
- 第1行定义了两个字符数组变量jy和name,分别用来保存用户是否确定借阅和用户输入的书名。
- 第2~5行是输出界面的美化,显示借阅功能的标题。
- 第6~26行是一个死循环,用户可以多次输入书号,直到输入“n”或找到了符合条件的书才会退出循环。
- 第7行提示用户输入书号。
- 第8~14行是一个for循环,用于在图书库中查找是否有对应书号的书,并且确认该书未被借出,如果找到符合条件的书,则记录该书的下标和存在该书的标记k。
- 第15~21行判断是否找到符合条件的书,如果没找到,则提示用户重新输入;如果找到一本书,则显示该书的信息并询问用户是否借阅;如果找到多本书,则先显示所有找到的书的信息,然后提示用户输入编号选择要借阅的书。
- 第22~23行是用户选择不借阅的情况,显示取消借阅的提示信息。
- 第24~25行是用户选择借阅的情况,将该书的借阅状态标记为已借阅,并显示借阅成功的提示信息。
- 第26行是用户输入其他字符的情况,会重新进入循环,提示用户重新输入。
同样地,这段代码也没有包含完整的程序,可能存在一些变量或函数没有定义或声明,需要在完整程序中查找。
相关问题
void Jie_mo(char char_S[],int Num_xy); 是什么意思
这是一个函数的声明,函数名为 Jie_mo,它接受两个参数:一个是字符数组 char_S[],另一个是整数类型的变量 Num_xy。这个函数的具体实现在声明之后的代码中。
根据函数名和参数的命名,可以猜测这个函数可能是用来解码或解密某个字符数组的。但具体实现细节需要查看函数的定义或者更多的上下文信息来确定。你可以提供更多关于这个函数的上下文或者具体实现代码,以便我能够提供更准确的解释。
该函数如何在下一次调度前把任务设置为OS_RUN void OS_Start(void) { while (1) { for (Current_Task_Num = 0; Current_Task_Num < OS_TASK_SUM; Current_Task_Num++) { if (OS_Task[Current_Task_Num].RunFlag == OS_RUN) { OS_Task[Current_Task_Num].RunFlag = OS_SLEEP; // OS_TaskID= i; (*(OS_Task[Current_Task_Num].task))(); } } } }下一次调度
在该函数中,任务的状态由`RunFlag`变量控制。当`RunFlag`为`OS_RUN`时,任务被设置为运行状态,否则为睡眠状态。
要在下一次调度前将任务设置为`OS_RUN`状态,可以在任务代码中使用`OS_SetTaskState()`函数,将任务的`RunFlag`设置为`OS_RUN`。例如:
```
void Task1(void)
{
// 任务代码
// ...
// 在任务结束前将自己设置为运行状态
OS_SetTaskState(OS_TASK1_ID, OS_RUN);
}
void Task2(void)
{
// 任务代码
// ...
// 在任务结束前将自己设置为运行状态
OS_SetTaskState(OS_TASK2_ID, OS_RUN);
}
```
`OS_SetTaskState()`函数的实现可以参考以下代码:
```
void OS_SetTaskState(uint8_t task_id, uint8_t state)
{
if (task_id < OS_TASK_SUM)
{
OS_Task[task_id].RunFlag = state;
}
}
```
在下一次调度时,`OS_Start()`函数会遍历所有任务,找到`RunFlag`为`OS_RUN`的任务并执行。