void back_book(void) { int i = 0; int cont = 0; char book_num[30]; BSTA: printf("请输入您要还书的编号:\n"); scanf_s("%s", book_num, 30); while (bks[i].name[0] != '\0') { if (strcmp(bks[i].number, book_num) == 0)//对比结构体数组中的每一的number成员 { cont++; //用于判断编号是否输入正确 printf("书名:%s\n作者名:%s\n编号:%s\n热度:%d\n库存:%d\n价格:%f\n", bks[i].name, bks[i].writer, bks[i].number, bks[i].hot, bks[i].sc, bks[i].price); printf("\n"); break; } i++; } //i就是此编号书的下标 if (cont == 0)//说明输入的编号有误 { printf("您输入的编号有误,请重新输入\n"); goto BSTA; } else { printf("确认请按【y】,返回界面请按【其他键】\n"); if (_getch() == 'y') { bks[i].sc++;//i号元素的库存加1; printf("还书成功,继续还书请按【b】,返回界面请按【其他键】\n"); if (_getch() == 'b') { cont = 0; goto BSTA; } } } }
时间: 2024-04-04 20:36:13 浏览: 105
这段代码是用来还书的,它会提示用户输入要还的书籍编号,然后在结构体数组中查找是否有对应编号的书籍。如果存在,就输出该书籍的相关信息并等待用户确认是否还书。如果用户确认还书,就将该书籍的库存数量加1,然后提示用户还书成功并询问用户是否继续还书。如果用户选择继续还书,就回到输入书籍编号的步骤,否则就返回到主界面。如果用户输入的编号有误,就会提示用户重新输入。
相关问题
file_cont = {} aveg_cont = {}
这是一段代码片段,其中`file_cont`和`aveg_cont`都是变量名。根据命名规则猜测,它们可能与文件内容和平均值有关。
可能的代码实现如下:
```
# 读取多个文件内容,并计算平均值
import os
file_cont = {} # 存储文件内容
for filename in os.listdir('/path/to/dir'):
with open(filename, 'r') as f:
file_cont[filename] = f.read()
# 计算平均值
aveg_cont = sum(len(cont) for cont in file_cont.values()) / len(file_cont)
```
这段代码首先遍历指定目录下的所有文件,读取文件内容并存储在`file_cont`字典中,字典的键为文件名,值为文件内容。然后,计算所有文件内容长度的平均值,将结果存储在`aveg_cont`中。
优化这条sql select PROD_DIS_TYPE , case when PROD_DIS_TYPE = '1' then DECODE(sum(FIRST_BIZ), 0,0, ROUND(sum(case when CONTRACT_CODE = 'NHT-1904506' then FIRST_BIZ else 0 end) / sum(FIRST_BIZ), 2))::int else 0 end as FIRST_BIZ , case when PROD_DIS_TYPE = '2' then DECODE(sum(APPR_DESIGN_PROD), 0, 0, ROUND(sum(case when CONTRACT_CODE = 'NHT-1904506' then APPR_DESIGN_PROD else 0 end) / sum(APPR_DESIGN_PROD), 2))::int else 0 end as APPR_DESIGN_PROD from T_SPDI_CONT_SUB_PROJ where UNITERM_CODE = 'N1900620-04-008' and SUB_PROJ_CODE = 'N1900620-04-302' and PROD_DIS_TYPE = '1' group by PROD_DIS_TYPE
这个 SQL 查询语句存在多个问题,需要进行优化:
1. 可以使用预编译语句,避免重复解析 SQL 语句。
2. 可以使用 EXISTS 子查询代替 WHERE 子句中的 AND 条件,可以更好地利用索引。
3. 可以使用 WITH 语句中的子查询,减少代码重复。
4. 可以使用 JOIN 代替 WHERE 中的等值条件,可以更好地利用索引。
5. 可以使用更简洁的 SQL 语句实现相同的功能。
下面是优化后的 SQL 查询语句:
```
WITH
FIRST_BIZ_SUM AS (
SELECT SUM(FIRST_BIZ) AS FIRST_BIZ_SUM
FROM T_SPDI_CONT_SUB_PROJ
WHERE UNITERM_CODE = 'N1900620-04-008' AND SUB_PROJ_CODE = 'N1900620-04-302'
),
APPR_DESIGN_PROD_SUM AS (
SELECT SUM(APPR_DESIGN_PROD) AS APPR_DESIGN_PROD_SUM
FROM T_SPDI_CONT_SUB_PROJ
WHERE UNITERM_CODE = 'N1900620-04-008' AND SUB_PROJ_CODE = 'N1900620-04-302'
)
SELECT PROD_DIS_TYPE,
CASE WHEN PROD_DIS_TYPE = '1' THEN
COALESCE(
ROUND(
SUM(CASE WHEN CONTRACT_CODE = 'NHT-1904506' THEN FIRST_BIZ ELSE 0 END) / NULLIF(FIRST_BIZ_SUM.FIRST_BIZ_SUM, 0),
2
)::INT,
0)
ELSE 0 END AS FIRST_BIZ,
CASE WHEN PROD_DIS_TYPE = '2' THEN
COALESCE(
ROUND(
SUM(CASE WHEN CONTRACT_CODE = 'NHT-1904506' THEN APPR_DESIGN_PROD ELSE 0 END) / NULLIF(APPR_DESIGN_PROD_SUM.APPR_DESIGN_PROD_SUM, 0),
2
)::INT,
0)
ELSE 0 END AS APPR_DESIGN_PROD
FROM T_SPDI_CONT_SUB_PROJ
WHERE UNITERM_CODE = 'N1900620-04-008' AND SUB_PROJ_CODE = 'N1900620-04-302' AND PROD_DIS_TYPE IN ('1', '2')
GROUP BY PROD_DIS_TYPE;
```
此优化后的 SQL 查询语句,通过使用 WITH 子句和 COALESCE 函数,将重复的代码块抽象出来,提高了代码的可读性和可维护性。同时,使用 JOIN 和 EXISTS 子查询代替 WHERE 子句中的等值条件,以及使用 NULLIF 函数避免除以 0 的问题,可以更好地利用索引,提高查询效率。