c++利用链表实现一个简单的图书信息管理系统,供大家参考,具体内容如下
(1)图书信息包括isbn号、书名、作者名、价格和数量等;
(2)系统的主要功能包括:图书信息的创建、输出图书信息、查询图书信息、增加图书信息、删除图书信息。
#include <stdio.h>#include <stdlib.h>#include <string.h>//创建结构体及其成员typedef struct node {int num;//编号char name[20];//书名char author[20];//作者int ixsit;//数量float price;//价格struct node *next;//指针域} s;//结构体定义为s//各函数定义void choo();void menu(); //菜单函数s *create();//创建链表函数void print(s *);//输出链表函数void pop_sort(s *);//排序void inrt(s *);//插入节点函数void del(s *);//删除节点函数void arch1(s *);//书名查找节点函数void arch2(s *);//作者查找节点函数void arch3(s *);//编号查找void mod(s *);//修改图书信息//主函数int main北京雾霾天气() {choo();}void choo() {s *head;int n, a = 1;//n用来控制选择操作类型,a控制循环,以-1终止while (a > 0) {menu();//显示菜单printf("选择你想使用的功能:");scanf("%d", &n);//选择操作switch (n)//各操作数字对应菜单数字,通过n确定操作类型{ca 1://创建head = create();break;ca 2://输出printf("图书信息为(按价格排序后)\n");pop_sort(head);printf("编号\t书名\t作者\t数量\t价格\n");print(head);break;ca 3://插入inrt(head);printf("插入后\n");printf("编号\t书名\t作者\t数量\t价格\n");print(head);break;ca 4://删除del(head);printf("删除后\n");printf("编号\t书名\t作者\t数量\t价格\n");print(head);break;ca 5://书名查找arch1(head);break;ca 6://作者查找arch2(head);break;ca 7://编号查找arch3(head);break;ca 8://修改mod(head);pop_sort(head);printf("图书信息为\n");printf("编号\t书名\t作者\t数量\t价格\n");print(head);break;default:a = -1;//跳出循环条件break;}}}//菜单模块直接显示void menu() {printf("\n\n");printf("\t\t 欢迎使用图书管理系统\n");printf("\t\t|----------score-----------|\n");printf("\t\t|\t1.创建图书 |\n");printf("\t\t|\t2.展示图书信息 |\n");printf("\t\t|\t3.添加图书信息 |\n");printf("\t\t|\t4.删除图书 |\n");printf("\t\t|\t5.按图书名搜索 |\n");printf("\t\t|\t6.按作者名搜索 |\n");printf("\t\t|\t7.按图书编号搜索 |\n");printf("\t\t|\t8.修改图书信息 |\n");printf("\t\t|\t9.退出程序 |\n");printf("\t\t|---------------家长学校授课教案-----------|\n");printf("\t\t\tchoice(1-9):\n");}//创建链表模块s *create() {s *head, *p, *q;//定义指针int i;head = (s *) malloc(sizeof(s));//头节点开辟空间head->next = null;//置空头节点的指针域q = head;//q指针记录头节点的地址p = head->next;//p指针记录头节点的指针域的地址printf("请输入图书编号,图书名,作者,图书数量,价格,最后输入0结束\n");int num;scanf("%d", &num);while (num != 0)//输入书籍编号输入为零停止循环{p = (s *) malloc(sizeof(s));//p指针开辟空间//输入各成员p->num = num;scanf("%s %s %d %f", p->name, p->author, &p->ixsit, &p->price);p->next = null;//置空p节点的指针域q->next = p;//p,q节点连接q = p;//q指针后移printf("请输入图书编号,图书名,作者,图书数量,价格,最后输入0结束\n");scanf("%d", &num);}return head;//返回链表的起始地址}//插入节点模块(可多个插入)void inrt(s *head) {int i, num, flag = 1;//flag实现判断指针是否到达最后一个节点s *p, *q, *r; //定义指针便于插入操作printf("请输入一本图书的信息:\n");printf("请输入图书的编号,输入0结束\n");scanf("%d", &num);while (num != 0)//输入编号不为零时循环,以零终止,可实现多个插入{r = (s *) malloc(sizeof(s));//为r开辟空间r->next = null;//置空r的指针域r->num = num;printf("请输入图书名,作者,图书数量,图书价格\n");scanf("%s %s %d %f", r->name, r->author, &r->ixsit, &r->price);q = head;//q指针记录头节点的地址p = head->next;//p指针记录头节点的指针域的地址while (q->next != null && p->price < r->price)//循环条件:当q->next不为空,以及按价格排序插入{p = p->next;//p指针后移q = q->next;//q指针后移if (q->next == null)//这个判断防止q->next为空时,在执行循环是出现野指针使程序出错{p = null;//防止出现野指针pq->next = r;//连接节点r->next = null;//置空r指针域flag = 0;//到达最后一个节点更改flagbreak;}}if (flag)//判断是否到达最后一个节点,为真执行该操作{r->next = p;q->next = r;//实现将r节点插入链表}printf("请输入图书编号,输入0结束\n");scanf("%d", &num);}}//删除节点模块void del(s *head) {s *p, *q;//定义指针int b;//用于输入编号查找删除p = head;//p记录头节点的地址q = head->next;//q记录头节点的指针域的地址printf("请输入你想要删除的图书编号:");//输入编号scanf("%d", &b);while (q != null)//q不为空时执行循环{if (q->num == b)//判断是否找到输入的编号//为真时{p->next = q->next;//断开q节点free(q);//释放q节点neicunq = null; //置空q指针防止出现野指针} el {//判断为假时p = p->next;//p指针后移q = q->next;//q指针后移}}if (p == null)//当查找到最后一个节点还未查到要删除的编号时,输出输入错误printf("输入错误\n");}//书名查找模块void arch1(s *head) {s *p;//定义指针char name1[20];//定义name1用于输入查找书名printf("请输入你要搜素的书名:");//am i safe输入查找书名scanf("%s", name1);p = head->next;while (p != null) {if (strcmp(p->name, name1) == 0)//判断是否找到书籍{//为真时,输出信息printf("书籍信息\n");printf("编号\t书名\t作者\t数量\t价格\n");printf("%d\t%s\t%s\t%d\t%.2f\n", p->num, p->name, p->author, p->ixsit, p->price);break;} el//为假时p = p->next;//指针后移}if (p == null)//查找到最后一个节点还未查到要的编号时,输出输入错误printf("输入错误\n");}//作者查找模块void arch2(s *head) {s *p;//定义指针char name2[20];//定义name2用于输入查找书籍printf("输入你想要查询的作者:");//输入查找作者scanf("%s", name2);p = head->next;while (p != null) {if (strcmp(p->author, name2) == 0)//判断是否找到书籍{//为真时,输出信息printf("书籍信息\n");printf("编号\t书名\t作者\t数量\t价格\n");printf("%d\t%s\t%s\t%d\t%.2f\n", p->num, p->name, p->author, p->ixsit, p->price);break;} el//为假时p = p->next;//指针后移}if (p == null)//查找到最后一个节点还未查到要的编号时,输出输入错误printf("输入错误\n");}//编号查找void arch3(s *head) {s *p;//定义指针int num1;//定义num1用于输入查找书籍printf("请输入你要搜索的图书编号:");//输入查找编号scanf("%d", &num1);p = head->next;while (p != null) {if (p->num == num1)/教室作文/判断是否找到书籍{//为真时,输出信息printf("书籍信息\n");printf("编号\t书名\t作者\t数量\t价格\n");printf("%d\t%s\t%s\t%d\t%.2f\n", p->num, p->name, p->author, p->ixsit, p->price);break;} el//为假时p = p->next;//指针后移}if (p == null)//查找到最后一个节点还未查到要的编号时,输出error inputprintf("输入错误\n");}//修改信息模块void mod(s *head) {s *p;//定义指针int num1, num2, ixsit1;//定义num1用于输入查找书籍修改信息,num2用于修改char name1[20], author1[20];float price1;printf("请输入你要修改的图书编号:");//输入要修改的图书编号scanf("%d", &num1);p = head->next;while (p != null) {if (p->num == num1)//判断是否找到书籍{printf("请再次输入 图书编号,书名,作者,图书数量 ,价格\n");//为真时,重输图书信息scanf("%d %s %s %d %f", &num2, name1, author1, &ixsit1, &price1);p->num = num2;strcpy(p->name, name1);strcpy(p->author, author1);p->ixsit = ixsit1;p->price = price1;break;} el//为假时p = p->next;//指针后移}if (p == null)//查找到最后一个节点还未查到要的编号时,输出输入错误printf("输入错误\n");}void pop_sort(s *head) //链表冒泡排序{//排序中没有修改头节点指针值,只是修改指针内容head->next的值s *pre, *p, *tail, *temp;tail = null;pre = head;while ((head->next->next) != tail)//(head->next)!=tail同样适用 ,多执行最后一个步比较{p = head->next;pre = head;while (p->next != tail) {if ((p->price) > (p->next->price)) {pre->next = p->next; //交换节点方法temp = p->next->next;p->next->next = p;p->next = temp;p = pre->next; //p回退一个节点}p = p->next; //p再前进一个节点pre = pre->next;}tail = p;}}//输出链表模块void print(s *head) {int i;s *p = head->next;while (p)//当p不为空的时候执行{printf("%d\t%s\t%s\t%d\t%.2f\n", p->num, p->name, p->author, p->ixsit, p->price);printf("\n");杨绛我们仨p = p->next;//指针后移}}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持www.887551.com。
本文发布于:2023-04-03 21:58:58,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/6ebcd07cd98edf73537e822046beca78.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:C++利用链表实现图书信息管理系统.doc
本文 PDF 下载地址:C++利用链表实现图书信息管理系统.pdf
留言与评论(共有 0 条评论) |