GCC校友交作业记得改一下我还没交!!!
Visual Studio编译环境
功能: 0、退出。
1、基于单链表存储结构的图书信息表的创建和输出。
2、基于单链表存储结构的图书信息表的新图书的入库。
3、基于单链表存储结构的图书信息表的旧图书的出库。
4、基于单链表存储结构的图书信息表按书号查找。
5、基于单链表存储结构的图书信息表按价格区间查找。
6、基于单链表存储结构的按图书价格升序排序。
7、基于单链表存储结构的按图书价格修改。
8、基于单链表存储结构的按图书价格普调。
9、基于单链表存储结构的按最贵图书查找。
10、基于单链表存储结构的图书去重。
11、基于单链表存储结构的图书遍历。
12、更新写入文本
Dec C++和VS编译器创建项目都要创建C++项目: 【C语言|基于单链表的图书管理系统(C语言)】 VS:
VS2019如何创建C++项目?_Gemini-zero的博客-CSDN博客_vs2019怎么创建c++项目打开VS2019,选择空项目后,点击下一步(如果没有找到空项目,说明你下载的时候没勾选C++模块)输入项目名,更改项目存放路径后,选择下一步选择C++文件,修改程序名称,点击添加找到“解决方案资源管理器”,右键点击源文件,选择添加新建项此时可以开始编写C++程序了...https://blog.csdn.net/qq_44364832/article/details/105820626
Dec c++: https://jingyan.baidu.com/article/fd8044fae80db55031137a07.html
文章图片
https://jingyan.baidu.com/article/fd8044fae80db55031137a07.html
文章图片
这是我vs的框架
创建头文件 struct.h 定义数据类型和存储结构
#ifndef __STRUCH_H__
#define __STRUCH_H__#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
//Status 是函数返回值类型,其值是函数结果状态代码。
typedef int ElemType;
//ElemType 为可定义的数据类型,此设为int类型struct Book {
char id[15];
//ISBN
char name[20];
//书名
double price;
//定价
};
typedef struct LNode {
Book data;
//结点的数据域
struct LNode* next;
//结点的指针域,存储后继节点位置
} LNode, *LinkList;
//LinkList为指向结构体LNode的指针类型#endif
创建 function_declare.h 头文件把所有的方法函数声明
#pragma once
#ifndef __FUNCTION_H__
#define __FUNCTION_H__//初始化
Status InitList_L(LinkList& L, bool& staMain);
Status Updata_books(LinkList& L);
Status Read_books(LinkList& L);
Status Traverse(LinkList L);
Status Cr_List(LinkList& L);
Status Sch_List(LinkList& L);
Status Cz_List(LinkList L);
Status SearchBookPriceRange(LinkList L);
Status PriceAscendingSort(LinkList& L);
Status ReviseAccordingBookPrice(LinkList& L);
Status PriceIncrease(LinkList& L);
Status SearchBookPriceBest(LinkList& L);
Status DeleteDuplicateBooks(LinkList& L);
#endif
创建 file_operation.cpp 源文件读取本程序文件夹目录中名为book的txt文本文件
#include
#include
#include "struct.h"Status Read_books(LinkList& L) { LNode* r;
r = L;
FILE* fp;
if ((fp = fopen("book.txt", "r")) == NULL) {
puts("Fail to open file!\a\n");
return ERROR;
} while (!feof(fp)) {
LNode* p = new LNode;
fscanf(fp, "%s%s%lf\n", p->data.id, p->data.name, &p->data.price);
p->next = NULL;
r->next = p;
r = p;
}
r->next = NULL;
fclose(fp);
return OK;
}//修改txt文件
Status Updata_books(LinkList& L) {
LinkList p = L;
FILE* fp;
if ((fp = fopen("book.txt", "w+")) == NULL) {
puts("Fail to open file!\a\n");
return ERROR;
} //数据写入文件
rewind(fp);
while (p->next != NULL) {
p = p->next;
fprintf(fp, "%s %s %.2lf\n", p->data.id, p->data.name, p->data.price);
}
fclose(fp);
printf("Text update succeeded!\n");
}
创建 books_operation.cpp 源文件编写系统的功能
#include
#include
#include "struct.h"
#include
#include "function_declare.h"//初始化状态
bool sta = false;
//11、遍历
Status Traverse(LinkList L) {
LinkList p = L;
int sum = 0;
printf("The book information is as follows:\n");
while (p->next != NULL) {
p = p->next;
printf("%s %s %.2f元\n", p->data.id, p->data.name, p->data.price);
}
return OK;
}//1、初始化
Status InitList_L(LinkList& L,bool &staMain) { //算法2.6 单链表的初始化
//构造一个空的单链表L
if (sta) {
printf("ERROR:Do not repeat initialization!\a\n");
return ERROR;
}
L = new LNode;
//生成新结点作为头结点,用头指针L指向头结点
L->next = NULL;
//头结点的指针域置空
Read_books(L);
printf("Create table succeeded complete.\n");
Traverse(L);
sta = true;
staMain = true;
return OK;
}//2、基于链表存储结构的图书信息表的新图书的入库。
Status Cr_List(LinkList& L) {
Book e;
int i;
LinkList p, s;
p = L;
if (!sta) {
printf("ERROR:The linked list is not initialized!\a\n");
return ERROR;
}
int j = 0;
//判断是否有头结点,无头节点则创建失败。
printf("Please enter the position you want to insert:");
scanf("%d", &i);
while (p && (j < i - 1)) {
p = p->next;
++j;
}
if (!p || j > i - 1) {
printf("ERROR:On failure!\a\n");
return ERROR;
}
printf("Isbn:");
scanf("%s", &e.id);
printf("title:");
scanf("%s", &e.name);
printf("price:");
scanf("%lf", &e.price);
while (p && (j < i - 1)) {
p = p->next;
++j;
}
if (!p || j > i - 1) {
printf("ERROR:Incorrect insertion position!\a\n");
return ERROR;
}
s = new LNode;
//s = (LinkList)malloc(sizeof(Book));
//插入时先新建头结点
s->next = NULL;
//定义p=L用p代替L进行指针遍历,防止丢失头结点
s->data = https://www.it610.com/article/e;
s->next = p->next;
p->next = s;
Traverse(L);
printf("On a successful!\n");
return OK;
}//3、基于链表存储结构的图书信息表的旧图书的出库。
Status Sch_List(LinkList& L) {
if (!sta) {
printf("ERROR::The linked list is not initialized!\a\n");
return ERROR;
}
if (L->next == NULL) {
printf("ERROR:The list is empty!\n\a");
return ERROR;
}
char name[15];
LinkList q = L;
LinkList p = L->next;
printf("Enter the isbn number to delete:\n");
scanf("%s", &name);
while (p) {
if (!strcmp(name, p->data.id)) {
q->next = p->next;
free(p);
p = q->next;
Traverse(L);
printf("The successful!\n");
return OK;
}
q = p;
p = p->next;
}
printf("ERROR:There is no book!\a\n");
}//4、基于链表存储结构的图书信息表按书号查找。
Status Cz_List(LinkList L) {
if (!sta) {
printf("ERROR:The linked list is not initialized!\a\n");
return ERROR;
}
if (L->next == NULL) {
printf("ERROR:The list is empty!\n\a");
return ERROR;
}
char name[15];
LinkList p = L;
printf("Enter the isbn you are looking for:\n");
scanf("%s", &name);
while (p->next) {
if (!strcmp(name, p->next->data.id)) {
p = p->next;
printf("%s %s %.2f元\n", p->data.id, p->data.name, p->data.price);
return OK;
}
p = p->next;
}
printf("ERROR:There is no book!\a\n");
return ERROR;
}//5、基于链表存储结构的图书信息表按价格区间查找。
Status SearchBookPriceRange(LinkList L) {
if (!sta) {
printf("ERROR:The linked list is not initialized!\a\n");
return ERROR;
}
if (L->next == NULL) {
printf("ERROR:The list is empty!\n\a");
return ERROR;
}
LinkList p = L;
int num = 0;
bool exist = false;
double min_price;
double max_price;
printf("The lowest price:");
getchar();
scanf("%lf", &min_price);
printf("The highest price:");
getchar();
scanf("%lf", &max_price);
while (p->next) {
if (p->next->data.price >= min_price && p->next->data.price <= max_price) {
printf("%s\t%s\t%.2lf\n", p->next->data.id, p->next->data.name, p->next->data.price);
exist = true;
}
p = p->next;
}
if (exist == false) {
printf("ERROR:Books are not available at this price!\n\a");
return ERROR;
}
printf("There are %d books altogether.\n", num);
return OK;
}//6、基于链表存储结构的按图书价格升序排序。
Status PriceAscendingSort(LinkList& L) {
if (!sta) {
printf("ERROR:The linked list is not initialized!\a\n");
return ERROR;
}
if (L->next == NULL) {
printf("ERROR:The list is empty!\n\a");
return ERROR;
}
LinkList pfirst;
LinkList psecond;
LinkList pend = NULL;
pfirst = L;
psecond = L;
Book temp;
while (pfirst != pend){
while (pfirst->next != pend){
if (pfirst->data.price > pfirst->next->data.price){
temp = pfirst->data;
pfirst->data = https://www.it610.com/article/pfirst->next->data;
pfirst->next->data = https://www.it610.com/article/temp;
}
pfirst = pfirst->next;
}
pend = pfirst;
pfirst = L;
}
Traverse(L);
printf("Order to complete.\n");
return OK;
}//7、基于链表存储结构的按图书价格修改。Status ReviseAccordingBookPrice(LinkList& L) {
if (!sta) {
printf("ERROR:The linked list is not initialized!\a\n");
return ERROR;
}
if (L->next == NULL) {
printf("ERROR:The list is empty!\n\a");
return ERROR;
}
LinkList p=L;
char name[15];
double price;
printf("isbn:");
getchar();
scanf("%s", &name);
printf("price:");
getchar();
scanf("%lf", &price);
while (p->next) {
if (!strcmp(name, p->next->data.id)) {
p = p->next;
p->data.price = price;
printf("%s %s %.2f元\n", p->data.id, p->data.name, p->data.price);
printf("Modify the success.\n");
return OK;
}
p = p->next;
}
printf("ERROR:Books don't exist!\n\a");
return ERROR;
}//8、基于链表存储结构的按图书价格普调。
Status PriceIncrease(LinkList& L) {
if (!sta) {
printf("ERROR:The linked list is not initialized!\a\n");
return ERROR;
}
if (L->next == NULL) {
printf("ERROR:The list is empty!\n\a");
return ERROR;
}
LinkList p = L->next;
int len = 0;
double sum_price = 0;
double average;
while (p) {
sum_price += p->data.price;
p=p->next;
len++;
}
average = sum_price / len;
p = L->next;
while (p) {
if (average > p->data.price) {
p->data.price += (p->data.price * 0.2);
}
else {
p->data.price += (p->data.price * 0.1);
}
p = p->next;
}
Traverse(L);
printf("The average price: %lf 元\n", average);
printf("The price has been raised successfully.\n");
return OK;
}//9、基于链表存储结构的按最贵图书查找。
Status SearchBookPriceBest(LinkList& L) {
if (!sta) {
printf("ERROR:The linked list is not initialized!\a\n");
return ERROR;
}
if (L->next == NULL) {
printf("ERROR:The list is empty!\n\a");
return ERROR;
}
int num = 0;
LinkList p = L->next;
double expensive = 0;
while (p) {
expensive = expensive < p->data.price ? p->data.price : expensive;
p = p->next;
}
p = L->next;
while (p) {
if (p->data.price >= expensive) {
printf("%s %s %.2lf\n", p->data.id, p->data.name, p->data.price);
num++;
}
p = p->next;
}
printf("There are %d books altogether.\n", num);
return OK;
}//10、基于链表存储结构的图书去重。
Status DeleteDuplicateBooks(LinkList& L) {
if (!sta) {
printf("ERROR:The linked list is not initialized!\a\n");
return ERROR;
}
if (L->next == NULL) {
printf("ERROR:The list is empty!\n\a");
return ERROR;
}
LinkList p;
LinkList mark;
LinkList q;
for (mark = L->next;
mark != NULL;
mark = mark->next)
{
q = mark;
p = mark->next;
while (p)
{
if (!strcmp(mark->data.id, p->data.id))
{
q->next = p->next;
free(p);
p = q->next;
}
else
{
q = p;
p = p->next;
}
}
}
Traverse(L);
printf("Duplicate books have been successfully deleted.\n");
return OK;
}
创建主函数 main.cpp 源文件编写界面并执行程序
#include
#include
#include "struct.h"
#include "function_declare.h"int main() {
bool staMain = false;
LinkList L;
int init, choose;
printf("Press any key to access the main menu.\n");
getchar();
while (true) {
system("cls");
printf("============The main menu=========\n");
printf("0、exit\n");
printf("1、Create a order table.\n");
printf("2、New books are put in storage.\n");
printf("3、Old books go out of stock.\n");
printf("4、Search by isbn.\n");
printf("5、Search by price range.\n");
printf("6、Sort by price in ascending order.\n");
printf("7、Revise according to book price.\n");
printf("8、According to the book price general adjustment.\n");
printf("9、Search by most expensive book.\n");
printf("10、Delete duplicate books.\n");
printf("11、View all books.\n");
printf("12、Updates are saved to text.\n");
printf("\nPlease enter the required function number:");
scanf("%d", &choose);
printf("--------------------------------------------------\n");
switch (choose) {
case 0:
system("cls");
printf("Exiting the system successfully.\n");
system("pause");
return 0;
case 1:
InitList_L(L,staMain);
system("pause");
break;
case 2:
Cr_List(L);
system("pause");
break;
case 3:
Sch_List(L);
system("pause");
break;
case 4:
Cz_List(L);
system("pause");
break;
case 5:
SearchBookPriceRange(L);
system("pause");
break;
case 6:
PriceAscendingSort(L);
system("pause");
break;
case 7:
ReviseAccordingBookPrice(L);
system("pause");
break;
case 8:
PriceIncrease(L);
system("pause");
break;
case 9:
SearchBookPriceBest(L);
system("pause");
break;
case 10:
DeleteDuplicateBooks(L);
system("pause");
break;
case 11:
if (!staMain) {
printf("ERROR:The linked list is not initialized!\a\n");
system("pause");
}
else {
Traverse(L);
system("pause");
}
break;
case 12:
if (!staMain) {
printf("ERROR:The linked list is not initialized!\a\n");
system("pause");
}
else {
Updata_books(L);
system("pause");
}
break;
default:
printf("Error:Command error!\n\a");
system("pause");
break;
}
}
return 0;
}
本程序添加了防误操作的代码,防止误输入。
文章图片
附上测试文本(放到本项目的目录上即可) 9787512100831 计算机操作系统 35.25
9787811234923 汇编语言程序设计教程 43.55
9787302219972 单片机技术及应用 46.85
9787302257646 程序设计基础 47.52
9787302203513 编译原理 67.35
自行创建book.txt文件即可直接运行
文章图片
提示:如果读写文本出现乱码,可能是你的文本编码格式跟编译器对应不上,新建一个新的.txt再尝试。 基于单链表的图书管理系统,与文章配套-C++文档类资源-CSDN下载基于单链表的图书管理系统,与文章配套更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/weixin_55797565/85083861
如果有用的话可以给一个小赞吗
推荐阅读
- 数据结构|图书管理系统 C语言链表实现 学校大作业功能齐全(书籍信息以及用户信息保存在附带的txt文件中)
- c++|(C++)使用链表编写图书管理系统
- c++逆天改命|c++逆天改命篇2
- 项目|基于javaweb的图书管理系统
- 数据结构|BigDecimal使用不当,造成P0事故!
- C语言|指针进阶(一)(C语言)
- C语言|指针进阶超详解
- C++|设计一个有getmin功能的栈
- 栈和队列|1.1设计一个有getMin功能的栈