IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> kechengsheji -> 正文阅读

[C++知识库]kechengsheji

//200601128 计算机21-3 李买瑞 个人书籍信息管理系统 
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring> 
using namespace std;

//定义枚举书籍类别
enum Type{
	professial=0,
	reference,
	report,
	novel,
	others
}; 
//定义单一书籍信息结构体 
struct Book{
	char num[10];
	char Title[10];
	char Name[10];
	char pbler[10];
	enum Type type; 
};
//定义节点 
typedef struct _node{
	struct Book Data;
	struct _node *next;
}Node;
//录入书籍信息
void AddData(Node *data){
	Node *last,*p;
	last = data;
	//last 指向最后一个节点 
	while( last->next != NULL ){
		last = last->next;
	}
	
	char n[10];
	while( 1 ){
		
		printf("----按0退出录入\n");
		printf("请输入书籍序号:\n");
		scanf("%s",n);
		
		if( strcmp(n,"0") == 0 ){
			break;
		} 
		
		//查重 
		Node *q;
		for( q = data->next; q; q = q->next ){
			if( strcmp(q->Data.num,n) == 0){
				printf("输入序号重复!\n");
		 		return; 
			}
		}
		
		p = (Node *)malloc(sizeof(Node));
		strcpy(p->Data.num,n);
		 
		printf("请输入书名:\n");
		scanf("%s",&p->Data.Title);
		printf("请输入作者:\n");
		scanf("%s",&p->Data.Name);
		printf("请输入出版社:\n");
		scanf("%s",&p->Data.pbler);
		printf("请输入类别:0.专业书;1.工具书;2.报告;3.小说;4.其他;\n");
		enum Type t;
		scanf("%d",&t);
		while( t != 0&& t != 1&& t != 2&& t != 3&& t != 4){
			printf("请输入正确序号!\n");
			scanf("%d",&t);
		}
		p->Data.type = t;
		printf("已经完成一个记录的添加!\n"); 
		
		p->next = NULL;
		last->next = p;
		last = p;
		
	}
	
	
}
//保存书籍信息 
void save(Node *data){
	int n;
	Node *p = NULL;
	FILE *fp;
	
	printf("是否保存到文档?\n----0.不保存\n----1.保存\n");
	scanf("%d",&n);
	if( n == 1){
		if( data->next == NULL ){
			printf("没有记录!\n"); 
		}
		else{
		
			p = data->next;
		
		}
		if( (fp = fopen("DataBase.txt","wb")) == NULL ){
			printf("文件打开失败!\n");
		}
		else{
			while (p != NULL){
				
   				fprintf(fp, "%s\t %s\t %s\t %s\t %d\t \r\n", 
				   p->Data.num, p->Data.Title, p->Data.Name,
				   p->Data.pbler,p->Data.type);   
				        
   				p = p->next; 
  			}
  			fclose(fp);
			printf("保存成功!\n"); 
		}
	}
}
//浏览书籍信息
int print(Node *data){
	Node *p;
	
	p = data->next;  
	if( p == NULL ){
		printf("没有可供读取的信息!\n");
		return 0;
	}
	
	printf("   编号   书名    作者     出版社     类别   \n");
	while( p != NULL ){
	
		printf("%s\t  %s\t  %s\t  %s\t  ",
		p->Data.num,p->Data.Title,p->Data.Name,p->Data.pbler );
		
		switch( p->Data.type ){
			case 0: printf(" professial\t  \n"); break;
			case 1: printf(" reference\t   \n"); break;
			case 2: printf(" report\t      \n"); break;
			case 3: printf(" novel\t       \n"); break;
			case 4: printf(" others\t      \n"); break;
		}
		
		p = p->next;		   
	}
	
} 
//按照书名查询
void SearchTitle(Node *data){
	char T[10];
	printf("\n请输入书名:\n");
	scanf("%s",T);
	
	Node *p = NULL;
	
	
	if( data->next == NULL ){
		printf("没有可供查询的信息!\n");
	}
	else{
		p = data->next;
		printf("查找到的信息如下:\n");
		printf("   编号   书名    作者     出版社     类别   \n");
		while( p != NULL){
			if( strcmp(p->Data.Title,T) == 0){
				
				printf("%s\t  %s\t  %s\t  %s\t  ",
					p->Data.num,p->Data.Title,p->Data.Name,p->Data.pbler );
		
				switch( p->Data.type ){
					case 0: printf(" professial\t  \n"); break;
					case 1: printf(" reference\t   \n"); break;
					case 2: printf(" report\t      \n"); break;
					case 3: printf(" novel\t       \n"); break;
					case 4: printf(" others\t      \n"); break;
				}
			}
			p = p->next; 
		}
		printf("查询结束!\n");
	
	
	}
}
//按照作者查询
void SearchName(Node *data){
	char N[10];
	printf("\n请输入作者名:\n");
	scanf("%s",N);
	
	Node *p = NULL;
	
	if( data->next == NULL){
		printf("没有可供查询的信息!\n");
	}
	else{
		p = data->next;
		printf("查找到的信息如下:\n");
		printf("   编号   书名    作者     出版社     类别   \n");
		while( p != NULL){
			if( strcmp(p->Data.Name,N) == 0){
				
				printf("%s\t  %s\t  %s\t  %s\t  ",
					p->Data.num,p->Data.Title,p->Data.Name,p->Data.pbler );
		
				switch( p->Data.type ){
					case 0: printf(" professial\t  \n"); break;
					case 1: printf(" reference\t   \n"); break;
					case 2: printf(" report\t      \n"); break;
					case 3: printf(" novel\t       \n"); break;
					case 4: printf(" others\t      \n"); break;
				}
			}
			p = p->next; 
		}
		printf("查询结束!\n"); 
	}
	
} 
//按照出版社查询
void SearchPbler(Node *data){
	char P[10];
	printf("\n请输入出版社:\n");
	scanf("%s",P);
	
	Node *p = NULL;
	
	if( data->next == NULL){
		printf("没有可供查询的信息!\n"); 
	}
	else{
		p = data->next;
		printf("查找到的信息如下:\n");
		printf("   编号   书名    作者     出版社     类别   \n");
		while( p != NULL){
			if( strcmp(p->Data.pbler,P) == 0){
				
				printf("%s\t  %s\t  %s\t  %s\t  ",
					p->Data.num,p->Data.Title,p->Data.Name,p->Data.pbler );
		
				switch( p->Data.type ){
					case 0: printf(" professial\t  \n"); break;
					case 1: printf(" reference\t   \n"); break;
					case 2: printf(" report\t      \n"); break;
					case 3: printf(" novel\t       \n"); break;
					case 4: printf(" others\t      \n"); break;
				}
			}
			p = p->next; 
		}
		printf("查询结束!\n");
	}
}
//按照类别查询
void SearchType(Node *data){
	
	printf("\n请输入你要查询的类别:0.专业书;1.工具书;2.报告;3.小说;4.其他;\n");
	
	enum Type t;
	scanf("%d",&t);
	while( t != 0&& t != 1&& t != 2&& t != 3&& t != 4){
			printf("请输入正确序号!\n");
			scanf("%d",&t);
	}
	
	Node *p = NULL;
	
	if( data->next == NULL){
		printf("没有可供查询的信息!\n"); 
	}
	else{
		p = data->next;
		printf("查找到的信息如下:\n");
		printf("   编号   书名    作者     出版社     类别   \n");
		while( p != NULL){
			if( t == p->Data.type ){
				
				printf("%s\t  %s\t  %s\t  %s\t  ",
					p->Data.num,p->Data.Title,p->Data.Name,p->Data.pbler );
		
				switch( p->Data.type ){
					case 0: printf(" professial\t  \n"); break;
					case 1: printf(" reference\t   \n"); break;
					case 2: printf(" report\t      \n"); break;
					case 3: printf(" novel\t       \n"); break;
					case 4: printf(" others\t      \n"); break;
				}
			}
			p = p->next; 
	}
	printf("查询结束!\n"); 
	} 
}
//查询课程基本信息
void search(Node *data){
	int flag;
	printf("输入你要查询的信息:\n");
	printf("1.按书名\n2.按作者\n3.按出版社\n4.按类别\n");
	
	scanf("%d",&flag);
	switch( flag ){
		case 1: SearchTitle(data); break;
		case 2: SearchName(data);  break;
		case 3: SearchPbler(data); break;
		case 4: SearchType(data);  break;
		default: printf("请输入正确的序号!\n");
					break;
	} 
	
	
} 
//增加书籍信息
void input(Node *data){
	Node *last;
	last = data;
	
	//last 指向最后一个节点 
	while( last->next != NULL ){
		last = last->next;
	}
	
	Node *p;
	p = (Node *)malloc( sizeof(Node) );
	
	char n[10];
	printf("请输入要添加的书籍序号:\n");
	scanf("%s",n);
	
		//查重 
		Node *q;
		for( q = data->next; q; q = q->next ){
			if( strcmp(q->Data.num,n) == 0){
				printf("输入序号重复!\n");
				return;
			}
		}
		
		strcpy(p->Data.num,n);
		 
		printf("请输入书名:\n");
		scanf("%s",p->Data.Title);
		printf("请输入作者:\n");
		scanf("%s",p->Data.Name);
		printf("请输入出版社:\n");
		scanf("%s",p->Data.pbler);
		printf("请输入类别:0.专业书;1.工具书;2.报告;3.小说;4.其他;\n");
		scanf("%d",&p->Data.type);
		printf("已经完成一个记录的添加!\n"); 
		
		p->next = NULL;
		last->next = p;
		last = p;
		
		printf("即将保存至文件......\n");
		save(data);
} 

//删除书籍信息
void Delete(Node *data){
	Node *p = NULL;
	
	if( data->next == NULL){
		printf("没有可供删除的信息!\n");
		
	}

	else{
		char n[10];
		printf("请输入需要删除书籍序号:\n");
		scanf("%s",n);
	
		p = data->next;
		Node *q;
		for( q=NULL; p!=NULL ; q=p,p=p->next ){
			if( strcmp(p->Data.num,n) == 0 ){
				printf("找到了你要删除的书籍序号:\n");
				int flag;
				printf("是否删除?\n----1.删除\n----2.取消\n");
				scanf("%d",&flag);
				
				if( flag == 2 ) break;
				//删除目标节点p 
				if( q != NULL ){
					q->next = p->next;
				}
				else{
					data->next = p->next;
				}
				printf("删除成功!\n"); 
				free(p);
				break;
			}
		}
	}
	printf("即将保存至文件......\n");
	save(data);
	
	
} 

//修改书籍信息
void amend(Node *data){
	Node *p = NULL;
	
	if( data->next == NULL){
		printf("没有可供修改的信息!\n");
	}
	else{
		char n[10];
		printf("请输入要修改的书籍序号:\n");
		scanf("%s",n);
		
		p = data->next;
		
		while( p != NULL ){
			if(  strcmp(p->Data.num,n) == 0 ){
				break;
			}
			p = p->next;
		} 
		
		if( p != NULL ){
				printf("找到了!\n");
				printf("查找到的信息如下:\n");
				printf("\n\n   编号   书名    作者     出版社     类别   \n");
				printf("%s\t  %s\t  %s\t  %s\t  ",
					p->Data.num,p->Data.Title,p->Data.Name,p->Data.pbler );
		
				switch( p->Data.type ){
					case 0: printf(" professial\t  \n"); break;
					case 1: printf(" reference\t   \n"); break;
					case 2: printf(" report\t      \n"); break;
					case 3: printf(" novel\t       \n"); break;
					case 4: printf(" others\t      \n"); break;
		}
				
			while( 1 ){
				
				int flag;
				printf("\n\n输入你要修改的信息序号:\n");
				printf("1.按书名\n2.按作者\n3.按出版社\n4.按类别\n5.退出修改\n");
	
				scanf("%d",&flag);
				if( flag == 5){
					break;
				}	
				switch( flag ){
					case 1:
						printf("请输入新的书名:\n");
						scanf("%s",p->Data.Title); break;
					case 2:
						printf("请输入新的作者名:\n");
						scanf("%s",p->Data.Name); break;
					case 3:
						printf("请输入新的出版社:\n");
						scanf("%s",p->Data.pbler); break;
					case 4:
						printf("请输入新的类别:\n");
						scanf("%d",&p->Data.type); break;
					default:
						printf("请输入正确序号!\n"); 
						return; break;
				} 
				
			}
				printf("即将保存至文件......\n");
				save(data);
			} 
			else{
				printf("没有你要修改的信息!\n");
			}
		
		
	
	}
	
}

//统计与枚举成员变量相同的个数
int count(Node *data,int flag){
	Node *p;
	p = data->next;
	int cnt=0;
	
	while( p != NULL){
		if( flag == p->Data.type){
			cnt++;
		}
		p = p->next;
	}
	
	return cnt;
} 

//按类别统计书籍数量
int statistics(Node *data){
	printf("请输入需要统计的书籍类别:0.专业书;1.工具书;2.报告;3.小说;4.其他;\n");
	int flag;
	int cnt;
	scanf("%d",&flag);
	
	switch( flag ){
		case 0: cnt = count(data,flag); break;
		case 1: cnt = count(data,flag); break;
		case 2: cnt = count(data,flag); break;
		case 3: cnt = count(data,flag); break;
		case 4: cnt = count(data,flag); break;
		default: printf("请输入正确编号!");
				 return 0; break; 
	}
	
	return cnt;
}

//按书名对书籍进行排序(冒泡排序) 
void BubbleSort(Node *data){
	Node *i,*j;
	
	
	for( i=data->next,j=data; i!=NULL; i=j->next,j=i ){
		for( ; i->next!=NULL; i=i->next ){
			if( strcmp(i->Data.Title, i->next->Data.Title) == 1 ){
				struct Book tmp;
				tmp = i->Data;
				i->Data = i->next->Data;
				i->next->Data = tmp;
			}
			else if( strcmp(i->Data.Title, i->next->Data.Title) == 0){
				if( strcmp(i->Data.num,i->next->Data.num) == 1){
					struct Book tmp;
					tmp = i->Data;
					i->Data = i->next->Data;
					i->next->Data = tmp;
				}
			} 
		}
	}
	
	printf("排序完成,是否输出:1.输出;2.返回主菜单\n");
	int c;
	scanf("%d",&c);
	
	switch( c ){
		case 1: print(data); break;
		case 2: break;
		default: printf("请输入正确序号!");
				 break; 
	} 
}
//主函数 
int main()
{
	
	//定义第一个节点 
	Node *data;
	data = (Node*)malloc( sizeof(Node) );
	
	data -> next = NULL;
	int n;
	while( 1 ){
		
		//用户界面 
		printf("\n\n\n"); 
		printf("************欢迎使用个人书籍管理系统***************\n");
		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("---------------------------------------------------\n");
		printf("********************谢谢使用***********************\n");
		printf("请选择1-10:"); 
		
	
		scanf("%d",&n);
	 	printf("\n\n");
		switch( n ){
			case 1: AddData(data); break;
			case 2: save(data);    break;
			case 3: print(data);   break;
			case 4: search(data);  break;
			case 5: input(data);   break;
			case 6: Delete(data);  break;
			case 7: amend(data);   break;
			case 8: int cnt;
					printf("\n这个类别的书有:%d本",statistics(data)); break;
			case 9: BubbleSort(data); break;
			case 10: free( data );
						return 0; break;
			default: printf("请输入1-10之间的数字!");
					break;
		}
	
	}
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 13:42:06  更:2022-01-01 13:42:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:30:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码