C/C++ 书店销售管理系统_书店管理系统代码-程序员宅基地

技术标签: 算法  c++  c语言  

结构体:C 版本

#include <stdio.h>
            #include <windows.h> 
        

        //定义 图书 结构体
    struct Book {
                    char name[15] ; // 名称
                    char numb[18] ; // 序列号
                    char publish[18] ; // 出版社
                    char author[12] ; // 作者
                    double price ; // 价格
                    int amount ; // 库存
            };
    //定义全局 图书 数组
    struct Book bookList [100];
    //定义全局 图书 数组栈指针
    int bookCount = 0;
        //定义 销售记录 结构体
    struct Record {
                    char book[15] ; // 图书
                    int amount ; // 数量
                    double price ; // 价格
            };
    //定义全局 销售记录 数组
    struct Record recordList [100];
    //定义全局 销售记录 数组栈指针
    int recordCount = 0;
    
        //图书 读入文件
    void readBook ();
    //图书 写入文件
    void writeBook ();
    //图书 添加记录
    void addBook ();
        //图书 删除记录
    void delBook ();
    //图书 根据下标删除
    int delBookByIndex (int index);
    //图书 修改记录
    void modBook ();
    //图书 查找记录
    void findBook (int all);
    //图书 排序
    void sortBook ();
    //交换
    void exchangeBook (int i ,int j);
    //存在判断函数
                                    int getOneBook (const char *name,char *s);
                                    //销售记录 读入文件
    void readRecord ();
    //销售记录 写入文件
    void writeRecord ();
    //销售记录 添加记录
    void addRecord ();
        //销售记录 删除记录
    void delRecord ();
    //销售记录 根据下标删除
    int delRecordByIndex (int index);
    //销售记录 修改记录
    void modRecord ();
    //销售记录 查找记录
    void findRecord (int all);
    //销售记录 排序
    void sortRecord ();
    //交换
    void exchangeRecord (int i ,int j);
    //存在判断函数
                    
        //菜单
            void menu();
    
    // 主函数
    int main(){
            //读取数据
                        readBook ();//读取图书
                            readRecord ();//读取销售记录
                while(1){
                        int choice;
                                    menu ();
                scanf("%d",&choice);
        switch(choice){
                                        case 1 :
                            addBook ();//添加图书
                break;
                                                    case 2 :
                            findBook (1);//查找图书
                                delBook ();//删除图书
                break;
                                                    case 3 :
                            findBook (1);//查找图书
                                modBook ();//修改图书
                break;
                                                    case 4 :
                            findBook (0);//查找图书
                break;
                            case 5 :
                            sortBook ();//排序图书
                break;
                                                            case 6 :
                            addRecord ();//添加销售记录
                break;
                                                    case 7 :
                            findRecord (1);//查找销售记录
                                delRecord ();//删除销售记录
                break;
                                                    case 8 :
                            findRecord (1);//查找销售记录
                                modRecord ();//修改销售记录
                break;
                                                    case 9 :
                            findRecord (0);//查找销售记录
                break;
                            case 10 :
                            sortRecord ();//排序销售记录
                break;
                                            case 0:
                    printf("\n\n\n\t\t\t感谢使用\n\n\n");            exit(0);
                default :
        getchar();
                    printf("\n\n\n\t提示:没有这个选项!请重新输入!\n\n\n\n");            system("pause");
        break;
    }
                        }
        return 0;
    }


		
//图书 是否存在判断
int getOneBook (const char *name,char *s){
	int res = -1,i;
	for( i = 0;i < bookCount ;i++){
							if( strcmp(name,"name")==0 && strcmp(s, bookList [i]. name )==0){
				res = i;
				break;
			}
									if( strcmp(name,"numb")==0 && strcmp(s, bookList [i]. numb )==0){
				res = i;
				break;
			}
																					}
	return res;
}
//图书 读入文件
void readBook (){
	FILE *fp = NULL;
	if (NULL == (fp = fopen("Book.txt", "r")))//读打开
	{
		return;
	}
	int i=0;
	//从文件读取数据
	while (fscanf(fp, "%s%s%s%s%lf%d"
								 ,bookList[i].name  ,bookList[i].numb  ,bookList[i].publish  ,bookList[i].author  ,&bookList[i].price  ,&bookList[i].amount 
	) != EOF)//读取
	{
		i++;
	}
	//记录总数
	bookCount = i;
	fclose(fp);
}
	//图书 写入文件
void writeBook (){
	FILE *fp = NULL;
	int i;
	fp = fopen("Book.txt", "w+");
	for( i = 0;i< bookCount ;i++){
		fprintf(fp,"%s %s %s %s %lf %d\n"
				 ,bookList[i].name  ,bookList[i].numb  ,bookList[i].publish  ,bookList[i].author  ,bookList[i].price  ,bookList[i].amount );
	}
	fclose(fp);
}
	//图书 添加记录
void addBook (){
	char selectYNFlag = 'y';
	while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
	            printf("\n");    						 				            printf("请输入名称 :");    				char name[15]; 				            scanf("%s",name);
    									strcpy(bookList [ bookCount ] . name,name);
								 				//检索Book 不重复
				int getOneBookname = getOneBook ("name",bookList [ bookCount ] . name);
				if( getOneBookname >=0){//检索不为空
					            printf("名称已存在!\n");    				break;
				}
																							 				            printf("请输入序列号 :");    				char numb[18]; 				            scanf("%s",numb);
    									strcpy(bookList [ bookCount ] . numb,numb);
								 				//检索Book 不重复
				int getOneBooknumb = getOneBook ("numb",bookList [ bookCount ] . numb);
				if( getOneBooknumb >=0){//检索不为空
					            printf("序列号已存在!\n");    				break;
				}
																							 				            printf("请输入出版社 :");    				char publish[18]; 				            scanf("%s",publish);
    									strcpy(bookList [ bookCount ] . publish,publish);
																											 				            printf("请输入作者 :");    				char author[12]; 				            scanf("%s",author);
    									strcpy(bookList [ bookCount ] . author,author);
																											 				            printf("请输入价格 :");    				double price; 				            scanf("%lf",&price);
    									bookList [ bookCount ] . price = price ;
																											 				            printf("请输入库存 :");    				int amount; 				            scanf("%d",&amount);
    									bookList [ bookCount ] . amount = amount ;
																								//bookCount 是全局变量
		bookCount ++;
		            printf("\n是否继续录入?(y/n)");    		getchar();
		            scanf("%c",&selectYNFlag);
    	}
	writeBook ( );
	            printf("\n*****************************\n");    	            printf("录入完成\n");    	            printf("*****************************\n");    }
	//图书 删除
void delBook (){
	            printf("请输入您要删除的 图书 序号(输入-1退出):");    	int index;
	            scanf("%d",&index);
    
	if(index >= 0){
		int res = delBookByIndex (index);
		if(res){
			            printf("删除成功!\n\n");    			writeBook ();
		}else{
			            printf("删除失败!\n\n");    		}
	}

}
	//图书 根据下标删除
int delBookByIndex (int index){
	if(index >= bookCount || index < 0){
		return 0;
	}
	//开始删除!
	int i;
	for(i = index; i < bookCount - 1 ; i++){
		//元素全部往前移一位。
		bookList [i] = bookList [i+1];
	}
	//最后令栈的长度减一
	bookCount = bookCount - 1;
	return 1;
}
	//图书 修改
void modBook (){
	            printf("请输入您要修改的图书 序号(输入-1退出):");    	int indexOfMod = -1;
	            scanf("%d",&indexOfMod);
    	if(indexOfMod >= 0 && indexOfMod < bookCount ){
		//开始修改
					 									            printf("请输入名称 :");    					char name[15];
					            scanf("%s",name);
    
															if(strcmp(bookList [indexOfMod] . name,name) != 0 && getOneBook ("name",name)>=0){//检索不为空
						            printf("名称 已存在!\n");    						return;
					}
																																 									            printf("请输入出版社 :");    					char publish[18];
					            scanf("%s",publish);
    
																																 									            printf("请输入作者 :");    					char author[12];
					            scanf("%s",author);
    
																																 									            printf("请输入价格 :");    					double price;
					            scanf("%lf",&price);
    
																																 									            printf("请输入库存 :");    					int amount;
					            scanf("%d",&amount);
    
																															//输入完毕,赋值
					 									strcpy(bookList [ indexOfMod ] . name,name);
																	 									strcpy(bookList [ indexOfMod ] . publish,publish);
												 									strcpy(bookList [ indexOfMod ] . author,author);
												 									bookList [ indexOfMod ] . price = price ;
												 									bookList [ indexOfMod ] . amount = amount ;
											            printf("修改成功!\n");    		writeBook ();
	}else{
		            printf("输入错误!\n");    	}

}
//图书 查找 如果all=1:查询全部 否则按条件查询
void findBook (int all){
	int select = 0;
	char conCharArr[40];
	double conNum1,conNum2;
	while(1){
		printf("\n%-5s%-15s%-18s%-18s%-12s%-12s%-10s\n\n","序号" ,"名称","序列号","出版社","作者","价格","库存" );
		if( bookList ){
			//用于统计信息所用
			int count = 0,i;
																																								double priceSum=0;
																int amountSum=0;
										for (i = 0;i <  bookCount ; i++)
			{
				if(select == 0
																														|| select == 1 && strstr(bookList [i]. name,conCharArr) //根据名称,模糊查询
																																						|| select == 2 && strstr(bookList [i]. numb,conCharArr) //根据序列号,模糊查询
																																																	|| select == 3 && strstr(bookList [i]. author,conCharArr) //根据作者,模糊查询
																																												){
															printf("%-5d%-15s%-18s%-18s%-12s%-12lf%-10d \n\n",i
																			,bookList [i] . name
													,bookList [i] . numb
													,bookList [i] . publish
													,bookList [i] . author
													,bookList [i] . price
													,bookList [i] . amount
											);
					//用于统计信息所用
																																																														priceSum += bookList [i].price;
																								amountSum += bookList [i].amount;
																count++;
				}else{
					delBookByIndex(i--);//删掉
				}
			}
			            printf("共%d条结果\n",count);    			            printf("-----------------------------------------------------------------------------------------------------\n");    																																																printf("【价格】平均:%.2lf\n" ,count!=0?priceSum * 1.0 / count :0);
																										printf("【库存】总计:%d 平均:%.2lf\n",amountSum ,count!=0?amountSum * 1.0 / count :0);
															            printf("\n");    		}else{
			            printf("\n【无记录!】\n\n");    		}
		//如果参数all为1,则表示列出所有就退出
		if(all == 1)break;
		//进入过滤。
		            printf("【筛选器:你可以在以上结果的基础上,进行以下条件筛选】\n");    		            printf("0:退出\n");    									            printf("1:按 名称 筛选\n");    												            printf("2:按 序列号 筛选\n");    																	            printf("3:按 作者 筛选\n");    																	            printf("请输入选择:");    		            scanf("%d",&select);
    		if(select>0){
			if(0  ||select==1 ||select==2 ||select==3 ){
				            printf("请输入筛选条件:");    				            scanf("%s",conCharArr);
    			}else if(0 ){
				            printf("请输入筛选范围m,n,用空格隔开(m ≤X ≤n):");    				            scanf("%lf",&conNum1);
                scanf("%lf",&conNum2);
    			}
		}else{
			break;
		}
	}
	readBook();//从新读取数据。
}
	//图书 排序
void sortBook (){
	int select,i,j;
			            printf("1:按 名称 排序\n");    			            printf("2:按 序列号 排序\n");    			            printf("3:按 出版社 排序\n");    			            printf("4:按 作者 排序\n");    			            printf("5:按 价格 排序\n");    			            printf("6:按 库存 排序\n");    		            printf("请输入选择:");    	            scanf("%d",&select);
    	for( i = bookCount -1;i>0;i--){
		for( j = 0;j < i;j++){
			if(	0
											|| select == 1 && strcmp(bookList [j]. name , bookList [j+1]. name)>0
															|| select == 2 && strcmp(bookList [j]. numb , bookList [j+1]. numb)>0
															|| select == 3 && strcmp(bookList [j]. publish , bookList [j+1]. publish)>0
															|| select == 4 && strcmp(bookList [j]. author , bookList [j+1]. author)>0
															|| select == 5 && bookList [j]. price - bookList [j+1]. price > 0
															|| select == 6 && bookList [j]. amount - bookList [j+1]. amount > 0
										){
				exchangeBook (j,j+1);
			}
		}
	}
	findBook (1);
	writeBook ();
}
//图书 交换
void exchangeBook (int i,int j){
	struct Book book = bookList [i];
	bookList [i] = bookList  [j];
	bookList [j] = book ;
}
//销售记录 读入文件
void readRecord (){
	FILE *fp = NULL;
	if (NULL == (fp = fopen("Record.txt", "r")))//读打开
	{
		return;
	}
	int i=0;
	//从文件读取数据
	while (fscanf(fp, "%s%d%lf"
								 ,recordList[i].book  ,&recordList[i].amount  ,&recordList[i].price 
	) != EOF)//读取
	{
		i++;
	}
	//记录总数
	recordCount = i;
	fclose(fp);
}
	//销售记录 写入文件
void writeRecord (){
	FILE *fp = NULL;
	int i;
	fp = fopen("Record.txt", "w+");
	for( i = 0;i< recordCount ;i++){
		fprintf(fp,"%s %d %lf\n"
				 ,recordList[i].book  ,recordList[i].amount  ,recordList[i].price );
	}
	fclose(fp);
}
	//销售记录 添加记录
void addRecord (){
	char selectYNFlag = 'y';
	while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
	            printf("\n");    						 				            printf("请输入图书 :");    				char book[15]; 				            scanf("%s",book);
    									strcpy(recordList [ recordCount ] . book,book);
																				//检索Record 是否存在
				int getOneBookFrn =getOneBook ("name",recordList [ recordCount ] . book);
				if(getOneBookFrn ==-1){//检索不为空
					            printf("图书不存在!\n");    				break;
				}
															 				            printf("请输入数量 :");    				int amount; 				            scanf("%d",&amount);
    									recordList [ recordCount ] . amount = amount ;
																											 				            printf("请输入价格 :");    				double price; 				            scanf("%lf",&price);
    									recordList [ recordCount ] . price = price ;
																								//recordCount 是全局变量
		recordCount ++;
		            printf("\n是否继续录入?(y/n)");    		getchar();
		            scanf("%c",&selectYNFlag);
    	}
	writeRecord ( );
	            printf("\n*****************************\n");    	            printf("录入完成\n");    	            printf("*****************************\n");    }
	//销售记录 删除
void delRecord (){
	            printf("请输入您要删除的 销售记录 序号(输入-1退出):");    	int index;
	            scanf("%d",&index);
    
	if(index >= 0){
		int res = delRecordByIndex (index);
		if(res){
			            printf("删除成功!\n\n");    			writeRecord ();
		}else{
			            printf("删除失败!\n\n");    		}
	}

}
	//销售记录 根据下标删除
int delRecordByIndex (int index){
	if(index >= recordCount || index < 0){
		return 0;
	}
	//开始删除!
	int i;
	for(i = index; i < recordCount - 1 ; i++){
		//元素全部往前移一位。
		recordList [i] = recordList [i+1];
	}
	//最后令栈的长度减一
	recordCount = recordCount - 1;
	return 1;
}
	//销售记录 修改
void modRecord (){
	            printf("请输入您要修改的销售记录 序号(输入-1退出):");    	int indexOfMod = -1;
	            scanf("%d",&indexOfMod);
    	if(indexOfMod >= 0 && indexOfMod < recordCount ){
		//开始修改
					 									            printf("请输入图书 :");    					char book[15];
					            scanf("%s",book);
    
																									if(getOneBook ("name",book)==-1){//检索不为空
						            printf("图书 不存在!\n");    						return;
					}
																	 									            printf("请输入数量 :");    					int amount;
					            scanf("%d",&amount);
    
																																 									            printf("请输入价格 :");    					double price;
					            scanf("%lf",&price);
    
																															//输入完毕,赋值
					 									strcpy(recordList [ indexOfMod ] . book,book);
												 									recordList [ indexOfMod ] . amount = amount ;
												 									recordList [ indexOfMod ] . price = price ;
											            printf("修改成功!\n");    		writeRecord ();
	}else{
		            printf("输入错误!\n");    	}

}
//销售记录 查找 如果all=1:查询全部 否则按条件查询
void findRecord (int all){
	int select = 0;
	char conCharArr[40];
	double conNum1,conNum2;
	while(1){
		printf("\n%-5s%-15s%-10s%-12s\n\n","序号" ,"图书","数量","价格" );
		if( recordList ){
			//用于统计信息所用
			int count = 0,i;
																			int amountSum=0;
																double priceSum=0;
										for (i = 0;i <  recordCount ; i++)
			{
				if(select == 0
																														|| select == 1 && strstr(recordList [i]. book,conCharArr) //根据图书,模糊查询
																																												){
															printf("%-5d%-15s%-10d%-12lf \n\n",i
																			,recordList [i] . book
													,recordList [i] . amount
													,recordList [i] . price
											);
					//用于统计信息所用
																													amountSum += recordList [i].amount;
																								priceSum += recordList [i].price;
																count++;
				}else{
					delRecordByIndex(i--);//删掉
				}
			}
			            printf("共%d条结果\n",count);    			            printf("-----------------------------------------------------------------------------------------------------\n");    																											printf("【数量】总计:%d \n",amountSum );
																										printf("【价格】总计:%lf 平均:%.2lf\n",priceSum ,count!=0?priceSum * 1.0 / count :0);
															            printf("\n");    		}else{
			            printf("\n【无记录!】\n\n");    		}
		//如果参数all为1,则表示列出所有就退出
		if(all == 1)break;
		//进入过滤。
		            printf("【筛选器:你可以在以上结果的基础上,进行以下条件筛选】\n");    		            printf("0:退出\n");    									            printf("1:按 图书 筛选\n");    																	            printf("请输入选择:");    		            scanf("%d",&select);
    		if(select>0){
			if(0  ||select==1 ){
				            printf("请输入筛选条件:");    				            scanf("%s",conCharArr);
    			}else if(0 ){
				            printf("请输入筛选范围m,n,用空格隔开(m ≤X ≤n):");    				            scanf("%lf",&conNum1);
                scanf("%lf",&conNum2);
    			}
		}else{
			break;
		}
	}
	readRecord();//从新读取数据。
}
	//销售记录 排序
void sortRecord (){
	int select,i,j;
			            printf("1:按 图书 排序\n");    			            printf("2:按 数量 排序\n");    			            printf("3:按 价格 排序\n");    		            printf("请输入选择:");    	            scanf("%d",&select);
    	for( i = recordCount -1;i>0;i--){
		for( j = 0;j < i;j++){
			if(	0
											|| select == 1 && strcmp(recordList [j]. book , recordList [j+1]. book)>0
															|| select == 2 && recordList [j]. amount - recordList [j+1]. amount > 0
															|| select == 3 && recordList [j]. price - recordList [j+1]. price > 0
										){
				exchangeRecord (j,j+1);
			}
		}
	}
	findRecord (1);
	writeRecord ();
}
//销售记录 交换
void exchangeRecord (int i,int j){
	struct Record record = recordList [i];
	recordList [i] = recordList  [j];
	recordList [j] = record ;
}

                void menu (){
        //菜单
                    printf("*------------------主菜单---------------------*\n");                                                    printf("*-------------1 :添加图书\n");                                                        printf("*-------------2 :删除图书\n");                                                        printf("*-------------3 :修改图书\n");                                                        printf("*-------------4 :查找图书\n");                                printf("*-------------5 :排序图书\n");                                                                printf("*-------------6 :添加销售记录\n");                                                        printf("*-------------7 :删除销售记录\n");                                                        printf("*-------------8 :修改销售记录\n");                                                        printf("*-------------9 :查找销售记录\n");                                printf("*-------------10 :排序销售记录\n");                                            printf("*-------------0:退出\n");                                printf("*---------------------------------------------*\n");                        printf("请输入选择:");        }

结构体:C++版本

#include <io.h>
            #include <iostream>
            #include <windows.h>
            using namespace std; 
        

        //定义 图书 结构体
    struct Book {
                    char name[15] ; // 名称
                    char numb[18] ; // 序列号
                    char publish[18] ; // 出版社
                    char author[12] ; // 作者
                    double price ; // 价格
                    int amount ; // 库存
            };
    //定义全局 图书 数组
    struct Book bookList [100];
    //定义全局 图书 数组栈指针
    int bookCount = 0;
        //定义 销售记录 结构体
    struct Record {
                    char book[15] ; // 图书
                    int amount ; // 数量
                    double price ; // 价格
            };
    //定义全局 销售记录 数组
    struct Record recordList [100];
    //定义全局 销售记录 数组栈指针
    int recordCount = 0;
    
        //图书 读入文件
    void readBook ();
    //图书 写入文件
    void writeBook ();
    //图书 添加记录
    void addBook ();
        //图书 删除记录
    void delBook ();
    //图书 根据下标删除
    int delBookByIndex (int index);
    //图书 修改记录
    void modBook ();
    //图书 查找记录
    void findBook (int all);
    //图书 排序
    void sortBook ();
    //交换
    void exchangeBook (int i ,int j);
    //存在判断函数
                                    int getOneBook (const char *name,char *s);
                                    //销售记录 读入文件
    void readRecord ();
    //销售记录 写入文件
    void writeRecord ();
    //销售记录 添加记录
    void addRecord ();
        //销售记录 删除记录
    void delRecord ();
    //销售记录 根据下标删除
    int delRecordByIndex (int index);
    //销售记录 修改记录
    void modRecord ();
    //销售记录 查找记录
    void findRecord (int all);
    //销售记录 排序
    void sortRecord ();
    //交换
    void exchangeRecord (int i ,int j);
    //存在判断函数
                    
        //菜单
            void menu();
    
    // 主函数
    int main(){
            //读取数据
                        readBook ();//读取图书
                            readRecord ();//读取销售记录
                while(1){
                        int choice;
                                    menu ();
                cin>>choice;
        switch(choice){
                                        case 1 :
                            addBook ();//添加图书
                break;
                                                    case 2 :
                            findBook (1);//查找图书
                                delBook ();//删除图书
                break;
                                                    case 3 :
                            findBook (1);//查找图书
                                modBook ();//修改图书
                break;
                                                    case 4 :
                            findBook (0);//查找图书
                break;
                            case 5 :
                            sortBook ();//排序图书
                break;
                                                            case 6 :
                            addRecord ();//添加销售记录
                break;
                                                    case 7 :
                            findRecord (1);//查找销售记录
                                delRecord ();//删除销售记录
                break;
                                                    case 8 :
                            findRecord (1);//查找销售记录
                                modRecord ();//修改销售记录
                break;
                                                    case 9 :
                            findRecord (0);//查找销售记录
                break;
                            case 10 :
                            sortRecord ();//排序销售记录
                break;
                                            case 0:
                    cout<<"\n\n\n\t\t\t感谢使用\n\n\n";
            exit(0);
                default :
        getchar();
                    cout<<"\n\n\n\t提示:没有这个选项!请重新输入!\n\n\n\n";
            system("pause");
        break;
    }
                        }
        return 0;
    }


		
//图书 是否存在判断
int getOneBook (const char *name,char *s){
	int res = -1,i;
	for( i = 0;i < bookCount ;i++){
							if( strcmp(name,"name")==0 && strcmp(s, bookList [i]. name )==0){
				res = i;
				break;
			}
									if( strcmp(name,"numb")==0 && strcmp(s, bookList [i]. numb )==0){
				res = i;
				break;
			}
																					}
	return res;
}
//图书 读入文件
void readBook (){
	FILE *fp = NULL;
	if (NULL == (fp = fopen("Book.txt", "r")))//读打开
	{
		return;
	}
	int i=0;
	//从文件读取数据
	while (fscanf(fp, "%s%s%s%s%lf%d"
								 ,bookList[i].name  ,bookList[i].numb  ,bookList[i].publish  ,bookList[i].author  ,&bookList[i].price  ,&bookList[i].amount 
	) != EOF)//读取
	{
		i++;
	}
	//记录总数
	bookCount = i;
	fclose(fp);
}
	//图书 写入文件
void writeBook (){
	FILE *fp = NULL;
	int i;
	fp = fopen("Book.txt", "w+");
	for( i = 0;i< bookCount ;i++){
		fprintf(fp,"%s %s %s %s %lf %d\n"
				 ,bookList[i].name  ,bookList[i].numb  ,bookList[i].publish  ,bookList[i].author  ,bookList[i].price  ,bookList[i].amount );
	}
	fclose(fp);
}
	//图书 添加记录
void addBook (){
	char selectYNFlag = 'y';
	while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
	            cout<<"\n";
    						 				            cout<<"请输入名称 :";
    				char name[15]; 				            cin>>name;
    									strcpy(bookList [ bookCount ] . name,name);
								 				//检索Book 不重复
				int getOneBookname = getOneBook ("name",bookList [ bookCount ] . name);
				if( getOneBookname >=0){//检索不为空
					            cout<<"名称已存在!\n";
    				break;
				}
																							 				            cout<<"请输入序列号 :";
    				char numb[18]; 				            cin>>numb;
    									strcpy(bookList [ bookCount ] . numb,numb);
								 				//检索Book 不重复
				int getOneBooknumb = getOneBook ("numb",bookList [ bookCount ] . numb);
				if( getOneBooknumb >=0){//检索不为空
					            cout<<"序列号已存在!\n";
    				break;
				}
																							 				            cout<<"请输入出版社 :";
    				char publish[18]; 				            cin>>publish;
    									strcpy(bookList [ bookCount ] . publish,publish);
																											 				            cout<<"请输入作者 :";
    				char author[12]; 				            cin>>author;
    									strcpy(bookList [ bookCount ] . author,author);
																											 				            cout<<"请输入价格 :";
    				double price; 				            cin>>price;
    									bookList [ bookCount ] . price = price ;
																											 				            cout<<"请输入库存 :";
    				int amount; 				            cin>>amount;
    									bookList [ bookCount ] . amount = amount ;
																								//bookCount 是全局变量
		bookCount ++;
		            cout<<"\n是否继续录入?(y/n)";
    		getchar();
		            cin>>selectYNFlag;
    	}
	writeBook ( );
	            cout<<"\n*****************************\n";
    	            cout<<"录入完成\n";
    	            cout<<"*****************************\n";
    }
	//图书 删除
void delBook (){
	            cout<<"请输入您要删除的 图书 序号(输入-1退出):";
    	int index;
	            cin>>index;
    
	if(index >= 0){
		int res = delBookByIndex (index);
		if(res){
			            cout<<"删除成功!\n\n";
    			writeBook ();
		}else{
			            cout<<"删除失败!\n\n";
    		}
	}

}
	//图书 根据下标删除
int delBookByIndex (int index){
	if(index >= bookCount || index < 0){
		return 0;
	}
	//开始删除!
	int i;
	for(i = index; i < bookCount - 1 ; i++){
		//元素全部往前移一位。
		bookList [i] = bookList [i+1];
	}
	//最后令栈的长度减一
	bookCount = bookCount - 1;
	return 1;
}
	//图书 修改
void modBook (){
	            cout<<"请输入您要修改的图书 序号(输入-1退出):";
    	int indexOfMod = -1;
	            cin>>indexOfMod;
    	if(indexOfMod >= 0 && indexOfMod < bookCount ){
		//开始修改
					 									            cout<<"请输入名称 :";
    					char name[15];
					            cin>>name;
    
															if(strcmp(bookList [indexOfMod] . name,name) != 0 && getOneBook ("name",name)>=0){//检索不为空
						            cout<<"名称 已存在!\n";
    						return;
					}
																																 									            cout<<"请输入出版社 :";
    					char publish[18];
					            cin>>publish;
    
																																 									            cout<<"请输入作者 :";
    					char author[12];
					            cin>>author;
    
																																 									            cout<<"请输入价格 :";
    					double price;
					            cin>>price;
    
																																 									            cout<<"请输入库存 :";
    					int amount;
					            cin>>amount;
    
																															//输入完毕,赋值
					 									strcpy(bookList [ indexOfMod ] . name,name);
																	 									strcpy(bookList [ indexOfMod ] . publish,publish);
												 									strcpy(bookList [ indexOfMod ] . author,author);
												 									bookList [ indexOfMod ] . price = price ;
												 									bookList [ indexOfMod ] . amount = amount ;
											            cout<<"修改成功!\n";
    		writeBook ();
	}else{
		            cout<<"输入错误!\n";
    	}

}
//图书 查找 如果all=1:查询全部 否则按条件查询
void findBook (int all){
	int select = 0;
	char conCharArr[40];
	double conNum1,conNum2;
	while(1){
		printf("\n%-5s%-15s%-18s%-18s%-12s%-12s%-10s\n\n","序号" ,"名称","序列号","出版社","作者","价格","库存" );
		if( bookList ){
			//用于统计信息所用
			int count = 0,i;
																																								double priceSum=0;
																int amountSum=0;
										for (i = 0;i <  bookCount ; i++)
			{
				if(select == 0
																														|| select == 1 && strstr(bookList [i]. name,conCharArr) //根据名称,模糊查询
																																						|| select == 2 && strstr(bookList [i]. numb,conCharArr) //根据序列号,模糊查询
																																																	|| select == 3 && strstr(bookList [i]. author,conCharArr) //根据作者,模糊查询
																																												){
															printf("%-5d%-15s%-18s%-18s%-12s%-12lf%-10d \n\n",i
																			,bookList [i] . name
													,bookList [i] . numb
													,bookList [i] . publish
													,bookList [i] . author
													,bookList [i] . price
													,bookList [i] . amount
											);
					//用于统计信息所用
																																																														priceSum += bookList [i].price;
																								amountSum += bookList [i].amount;
																count++;
				}else{
					delBookByIndex(i--);//删掉
				}
			}
			            cout<<"共" << count <<"条结果\n";
    			            cout<<"-----------------------------------------------------------------------------------------------------\n";
    																																																cout<<"【价格】"  <<"平均:"<<  (count!=0?priceSum*1.0/count:0)<<"\n";
																										cout<<"【库存】" << "总计:"<<amountSum<<" "  <<"平均:"<<  (count!=0?amountSum*1.0/count:0)<<"\n";
															            cout<<"\n";
    		}else{
			            cout<<"\n【无记录!】\n\n";
    		}
		//如果参数all为1,则表示列出所有就退出
		if(all == 1)break;
		//进入过滤。
		            cout<<"【筛选器:你可以在以上结果的基础上,进行以下条件筛选】\n";
    		            cout<<"0:退出\n";
    									            cout<<"1:按 名称 筛选\n";
    												            cout<<"2:按 序列号 筛选\n";
    																	            cout<<"3:按 作者 筛选\n";
    																	            cout<<"请输入选择:";
    		            cin>>select;
    		if(select>0){
			if(0  ||select==1 ||select==2 ||select==3 ){
				            cout<<"请输入筛选条件:";
    				            cin>>conCharArr;
    			}else if(0 ){
				            cout<<"请输入筛选范围m,n,用空格隔开(m ≤X ≤n):";
    				            cin>>conNum1;
                cin>>conNum2;
    			}
		}else{
			break;
		}
	}
	readBook();//从新读取数据。
}
	//图书 排序
void sortBook (){
	int select,i,j;
			            cout<<"1:按 名称 排序\n";
    			            cout<<"2:按 序列号 排序\n";
    			            cout<<"3:按 出版社 排序\n";
    			            cout<<"4:按 作者 排序\n";
    			            cout<<"5:按 价格 排序\n";
    			            cout<<"6:按 库存 排序\n";
    		            cout<<"请输入选择:";
    	            cin>>select;
    	for( i = bookCount -1;i>0;i--){
		for( j = 0;j < i;j++){
			if(	0
											|| select == 1 && strcmp(bookList [j]. name , bookList [j+1]. name)>0
															|| select == 2 && strcmp(bookList [j]. numb , bookList [j+1]. numb)>0
															|| select == 3 && strcmp(bookList [j]. publish , bookList [j+1]. publish)>0
															|| select == 4 && strcmp(bookList [j]. author , bookList [j+1]. author)>0
															|| select == 5 && bookList [j]. price - bookList [j+1]. price > 0
															|| select == 6 && bookList [j]. amount - bookList [j+1]. amount > 0
										){
				exchangeBook (j,j+1);
			}
		}
	}
	findBook (1);
	writeBook ();
}
//图书 交换
void exchangeBook (int i,int j){
	struct Book book = bookList [i];
	bookList [i] = bookList  [j];
	bookList [j] = book ;
}
//销售记录 读入文件
void readRecord (){
	FILE *fp = NULL;
	if (NULL == (fp = fopen("Record.txt", "r")))//读打开
	{
		return;
	}
	int i=0;
	//从文件读取数据
	while (fscanf(fp, "%s%d%lf"
								 ,recordList[i].book  ,&recordList[i].amount  ,&recordList[i].price 
	) != EOF)//读取
	{
		i++;
	}
	//记录总数
	recordCount = i;
	fclose(fp);
}
	//销售记录 写入文件
void writeRecord (){
	FILE *fp = NULL;
	int i;
	fp = fopen("Record.txt", "w+");
	for( i = 0;i< recordCount ;i++){
		fprintf(fp,"%s %d %lf\n"
				 ,recordList[i].book  ,recordList[i].amount  ,recordList[i].price );
	}
	fclose(fp);
}
	//销售记录 添加记录
void addRecord (){
	char selectYNFlag = 'y';
	while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
	            cout<<"\n";
    						 				            cout<<"请输入图书 :";
    				char book[15]; 				            cin>>book;
    									strcpy(recordList [ recordCount ] . book,book);
																				//检索Record 是否存在
				int getOneBookFrn =getOneBook ("name",recordList [ recordCount ] . book);
				if(getOneBookFrn ==-1){//检索不为空
					            cout<<"图书不存在!\n";
    				break;
				}
															 				            cout<<"请输入数量 :";
    				int amount; 				            cin>>amount;
    									recordList [ recordCount ] . amount = amount ;
																											 				            cout<<"请输入价格 :";
    				double price; 				            cin>>price;
    									recordList [ recordCount ] . price = price ;
																								//recordCount 是全局变量
		recordCount ++;
		            cout<<"\n是否继续录入?(y/n)";
    		getchar();
		            cin>>selectYNFlag;
    	}
	writeRecord ( );
	            cout<<"\n*****************************\n";
    	            cout<<"录入完成\n";
    	            cout<<"*****************************\n";
    }
	//销售记录 删除
void delRecord (){
	            cout<<"请输入您要删除的 销售记录 序号(输入-1退出):";
    	int index;
	            cin>>index;
    
	if(index >= 0){
		int res = delRecordByIndex (index);
		if(res){
			            cout<<"删除成功!\n\n";
    			writeRecord ();
		}else{
			            cout<<"删除失败!\n\n";
    		}
	}

}
	//销售记录 根据下标删除
int delRecordByIndex (int index){
	if(index >= recordCount || index < 0){
		return 0;
	}
	//开始删除!
	int i;
	for(i = index; i < recordCount - 1 ; i++){
		//元素全部往前移一位。
		recordList [i] = recordList [i+1];
	}
	//最后令栈的长度减一
	recordCount = recordCount - 1;
	return 1;
}
	//销售记录 修改
void modRecord (){
	            cout<<"请输入您要修改的销售记录 序号(输入-1退出):";
    	int indexOfMod = -1;
	            cin>>indexOfMod;
    	if(indexOfMod >= 0 && indexOfMod < recordCount ){
		//开始修改
					 									            cout<<"请输入图书 :";
    					char book[15];
					            cin>>book;
    
																									if(getOneBook ("name",book)==-1){//检索不为空
						            cout<<"图书 不存在!\n";
    						return;
					}
																	 									            cout<<"请输入数量 :";
    					int amount;
					            cin>>amount;
    
																																 									            cout<<"请输入价格 :";
    					double price;
					            cin>>price;
    
																															//输入完毕,赋值
					 									strcpy(recordList [ indexOfMod ] . book,book);
												 									recordList [ indexOfMod ] . amount = amount ;
												 									recordList [ indexOfMod ] . price = price ;
											            cout<<"修改成功!\n";
    		writeRecord ();
	}else{
		            cout<<"输入错误!\n";
    	}

}
//销售记录 查找 如果all=1:查询全部 否则按条件查询
void findRecord (int all){
	int select = 0;
	char conCharArr[40];
	double conNum1,conNum2;
	while(1){
		printf("\n%-5s%-15s%-10s%-12s\n\n","序号" ,"图书","数量","价格" );
		if( recordList ){
			//用于统计信息所用
			int count = 0,i;
																			int amountSum=0;
																double priceSum=0;
										for (i = 0;i <  recordCount ; i++)
			{
				if(select == 0
																														|| select == 1 && strstr(recordList [i]. book,conCharArr) //根据图书,模糊查询
																																												){
															printf("%-5d%-15s%-10d%-12lf \n\n",i
																			,recordList [i] . book
													,recordList [i] . amount
													,recordList [i] . price
											);
					//用于统计信息所用
																													amountSum += recordList [i].amount;
																								priceSum += recordList [i].price;
																count++;
				}else{
					delRecordByIndex(i--);//删掉
				}
			}
			            cout<<"共" << count <<"条结果\n";
    			            cout<<"-----------------------------------------------------------------------------------------------------\n";
    																											cout<<"【数量】" << "总计:"<<amountSum<<" " <<"\n";
																										cout<<"【价格】" << "总计:"<<priceSum<<" "  <<"平均:"<<  (count!=0?priceSum*1.0/count:0)<<"\n";
															            cout<<"\n";
    		}else{
			            cout<<"\n【无记录!】\n\n";
    		}
		//如果参数all为1,则表示列出所有就退出
		if(all == 1)break;
		//进入过滤。
		            cout<<"【筛选器:你可以在以上结果的基础上,进行以下条件筛选】\n";
    		            cout<<"0:退出\n";
    									            cout<<"1:按 图书 筛选\n";
    																	            cout<<"请输入选择:";
    		            cin>>select;
    		if(select>0){
			if(0  ||select==1 ){
				            cout<<"请输入筛选条件:";
    				            cin>>conCharArr;
    			}else if(0 ){
				            cout<<"请输入筛选范围m,n,用空格隔开(m ≤X ≤n):";
    				            cin>>conNum1;
                cin>>conNum2;
    			}
		}else{
			break;
		}
	}
	readRecord();//从新读取数据。
}
	//销售记录 排序
void sortRecord (){
	int select,i,j;
			            cout<<"1:按 图书 排序\n";
    			            cout<<"2:按 数量 排序\n";
    			            cout<<"3:按 价格 排序\n";
    		            cout<<"请输入选择:";
    	            cin>>select;
    	for( i = recordCount -1;i>0;i--){
		for( j = 0;j < i;j++){
			if(	0
											|| select == 1 && strcmp(recordList [j]. book , recordList [j+1]. book)>0
															|| select == 2 && recordList [j]. amount - recordList [j+1]. amount > 0
															|| select == 3 && recordList [j]. price - recordList [j+1]. price > 0
										){
				exchangeRecord (j,j+1);
			}
		}
	}
	findRecord (1);
	writeRecord ();
}
//销售记录 交换
void exchangeRecord (int i,int j){
	struct Record record = recordList [i];
	recordList [i] = recordList  [j];
	recordList [j] = record ;
}

                void menu (){
        //菜单
                    cout<<"*------------------主菜单---------------------*\n";
                                                    cout<<"*-------------1 :添加图书\n";
                                                        cout<<"*-------------2 :删除图书\n";
                                                        cout<<"*-------------3 :修改图书\n";
                                                        cout<<"*-------------4 :查找图书\n";
                                cout<<"*-------------5 :排序图书\n";
                                                                cout<<"*-------------6 :添加销售记录\n";
                                                        cout<<"*-------------7 :删除销售记录\n";
                                                        cout<<"*-------------8 :修改销售记录\n";
                                                        cout<<"*-------------9 :查找销售记录\n";
                                cout<<"*-------------10 :排序销售记录\n";
                                            cout<<"*-------------0:退出\n";
                                cout<<"*---------------------------------------------*\n";
                        cout<<"请输入选择:";
        }

链表:C版本

#include <stdio.h>
            #include <windows.h> 
        

        //定义 图书 链表
    struct Book {
                    char name[15] ; // 名称
                    char numb[18] ; // 序列号
                    char publish[18] ; // 出版社
                    char author[12] ; // 作者
                    double price ; // 价格
                    int amount ; // 库存
                struct Book* next;//链式存储
    };
    struct  Book *bookList;//定义全局 图书 指针
    int bookCount = 0;//图书 个数记录
        //定义 销售记录 链表
    struct Record {
                    char book[15] ; // 图书
                    int amount ; // 数量
                    double price ; // 价格
                struct Record* next;//链式存储
    };
    struct  Record *recordList;//定义全局 销售记录 指针
    int recordCount = 0;//销售记录 个数记录
    
        //图书 读入文件
    void readBook ();
    //图书 写入文件
    void writeBook ();
    //图书 添加记录
    void addBook ();
        void addOneBook (struct Book *book);
        //图书 删除记录
    void delBook ();
    //图书 根据下标删除
    int delBookByIndex (int index);
    //图书 修改记录
    void modBook ();
    //图书 查找记录
    void findBook (int all);
    //图书 排序
    void sortBook ();
    //交换
    void exchangeBook (int i ,int j);
    //存在判断函数
                                    struct Book* getOneBook (const char *name,char *s);
                                    //销售记录 读入文件
    void readRecord ();
    //销售记录 写入文件
    void writeRecord ();
    //销售记录 添加记录
    void addRecord ();
        void addOneRecord (struct Record *record);
        //销售记录 删除记录
    void delRecord ();
    //销售记录 根据下标删除
    int delRecordByIndex (int index);
    //销售记录 修改记录
    void modRecord ();
    //销售记录 查找记录
    void findRecord (int all);
    //销售记录 排序
    void sortRecord ();
    //交换
    void exchangeRecord (int i ,int j);
    //存在判断函数
                    
        //菜单
            void menu();
    
    // 主函数
    int main(){
            //读取数据
                        readBook ();//读取图书
                            readRecord ();//读取销售记录
                while(1){
                        int choice;
                                    menu ();
                scanf("%d",&choice);
        switch(choice){
                                        case 1 :
                            addBook ();//添加图书
                break;
                                                    case 2 :
                            findBook (1);//查找图书
                                delBook ();//删除图书
                break;
                                                    case 3 :
                            findBook (1);//查找图书
                                modBook ();//修改图书
                break;
                                                    case 4 :
                            findBook (0);//查找图书
                break;
                            case 5 :
                            sortBook ();//排序图书
                break;
                                                            case 6 :
                            addRecord ();//添加销售记录
                break;
                                                    case 7 :
                            findRecord (1);//查找销售记录
                                delRecord ();//删除销售记录
                break;
                                                    case 8 :
                            findRecord (1);//查找销售记录
                                modRecord ();//修改销售记录
                break;
                                                    case 9 :
                            findRecord (0);//查找销售记录
                break;
                            case 10 :
                            sortRecord ();//排序销售记录
                break;
                                            case 0:
                    printf("\n\n\n\t\t\t感谢使用\n\n\n");            exit(0);
                default :
        getchar();
                    printf("\n\n\n\t提示:没有这个选项!请重新输入!\n\n\n\n");            system("pause");
        break;
    }
                        }
        return 0;
    }


		
            //是否存在判断
        struct Book *getOneBook (const char *name,char *s){
            struct Book *head = bookList;
            while(head){
                                                        if( strcmp(name,"name")==0 && strcmp(s, head->name )==0){
                        return head;
                    }
                                                                            if( strcmp(name,"numb")==0 && strcmp(s, head->numb )==0){
                        return head;
                    }
                                                                                                                                                                                                    head = head->next;
            }
            return NULL;
        }
    //图书 读入文件
void readBook (){
    FILE *fp = NULL;
    if (NULL == (fp = fopen("Book.txt", "r")))//读打开
    {
        //文件不存在,不读取
        return;
    }
    int i=0;
    //从文件读取数据
    bookList = NULL;
    struct Book *tail = bookList;
    while (1)//读取
    {
        //给节点分配空间
        struct Book *p=(struct Book*)malloc(sizeof(struct Book));
        //读取数据到p
        if(fscanf(fp, "%s%s%s%s%lf%d"
             ,p->name  ,p->numb  ,p->publish  ,p->author  ,&p->price  ,&p->amount 
        ) == EOF)  {
            break;
        }
        p->next=NULL;
        //指针为空则赋值。
        if (bookList  == NULL)
        {
            bookList=p;
            tail=p;
        }
        else {
            tail->next=p;
            tail=p;
        }
        i++;
    }
    //记录总数
    bookCount = i;
    fclose(fp);
}
//图书 写入文件
void writeBook (){
    //打开文件
    FILE *fp = NULL;
    fp = fopen("Book.txt", "w+");
    //定义指针
    struct Book *p = bookList;
    //写入
    while(p){
        fprintf(fp,"%s %s %s %s %lf %d\n"
             ,p->name  ,p->numb  ,p->publish  ,p->author  ,p->price  ,p->amount );
        p=p->next;
    }
    fclose(fp);
}
//图书 添加记录
void addBook (){
    char selectYNFlag = 'y';
    while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
                    printf("\n");            struct Book *tempValue = (struct Book*)malloc(sizeof(struct Book)); //必须重新分配地址空间。
                                                                     printf("请输入名称 :");                        char name[15];                                 scanf("%s",name);
                                                strcpy(tempValue->name,name);
                                                                 struct Book* onename = getOneBook ("name",tempValue->name);
                        if(onename !=NULL){//检索不为空
                                        printf("名称已存在!\n");                            break;
                        }
                                                                                                                                                             printf("请输入序列号 :");                        char numb[18];                                 scanf("%s",numb);
                                                strcpy(tempValue->numb,numb);
                                                                 struct Book* onenumb = getOneBook ("numb",tempValue->numb);
                        if(onenumb !=NULL){//检索不为空
                                        printf("序列号已存在!\n");                            break;
                        }
                                                                                                                                                             printf("请输入出版社 :");                        char publish[18];                                 scanf("%s",publish);
                                                strcpy(tempValue->publish,publish);
                                                                                                                                                                                 printf("请输入作者 :");                        char author[12];                                 scanf("%s",author);
                                                strcpy(tempValue->author,author);
                                                                                                                                                                                 printf("请输入价格 :");                        double price;                                 scanf("%lf",&price);
                                                tempValue->price = price ;
                                                                                                                                                                                 printf("请输入库存 :");                        int amount;                                 scanf("%d",&amount);
                                                tempValue->amount = amount ;
                                                                                                                            //TODO

        //加入链表
        tempValue->next = NULL;
        addOneBook (tempValue);
                    printf("\n是否继续录入?(y/n)");            getchar();
                    scanf("%c",&selectYNFlag);
        }
    writeBook ( );
                printf("\n*****************************\n");                    printf("录入完成\n");                    printf("*****************************\n");    }
void addOneBook (struct Book *temp){
    //采用头插法
    if(bookList == NULL){
        bookList = temp;
    }else{
        temp->next = bookList;
        bookList = temp;
    }
    bookCount ++;
}
//图书 删除
void delBook (){
                printf("请输入您要删除的 图书 序号(输入-1退出):");        int index;
                scanf("%d",&index);
    
    if(index >= 0){
        int res = delBookByIndex (index);
        if(res){
                        printf("删除成功!\n\n");                writeBook ();
        }else{
                        printf("删除失败!\n\n");            }
    }
}
//图书 根据下标删除
int delBookByIndex (int index){
    if(index > bookCount || index < 1){
        return 0;//删除失败 ,数量没那么多
    }
    //开始删除!
    struct Book *p = (struct Book*)malloc(sizeof(struct Book));
    struct Book *q = bookList;
    p->next = bookList;
    if(index == 1){
        bookList = bookList ->next;
    }else{
        int i;
        for(i = 0;i < index-1 ; i++){
            p = p->next;
            q = q->next;
        }
        p->next = q->next;
    }
    bookCount = bookCount - 1;
    return 1;
}
//图书 修改
void modBook (){
                printf("请输入您要修改的图书 序号(输入-1退出):");        int indexOfMod = -1,i;
                scanf("%d",&indexOfMod);
        if(indexOfMod > 0 && indexOfMod <= bookCount ){
        //开始修改
        struct Book *temp = bookList ;
        for( i = 0;i < indexOfMod-1;i++){
            temp=temp->next;
        }
                                                                     printf("请输入名称 :");                        char name[15];
                                scanf("%s",name);
    
                                                            if(strcmp(temp->name,name) != 0 && getOneBook ("name",name)!=NULL){//检索不为空
                                    printf("名称 已存在!\n");                            return;
                    }
                                                                                                                                                                                 printf("请输入出版社 :");                        char publish[18];
                                scanf("%s",publish);
    
                                                                                                                                                                                 printf("请输入作者 :");                        char author[12];
                                scanf("%s",author);
    
                                                                                                                                                                                 printf("请输入价格 :");                        double price;
                                scanf("%lf",&price);
    
                                                                                                                                                                                 printf("请输入库存 :");                        int amount;
                                scanf("%d",&amount);
    
                                                                                                                            //输入完毕,赋值
                                                     strcpy(temp-> name,name);
                                                                                                     strcpy(temp-> publish,publish);
                                                                                 strcpy(temp-> author,author);
                                                                                 temp-> price = price ;
                                                                                 temp-> amount = amount ;
                                                        printf("修改成功!\n");            writeBook ();
    }else{
                    printf("输入错误!\n");        }
}
//图书 查找 如果all=1:查询全部 否则按条件查询
void findBook (int all){
    int select = 0;
    char conCharArr[40];
    double conNum1,conNum2;
    while(1){
        printf("\n%-5s%-15s%-18s%-18s%-12s%-12s%-10s\n\n","序号" ,"名称","序列号","出版社","作者","价格","库存" );
        int i=1,count = 0;
        if( bookList ){
            //用于统计信息所用
                                                                                                                                                                double priceSum=0;
                                                                int amountSum=0;
                                        struct Book *t = bookList;
            while(t){
                int delFlag = 0;
                if(select == 0
                                                                                                                        || select == 1 && strstr(t->name,conCharArr) //根据名称,模糊查询
                                                                                                                                                        || select == 2 && strstr(t->numb,conCharArr) //根据序列号,模糊查询
                                                                                                                                                                                                    || select == 3 && strstr(t->author,conCharArr) //根据作者,模糊查询
                                                                                                                                                                                ){
                                                            printf("%-5d%-15s%-18s%-18s%-12s%-12lf%-10d \n\n",i
                                                                    ,t->name
                                                ,t->numb
                                                ,t->publish
                                                ,t->author
                                                ,t->price
                                                ,t->amount
                                            );
                    //用于统计信息所用
                                                                                                                                                                                                                                                        priceSum += t->price;
                                                                                                amountSum += t->amount;
                                                                count++;
                }else{
                    delFlag = 1;//删掉
                }
                t=t->next;
                if(delFlag){
                    delBookByIndex (i--);
                }
                i++;
            }
                        printf("共%d条结果\n",count);                            printf("-----------------------------------------------------------------------------------------------------\n");                                                                                                                                                                                                    printf("【价格】平均:%.2lf\n" ,count!=0?priceSum * 1.0 / count :0);
                                                                                                        printf("【库存】总计:%d 平均:%.2lf\n",amountSum ,count!=0?amountSum * 1.0 / count :0);
                                                                        printf("\n");            }else{
                        printf("\n【无记录!】\n\n");            }
        //如果参数all为1,则表示列出所有就退出
        if(all == 1)break;
        //进入过滤。
                    printf("【筛选器:你可以在以上结果的基础上,进行以下条件筛选:】\n");                        printf("0:退出\n");                                                    printf("1:按 名称 筛选\n");                                                                printf("2:按 序列号 筛选\n");                                                                                    printf("3:按 作者 筛选\n");                                                                                    printf("请输入选择:");                        scanf("%d",&select);
            if(select>0){
            if(0  ||select==1 ||select==2 ||select==3 ){
                            printf("请输入筛选条件:");                                scanf("%s",conCharArr);
                }else if(0 ){
                            printf("请输入筛选范围m,n,用空格隔开(m ≤X ≤n):");                                scanf("%lf",&conNum1);
                scanf("%lf",&conNum2);
                }
        }else{
            break;
        }
    }
    readBook();//从新读取数据。
}
//图书 排序
void sortBook (){
    int select,i,j;
                        printf("1:按 名称 排序\n");                            printf("2:按 序列号 排序\n");                            printf("3:按 出版社 排序\n");                            printf("4:按 作者 排序\n");                            printf("5:按 价格 排序\n");                            printf("6:按 库存 排序\n");                        printf("请输入选择:");                    scanf("%d",&select);
        struct Book *list[100];
    for(i = 0;i< bookCount;i++){
        list[i] = bookList;
        bookList = bookList ->next;
    }
    for( i = bookCount -1;i>0;i--){
        for( j = 0;j < i;j++){
            if(	0
                                                || select == 1 && strcmp(list[j]->name , list[j+1]->name)>0
                                                                || select == 2 && strcmp(list[j]->numb , list[j+1]->numb)>0
                                                                || select == 3 && strcmp(list[j]->publish , list[j+1]->publish)>0
                                                                || select == 4 && strcmp(list[j]->author , list[j+1]->author)>0
                                                                || select == 5 && list[j]->price - list[j+1]->price > 0
                                                                || select == 6 && list[j]->amount - list[j+1]->amount > 0
                                            ){
                struct Book *temp = (struct Book*)malloc(sizeof(struct Book));
                temp = list[j]; //交换位置
                list[j] = list[j+1];
                list[j+1] = temp;
            }

        }
    }
    for(i = 0;i< bookCount -1;i++){
        list[i]->next = list[i+1];
    }
    list[ bookCount -1 ]->next = NULL;
    bookList = list[0];
    findBook (1);
    writeBook ();
}
    //销售记录 读入文件
void readRecord (){
    FILE *fp = NULL;
    if (NULL == (fp = fopen("Record.txt", "r")))//读打开
    {
        //文件不存在,不读取
        return;
    }
    int i=0;
    //从文件读取数据
    recordList = NULL;
    struct Record *tail = recordList;
    while (1)//读取
    {
        //给节点分配空间
        struct Record *p=(struct Record*)malloc(sizeof(struct Record));
        //读取数据到p
        if(fscanf(fp, "%s%d%lf"
             ,p->book  ,&p->amount  ,&p->price 
        ) == EOF)  {
            break;
        }
        p->next=NULL;
        //指针为空则赋值。
        if (recordList  == NULL)
        {
            recordList=p;
            tail=p;
        }
        else {
            tail->next=p;
            tail=p;
        }
        i++;
    }
    //记录总数
    recordCount = i;
    fclose(fp);
}
//销售记录 写入文件
void writeRecord (){
    //打开文件
    FILE *fp = NULL;
    fp = fopen("Record.txt", "w+");
    //定义指针
    struct Record *p = recordList;
    //写入
    while(p){
        fprintf(fp,"%s %d %lf\n"
             ,p->book  ,p->amount  ,p->price );
        p=p->next;
    }
    fclose(fp);
}
//销售记录 添加记录
void addRecord (){
    char selectYNFlag = 'y';
    while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
                    printf("\n");            struct Record *tempValue = (struct Record*)malloc(sizeof(struct Record)); //必须重新分配地址空间。
                                                                     printf("请输入图书 :");                        char book[15];                                 scanf("%s",book);
                                                strcpy(tempValue->book,book);
                                                                                                        struct Book* bookTemp = getOneBook ("name",tempValue->book);
                        if(bookTemp==NULL){//检索不为空
                                        printf("图书不存在!\n");                            break;
                        }
                                                                                                                     printf("请输入数量 :");                        int amount;                                 scanf("%d",&amount);
                                                tempValue->amount = amount ;
                                                                                                                                                                                 printf("请输入价格 :");                        double price;                                 scanf("%lf",&price);
                                                tempValue->price = price ;
                                                                                                                            //TODO

        //加入链表
        tempValue->next = NULL;
        addOneRecord (tempValue);
                    printf("\n是否继续录入?(y/n)");            getchar();
                    scanf("%c",&selectYNFlag);
        }
    writeRecord ( );
                printf("\n*****************************\n");                    printf("录入完成\n");                    printf("*****************************\n");    }
void addOneRecord (struct Record *temp){
    //采用头插法
    if(recordList == NULL){
        recordList = temp;
    }else{
        temp->next = recordList;
        recordList = temp;
    }
    recordCount ++;
}
//销售记录 删除
void delRecord (){
                printf("请输入您要删除的 销售记录 序号(输入-1退出):");        int index;
                scanf("%d",&index);
    
    if(index >= 0){
        int res = delRecordByIndex (index);
        if(res){
                        printf("删除成功!\n\n");                writeRecord ();
        }else{
                        printf("删除失败!\n\n");            }
    }
}
//销售记录 根据下标删除
int delRecordByIndex (int index){
    if(index > recordCount || index < 1){
        return 0;//删除失败 ,数量没那么多
    }
    //开始删除!
    struct Record *p = (struct Record*)malloc(sizeof(struct Record));
    struct Record *q = recordList;
    p->next = recordList;
    if(index == 1){
        recordList = recordList ->next;
    }else{
        int i;
        for(i = 0;i < index-1 ; i++){
            p = p->next;
            q = q->next;
        }
        p->next = q->next;
    }
    recordCount = recordCount - 1;
    return 1;
}
//销售记录 修改
void modRecord (){
                printf("请输入您要修改的销售记录 序号(输入-1退出):");        int indexOfMod = -1,i;
                scanf("%d",&indexOfMod);
        if(indexOfMod > 0 && indexOfMod <= recordCount ){
        //开始修改
        struct Record *temp = recordList ;
        for( i = 0;i < indexOfMod-1;i++){
            temp=temp->next;
        }
                                                                     printf("请输入图书 :");                        char book[15];
                                scanf("%s",book);
    
                                                                                                    if(getOneBook ("name",book)==NULL){//检索不为空
                                    printf("图书 不存在!\n");                            return;
                    }
                                                                                                                     printf("请输入数量 :");                        int amount;
                                scanf("%d",&amount);
    
                                                                                                                                                                                 printf("请输入价格 :");                        double price;
                                scanf("%lf",&price);
    
                                                                                                                            //输入完毕,赋值
                                                     strcpy(temp-> book,book);
                                                                                 temp-> amount = amount ;
                                                                                 temp-> price = price ;
                                                        printf("修改成功!\n");            writeRecord ();
    }else{
                    printf("输入错误!\n");        }
}
//销售记录 查找 如果all=1:查询全部 否则按条件查询
void findRecord (int all){
    int select = 0;
    char conCharArr[40];
    double conNum1,conNum2;
    while(1){
        printf("\n%-5s%-15s%-10s%-12s\n\n","序号" ,"图书","数量","价格" );
        int i=1,count = 0;
        if( recordList ){
            //用于统计信息所用
                                                                            int amountSum=0;
                                                                double priceSum=0;
                                        struct Record *t = recordList;
            while(t){
                int delFlag = 0;
                if(select == 0
                                                                                                                        || select == 1 && strstr(t->book,conCharArr) //根据图书,模糊查询
                                                                                                                                                                                ){
                                                            printf("%-5d%-15s%-10d%-12lf \n\n",i
                                                                    ,t->book
                                                ,t->amount
                                                ,t->price
                                            );
                    //用于统计信息所用
                                                                                                                    amountSum += t->amount;
                                                                                                priceSum += t->price;
                                                                count++;
                }else{
                    delFlag = 1;//删掉
                }
                t=t->next;
                if(delFlag){
                    delRecordByIndex (i--);
                }
                i++;
            }
                        printf("共%d条结果\n",count);                            printf("-----------------------------------------------------------------------------------------------------\n");                                                                                                                printf("【数量】总计:%d \n",amountSum );
                                                                                                        printf("【价格】总计:%lf 平均:%.2lf\n",priceSum ,count!=0?priceSum * 1.0 / count :0);
                                                                        printf("\n");            }else{
                        printf("\n【无记录!】\n\n");            }
        //如果参数all为1,则表示列出所有就退出
        if(all == 1)break;
        //进入过滤。
                    printf("【筛选器:你可以在以上结果的基础上,进行以下条件筛选:】\n");                        printf("0:退出\n");                                                    printf("1:按 图书 筛选\n");                                                                                    printf("请输入选择:");                        scanf("%d",&select);
            if(select>0){
            if(0  ||select==1 ){
                            printf("请输入筛选条件:");                                scanf("%s",conCharArr);
                }else if(0 ){
                            printf("请输入筛选范围m,n,用空格隔开(m ≤X ≤n):");                                scanf("%lf",&conNum1);
                scanf("%lf",&conNum2);
                }
        }else{
            break;
        }
    }
    readRecord();//从新读取数据。
}
//销售记录 排序
void sortRecord (){
    int select,i,j;
                        printf("1:按 图书 排序\n");                            printf("2:按 数量 排序\n");                            printf("3:按 价格 排序\n");                        printf("请输入选择:");                    scanf("%d",&select);
        struct Record *list[100];
    for(i = 0;i< recordCount;i++){
        list[i] = recordList;
        recordList = recordList ->next;
    }
    for( i = recordCount -1;i>0;i--){
        for( j = 0;j < i;j++){
            if(	0
                                                || select == 1 && strcmp(list[j]->book , list[j+1]->book)>0
                                                                || select == 2 && list[j]->amount - list[j+1]->amount > 0
                                                                || select == 3 && list[j]->price - list[j+1]->price > 0
                                            ){
                struct Record *temp = (struct Record*)malloc(sizeof(struct Record));
                temp = list[j]; //交换位置
                list[j] = list[j+1];
                list[j+1] = temp;
            }

        }
    }
    for(i = 0;i< recordCount -1;i++){
        list[i]->next = list[i+1];
    }
    list[ recordCount -1 ]->next = NULL;
    recordList = list[0];
    findRecord (1);
    writeRecord ();
}

                void menu (){
        //菜单
                    printf("*------------------主菜单---------------------*\n");                                                    printf("*-------------1 :添加图书\n");                                                        printf("*-------------2 :删除图书\n");                                                        printf("*-------------3 :修改图书\n");                                                        printf("*-------------4 :查找图书\n");                                printf("*-------------5 :排序图书\n");                                                                printf("*-------------6 :添加销售记录\n");                                                        printf("*-------------7 :删除销售记录\n");                                                        printf("*-------------8 :修改销售记录\n");                                                        printf("*-------------9 :查找销售记录\n");                                printf("*-------------10 :排序销售记录\n");                                            printf("*-------------0:退出\n");                                printf("*---------------------------------------------*\n");                        printf("请输入选择:");        }

链表:C++版本

#include <io.h>
            #include <iostream>
            #include <windows.h>
            using namespace std; 
        

        //定义 图书 链表
    struct Book {
                    char name[15] ; // 名称
                    char numb[18] ; // 序列号
                    char publish[18] ; // 出版社
                    char author[12] ; // 作者
                    double price ; // 价格
                    int amount ; // 库存
                struct Book* next;//链式存储
    };
    struct  Book *bookList;//定义全局 图书 指针
    int bookCount = 0;//图书 个数记录
        //定义 销售记录 链表
    struct Record {
                    char book[15] ; // 图书
                    int amount ; // 数量
                    double price ; // 价格
                struct Record* next;//链式存储
    };
    struct  Record *recordList;//定义全局 销售记录 指针
    int recordCount = 0;//销售记录 个数记录
    
        //图书 读入文件
    void readBook ();
    //图书 写入文件
    void writeBook ();
    //图书 添加记录
    void addBook ();
        void addOneBook (struct Book *book);
        //图书 删除记录
    void delBook ();
    //图书 根据下标删除
    int delBookByIndex (int index);
    //图书 修改记录
    void modBook ();
    //图书 查找记录
    void findBook (int all);
    //图书 排序
    void sortBook ();
    //交换
    void exchangeBook (int i ,int j);
    //存在判断函数
                                    struct Book* getOneBook (const char *name,char *s);
                                    //销售记录 读入文件
    void readRecord ();
    //销售记录 写入文件
    void writeRecord ();
    //销售记录 添加记录
    void addRecord ();
        void addOneRecord (struct Record *record);
        //销售记录 删除记录
    void delRecord ();
    //销售记录 根据下标删除
    int delRecordByIndex (int index);
    //销售记录 修改记录
    void modRecord ();
    //销售记录 查找记录
    void findRecord (int all);
    //销售记录 排序
    void sortRecord ();
    //交换
    void exchangeRecord (int i ,int j);
    //存在判断函数
                    
        //菜单
            void menu();
    
    // 主函数
    int main(){
            //读取数据
                        readBook ();//读取图书
                            readRecord ();//读取销售记录
                while(1){
                        int choice;
                                    menu ();
                cin>>choice;
        switch(choice){
                                        case 1 :
                            addBook ();//添加图书
                break;
                                                    case 2 :
                            findBook (1);//查找图书
                                delBook ();//删除图书
                break;
                                                    case 3 :
                            findBook (1);//查找图书
                                modBook ();//修改图书
                break;
                                                    case 4 :
                            findBook (0);//查找图书
                break;
                            case 5 :
                            sortBook ();//排序图书
                break;
                                                            case 6 :
                            addRecord ();//添加销售记录
                break;
                                                    case 7 :
                            findRecord (1);//查找销售记录
                                delRecord ();//删除销售记录
                break;
                                                    case 8 :
                            findRecord (1);//查找销售记录
                                modRecord ();//修改销售记录
                break;
                                                    case 9 :
                            findRecord (0);//查找销售记录
                break;
                            case 10 :
                            sortRecord ();//排序销售记录
                break;
                                            case 0:
                    cout<<"\n\n\n\t\t\t感谢使用\n\n\n";
            exit(0);
                default :
        getchar();
                    cout<<"\n\n\n\t提示:没有这个选项!请重新输入!\n\n\n\n";
            system("pause");
        break;
    }
                        }
        return 0;
    }


		
            //是否存在判断
        struct Book *getOneBook (const char *name,char *s){
            struct Book *head = bookList;
            while(head){
                                                        if( strcmp(name,"name")==0 && strcmp(s, head->name )==0){
                        return head;
                    }
                                                                            if( strcmp(name,"numb")==0 && strcmp(s, head->numb )==0){
                        return head;
                    }
                                                                                                                                                                                                    head = head->next;
            }
            return NULL;
        }
    //图书 读入文件
void readBook (){
    FILE *fp = NULL;
    if (NULL == (fp = fopen("Book.txt", "r")))//读打开
    {
        //文件不存在,不读取
        return;
    }
    int i=0;
    //从文件读取数据
    bookList = NULL;
    struct Book *tail = bookList;
    while (1)//读取
    {
        //给节点分配空间
        struct Book *p=(struct Book*)malloc(sizeof(struct Book));
        //读取数据到p
        if(fscanf(fp, "%s%s%s%s%lf%d"
             ,p->name  ,p->numb  ,p->publish  ,p->author  ,&p->price  ,&p->amount 
        ) == EOF)  {
            break;
        }
        p->next=NULL;
        //指针为空则赋值。
        if (bookList  == NULL)
        {
            bookList=p;
            tail=p;
        }
        else {
            tail->next=p;
            tail=p;
        }
        i++;
    }
    //记录总数
    bookCount = i;
    fclose(fp);
}
//图书 写入文件
void writeBook (){
    //打开文件
    FILE *fp = NULL;
    fp = fopen("Book.txt", "w+");
    //定义指针
    struct Book *p = bookList;
    //写入
    while(p){
        fprintf(fp,"%s %s %s %s %lf %d\n"
             ,p->name  ,p->numb  ,p->publish  ,p->author  ,p->price  ,p->amount );
        p=p->next;
    }
    fclose(fp);
}
//图书 添加记录
void addBook (){
    char selectYNFlag = 'y';
    while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
                    cout<<"\n";
            struct Book *tempValue = (struct Book*)malloc(sizeof(struct Book)); //必须重新分配地址空间。
                                                                     cout<<"请输入名称 :";
                        char name[15];                                 cin>>name;
                                                strcpy(tempValue->name,name);
                                                                 struct Book* onename = getOneBook ("name",tempValue->name);
                        if(onename !=NULL){//检索不为空
                                        cout<<"名称已存在!\n";
                            break;
                        }
                                                                                                                                                             cout<<"请输入序列号 :";
                        char numb[18];                                 cin>>numb;
                                                strcpy(tempValue->numb,numb);
                                                                 struct Book* onenumb = getOneBook ("numb",tempValue->numb);
                        if(onenumb !=NULL){//检索不为空
                                        cout<<"序列号已存在!\n";
                            break;
                        }
                                                                                                                                                             cout<<"请输入出版社 :";
                        char publish[18];                                 cin>>publish;
                                                strcpy(tempValue->publish,publish);
                                                                                                                                                                                 cout<<"请输入作者 :";
                        char author[12];                                 cin>>author;
                                                strcpy(tempValue->author,author);
                                                                                                                                                                                 cout<<"请输入价格 :";
                        double price;                                 cin>>price;
                                                tempValue->price = price ;
                                                                                                                                                                                 cout<<"请输入库存 :";
                        int amount;                                 cin>>amount;
                                                tempValue->amount = amount ;
                                                                                                                            //TODO

        //加入链表
        tempValue->next = NULL;
        addOneBook (tempValue);
                    cout<<"\n是否继续录入?(y/n)";
            getchar();
                    cin>>selectYNFlag;
        }
    writeBook ( );
                cout<<"\n*****************************\n";
                    cout<<"录入完成\n";
                    cout<<"*****************************\n";
    }
void addOneBook (struct Book *temp){
    //采用头插法
    if(bookList == NULL){
        bookList = temp;
    }else{
        temp->next = bookList;
        bookList = temp;
    }
    bookCount ++;
}
//图书 删除
void delBook (){
                cout<<"请输入您要删除的 图书 序号(输入-1退出):";
        int index;
                cin>>index;
    
    if(index >= 0){
        int res = delBookByIndex (index);
        if(res){
                        cout<<"删除成功!\n\n";
                writeBook ();
        }else{
                        cout<<"删除失败!\n\n";
            }
    }
}
//图书 根据下标删除
int delBookByIndex (int index){
    if(index > bookCount || index < 1){
        return 0;//删除失败 ,数量没那么多
    }
    //开始删除!
    struct Book *p = (struct Book*)malloc(sizeof(struct Book));
    struct Book *q = bookList;
    p->next = bookList;
    if(index == 1){
        bookList = bookList ->next;
    }else{
        int i;
        for(i = 0;i < index-1 ; i++){
            p = p->next;
            q = q->next;
        }
        p->next = q->next;
    }
    bookCount = bookCount - 1;
    return 1;
}
//图书 修改
void modBook (){
                cout<<"请输入您要修改的图书 序号(输入-1退出):";
        int indexOfMod = -1,i;
                cin>>indexOfMod;
        if(indexOfMod > 0 && indexOfMod <= bookCount ){
        //开始修改
        struct Book *temp = bookList ;
        for( i = 0;i < indexOfMod-1;i++){
            temp=temp->next;
        }
                                                                     cout<<"请输入名称 :";
                        char name[15];
                                cin>>name;
    
                                                            if(strcmp(temp->name,name) != 0 && getOneBook ("name",name)!=NULL){//检索不为空
                                    cout<<"名称 已存在!\n";
                            return;
                    }
                                                                                                                                                                                 cout<<"请输入出版社 :";
                        char publish[18];
                                cin>>publish;
    
                                                                                                                                                                                 cout<<"请输入作者 :";
                        char author[12];
                                cin>>author;
    
                                                                                                                                                                                 cout<<"请输入价格 :";
                        double price;
                                cin>>price;
    
                                                                                                                                                                                 cout<<"请输入库存 :";
                        int amount;
                                cin>>amount;
    
                                                                                                                            //输入完毕,赋值
                                                     strcpy(temp-> name,name);
                                                                                                     strcpy(temp-> publish,publish);
                                                                                 strcpy(temp-> author,author);
                                                                                 temp-> price = price ;
                                                                                 temp-> amount = amount ;
                                                        cout<<"修改成功!\n";
            writeBook ();
    }else{
                    cout<<"输入错误!\n";
        }
}
//图书 查找 如果all=1:查询全部 否则按条件查询
void findBook (int all){
    int select = 0;
    char conCharArr[40];
    double conNum1,conNum2;
    while(1){
        printf("\n%-5s%-15s%-18s%-18s%-12s%-12s%-10s\n\n","序号" ,"名称","序列号","出版社","作者","价格","库存" );
        int i=1,count = 0;
        if( bookList ){
            //用于统计信息所用
                                                                                                                                                                double priceSum=0;
                                                                int amountSum=0;
                                        struct Book *t = bookList;
            while(t){
                int delFlag = 0;
                if(select == 0
                                                                                                                        || select == 1 && strstr(t->name,conCharArr) //根据名称,模糊查询
                                                                                                                                                        || select == 2 && strstr(t->numb,conCharArr) //根据序列号,模糊查询
                                                                                                                                                                                                    || select == 3 && strstr(t->author,conCharArr) //根据作者,模糊查询
                                                                                                                                                                                ){
                                                            printf("%-5d%-15s%-18s%-18s%-12s%-12lf%-10d \n\n",i
                                                                    ,t->name
                                                ,t->numb
                                                ,t->publish
                                                ,t->author
                                                ,t->price
                                                ,t->amount
                                            );
                    //用于统计信息所用
                                                                                                                                                                                                                                                        priceSum += t->price;
                                                                                                amountSum += t->amount;
                                                                count++;
                }else{
                    delFlag = 1;//删掉
                }
                t=t->next;
                if(delFlag){
                    delBookByIndex (i--);
                }
                i++;
            }
                        cout<<"共" << count <<"条结果\n";
                            cout<<"-----------------------------------------------------------------------------------------------------\n";
                                                                                                                                                                                                    cout<<"【价格】"  <<"平均:"<<  (count!=0?priceSum*1.0/count:0)<<"\n";
                                                                                                        cout<<"【库存】" << "总计:"<<amountSum<<" "  <<"平均:"<<  (count!=0?amountSum*1.0/count:0)<<"\n";
                                                                        cout<<"\n";
            }else{
                        cout<<"\n【无记录!】\n\n";
            }
        //如果参数all为1,则表示列出所有就退出
        if(all == 1)break;
        //进入过滤。
                    cout<<"【筛选器:你可以在以上结果的基础上,进行以下条件筛选:】\n";
                        cout<<"0:退出\n";
                                                    cout<<"1:按 名称 筛选\n";
                                                                cout<<"2:按 序列号 筛选\n";
                                                                                    cout<<"3:按 作者 筛选\n";
                                                                                    cout<<"请输入选择:";
                        cin>>select;
            if(select>0){
            if(0  ||select==1 ||select==2 ||select==3 ){
                            cout<<"请输入筛选条件:";
                                cin>>conCharArr;
                }else if(0 ){
                            cout<<"请输入筛选范围m,n,用空格隔开(m ≤X ≤n):";
                                cin>>conNum1;
                cin>>conNum2;
                }
        }else{
            break;
        }
    }
    readBook();//从新读取数据。
}
//图书 排序
void sortBook (){
    int select,i,j;
                        cout<<"1:按 名称 排序\n";
                            cout<<"2:按 序列号 排序\n";
                            cout<<"3:按 出版社 排序\n";
                            cout<<"4:按 作者 排序\n";
                            cout<<"5:按 价格 排序\n";
                            cout<<"6:按 库存 排序\n";
                        cout<<"请输入选择:";
                    cin>>select;
        struct Book *list[100];
    for(i = 0;i< bookCount;i++){
        list[i] = bookList;
        bookList = bookList ->next;
    }
    for( i = bookCount -1;i>0;i--){
        for( j = 0;j < i;j++){
            if(	0
                                                || select == 1 && strcmp(list[j]->name , list[j+1]->name)>0
                                                                || select == 2 && strcmp(list[j]->numb , list[j+1]->numb)>0
                                                                || select == 3 && strcmp(list[j]->publish , list[j+1]->publish)>0
                                                                || select == 4 && strcmp(list[j]->author , list[j+1]->author)>0
                                                                || select == 5 && list[j]->price - list[j+1]->price > 0
                                                                || select == 6 && list[j]->amount - list[j+1]->amount > 0
                                            ){
                struct Book *temp = (struct Book*)malloc(sizeof(struct Book));
                temp = list[j]; //交换位置
                list[j] = list[j+1];
                list[j+1] = temp;
            }

        }
    }
    for(i = 0;i< bookCount -1;i++){
        list[i]->next = list[i+1];
    }
    list[ bookCount -1 ]->next = NULL;
    bookList = list[0];
    findBook (1);
    writeBook ();
}
    //销售记录 读入文件
void readRecord (){
    FILE *fp = NULL;
    if (NULL == (fp = fopen("Record.txt", "r")))//读打开
    {
        //文件不存在,不读取
        return;
    }
    int i=0;
    //从文件读取数据
    recordList = NULL;
    struct Record *tail = recordList;
    while (1)//读取
    {
        //给节点分配空间
        struct Record *p=(struct Record*)malloc(sizeof(struct Record));
        //读取数据到p
        if(fscanf(fp, "%s%d%lf"
             ,p->book  ,&p->amount  ,&p->price 
        ) == EOF)  {
            break;
        }
        p->next=NULL;
        //指针为空则赋值。
        if (recordList  == NULL)
        {
            recordList=p;
            tail=p;
        }
        else {
            tail->next=p;
            tail=p;
        }
        i++;
    }
    //记录总数
    recordCount = i;
    fclose(fp);
}
//销售记录 写入文件
void writeRecord (){
    //打开文件
    FILE *fp = NULL;
    fp = fopen("Record.txt", "w+");
    //定义指针
    struct Record *p = recordList;
    //写入
    while(p){
        fprintf(fp,"%s %d %lf\n"
             ,p->book  ,p->amount  ,p->price );
        p=p->next;
    }
    fclose(fp);
}
//销售记录 添加记录
void addRecord (){
    char selectYNFlag = 'y';
    while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
                    cout<<"\n";
            struct Record *tempValue = (struct Record*)malloc(sizeof(struct Record)); //必须重新分配地址空间。
                                                                     cout<<"请输入图书 :";
                        char book[15];                                 cin>>book;
                                                strcpy(tempValue->book,book);
                                                                                                        struct Book* bookTemp = getOneBook ("name",tempValue->book);
                        if(bookTemp==NULL){//检索不为空
                                        cout<<"图书不存在!\n";
                            break;
                        }
                                                                                                                     cout<<"请输入数量 :";
                        int amount;                                 cin>>amount;
                                                tempValue->amount = amount ;
                                                                                                                                                                                 cout<<"请输入价格 :";
                        double price;                                 cin>>price;
                                                tempValue->price = price ;
                                                                                                                            //TODO

        //加入链表
        tempValue->next = NULL;
        addOneRecord (tempValue);
                    cout<<"\n是否继续录入?(y/n)";
            getchar();
                    cin>>selectYNFlag;
        }
    writeRecord ( );
                cout<<"\n*****************************\n";
                    cout<<"录入完成\n";
                    cout<<"*****************************\n";
    }
void addOneRecord (struct Record *temp){
    //采用头插法
    if(recordList == NULL){
        recordList = temp;
    }else{
        temp->next = recordList;
        recordList = temp;
    }
    recordCount ++;
}
//销售记录 删除
void delRecord (){
                cout<<"请输入您要删除的 销售记录 序号(输入-1退出):";
        int index;
                cin>>index;
    
    if(index >= 0){
        int res = delRecordByIndex (index);
        if(res){
                        cout<<"删除成功!\n\n";
                writeRecord ();
        }else{
                        cout<<"删除失败!\n\n";
            }
    }
}
//销售记录 根据下标删除
int delRecordByIndex (int index){
    if(index > recordCount || index < 1){
        return 0;//删除失败 ,数量没那么多
    }
    //开始删除!
    struct Record *p = (struct Record*)malloc(sizeof(struct Record));
    struct Record *q = recordList;
    p->next = recordList;
    if(index == 1){
        recordList = recordList ->next;
    }else{
        int i;
        for(i = 0;i < index-1 ; i++){
            p = p->next;
            q = q->next;
        }
        p->next = q->next;
    }
    recordCount = recordCount - 1;
    return 1;
}
//销售记录 修改
void modRecord (){
                cout<<"请输入您要修改的销售记录 序号(输入-1退出):";
        int indexOfMod = -1,i;
                cin>>indexOfMod;
        if(indexOfMod > 0 && indexOfMod <= recordCount ){
        //开始修改
        struct Record *temp = recordList ;
        for( i = 0;i < indexOfMod-1;i++){
            temp=temp->next;
        }
                                                                     cout<<"请输入图书 :";
                        char book[15];
                                cin>>book;
    
                                                                                                    if(getOneBook ("name",book)==NULL){//检索不为空
                                    cout<<"图书 不存在!\n";
                            return;
                    }
                                                                                                                     cout<<"请输入数量 :";
                        int amount;
                                cin>>amount;
    
                                                                                                                                                                                 cout<<"请输入价格 :";
                        double price;
                                cin>>price;
    
                                                                                                                            //输入完毕,赋值
                                                     strcpy(temp-> book,book);
                                                                                 temp-> amount = amount ;
                                                                                 temp-> price = price ;
                                                        cout<<"修改成功!\n";
            writeRecord ();
    }else{
                    cout<<"输入错误!\n";
        }
}
//销售记录 查找 如果all=1:查询全部 否则按条件查询
void findRecord (int all){
    int select = 0;
    char conCharArr[40];
    double conNum1,conNum2;
    while(1){
        printf("\n%-5s%-15s%-10s%-12s\n\n","序号" ,"图书","数量","价格" );
        int i=1,count = 0;
        if( recordList ){
            //用于统计信息所用
                                                                            int amountSum=0;
                                                                double priceSum=0;
                                        struct Record *t = recordList;
            while(t){
                int delFlag = 0;
                if(select == 0
                                                                                                                        || select == 1 && strstr(t->book,conCharArr) //根据图书,模糊查询
                                                                                                                                                                                ){
                                                            printf("%-5d%-15s%-10d%-12lf \n\n",i
                                                                    ,t->book
                                                ,t->amount
                                                ,t->price
                                            );
                    //用于统计信息所用
                                                                                                                    amountSum += t->amount;
                                                                                                priceSum += t->price;
                                                                count++;
                }else{
                    delFlag = 1;//删掉
                }
                t=t->next;
                if(delFlag){
                    delRecordByIndex (i--);
                }
                i++;
            }
                        cout<<"共" << count <<"条结果\n";
                            cout<<"-----------------------------------------------------------------------------------------------------\n";
                                                                                                                cout<<"【数量】" << "总计:"<<amountSum<<" " <<"\n";
                                                                                                        cout<<"【价格】" << "总计:"<<priceSum<<" "  <<"平均:"<<  (count!=0?priceSum*1.0/count:0)<<"\n";
                                                                        cout<<"\n";
            }else{
                        cout<<"\n【无记录!】\n\n";
            }
        //如果参数all为1,则表示列出所有就退出
        if(all == 1)break;
        //进入过滤。
                    cout<<"【筛选器:你可以在以上结果的基础上,进行以下条件筛选:】\n";
                        cout<<"0:退出\n";
                                                    cout<<"1:按 图书 筛选\n";
                                                                                    cout<<"请输入选择:";
                        cin>>select;
            if(select>0){
            if(0  ||select==1 ){
                            cout<<"请输入筛选条件:";
                                cin>>conCharArr;
                }else if(0 ){
                            cout<<"请输入筛选范围m,n,用空格隔开(m ≤X ≤n):";
                                cin>>conNum1;
                cin>>conNum2;
                }
        }else{
            break;
        }
    }
    readRecord();//从新读取数据。
}
//销售记录 排序
void sortRecord (){
    int select,i,j;
                        cout<<"1:按 图书 排序\n";
                            cout<<"2:按 数量 排序\n";
                            cout<<"3:按 价格 排序\n";
                        cout<<"请输入选择:";
                    cin>>select;
        struct Record *list[100];
    for(i = 0;i< recordCount;i++){
        list[i] = recordList;
        recordList = recordList ->next;
    }
    for( i = recordCount -1;i>0;i--){
        for( j = 0;j < i;j++){
            if(	0
                                                || select == 1 && strcmp(list[j]->book , list[j+1]->book)>0
                                                                || select == 2 && list[j]->amount - list[j+1]->amount > 0
                                                                || select == 3 && list[j]->price - list[j+1]->price > 0
                                            ){
                struct Record *temp = (struct Record*)malloc(sizeof(struct Record));
                temp = list[j]; //交换位置
                list[j] = list[j+1];
                list[j+1] = temp;
            }

        }
    }
    for(i = 0;i< recordCount -1;i++){
        list[i]->next = list[i+1];
    }
    list[ recordCount -1 ]->next = NULL;
    recordList = list[0];
    findRecord (1);
    writeRecord ();
}

                void menu (){
        //菜单
                    cout<<"*------------------主菜单---------------------*\n";
                                                    cout<<"*-------------1 :添加图书\n";
                                                        cout<<"*-------------2 :删除图书\n";
                                                        cout<<"*-------------3 :修改图书\n";
                                                        cout<<"*-------------4 :查找图书\n";
                                cout<<"*-------------5 :排序图书\n";
                                                                cout<<"*-------------6 :添加销售记录\n";
                                                        cout<<"*-------------7 :删除销售记录\n";
                                                        cout<<"*-------------8 :修改销售记录\n";
                                                        cout<<"*-------------9 :查找销售记录\n";
                                cout<<"*-------------10 :排序销售记录\n";
                                            cout<<"*-------------0:退出\n";
                                cout<<"*---------------------------------------------*\n";
                        cout<<"请输入选择:";
        }

C++面向对象

#include <iostream>
            #include  <vector>
            #include <fstream>
            #include <string.h>
            using namespace std; 
    

int compare(int a,int b);
int compare(const char *a,const char *b);


class Book  //定义 图书 类
{
public:
    static vector< Book*> dataList;
            char name[15] ; // 名称
            char numb[18] ; // 序列号
            char publish[18] ; // 出版社
            char author[12] ; // 作者
            double price ; // 价格
            int amount ; // 库存
        static void read();//读文件
    static void write();//写文件
    static void add();//添加
    static void del();//删除
    static void mod();//修改
    static void find(int all);//查找
    static void sort();//排序
        static Book* getOne(string name, string s);//存在判断函数
        };
vector< Book*> Book::dataList;//必须类外初始化,用于存储图书
class Record  //定义 销售记录 类
{
public:
    static vector< Record*> dataList;
            char book[15] ; // 图书
            int amount ; // 数量
            double price ; // 价格
        static void read();//读文件
    static void write();//写文件
    static void add();//添加
    static void del();//删除
    static void mod();//修改
    static void find(int all);//查找
    static void sort();//排序
        };
vector< Record*> Record::dataList;//必须类外初始化,用于存储销售记录

//定义菜单
void menu();

    // 主函数
    int main(){
            //读取数据
                        Book::read ();//读取图书
                            Record::read ();//读取销售记录
                while(1){
                        int choice;
                                    menu ();
                cin>>choice;
        switch(choice){
                                        case 1 :
                            Book::add ();//添加图书
                break;
                                                    case 2 :
                            Book::find (1);//查找图书
                                Book::del ();//删除图书
                break;
                                                    case 3 :
                            Book::find (1);//查找图书
                                Book::mod ();//修改图书
                break;
                                                    case 4 :
                            Book::find (0);//查找图书
                break;
                            case 5 :
                            Book::sort ();//排序图书
                break;
                                                            case 6 :
                            Record::add ();//添加销售记录
                break;
                                                    case 7 :
                            Record::find (1);//查找销售记录
                                Record::del ();//删除销售记录
                break;
                                                    case 8 :
                            Record::find (1);//查找销售记录
                                Record::mod ();//修改销售记录
                break;
                                                    case 9 :
                            Record::find (0);//查找销售记录
                break;
                            case 10 :
                            Record::sort ();//排序销售记录
                break;
                                            case 0:
                    cout<<"\n\n\n\t\t\t感谢使用\n\n\n";
            exit(0);
                default :
        getchar();
                    cout<<"\n\n\n\t提示:没有这个选项!请重新输入!\n\n\n\n";
            system("pause");
        break;
    }
                        }
        return 0;
    }


		
//是否存在判断
Book* Book::getOne(string name, string s) {
    for (int i = 0; i < dataList.size();i++) {
                                if( strcmp(name.c_str(),"name")==0 && strcmp(s.c_str(), dataList[i]->name )==0){
                return dataList[i];
            }
                                            if( strcmp(name.c_str(),"numb")==0 && strcmp(s.c_str(), dataList[i]->numb )==0){
                return dataList[i];
            }
                                                                                                        }
    return NULL;
}
//读取文件内的图书
void Book::read() {
    FILE *fp = NULL;
    if (NULL == (fp = fopen("Book.txt", "r")))//读打开
    {
        //文件不存在,不读取
        return;
    }
    //从文件读取数据
    dataList.clear();
    while (1)//读取
    {
        //新建图书对象
        Book *t = new Book;
        //读取数据到p
        if(fscanf(fp, "%s%s%s%s%lf%d"
             ,t->name  ,t->numb  ,t->publish  ,t->author  ,&t->price  ,&t->amount 
        ) == EOF)  {
            break;
        }
        dataList.push_back(t);//将内容加入vector
    }
    fclose(fp);
}
//图书 写入文件
void Book::write() {
    //打开文件
    FILE *fp = NULL;
    fp = fopen("Book.txt", "w+");
    //写入
    for (int i = 0; i < dataList.size(); i++) {
        Book *t = dataList.at(i);
        fprintf(fp,"%s %s %s %s %lf %d\n"
             ,t->name  ,t->numb  ,t->publish  ,t->author  ,t->price  ,t->amount );
    }
    fclose(fp);
}
//图书 添加记录
void Book::add() {
    char selectYNFlag = 'y';
    while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
        cout<<"\n";
        Book *tempValue = new Book (); //必须重新分配地址空间。
                                                         cout<<"请输入名称 :";
                    char name[15];                     cin>>name ;
                                            strcpy(tempValue->name,name);
                                                                 Book* onename = getOne("name",tempValue->name);
                        if(onename!=NULL){//检索不为空
                        cout<<("名称已存在!\n");
                        break;
                    }
                                                                                                                             cout<<"请输入序列号 :";
                    char numb[18];                     cin>>numb ;
                                            strcpy(tempValue->numb,numb);
                                                                 Book* onenumb = getOne("numb",tempValue->numb);
                        if(onenumb!=NULL){//检索不为空
                        cout<<("序列号已存在!\n");
                        break;
                    }
                                                                                                                             cout<<"请输入出版社 :";
                    char publish[18];                     cin>>publish ;
                                            strcpy(tempValue->publish,publish);
                                                                                                                                                 cout<<"请输入作者 :";
                    char author[12];                     cin>>author ;
                                            strcpy(tempValue->author,author);
                                                                                                                                                 cout<<"请输入价格 :";
                    double price;                     cin>>price ;
                                            tempValue->price = price ;
                                                                                                                                                 cout<<"请输入库存 :";
                    int amount;                     cin>>amount ;
                                            tempValue->amount = amount ;
                                                                                                        //TODO,

        //加入记录
        dataList.push_back(tempValue);
        cout<<"\n是否继续录入?(y/n)";
        getchar();
        cin>>selectYNFlag;
    }
    //写入文件
    write();
    cout<<"\n*****************************\n";
    cout<<"录入结束\n";
    cout<<"*****************************\n";
}
//图书 删除
void Book::del() {
    cout<<"请输入您要删除的 图书 序号(输入-1退出):";
    char c;
    cin >> c;
    int index = c - '0';
    if (index >= 0 && index < dataList.size()) {
        dataList.erase(dataList.begin()+index);
        write();
        cout << "删除成功!\n\n";
    }
    else if(index>0){
        cout << "请输入正确序号!\n\n";
    }
}

//图书 修改
void Book::mod() {
    cout<<"请输入您要修改的图书 序号(输入-1退出):";
    char c;
    cin >> c;
    int indexOfMod = c - '0';
    if(indexOfMod >= 0 && indexOfMod < dataList.size() ){
        //开始修改
        Book *temp = dataList.at(indexOfMod);
                                                         cout<<"请输入名称 :";
                    char name[15];
                    cin>> name ;
                                                            if(compare(temp->name,name) != 0 && getOne("name",name)!=NULL){//检索不为空
                        cout<<("名称 已存在!\n");
                        return;
                    }
                                                                                                                                                                     cout<<"请输入出版社 :";
                    char publish[18];
                    cin>> publish ;
                                                                                                                                                                     cout<<"请输入作者 :";
                    char author[12];
                    cin>> author ;
                                                                                                                                                                     cout<<"请输入价格 :";
                    double price;
                    cin>> price ;
                                                                                                                                                                     cout<<"请输入库存 :";
                    int amount;
                    cin>> amount ;
                                                                                                                            //输入完毕,赋值
                                                     strcpy(temp-> name,name);
                                                                                                     strcpy(temp-> publish,publish);
                                                                                 strcpy(temp-> author,author);
                                                                                 temp-> price = price ;
                                                                                 temp-> amount = amount ;
                                            cout<<"修改成功!\n";
        write();
    }else{
        cout<<"输入错误!\n";
    }
}
//图书 查找 如果all=1:查询全部 否则按条件查询
void Book :: find(int all){
    int select = 0;
    char conCharArr[40];
    double conNum1,conNum2;
    //复制一个容器dataList2,查询的操作再dataList2里面进行
    vector<Book*> dataList2 = dataList;
    while(1){
        printf("\n%-5s%-15s%-18s%-18s%-12s%-12s%-10s\n\n","序号" ,"名称","序列号","出版社","作者","价格","库存" );
        int count = 0;
        //用于统计信息所用
                                                                                                                    double priceSum=0;
                                                int amountSum=0;
                            for(int i = 0;i < dataList2.size();i++){
            Book* t = dataList2.at(i);
            if(select == 0
                                                                                                    || select == 1 && strstr(t->name,conCharArr) //根据名称,模糊查询
                                                                                                                                || select == 2 && strstr(t->numb,conCharArr) //根据序列号,模糊查询
                                                                                                                                                                    || select == 3 && strstr(t->author,conCharArr) //根据作者,模糊查询
                                                                                                                                                ){
                                            printf("%-5d%-15s%-18s%-18s%-12s%-12lf%-10d \n\n",i
                                                        ,t->name
                                        ,t->numb
                                        ,t->publish
                                        ,t->author
                                        ,t->price
                                        ,t->amount
                                    );
                //用于统计信息所用
                                                                                                                                                                                                            priceSum += t->price;
                                                                                amountSum += t->amount;
                                                    count++;
            }else {
                dataList2.erase(dataList2.begin()+i);
                i--;
            }
        }
        cout<<"共"<< count <<"条结果\n";
        cout<<("-----------------------------------------------------------------------------------------------------\n");
                                                                                                                            cout<<"【价格】"  <<"平均:"<<  (count!=0?priceSum*1.0/count:0)<<"\n";
                                                cout<<"【库存】" << "总计:"<<amountSum<<" "  <<"平均:"<<  (count!=0?amountSum*1.0/count:0)<<"\n";
                            cout<<"\n";
        //如果参数all为1,则表示列出所有就退出
        if(all == 1)break;
        //进入过滤。
                    cout<<"【筛选器:你可以在以上结果的基础上,进行以下条件筛选】\n";
                        cout<<"0:退出\n";
                                                    cout<<"1:按 名称 筛选\n";
                                                                cout<<"2:按 序列号 筛选\n";
                                                                                    cout<<"3:按 作者 筛选\n";
                                                                                    cout<<"请输入选择:";
                        cin>>select;
            if(select>0){
            if(0  ||select==1 ||select==2 ||select==3 ){
                            cout<<"请输入筛选条件:";
                                cin>>conCharArr;
                }else if(0 ){
                            cout<<"请输入筛选范围m,n,用空格隔开(m ≤X ≤n):";
                                cin>>conNum1;
                cin>>conNum2;
                }
        }else{
            break;
        }
    }
}
//图书 排序
void Book::sort(){
    int select,i,j;
            cout<<"1:按 名称 排序\n";
            cout<<"2:按 序列号 排序\n";
            cout<<"3:按 出版社 排序\n";
            cout<<"4:按 作者 排序\n";
            cout<<"5:按 价格 排序\n";
            cout<<"6:按 库存 排序\n";
        cout<<"请输入选择:";
    cin>>select;
    for (i = dataList.size() - 1; i > 0; i--) {
        for( j = 0;j < i;j++){
            if(	0
                                || select == 1 && compare(dataList[j]->name , dataList[j+1]->name )>0
                                || select == 2 && compare(dataList[j]->numb , dataList[j+1]->numb )>0
                                || select == 3 && compare(dataList[j]->publish , dataList[j+1]->publish )>0
                                || select == 4 && compare(dataList[j]->author , dataList[j+1]->author )>0
                                || select == 5 && compare(dataList[j]->price , dataList[j+1]->price )>0
                                || select == 6 && compare(dataList[j]->amount , dataList[j+1]->amount )>0
                            ){
                swap(dataList[j], dataList[j + 1]);
            }
        }
    }
    find(1);//排序后打印
    write();
}
//读取文件内的销售记录
void Record::read() {
    FILE *fp = NULL;
    if (NULL == (fp = fopen("Record.txt", "r")))//读打开
    {
        //文件不存在,不读取
        return;
    }
    //从文件读取数据
    dataList.clear();
    while (1)//读取
    {
        //新建销售记录对象
        Record *t = new Record;
        //读取数据到p
        if(fscanf(fp, "%s%d%lf"
             ,t->book  ,&t->amount  ,&t->price 
        ) == EOF)  {
            break;
        }
        dataList.push_back(t);//将内容加入vector
    }
    fclose(fp);
}
//销售记录 写入文件
void Record::write() {
    //打开文件
    FILE *fp = NULL;
    fp = fopen("Record.txt", "w+");
    //写入
    for (int i = 0; i < dataList.size(); i++) {
        Record *t = dataList.at(i);
        fprintf(fp,"%s %d %lf\n"
             ,t->book  ,t->amount  ,t->price );
    }
    fclose(fp);
}
//销售记录 添加记录
void Record::add() {
    char selectYNFlag = 'y';
    while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
        cout<<"\n";
        Record *tempValue = new Record (); //必须重新分配地址空间。
                                                         cout<<"请输入图书 :";
                    char book[15];                     cin>>book ;
                                            strcpy(tempValue->book,book);
                                                                                    Book* bookTemp = Book :: getOne("name",tempValue->book);
                        if(bookTemp==NULL){//检索不为空
                        cout<<("图书不存在!\n");
                        break;
                        }
                                                                                                         cout<<"请输入数量 :";
                    int amount;                     cin>>amount ;
                                            tempValue->amount = amount ;
                                                                                                                                                 cout<<"请输入价格 :";
                    double price;                     cin>>price ;
                                            tempValue->price = price ;
                                                                                                        //TODO,

        //加入记录
        dataList.push_back(tempValue);
        cout<<"\n是否继续录入?(y/n)";
        getchar();
        cin>>selectYNFlag;
    }
    //写入文件
    write();
    cout<<"\n*****************************\n";
    cout<<"录入结束\n";
    cout<<"*****************************\n";
}
//销售记录 删除
void Record::del() {
    cout<<"请输入您要删除的 销售记录 序号(输入-1退出):";
    char c;
    cin >> c;
    int index = c - '0';
    if (index >= 0 && index < dataList.size()) {
        dataList.erase(dataList.begin()+index);
        write();
        cout << "删除成功!\n\n";
    }
    else if(index>0){
        cout << "请输入正确序号!\n\n";
    }
}

//销售记录 修改
void Record::mod() {
    cout<<"请输入您要修改的销售记录 序号(输入-1退出):";
    char c;
    cin >> c;
    int indexOfMod = c - '0';
    if(indexOfMod >= 0 && indexOfMod < dataList.size() ){
        //开始修改
        Record *temp = dataList.at(indexOfMod);
                                                         cout<<"请输入图书 :";
                    char book[15];
                    cin>> book ;
                                                                                                    if(Book :: getOne("name",book)==NULL){//检索不为空
                        cout<<("图书 不存在!\n");
                        return;
                    }
                                                                                                         cout<<"请输入数量 :";
                    int amount;
                    cin>> amount ;
                                                                                                                                                                     cout<<"请输入价格 :";
                    double price;
                    cin>> price ;
                                                                                                                            //输入完毕,赋值
                                                     strcpy(temp-> book,book);
                                                                                 temp-> amount = amount ;
                                                                                 temp-> price = price ;
                                            cout<<"修改成功!\n";
        write();
    }else{
        cout<<"输入错误!\n";
    }
}
//销售记录 查找 如果all=1:查询全部 否则按条件查询
void Record :: find(int all){
    int select = 0;
    char conCharArr[40];
    double conNum1,conNum2;
    //复制一个容器dataList2,查询的操作再dataList2里面进行
    vector<Record*> dataList2 = dataList;
    while(1){
        printf("\n%-5s%-15s%-10s%-12s\n\n","序号" ,"图书","数量","价格" );
        int count = 0;
        //用于统计信息所用
                                                        int amountSum=0;
                                                double priceSum=0;
                            for(int i = 0;i < dataList2.size();i++){
            Record* t = dataList2.at(i);
            if(select == 0
                                                                                                    || select == 1 && strstr(t->book,conCharArr) //根据图书,模糊查询
                                                                                                                                                ){
                                            printf("%-5d%-15s%-10d%-12lf \n\n",i
                                                        ,t->book
                                        ,t->amount
                                        ,t->price
                                    );
                //用于统计信息所用
                                                                                                amountSum += t->amount;
                                                                                priceSum += t->price;
                                                    count++;
            }else {
                dataList2.erase(dataList2.begin()+i);
                i--;
            }
        }
        cout<<"共"<< count <<"条结果\n";
        cout<<("-----------------------------------------------------------------------------------------------------\n");
                                                                cout<<"【数量】" << "总计:"<<amountSum<<" " <<"\n";
                                                cout<<"【价格】" << "总计:"<<priceSum<<" "  <<"平均:"<<  (count!=0?priceSum*1.0/count:0)<<"\n";
                            cout<<"\n";
        //如果参数all为1,则表示列出所有就退出
        if(all == 1)break;
        //进入过滤。
                    cout<<"【筛选器:你可以在以上结果的基础上,进行以下条件筛选】\n";
                        cout<<"0:退出\n";
                                                    cout<<"1:按 图书 筛选\n";
                                                                                    cout<<"请输入选择:";
                        cin>>select;
            if(select>0){
            if(0  ||select==1 ){
                            cout<<"请输入筛选条件:";
                                cin>>conCharArr;
                }else if(0 ){
                            cout<<"请输入筛选范围m,n,用空格隔开(m ≤X ≤n):";
                                cin>>conNum1;
                cin>>conNum2;
                }
        }else{
            break;
        }
    }
}
//销售记录 排序
void Record::sort(){
    int select,i,j;
            cout<<"1:按 图书 排序\n";
            cout<<"2:按 数量 排序\n";
            cout<<"3:按 价格 排序\n";
        cout<<"请输入选择:";
    cin>>select;
    for (i = dataList.size() - 1; i > 0; i--) {
        for( j = 0;j < i;j++){
            if(	0
                                || select == 1 && compare(dataList[j]->book , dataList[j+1]->book )>0
                                || select == 2 && compare(dataList[j]->amount , dataList[j+1]->amount )>0
                                || select == 3 && compare(dataList[j]->price , dataList[j+1]->price )>0
                            ){
                swap(dataList[j], dataList[j + 1]);
            }
        }
    }
    find(1);//排序后打印
    write();
}

                void menu (){
        //菜单
                    cout<<"*------------------主菜单---------------------*\n";
                                                    cout<<"*-------------1 :添加图书\n";
                                                        cout<<"*-------------2 :删除图书\n";
                                                        cout<<"*-------------3 :修改图书\n";
                                                        cout<<"*-------------4 :查找图书\n";
                                cout<<"*-------------5 :排序图书\n";
                                                                cout<<"*-------------6 :添加销售记录\n";
                                                        cout<<"*-------------7 :删除销售记录\n";
                                                        cout<<"*-------------8 :修改销售记录\n";
                                                        cout<<"*-------------9 :查找销售记录\n";
                                cout<<"*-------------10 :排序销售记录\n";
                                            cout<<"*-------------0:退出\n";
                                cout<<"*---------------------------------------------*\n";
                        cout<<"请输入选择:";
        }
    
//对比函数
int compare(int a,int b){
	return a-b;
}
int compare(const char *a,const char *b){
	return strcmp(a,b);
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/2301_76817904/article/details/131159252

智能推荐

python编码问题之encode、decode、codecs模块_python中encode在什么模块-程序员宅基地

文章浏览阅读2.1k次。原文链接先说说编解码问题编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。 Eg:str1.decode('gb2312') #将gb2312编码的字符串转换成unicode编码str2.encode('gb2312') #将unicode编码..._python中encode在什么模块

Java数据流-程序员宅基地

文章浏览阅读949次,点赞21次,收藏15次。本文介绍了Java中的数据输入流(DataInputStream)和数据输出流(DataOutputStream)的使用方法。

ie浏览器无法兼容的问题汇总_ie 浏览器 newdate-程序员宅基地

文章浏览阅读111次。ie无法兼容_ie 浏览器 newdate

想用K8s,还得先会Docker吗?其实完全没必要-程序员宅基地

文章浏览阅读239次。这篇文章把 Docker 和 K8s 的关系给大家做了一个解答,希望还在迟疑自己现有的知识储备能不能直接学 K8s 的,赶紧行动起来,K8s 是典型的入门有点难,后面越用越香。

ADI中文手册获取方法_adi 如何查看数据手册-程序员宅基地

文章浏览阅读561次。ADI中文手册获取方法_adi 如何查看数据手册

React 分页-程序员宅基地

文章浏览阅读1k次,点赞4次,收藏3次。React 获取接口数据实现分页效果以拼多多接口为例实现思路加载前 加载动画加载后 判断有内容的时候 无内容的时候用到的知识点1、动画效果(用在加载前,加载之后就隐藏或关闭,用开关效果即可)2、axios请求3、map渲染页面4、分页插件(antd)代码实现import React, { Component } from 'react';//引入axiosimport axios from 'axios';//引入antd插件import { Pagination }_react 分页

随便推点

关于使用CryPtopp库进行RSA签名与验签的一些说明_cryptopp 签名-程序员宅基地

文章浏览阅读449次,点赞9次,收藏7次。这个变量与验签过程中的SignatureVerificationFilter::PUT_MESSAGE这个宏是对应的,SignatureVerificationFilter::PUT_MESSAGE,如果在签名过程中putMessage设置为true,则在验签过程中需要添加SignatureVerificationFilter::PUT_MESSAGE。项目中使用到了CryPtopp库进行RSA签名与验签,但是在使用过程中反复提示无效的数字签名。否则就会出现文章开头出现的数字签名无效。_cryptopp 签名

新闻稿的写作格式_新闻稿时间应该放在什么位置-程序员宅基地

文章浏览阅读848次。新闻稿是新闻从业者经常使用的一种文体,它的格式与内容都有着一定的规范。本文将从新闻稿的格式和范文两个方面进行介绍,以帮助读者更好地了解新闻稿的写作_新闻稿时间应该放在什么位置

Java中的转换器设计模式_java转换器模式-程序员宅基地

文章浏览阅读1.7k次。Java中的转换器设计模式 在这篇文章中,我们将讨论 Java / J2EE项目中最常用的 Converter Design Pattern。由于Java8 功能不仅提供了相应类型之间的通用双向转换方式,而且还提供了转换相同类型对象集合的常用方法,从而将样板代码减少到绝对最小值。我们使用Java8 功能编写了..._java转换器模式

应用k8s入门-程序员宅基地

文章浏览阅读150次。1,kubectl run创建pods[root@master ~]# kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1[root@master ~]# kubectl get podsNAME READY STATUS REST...

PAT菜鸡进化史_乙级_1003_1003 pat乙级 最优-程序员宅基地

文章浏览阅读128次。PAT菜鸡进化史_乙级_1003“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得到“答案正确”的条件是: 1. 字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符; 2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或..._1003 pat乙级 最优

CH340与Android串口通信_340串口小板 安卓给安卓发指令-程序员宅基地

文章浏览阅读5.6k次。CH340与Android串口通信为何要将CH340的ATD+Eclipse上的安卓工程移植到AndroidStudio移植的具体步骤CH340串口通信驱动函数通信过程中重难点还存在的问题为何要将CH340的ATD+Eclipse上的安卓工程移植到AndroidStudio为了在这个工程基础上进行改动,验证串口的数据和配置串口的参数,我首先在Eclipse上配置了安卓开发环境,注意在配置环境是..._340串口小板 安卓给安卓发指令