题目名称:图书管理系统算法分析:1用结构体标出信息系统的成员:图书书号,书名,作者姓名,出版社,价格2 利用c语言的文件知识将系统的信息存放在c盘下的“project choose.txt”的文件夹下3 定义各个子函数(1)定义输入信息函数,将图书信息按一定格式用scanf函数输入(统计M本的信息);(2)定义输出函数,每3个表一页直到最后一个;(3)定义信息查询函数。
a,定义按书号查询函数,如果输入的数字等于图书编号则输出要查询的信息;b,定义按姓名查询函数,如果输入的姓名字符串等于其中一个作者姓名字符串则输出信息;c,定义按出版社名称查找函数,如果输入的字符串等于其中出版社名称,则输出该信息; e,定义查找总函数,输入一个数选择查找方式,1-4分别对应调用abc四个函数。
(4)定义删除信息函数。
输入的数字作为要删除的图书编号,输出要删除的图书信息后选择是否删除,删除后将第g+1个的信息赋给第g个,输出删除后的信息表。
(5)定义信息修改函数。
输入的数字等于要修改的图书编号,输出要修改的图书信息后选择是否修改,用switch,case语句选择要修改的项目,输入n,y决定是否继续直到不继续修改,输出图书信息。
(6)定义信息统计函数。
输入一个字符串作为出版社,比较M 本书的出版社字符串是否等于输入的字符串,统计相等的个数n输出。
(7)定义图书编号排序函数。
用冒泡排序法将M本的书的图书编号按从大到小的顺序排列后输出。
4 定义主函数。
调用读取文件函数,输入数字1-5分别对应调用修改图书信息函数,删除图书信息函数,查找图书信息函数,统计图书信息函数,图书排行信息函数,0表示退出系统。
最后调用保存文件函数。
结束程序。
流程设计:代码设计:#include<stdio.h>#include<stdlib.h>#include<string.h>#define M 2#define PAGE 3/*图书结构体类型*/typedef struct{int num; /*图书号*/char name[20]; /*书名*/char zuozhe[20]; /*作者姓名*/char chubanshe[20]; /*出版社*/int price; /*价格*/}BOOKS;int read_file(BOOKS books[]){ FILE *fp;int i=0;if((fp=fopen("project choose.txt","rt"))==NULL){ printf("\n\n*****库存文件不存在!请创建");return 0;}while(feof(fp)!=1){ fread(&books[i],sizeof(BOOKS),1,fp);if(books[i].num==0)break;elsei++;}fclose(fp);return i;}void save_file(BOOKS books[],int sum){ FILE *fp;int i;if((fp=fopen("project choose.txt","wb"))==NULL){ printf("读文件错误!\n");return;}for(i=0;i<sum;i++)if(fwrite(&books[i],sizeof(BOOKS),1,fp)!=1)printf("写文件错误!\n");fclose(fp);}/*输入模块*/int input(BOOKS books[]){ int i=0;printf("\n\n 录入图书信息(最多%d 种)\n",M);printf("----------------------------------------------------\n");do{ printf("\n 第%d本图书",i+1);printf("\n 图书编号:");scanf("%d",&books[i].num); if(books[i].num==0) break;printf("\n 图书名称:");scanf("%s",books[i].name);printf("\n 作者:");scanf("%s",books[i].zuozhe);printf("\n 出版社:");scanf("%s",&books[i].chubanshe);printf("\n 图书价格:");scanf("%d",&books[i].price);i++;}while(i<M);printf("\n --%d种图书信息输入完毕!--\n",i);printf("\n 按任意键返回主菜单!");getchar();return i;}/*输出模块*/void output(BOOKS books[]){int i=0,j=0,page=1;printf("\n\n --图书信息表-- 第%d页\n\n",page);printf("图书编号----图书名称-----作者----- 出版社-----图书价格\n");printf("-------------------------------------------------------\n");do{ if(books[i].num!=0){ j++;if(j%PAGE!=0){ printf("%4d %10s %10s %10s %8d \n",books[i].num,books[i].name,books[i].zuozhe, books[i].chubanshe,books[i].price);printf("------------------------------------------------------\n");}else{ printf("按任意键继续!");getchar();printf("\n\n --图书信息表-- 第%d页\n\n",++page);printf("图书编号--图书名称--作者-- 出版社--图书价格\n");printf("------------------------------------------\n");printf("%4d %10s %10s %10s %8d \n",books[i].num,books[i].name,books[i].zuozhe, books[i].chubanshe,books[i].price);printf("---------------------------------------------\n");}}i++;}while(books[i].num!=0);printf("按任意键返回主菜单!");getchar( );}/*给定编号,作者,出版社查找信息模块*/void find_by_num(BOOKS books[],int sum){ int i,find_num;printf("\n 请输入要查找的图书编号:");scanf("%d",&find_num);for(i=0;i<sum;i++)if(books[i].num==find_num){printf("这是您所查找到的图书:\n");printf("图书编号----图书名称----作者---- 出版社---图书价格\n");printf("------------------------------------------\n");printf("%4d %10s %10s %10s %8d \n",books[i].num,books[i].name,books[i].zuozhe,books[i].chubanshe,books[i].price);printf("---------------------------------------------\n");break;}else{printf("\n 未找到要查找的图书信息,按任意键返回!");getchar();}}void find_by_zuozhe(BOOKS books[],int sum){int i;char find_zuozhe[20];printf("\n 请输入要查找的作者姓名:");scanf("%s",find_zuozhe);for(i=0;i<sum-1;i++)if(strcmp(books[i].zuozhe,find_zuozhe)==0){printf("这是您所查找到属于该作者的图书:");printf("图书编号--图书名称--作者-- 出版社--图书价格\n");printf("------------------------------------------\n");printf("%8d %10s %10s %10s %8d \n",books[i].num,books[i].name,books[i].zuozhe, books[i].chubanshe,books[i].price);printf("---------------------------------------------\n");}else{printf("\n 未找到要查找的图书信息,按任意键返回!");}}void find_by_chubanshe(BOOKS books[],int sum){int i;char find_chubanshe[20];printf("\n 请输入要查找的出版社名称:");scanf("%s",find_chubanshe);for(i=0;i<sum;i++)if(strcmp(books[i].chubanshe,find_chubanshe)==0){printf("这是您所查找到属于该出版社的图书:");printf("图书编号--图书名称--作者-- 出版社--图书价格\n");printf("------------------------------------------\n");printf("%8d %10s %10s %10s %8d \n",books[i].num,books[i].name,books[i].zuozhe, books[i].chubanshe,books[i].price);printf("---------------------------------------------\n");}else{printf("\n 未找到要查找的图书信息,按任意键返回!");getchar();}}void find(BOOKS books[],int sum){ int choice;printf("\n 您要按照哪种方式查找? \n");printf("\n 1.按图书编号查找\n");printf("\n 2.按图书作者查找\n");printf("\n 3.按出版社查找\n");printf("\n 0. 退出\n");printf("\n 请选择(0-3): \n");scanf("%d",&choice);switch(choice){ case 1: find_by_num(books,sum); break;case 2: find_by_zuozhe(books,sum); break;case 3: find_by_chubanshe(books,sum); break;case 0: break;}}/*删除信息模块*/void del(BOOKS books[]){ int i,sum;int del_num;printf("\n 请输入要删除的图书编号:");scanf("%d",&del_num);for(i=0;i<sum;i++)if(books[i].num==del_num){printf("这是您所要删除图书信息:\n");printf("图书编号----图书名称----作者---- 出版社----图书价格\n");printf("----------------------------------------------------\n");printf("%8d %10s %10s %10s %8d \n",books[i].num,books[i].name,books[i].zuozhe, books[i].chubanshe,books[i].price);printf("-----------------------------------------------------\n");printf("您确认要删除吗?");printf("按任意键继续!");getchar();printf("已成功删除图书信息!");}}/*信息修改模块*/void modify(BOOKS books[],int sum){int i=0,choice,modify_num,flag;do{printf("请输入要修改的图书编号:");scanf("%d",&modify_num);for(i=0;i<sum;i++)if(books[i].num==modify_num){ printf("\n\n --图书信息-- \n\n");printf("图书编号----图书名称----作者---- 出版社----图书价格\n");printf("------------------------------------------\n");printf("%8d %10s %10s %10s %8d \n",books[i].num,books[i].name,books[i].zuozhe, books[i].chubanshe,books[i].price);printf("---------------------------------------------\n");printf("\n 您要修改哪一项?\n");printf("\n 1.图书名称\n");printf("\n 2.作者\n");printf("\n 3.出版社\n");printf("\n 4.图书价格\n");printf("\n 请选择(1-4):\n");scanf("%d",&choice);switch(choice){ case 1: printf("\n 请输入修改后的图书名称:");scanf("%s",books[i].name); break;case 2: printf("\n 请输入修改后的作者姓名:");scanf("%s",books[i].zuozhe); break;case 3: printf("\n 请输入修改后的出版社名称:");scanf("%s",books[i].chubanshe); break;case 4: printf("\n 请输入修改后的图书价格:");scanf("%d",&books[i].price); break;}printf("\n\n --图书信息-- \n\n");printf("图书编号----图书名称----作者---- 出版社----图书价格\n"); printf("--------------------------------------------\n");printf("%8d %10s %10s %10s %8d \n",books[i].num,books[i].name, books[i].zuozhe, books[i].chubanshe,books[i].price); printf("---------------------------------------------\n");break;}else{printf("\n 该书不存在!");getchar();}printf("\n 修改成功!\n");printf("您要继续修改吗?(Y/N)");if (choice=='Y'||choice=='y'){ flag=1;printf("\n 继续!\n");}else flag=0;}while( flag==1);printf("\n 按任意键返回主菜单!");getchar();}/*图书信息统计模块*/void count(BOOKS books[],int sum) /*统计某个出版社的图书数*/ { int i;char count_chubanshe[20];int n=0;printf("请输入一个出版社名称:\n");scanf("%s",count_chubanshe);for(i=0;i<sum;i++){if( strcmp(books[i].chubanshe,count_chubanshe)==0)n++;break;}printf("统计出属于该出版社一共有%d本书\n",n);}/*排序模块*/void sort(BOOKS books[],int sum) /*按图书编号排序模块*/{BOOKS t;int i,j;printf("\n --图书信息-- \n");printf("\n 排名图书编号图书名称作者出版社图书价格\n");for(i=1;i<sum-1;i++)for(j=i+1;j<sum;j++)if(books[j].num>books[i].num){t=books[j];books[j]=books[i];books[i]=t;}for(i=0;i<sum;i++){ printf("%2d %8d %12s %12s %12s %6d \n",i+1,books[i].num,books[i].name,books[i].zuozhe, books[i].chubanshe,books[i].price);}}void main(){ BOOKS books[M];int choice,sum;sum=read_file(books);if (sum==0){printf("请录入基本图书信息!*******\n");sum=input(books);}do{printf("\n\n\n *******图书馆理系统******* \n\n");printf(" 1.修改图书信息\n\n");printf(" 2.删除图书信息\n\n");printf(" 3.查找图书信息\n\n");printf(" 4.统计图书信息\n\n");printf(" 5.图书排行信息\n\n");printf(" 0.退出系统\n\n");printf(" 请选择\n\n");scanf("%d",&choice);switch(choice){ case 1 : modify(books,sum); break;case 2 : del(books); break;case 3 : find(books,sum); break;case 4 : count(books,sum); break;case 5 : sort(books,sum); break;case 0 : break;}}while(choice!=0);save_file(books,sum);}运行结果:。