(C语言)图书管理系统(程序设计)

//图书信息包括:书号、书名、作者、出版社、价格等
//基本功能:图书信息的添加、修改、删除。 

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h> 
#define M 100
//
创建图书信息结构体 
struct Books{//声明结构体类型 
	char bookName[100];//书名 
	int num;//书号 
	char writter[100];//作者 
	char press[100];//出版社 
	float price;//价格 
	char introduction[100];//简介 
}book[M];//定义结构体数组 
int N = 0;//总图书数量 
struct Books temp; 
//-----图书信息的添加板块----- 
void Input(){
	int n,m;
	system("cls");
	printf("准备录入的书的本数:");
	scanf("%d",&n);
	m = n;
	for(int i = 0;i < n;i ++){
		system("cls");
		printf("还有%d本书未被录入,请输入相关信息\n(如若没有相关信息请输入-->无)\n",m);
		printf("-----------------------------------\n");
		printf("| 书的编号:");
		scanf("%d",&temp.num);
		printf("| 书名:");
		scanf("%s",temp.bookName);
		printf("| 书的作者:");
		scanf("%s",temp.writter);
		printf("| 出版社:");
		scanf("%s",temp.press);
		printf("| 书的价格/¥:");
		scanf("%f",&temp.price);
		printf("| 简介(100字内):");
		scanf("%s",temp.introduction);
		printf("-----------------------------------\n"); 
		m --; 
		book[N ++] = temp;
	} 
	printf("已成功录入%d本书,3秒后跳转回功能页;",n); 
	Sleep(3000);
} 
//----图书信息的修改板块------
int Revise_part(int j){
	int t1,o,i; 
	char t2[100];//把准备修改的字符存储在 t2 里面,准备修改的数字存储在 t1 里面 
	printf("---------------\n");
	printf("|| 1:修改书的编号||\n");
	printf("|| 2:修改书名    ||\n");
	printf("|| 3:修改作者    ||\n");
	printf("|| 4:修改价格    ||\n");
	printf("|| 5:修改出版社  ||\n");
	printf("|| 6:修改简介    ||\n");
	printf("----------------\n"); 
	printf("请选择你要修改的信息:");
	scanf("%d",&o);
	if(o >= 1 && o <= 6){
		switch(o){
			case 1: printf("输出要修改的编号:");
					scanf("%d",&t1);
					book[j].num = t1; 
				break;
			case 2: printf("输出要修改的书名:");
					scanf("%s",t2);
					for(i = 0;i < strlen(t2);i ++)
					book[j].bookName[i] = t2[j];
				break;
			case 3: printf("输出要修改的作者:");
					scanf("%s",t2);
					for(i = 0;i < strlen(t2);i ++)
					book[j].writter[i] = t2[j];
				break;
			case 4: printf("输出要修改的价格:");
					scanf("%d",&t1);
					book[j].price = t1; 
				break;
			case 5: printf("输出要修改的出版社:");
					scanf("%s",t2);
					for(i = 0;i < strlen(t2);i ++)
					book[j].press[i] = t2[j];
				break;
			case 6: printf("输出要修改的简介:");
					scanf("%s",t2);
					for(i = 0;i < strlen(t2);i ++)
					book[j].introduction[i] = t2[j];
				break;
				}
	}			
}
void Revise(){
	int nums;
	int orders;
	char names[20];
	int i,j,key; 
	lable_2:system("cls");
	printf("------------------------------------------------------\n");
	printf("|| 1、根据图书编号查询修改  2、根据图书书名查询修改 ||\n");
	printf("------------------------------------------------------\n");
	printf("请输入查询修改方式:");
	scanf("%d",&orders);
	j = -1;
	if(orders == 1){
		printf("请输入书的编号:"); 
		scanf("%d",&nums); 
		for(i = 0;i < N;i ++){
			if(book[i].num == nums){
				j = i;
			}
		}
	}else if(orders == 2){
		printf("请输入书名:");
		scanf("%s",names);
		for(int i = 0;i < N;i ++){
			if(strcmp(names,book[i].bookName) == 0){
				j = i;
			}
		}
	}
	if(j == -1){
		printf("本书库暂时还没有这本书>_<!!!\n");
		printf("\n是否继续修改???【继续请按1//若不继续请按2跳转功能页】:");
		scanf("%d",&key);
		if(key == 1){
			goto lable_2;
		}		
	}else if(j != -1){
		Revise_part(j);
		printf("\n是否继续修改???【继续请按1//若不继续请按2跳转功能页】:"); 
		scanf("%d",&key);
		if(key == 1){
			goto lable_2;
		}
	}
} 
//图书信息的查询板块
void Query(){
	int orders;
	int nums;
	int i,j = -1,t = 0,key;
	char names[100]; 
	system("cls");
	printf("请选择查询方式\n");
	printf("1:编号查询    2:书名查询\n");
	printf("\n\n请输入查询选项:");
	scanf("%d",&orders);
	if(orders == 1){
		printf("请输入图书编号:");
		scanf("%d",&nums);
		for(i = 0;i < N;i ++){
			if(book[i].num == nums){
				j = i;
				t ++;
			}
		}	 
	}else if(orders == 2){
		printf("请输入图书的书名:");
		scanf("%s",names);
		for(i = 0;i < N;i ++){
			if(strcmp(book[i].bookName,names) == 0){
				j = i;
				t ++;
			}
		}
	}
	if(j == -1 && t == 0){
		printf("本书库暂时还没有这本书>_<!!!\n");
		printf("按2键后回车返回功能页:"); 
		scanf("%d",&key); 
	}else if(j != -1 && t != 0){
		system("cls");
		printf("\n---------------------------------------------------------------\n");
		printf("编号:%d\n书名:%s\n作者:%s\n出版社:%s\n价格:%.2f\n",book[j].num,book[j].bookName,book[j].writter,book[j].press,book[j].price);
		printf("简介:");
		printf("%s",book[j].introduction);
		printf("\n------------------------------------------------------------------\n"); 
		printf("按2键后回车返回功能页:"); 
		scanf("%d",&key); 
	}
} 
//-------图书信息删除板块---------
int Delete_part(int j){
	int o,i; 
	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("请选择你要修改的信息:");
	scanf("%d",&o);
	if(o >= 1 && o <= 7){
		switch(o){
			case 1: book[j].num = 0; 
				break;
			case 2: book[j].bookName[i] = '\0';
				break;
			case 3: book[j].writter[i] = '\0';
				break;
			case 4: book[j].price = 0; 
				break;
			case 5:	book[j].press[i] = '\0';
				break;
			case 6: book[j].introduction[i] = '\0';
				break;
			case 7: N = N - 1;
					for(i = j;i < N;i ++){ 
					book[i] = book[i + 1];
//					book[i].num = book[i + 1].num;
//					strcpy(book[i].bookName,book[i + 1].bookName);
//					strcpy(book[i].introduction,book[i + 1].introduction);
//					strcpy(book[i].press,book[i + 1].press);
//					strcpy(book[i].writter,book[i + 1].writter);
//					book[i].price = book[i + 1].price;
				}
				break;
		}
	}
}
void Delete(){
	int nums;
	int orders;
	char names[100];
	int i,j = -1,key;
	lable_4:system("cls");
	printf("------------------------------------------------------\n");
	printf("|| 1、根据图书编号查询删除  2、根据图书书名查询删除 ||\n");
	printf("------------------------------------------------------\n");
	printf("请输入查询删除方式:");
	scanf("%d",&orders);
	if(orders == 1){
		printf("请输入你想要删除的图书编号:");
		scanf("%d",&nums);
		for(i = 0;i < N;i ++){
			if(book[i].num == nums){
				j = i;
				break; 
			}
		}
	}else if(orders == 2){
		printf("请输入你想要删除的图书书名:");
		scanf("%s",names);
		for(i = 0;i < N;i ++){
			if(strcmp(book[i].bookName,names) == 0){
				j = i;
				break;
			}
		} 
	}
	if(j == -1){
		printf("本书库暂时没有这本书>_<!!!\n");
		printf("\n是否继续查询???【继续请按1//若不继续请按2跳转功能页】:");
		scanf("%d",&key);
		if(key == 1){
			goto lable_4;
		} 
	}else if(j != -1){
		Delete_part(j);
		printf("\n是否继续修改???【继续请按1//若不继续请按2跳转功能页】:"); 
		scanf("%d",&key);
		if(key == 1){
			goto lable_4;
		}
	}
} 

//-------退出图书管理系统--------
void Finish(){
	exit(0);//正常运行并退出程序
	 
} 
 
 
int main(){
	int order;//定义存储序号的整型变量 
	
	
	printf("\n       欢迎来到图书管理系统!!!\n");
	printf("\n  本系统由 陈文静、王鸿、黄春兰 小组制作\n"); 
	printf("\n由于本系统内无数据请先执行图书信息的添加功能\n");
	printf("\n\n-------------3秒跳转功能页--------------------");
	Sleep(3000); //让函数执行挂起3秒时间 
	while(1){
		system("cls");//调用系统命令 cls 完成清屏操作 
		printf("功能如下:\n");
		printf("************| 1、图书信息的添加 |**************\n");
		printf("************| 2、图书信息的修改 |**************\n");
		printf("************| 3、图书信息的删除 |**************\n");
		printf("************| 4、图书信息的查询 |**************\n");
		printf("************| 5、退出本管理系统 |**************\n"); 
		lable_1:printf("\n\n请输入功能序号:");
		scanf("%d",&order); 
		
		if(order >= 1 && order <= 5){
			switch(order)
			{
				case 1: Input();//添加        
					break;
				case 2: Revise();//修改 
					break;
				case 3: Delete();//删除 
					break;
				case 4: Query();//查询 
					break;
				case 5: Finish();//退出 
					break;
			}
		} else{
			printf("\n输入错误请再次输入");
			goto lable_1;//跳转 
		}
	} 
} 

我第一次写这么长的C代码,是期末的C程序设计。其实早在好几天前就已经完成准备发出来的,结果就在最后一次调试的时候发现了一个小问题:删除功能里的全部删除出现了图书编码混乱的情况。我当时找了一早上,改来改去页没能解决。于是心烦就放在那没管了。就在刚刚帮同学做完她们组的程序设计时,又看了看我的,突然想出了问题出现在那了【哭】。300多行的代码就搞了许久原来就是在删除全部那个功能里少加了一个N = N - 1,之前逻辑想来想去都觉得没问题,搞了半天出现在这个地方。【找出错误还蛮兴奋的】

评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值