图书管理系统的设计与实现 以图书管理系统的设计与实现为例,即定义一个包含图书信息(图书编号,书名,价格)的顺序表,可以不考虑重名的情况,系统至少包含以下功能: (1)根据指定图书个数,逐个输入图书信息; (2)逐个显示图书表中所有图书的相关信息; (3)给定一个图书信息,插入到表中指定的位置; (4)删除指定位置的图书记录; (5)统计表中图书个数; (6)利用快速排序按照图书编号进行排序; (7)分别利用直接插入排序和折半插入排序按照价格进行排序; (8)根据价格进行折半查找,成功返回此图书的图书编号和书名。
时间: 2024-01-27 15:05:44 浏览: 28
好的,我可以为您介绍一下图书管理系统的设计与实现,以图书信息的顺序表为例。
1. 定义图书信息结构体
首先,需要定义一个结构体来表示图书信息,结构体包含图书编号、书名、价格等属性。可以定义如下:
```
typedef struct {
int bookId; // 图书编号
char title[50]; // 书名
float price; // 价格
} Book;
```
2. 定义顺序表结构体
为了存储多个图书信息,需要定义一个顺序表结构体,它包含一个指向图书信息数组的指针和当前表中图书个数。
```
typedef struct {
Book *books; // 指向图书信息数组的指针
int length; // 当前表中图书个数
} BookList;
```
3. 实现功能函数
接下来,需要实现各种功能函数,包括根据指定图书个数逐个输入图书信息、逐个显示图书表中所有图书的相关信息、给定一个图书信息,插入到表中指定的位置、删除指定位置的图书记录、统计表中图书个数、利用快速排序按照图书编号进行排序、分别利用直接插入排序和折半插入排序按照价格进行排序、根据价格进行折半查找等。
这里给出一些函数的代码实现,以供参考:
```
// 初始化图书表
void initBookList(BookList *list, int size) {
list->books = (Book *)malloc(size * sizeof(Book));
list->length = 0;
}
// 逐个输入图书信息
void inputBooks(BookList *list, int n) {
int i;
for (i = 0; i < n; i++) {
printf("请输入第%d本图书的编号、书名、价格:", i+1);
scanf("%d%s%f", &(list->books[i].bookId), list->books[i].title, &(list->books[i].price));
list->length++;
}
}
// 逐个显示图书表中所有图书的相关信息
void displayBooks(BookList *list) {
int i;
for (i = 0; i < list->length; i++) {
printf("图书编号:%d,书名:%s,价格:%.2f\n", list->books[i].bookId, list->books[i].title, list->books[i].price);
}
}
// 给定一个图书信息,插入到表中指定的位置
void insertBook(BookList *list, int pos, Book book) {
int i;
if (pos < 1 || pos > list->length + 1) {
printf("插入位置不合法!\n");
return;
}
if (list->length == MAX_SIZE) {
printf("图书表已满,无法插入!\n");
return;
}
for (i = list->length; i >= pos; i--) {
list->books[i] = list->books[i-1];
}
list->books[pos-1] = book;
list->length++;
}
// 删除指定位置的图书记录
void deleteBook(BookList *list, int pos) {
int i;
if (pos < 1 || pos > list->length) {
printf("删除位置不合法!\n");
return;
}
for (i = pos; i < list->length; i++) {
list->books[i-1] = list->books[i];
}
list->length--;
}
// 统计表中图书个数
int countBooks(BookList *list) {
return list->length;
}
// 快速排序按照图书编号进行排序
void quickSort(BookList *list, int left, int right) {
if (left < right) {
int i = left, j = right;
Book temp = list->books[i];
while (i < j) {
while (i < j && list->books[j].bookId >= temp.bookId) j--;
if (i < j) list->books[i++] = list->books[j];
while (i < j && list->books[i].bookId < temp.bookId) i++;
if (i < j) list->books[j--] = list->books[i];
}
list->books[i] = temp;
quickSort(list, left, i-1);
quickSort(list, i+1, right);
}
}
// 直接插入排序按照价格进行排序
void insertSort(BookList *list) {
int i, j;
Book temp;
for (i = 1; i < list->length; i++) {
temp = list->books[i];
j = i - 1;
while (j >= 0 && list->books[j].price > temp.price) {
list->books[j+1] = list->books[j];
j--;
}
list->books[j+1] = temp;
}
}
// 折半插入排序按照价格进行排序
void binaryInsertSort(BookList *list) {
int i, j, low, high, mid;
Book temp;
for (i = 1; i < list->length; i++) {
temp = list->books[i];
low = 0;
high = i - 1;
while (low <= high) {
mid = (low + high) / 2;
if (list->books[mid].price > temp.price) {
high = mid - 1;
} else {
low = mid + 1;
}
}
for (j = i - 1; j >= high + 1; j--) {
list->books[j+1] = list->books[j];
}
list->books[high+1] = temp;
}
}
// 折半查找根据价格进行查找
int binarySearch(BookList *list, float price, int left, int right) {
int mid;
while (left <= right) {
mid = (left + right) / 2;
if (list->books[mid].price == price) {
return mid;
} else if (list->books[mid].price > price) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return -1;
}
```
4. 主函数调用
最后,在主函数中可以按照以下方式调用各个功能函数:
```
int main() {
BookList list;
initBookList(&list, MAX_SIZE);
inputBooks(&list, 3);
displayBooks(&list);
Book book = {4, "C语言程序设计", 39.8};
insertBook(&list, 2, book);
displayBooks(&list);
deleteBook(&list, 3);
displayBooks(&list);
int count = countBooks(&list);
printf("图书表中共有%d本图书。\n", count);
quickSort(&list, 0, list.length-1);
displayBooks(&list);
insertSort(&list);
displayBooks(&list);
binaryInsertSort(&list);
displayBooks(&list);
int pos = binarySearch(&list, 49.9, 0, list.length-1);
if (pos != -1) {
printf("价格为49.9的图书编号为%d,书名为%s。\n", list.books[pos].bookId, list.books[pos].title);
} else {
printf("未找到对应图书。\n");
}
return 0;
}
```
以上是一个简单的图书管理系统的设计与实现,仅供参考。