C语言做图 书 信 息 管 理 系 统,大学的孩子们 福音在哪,这足够应付你们考试了

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*结构体类型定义*/
struct book{
	int num;//图书编号
	char bname[20];   //图书名
	char wname[20];   //作者名
	char sort[50];    //类别
	char price[20];  //图书价格
	char press[20];   //出版社
	struct book *next; //指针	
};


struct book2{
	int num;//图书编号
	char bname[20];   //图书名
	char ruktime[50];      //入库年份
	int rukunum;      //入库数量
	int sum;     //总数
	struct book2 *next; //指针	
};
/*声明新的类型名来代替原有的类型名*/
typedef struct book BK;
typedef struct book2 BK2;

/* 显示菜单 */
char Menu(){
	char m;
	printf("                  图 书 信 息 管 理 系 统                          \n\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("***************************************************************************\n");
	printf("请输入您的选择:\n");
	fflush(stdin);
	scanf("%c",&m);
	return m;
}

/*在图书链表末端添加一个新节点*/
BK *creatbook(BK *head,BK **pNew){
	struct book *p=NULL;
	struct book *pr=head;
	p=(BK *)malloc(sizeof(BK));/*为新添加的节点申请内存*/
	if(p==NULL){
		printf("内存不够!");
		exit(0);
	}
	if(head==NULL){
		head=p;/*如果原来的链表为空,则新建节点为首节点*/
	}
	else{
		while(pr->next!=NULL){

			pr=pr->next;
		}
		pr->next=p;
	}
	pr=p;
	pr->next=NULL;
	*pNew=p;
	return head;
}
/*保存到TXT文本.图书*/
void SaveToTxt(BK *head){
	BK *p=head;
	FILE *file;
	file=fopen("book.txt","w+");
	if(file!=NULL){
		while(p!=NULL){
			fprintf(file,"%d\t%s\t%s\t%s\t%s\t%s\t%s\t\n",p->num,p->bname,p->wname,p->sort,p->price,p->press);
			p=p->next;
		}
		fclose(file);
	}
	else{
		printf("存入文件失败!");
	}

};
/*从TXT文本中读取信息*/
BK *load(BK *head){
	BK *p=NULL;
	FILE *file;
	char a;
	int i=0;
	file=fopen("book.txt","a+");
	if(file!=NULL){
		while(!feof(file)){	 
			if(head==NULL&&i==0){	
				a=fgetc(file);
				if(a==EOF){
					fclose(file);
					return NULL;
				}
				rewind(file);
			}
			head=creatbook(head,&p);
			fscanf(file,"%d\t%s\t%s\t%s\t%s\t%s\t%s\n",&(p->num),p->bname,p->wname,p->sort,p->price,p->press);	
		}
		fclose(file);
	}
	else{
		printf("打开文件失败!");
	} 
	return (head);
}
/* 删除图书链表的某个新节点 */
BK  *pdel(BK *head,int num){
	BK *p=head,*pr=head;

	if(head==NULL){
		printf("链表为空!无法删除!");
		return(head);
	}
	while(p->num!=num&&p->next!=NULL){
		pr=p;
		p=p->next;
	}
	if(p->num==num){
		//两种情况
		if(p==head){
			//就是链表的开头的时候
			head=p->next;//头指针向后移动一位
		}
		else{
			pr->next=p->next;

		}
		free(p);
	}
	else{
		printf("无法找到该联系人!");
	}
	return(head);
}

/*向图书信息链表中添加数据*/
BK *addbook(BK *head){
	char c;
	int i=0;
	BK *pNew=NULL;/*定义一个新的结构体指针,用于添加*/
	do{
		head=creatbook(head,&pNew);
		printf("请输入新的图书信息!\n");
		printf("请输入图书编号:\t");
		scanf("%d",&pNew->num);
		printf("请输入图书书名:\t");
		scanf("%s",pNew->bname);
		printf("请输入作者名字:\t");
		scanf("%s",pNew->wname);
		printf("请输入类别:\t");
		scanf("%s",pNew->sort);
		printf("请输入图书价格:\t");
		scanf("%s",pNew->price);
		printf("请输入出版社:\t");
		scanf("%s",pNew->press);
		printf("\n输入完毕!是否需要继续输入(Y/N)?");
		fflush(stdin);/*清除缓冲区*/
		scanf("%c",&c);
		fflush(stdin);/*清除缓冲区*/
		i++;
	}while(c=='Y'||c=='y');
	printf("您添加了%d条新纪录!\n",i);
	SaveToTxt(head);
	return head;

}

/*修改图书信息*/
void xiugai(BK *head){
	BK *p=head;
	int m;
	printf("请输入要修改的图书编号:");
	scanf("%d",&m);
	while(p!=NULL){
		if(m==p->num){
			printf("请输入图书编号:\t");
			scanf("%d",&p->num);
			printf("请输入图书书名:\t");
			scanf("%s",p->bname);
			printf("请输入作者名字:\t");
			scanf("%s",p->wname);
			printf("请输入类别:\t");
			scanf("%s",p->sort);
			printf("请输入图书价格:\t");
			scanf("%s",p->price);
			printf("请输入出版社:\t");
			scanf("%s",p->press);
			return;
		}
		p=p->next;
	}
	SaveToTxt(head);
}

/*删除图书信息*/
BK *deletebook(BK *head){
	int num,i=0;
	char c;
	do{
		printf("请输入你要删除的图书编号:");
		scanf("%d",&num);
		head=pdel(head,num);
		printf("\n删除完毕!是否需要继续删除(Y/N)?");
		fflush(stdin);//清除缓冲区
		scanf("%c",&c);		
		fflush(stdin);//清除缓冲区
		i++;
	}
	while(c=='y'||c=='Y');
	printf("你删除了%d条数据",i);
	SaveToTxt(head);
	return (head);
}

/*查询图书信息*/
void chaxun(BK *head){
	BK *p=head;
	int m;
	printf("请输入您要查询的图书编号:\n");
	scanf("%d",&m);
	printf("图书编号\t图书名\t作者名\t类别\t图书价格\t出版社\n");
	while(p!=NULL){
		if(m==p->num){
			printf("%d\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\n",p->num,p->bname,p->wname,p->sort,p->price,p->press);
			return;
		}
		p=p->next;
	}
}

/*输出图书信息*/
void printbook(BK *head){
	BK *p=head;
	printf("图书编号\t图书名\t作者名\t类别\t图书价格\t出版社\n");
	while(p!=NULL){
		printf("%d\t\t%s\t%s\t%s\t%s\t\t%s\n",p->num,p->bname,p->wname,p->sort,p->price,p->press);
		p=p->next;
	}
}

//------------------------------------------------华丽的分割线---------------------------------------------------------------------------

/*在入库链表末端添加一个新节点*/
BK2 *creatbook2(BK2 *head2,BK2 **pNew){
	BK2 *p=NULL;
	BK2 *pr=head2;
	p=(BK2 *)malloc(sizeof(BK2));/*为新添加的节点申请内存*/
	if(p==NULL){
		printf("内存不够!");
		exit(0);
	}
	if(head2==NULL){
		head2=p;/*如果原来的链表为空,则新建节点为首节点*/
	}
	else{
		while(pr->next!=NULL){

			pr=pr->next;
		}
		pr->next=p;
	}
	pr=p;
	pr->next=NULL;
	*pNew=p;
	return head2;
}

/*保存到TXT文本.入库*/
void SaveToTxt2(BK2 *head2){
	BK2 *p=head2;
	FILE *file;
	file=fopen("book2.txt","w+");
	if(file!=NULL){
		while(p!=NULL){
			fprintf(file,"%d\t%s\t%s\t%d\t\n",p->num,p->bname,p->ruktime,p->rukunum);
			p=p->next;
		}
		fclose(file);
	}
	else{
		printf("存入文件失败!");
	}

};

/*从TXT文本中读取信息*/
BK2 *load2(BK2 *head2){
	BK2 *p=NULL;
	FILE *file;
	char a;
	int i=0;
	file=fopen("book2.txt","a+");
	if(file!=NULL){
		while(!feof(file)){	 
			if(head2==NULL&&i==0){	
				a=fgetc(file);
				if(a==EOF){
					fclose(file);
					return NULL;
				}
				rewind(file);
			}
			head2=creatbook2(head2,&p);
			fscanf(file,"%d\t%s\t%s\t%d\t\n",&(p->num),p->bname,p->ruktime,&(p->rukunum));	
		}
		fclose(file);
	}
	else{
		printf("打开文件失败!");
	} 
	return (head2);
}
/* 删除入库链表的某个新节点 */
BK2  *pdel2(BK2 *head2,int num){
	BK2 *p=head2,*pr=head2;

	if(head2==NULL){
		printf("链表为空!无法删除!");
		return(head2);
	}
	while(p->num!=num&&p->next!=NULL){
		pr=p;
		p=p->next;
	}
	if(p->num==num){
		//两种情况
		if(p==head2){
			//就是链表的开头的时候
			head2=p->next;//头指针向后移动一位
		}
		else{
			pr->next=p->next;

		}
		free(p);
	}
	else{
		printf("无法找到该联系人!");
	}
	return(head2);
}




/*添加入库信息*/
BK2 *addbook2(BK2 *head2){
	char c;
	int i=0;
	BK2 *pNew=NULL;/*定义一个新的结构体指针,用于添加*/
	do{
		head2=creatbook2(head2,&pNew);
		printf("请输入入库信息!\n");
		printf("请输入入库图书编号:");
		scanf("%d",&pNew->num);
		printf("请输入入库图书名称:");
		scanf("%s",pNew->bname);
		printf("请输入入库年份:");
		scanf("%s",pNew->ruktime);
		printf("请输入入库数量:");
		scanf("%d",&pNew->rukunum);
		printf("\n输入完毕!是否需要继续输入(Y/N)?");
		pNew->sum=0;
		fflush(stdin);/*清除缓冲区*/
		scanf("%c",&c);
		fflush(stdin);/*清除缓冲区*/
		i++;
	}while(c=='Y'||c=='y');
	printf("您添加了%d条入库记录!\n",i);
	SaveToTxt2(head2);
	return head2;

}
/*修改入库信息*/
void xiugai2(BK2 *head2){
	BK2 *p=head2;
	int m;
	printf("请输入要修改的图书编号:");
	scanf("%d",&m);
	while(p!=NULL){
		if(m==p->num){
			printf("请输入入库图书编号:\t");
			scanf("%d",&p->num);
			printf("请输入入库图书名称:\t");
			scanf("%s",p->bname);
			printf("请输入入库年份:\t");
			scanf("%s",p->ruktime);
			printf("请输入入库数量:\t");
			scanf("%d",&p->rukunum);
			return;
		}
		p=p->next;
	}
	SaveToTxt2(head2);
}
/*删除入库信息*/
BK2 *deletebook2(BK2 *head2){
	int num,i=0;
	char c;
	do{
		printf("请输入你要删除的入库信息:");
		scanf("%d",&num);
		head2=pdel2(head2,num);
		printf("\n删除完毕!是否需要继续删除(Y/N)?");
		fflush(stdin);//清除缓冲区
		scanf("%c",&c);		
		fflush(stdin);//清除缓冲区
		i++;
	}
	while(c=='y'||c=='Y');
	printf("你删除了%d条数据",i);
	SaveToTxt2(head2);
	return (head2);
}

/*查询入库信息*/
void chaxun2(BK2 *head2){
	BK2 *p=head2;
	int m;
	printf("请输入您要查询入库的图书编号:\n");
	scanf("%d",&m);
	printf("图书编号\t图书名\t入库年份\t入库数量\n");
	while(p!=NULL){
		if(m==p->num){
			printf("%d\t%s\t%s\t%d\t\n",p->num,p->bname,p->ruktime,p->rukunum);
			return;
		}
		p=p->next;
	}
}

/*输出入库信息*/
void printbook2(BK2 *head2){
	BK2 *p=head2;
	printf("图书编号\t图书名\t\t入库年份\t入库数量\n");
	while(p!=NULL){
		printf("%d\t\t%s\t\t%s\t\t%d\t\n",p->num,p->bname,p->ruktime,p->rukunum);

		p=p->next;
	}
}

/*排序*/
void paixu(BK2 *head2)
{
	BK2 *p;
	BK2 *pr=NULL;
	int i=0;
	pr=(BK2 *)malloc(sizeof(BK2));//提问在什么情况下添加内存
	do
	{
		i=0;
		p=head2;
		while(p->next!=NULL)
		{
			if(p->next->rukunum>p->rukunum)
			{
				pr->num=p->next->num;
				strcpy(pr->bname,p->next->bname);
				strcpy(pr->ruktime,p->next->ruktime);
				pr->rukunum=p->next->rukunum;
				pr->sum=p->next->sum;

				p->next->num=p->num;
				strcpy(p->next->bname,p->bname);
				strcpy(p->next->ruktime,p->ruktime);
				p->next->rukunum=p->rukunum;
				p->next->sum=p->sum;

				p->num=pr->num;
				strcpy(p->bname,pr->bname);
				strcpy(p->ruktime,pr->ruktime);
				p->rukunum=pr->rukunum;
				p->sum=pr->sum;
				i=1;
			}
			p=p->next;
		}
	}
	while(i);
	SaveToTxt2(head2);
}
/*统计*/
void tongji(BK2 *head2)
{
		int sum=0;
	BK2 *p=head2;

	while(p!=NULL)
	{
			sum+=p->rukunum;

		p=p->next;
	}
	printf("%d\n",sum);
	SaveToTxt2(head2);
}


/*登入界面*/
void dengru(){
	char n,y=1;/*choice=序号,n=用户登入、退出系统数字,a=(y/n),*/
	int j,i=123456;
	char b[10],b1[10]="hcj";/*a=选择,d=验证,*/
	while(y){
		system("cls");
		printf("\n\n\n\n\n\n\n");
		printf("****************************** 欢迎光临 *******************************\n\n");
		printf("********************** 图 书 信 息 管 理 系 统 ************************\n\n\n");
		printf("\n\n");
		printf("\t========== ========== 1.用户登录 ====== ==========\n");
		printf("\t========== ========== 0.退出系统 ====== ==========\n");
		printf("          请输入您的选择:");
		scanf("%c",&n);
		printf("\n");
		switch(n){
		case '0':
			printf("程序结束!");exit(0);break;
		case '1':
			printf("      请输入您的用户名:");
			fflush(stdin);
			gets(b);
			printf("\n");
			printf("      请输入您的密码:");
			scanf("%d",&j);
			printf("\n");
			while(strcmp(b,b1)!=0&&j!=i){
				printf("      请输入您的用户名:");
				fflush(stdin);
				gets(b);
				printf("\n");
				printf("      请输入您的密码:");
				scanf("%d",&j);
				printf("\n");
			}

			printf("          验证通过!请请按Enter键进入!\n");
			getchar();
				getchar();
			y=0;
			break;
		default:printf("输入错误,请重新输入!");
			break;


		}
	}
}
/*入库信息菜单*/
char Menuruku(BK2 *head2){
	char m;

	while(1){
		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("*----------------0.返回添加图书信息---------------*\n");
		printf("***************************************************************************\n");
		printf("请输入您的选择:\n");
		fflush(stdin);
		scanf("%c",&m);

		switch(m){
		case '0':return m;break;
		case '1':head2=addbook2(head2);break;
		case '2':chaxun2(head2);break;
		case '3':head2=deletebook2(head2);break;
		case '4':xiugai2(head2);break;
		case '5':printbook2(head2);break;
		case '6':paixu(head2);break;
		case '7':tongji(head2);break;
		case '8':printf("程序结束!");exit(0);break;
		default:printf("输入错误,请重新输入!");
			break;
		}

	}return m;
}
/*主函数*/
main(){
	BK *head=NULL;
	BK2 *head2=NULL;
	char m;
	dengru();
	head=load(head);
	head2=load2(head2);
	while(1){
		m=Menu();
		switch(m){
		case '1':head=addbook(head);break;
		case '2':chaxun(head);break;
		case '3':head=deletebook(head);break;
		case '4':xiugai(head);break;
		case '5':printbook(head);break;
		case '6':Menuruku(head2);break;
		case '7':printf("程序结束!");exit(0);break;
		default:printf("输入错误,请重新输入!");
			break;
		}

	}
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值