C语言实现图书管理系统
本文实例为大家分享了C语言实现图书管理系统的具体代码,供大家参考,具体内容如下
一、分析过程
首先此程序需要实现输入、增加、删除、查询、输出的五大功能,则首先需要设置一个菜单键,让用户可以选择不同的功能,完成不同的操作,然后编写不同的函数实现不同的功能,在这个过程中注意要人性化,让用户方便,直观的进行操作。
二、算法
三、函数模块介绍
1录入模块:本模块主要执行信息的录入功能
2浏览模块:本模块主要是执行把已有信息输出浏览功能
3查询模块:本模块主要是按照图书名查找图书的相关信息
4删除模块:主要是执行删除图书信息的功能
5退出模块:方便用户离开
四、源程序
#include#include #include #include structbooks_list { charauthor[20];/*作者名*/ charbookname[20];/*书名*/ charpublisher[20];/*出版单位*/ charpbtime[15];/*出版时间*/ charloginnum[10];/*登陆号*/ floatprice;/*价格*/ charclassfy[10];/*分类号*/ structbooks_list*next;/*链表的指针域*/ }; structbooks_list*Create_Books_Doc();/*新建链表*/ voidInsertDoc(structbooks_list*head);/*插入*/ voidDeleteDoc(structbooks_list*head,intnum);/*删除*/ voidPrint_Book_Doc(structbooks_list*head);/*浏览*/ voidsearch_book(structbooks_list*head);/*查询*/ voidsave(structbooks_list*head);/*保存数据至文件*/ /*新建链表头节点*/ structbooks_list*Create_Books_Doc() { structbooks_list*head; head=(structbooks_list*)malloc(sizeof(structbooks_list));/*分配头节点空间*/ head->next=NULL;/*头节点指针域初始化,定为空*/ returnhead; } /*保存数据至文件*/ voidsave(structbooks_list*head) { structbooks_list*p; FILE*fp; p=head; fp=fopen("data.txt","w+");/*以写方式新建并打开data.txt文件*/ fprintf(fp,"┏━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━┳━━━━┓\n");/*向文件输出表格*/ fprintf(fp,"┃登录号┃书名┃作者┃出版单位┃出版时间┃分类号┃价格┃\n"); fprintf(fp,"┣━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━━╋━━━╋━━━━┫\n"); /*指针从头节点开始移动,遍历至尾结点,依次输出图书信息*/ while(p->next!=NULL) { p=p->next; fprintf(fp,"┃%-6.6s┃%-10.10s┃%-10.10s┃%-10.10s┃%-12.12s┃%-6.6s┃%.2f┃\n",p->loginnum,p->bookname,p->author,p->publisher,p->pbtime,p->classfy,p->price); } fprintf(fp,"┗━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━━┻━━━┻━━━━┛\n"); fclose(fp); printf("已将图书数据保存到data.txt文件\n"); } /*插入*/ voidInsertDoc(structbooks_list*head) { /*定义结构体指针变量s指向开辟的新结点首地址p为中间变量*/ structbooks_list*s,*p; charflag='Y';/*定义flag,方便用户选择重复输入*/ p=head; /*遍历到尾结点,p指向尾结点*/ while(p->next!=NULL) { p=p->next; } /*开辟新空间,存入数据,添加进链表*/ while(flag=='Y'||flag=='y') { s=(structbooks_list*)malloc(sizeof(structbooks_list)); printf("\n请输入图书登陆号:"); fflush(stdin); scanf("%s",s->loginnum); printf("\n请输入图书书名:"); fflush(stdin); scanf("%s",s->bookname); printf("\n请输入图书作者名:"); fflush(stdin); scanf("%s",s->author); printf("\n请输入图书出版社:"); fflush(stdin); scanf("%s",s->publisher); printf("\n请输入图书出版时间:"); fflush(stdin); scanf("%s",s->pbtime); printf("\n请输入图书分类号:"); fflush(stdin); scanf("%s",s->classfy); printf("\n请输入图书价格:"); fflush(stdin); scanf("%f",&s->price); printf("\n"); p->next=s;/*将新增加的节点添加进链表*/ p=s;/*p指向尾节点,向后移*/ s->next=NULL; printf("━━━━添加成功!━━━━"); printf("\n继续添加?(Y/N):"); fflush(stdin); scanf("%c",&flag); printf("\n"); if(flag=='N'||flag=='n') {break;} elseif(flag=='Y'||flag=='y') {continue;} } save(head);/*保存数据至文件*/ return; } /*查询操作*/ voidsearch_book(structbooks_list*head) { structbooks_list*p; chartemp[20]; p=head; if(head==NULL||head->next==NULL)/*判断数据库是否为空*/ { printf("━━━━图书库为空!━━━━\n"); } else { printf("请输入您要查找的书名:"); fflush(stdin); scanf("%s",temp); /*指针从头节点开始移动,遍历至尾结点,查找书目信息*/ while(p->next!=NULL) { p=p->next; if(strcmp(p->bookname,temp)==0) { printf("\n图书已找到!\n"); printf("\n"); printf("登录号:%s\t\n",p->loginnum); printf("书名:%s\t\n",p->bookname); printf("作者名:%s\t\n",p->author); printf("出版单位:%s\t\n",p->publisher); printf("出版时间:%s\t\n",p->pbtime); printf("分类号:%s\t\n",p->classfy); printf("价格:%.2f\t\n",p->price); } if(p->next==NULL) { printf("\n查询完毕!\n"); } } } return; } /*浏览操作*/ voidPrint_Book_Doc(structbooks_list*head) { structbooks_list*p; if(head==NULL||head->next==NULL)/*判断数据库是否为空*/ { printf("\n━━━━没有图书记录!━━━━\n\n"); return; } p=head; printf("┏━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━┳━━━━┓\n"); printf("┃登录号┃书名┃作者┃出版单位┃出版时间┃分类号┃价格┃\n"); printf("┣━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━━╋━━━╋━━━━┫\n"); /*指针从头节点开始移动,遍历至尾结点,依次输出图书信息*/ while(p->next!=NULL) { p=p->next; printf("┃%-6.6s┃%-10.10s┃%-10.10s┃%-10.10s┃%-12.12s┃%-6.6s┃%.2f┃\n",p->loginnum,p->bookname,p->author,p->publisher,p->pbtime,p->classfy,p->price);/*循环输出表格*/ } printf("┗━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━━┻━━━┻━━━━┛\n"); printf("\n"); } /*删除操作*/ voidDeleteDoc(structbooks_list*head) { structbooks_list*s,*p;/*s为中间变量,p为遍历时使用的指针*/ chartemp[20]; intpanduan;/*此变量用于判断是否找到了书目*/ panduan=0; p=s=head; printf("[请输入您要删除的书名]:"); scanf("%s",temp); /*遍历到尾结点*/ while(p!=NULL) { if(strcmp(p->bookname,temp)==0) { panduan++; break; } p=p->next; } if(panduan==1) { for(;s->next!=p;)/*找到所需删除卡号结点的上一个结点*/ { s=s->next; } s->next=p->next;/*将后一节点地址赋值给前一节点的指针域*/ free(p); printf("\n━━━━删除成功!━━━━\n"); } else/*未找到相应书目*/ { printf("您输入的书目不存在,请确认后输入!\n"); } return; } intmain() { structbooks_list*head; charchoice; head=NULL; for(;;)/*实现反复输入选择*/ { printf("┏━┓━━━━━━━━━━━━━━━━━━━┏━┓\n"); printf("┃┃tony图书馆管理系统┃┃\n"); printf("┃┗━━━━━━━━━━━━━━━━━━━┛┃\n"); printf("┃[1]图书信息录入┃\n"); printf("┃┃\n"); printf("┃[2]图书信息浏览┃\n"); printf("┃┃\n"); printf("┃[3]图书信息查询┃\n"); printf("┃┃\n"); printf("┃[4]图书信息删除┃\n"); printf("┃┃\n"); printf("┃[5]退出系统┃\n"); printf("┃┃\n"); printf("┃┃\n"); printf("┗━━━━━━━━━━━━━━━━━━━━━━━┛\n"); printf("请选择:"); fflush(stdin); scanf("%c",&choice); if(choice=='1') { if(head==NULL) { head=Create_Books_Doc(); } InsertDoc(head); } elseif(choice=='2') { Print_Book_Doc(head); } elseif(choice=='3') { search_book(head); } elseif(choice=='4') { DeleteDoc(head); } elseif(choice=='5') { printf("\n"); printf("━━━━━━━━感谢使用图书管理系统━━━━━━━━\n"); break; } else { printf("━━━━输入错误,请重新输入!━━━━\n"); } } return0; }
五、课程设计总结
通过这一周的课程设计,我感受到做程序一定要有自己的清晰计划,否则会无处用力,感觉会很乱,当高屋建瓴的有计划后,然后开始认真严谨的设计每一个模块,要知道用户的一切输入都是不可信的,必须想得要全面,要仔细的对待每一个细节,任何一个差错都有可能让程序崩溃,这其中有许多的困难,刚开始感觉到束手无策,但是放一放,换个角度想就会豁然开朗,我觉得从这个中感觉到了充实,满足感,也提醒我以后要多多练练,多上机,积累经验,争取设计出更多的好的程序。
更多学习资料请关注专题《管理系统开发》。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。