设计一个计算机管理系统完成图书管理基本业务。 【基本要求】 1) 每种书的登记内容包括书号、书名、著作者、现存量和库存量; 2) 对书号建立索引表(线性表)以提高查找效率; 3) 系统主要功能如下: *采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加; *借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量; *归还:注销对借阅者的登记,改变该书的现存量。 二、 涉及的主要知识点 1. C语言知识:结构体,函数,指针等。 2. 线表的顺序及链式存储结构。写出完整的C语言代码
时间: 2024-01-21 10:20:21 浏览: 277
以下是一个简单的图书管理系统的C语言代码,其中使用了线性表的顺序存储结构:
```
#include <stdio.h>
#include <string.h>
#define MAX_BOOKS 100 //最大书籍数量
#define MAX_NAME_LENGTH 50 //最大名称长度
//定义书籍结构体
typedef struct {
char book_id[10]; //书号
char book_name[MAX_NAME_LENGTH]; //书名
char author[MAX_NAME_LENGTH]; //作者
int stock; //库存量
int total; //总量
} Book;
Book books[MAX_BOOKS]; //书籍数组
int num_books = 0; //当前书籍数量
//根据书号查找书籍在数组中的位置,返回-1表示未找到
int find_book(char *book_id) {
int i;
for (i = 0; i < num_books; i++) {
if (strcmp(books[i].book_id, book_id) == 0) {
return i;
}
}
return -1;
}
//新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加
void add_book() {
Book book;
printf("请输入书号:");
scanf("%s", book.book_id);
int index = find_book(book.book_id);
if (index != -1) {
printf("该书已存在,只增加库存量!\n");
printf("请输入增加的库存量:");
int stock;
scanf("%d", &stock);
books[index].stock += stock;
} else {
printf("请输入书名:");
scanf("%s", book.book_name);
printf("请输入作者:");
scanf("%s", book.author);
printf("请输入库存量:");
scanf("%d", &book.stock);
book.total = book.stock;
books[num_books] = book;
num_books++;
}
}
//如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量
void borrow_book() {
char book_id[10];
printf("请输入要借阅的书号:");
scanf("%s", book_id);
int index = find_book(book_id);
if (index == -1) {
printf("该书不存在!\n");
} else if (books[index].stock == 0) {
printf("该书已被借完!\n");
} else {
printf("请输入借阅者的书证号:");
char card_id[20];
scanf("%s", card_id);
printf("请输入归还期限(天数):");
int days;
scanf("%d", &days);
books[index].stock--;
printf("借书成功!\n");
printf("借阅信息:书号:%s,书名:%s,作者:%s,借阅者:%s,归还期限:%d天\n", book_id, books[index].book_name, books[index].author, card_id, days);
}
}
//注销对借阅者的登记,改变该书的现存量。
void return_book() {
char book_id[10];
printf("请输入要归还的书号:");
scanf("%s", book_id);
int index = find_book(book_id);
if (index == -1) {
printf("该书不存在!\n");
} else {
printf("请输入借阅者的书证号:");
char card_id[20];
scanf("%s", card_id);
books[index].stock++;
printf("还书成功!\n");
}
}
//显示所有书籍信息
void show_books() {
printf("共有%d本书:\n", num_books);
printf("%-10s %-50s %-20s %-10s %-10s\n", "书号", "书名", "作者", "库存量", "总量");
int i;
for (i = 0; i < num_books; i++) {
printf("%-10s %-50s %-20s %-10d %-10d\n", books[i].book_id, books[i].book_name, books[i].author, books[i].stock, books[i].total);
}
}
int main() {
int choice;
do {
printf("图书管理系统\n");
printf("1. 新购一种书\n");
printf("2. 借出一本书\n");
printf("3. 归还一本书\n");
printf("4. 显示所有书籍信息\n");
printf("0. 退出系统\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_book();
break;
case 2:
borrow_book();
break;
case 3:
return_book();
break;
case 4:
show_books();
break;
case 0:
break;
default:
printf("无效操作!\n");
}
} while (choice != 0);
return 0;
}
```