C语言实现简单的图书管理系统
本文实例为大家分享了C语言实现简单图书管理系统的具体代码,供大家参考,具体内容如下
代码:
/* 课程设计项目名称:图书查询系统 作者:施瑞文 时间:2018.3.4 */ #include#include #include #include #include #defineNsizeof(structBOOK) structBOOK//图书信息 { charnumber[10];//登录号 charname[10];//书名 charauthor[10];//作者名 chartype[10];//类型 charpublish[10];//出版单位 chartime[8];//出版时间 floatprice;//价格 intnum;//数量 intx; structBOOK*next;//指针域 }; typedefstructBOOKBook; typedefBook*book; voidHideCursor();//隐藏光标 voidtoxy(intx,inty);//将光标移动到X,Y坐标处 voidcolor(shortx);//设置颜色 voidover();//退出 voidmenu();//菜单 voidinput_book();//图书入库 voidsave_book(bookp);//将图书信息存入文件 voidfind_book();//查询 voidprint_book();//图书总览 voiddel_book();//删除图书 voidamend_book();//修改信息 bookss(); voidfind_name_book();//按书名查询 voidfind_author_book();//按作者查询 voidfind_number_book();//按登录号查询 voidfind_publish_book();//按出版社查询 voidfuzzy_search();//模糊查找 voidHideCursor()//隐藏光标 { CONSOLE_CURSOR_INFOcursor_info={1,0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info); } voidcolor(shortx) { if(x>=0&&x<=15) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x); } else { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x); } } voidtoxy(intx,inty)//将光标移动到X,Y坐标处 { COORDpos={x,y}; HANDLEOut=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(Out,pos); } voidmenu()//菜单 { do { system("cls");//清屏 HideCursor();//隐藏光标 color(15);//设置一个好看的颜色 chart; toxy(50,5);//将光标移动到(50,5)坐标处 printf("图书查询管理系统"); toxy(48,8); printf("|1.图书入库|"); toxy(48,10); printf("|2.修改信息|"); toxy(48,12); printf("|3.删除信息|"); toxy(48,14); printf("|4.图书查询|"); toxy(48,16); printf("|5.图书总览|"); toxy(48,18); printf("|6.退出软件|"); t=getch();//不回显函数 switch(t) { case'1':input_book();break; case'2':amend_book();break; case'3':del_book();break; case'4':find_book();break; case'5':print_book();break; case'6':over();break; default:break; } }while(1); } bookss()//将文件中的内容读出到链表中,返回值为表头地址 { FILE*fp;//文件指针 intn=0; bookhead=NULL; bookp2,p,pr=NULL; fp=fopen("mybook","ab+");//以只读的方式打开文件 if(fp==NULL) { printf("cannotopenfile\n"); } while(!feof(fp))//判断文件位置标志是否移动到文件末尾 { n++; p=(book)malloc(N);//向内存申请一段空间 fread(p,N,1,fp);//将fp所指向的文件中的内容赋给p if(n==1) { head=p; p2=p; } else//创建链表 { pr=p2; p2->next=p; p2=p; } } if(pr!=NULL) pr->next=NULL; else head=NULL; fclose(fp);//关闭文件 returnhead;//返回头指针 } voidinput_book()//图书录入 { do { system("cls"); color(10); chart; bookp; p=(book)malloc(N);//申请空间 //输入图书信息 toxy(48,8); printf("请输入图书登录号(小于10位数):"); scanf("%s",p->number);getchar(); toxy(48,10); printf("请输入书名(小于10位数):"); scanf("%s",p->name);getchar(); toxy(48,12); printf("请输入作者名(小于10位数):"); scanf("%s",p->author);getchar(); toxy(48,14); printf("请输入图书类别(小于10位数):"); scanf("%s",p->type);getchar(); toxy(48,16); printf("请输入图书出版单位(小于10位数):"); scanf("%s",p->publish);getchar(); toxy(48,18); printf("请输入图书出版时间(小于8位数):"); scanf("%s",p->time);getchar(); toxy(48,20); printf("请输入图书价格:"); scanf("%f",&p->price);getchar(); toxy(48,22); printf("请输入图书数量:"); scanf("%d",&p->num); save_book(p); toxy(48,24); printf("正在保存...."); Sleep(500);//暂停0.5秒 system("cls"); toxy(46,8); printf("-------------------------"); toxy(46,9); printf("||"); toxy(46,10); printf("|保存成功!是否继续?|"); toxy(46,12); printf("|1.是2.否|"); toxy(46,13); printf("||"); toxy(46,14); printf("-------------------------"); while(1)//利用死循环可有效防止其他按键干扰 { t=getch(); if(t=='1') { break; } elseif(t=='2') { menu(); } } }while(1); } voidamend_book()//修改图书信息 { do { system("cls"); color(10); bookhead,p; inti=11,j=0,x; charch,t; FILE*fp;//文件指针 char_name[10]; charnumber[10];//登录号 charname[10];//书名 charauthor[10];//作者名 chartype[10];//类型 charpublish[10];//出版单位 chartime[8];//出版时间 floatprice;//价格 intnum;//数量 head=ss(); p=head; toxy(48,10); printf("请输入你要修改的图书的书名:"); gets(_name); while(p!=NULL)//初始化p->x为0 { p->x=0; p=p->next; } p=head;//让p重新指向表头 toxy(20,5); printf("***********************************************图书信息******************************************************"); toxy(20,8); printf("-------------------------------------------------------------------------------------------------------------"); toxy(20,9); printf("登录号书名作者名图书类别出版单位出版时间价格数量"); toxy(20,10); printf("-------------------------------------------------------------------------------------------------------------"); while(p!=NULL) { if(p!=NULL&&strcmp(p->name,_name)==0) { toxy(20,i); j++; printf("%d:%s%14s%14s%14s%14s%18s%.2f%12d\n",j,p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num); p->x=j;//给符合查询标准的结点标号 i++; } p=p->next; } if(j==0)//如果j=0,即没有进入前面的搜索循环,也就是没有找到相应的信息 { toxy(50,i); printf("没有找到相应的信息!(按0返回,按1重新搜索)"); while(1)//死循环是为了防止除0和1的其他按键干扰 { ch=getch(); if(ch=='0') { menu();break; } elseif(ch=='1') { break; } } if(ch=='1')//如果输入的ch等于1,则结束本次循环 continue; } while(1) { toxy(45,i); printf("请输入您要修改的图书的编号:"); scanf("%d",&x);getchar(); if(x>j||x==0) { toxy(45,++i); printf("输入错误,请重新输入!"); Sleep(500); } else { break; } } p=head;//让p重新指向表头 while(p!=NULL&&p->x!=x)//遍历链表查询符合条件的结点 { p=p->next; } if(p)//如果p不为空 { system("cls"); //输入要修改的信息 toxy(48,8); printf("请输入图书登录号(小于10位数):"); scanf("%s",number);getchar();strcpy(p->number,number); toxy(48,10); printf("请输入书名(小于10位数):"); scanf("%s",name);getchar();strcpy(p->name,name); toxy(48,12); printf("请输入作者名(小于10位数):"); scanf("%s",author);getchar();strcpy(p->author,author); toxy(48,14); printf("请输入图书类别(小于10位数):"); scanf("%s",type);getchar();strcpy(p->type,type); toxy(48,16); printf("请输入图书出版单位(小于10位数):"); scanf("%s",publish);getchar();strcpy(p->publish,publish); toxy(48,18); printf("请输入图书出版时间(小于8位数):"); scanf("%s",time);getchar();strcpy(p->time,time); toxy(48,20); printf("请输入图书价格:"); scanf("%f",&price);getchar();p->price=price; toxy(48,22); printf("请输入图书数量:"); scanf("%d",&num);getchar();p->num=num; } color(7); toxy(46,8); printf("-------------------------"); toxy(46,9); printf("||"); toxy(46,10); printf("|是否确认修改?|"); toxy(46,12); printf("|1.是2.否|"); toxy(46,13); printf("||"); toxy(46,14); printf("-------------------------"); while(1)//利用死循环防止其他按键干扰 { t=getch(); if(t=='1') { break; } elseif(t=='2') { menu(); } } system("cls"); toxy(46,10); printf("正在修改,请稍后...."); fp=fopen("mybook","wb");//以只写的方式打开名为mybook的二进制文件,打开的同时清空文件中的内容 if(fp==NULL) { printf("cannotopenfile"); } if(fwrite(head,N,1,fp)!=1)//将head写入fp所指向的文件中 { printf("writeerror!"); } fclose(fp);//关闭文件 if(head!=NULL)//如果head不为空 { p=head->next;//让p指向第二个结点 fp=fopen("mybook","ab");//以追加的方式打开文件 if(fp==NULL) { printf("cannotopenfile"); } while(p!=NULL) { if(fwrite(p,N,1,fp)!=1)//将p写入fp所指向的文件中 { printf("writeerror!"); } p=p->next; } fclose(fp);//关闭文件 } Sleep(500);//暂停0.5秒 system("cls"); toxy(46,10); printf("修改成功!即将自动返回主菜单...."); Sleep(500); break; }while(1); } voiddel_book()//删除信息 { do { system("cls"); color(9); FILE*fp; bookhead,p,pre=NULL; intj=0,x,i=11; charname[10]; chart,c,ch; head=ss();//调用函数,返回表头地址 toxy(48,10); printf("请输入你要删除的图书的书名:"); scanf("%s",name); p=head; while(p!=NULL) { p->x=0; p=p->next; } p=head; toxy(20,5); printf("***********************************************图书信息******************************************************"); toxy(20,8); printf("-------------------------------------------------------------------------------------------------------------"); toxy(20,9); printf("登录号书名作者名图书类别出版单位出版时间价格数量"); toxy(20,10); printf("-------------------------------------------------------------------------------------------------------------"); while(p!=NULL) { if(p!=NULL&&strcmp(p->name,name)==0) { toxy(20,i); j++; printf("%d:%s%14s%14s%14s%14s%18s%.2f%12d\n",j,p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num); p->x=j; i++; } p=p->next; } if(j==0)//如果j=0,即没有进入前面的搜索循环,也就是没有找到相应的信息 { toxy(50,i); printf("没有找到相应的信息!(按0返回,按1重新搜索)"); while(1)//死循环是为了防止除0和1的其他按键干扰 { ch=getch(); if(ch=='0') { menu();break; } elseif(ch=='1') { break; } } if(ch=='1')//如果输入的ch等于1,则结束本次循环 continue; } while(1) { toxy(45,i); printf("请输入您要删除的图书的编号:"); scanf("%d",&x);getchar(); if(x>j||x==0) { toxy(45,++i); printf("输入错误,请重新输入!"); Sleep(500); } else { break; } } color(7); toxy(46,8); printf("-------------------------"); toxy(46,9); printf("||"); toxy(46,10); printf("|是否确认删除?|"); toxy(46,12); printf("|1.是2.否|"); toxy(46,13); printf("||"); toxy(46,14); printf("-------------------------"); while(1) { t=getch(); if(t=='1') { break; } elseif(t=='2') { menu(); } } p=head; while(p!=NULL&&p->x!=x) { pre=p; p=p->next; } if(p!=NULL) { if(pre==NULL) { head=head->next; } else { pre->next=p->next; } } free(p); fp=fopen("mybook","wb"); if(fp==NULL) { printf("cannotopenfile"); } if(fwrite(head,N,1,fp)!=1) { printf("writeerror!"); } fclose(fp); if(head!=NULL) { p=head->next; fp=fopen("mybook","ab"); if(fp==NULL) { printf("cannotopenfile"); } while(p!=NULL) { if(fwrite(p,N,1,fp)!=1) { printf("writeerror!"); } p=p->next; } fclose(fp); } system("cls"); toxy(46,10); printf("正在删除,请稍后...."); Sleep(500); system("cls"); toxy(46,8); printf("-------------------------"); toxy(46,9); printf("||"); toxy(46,10); printf("|删除成功,是否继续?|"); toxy(46,12); printf("|1.是2.否|"); toxy(46,13); printf("||"); toxy(46,14); printf("-------------------------"); while(1) { c=getch(); if(c=='1') { break; } elseif(c=='2') { menu(); } } }while(1); } voidprint_book()//图书总览 { system("cls"); color(6); bookhead,p; inti=11; intsum=0; head=ss(); toxy(20,5); printf("***********************************************图书总览******************************************************"); toxy(20,8); printf("-------------------------------------------------------------------------------------------------------------"); toxy(20,9); printf("登录号书名作者名图书类别出版单位出版时间价格数量"); toxy(20,10); printf("-------------------------------------------------------------------------------------------------------------"); if(head==NULL) { toxy(45,11); printf("书库暂时没有书哦~赶快去添加几本吧^_^(按任意键返回)"); getch(); menu(); } p=head; while(p!=NULL) { toxy(20,i); printf("%s%14s%14s%14s%14s%18s%.2f%12d\n",p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num); i++; sum+=p->num;//计算图书总量 p=p->next; } toxy(48,7); printf("图书总量为:%d",sum); toxy(45,i); printf("按任意键返回"); getch();//不回显函数 } voidfind_book()//查询图书 { do { system("cls");//清屏 color(8); chart; toxy(50,5); printf("图书查询"); toxy(48,8); printf("|1.书名查询|"); toxy(48,10); printf("|2.作者查询|"); toxy(48,12); printf("|3.登录号查询|"); toxy(48,14); printf("|4.出版社查询|"); toxy(48,16); printf("|5.模糊查询|"); toxy(50,18); printf("按0返回主菜单"); t=getch(); switch(t) { case'0':menu();break; case'1':find_name_book();break; case'2':find_author_book();break; case'3':find_number_book();break; case'4':find_publish_book();break; case'5':fuzzy_search();break; default:break; } }while(1); } voidfind_name_book()//按名字查询 { system("cls"); color(8); bookhead,p; inti=11; head=ss(); charname[10]; toxy(48,8); printf("请输入您要查询图书的书名:"); gets(name); toxy(48,10); printf("正在查询...."); Sleep(500); p=head; toxy(20,5); printf("***********************************************图书总览******************************************************"); toxy(20,8); printf("-------------------------------------------------------------------------------------------------------------"); toxy(20,9); printf("登录号书名作者名图书类别出版单位出版时间价格数量"); toxy(20,10); printf("-------------------------------------------------------------------------------------------------------------"); while(p!=NULL) { if(p!=NULL&&strcmp(p->name,name)==0) { toxy(20,i); printf("%s%14s%14s%14s%14s%18s%.2f%12d\n",p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num); i++; } p=p->next; } toxy(45,i); printf("按任意键返回!"); getch(); find_book(); } voidfind_author_book()//按作者名查询 { system("cls"); color(8); bookhead,p; inti=11; head=ss(); charauthor[10]; toxy(48,8); printf("请输入您要查询图书的作者名:"); gets(author); toxy(48,10); printf("正在查询...."); Sleep(500); p=head; toxy(20,5); printf("***********************************************图书总览******************************************************"); toxy(20,8); printf("-------------------------------------------------------------------------------------------------------------"); toxy(20,9); printf("登录号书名作者名图书类别出版单位出版时间价格数量"); toxy(20,10); printf("-------------------------------------------------------------------------------------------------------------"); while(p!=NULL) { if(p!=NULL&&strcmp(p->author,author)==0) { toxy(20,i); printf("%s%14s%14s%14s%14s%18s%.2f%12d\n",p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num); i++; } p=p->next; } toxy(45,i); printf("按任意键返回!"); getch(); find_book(); } voidfind_number_book()//按图书编号查询 { system("cls"); color(8); bookhead,p; inti=11; head=ss(); charnumber[10]; toxy(48,8); printf("请输入您要查询图书的登录号:"); gets(number); toxy(48,10); printf("正在查询...."); Sleep(500); p=head; toxy(20,5); printf("***********************************************图书总览******************************************************"); toxy(20,8); printf("-------------------------------------------------------------------------------------------------------------"); toxy(20,9); printf("登录号书名作者名图书类别出版单位出版时间价格数量"); toxy(20,10); printf("-------------------------------------------------------------------------------------------------------------"); while(p!=NULL) { if(p!=NULL&&strcmp(p->number,number)==0) { toxy(20,i); printf("%s%14s%14s%14s%14s%18s%.2f%12d\n",p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num); i++; } p=p->next; } toxy(45,i); printf("按任意键返回!"); getch(); find_book(); } voidfind_publish_book()//按出版商查询 { system("cls"); color(8); bookhead,p; inti=11; head=ss(); charpublish[10]; toxy(48,8); printf("请输入您要查询图书的出版社:"); gets(publish); toxy(48,10); printf("正在查询...."); Sleep(500); p=head; toxy(20,5); printf("***********************************************图书总览******************************************************"); toxy(20,8); printf("-------------------------------------------------------------------------------------------------------------"); toxy(20,9); printf("登录号书名作者名图书类别出版单位出版时间价格数量"); toxy(20,10); printf("-------------------------------------------------------------------------------------------------------------"); while(p!=NULL) { if(p!=NULL&&strcmp(p->publish,publish)==0) { toxy(20,i); printf("%s%14s%14s%14s%14s%18s%.2f%12d\n",p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num); i++; } p=p->next; } toxy(45,i); printf("按任意键返回!"); getch(); find_book(); } voidfuzzy_search()//模糊查询 { system("cls"); color(8); bookhead,p; inti=11; head=ss(); charinformation[10]; toxy(48,8); printf("请输入您要查询图书的信息:"); gets(information); toxy(48,10); printf("正在查询...."); Sleep(500); p=head; toxy(20,5); printf("***********************************************图书总览******************************************************"); toxy(20,8); printf("-------------------------------------------------------------------------------------------------------------"); toxy(20,9); printf("登录号书名作者名图书类别出版单位出版时间价格数量"); toxy(20,10); printf("-------------------------------------------------------------------------------------------------------------"); while(p!=NULL) { if(p!=NULL&&(strcmp(p->name,information)==0||strcmp(p->author,information)==0||strcmp(p->number,information)==0||strcmp(p->publish,information)==0)) { toxy(20,i); printf("%s%14s%14s%14s%14s%18s%.2f%12d\n",p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num); i++; } p=p->next; } toxy(45,i); printf("按任意键返回!"); getch(); find_book(); } voidsave_book(bookp)//将p中内容写入文件 { FILE*fp;//文件指针 fp=fopen("mybook","ab");//以追加的方式打开名字为mybook的二进制文件 if(fp==NULL) { printf("cannotopenfile"); } if(fwrite(p,N,1,fp)!=1)//将p所指向的一段大小为N的内容存入fp所指向的文件中 { printf("writeerror"); } fclose(fp);//关闭文件 } voidover()//退出软件 { chart; toxy(48,11); printf("-----------------------"); toxy(48,12); printf("|您确定要退出吗?|"); toxy(48,14); printf("|1.确定2.取消|"); toxy(48,15); printf("-----------------------"); while(1) { t=getch();//输入t switch(t) { case'1': system("cls"); color(6); toxy(48,10); printf("正在安全退出...."); Sleep(1000);//暂停1秒 system("cls"); color(8); toxy(48,10); printf("已安全退出软件"); toxy(48,12); printf("谢谢使用!"); toxy(48,14); printf("by-by^_^"); exit(0);break;//终止程序 case'2': menu();break;//调用函数,进入菜单 default:break; } } } main()//简洁明了的主函数 { menu();//菜单 }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。