void ShowBook() { int i, iBookRecord; //记录条数 system("cls"); iBookRecord = ReadBookFile("rb"); //只读 if (iBookRecord == -1) { printf("该文件打开失败,请先新增图书信息!\n"); } if (iBookRecord == 0) { printf("文件中没有图书信息!\n"); } else { printf("\t||\n"); printf("\n\n"); printf("\t%-6s%-16s%-10s%-20s%-4s\n", "编号", "书名", "作者", "出版社", "库存"); for (i = 0; i < iBookRecord; i++) { printf("\t%-6d%-16s%-10s%-20s%-4d\n", BOOK_DATA); } printf("\n\n"); printf("\t||\n"); printf("\n\n"); } } 这一段什么意思
时间: 2023-07-03 17:24:37 浏览: 90
这是一个 C 语言函数,名为 ShowBook,用于从一个文件中读取图书信息并在控制台中显示出来。函数首先调用 ReadBookFile 函数读取文件中的图书信息记录条数,如果返回值为 -1,则说明文件打开失败,需要先新增图书信息;如果返回值为 0,则说明文件中没有图书信息;否则,函数将在控制台中按照一定格式输出每一条图书信息,包括编号、书名、作者、出版社和库存。其中,BOOK_DATA 是一个宏定义,用于取出一个图书信息结构体中的各个字段。
相关问题
根据自身对面向对象方法与系统设计的理解,参照《重构-改善既有代码的设计》书中关于不良设计(违反SOLID)、不良代码(代码坏味道bad smells)的判别标准,分点讨论现有代码中的问题。#pragma once #include<iostream> #include<xstring> #include"student.h" using namespace std; class book { public: void setbooks(string name, string isbn, string information, int page, int price, int ben); void setbook();//输入书的信息 void setname();//输入名字 string getname();//返回书名 void setisbn();//输入isbn码 string getisbn();//返回isbn码 void setinformation();//输入图书信息 string getinformation();//返回图书信息 void setpage();//输入图书页数 int getpage();//返回图书页数 void setprice();//输入图书价格 int getprice();//返回图书价格 void setben();//输入书的数量 int getben();//返回书的数量 void reduceben();//书的数量减少 void plusben();//书的数量增加 void showbook();//显示书的各种信息 bool judge(string isbn1);//判断ISBN合法性 ~book(); private: string name, isbn, information; int price, page, ben; };
现有代码中存在以下问题:
1. SRP(单一职责原则):book类承担了太多的职责,包括输入书的信息、展示书的各种信息、判断ISBN合法性等,违反了单一职责原则。
2. OCP(开放封闭原则):代码中没有考虑到未来需求的变化,如增加新的书籍类型或者增加不同的书籍属性,代码需要重新修改,违反了开放封闭原则。
3. LSP(里氏替换原则):代码中没有使用继承或多态等方式来统一管理不同类型的书籍,导致代码的扩展性和可维护性较差,违反了里氏替换原则。
4. DIP(依赖倒置原则):代码中依赖具体实现而非抽象,如使用了具体的string类型而非抽象的接口或基类,导致代码的耦合性较高,违反了依赖倒置原则。
5. 代码坏味道(bad smells):代码中存在重复代码、命名不规范、代码冗余等问题,需要进行重构来提高代码质量。
void show() { int x; do { system("cls"); printf("\n\n\n\n"); printf("\t\t|-------------------------------------------------------------|\n"); printf("\t\t| |\n"); printf("\t\t| ===================== |\n"); printf("\t\t| 查看图书信息 |\n"); printf("\t\t| ===================== |\n"); printf("\t\t| |\n"); printf("\t\t| 1.按书名查找 |\n"); printf("\t\t| 2.按书号查找 |\n"); printf("\t\t| 3.查看所有未借阅图书 |\n"); printf("\t\t| 4.查看所有已借阅图书 |\n"); printf("\t\t| 5.查看所有图书 |\n"); printf("\t\t| 6.返回主菜单 |\n"); printf("\t\t|-------------------------------------------------------------|\n"); printf("\n\t\t请输入您的选择:"); scanf("%d",&x); switch(x) { case 1:system("cls");showbook_name();getch();break;/按书名查看/ case 2:system("cls");showbook_num();getch();break;/按书号查看/ case 3:system("cls");weijieyue();getch();break;/查看未借阅图书/ case 4:system("cls");yijieyue();getch();break;/查看已借阅图书/ case 5:system("cls");show_all_book();getch();break;/查看所有图书/ } }while(x!=6); }的代码解释
这段代码定义了一个名为`show`的函数,用于显示图书信息的菜单,并提供了五个选项供用户选择:
1.按书名查找;
2.按书号查找;
3.查看所有未借阅图书;
4.查看所有已借阅图书;
5.查看所有图书。
根据用户的选择,使用`switch`语句执行对应的函数:`showbook_name()`、`showbook_num()`、`weijieyue()`、`yijieyue()`或`show_all_book()`。
这个菜单会一直显示,直到用户选择“返回主菜单”(即输入6),退出循环并返回主菜单。同时,在每个选项执行完毕后,使用`getch()`函数等待用户按下任意键,以便用户查看结果并返回菜单。
阅读全文