一、课程设计与题目要求
图书登记管理程序
问题描述:
设计一个图书登记管理程序,以方便图书管理员管理图书馆内的图书,该程序应该具有以下功能:
(1)从键盘输入某本图书的信息
(2)给定图书的国际标准书号(ISBN),显示该图书的信息 。
(3)给定图书的作者,显示所有该作者所著的图书 。
(4)给定国际标准书号(ISBN),修改该图书的信息 。
(5)给定国际标准书号(ISBN),删除该图书的信息 。
题目要求:
(1)按照分析、设计、编码、调试、测试的软件过程完成这个应用程序 。
(2)图书信息应该包含国际标准书号、图书名称、图书出版社、图书作者(假设一个作者)、图书价格、出版时间 。
(3)为各项操作功能设计一个菜单,应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目 。
输入要求:
(1)应用程序运行后在屏幕上显示一个菜单 。用户可以根据需求,选定相应的操作项目 。进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息 。程序根据用户输入的信息完成相应的处理,实现要求的功能 。
(2)能对输入的数据进行简单的校验,例如,出版时间必须是一个合法的日期格式,际标准书号是唯一的(一个国际标准书号对应一种图书信息) 。
输出要求:
【C课设—图书管理系统】(1)应用程序运行后,要在屏幕上显示一个菜单 。
(2)要求用户输入数据时,给出清晰、明确的提示信息,包括输入的数据内容、格式以及结束方式等 。
(3)在程序完成处理后,要清楚地给出程序的处理结果 。例如,在给定国际标准书号删除图书信息时,如果该图书不存在,要提示没能删除,如果删除成功要提示删除成功 。
实现要求:
(1)在程序中使用链表存储图书信息 。
(2)采用模块化程序设计的方法,将程序中的各项功能用函数实现 。
二、程序运行结果 添加图书信息界面
修改图书信息
删除图书信息
按图书编号查找
按作者查找
按出版社查找
查询不存在的图书
三、程序源代码
#include#include#include#include#include#include//图书信息结构体typedef struct book{char bookid[20];//图书编号char bookname[50];//图书名char author[50];//作者姓名char press[50];//出版社float price;//图书价格char time[50];//出版时间struct book *next;//定义book类型对象指针}book;book* head;//定义头结点int length;//链表长度//模块化接口设计void menu();//菜单函数void show();//显示图书信息函数void Add();//添加图书信息函数void Delete();//删除图书信息函数void search();//搜索图书信息函数void modify();//修改图书信息函数/*主函数功能描述:程序的主体*/int main(void){int a;menu();head=(book*)malloc(sizeof(book));//头结点开辟空间head->next=NULL;//头指针初始化为空while(1){printf("请选择相应的功能:");scanf("%d",&a);switch(a){case 0:return 0;case 1:if(head!=NULL){show();menu();}break;case 2:Add();menu();break;case 3:if(head){search();menu();}break;case 4:if(head){Delete();menu();}break;case 5:if(head){modify();menu();}break;default:break;}}return 0;}//菜单函数void menu(){printf("-------------------------------------\n");printf("欢迎进入图书登记管理系统\n");printf("0.退出系统\n");printf("1.显示图书信息\n");printf("2.添加图书信息\n");printf("3.查询图书信息\n");printf("4.删除图书信息\n");printf("5.修改图书信息\n");printf("--------------------------------------\n");return;}//显示函数void show(){book *p=head->next;if(p==NULL){printf("图书信息为空,请先输入图书信息!\n");system("pause");system("cls");return;}printf("所有的图书信息如下:\n");while(p!=NULL){printf("%s %s %s %s %.2f %s\n",p->bookid,p->bookname,p->author,p->press,p->price,p->time);p=p->next;}system("pause");system("cls");return;}//添加函数void Add(){book *p1,*p2;length=0;p1=head; printf("请输入图书的编号,书名,作者姓名,出版社,价格,出版时间:\n");while(1){p2=(book*)malloc(sizeof(book));//动态申请一个空间,用来存放一个节点,并用临时指针p2指向这个节点scanf("%s",&p2->bookid);if(p2->bookid[0]=='0'){printf("图书信息输入完成!\n");system("pause");break;}scanf("%s %s %s %f %s",&p2->bookname,&p2->author,&p2->press,&p2->price,&p2->time);length++;p2->next=p1->next;p1->next=p2;}system("cls");return;}//删除函数void Delete(){char num[20];book *p,*q;q=head;p=head->next;if(p==NULL){printf("图书信息为空,请先输入图书信息!\n");system("pause");system("cls");return;}printf("请输入要删除的图书编号:\n");scanf("%s",&num);while(p!=NULL){if(strcmp(p->bookid,num)==0){q->next=p->next;//断开q节点free(p);//释放q节点length--;printf("删除成功!\n");system("pause");system("cls");return;}//为假时p=p->next;//p指针后移q=q->next;//q指针后移}if(p==NULL){printf("找不到这本书!\n");system("pause");system("cls");return;}}//搜索函数void search(){int x,flag1=0,flag2=0;char num[20],name[20],press[20];book *p=head->next;if(p==NULL){printf("图书信息为空,请先输入图书信息!\n");system("pause");system("cls");return;}printf("1.根据图书编号查找\n");printf("2.根据作者姓名查找\n");printf("3.根据出版社查找\n");printf("请选择功能:\n");scanf("%d",&x);if(x==1){printf("需要查找的图书编号为:");scanf("%s",&num);while(p!=NULL){if(strcmp(p->bookid,num)==0){printf("图书编号为%s的图书信息:\n",num);printf("%s %s %s %s %.2f %s\n",p->bookid,p->bookname,p->author,p->press,p->price,p->time);system("pause");system("cls");return;}p=p->next;}if(p==NULL){printf("查无此书!\n");}}else if(x==2){printf("需要查找的作者姓名为:");scanf("%s",&name);while(p!=NULL){if(strcmp(p->author,name)==0){if(flag1==0)printf("作者为%s的图书信息:\n",name);flag1=1;printf("%s %s %s %s %.2f %s\n",p->bookid,p->bookname,p->author,p->press,p->price,p->time);}p=p->next;}if(flag1==0){printf("查无此作者!\n");}}else if(x==3){printf("需要查找的出版社为:");scanf("%s",&press);while(p!=NULL){if(strcmp(p->press,press)==0){if(flag2==0)printf("出版社为%s的图书信息:\n",press);flag2=1;printf("%s %s %s %s %.2f %s\n",p->bookid,p->bookname,p->author,p->press,p->price,p->time);}p=p->next;}if(flag2==0){printf("查无此出版社!\n");}}system("pause");system("cls");return;}//修改函数void modify(){char num[20];book *p;//定义指针p=head->next;if(p==NULL){printf("图书信息为空,请先输入图书信息!\n");system("pause");system("cls");return;}printf("请输入要修改的图书编号:\n");scanf("%s",&num);while(p!=NULL){if(strcmp(p->bookid,num)==0){printf("修改的书籍信息为:\n");printf("%s %s %s %s %.2f %s\n",p->bookid,p->bookname,p->author,p->press,p->price,p->time);printf("请输入要修改的书籍信息(图书编号、书名、作者、出版社、价格、出版时间的顺序输入):\n");scanf("%s %s %s %s %f %s",&p->bookid,&p->bookname,&p->author,&p->press,&p->price,&p->time);printf("修改成功!\n");system("pause");system("cls");return;}//为假时p=p->next;//指针后移}if(p==NULL){printf("找不到这本书!\n");system("pause");system("cls");return;}system("cls");}