看我的C/C++笔记专栏
序号 | 系统设计题目 | 链接 |
---|---|---|
1 | 职工信息管理系统设计 | 链接 |
2 | 图书信息管理系统设计 | 链接 |
3 | 图书管理系统设计 | 链接 |
4 | 实验设备管理系统设计 | 链接 |
5 | 西文下拉菜单的设计 | 链接 |
6 | 学生信息管理系统设计 | 链接 |
7 | 学生成绩管理系统设计 | 链接 |
8 | 学生选修课程系统设计 | 课程管理系统 |
9 | 学生成绩记录簿设计 | 链接 |
10 | 学生籍贯信息记录簿设计 | 链接 |
11 | 学生通讯录管理系统设计 | 链接 |
12 | 职工工作量统计系统设计 | 链接 |
13 | 销售管理系统设计 | 链接 |
14 | 成绩管理系统设计 | 链接 |
15 | 通信录管理系统设计 | 链接 |
16 | 学生管理系统设计 | 链接 |
17 | 单项选择题标准化考试系统设计 | 链接 |
18 | 设计一个简单计算器 | 链接 |
19 | 编写一万年历系统 | 链接 |
20 | 模拟时钟转动程序 | 链接 |
21 | 完整的学生成绩管理系统 | 链接 |
22 | 数字加一游戏 | 链接 |
23 | 聊天机器人 | 链接 |
24 | 音乐小天才 | 链接 |
题目二:图书信息管理系统设计
图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
设计图书信息管理系统,功能包括:
- 系统以菜单方式工作。
- 图书信息录入功能(图书信息用文件保存)--输入。
- 图书信息浏览功能--输出。
- 图书信息查询功能--算法。
查询方式- 按书名查询。
- 按作者名查询。
- 图书信息的删除与修改(可选项)。
bookManagement.h
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_BOOKS 100 // 最大图书数量
#define FILE_NAME "books.txt" // 文件名
// 定义图书结构体
typedef struct {
int loginNo; // 登录号
char title[100]; // 书名
char author[100]; // 作者名
char category[50]; // 分类号
char publisher[100]; // 出版单位
char publicationDate[20]; // 出版时间
double price; // 价格
} Book;
// 函数声明
void showMenu();
void menu(Book* books, int* count);
void printBook(Book book);
void addBook(Book* books, int* count);
void displayBooks(Book* books, int count);
void searchByTitle(Book* books, int count);
void searchByAuthor(Book* books, int count);
void deleteByTitle(Book* books, int* count);
void deleteByAuthor(Book* books, int* count);
void deleteByLoginNo(Book* books, int* count);
void modifyByLoginNoAndTitle(Book* books, int count);
void saveToFile(Book* books, int count);
void loadFromFile(Book* books, int* count);
bookManagement.c
#include"bookManagement.h"
void showMenu() {
printf("\n");
printf("+----------------------------------+\n");
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("| 9. 保存并退出 |\n");
printf("+----------------------------------+ \n");
printf("请选择操作: ");
}
void menu(Book* books, int* count) {
int choice;
loadFromFile(books, count); // 初始化时从文件加载图书信息
while (1) {
showMenu();
scanf("%d", &choice);
switch (choice) {
case 1:
addBook(books, count); // 添加图书信息
break;
case 2:
displayBooks(books, *count); // 显示所有图书信息
break;
case 3:
searchByTitle(books, *count); // 按书名查询图书信息
break;
case 4:
searchByAuthor(books, *count); // 按作者名查询图书信息
break;
case 5:
deleteByLoginNo(books, count); // 按登录号删除图书信息
break;
case 6:
deleteByTitle(books, count); // 按书名删除图书信息
break;
case 7:
deleteByAuthor(books, count); // 按作者名删除图书信息
break;
case 8:
modifyByLoginNoAndTitle(books, *count); // 按登录号书名修改图书信息
break;
case 9:
saveToFile(books, *count); // 保存图书信息并退出
return;
default:
printf("无效的选择,请重新输入。\n");
}
}
}
void printBook(Book book) {
printf("登录号: %d\n", book.loginNo);
printf("书名: %s\n", book.title);
printf("作者名: %s\n", book.author);
printf("分类号: %s\n", book.category);
printf("出版单位: %s\n", book.publisher);
printf("出版时间: %s\n", book.publicationDate);
printf("价格: %.2f\n", book.price);
printf("\n");
}
void addBook(Book* books, int* count) {
if (*count >= MAX_BOOKS) {
printf("已达到最大容量,无法添加更多图书。\n");
return;
}
Book* book = &books[*count];
printf("请输入登录号: ");
scanf("%d", &book->loginNo);
printf("请输入书名: ");
scanf("%s", book->title);
printf("请输入作者名: ");
scanf("%s", book->author);
printf("请输入分类号: ");
scanf("%s", book->category);
printf("请输入出版单位: ");
scanf("%s", book->publisher);
printf("请输入出版时间: ");
scanf("%s", book->publicationDate);
printf("请输入价格: ");
scanf("%lf", &book->price);
(*count)++;
printf("图书信息录入成功\n");
}
void displayBooks(Book* books, int count) {
for (int i = 0; i < count; i++) {
printBook(books[i]);
}
}
void searchByTitle(Book* books, int count) {
char title[100];
printf("请输入书名进行查询: ");
scanf("%s", title);
int found = 0;
for (int i = 0; i < count; i++) {
if (strcmp(books[i].title, title) == 0) {
printBook(books[i]);
found = 1;
}
}
if (!found) {
printf("没有找到符合条件的图书。\n");
}
}
void searchByAuthor(Book* books, int count) {
char author[100];
printf("请输入作者名进行查询: ");
scanf("%s", author);
int found = 0;
for (int i = 0; i < count; i++) {
if (strcmp(books[i].author, author) == 0) {
printBook(books[i]);
found = 1;
}
}
if (!found) {
printf("没有找到符合条件的图书。\n");
}
}
void deleteByTitle(Book* books, int* count) {
char title[100];
printf("请输入要删除的书名: ");
scanf("%s", title);
int deleted = 0;
for (int i = 0; i < *count; i++) {
if (strcmp(books[i].title, title) == 0) {
for (int j = i; j < *count - 1; j++) {
books[j] = books[j + 1];
}
(*count)--;
printf("书名 %s 的图书信息已经删除。\n", title);
deleted = 1;
break;
}
}
if (!deleted) {
printf("没有找到符合条件的图书信息。\n");
}
}
void deleteByAuthor(Book* books, int* count) {
char author[100];
printf("请输入要删除的作者名: ");
scanf("%s", author);
int deleted = 0;
int newCount = 0;
Book tempBooks[MAX_BOOKS];
for (int i = 0; i < *count; i++) {
if (strcmp(books[i].author, author) != 0) {
tempBooks[newCount++] = books[i];
}
else {
printf("作者名 %s 的图书信息已经删除。\n", author);
deleted = 1;
}
}
if (!deleted) {
printf("没有找到符合条件的图书信息。\n");
}
// 更新书籍数组
for (int i = 0; i < newCount; i++) {
books[i] = tempBooks[i];
}
*count = newCount;
}
void deleteByLoginNo(Book* books, int* count) {
int loginNo;
printf("请输入要删除的登录号: ");
scanf("%d", &loginNo);
int newCount = 0;
int deleted = 0;
// 创建一个临时数组来存储未被删除的图书信息
Book tempBooks[MAX_BOOKS];
for (int i = 0; i < *count; i++) {
if (books[i].loginNo != loginNo) {
tempBooks[newCount++] = books[i];
}
else {
deleted = 1;
}
}
// 将未被删除的图书信息复制回原数组
for (int i = 0; i < newCount; i++) {
books[i] = tempBooks[i];
}
*count = newCount;
if (deleted) {
printf("登录号 %d 的所有图书信息已经删除。\n", loginNo);
}
else {
printf("没有找到符合条件的图书信息。\n");
}
}
void modifyByLoginNoAndTitle(Book* books, int count) {
int loginNo;
printf("请输入要修改的登录号: ");
scanf("%d", &loginNo);
int found = 0;
for (int i = 0; i < count; i++) {
if (books[i].loginNo == loginNo) {
printf("当前信息:\n");
printBook(books[i]);
char confirm;
printf("确认修改此图书信息吗?(y/n): ");
scanf(" %c", &confirm);
if (confirm == 'y' || confirm == 'Y') {
char title[100];
printf("请输入要修改的书名: ");
scanf("%s", title);
int modified = 0;
for (int j = 0; j < count; j++) {
if (books[j].loginNo == loginNo && strcmp(books[j].title, title) == 0) {
printf("请输入新的书名: ");
scanf("%s", books[j].title);
printf("请输入新的作者名: ");
scanf("%s", books[j].author);
printf("请输入新的分类号: ");
scanf("%s", books[j].category);
printf("请输入新的出版单位: ");
scanf("%s", books[j].publisher);
printf("请输入新的出版时间: ");
scanf("%s", books[j].publicationDate);
printf("请输入新的价格: ");
scanf("%lf", &books[j].price);
printf("图书信息已更新。\n");
modified = 1;
}
}
if (!modified) {
printf("没有找到指定书名的图书信息。\n");
}
found = 1;
break;
}
else {
printf("取消修改。\n");
break;
}
}
}
if (!found) {
printf("没有找到指定登录号的图书信息。\n");
}
}
void saveToFile(Book* books, int count) {
FILE* fp = fopen(FILE_NAME, "w");
if (fp == NULL) {
printf("无法打开文件 '%s' 进行写入。\n", FILE_NAME);
return;
}
for (int i = 0; i < count; i++) {
fprintf(fp, "%d,%s,%s,%s,%s,%s,%.2f\n",
books[i].loginNo,
books[i].title,
books[i].author,
books[i].category,
books[i].publisher,
books[i].publicationDate,
books[i].price);
}
fclose(fp);
printf("图书信息保存成功。\n");
}
void loadFromFile(Book* books, int* count) {
FILE* fp = fopen(FILE_NAME, "r");
if (fp == NULL) {
printf("文件 '%s' 不存在,创建新文件。\n", FILE_NAME);
fp = fopen(FILE_NAME, "w");
fclose(fp);
return;
}
*count = 0;
while (fscanf(fp, "%d,%[^,],%[^,],%[^,],%[^,],%[^,],%lf",
&books[*count].loginNo,
books[*count].title,
books[*count].author,
books[*count].category,
books[*count].publisher,
books[*count].publicationDate,
&books[*count].price) != EOF) {
(*count)++;
}
fclose(fp);
printf("图书信息加载成功。\n");
}
test.c
#include"bookManagement.h"
int main() {
Book books[MAX_BOOKS];
int count = 0;
menu(books, &count);
return 0;
}
终端测试截图
添加图书
按下9 保存退出后,再次启动,按下2,浏览,没有问题
继续添加图书
199,西游记,吴承恩,I242.4,浙江古籍出版社,2010,35.00
199,鲁迅全集,鲁迅,略,略,略,900.00
199,呐喊,鲁迅,略,略,略,56.00
199,三国演义,罗贯中,略,略,略,79.00
89,红楼梦,曹雪芹,略,略,略,89.00
89,水浒传,施耐庵,略,略,略,99.00
19,测试,测试,测试,测试,测试,55.00
19,测试,测试,测试,测试,测试,35.00
根据书名查询图书
根据作者查询图书
一次性删除所有该登录号信息
199,西游记,吴承恩,I242.4,浙江古籍出版社,2010,35.00
199,鲁迅全集,鲁迅,略,略,略,900.00
199,呐喊,鲁迅,略,略,略,56.00
199,三国演义,罗贯中,略,略,略,79.00
89,红楼梦,曹雪芹,略,略,略,89.00
89,水浒传,施耐庵,略,略,略,99.00
没有登录号19的图书
删除图书
删除作者的图书
修改登录号下的图书