一条有理想的鱼… 2021-10-03 11:07 采纳率: 100%
浏览 57
已结题

采用VC模仿做了一个图书管理系统,输入相应条件查找不出来

采用VC模仿做了一个图书管理系统,输入相应条件查找不出来,是因为将代码和条件文档没有保存到一起吗,可是已经保存到了一起,是我保存错了吗?

#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。
typedef int ElemType; //ElemType 为可定义的数据类型,此设为int类型

#define MAXSIZE 100            //顺序表可能达到的最大长度
struct Book {
    string id;//ISBN
    string name;//书名
    double price;//定价
};
typedef struct {
    Book *elem; //存储空间的基地址
    int length; //当前长度
} SqList;

Status InitList_Sq(SqList &L) { //算法2.1 顺序表的初始化
    L.elem = new Book[MAXSIZE];
    if(!L.elem)
        exit(OVERFLOW);
    L.length = 0;
    return 0;
}

Status GetElem(SqList L, int i, Book &e) {//算法2.2 顺序表的取值
    if(i<1||i>L.length)
        return ERROR;
    e=L.elem[i-1];
    return OK;
}

int LocateElem_Sq(SqList L, double e) { //算法2.3 顺序表的查找
    for(int i=0;i<L.length;i++)
        return i+1;
    return 0;
}

Status ListInsert_Sq(SqList &L, int i, Book e) { //算法2.4 顺序表的插入
    if(i<1||i>L.length)
        return ERROR;
    if(L.length==MAXSIZE)
        return ERROR;
    for( int j=L.length-1;j>=i-1;j--)
        L.elem[j+1]=L.elem[j];
    L.elem[i-1]=e;
    ++L.length;
    return OK;
}

Status ListDelete_Sq(SqList &L, int i) { //算法2.5 顺序表的删除
    if(i<1||i>L.length)
        return ERRORr;
    for(int j=1;j<=L.length-1;j++)
        L.elem[j-1]=L.elem[j];
    --L.length;
    return OK;
}

int main() {
    SqList L;
    int i = 0, temp, a, c, choose;
    double price;
    Book e;
    string head_1, head_2, head_3;
    cout << "1. 建立\n";
    cout << "2. 输入\n";
    cout << "3. 取值\n";
    cout << "4. 查找\n";
    cout << "5. 插入\n";
    cout << "6. 删除\n";
    cout << "7. 输出\n";
    cout << "0. 退出\n\n";

    choose = -1;
    while (choose != 0) {
        cout << "请选择:";
        cin >> choose;
        switch (choose) {
        case 1://创建顺序表
            if (InitList_Sq(L))
                cout << "成功建立顺序表\n\n";
            else
                cout << "顺序表建立失败\n\n";
            break;
        case 2: {//顺序表信息输入
            i = 0;
            L.elem = new Book[MAXSIZE];
            if (!L.elem)
                exit(OVERFLOW);
            L.length = 0;
            fstream file;
            file.open("book.txt");
            if (!file) {
                cout << "错误!未找到文件!" << endl;
                exit(ERROR);
            }
            file >> head_1 >> head_2 >> head_3;
            while (!file.eof()) {
                file >> L.elem[i].id >> L.elem[i].name >> L.elem[i].price;
                i++;
            }
            cout << "输入 book.txt 信息完毕\n\n";
            L.length = i;
            file.close();
        }
            break;
        case 3://顺序表的取值
            cout << "请输入一个位置用来取值:\n";
            cin >> i;
            temp = GetElem(L, i, e);
            if (temp != 0) {
                cout << "查找成功\n";
                cout << "第" << i << "本图书的信息是:\n";
                cout << left << setw(15) << e.id << "\t" << left << setw(50)
                        << e.name << "\t" << left << setw(5) << e.price << endl
                        << endl;
            } else
                cout << "查找失败!位置超出范围\n\n";
            break;
        case 4: //顺序表的查找
            cout << "请输入所要查找价格:";
            cin >> price;
            temp = LocateElem_Sq(L, price);
            if (temp != 0) {
                cout << "查找成功\n";
                cout << "该价格对应的书名为:" << L.elem[temp - 1].name << endl << endl;
            } else
                cout << "查找失败!没有这个价格对应的书籍\n\n";
            break;
        case 5: //顺序表的插入
            cout << "请输入插入的位置和书本信息,包括:编号 书名 价格(用空格隔开):";
            cin >> a;
            cin >> e.id >> e.name >> e.price; //输入a和b,a代表插入的位置,b代表插入的数值(书本信息)
            if (ListInsert_Sq(L, a, e))
                cout << "插入成功.\n\n";
            else
                cout << "插入失败.\n\n";
            break;
        case 6: //顺序表的删除
            cout << "请输入所要删除的书籍的位置:";
            cin >> c;
            if (ListDelete_Sq(L, c))
                cout << "删除成功.\n\n";
            else
                cout << "删除失败.\n\n";
            break;
        case 7: //顺序表的输出
            cout << "当前图书系统信息(顺序表)读出:\n";
            for (i = 0; i < L.length; i++)
                cout << left << setw(15) << L.elem[i].id << "\t" << left
                        << setw(50) << L.elem[i].name << "\t" << left
                        << setw(5) << L.elem[i].price << endl;
            cout << endl;
            break;
        }
    }
    return 0;
}
  • 写回答

3条回答 默认 最新

  • 关注

    检查一下你建立的文件是和程序一个目录吗

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月11日
  • 已采纳回答 10月3日
  • 修改了问题 10月3日
  • 修改了问题 10月3日
  • 展开全部

悬赏问题

  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题