索引查询图书(C语言程序)
c语言最全的图书管理系统程序
题目名称:图书管理系统算法分析: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);}运行结果:。
原创c语言图书馆管理系统源代码
原创C语言图书馆管理系统源代码介绍图书馆作为一个重要的知识储备和学习场所,必须进行有效的管理和组织。
使用C语言编写的图书馆管理系统可以帮助图书馆实现自动化的借阅、归还和管理功能。
本文将介绍一个原创的C语言图书馆管理系统的源代码。
功能概述这个图书馆管理系统具有以下核心功能: - 图书管理:包括添加图书、删除图书、查询图书等操作。
- 借阅管理:可以进行借阅操作,记录借阅者和借阅时间。
- 归还管理:可以进行归还操作,并更新图书的可借状态。
- 用户管理:管理借阅者的信息,包括添加用户、删除用户、查询用户等操作。
数据结构设计该图书馆管理系统使用了以下几种数据结构: 1. 图书(Book)结构体:包含图书的ID、书名、作者、可借状态等字段。
2. 用户(User)结构体:包含用户的ID、姓名、地址等字段。
3. 借阅记录(BorrowRecord)结构体:包含借阅者ID、图书ID、借阅时间等字段。
系统流程整个系统的流程可以分为以下几个步骤: 1. 用户打开系统,进入主菜单。
2. 用户选择不同的功能选项(如图书管理、借阅管理、用户管理等)。
3. 根据用户选择的功能,进入相应的功能界面。
4. 用户可以根据提示,输入相应的信息进行图书管理、借阅管理或用户管理操作。
5. 用户完成操作后,可以选择返回主菜单或退出系统。
代码实现以下是一个简化版的C语言图书馆管理系统的源代码:```c #include <stdio.h>// 定义结构体 struct Book { int id; char name[50]; char author[50]; int isAvailable; };struct User { int id; char name[50]; char address[100]; };struct BorrowRecord { int userId; int bookId; char borrowDate[20]; };// 函数声明 void addBook(); void deleteBook(); void searchBook(); void borrowBook(); void returnBook(); void addUser(); void deleteUser(); void searchUser();int main() { int choice;do {// 显示主菜单printf(\。
c语言最全的图书管理系统程序
题目名称:图书管理系统算法分析: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]。
C语言图书管理系统代码
#include<stdio.h>#include<stdlib.h>#include<string.h>struct book{int num;char bname[50];char wname[20];char press[50];char sort[50];int time;float price;struct book *next;};struct book *creatbook(); //创建链表struct book *addbook(struct book *head); //添加图书int yanzheng(struct book *head,int m); //验证新添加的图书编码是否已存在void deletebook(struct book *head); //删除图书void fprint(struct book *head); //将链表写入文件struct book *load(); //从文件中读取信息并建成链表void print_book(struct book *head); //将链表信息输出void chaxun(struct book *head); //查询图书信息void num_chaxun(struct book *head); //按图书编号查询图书void wname_chaxun(struct book *head); //按作者名查询图书void sort_chaxun(struct book *head); //按类别查询图书void time_chaxun(struct book *head); //按出版时间查询图书void bname_chaxun(struct book *head); //按图书名查询图书void xiugai(struct book *head); //修改图书信息void paixu(struct book *head); //对图书进行排序void num_paixu(struct book *head); //按图书编号排序void time_paixu(struct book *head); //按图书出版时间排序void price_paixu(struct book *head); //按图书价格排序void bname_paixu(struct book *head); //按图书名排序void wname_paixu(struct book *head); //按作者名排序int main(){int choice,n,x,y=1,c,c1=1234;char a,d,b[10],b1[10]="yjk";struct book *head=NULL;while(y){system("cls");printf("\n\n\n\n\n\n\n");printf(" ********** 欢迎光临**********\n\n");printf(" ********************** 图书信息管理系统************************\n\n\n");printf("\n\n");printf(" ============1-用户登录===========\n");printf(" ============0-退出系统===========\n");printf(" 请输入您的选择:");scanf("%d",&n);printf("\n");getchar();switch(n){case 0:y=0;break;case 1:printf(" 请输入您的用户名:");gets(b);printf("\n");printf(" 请输入您的密码:");scanf("%d",&c);printf("\n");if(strcmp(b,b1)!=0||c!=c1){printf(" 验证失败,请重新输入!\n");scanf("%c",&d);getchar();system("cls");}else{printf(" 验证通过!请按Enter键进入!\n");scanf("%c",&d);getchar();x=1;while(x){system("cls");printf(" ------------------\n");printf(" *图书信息管理系统*\n");printf(" ------------------\n\n");printf("**********************************************\n\n");printf("**********************************************\n\n");printf(" || 1-添加图书2-删除图书||\n\n");printf(" || 3-图书列表4-图书排序||\n\n");printf(" || 5-查询图书6-修改图书||\n\n");printf(" || 7-录入数据0-退出系统||\n\n");printf("**********************************************\n\n");printf("**********************************************\n\n");printf("请输入所选择的序号:");scanf("%d",&choice);getchar();system("cls");switch(choice){case 0:x=0;break;case 1:head=load();if(head==NULL){printf("文件为空,请先录入数据!\n");getchar();break;}else{head=addbook(head);printf("添加成功!\n");printf("是否将新信息保存到文件?(y/n)\n");scanf("%c",&a);getchar();switch(a){case 'n':break;case 'y':fprint(head);printf("保存成功!\n");getchar();break;}break;}case 2:head=load();if(head==NULL){printf("文件为空,请先录入数据!\n");getchar();break;}else{deletebook(head);getchar();break;}break;case 3:head=load();if(head==NULL){printf("文件为空,请先录入数据!\n");getchar();break;}else{print_book(head);getchar();break;}case 4:head=load();if(head==NULL){printf("文件为空,请先录入数据!\n");getchar();break;}else{paixu(head);getchar();}break;case 5:head=load();if(head==NULL){printf("文件为空,请先录入数据!\n");getchar();break;}else{chaxun(head);getchar();}break;case 6:head=load();if(head==NULL){printf("文件为空,请先录入数据!\n");getchar();break;}else{xiugai(head);getchar();break;}break;case 7:printf("注意:输入图书编码为0时结束!\n");head=creatbook();printf("是否将输入的信息保存到文件以覆盖文件中已存在的信息?(y/n)\n");getchar();scanf("%c",&a);getchar();switch(a){case 'n':break;case 'y':fprint(head);printf("保存成功!\n");getchar();break;}break;default:printf("您的输入有误,请重新输入!\n");getchar();break;}}}break;default:printf(" 您的输入有误! 请重新输入!\n");getchar();break;}}}//录入数据并形成链表struct book *creatbook(){struct book *head,*tail,*p;int num,time,n;char bname[50],wname[20],press[50],sort[50];float price;int size=sizeof(struct book);head=tail=NULL;printf("请输入图书编号:");scanf("%d",&num);printf("请输入图书名:");scanf("%s",bname);getchar();printf("请输入作者名:");scanf("%s",wname);getchar();printf("请输入出版社:");scanf("%s",press);getchar();printf("请输入类别:");scanf("%s",sort);getchar();printf("请输入出版时间:");scanf("%d",&time);getchar();printf("请输入价格:");scanf("%f",&price);getchar();while(1){p=(struct book *)malloc(size);p->num=num;strcpy(p->bname,bname);strcpy(p->wname,wname);strcpy(p->press,press);strcpy(p->sort,sort);p->time=time;p->price=price;p->next=NULL;if(head==NULL)head=p;elsetail->next=p;tail=p;do{printf("请输入图书编号:");scanf("%d",&num);n=yanzheng(head,num);if(n==0)break;elseprintf("您输入的编号已存在,请重新输入!\n");}while(1);if(num==0)break;else{printf("请输入图书名:");scanf("%s",bname);getchar();printf("请输入作者名:");scanf("%s",wname);getchar();printf("请输入出版社:");scanf("%s",press);getchar();printf("请输入类别:");scanf("%s",sort);getchar();printf("请输入出版时间:");scanf("%d",&time);getchar();printf("请输入价格:");scanf("%f",&price);getchar();}}return head;}//插入结点,并且插入后仍按一定顺序struct book *addbook(struct book *head){struct book *ptr,*p1,*p2,*p;char bname[50],wname[20],press[50],sort[50];int size=sizeof(struct book);int num,time,n=1;float price;do{printf("请输入图书编号:");scanf("%d",&num);n=yanzheng(head,num);if(n==0)break;elseprintf("您输入的编号已存在,请重新输入!\n");}while(1);printf("请输入图书名:");scanf("%s",bname);getchar();printf("请输入作者名:");scanf("%s",wname);getchar();printf("请输入出版社:");scanf("%s",press);getchar();printf("请输入类别:");scanf("%s",sort);getchar();printf("请输入出版时间:");scanf("%d",&time);getchar();printf("请输入价格:");scanf("%f",&price);getchar();p=(struct book *)malloc(size);p->num=num;strcpy(p->bname,bname);strcpy(p->wname,wname);strcpy(p->press,press);strcpy(p->sort,sort);p->time=time;p->price=price;p2=head;ptr=p;while((ptr->num>p2->num)&&(p2->next!=NULL)){ p1=p2;p2=p2->next;}if(ptr->num<=p2->num){if(head==p2)head=ptr;else{p1->next=ptr;p->next=p2;}}else{p2->next=ptr;p->next=NULL;}return head;}//验证添加的图书编号是否已存在int yanzheng(struct book *head,int m){struct book *p;p=head;while(p!=NULL){if(p->num==m)break;p=p->next;}if(p==NULL)return 0;elsereturn 1;}//将新链表写入文件中void fprint(struct book *head){FILE *fp;char ch='1';struct book *p1;if((fp=fopen("f1.txt","w"))==NULL){printf("File open error!\n");exit(0);}fputc(ch,fp);for(p1=head;p1;p1=p1->next){fprintf(fp,"%d %s %s %s %s %d %f\n",p1->num,p1->bname,p1->wname,p1->press,p1->sort ,p1->time,p1->price);}fclose(fp);}//从文件中读取图书信息struct book *load(){FILE *fp;char ch;struct book *head,*tail,*p1;head=tail=NULL;if((fp=fopen("f1.txt","r"))==NULL){printf("File open error!\n");exit(0);}ch=fgetc(fp);if(ch=='1'){while(!feof(fp)){p1=(struct book *)malloc(sizeof(struct book));fscanf(fp,"%d%s%s%s%s%d%f\n",&p1->num,p1->bname,p1->wname,p1->press,p1->sort,&p1-> time,&p1->price);if(head==NULL)head=p1;elsetail->next=p1;tail=p1;}tail->next=NULL;fclose(fp);return head;}elsereturn NULL;}//将整个链表的信息输出void print_book(struct book *head){struct book *ptr;if(head==NULL){printf("\n没有信息!\n");return;}printf(" 图书信息列表如下\n");printf("==========================================================\n");printf(" 编号图书名作者名出版社类别出版时间价格\n");for(ptr=head;ptr;ptr=ptr->next)printf(" %d %s %s %s %s %d %.2f\n",ptr->num,ptr->bname,ptr->wname,ptr->press,ptr->sort,ptr->time,ptr->price);printf("==========================================================\n");}//删除图书信息void deletebook(struct book *head){int a;char b,ch='1';struct book *p1,*p2;FILE *fp;printf("请输入要删除的图书编号:");scanf("%d",&a);p1=head;if(p1->num==a&&p1->next==NULL){ //对于文件中只有一组数据printf("是否清空文件!(y/n)\n");getchar();scanf("%c",&b);getchar();switch(b){case 'n':break;case 'y':if((fp=fopen("f1.txt","w"))==NULL){printf("File open error!\n");exit(0);}fclose(fp);printf("文件已清空!\n");}}else{while(p1->num!=a&&p1->next!=NULL){p2=p1;p1=p1->next;}if(p1->next==NULL){if(p1->num==a){p2->next=NULL;printf("是否确定从文件中彻底删除该图书?(y/n)\n");getchar();scanf("%c",&b);switch(b){case 'n':break;case 'y':fprint(head);printf("删除成功!\n");getchar();break;}}else{printf("没有找到要删除的数据!\n");getchar();}}else if(p1==head){head=p1->next;printf("是否确定从文件中彻底删除该图书?(y/n)\n");getchar();scanf("%c",&b);switch(b){case 'n':break;case 'y':fprint(head);printf("删除成功!\n");getchar();break;}}else{p2->next=p1->next;printf("是否确定从文件中彻底删除该图书?(y/n)\n");getchar();scanf("%c",&b);switch(b){case 'n':break;case 'y':fprint(head);printf("删除成功!\n");getchar();break;}}}}//图书查询void chaxun(struct book *head){int a;printf("==========================================================\n");printf(" ** 1-按图书编号查询2-按图书名查询**\n");printf(" ** 3-按图书类别查询4-按作者名查询**\n");printf(" ** 5-按出版时间查询0-退出查询**\n");printf("==========================================================\n");printf("请输入所选择的编号:");scanf("%d",&a);getchar();switch(a){case 0:break;case 1:num_chaxun(head);break;case 2:bname_chaxun(head);break;case 3:sort_chaxun(head);break;case 4:wname_chaxun(head);break;case 5:time_chaxun(head);break;default:printf("您的输入有误!\n");break;}}//按编号查询图书信息void num_chaxun(struct book *head){int a;struct book *p;printf("请选择您要查询的图书编号:");scanf("%d",&a);getchar();p=head;while(p!=NULL){if(p->num==a)break;p=p->next;}if(p==NULL){printf("没有找到该编号的图书!\n");}else{printf(" 你所查询的图书信息如下\n");printf("====================================================================== ===\n");printf(" ** 编号图书名作者名出版社类别出版时间价格**\n");printf("** %d %s %s %s %s %d %.2f **\n",p->num,p->bname,p->wname,p->press,p->sort,p->time,p->price);printf("====================================================================== ===\n");}}//按图书名查询图书信息void bname_chaxun(struct book *head){char a[50];int flag=0;struct book *p;printf("请选择您要查询的图书名:");gets(a);p=head;while(p!=NULL){if(strcmp(p->bname,a)==0){flag=1;break;}p=p->next;}if(flag==0){printf("没有找到该图书名的图书!\n");}else{printf(" 你所查询的图书信息如下\n");printf("====================================================================== ===\n");printf(" ** 编号图书名作者名出版社类别出版时间价格**\n");while(p!=NULL){if(strcmp(p->bname,a)==0){printf("** %d %s %s %s %s %d %.2f **\n",p->num,p->bname,p->wname,p->press,p->sort,p->time,p->price);}p=p->next;}printf("====================================================================== ===\n");}}//按作者名查询图书信息void wname_chaxun(struct book *head){char a[50];int flag=0;struct book *p;printf("请选择您要查询的图书作者名:");gets(a);p=head;while(p!=NULL){if(strcmp(p->wname,a)==0){flag=1;break;}p=p->next;}if(flag==0){printf("没有找到该图书名的图书!\n");}else{printf(" 你所查询的图书信息如下\n");printf("====================================================================== ===\n");printf(" ** 编号图书名作者名出版社类别出版时间价格**\n");while(p!=NULL){if(strcmp(p->wname,a)==0){printf("** %d %s %s %s %s %d %.2f **\n",p->num,p->bname,p->wname,p->press,p->sort,p->time,p->price);flag=1;}p=p->next;}printf("====================================================================== ===\n");}}//按图书类别查询图书信息void sort_chaxun(struct book *head){char a[50];int flag=0;struct book *p;printf("请选择您要查询的图书类别:");gets(a);p=head;while(p!=NULL){if(strcmp(p->sort,a)==0){flag=1;break;}p=p->next;}if(flag==0){printf("没有找到该图书名的图书!\n");}else{printf(" 你所查询的图书信息如下\n");printf("====================================================================== ===\n");printf(" ** 编号图书名作者名出版社类别出版时间价格**\n");while(p!=NULL){if(strcmp(p->sort,a)==0){printf("** %d %s %s %s %s %d %.2f **\n",p->num,p->bname,p->wname,p->press,p->sort,p->time,p->price);flag=1;}p=p->next;}printf("====================================================================== ===\n");}}//按图书出版时间查询图书信息void time_chaxun(struct book *head){int a,flag=0;struct book *p;printf("请选择您要查询的图书出版时间:");scanf("%d",&a);getchar();p=head;while(p!=NULL){if(p->time==a){flag=1;break;}p=p->next;}if(flag==0){printf("没有找到该图书名的图书!\n");}else{printf(" 你所查询的图书信息如下\n");printf("====================================================================== ===\n");printf(" ** 编号图书名作者名出版社类别出版时间价格**\n");while(p!=NULL){if(p->time==a){printf("** %d %s %s %s %s %d %.2f **\n",p->num,p->bname,p->wname,p->press,p->sort,p->time,p->price);flag=1;}p=p->next;}printf("====================================================================== ===\n");}}//修改图书信息void xiugai(struct book *head){int a,b;char c;struct book *p;printf("请输入要修改的图书编号:");scanf("%d",&a);p=head;while(p!=NULL){if(p->num==a)break;p=p->next;}if(p==NULL){printf("没有找到该编号的图书!\n");getchar();}else{printf("============================================================\n");printf(" ** 1-编号2-图书名3-作者名**\n");printf(" ** 4-出版社5-类别6-出版时间**\n");printf(" ** 7-价格8-修改全部0-放弃修改**\n");printf("============================================================\n");printf("请选择你要修改的信息编号:");scanf("%d",&b);getchar();switch(b){case 1:printf("请输入新编号:");scanf("%d",&p->num);printf("修改成功!\n");getchar();break;case 2:printf("请输入新图书名:");gets(p->bname);printf("修改成功!\n");break;case 3:printf("请输入新作者名:");gets(p->wname);printf("修改成功!\n");break;case 4:printf("请输入新出版社:");gets(p->press);printf("修改成功!\n");break;case 5:printf("请输入新类别:");gets(p->sort);printf("修改成功!\n");break;case 6:printf("请输入新出版时间:");scanf("%d",&p->time);printf("修改成功!\n");getchar();break;case 7:printf("请输入新价格:");scanf("%f",&p->price);printf("修改成功!\n");getchar();break;case 8:printf("请输入新图书编号:");scanf("%d",&p->num);printf("请输入新图书名:");scanf("%s",p->bname);getchar();printf("请输入新作者名:");scanf("%s",p->wname);getchar();printf("请输入新出版社:");scanf("%s",p->press);getchar();printf("请输入新类别:");scanf("%s",p->sort);getchar();printf("请输入新出版时间:");scanf("%d",&p->time);getchar();printf("请输入新价格:");scanf("%f",&p->price);getchar();printf("修改成功!\n");getchar();break;case 0:break;default :printf("您的输入有误!\n");break;}printf("是否将修改后的信息保存到文件中?(y/n)\n");scanf("%c",&c);getchar();switch(c){case 'n':break;case 'y':fprint(head);printf("保存成功!\n");getchar();break;}}}//图书排序void paixu(struct book *head){int a;printf("================================================================\n");printf(" ** 1-按图书编号排序2-按出版时间排序**\n");printf(" ** 3-按图书价格排序4-按图书名排序**\n");printf(" ** 5-按作者名排序0-取消排序操作**\n");printf("================================================================\n");printf("请输入您选择的编号:");scanf("%d",&a);getchar();switch(a){case 0:break;case 1:num_paixu(head);break;time_paixu(head);break;case 3:price_paixu(head);break;case 4:bname_paixu(head);break;case 5:wname_paixu(head);break;default:printf("您的输入有误!\n");break;}}//按图书编号排序void num_paixu(struct book *head){struct book *a[1000],*p,*p1,*temp;int i,k,index,n=0;char b;p1=head;for(p=head;p;p=p->next)n++;for(i=0;i<n;i++){a[i]=p1;p1=p1->next;}for(k=0;k<n-1;k++){index=k;for(i=k+1;i<n;i++){if(a[i]->num<a[index]->num)index=i;}temp=a[index];a[index]=a[k];a[k]=temp;}printf("排序成功!\n");printf("是否显示排序结果?(y/n)\n");scanf("%s",&b);switch(b){case 'n':break;case 'y':printf("================================================================\n");printf(" ** 编号图书名作者名出版社类别出版时间价格**\n");for(i=0;i<n;i++){printf("** %d %s %s %s %s %d %.2f **\n",a[i]->num,a[i]->bname,a[i]->wname,a[i]->press,a[i]->sort,a[i]->time,a[i]->price);}printf("================================================================\n");break;default:printf("您的输入有误!\n");break;}}//按出版时间排序void time_paixu(struct book *head){struct book *a[1000],*p,*p1,*temp;int i,k,index,n=0;char b;p1=head;for(p=head;p;p=p->next)n++;for(i=0;i<n;i++){a[i]=p1;p1=p1->next;}for(k=0;k<n-1;k++){index=k;for(i=k+1;i<n;i++){if(a[i]->time<a[index]->time)index=i;}temp=a[index];a[index]=a[k];a[k]=temp;}printf("排序成功!\n");printf("是否显示排序结果?(y/n)\n");scanf("%s",&b);getchar();switch(b){case 'n':break;case 'y':printf("===============================================================\n");printf(" ** 编号图书名作者名出版社类别出版时间价格**\n");for(i=0;i<n;i++){printf("** %d %s %s %s %s %d %.2f **\n",a[i]->num,a[i]->bname,a[i]->wname,a[i]->press,a[i]->sort,a[i]->time,a[i]->price);}printf("===============================================================\n");break;default:printf("您的输入有误!\n");break;}}//按图书价格排序void price_paixu(struct book *head){struct book *a[1000],*p,*p1,*temp;int i,k,index,n=0;char b;p1=head;for(p=head;p;p=p->next)n++;for(i=0;i<n;i++){a[i]=p1;p1=p1->next;}for(k=0;k<n-1;k++){index=k;for(i=k+1;i<n;i++){if(a[i]->price<a[index]->price)index=i;}temp=a[index];a[index]=a[k];a[k]=temp;}printf("排序成功!\n");printf("是否显示排序结果?(y/n)\n");scanf("%s",&b);getchar();switch(b){case 'n':break;case 'y':printf("===============================================================\n");printf(" ** 编号图书名作者名出版社类别出版时间价格**\n");for(i=0;i<n;i++){printf("** %d %s %s %s %s %d %.2f **\n",a[i]->num,a[i]->bname,a[i]->wname,a[i]->press,a[i]->sort,a[i]->time,a[i]->price);}printf("===============================================================\n");break;default:printf("您的输入有误!\n");break;}}//按图书名排序void bname_paixu(struct book *head){struct book *a[1000],*p,*p1,*temp;int i,k,index,n=0;char b;p1=head;for(p=head;p;p=p->next)n++;for(i=0;i<n;i++){a[i]=p1;p1=p1->next;}for(k=0;k<n-1;k++){index=k;for(i=k+1;i<n;i++){if(strcmp(a[index]->bname,a[i]->bname)>0)index=i;}temp=a[index];a[index]=a[k];a[k]=temp;}printf("排序成功!\n");printf("是否显示排序结果?(y/n)\n");scanf("%s",&b);getchar();switch(b){case 'n':break;case 'y':printf("===============================================================\n");printf(" ** 编号图书名作者名出版社类别出版时间价格**\n");for(i=0;i<n;i++){printf("** %d %s %s %s %s %d %.2f **\n",a[i]->num,a[i]->bname,a[i]->wname,a[i]->press,a[i]->sort,a[i]->time,a[i]->price);}printf("===============================================================\n");break;default:printf("您的输入有误!\n");break;}}//按作者名排序void wname_paixu(struct book *head){struct book *a[1000],*p,*p1,*temp;int i,k,index,n=0;char b;p1=head;for(p=head;p;p=p->next)n++;for(i=0;i<n;i++){a[i]=p1;p1=p1->next;}for(k=0;k<n-1;k++){index=k;for(i=k+1;i<n;i++){if(strcmp(a[index]->wname,a[i]->wname)>0)index=i;}temp=a[index];a[index]=a[k];a[k]=temp;}printf("排序成功!\n");printf("是否显示排序结果?(y/n)\n");scanf("%s",&b);getchar();switch(b){case 'n':break;case 'y':printf("===============================================================\n");printf(" ** 编号图书名作者名出版社类别出版时间价格**\n");for(i=0;i<n;i++){printf("** %d %s %s %s %s %d %.2f **\n",a[i]->num,a[i]->bname,a[i]->wname,a[i]->press,a[i]->sort,a[i]->time,a[i]->price);}printf("===============================================================\n");break;default:printf("您的输入有误!\n");break;}}。
pC语言编程题查找书籍
Pta编程题——查找书籍给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。
输入格式:输入第一行给出正整数n(<<10),随后给出n本书的信息。
每本书在一行中给出书名,即长度不超过30的字符串,随后一行中给出正实数价格。
题目保证没有同样价格的书。
输出格式:在一行中按照“价格, 书名”的格式先后输出价格最高和最低的书。
价格保留2位小数。
#include <stdio.h>#include <stdlib.h>struct book{char name[30];double price;};int order(struct book b[],int n,double[]);int main(){struct book b[9];int i,n=0;double x[9];scanf("%d",&n);for(i=0;i<n;i++){//scanf("%[^\n]", b[i].name);getchar();gets(b[i].name);scanf("%lf",&b[i].price);}order(b,n,x);printf("%.2f, %s\n",b[(int)x[0]].price,b[(int)x[0]].name);printf("%.2f, %s\n",b[(int)x[n-1]].price,b[(int)x[n-1]].name);return 0;}int order(struct book b[],int n,double x[]){int i,j,flag,tp;for(i=0;i<n;i++){x[i]=b[i].price;}flag=1;while(flag==1){flag=0;for(i=0;i<n-1;i++){if(x[i+1]>x[i]){tp=x[i+1];x[i+1]=x[i];x[i]=tp;flag=1;}}}for(i=0;i<n;i++){for(j=0;j<n;j++){if(x[i]==b[j].price){x[i]=j;break;}}}}。
c语言图书信息管理系统c语言
图书管理系统目录一、问题描述这是一个能简单管理图书的小型图书管理系统,其中图书信息包括:书名,作者名,书编号,分类,出版单位,出版时间,价格等。
通过这些信息使之提供以下功能:(1)图书信息创建功能。
其中图书信息包括:书名,作者名,书编号,分类,出版单位,出版时间,价格等。
(图书信息用文件保存)。
(2)图书信息查看功能。
用来查看各项图书信息。
(3)图书信息查找功能。
通过已知信息来查找想要的图书。
(4)图书信息的删除。
可以删除特定图书。
(5)图书信息的修改。
可以修改图书的各项信息。
(6)菜单选择功能,此功能也是图书信息信息管理系统的入口,用户所要进行的各种操作均需在此模块中进行选择并进而调用其他模块实现相应的功能二、概要设计1 数据结构图书管理系统中主要的数据结构包含书名、图书书号、作者名、分类、出版社、出版时间、价格等;在处理过程中各项可以作为一本图书的不同属性来进行处理。
struct book{int num;//编号char name[20];//书名char author[20];//作者char publisher[20];//出版社int price;//价格int store;//库存};//图书信息结构体2 模块划分本系统主要有创建新的图书、查找图书、删除图书、修改图书、查看图书和图书排序几个基本功能。
void setup(struct book bo[]);//新建图书void search(struct book bo[]);//查找图书void modify(struct book bo[]);//查看图书void del(struct book bo);//删除图书void allbook(struct book bo[]);显示所有图书3 程序流程图否开始菜单新建图书修改信息查询图书删除图书所有图书退出是结束三、详细设计1 主函数int main()//主{struct book bo[100];char c;while(1){system("color 1A");printf("\n");printf("\n\t\t\t >>>欢迎进入图书管理系统<<<\n\n");printf("===================================== ===========================================\ n\n");printf("\t\t\t\t 1 录入新书\n\t\t\t\t 2 查询图书\n");printf("\t\t\t\t 3 修改信息\n\t\t\t\t 4 删除图书\n");printf("\t\t\t\t 5 所有图书\n");printf("\t\t\t\t 0 退出系统\n\n");printf("===================================== ===========================================\ n");printf("请选择:");c=getchar();switch(c){case'1':{setup(bo); getchar();break;}case'2':{search(bo);getchar();break;}case'3':{modify(bo);getchar();break;}case'4':{del(bo);getchar();break;}case'5':{allbook(bo);getchar;break;}case'0':{printf("\n感谢使用本系统");return 0;break;}default:{printf("\n输入有误,请重新输入:" );c=getchar();} }}}2 新建图书void setup(struct book bo[])打开文件或者新建一个文件,键盘输入新建的图书信息,然后把数据全部保存在数组bo数组中,最后存入文件。
C语言-图书管理系统
图书借阅管理系统1.课程设计的目的我这次做的系统是图书借阅管理系统,主要目的是利用本系统来管理图书的借阅问题,以实现图书借阅的快捷化、规范化、自动化来提高工作效率。
系统以实用性,通用、开放和安全的原则。
使用数据库开发软件开发制作,实现了图书借阅信息的管理,借阅图书的信息自动化添加,借阅者的个人基本信息,借阅的基本信息,对各种图书的分类管理以及各种新书的添加等一些繁琐事项。
更好的管理好图书的借阅问题。
大大的减少了人工的工作量,比以往很大程度上提高了工作人员的工作效率。
使之成为图书馆的一个平台,成为真正的现代化科技。
为了充分利用学院现有的计算机硬件资源,做好图书借阅管理工作,提高办事效率, 实现全面的、相对集中的办公自动化,开发本系统就成了当务之急,其目的主要为了彻底改变这种繁杂的管理模式,实现全面的、相对集中的、智能化的信息综合管理,为图书馆的管理工作带来方便。
我想借本次课程设计之际,开发一个适用于通用大规模图书馆的管理系统,采用现学习的C++6. 0开发工具开发出来的基于Windows系列的图书借阅管理系统。
该系统面向所有的在校学生,实现对学生个人的借书、学生的基本信息情况等的计算机管理。
系统支持工作人员对学生图书借阅信息、图书馆新书的添加、旧书的信息修改、删除等操作,确保了数据库的安全性快捷性和一致性。
2.设计方案论证2.1主界面设计思路本次设计这个系统利用于图书馆的图书借阅管理,该系统相比以往人工的记录方式减少了很多不比要得麻烦,大大的提高了图书馆工作人员的工作效率。
这次系统的开发制作主要包括以下几个方面。
书籍统计可以查询图书的名称、作者、序号等信息,以及是否借出去了。
书籍管理可以把新书添加到系统当中,修改书籍的详细资料等。
注册会员功能,借阅书籍的学生必须注册会员才可以借书,通过注册会员来添加该学生的基本信息。
通过系统来办理借书手续以记录该学生的借书信息。
学生借书模块能够查询借阅学生的信息和该学生的借书的信息。
图书管理系统c语言
图书管理系统C语言1. 简介图书管理系统是一种用于管理图书馆藏书和借阅记录的软件系统。
它通常包括图书的录入、借阅、归还、查询等功能,能够提高图书馆的工作效率和服务质量。
本文将使用C语言编写一个简单的图书管理系统,实现基本的图书信息录入、修改、查询、借阅、归还等功能。
2. 功能实现2.1 数据结构我们首先需要定义合适的数据结构来存储图书信息和借阅记录。
以下是一个简单的数据结构示例:struct Book {int id; // 图书编号char title[100]; // 图书标题char author[50]; // 图书作者char category[50]; // 图书分类int isBorrowed; // 图书是否已借阅,0表示未借阅,1表示已借阅char borrowerName[100]; // 借阅者姓名// 可根据需求扩展其他字段};struct BorrowRecord {int bookId; // 图书编号char borrowerName[100]; // 借阅者姓名char borrowDate[20]; // 借阅日期char returnDate[20]; // 归还日期// 可根据需求扩展其他字段};2.2 图书信息录入和修改我们可以通过实现相应的函数来实现图书信息的录入和修改。
以下是一个简单的示例:void addBook(struct Book *library, int *count) {// 输入图书信息,将其存入library数组中,同时更新count}void updateBook(struct Book *library, int count, int bookId) { // 根据图书编号bookId,更新library数组中对应图书的信息}2.3 图书查询我们可以根据图书的不同字段来实现不同的查询功能,比如根据图书标题、作者、分类等进行模糊查询,或根据图书编号进行精确查询。
c语言图书管理系统流程图
c语言图书管理系统流程图C语言图书管理系统流程图概述:C语言图书管理系统是一个用于管理图书馆或书店的系统,它可以实现图书的添加、删除、查询和借还等功能。
本文将通过详细的流程图,介绍C语言图书管理系统的运行流程。
1. 添加图书:- 用户输入图书信息,包括书名、作者、出版日期和价格等。
- 系统接收用户输入的信息,并生成一个唯一的图书编号。
- 系统将图书信息和图书编号存储到数据库中。
2. 删除图书:- 用户输入要删除的图书编号。
- 系统在数据库中查找并验证该图书编号是否存在。
- 如果存在,则从数据库中删除该图书信息。
3. 查询图书:- 用户输入要查询的图书名称或作者等信息。
- 系统在数据库中查找与用户输入信息匹配的图书。
- 系统将符合条件的图书信息显示给用户。
4. 借阅图书:- 用户输入要借阅的图书编号。
- 系统在数据库中查找并验证该图书编号是否存在。
- 如果该图书可借,则系统记录借阅人的信息,标记该图书为已借出状态。
5. 归还图书:- 用户输入要归还的图书编号。
- 系统在数据库中查找并验证该图书编号是否存在,并检查该图书是否已借出。
- 如果该图书已借出且由用户借出,则系统记录归还时间,将该图书状态标记为可借。
6. 统计功能:- 用户选择统计功能入口。
- 系统提供多种统计选项,例如按照作者统计、按照出版日期统计、按照价格区间统计等。
- 系统在数据库中进行相应的查询并展示统计结果。
7. 备份与恢复:- 用户选择备份或恢复功能入口。
- 备份功能:系统将数据库中的图书信息备份到指定的文件中。
- 恢复功能:系统从指定的备份文件中还原图书信息到数据库中。
8. 系统维护:- 用户选择系统维护功能入口。
- 维护功能包括数据库清理、数据完整性检查、系统日志管理等。
- 用户可以根据需求选择相应的维护操作。
总结:C语言图书管理系统通过以上流程图所示的各项功能,实现了对图书的添加、删除、查询和借还等操作,同时还提供了统计、备份和维护等实用的功能。
c语言检索方法
c语言检索方法C语言检索方法引言:C语言是一门广泛应用于软件开发领域的高级编程语言,因其简洁、高效和可移植性而备受青睐。
在大型软件项目中,对数据的检索是非常常见的需求。
本文将介绍几种常用的C语言检索方法,帮助读者更好地理解和应用这些方法。
一、线性查找线性查找是最简单、最直接的一种检索方法。
它的基本思想是从数据集合的第一个元素开始逐个比较,直到找到目标元素或遍历完整个集合。
如果目标元素存在于集合中,线性查找的时间复杂度为O(n),其中n为集合的大小。
二、二分查找二分查找也称为折半查找,它是一种基于有序数据集合的检索方法。
二分查找的关键思想是通过与数据集合中间元素的比较,将待查找的数据集合一分为二,然后继续在其中一部分进行查找,直到找到目标元素或确定目标元素不存在。
二分查找的时间复杂度为O(log n),其中n为集合的大小。
但要注意,二分查找只适用于有序数据集合。
三、哈希查找哈希查找是一种基于哈希表的检索方法。
哈希表是一种以键-值对形式存储数据的数据结构,通过将键映射到哈希表中的位置来实现快速检索。
在哈希查找中,首先需要将数据集合中的元素通过哈希函数映射到哈希表的位置,然后根据目标元素的键在哈希表中进行查找。
哈希查找的平均时间复杂度为O(1),但在最坏情况下可能达到O(n)。
四、二叉搜索树二叉搜索树(Binary Search Tree,简称BST)是一种基于树结构的检索方法。
它具有以下性质:左子树中的所有节点的键值小于根节点的键值,右子树中的所有节点的键值大于根节点的键值。
通过利用这种有序性,可以在二叉搜索树中快速查找目标元素。
二叉搜索树的平均查找时间复杂度为O(log n),但在最坏情况下可能达到O(n)。
五、B树和B+树B树和B+树是一种常用的多叉平衡查找树。
相比于二叉搜索树,B 树和B+树可以在每个节点中存储多个键值,从而提高了数据的检索效率。
B树和B+树通常用于磁盘存储系统中,可以有效地降低磁盘I/O的次数,提高数据的访问速度。
图书管理系统的设计(C语言)
图书管理系统设计图书管理信息包括:图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等功能描述:1 .新进熟土基本信息的输入2 .图书基本信息的查询3 .对撤销图书信息的删除4 .为借书人办理注册5 .办理借书手续6 .办理换书手续要求:以文件方式存储数据,系统以菜单方式工作。
这是本人大一第二学期初 C 语言课程设计的作品,嘿嘿,本来以为已经找不到原稿了,今天无意中居然在QQ 网络硬盘中找到了当初的teta 版,发布于此,以作记念。
C 源代码如下:#include〈stdio 。
h〉#include<stdlib。
h〉#include〈string 。
h>struct book {char book_name [30];int bianhao;double price;char author[20];char state [20] ;char name[20];char sex [10];int xuehao;struct book *book_next;};struct club {char name [20];char sex[10];int xuehao;char borrow [30];struct club *club_next;};void Print_Book(struct book *head_book);/*浏览所有图书信息*/void Print_Club(struct club *head_club);/*浏览所有会员信息*/struct book *Create_New_Book();/*创建新的图书库, 图书编号输入为0 时结束*/struct book *Search_Book_bianhao(int bianhao,struct book *head_book);struct book *Search_Book_name (char *b_name,struct book *head_book);struct book *Search_Book_price (double price_h,double price_l,struct book *head_book);struct book *Insert_Book (struct book *head_book,struct book *stud_book) ;/*增加图书,逐个添加*/struct book *Delete_Book(struct book *head_book,int bianhao);/*删除图书*/struct club *Create_New_Club() ;struct club *Search_Club_xuehao(int xuehao,struct club *head_club);struct club *Search_Club_name (char *c_name,struct club *head_club);struct club *Insert_Club (struct club *head_club,struct club *stud_club);struct club *Delete_Club (struct club *head_club,int xuehao);struct book *Lent_Book (int bianhao ,int xuehao,struct book *head_book,struct club *head_club);struct book *back (int bianhao,int xuehao,struct book *head_book,struct club *head_club); int main(){struct book *head_book,*p_book;char book_name [30],name [20],author [20],sex [10];int bianhao;double price,price_h,price_l;int size_book=sizeof(struct book);int m=1,n=1,f;char *b_name,*c_name;struct club *head_club,*p_club;int xuehao;int size_club=sizeof (struct club) ;int choice;printf ("\n 欢迎您第一次进入图书管理系统!\n\n");printf("---——>[向导]————-〉[新建图书库] \n\n”) ;printf ("注意:当输入图书编号为0 时,进入下一步.\n\n");head_book=Create_New_Book();system(”cls”) ;printf("\n 欢迎您第一次进入图书管理系统!\n\n") ;printf("----—〉[向导]——---〉[新建会员库]\n\n”);printf(”注意:当输入会员学号为0 时,进入主菜单.\n\n”);head_club=Create_New_Club () ;system (”cls”);do {printf(”\n\t\t\t〓〓〓〓〓图书管理系统〓〓〓〓〓\n\n”);printf("\n”);printf ("\t\t\t[1] :借书办理\t");printf(" [6]:还书办理\n”);printf (”\n");printf(”\t\t\t[2]:查询图书\t");printf(" [7]:查询会员\n”);printf (” \t\t\t[3]:添加图书\t");printf (" [8]:添加会员\n”);printf ("\t\t\t[4]:删除图书\t");printf (” [9] :删除会员\n") ;printf (” \t\t\t[5]:遍历图书\t");printf (” [10]:遍历会员\n\n”) ;printf ("\t\t\t〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n\n”);printf("\t\t\t0:退出\n\n”) ;printf(”请选择〈0~10〉:”);scanf(”%d",&choice);switch(choice) {case 1:printf ("\n\t\t\t〓〓〓〓〓图书管理系统〓〓〓〓〓\n\n");printf (”输入所借图书编号:\n");scanf (”%d",&bianhao);printf ("输入借书人的学号:\n”);scanf ("%d",&xuehao);head_book=Lent_Book(bianhao,xuehao,head_book,head_club);system (”cls");printf (” \n 借阅成功!\n\n");printf (”相关信息如下:\n\n");head_book=Search_Book_bianhao (bianhao,head_book);break;case 2:system ("cls”) ;printf(”\n\t\t\t〓〓〓〓〓图书管理系统〓〓〓〓〓\n\n”); printf ("1。
图书索引程序 C语言
#include <conio.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#define up 0x4800#define down 0x5000#define esc 0x11b#define enter 0x1c0dtypedef struct base_inf /*图书资料基本信息*/ {char lable[5], /*中图法分类号*/numb[12], /*图书编号*/name[30],author[5][15],pub_company[20], /*出版社*/ISBN[15];int pub_date[3]; /*出版日期*/long put_times, /*版次*/price,n, /*作者数*/amount, /*馆藏数*/lend_num; /*借阅数*/}BASE;typedef struct base_p{BASE base;struct base_p *next;}BASEP;typedef struct buy_inf /*图书采购信息*/{char name[30],author[5][15],inv_num[10], /*发票号码*/book_num[15]; /*图书编号*/long amount, /*采购数量*/buy_date[3];float unit_price, /*采购单价*/money; /*采购金额*/}BUY;typedef struct buy_p{BUY buy;struct buy_p *next;}BUYP;struct book_inf{char b_name[30]; /*所借书名*/int lend_date[3], /*借阅日期*/return_date[3]; /*归还日期*/float over_money; /*逾期罚款等:借阅期限为一个月,逾期1天,罚款1角*/};typedef struct lend_inf /*图书借阅信息*/{char p_name[30], /*借阅人*/p_comp[20], /*借阅人所在单位*/card[15]; /*借书证号*/int lend_num; /*借书量*/struct book_inf book[5];}LEND;typedef struct lend_p{LEND lend;struct lend_p *next;}LENDP;long must_l(void) /*输入函数,必须为long型*/{char str[10];int i, count;long num;scanf("%s", str);getchar();count = strlen(str);for (i = 0; i < count; i++){if (str[i]>='0' && str[i]<='9'){if (i == 0)num = str[i] - '0';elsenum = num*10 + str[i] - '0';}else{printf("input error,please reenter:");num = must_l();return(num);}}return(num);}void must_d(int data[3]){char s[10];int i, j, count, flag = 1;data[0]=0;data[1]=0;data[2]=0;gets(s);count = strlen(s);for (i = 0, j = 0; i <count; i++){if (s[i] == '-'){j++;if (s[i-1] == '-'){flag = 0;break;}}else if (s[i]>='0' && s[i]<='9'){if (data[j] == 0)data[j] = data[j]+s[i]-'0';elsedata[j] = data[j]*10 + s[i] - '0';}else{flag = 0;break;}}if (data[0]<1000 || data[0]>9999 || data[1]>12 || data[2]>31|| data[1]<=0 || data[2] <=0 || flag == 0){printf("!!!input error!, please reenter:");must_d(data);}return;}void base_input(void) /*图书资料基本信息录入*/{FILE *fp;long i;char ch;BASE b;if ((fp = fopen("D:base_inf", "ab")) == NULL){printf("cannot open file.");exit(0);}while(1){clrscr();printf("*************************************\n");printf("input base_inf:\n");printf("*************************************\n");printf("\nbook name(c) :");scanf("%s", );getchar();printf("Chinese...number(c) :");scanf("%s", ble);getchar();printf("Book Numbers(c) :");scanf("%s", b.numb);getchar();printf("publishing company(c) :");scanf("%s", b.pub_company);getchar();printf("publication date(****-**-**):");must_d(b.pub_date);printf("ISBN(c) :");scanf("%s", b.ISBN);getchar();printf("put_times(l) :");b.put_times = must_l();printf("price(l) :");b.price = must_l();printf("Collection number(l) :");b.amount = must_l();b.lend_num = 0;printf("**********\ninput how many author:");b.n = must_l();while(b.n<0 || b.n>5){printf("!!!too large,please reenter:");b.n = must_l();}for (i = 0; i < b.n ; i++){printf("input the author :");scanf("%s", b.author[i]);getchar();}fwrite(&b, sizeof(BASE), 1, fp);printf("continue?(y/n):");ch = bioskey(0);putchar(ch);while(ch != 'y'){switch(ch){case 'n':fclose(fp);return;case 27:fclose(fp);return;default:printf("\nenter error,please reenter:");ch = bioskey(0);putchar(ch);}}}}void base_sort(BASE b[], int count) /*将图书基本信息按书名排序并储存*/ {FILE *fp;BASE c;int i, j;for (i = 0; i < count ; i++){printf("%s\n", b[i].name);}for (i = 1; i < count; i++)for(j = 0; j < count-i; j++){if(strcmp(b[j].name, b[j+1].name) > 0){c = b[j];b[j] = b[j+1];b[j+1] = c;}}if((fp=fopen("D:base_inf", "wb")) == NULL){printf("cannot open file.");exit(0);}for (i = 0; i < count; i++)fwrite(&b[i], sizeof(BASE), 1, fp);fclose(fp);}void base_sort1(void) /*将图书基本信息按书名排序并储存*/{FILE *fp;BASE c, b[100];int count = 0, i, j;if ((fp = fopen("D:base_inf", "rb")) == NULL){printf("cannot open file.");exit(0);}while(!feof(fp)){fread(&b[count++], sizeof(BASE), 1, fp);}count--;for (i = 1; i < count; i++)for(j = 0; j < count-i; j++){if(strcmp(b[j].name, b[j+1].name) > 0){c = b[j];b[j] = b[j+1];b[j+1] = c;}}if((fp=fopen("D:base_inf", "wb")) == NULL){printf("cannot open file.");exit(0);}for (i = 0; i < count; i++)fwrite(&b[i], sizeof(BASE), 1, fp);fclose(fp);}void base_rework(void) /*图书资料基本信息的修改*/ {FILE *fp;char name[30];long i , min, max, find, count = 0;BASE b[100];if((fp=fopen("D:base_inf", "rb")) == NULL){printf("cannot open file.");exit(0);}while(!feof(fp)){fread(&b[count++], sizeof(BASE), 1, fp);}fclose(fp);count--;base_sort(b, count);clrscr();printf("*************************************\n");printf("base rework:\n");printf("*************************************\n");for (i = 0; i < count; i++)printf("%s\n", b[i].name);printf("*********\ninput the book's name:");scanf("%s", name);getchar();min=0;max=count-1;find = (min+max)/2;for (; min <= max && strcmp(name, b[find].name) != 0;) /*找到需要修改的书(二分法)*/{if (strcmp(name, b[find].name) > 0)min = find+1;elsemax = find-1;find = (min+max)/2;}if (0 == strcmp(name, b[find].name)){printf("******rework******\n");printf("\nbook name(c) :");scanf("%s", b[find].name);getchar();printf("Chinese...number(c) :");scanf("%s", b[find].lable);getchar();printf("Book Numbers(c) :");scanf("%s", b[find].numb);getchar();printf("publishing company(c) :");scanf("%s", b[find].pub_company);getchar();printf("publication date(****-**-**):");must_d(b[find].pub_date);printf("ISBN(c) :");scanf("%s", b[find].ISBN);getchar();printf("put_times(l) :");b[find].put_times = must_l();printf("price(l) :");b[find].price = must_l();printf("Collection number(l) :");b[find].amount = must_l();printf("***********\ninput how many author:"); b[find].n = must_l();while(b[find].n<0 || b[find].n>5){printf("\ninput error,please reenter:");b[find].n = must_l();}for (i = 0; i < b[find].n ; i++){printf("input the author :");scanf("%s", b[find].author[i]);getchar();}if ((fp = fopen("D:base_inf", "wb")) == NULL) {printf("cannot find file.\npress any key exit.");getch();exit(0);}for (i = 0; i < count; i++)fwrite(&b[i], sizeof(BASE), 1, fp);printf("rework success!press any key exit.");getch();fclose(fp);return;}else{printf("cannot find.press any key exit.");getch();return;}}BASEP* base_read(void) /*图书资料基本信息的读取(以连表形式,返回头指针)*/ {FILE *fp;BASEP *head, *p1, *p2;if((fp=fopen("D:base_inf", "rb")) == NULL){printf("cannot open file.");exit(0);}p1 = p2 =(BASEP*)malloc(sizeof(BASEP));head = NULL;fread(p1, sizeof(BASE), 1, fp);while(!feof(fp)){if (head == NULL)head = p1;elsep2->next = p1;p2 = p1;p1 = (BASEP*)malloc(sizeof(BASEP));fread(p1, sizeof(BASE), 1, fp);}p2->next = NULL;fclose(fp);return head;}void base_output(void){char name[30];int i , flag = 0;BASEP *head, *b;head = b = base_read();clrscr();printf("***********************************\n");printf("****base information seek\n");printf("***********************************\n");for (; b != NULL; b = b->next)printf("%s\n", b->);printf("*********\ninput the book's name:");scanf("%s", name);getchar();for (b = head; b != NULL; b = b->next){if (strcmp(b->, name) == 0){printf("\n******base information******\n");printf("\nbook name(c) :");printf("%s", b->);printf("\nChinese...number(c) :");printf("%s", b->ble);printf("\nBook Numbers(c) :");printf("%s", b->base.numb);printf("\npublishing company(c) :");printf("%s", b->base.pub_company);printf("\npublication date(c) :");printf("%d-%d-%d", b->base.pub_date[0],b->base.pub_date[1], b->base.pub_date[2]);printf("\nISBN(c) :");printf("%s", b->base.ISBN);printf("\nput_times(l) :");printf("%ld", b->base.put_times);printf("\nprice(l) :");printf("%ld", b->base.price);printf("\nCollection number(l) :");printf("%ld", b->base.amount);printf("\noutput how many author:");printf("%ld", b->base.n);printf("\noutput the author :");for (i = 0; i < b->base.n ; i++){printf("%d:%s ", i+1, b->base.author[i]);}flag = 1;}}if (flag == 0){clrscr();gotoxy(20,12);printf("!!!cannot find this book.press any key return.");getch();}else{printf("\n*************************\n");printf("press any return");getch();}}void base_outall(void){FILE *fp;int i;BASEP *head, *b;if((fp=fopen("D:base_inf", "rb")) == NULL){printf("!!!cannot open file!!!press any key return.");getch();exit(0);}head = b = base_read();clrscr();printf("***********************************\n");printf("****base information\n");printf("***********************************\n");for (b = head; b != NULL; b = b->next){printf("\nbook name(c) :");printf("%s", b->);printf("\nChinese...number(c) :");printf("%s", b->ble);printf("\nBook Numbers(c) :");printf("%s", b->base.numb);printf("\npublishing company(c) :");printf("%s", b->base.pub_company);printf("\npublication date(c) :");printf("%d-%d-%d", b->base.pub_date[0],b->base.pub_date[1], b->base.pub_date[2]);printf("\nISBN(c) :");printf("%s", b->base.ISBN);printf("\nput_times(l) :");printf("%ld", b->base.put_times);printf("\nprice(l) :");printf("%ld", b->base.price);printf("\nCollection number(l) :");printf("%ld", b->base.amount);printf("\noutput how many author:");printf("%ld", b->base.n);printf("\noutput the author :");for (i = 0; i < b->base.n ; i++){printf("%d:%s ", i+1, b->base.author[i]);}printf("\n*************************\n");}printf("press any return");getch();}void base_insert(void){FILE *fp;int i;BASEP *head, *p1, *p2, *p3;clrscr();printf("*************************************\n"); printf("base insert:\n");printf("*************************************\n"); p2 = (BASEP*)malloc(sizeof(BASEP));printf("\nbook name(c) :");scanf("%s", p2->);getchar();printf("Chinese...number(c) :");scanf("%s", p2->ble);getchar();printf("Book Numbers(c) :");scanf("%s", p2->base.numb);getchar();printf("publishing company(c) :");scanf("%s", p2->base.pub_company);getchar();printf("publication date(****-**-**):");must_d(p2->base.pub_date);printf("ISBN(c) :");scanf("%s", p2->base.ISBN);getchar();printf("put_times(l) :");p2->base.put_times = must_l();printf("price(l) :");p2->base.price = must_l();printf("Collection number(l) :");p2->base.amount = must_l();p2->base.lend_num = 0;printf("**********\ninput how many author:");p2->base.n = must_l();while(p2->base.n<0 || p2->base.n>5){printf("!!!too large,please reenter:");p2->base.n = must_l();}for (i = 0; i < p2->base.n ; i++){printf("input the author :");scanf("%s", p2->base.author[i]);getchar();}base_sort1();head = p1 = base_read();if (head == NULL){head = p2;p2->next = NULL;}else{for (; p1 != NULL && strcmp(p1->, p2->) < 0; p1 = p1->next) p3 = p1;if (p1 == head){p2->next = head;head = p2;}else{if (p1 != NULL){p2->next = p1;p3->next = p2;}else{p3->next = p2;p2->next = NULL;}}}if ((fp = fopen("D:base_inf", "wb")) == NULL){printf("cannot oprn file.press any key exit.");getch();exit(1);}for (p1 = head; p1 != NULL; p1 = p1->next)fwrite(p1, sizeof(BASE), 1, fp);printf("\n***insert success!press any key exit.");getch();fclose(fp);return;}void base_delete(void){FILE *fp;char name[30];BASEP *head, *p1, *p2;head = p1 = base_read();clrscr();printf("*************************************\n");printf("base delete:\n");printf("*************************************\n");for (; p1 != NULL; p1 = p1->next)printf("%s\n", p1->);printf("input the book's name:");scanf("%s", name);getchar();for (p1 = head;p1 != NULL && strcmp(p1->, name) != 0;p2 = p1, p1 = p1->next); /*找到需要删除的书*/if(strcmp(name, p1->) == 0){if((fp = fopen("D:base_inf", "wb")) == NULL){printf("cannot open file.");exit(0);}if(p1==head)head = p1->next;elsep2 = p1->next;p1 = head;while(p1 != NULL){fwrite(p1, sizeof(BASE), 1, fp);p1 = p1->next;}fclose(fp);clrscr();gotoxy(20,10);printf("delete success!press any key return.");getch();}else{clrscr();gotoxy(20,10);printf("!!!cannot find.delete errer.!!!press any key return.");getch();fclose(fp);return;}}void base_stat(void) /*统计馆藏书籍总数*/{BASEP *p1;long sum = 0;for (p1=base_read(); p1 != NULL; p1 = p1->next)sum = p1->base.amount + sum;clrscr();printf("Totle:%ld\n", sum);printf("\npress any key return.");getch();}void base_empty(void){FILE *fp;if ((fp = fopen("D:base_inf", "wb")) == NULL){printf("!!!file cannot open!!!press any key exit.");getch();exit(0);}clrscr();gotoxy(20,12);printf("empty success. press any key return.");getch();fclose(fp);}void l_stat(void) /*找出借阅次数最多的3本书,并对它们进行排序输出*/ {FILE *fp;BASE p, lend[100];int i, j, count = 0;if((fp = fopen("D:base_inf", "rb")) == NULL){printf("cannot open file.");exit(0);}while(!feof(fp)){fread(&lend[count++], sizeof(BASE), 1, fp);}fclose(fp);count--;for (i = 1; i < count; i++)for(j = 0; j < count-i; j++){if(lend[j].lend_num < lend[j+1].lend_num){p = lend[j];lend[j] = lend[j+1];lend[j+1] = p;}}clrscr();printf("*********************************\n");printf("borrow most 3 books\n");printf("*********************************\n");for (i = 0; i < 3 && i < count; i++){printf("%d.%s", i+1, lend[i].name);printf(" number:%ld\n", lend[i].lend_num);}printf("*********************\npress any key return.");getch();}void buy_input(void) /*图书购买信息的输入*/ {FILE *fp;long n, i;char ch;BUY b;if ((fp = fopen("D:buy_inf", "ab")) == NULL){printf("cannot open file.");exit(0);}while(1){clrscr();printf("*************************************\n");printf("input lend_inf:\n");printf("*************************************\n");printf("name(c) :");scanf("%s", );getchar();printf("\nbuy_date(c) :");must_d(b.buy_date);getchar();printf("\ninv_num(c) :");scanf("%s", b.inv_num);getchar();printf("\nbook_num(c) :");scanf("%s", b.book_num);getchar();printf("\namount(l) :");b.amount = must_l();printf("\nprice(f) :");scanf("%f", &b.unit_price);getchar();b.money =(float)b.amount * b.unit_price;printf("************************\n");printf("input how many author:");n = must_l();while(n<0 || n>5){printf("\ninput error,please reenter:");n = must_l();}for (i = 0; i < n ; i++){printf("input the author:");scanf("%s", b.author[i]);getchar();}fwrite(&b, sizeof(BUY), 1, fp);printf("continue?(y/n):");ch = bioskey(0);putchar(ch);while(ch != 'y'){switch(ch){case 'n':fclose(fp);return;case 27:fclose(fp);return;default:printf("\nenter error,please reenter(y/n):");ch = bioskey(0);putchar(ch);}}}}BUYP *buy_read(void){FILE *fp;BUYP *head, *p1, *p2;p2 = p1 = (BUYP*)malloc(sizeof(BUYP));if((fp = fopen("D:buy_inf", "rb")) == NULL){clrscr();printf("cannot open file.\npress any key exit.");getch();exit(1);}fread(p1, sizeof(BUY), 1, fp);head = NULL;while(!feof(fp)){if(head == NULL)head = p1;elsep2->next = p1;p2 = p1;p1 = (BUYP*)malloc(sizeof(BUYP));fread(p1, sizeof(BUY), 1, fp);}p2->next = NULL;fclose(fp);return(head);}void buy_rework(void) /*图书购买信息的修改*/ {FILE *fp;BUYP *head, *p1;long n, i;char name[30];clrscr();head = buy_read();for (p1 = head; p1 != NULL; p1 = p1->next)printf("%s\n", p1->);printf("***************************\n");printf("input the book's name:");scanf("%s", name);getchar();for (p1 = head; 0 != strcmp(name, p1->)&&p1 != NULL; p1 = p1->next); /*找到需要修改的书*/if (0 == strcmp(name, p1->)){printf("input purchase information:\n");printf("\nname(c) :");scanf("%s", p1->);getchar();printf("\nbuy_date(c) :");must_d(p1->buy.buy_date);printf("\ninv_num(c) :");scanf("%s", p1->buy.inv_num);getchar();printf("\nbook_num(c) :");scanf("%s", p1->buy.book_num);getchar();printf("\namount(l) :");p1->buy.amount = must_l();getchar();printf("\nprice(f) :");scanf("%f", &p1->buy.unit_price);getchar();p1->buy.money =(float)p1->buy.amount * p1->buy.unit_price;printf("input how many author:");n = must_l();while(n<0 || n>5){printf("\ninput error,please reenter:");n = must_l();getchar();}for (i = 0; i < n ; i++){printf("input the author:");scanf("%s", p1->buy.author[i]);getchar();}if ((fp = fopen("D:buy_inf", "wb")) == NULL){printf("cannot find file.\npress any key exit.");getch();exit(0);}p1 = head;while(p1 != NULL){fwrite(p1, sizeof(BASE), 1, fp);p1 = p1->next;}clrscr();gotoxy(20,10);printf("rework success!press any key exit.");getch();fclose(fp);return;}else{printf("cannot find.press any key exit.");getch();return;}}void buy_delete(void) /*图书购买信息的删除*/ {FILE *fp;char name[30];BUYP *head, *p1, *p2;head = p1 = buy_read();clrscr();printf("you can delete:\n");for (; p1 != NULL; p1 = p1->next)printf("%s\n", p1->);printf("**************************\n");printf("input the book's name:");scanf("%s", name);getchar();for (p1 = head;p1 != NULL && strcmp(p1->, name) != 0;p2 = p1, p1 = p1->next); /*找到需要删除的书*/if((fp = fopen("D:buy_inf", "wb")) == NULL){printf("cannot open file.");exit(0);}if(strcmp(name, p1->) == 0){if((fp = fopen("D:buy_inf", "wb")) == NULL){printf("cannot open file.");exit(0);}if(p1==head)head = p1->next;elsep2 = p1->next;p1 = head;while(p1->next != NULL){fwrite(p1, sizeof(BUY), 1, fp);p1 = p1->next;}fclose(fp);clrscr();gotoxy(20,10);printf("delete success!press any key exit.");getch();}else{clrscr();gotoxy(20,10);printf("!!!cannot find.delete errer.!!!press any key return.");getch();fclose(fp);return;}}void buy_stat(void) /*统计馆藏书籍总金额、馆藏书籍的平均价格*/{BUYP *p;long count;float t_money = 0, a_price = 0;p = buy_read();clrscr();for (count=0; p != NULL; p = p->next){t_money = t_money + p->buy.money;a_price = a_price + p->buy.unit_price;count = count + p->buy.amount;}a_price = a_price/(float)count;printf("total value:%f\n", t_money);printf("average price:%f", a_price);printf("\npress any key return.");getch();}void lend_input(void) /*添加用户*/{FILE *fp;char ch;LEND l;if ((fp = fopen("D:lend_inf", "ab")) == NULL){printf("cannot open file.");exit(0);}while(1){clrscr();printf("*************************************\n");printf("add user:\n");printf("*************************************\n");printf("lend card(c) :");scanf("%s", l.card);getchar();printf("\np_name(c) :");scanf("%s", l.p_name);getchar();printf("\np_comp(c) :");scanf("%s", l.p_comp);getchar();l.lend_num = 0;fwrite(&l, sizeof(LEND), 1, fp);printf("add success. continue?(y/n):");ch = bioskey(0);putchar(ch);while(ch != 'y'){switch(ch){case 'n':fclose(fp);return;case 27:fclose(fp);return;default:printf("\nenter error,please reenter(y/n):");ch = bioskey(0);putchar(ch);}}}}LENDP* lend_read(void) /*读取读者and借书信息, 以链表形式*/ {FILE *fp;LENDP *head, *p1, *p2;if((fp=fopen("D:LEND_inf", "rb")) == NULL){printf("cannot open file.");exit(0);}p1 = p2 =(LENDP*)malloc(sizeof(LENDP));head = NULL;fread(p1, sizeof(LEND), 1, fp);while(!feof(fp)){if (head == NULL)head = p1;elsep2->next = p1;p2 = p1;p1 = (LENDP*)malloc(sizeof(LENDP));fread(p1, sizeof(LEND), 1, fp);}p2->next = NULL;fclose(fp);return head;}int lend_s(char name[]) /*判断所借的书是否存在*/ {FILE *fp;BASEP *head, *p1;head = p1 = base_read();for (; p1 != NULL && strcmp(name, p1->) != 0;p1 = p1->next);if(strcmp(name, p1->) == 0){if(p1->base.amount){p1->base.amount--;p1->base.lend_num++;if((fp=fopen("D:base_inf", "wb")) == NULL){printf("cannot open file.");exit(0);}for (p1 = head; p1 != NULL; p1 = p1->next)fwrite(p1, sizeof(BASE), 1, fp);fclose(fp);return 1;}elsereturn 0;}elsereturn 0;}void lend_book(void) /*借书*/{FILE *fp;char ch, card[15];int k, f = 0, flag = 0;LENDP *head , *l;clrscr();printf("input lend_inf:\n");printf("lend card(c) :");scanf("%s", card);getchar();head = l = lend_read();for (; l!=NULL && strcmp(l->lend.card, card) != 0; l = l->next);if(strcmp(l->lend.card, card) != 0){clrscr();gotoxy(15,10);printf("!!!no this user.cannot lend.press any key return.");getch();return;}else{while(1){if(l->lend.lend_num < 5){clrscr();printf("name:%s\n", l->lend.p_name);printf("card:%s\n", l->lend.card);printf("\nbook name(c) :");scanf("%s", l->lend.book[l->lend.lend_num].b_name);getchar();k = lend_s(l->lend.book[l->lend.lend_num].b_name);if(k == 0){printf("library have no this book.\npress any key return.");getch();return;}/****************未完(借书,归还日期)************/l->lend.lend_num++;flag = 1;printf("\n*********\nlend success,continue?(y/n):");ch = bioskey(0);putchar(ch);while(ch != 'y'){switch(ch){case 'n':f = 1;break;case 27:f = 1;break;default:printf("\nenter error,please reenter(y/n):");ch = getch();putchar(ch);}if (f)break;}}else{clrscr();gotoxy(20,10);printf("!!have lend five books, cannot continue lend.\n");gotoxy(20, 11);printf("press any key return.");getch();f = 1;}if (f)break;}}if (flag){if ((fp = fopen("D:lend_inf", "wb")) == NULL){printf("cannot open file.");exit(0);}for (l = head; l != NULL; l = l->next)fwrite(l, sizeof(LEND), 1, fp);fclose(fp);}}void lend_c(char name[]) /*还书操作*/{FILE *fp;BASEP *head, *p1;head = p1 = base_read();for (; p1 != NULL && strcmp(name, p1->) != 0;p1 = p1->next);if(strcmp(name, p1->) == 0){p1->base.amount++;p1->base.lend_num--;if((fp=fopen("D:base_inf", "wb")) == NULL){printf("cannot open file.");exit(0);}for (p1 = head; p1 != NULL; p1 = p1->next)fwrite(p1, sizeof(BASE), 1, fp);fclose(fp);}}。
图书管理系统c语言
图书管理系统c语言
本文将介绍如何使用C语言来构建基于控制台的图书管理系统。
首先,我们需要定义一些需要使用到的数据结构,用来保存图书信息,包括书名,作者,出版日期,类型,页数等关键信息。
然后,我们可以给每本书分配一个唯一的ISBN(国际标准书号)。
接着,我们应该编写两个函数,第一个函数的作用是维护图书信息,该函数可以添加新的图书,删除旧的图书;第二个函数可以实现基于ISBN的搜索。
最后,我们需要实现一个主函数,它负责管理整个系统,显示菜单以供用户选择,包括添加图书,删除图书,查询图书,显示所有图书,等等。
总而言之,在C语言中编写图书管理系统代码,无非是定义数据结构,编写功能函数和主函数,即可实现所需功能。
C语言课程设计图书管理程序
C语言课程设计报告题目:图书登记管理程序需求分析:一:设计一个图书登记管理程序,其功能描述如下:1、管理功能:1.1录入某图书的信息(图书信息内容包括:ISBN号、书名、作者、出版社、出版日期、价格),即为添加该图书信息1.2给定图书ISBN编号,显示该图书信息1.2给定图书ISBN编号,修改该图书信息1.3给定图书ISBN编号,删除该图书信息2、检索功能:2.1给定某个字符串(关键字),查找并显示所有书名中包括该字符串的图书的信息2.2给定出版社名称,查找并显示该出版社的所有图书的信息2.3给定图书ISBN号,查找并显示该图书信息3、统计功能:3.1统计已登记的图书数量说明:该管理程序为图书管理员所用,登录环节初设用户名为1,密码为1二、用况图统计图书信息图书登记管理系统用况图三、用况描述3.1用况名:管理图书信息参与者:图书管理员包含:包含用况添加图书信息、删除图书信息和修改图书信息基本流:管理员选择管理界面菜单进入图书管理界面后置条件:系统进入管理界面,3.2用况名:添加图书信息包含:被用况管理图书信息所包含基本流:管理员录入图书信息。
包括ISBN号、书名、作者、出版社、出版日期、价格前置条件:管理员成功进入了添加图书信息界面后置条件:系统已成功保存录入的图书信息3.3用况名:删除图书信息包含:被用况管理图书信息所包含基本流:管理员输入ISBN号,系统则删除对应图书的所有信息前置条件:管理员输入正确的ISBN号后置条件:系统删除了对应的图书信息3.4用况名:修改图书信息包含:被用况管理图书信息所包含基本流:管理员输入ISBN号,修改对应的图书的信息前置条件:管理员输入正确的ISBN号后置条件:系统已保存对应ISBN号图书修改后的信息3.5用户名:检索图书信息参与者:图书管理员基本流:管理员输入的图书名称关键字,系统根据所输入的关键字返回包含该字符的所有图书的信息,或者根据输入的出版社名称,返回该出版社出版的图书信息。
图书信息检索与管理系统(C语言)
《数据结构与算法分析》大作业题目:图书信息检索与管理系统班级:1401052学号:14010520029姓名:江岚日期:2015年7月3日成绩:目录1 问题描述 (2)1.1 应用背景 (3)1.2 问题概述 (3)1.2.1 如何存储图书信息: (3)1.2.2 如何实现处理图书信息的各项功能: (3)1.2.3 如何优化用户界面、提高系统实用性: (3)1.3 实现目标 (3)2 需求分析 (4)2.1 界面设计分析 (4)2.1.1 主菜单界面设计 (4)2.1.2 其他界面的设计 (4)2.2 文件保存方法 (4)2.3 系统功能分析 (4)2.3.1 角色分配及权限功能 (4)2.3.2 系统功能模块 (4)2.4 性能要求 (5)2.5 测试用例及验收数据 (5)2.5.1 访客模式下的查询图书信息功能测试: (5)2.5.2 管理员模块下的增加图书信息功能测试: (6)3 概要设计(总体设计) (11)3.1 数据结构的C语言描述 (11)3.1.1 图书信息的数据结构 (11)3.1.2 图书信息的存储 (11)3.1.3 其他数据的存储 (12)3.2 模块描述 (14)3.2.1 主函数实现各个模块的调用 (14)3.2.2 子函数完成模块功能 (17)3.3 系统的整体结构 (19)4 详细设计 (20)4.1 模块算法描述 (20)4.1.1 整体模块描述 (20)4.1.2 访客模块算法描述 (20)4.1.3 管理员模块算法描述 (21)5 调试分析 (24)6 使用说明 (26)6.1 运行环境 (26)6.2 使用方法 (26)7 测试结果 (26)8 附录 (28)图目录图1 模块调用示意图 (14)图2 系统整体结构图 (19)图3 整体模块流程图 (20)图4 管理员模块之修改图书信息流程图 (21)1 问题描述要求:描述解决的问题“是什么”,给出最终的实现目标1.1 应用背景二十一世纪是信息的社会,信息作为社会最主要的资源,将成为战略资源引起人们的广泛关注。
图书索引程序
图书索引程序1.问题:图书馆需要对图书信息生成索引表(如下),以便用户在输入关键词时能查询到相应的图书,下面介绍生成索引表的思路。
2.算法思路:a)首先得准备书目文件与非关键词文件(如下)书目文件非关键词文件b)依次从书目文件中读入每一行的信息(字符串),从该字符串中提取书号,以及关键词(需要参考非关键词文件判断哪些单词是关键词),有序插入关键词链表,并附上拥有该关键词的书号,直至书目文件读完。
3.数据描述:a)非关键词——链表b)关键词——嵌套链表4.结构化设计:5.补充:a)程序中有对书号进行有序插入,即使书目信息无序也无关系 b)fgets 函数说明:每条书目信息长度不一,当终归有上限,对于非关键词也一样。
因此只能一次读入整条书目信息,但是从该字符串中提取书号和关键词也是实现难点。
c)使用该代码时记得要修改相应文件的位置信息,避免出错。
图书索引系统欢迎界面功能生成索引表提取书目信息提取关键字提取书号写入文件搜索生成非关键表theofaanandto头指针algorithmsanalysiscomputer034034 050 005 0670346.局限:a)对于搜索功能,本程序的索引表没有从相应文件读入(懒),而是执行生成索引表功能去生成,在时间上增加了复杂度。
b)不能实现中文版的图书索引系统(实力有限,不懂)。
7.程序运行:a):生成索引表b):图书搜索8.代码展示:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<ctype.h>#define bookno_length 3 //书号长度统一为3,只适用于999本书struct book_no//书号表的元素{char *book_number;//指向书号的指针struct book_no *next;//指向下一个元素};struct one_key//关键字表的元素{char *key;//指向关键字的指针int key_length;//关键字的长度struct book_no *head;//指向拥有该关键字的书号表的开头struct one_key *next;//指向下一个元素};struct temptable//临时表,存储普通词表和书目信息文件每一行拥有的关键词{char *word;//指向单词的指针int word_length;//单词的长度,长度相等才进行比较,提高效率struct temptable *next;//下一个元素};struct book_information{char book[100];struct book_information *next;};main(){void print_all_key_table(struct one_key *all_key);void search_book_information(struct one_key *all_key);void welcome();void write_all_key_table(struct one_key *all_key);struct one_key *create_all_key_table();//创造有序关键词表struct one_key *all_key=NULL;//关键字表的开头,带头结点welcome();int i;scanf("%d",&i);while(i!=1&&i!=2){printf("输入出错重新录入!!!\n");scanf("%d",&i);}switch(i){case 1:all_key=create_all_key_table();print_all_key_table(all_key);write_all_key_table(all_key);break;case 2:all_key=create_all_key_table();search_book_information(all_key);}}void welcome(){printf("*******************************************************\n\n");printf("欢迎来到图书索引系统!!\n\n");printf("*******************************************************\n\n");printf("1:生成索引文件\n2:查找图书\n");printf("请选择功能:");}struct one_key *create_all_key_table(){struct temptable *create_nokey_temptable();//创造非关键词词表struct temptable *create_key_temptable(char buf[100],struct temptable *nokey_temptable);//创造关键词词表char *book_no(char buf[100]);//提取书名号,长度统一为3FILE *p;//指向书目信息struct one_key *all_key=NULL;//关键字表的开头,带头结点struct one_key *m1=NULL,*n1=NULL; //m1为临时结点,n1判断是否有重复以及插入位置char buf[100];//代表书目信息文件的每一行,是个字符串char *bno;//buf中的书目号struct book_no *m2=NULL,*n2=NULL;//m2为临时结点,n2判断插入位置struct temptable *key_temptable=NULL,*nokey_temptable=NULL,*t=NULL;//指向buf中的关键词以及指向非关键词的词表//总关键表初始化,带有头结点all_key=(struct one_key *)malloc(sizeof(struct one_key));all_key->key=NULL;all_key->head=NULL;all_key->next=NULL;if((p=fopen("E:\\c语言\\C语言编程软件\\我的工作空间\\课本\\例题\\关键词索引系统\\book_information.txt","r"))==NULL){printf("没有相应的书目文件,程序结束");exit(0);}nokey_temptable=create_nokey_temptable();//建立非关键词词表,相关文件的非关键词有序fgets(buf,100,p);while(!feof(p)){bno=book_no(buf); //提取书号key_temptable=create_key_temptable(buf,nokey_temptable);//提取当前书目信息的关键词,需要非关键词词表对比for(t=key_temptable->next;t!=NULL;t=t->next)//将临时的关键词表插入以及书号做成总关键词表{for(n1=all_key->next;n1!=NULL;n1=n1->next)if(n1->key_length==t->word_length&&!strcmp(n1->key,t->word))//若为新关键词,则最终结果为n1=NULL;break;if(n1==NULL)//当前的临时关键词为新关键词,生成新结点,插入结点,插入书号{m1=(struct one_key *)malloc(sizeof(struct one_key));m1->key=t->word;m1->key_length=t->word_length;m1->next=NULL;m1->head=(struct book_no *)malloc(sizeof(struct book_no));m1->head->next=NULL;//链表为空,直接插入if(all_key->next==NULL)all_key->next=m1;else//链表不空,进行寻找新结点的前一个结点{n1=all_key->next;if(strcmp(m1->key,n1->key)<0)//插入开头{m1->next=n1;all_key->next=m1;}else //插入中间for(;n1->next!=NULL;n1=n1->next){if((strcmp(m1->key,n1->key)>0)&&(strcmp(m1->key,n1->next->key)<0)){m1->next=n1->next;n1->next=m1;break;}}if(n1->next==NULL) //插入末尾n1->next=m1;}//插入书号,此时m1指向新结点m2=(struct book_no *)malloc(sizeof(struct book_no));m2->book_number=bno;m2->next=NULL;m1->head->next=m2;}else//不是新关键词,此时n1指向重复项对应的结点,有序插入书号{m2=(struct book_no *)malloc(sizeof(struct book_no));m2->book_number=bno;m2->next=NULL;n2=n1->head->next;if(strcmp(m2->book_number,n2->book_number)<0)//插入开头{m2->next=n1->head->next;n1->head->next=m2;}else //插入中间for(;n2->next!=NULL;n2=n2->next){if((strcmp(m2->book_number,n2->book_number)>0)&&(strcmp(m2->book_number,n2->nex t->book_number)<0)){m2->next=n2->next;n2->next=m2;break;}}if(n2->next==NULL) //插入末尾n2->next=m2;}}fgets(buf,100,p);}fclose(p);return all_key;}struct temptable *create_nokey_temptable(){char *change(char c[10]);//去除字符串末尾的回车符struct temptable *nokey_temptable=NULL;//非关键词链表头指针struct temptable *p=NULL;//辅助链表的建立FILE *f;//指向非关键词词表文件,文件内的非关键词有序char c[10],*s=NULL;//代表每一行的非关键词if((f=fopen("E:\\c语言\\C语言编程软件\\我的工作空间\\课本\\例题\\关键词索引系统\\nokey_information.txt","r"))==NULL){printf("没有相应的非关键词文件,程序结束");exit(0);}nokey_temptable=(struct temptable *)malloc(sizeof(struct temptable));//用带有头结点的链表存储非关键词词表p=nokey_temptable;p->next=NULL;fgets(c,10,f);//必须预先读一次,否则会导致最后一行被读取两次while(!feof(f)){s=change(c);//将数组末尾的回车符去除//插入链表p->next=(struct temptable *)malloc(sizeof(struct temptable));p=p->next;p->word=s;p->word_length=strlen(p->word);p->next=NULL;fgets(c,10,f);}fclose(f);return nokey_temptable;}char *change(char c[10])//去除字符串末尾的回车符{int length,i;char *s;for(length==0;;length++)//计算单词长度if(c[length]=='\n')break;s=(char*)malloc(sizeof(char)*length+1);for(i=0;i<length;i++)s[i]=c[i];s[i]='\0';return s;}char *book_no(char buf[100]){int i;char *s=NULL;s=(char *)malloc(sizeof(char)*(bookno_length+1));for(i=0;i<bookno_length;i++)s[i]=buf[i];s[i]='\0';return s;}struct temptable *create_key_temptable(char buf[100],struct temptable *nokey_temptable){struct temptable *key_temptable=NULL;//当前书目信息关键词头指针struct temptable *p=NULL;//辅助链表的建立struct temptable *q=NULL;//指向非关键词表,筛选关键词int i,j;//代表单词起点和终点坐标int k;//赋值存储单词int word_length;//单词长度int judge;//代表目前单词是否为关键词key_temptable=(struct temptable *)malloc(sizeof(struct temptable));//带有头结点的关键词词表p=key_temptable;p->next=NULL;char *s=NULL;//存储单词i=j=bookno_length+1;//指向书目信息第一个单词的开头for(;buf[j]!='\0';){judge=1;//设置默认值,1表示是关键词,反之为0for(;buf[j]!=' '&&buf[j]!='\n';j++);//遇到单词的结束标志,提取单词,判断是否为关键词,并插入word_length=j-i;//计算单词长度,单词终点坐标减去单词起点坐标s=(char *)malloc(sizeof(char)*word_length+1);for(k=0;k<word_length;k++)s[k]=tolower(buf[i+k]);//装换成小写字母s[k]='\0';//字符串结束标志for(q=nokey_temptable->next;q!=NULL;q=q->next)//根据非关键词表判断是否为关键词if(strlen(s)==q->word_length&&!strcmp(s,q->word))//先进行长度比较,初步判断{judge=0;break;}if(judge==1)//生成目前书目信息的关键词表{p->next=(struct temptable *)malloc(sizeof(struct temptable));p=p->next;p->word=s;p->word_length=strlen(s);p->next=NULL;}elsefree(s);//非关键词释放其存储空间i=j=j+1;//下一个单词的起点}return key_temptable;}void print_all_key_table(struct one_key *all_key){int i;struct one_key *p=NULL;struct book_no *q=NULL;printf("输入1显示所生成的索引表,其它则不显示:");scanf("%d",&i);if(i==1)for(p=all_key->next;p!=NULL;p=p->next){printf("%s ",p->key);for(q=p->head->next;q!=NULL;q=q->next)printf("%s ",q->book_number);printf("\n");}}void write_all_key_table(struct one_key *all_key){FILE *f=NULL;struct one_key *p=NULL;struct book_no *q=NULL;f=fopen("E:\\c语言\\C语言编程软件\\我的工作空间\\课本\\例题\\关键词索引系统\\key_table.txt","w");for(p=all_key->next;p!=NULL;p=p->next){fputs(p->key,f);fputs(" ",f);for(q=p->head->next;q!=NULL;q=q->next){fputs(q->book_number,f);fputs(" ",f);}fputs("\n",f);}printf("索引文件名为key_table,所在目录与该源文件的相同,请查看!!!");}void search_book_information(struct one_key *all_key){char *get_key();//获取字符串关键词struct book_information *create_book_table();//创建书目信息链表struct book_information *book_table=NULL;struct one_key *p=NULL;//对关键词表进行搜索struct book_no *bno=NULL;//指向关键词表中拥有用户查询的关键词的书号char *s=NULL;//存储用户查询的关键词struct book_information *q=NULL; //指向书目信息链表int i; //进行书号比较int judge; //书号判断结果s=get_key();book_table=create_book_table();printf("搜索结果如下:\n");for(p=all_key->next;p!=NULL;p=p->next){if(strcmp(p->key,s)==0)//拥有相应的关键词{for(bno=p->head->next;bno!=NULL;bno=bno->next) //指向该关键词的书号for(q=book_table->next;q!=NULL;q=q->next)//指向书目信息链表的开头,进行穷搜索{judge=1;//初始值for(i=0;i<bookno_length;i++)//比较书号是否相等if(q->book[i]!=bno->book_number[i]){judge=0;break;}if(judge==1)printf("%s",q->book);}}}}char *get_key(){char *s=NULL,c[30];int i;printf("输入相应的关键字,长度不超过30:");scanf("%s",c);s=(char *)malloc(sizeof(char)*(strlen(c)+1));for(i=0;i<strlen(c);i++)s[i]=c[i];s[i]='\0';return s;}struct book_information *create_book_table(){book_information *book_table=NULL,*p=NULL;//p辅助链表的建立book_table=(struct book_information *)malloc(sizeof(struct book_information));book_table->next=NULL;p=book_table;int i;//书目信息的赋值char buf[100];FILE *f=NULL;if((f=fopen("E:\\c语言\\C语言编程软件\\我的工作空间\\课本\\例题\\关键词索引系统\\book_information.txt","r"))==NULL){printf("没有相应的书目文件,程序结束");exit(0);}fgets(buf,100,f);//提取书目信息,是个数组while(!feof(f)){p->next=(struct book_information *)malloc(sizeof(struct book_information));p=p->next;for(i=0;buf[i]!='\0';i++)p->book[i]=buf[i];p->book[i]='\0';fgets(buf,100,f);}return book_table;}。
毕业设计(论文)-c语言图书查询系统[管理资料]
单位:***********学号: ********* ******************************************(计算机科学与技术)图书查询系统姓名:*************专业:计**************指导教师:*****************江西农业大学南昌商学院二○一一年六月摘要本系统是使用c语言编写实现的图书管理与查询的一个简单系统。
管理员可以通过管理员帐号登入系统,可以初始化图书信息,增加图书信息,修改图书信息,删除图书信息,浏览图书信息,增加会员信息,删除会员信息,浏览会员信息。
该系统还有一个可以登录的对象就是会员。
每个会员都会有自己独立的用户和密码这是管理员直接通过增加会员信息直接设定的,会员可以登入该系统查找要查找的图书信息。
AbstractBooks is the use of c language inquiry system of the realization of the books management and inquires a simple system of. The administrator can through the administrator account login system, can initialize books information, increase the books information, modify the books information, delete the books information, browse books information, increase membership information, delete membership information, browse membership information.This system has a login can object is the member. Each member will have their own independent users and the password that is administrator directly through increase member information directly set, members can access the search to find the system of the library of information.目录前言 (1)第一章系统环境分析 (2)C语言概述 (2)第二章设计平台搭建 (3)VC++ (3)第三章需求分析 (4) (4)系统功能描述 (4) (5) (6)第四章详细设计与实现 (7) (7) (9) (11) (13) (15) (18) (21) (23) (25) (27) (29)参考文献 (32)前言本系统是使用c语言编写实现的图书管理与查询的一个简单系统。
C语言参考文献
1、谭浩强编著,C程序设计1991年7月2、裘宗燕著,从问题到程序科学出版社,北京大学出版社,1999年4月。
3、刘瑞挺主编,计算机二级教程,南开大学出版社,1996年10月。
4、陈朔鹰等编著,C语言程序设计基础教程,兵器工业出版社,1994年9月5、姜仲秋等主编,C语言程序设计,南京大学出版社,1998年1月。
6、《C程序设计(第二版)》,谭浩强编,清华大学出版社,1999年12月。
本书以初学者为读者对象,要求的起点低,详细而透彻地讲述了C语言各个语句的语法规则,通过典型的简单的例题,引领初学者进入C语言的世界。
7、《C语言程序设计题解与上机指导》,谭浩强编,清华大学出版社,2000年11月。
与教材配套的上机指导。
8、《Turbo C 2.0实用大全》,常玉龙等编写,北京航空航天大学出版社,1994年9月。
一本厚厚地过千页地"砖头"。
详细介绍了C语言地库函数,是一本很好的适合已经掌握C语言基础之后使用的参考手册。
9、《C语言程序设计习题集(第二版)》,陈朔鹰陈英主编,人民邮电出版社,2003年2月。
汇集近千道不同难度、不同层次、不同类型的习题,简单的题目适合初学者进行基本概念自测,复杂的题目足可以让你研究上一个月。
10、《C语言趣味程序百例精解》,陈朔鹰陈英主编,北京理工大学出版社,1996年。
汇集100道从易到难的趣味编程题目,你可以通过对这些饶有兴趣问题的求解过程,掌握程序设计的基本方法。
11、《C语言程序设计辅导与习题集》,田淑清等,中国铁道出版社,2000年1月。
一本典型的与全国计算机等级考试题型类似的习题集。
整本书的习题难度适中。
12、《C语言编程常见问题解答》,[美]Paul S. R. Chishohm等著,张芳妮吕波译,清华大学出版社,11996年12月。
它是一本以问答方式书写的好的参考书,在按照章节回答问题的过程中,让你可以明确清楚地体会到C语言的精髓。
13、《The C Programming Language》,by Brian W. Kernighan and Dennis M. Ritchie.,Pubilished by Prentice-Hall in 1988。
图书资料管理系统 C语言设计报告 含C语言程序
图书资料信息管理系统
void Add(int);
int main() {
int i; int count=0;
do
{
printf("\n");
printf("
图书资料信息管理系统\n");
printf("-------------------------------------------------------------
图书资料信息管理系统
图书资料信息管理系统
主要内容 图书资料基本信息:图书编号、书名、作者定价、馆藏数、借阅数等。 图书借阅信息:借阅人、借书证号、所借书名、借阅日期。 系统功能: (1)统计馆藏书籍总数、已借出数据总数、在馆书籍数等。 (2)统计馆藏书籍总金额、馆藏书籍的平均价格。 (3)找出借阅次数最多的 10 本书,并对它们进行排序。 (4)图书资料信息其它方面的统计
这次编写一个比较完整的系统程序,一开始基本无从下手,不知道具体思 路,应该要定义什么。后来经过在图书馆的一番查找和我小组同学的帮助下,我 们首先确立了大框架,写出了主函数,然后又进行了分工合作写各模块的函数代 码,当我们把几大函数凑到一起时,又出现很多错误,尤其是在数据定义类型上 出了一些错,为了解决这一问题,我们统一了结构变量并讨论商量解决方案,最 后集思广益和老师的帮助之下,程序从可以简单运行到现在的可以实现各项统计 排序功能,这也是我收获比较大的一次,合作完成了一个图书管理系统。我所得 出的结论是,编程序首先要理清思路,确定结构变量和数据的定义类型以及所要 用到的算法,然后不断完善。
理
系
统
显示内容
统计
数据结构设计及用法说明
数据类型:int,float,char
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
// algo4-5.cpp 根据algo4-4.cpp产生的文件,索引查询图书
#include"c1.h"
typedef int ElemType;
#include"c2-5.h"
#include"bo2-6.cpp"
#include"c4-2.h"
#include"bo4-2.cpp"
#define MaxBookNum 10 // 假设只对10本书建索引表
#define MaxKeyNum 25 // 索引表的最大容量(关键词的最大数) #define MaxLineLen 51 // 书目串(书名+书号)buf的最大长度
struct IdxTermType // 索引项类型
{
HString key; // 关键词(堆分配类型,c4-2.h)
LinkList bnolist; // 存放书号索引的链表(c2-5.h)
};
struct IdxListType // 索引表类型(有序表)
{
IdxTermType item[MaxKeyNum+1];
int last; // 关键词的个数
};
struct BookTermType // 书目项类型
{
char bookname[MaxLineLen]; // 书目串
int bookno; // 书号
};
struct BookListType // 书目表类型(有序表)
{
BookTermType item[MaxBookNum];
int last; // 书目的数量
};
int main()
{
FILE *f; // 任何时间最多打开一个文件
IdxListType idxlist; // 索引表
BookListType booklist; // 书目表
char buf[MaxLineLen+1]; // 当前书目串(包括'\0')
HString ch; // 索引字符串
int BookNo; // 书号变量
int i,k,l;
Link p;
InitString(ch); // 初始化HString类型的变量
f=fopen("BookIdx.txt","r"); // 打开书名关键词索引表文件
if(!f)
exit(OVERFLOW);
fscanf(f,"%d",&st); // 书名关键词个数
for(k=0;k<st;k++) // 把关键词文件的内容拷到idxlist中
{
fscanf(f,"%s",buf);
i=0;
while(buf[i])
buf[i++]=tolower(buf[i]); // 字母转为小写
InitString(idxlist.item[k].key);
StrAssign(idxlist.item[k].key,buf);
InitList(idxlist.item[k].bnolist); // 初始化书号链表 bo2-6.cpp
fscanf(f,"%d",&i);
for(l=0;l<i;l++)
{
fscanf(f,"%d",&BookNo);
if(!MakeNode(p,BookNo)) // 分配失败 bo2-6.cpp
exit(OVERFLOW);
p->next=NULL;
Append(idxlist.item[k].bnolist,p); // 插入新的书号索引 bo2-6.cpp
}
}
fclose(f);
f=fopen("BookInfo.txt","r"); // 打开书目文件
if(!f)
exit(FALSE);
i=0;
while(!feof(f)) // 把书目文件的内容拷到booklist中
{
fgets(buf,MaxLineLen,f);
booklist.item[i].bookno=(buf[0]-'0')*100+(buf[1]-'0')*10+(buf[2]-'0'); // 前三位为书号
strcpy(booklist.item[i].bookname,buf);
i++;
}
st=i;
printf("请输入书目的关键词(一个)");
scanf("%s",buf);
i=0;
while(buf[i])
buf[i++]=tolower(buf[i]); // 字母转为小写
StrAssign(ch,buf);
i=0;
do
{
k=StrCompare(ch,idxlist.item[i].key); // bo4-2.cpp
i++;
}while(k&&i<=st);
if(!k) // 索引表中有此关键词
{
p=idxlist.item[i-1].bnolist.head->next;
while(p)
{
l=0;
while(l<st&&p->data!=booklist.item[l].bookno) l++;
if(l<st)
printf("%s",booklist.item[l].bookname);
p=p->next;
}
}
else
printf("没找到\n");
}。