图书信息管理系统

 

 

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXSIZE 10000

typedef struct {
    char no[100];//图书ISBN
    char name[100];//图书名字
    double price;//图书价格
} Book;

typedef struct {
    Book data[MAXSIZE];
    int length;
} SqList,*PSqList;

PSqList PL;//创建一个顺序表,PL为一个指针变量

FILE* fp;
int cnt,st,op,i,j,k,flag,num,idx;
char name[100],no[100];
double price;
Book temp;

void menu();//菜单
void add();//图书插入
void delete1();//图书删除
void modify();//价格更新
void output();//图书浏览
void search();//图书查找
void price_sort();//价格排序
void reserse_save();//逆序存储
void bookstatistics();//图书统计
void read_in_information();//导入信息
void save_information1();//保存信息1(存储到book.txt中)
void save_information2();//保存信息2.1(正序存储到book-newsort.txt中)
void save_information3();//保存信息2.2(逆序存储到book-newsort.txt中)
int main() {
    read_in_information();//导入信息
    printf("图书信息如下:\n");
    output();//图书浏览
    menu();//菜单
    scanf("%d", &op);
    if (op >= 1 && op <= 8) {
        switch (op) {
            case 1:
                add();
                break;
            case 2:
                delete1();
                break;
            case 3:
                modify();
                break;
            case 4:
                price_sort();
                break;
            case 5:
                output();
                break;
            case 6:
                search();
                break;
            case 7:
                bookstatistics();
                break;
            case 8:
                reserse_save();
                break;
        }
    } else printf("输入无效\n");
    return 0;
}
//菜单
void menu() {
    printf("                                            图书信息管理系统\n");
    printf("***********************************************************************************************************************\n");
    printf("                                     1.图书插入\n");
    printf("                                     2.图书删除\n");
    printf("                                     3.价格更新\n");
    printf("                                    4.价格排序\n");
    printf("                                     5.图书浏览\n");
    printf("                                     6.图书查找\n");
    printf("                                     7.图书统计\n");
    printf("                                     8.逆序存储\n");
    printf("***********************************************************************************************************************\n");
    printf("请输入代码选择(1-8):\n");
}
//图书浏览
void output() {
    printf("北京林业大学图书馆计算机类图书采购列表\n");
    printf("ISBN         书名                    定价\n");
    for(i=1; i<=PL->length; i++) {
        printf("%-10s  %-20s    %-10.2f\n",PL->data[i].no,PL->data[i].name,PL->data[i].price);
    }
    printf("\n");
}
//图书统计
void bookstatistics() {
    printf("图书总数为%d\n",PL->length);
    printf("\n");
}
//图书查找
void search() {
    flag = 1;
    while (1) {
        printf("请输入需要查找的图书位置或书名(如果有多本,则全部输出)\n按键1选择输入图书位置,按键2选择输入书名,按键0选择停止输入:");
        scanf("%d", &op);
        if (op == 1 || op == 2 || op == 0) {
            switch (op) {
                case 0:
                    flag = 0;
                    break;
                case 1: {
                    printf("请输入要查找的图书位置:");
                    scanf("%d", &num);
                    if(num<1||num>PL->length) printf("图书不存在,查找失败\n");
                    else {
                        printf("该图书信息如下:\n");
                        printf("ISBN       书名         定价\n");
                        printf("%-8s  %-8s    %-6.2f\n",PL->data[num].no,PL->data[num].name,PL->data[num].price);
                    }
                }
                break;
                case 2: {
                    printf("请输入要查找的书名:");
                    scanf("%s", name);
                    int cnt=0;
                    for(int i=1; i<=PL->length; i++) {
                        if(strcmp(PL->data[i].name,name)==0) cnt++;
                    }
                    if(cnt==0) printf("图书不存在,查找失败\n");
                    else {
                        printf("该图书信息如下:\n");
                        printf("ISBN       书名         定价\n");
                        for(int i=1; i<=PL->length; i++) {
                            if(strcmp(PL->data[i].name,name)==0) printf("%-8s  %-8s    %-6.2f\n",PL->data[i].no,PL->data[i].name,PL->data[i].price);
                        }
                    }
                    break;
                }
            }
        } else {
            printf("输入无效,请重新输入!!!\n");
            continue;
        }
        if (flag == 0) break;
    }
    printf("\n");
}
//价格更新
void modify() {
    for(i=1; i<=PL->length; i++) {
        if(PL->data[i].price<45) PL->data[i].price*=1.2;
        else PL->data[i].price*=1.1;
    }
    save_information2();//正序存储到新文件book-newsort.txt中
    printf("更新成功!!!\n");
}
//图书插入
void add() {
    printf("请输入需要插入的图书信息(ISBN,书名,定价):\n");
    scanf("%s%s%lf", no, name, &price);
    printf("请输入需要插入的位置num:\n");
    scanf("%d",&num);
    if(num<1||num>PL->length) printf("指定位置非法!!!\n");
    else {
        for(i=PL->length; i>=num; i--) {
            strcpy(PL->data[i+1].no,PL->data[i].no),strcpy(PL->data[i+1].name,PL->data[i].name),PL->data[i+1].price=PL->data[i].price;
        }
        strcpy(PL->data[num].no,no),strcpy(PL->data[num].name,name),PL->data[num].price=price;
        PL->length++;
    }
    save_information1();//存储到book.txt中
}
//图书删除
void delete1() {
    printf("请输入需要删除的图书位置:\n");
    scanf("%d", &num);
    if(num<1||num>PL->length) printf("指定位置非法!!!\n");
    else {
        for(int i=num; i<PL->length; i++) {
            strcmp(PL->data[i].no,PL->data[i+1].no),strcmp(PL->data[i].name,PL->data[i+1].name),PL->data[i].price=PL->data[i+1].price;
        }
        PL->length--;
    }
    save_information1();//存储到book.txt中
}
//导入信息
void read_in_information() {
    if ((fp = fopen("D:\\book.txt", "r")) == NULL) {
        printf("file open error!\n");
        exit(0);
    }
    PL = (PSqList)malloc(sizeof(SqList)); // 分配内存
    if(PL)
        PL->length = 0;
    else {
        printf("内存分配失败!!!\n");
        exit(-1);
    }
    while (!feof(fp)) {
        ++cnt;
        fscanf(fp,"%s%s%lf",PL->data[cnt].no,PL->data[cnt].name,&PL->data[cnt].price);
        PL->length++;
    }
    if (fclose(fp)) {
        printf("can not close the file!\n");
        exit(0);
    }
}
//价格排序
void price_sort() {
    for(i=1; i<PL->length; i++) {
        k=i;
        for(j=i+1; j<=PL->length; j++) {
            if(PL->data[j].price<PL->data[k].price) k=j;
        }
        if(k!=i) {
            temp=PL->data[i];
            PL->data[i]=PL->data[k];
            PL->data[k]=temp;
        }
    }
    save_information2();//正序存储到新文件book-newsort.txt中
    printf("排序成功!!!\n");
}
//逆序存储
void reserse_save() {
    save_information3();//逆序存储到新文件book-newsort.txt中
    printf("操作成功!!!\n");
}
//保存信息1
void save_information1() {
    if ((fp = fopen("D:\\book.txt", "w")) == NULL) {
        printf("file open error!\n");
        exit(0);
    }
    for(int i=1; i<=PL->length; i++) {
        if(i<PL->length) fprintf(fp,"%s %s %.2f\n",PL->data[i].no,PL->data[i].name,PL->data[i].price);
        else fprintf(fp,"%s %s %.2f",PL->data[i].no,PL->data[i].name,PL->data[i].price);
    }
    if (fclose(fp)) {
        printf("can not close the file!\n");
        exit(0);
    }
}
//保存信息2.1(正序存储到book-newsort.txt中)
void save_information2() {
    if ((fp = fopen("D:\\book-newsort.txt", "w")) == NULL) {
        printf("file open error!\n");
        exit(0);
    }
    for(int i=1; i<=PL->length; i++) {
        if(i<PL->length) fprintf(fp,"%s %s %.2f\n",PL->data[i].no,PL->data[i].name,PL->data[i].price);
        else fprintf(fp,"%s %s %.2f",PL->data[i].no,PL->data[i].name,PL->data[i].price);
    }
    if (fclose(fp)) {
        printf("can not close the file!\n");
        exit(0);
    }
}
//保存信息2.2(逆序存储到book-newsort.txt中)
void save_information3() {
    if ((fp = fopen("D:\\book-newsort.txt", "w")) == NULL) {
        printf("file open error!\n");
        exit(0);
    }
    for(int i=PL->length; i>=1; i--) {
        if(i>1) fprintf(fp,"%s %s %.2f\n",PL->data[i].no,PL->data[i].name,PL->data[i].price);
        else fprintf(fp,"%s %s %.2f",PL->data[i].no,PL->data[i].name,PL->data[i].price);
    }
    if (fclose(fp)) {
        printf("can not close the file!\n");
        exit(0);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值