图书管理系统————数据结构

xcu数据结构作业;



#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_SIZE 100

// 定义图书结构
typedef struct {
    char title[50];
    char author[30];
    char publisher[30];
    int year;
} Book;

// 定义线性表结构
typedef struct {
    Book data[MAX_SIZE];
    int length;
} LinearList;

// 初始化线性表
void initList(LinearList* list) {
    list->length = 0;
}

// 查找图书
void searchBook(LinearList list, char* title) {
    int i, found = 0;
    for (i = 0; i < list.length; i++) {
        if (strcmp(list.data[i].title, title) == 0) {
            printf("《%s》的作者是%s,出版社是%s,出版年份是%d年\n",
            list.data[i].title, list.data[i].author,
                    list.data[i].publisher, list.data[i].year);
            found = 1;
            break;
        }
    }
    if (!found) {
        printf("图书《%s》未找到\n", title);
    }
}

// 插入图书
void insertBook(LinearList* list, Book book) {
    if (list->length >= MAX_SIZE) {
        printf("图书库已满,无法插入\n");
        return;
    }
    list->data[list->length++] = book;
    printf("图书《%s》已成功插入\n", book.title);
}

// 删除图书
void deleteBook(LinearList* list, char* title) {
    int i, index = -1;
    for (i = 0; i < list->length; i++) {
        if (strcmp(list->data[i].title, title) == 0) {
            index = i;
            break;
        }
    }
    if (index == -1) {
        printf("图书《%s》未找到\n", title);
        return;
    }
    for (i = index; i < list->length - 1; i++) {
        list->data[i] = list->data[i + 1];
    }
    list->length--;
    printf("图书《%s》已成功删除\n", title);
}

// 修改图书信息
void modifyBook(LinearList* list, char* title) {
    int i, found = 0;
    for (i = 0; i < list->length; i++) {
        if (strcmp(list->data[i].title, title) == 0) {
            printf("请输入修改后的作者:");
            scanf("%s", list->data[i].author);
            printf("请输入修改后的出版社:");
            scanf("%s", list->data[i].publisher);
            printf("请输入修改后的出版年份:");
            scanf("%d", &(list->data[i].year));
            printf("图书《%s》的信息已成功修改\n", title);
            found = 1;
            break;
        }
    }
    if (!found) {
        printf("图书《%s 》未找到\n", title);
    }
}

// 统计图书数量
void countBooks(LinearList list) {
    printf("当前图书库共有%d本图书\n", list.length);
}

int main() {
    LinearList bookList;
    Book book;
    int choice;
    char searchTitle[50];

    initList(&bookList);

    while (1) {
        printf("----- 图书信息管理系统 -----\n");
        printf("1. 查找图书");
        printf("2. 插入图书");
        printf("3. 删除图书");
        printf("4. 修改图书信息");
        printf("5. 统计图书数量");
        printf("0. 退出");
        printf("请选择操作:");
        scanf("%d", &choice);

        switch (choice) {
            case 0:
                exit(0);
            case 1:
                printf("请输入要查找的图书名称:");
                scanf("%s", searchTitle);
                searchBook(bookList, searchTitle);
                break;
            case 2:
                printf("请输入图书名称:");
                scanf("%s", book.title);
                printf("请输入图书作者:");
                scanf("%s", book.author);
                printf("请输入图书出版社:");
                scanf("%s", book.publisher);
                printf("请输入图书出版年份:");
                scanf("%d", &(book.year));
                insertBook(&bookList, book);
                break;
            case 3:
                printf("请输入要删除的图书名称:");
                scanf("%s", searchTitle);
                deleteBook(&bookList, searchTitle);
                break;
            case 4:
                printf("请输入要修改的图书名称:");
                scanf("%s", searchTitle);
                modifyBook(&bookList, searchTitle);
                break;
            case 5:
                countBooks(bookList);
                break;
            default:
                printf("请输入有效的选择!\n");
        }
    }

    return 0;
}

下面是数据表的作业,如果不能在word文档成功复制,这里也可以

#include <stdio.h>
#include <stdlib.h>
#define _CRT_SECURE_NO_WARNINGS 1

#define MAX_SIZE 200


typedef struct {
    int data[MAX_SIZE];
    int length;
} SeqList;



void menu() {
    printf("-----顺序表操作-----\n");
    printf("1.输入元素 ");
    printf("2.输出元素 ");
    printf("3.查找元素 ");
    printf("4.插入元素 ");
    printf("5.删除元素 ");
    printf("6.有序表插入元素(输入元素必须为有序) ");

    printf("0.退出");
    printf(" ---请选择操作:");
}


void input(SeqList* list) {
    int n, i;
    printf("请输入元素个数:\n");
    scanf("%d", &n);
    printf("请输入元素值:\n");
    for (i = 0; i < n; i++) {
        scanf_s("%d", &(list->data[i]));
    }
    list->length = n;
    printf("输入成功!\n");
}


void output(SeqList list) {
    int i;
    printf("顺序表元素:");
    for (i = 0; i < list.length; i++) {
        printf("%d ", list.data[i]);
    }
    printf("\n");
}


void search(SeqList list, int key) {
    int i, found = 0;
    for (i = 0; i < list.length; i++) {
        if (list.data[i] == key) {
            printf("元素 %d 在顺序表中的位置是 %d\n", key, i);
            found = 1;
            break;
        }
    }
    if (!found) {
        printf("顺序表中不存在元素 %d\n", key);
    }
}

// 插入元素
void insert(SeqList* list, int key, int index) {
    int i;
    if (index < 0 || index > list->length) {
        printf("插入位置无效!\n");
        return;
    }
    if (list->length >= MAX_SIZE) {
        printf("顺序表已满,无法插入!\n");
        return;
    }
    for (i = list->length - 1; i >= index; i--) {
        list->data[i + 1] = list->data[i];
    }
    list->data[index] = key;
    list->length++;
    printf("插入成功!\n");
}

// 删除元素
void Delete(SeqList* list, int index) {
    int i;
    if (index < 0 || index >= list->length) {
        printf("删除位置无效!\n");
        return;
    }
    for (i = index; i < list->length - 1; i++) {
        list->data[i] = list->data[i + 1];
    }
    list->length--;
    printf("删除成功!\n");
}
void insert2(SeqList* list, int key) {
    int flag =0;
    int i;


   for(i =0;i<list->length;i++){
       if(list->data[i]> key){
           flag ==1;
           break;
       }
   }
   for(int j =list->length;j>i;j--){
       list->data[j] = list->data[j-1];
   }
    list->data[i] =key;

    list->length++;
    printf("插入成功!\n");
}

int main() {
    SeqList list;
    int choice, key, index;

    list.length = 0;

    while (1) {
        menu();
        scanf_s("%d", &choice);
        switch (choice) {
            case 0:
                exit(0);
            case 1:
                input(&list);
                break;
            case 2:
                output(list);
                break;
            case 3:
                printf("请输入要查找的元素:");
                scanf_s("%d", &key);
                search(list, key);
                break;
            case 4:
                printf("请输入要插入的元素和位置:");
                scanf_s("%d %d", &key, &index);
                insert(&list, key, index);
                break;
            case 5:
                printf("请输入要删除的位置:");
                scanf_s("%d", &index);
                Delete(&list, index);
                break;
            case 6:
                printf("请输入插入的元素:");
                scanf_s("%d", &key);
                insert2(&list, key);
                break;
            default:
                printf("请输入有效的选择!\n");
        }
    }

    return 0;
}

程序运行结果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值