数据结构期末大作业图书管理系统(单链表)(C语言)代码

要求:

1)图书信息包括:书号(char num[10])、书名(char name[10])、作者(char author[10])、出版社(char press[10])、定价(float money)
//(2)除了总的模块要求外,还需计算a.查找同一作者的书的数量;b.定价低于20的书的信息
//第一个模块——主函数main()的功能是:根据选单的选项调用各函数,并完成相应的功能。 
/*第二个模块——Menu()的功能是:显示选单。 
第三个模块——CreateList()的功能是:创建表。  
第四个模块——InsertList(L,i)的功能是:在表的任意位置插入新的数据记录,并返回选单。 
第五个模块——LocateList()的功能是:按要求查询相关的信息,如果找到了,则显示该信息,如果未找到,则提示文件中没有该信息,并返回选单。 
第六个模块——AlterList()[的功能是:修改某条记录的信息(最好可以选择修改哪个数据项),如果未找到要修改的记录,则提示系统中无此记录,并返回选单。 
第七个模块——DeleteList()的功能是:删除某条记录,如果未找到要删除的记录,则提示通讯录中没有,并返回选单。 
第八个模块——PrintList()的功能是:显示所有记录。 
第九个模块——Quit()的功能是:退出选单。*/

代码实现:

#include<stdio.h>
#include<stdlib.h>
#include<string.h> 
typedef struct{
char num[10];
char name[10];
char author[10];
char press[10];
float money; 
}BOOK; //一本书的结构体, 
typedef struct Node{
	BOOK data;
	struct Node* next;
}LNode,*LinkList; 
void Quit(){
	printf("退出成功!"); 
}
LNode* CreateList(){
	int a,i;
	LNode *H,*L;LNode *P;
	L=(LNode*)malloc(sizeof(LNode));
	H=L;
	printf("请输入要录入书籍的个数:");
	scanf("%d",&a) ;
	printf("请输入要录入书籍的信息:\n");
	for(i=0;i<a;i++){
		P=(LNode*)malloc(sizeof(LNode));
		H->next=P;
		H=P;
		printf("书号:");
		scanf("%s",&P->data.num) ;
		printf("书名:");
		scanf("%s",&P->data.name) ;
		printf("作者:");
		scanf("%s",&P->data.author) ;
		printf("出版社:");
		scanf("%s",&P->data.press) ;
		printf("单价:");
		scanf("%f",&P->data.money) ;
		printf("\n");
		printf("第%d本图书录入完毕\n",i+1);
		 	printf("\n");
	}
	P->next=NULL; 
	return L;
}
void PrintList(LNode *L){
	LNode *P;
		P=L->next;
		printf("书的信息为:\n") ; 
	while(P!=NULL){
		printf("书号:%s",P->data.num);
		printf("书名:%s",P->data.name);
		printf("作者:%s",P->data.author);
		printf("出版社:%s",P->data.press);
		printf("单价:%.2f",P->data.money);
		P=P->next;
		printf("\n");
		} 
		printf("\n");
}
LNode* InsertList(LNode* L){	//在表的任意位置插入新的数据记录,并返回选单。 
	LNode *p,*H,*M;//p是要插入的结点, 
	int a=1,i;
	printf("请输入要插入图书的位置:");
	scanf("%d",&i) ;
	p=(LinkList)malloc(sizeof(LNode));
	H=(LinkList)malloc(sizeof(LNode));
	M=(LinkList)malloc(sizeof(LNode));
		printf("请输入要插入图书的数据:\n");
		printf("书号:");
		scanf("%s",p->data.num) ;
		printf("书名:");
		scanf("%s",p->data.name) ;
		printf("作者:");
		scanf("%s",p->data.author) ;
		printf("出版社:");
		scanf("%s",p->data.press) ;
		printf("单价:");
		scanf("%f",&p->data.money) ;
	H=L;	M=H->next;
while(a<=i){
if(a==i){
	p->next=H->next;
	H->next=p; }
	a++;
M=M->next;
H=H->next;
printf("\n");
}
return L;
	}
void LocateList(LNode *L){
	//按要求查询相关的信息,如果找到了,则显示该信息,如果未找到,则提示文件中没有该信息,并返回选单。
	//查找同一作者的书的数量;b.定价低于20的书的信息	printf("%d",L);的结果为1 ,在没有的情况下,如果创建了就是一个很大的值(地址) 
	int a,z,n=1,s=0;int c=0;//c用来计数 
	char b[10];
	float m=20;
	LNode *P,*M;
	P=L->next;
	printf("1.查询第几本书的信息\n");
	printf("2.根据作者查书的数量");
	printf("\n3.定价低于20的书的信息\n");
	printf("\n");
	printf("请输入要执行的操作:");
	scanf("%d",&a);
	switch(a) {
		case 1: 
		do{
			printf("请输入要查第几本书:"); 
			scanf("%d",&z);
			M=L->next;
			while(z>n){
				M=M->next;
				n++;
	}
	printf("书号:%s\t",M->data.num); 
	printf("书名:%s\t",M->data.name); 
	printf("作者:%s\t",M->data.author); 
	printf("出版社:%s\t",M->data.press); 
	printf("单价:%.2f\n",M->data.money); 
	printf("\n");
	printf("是否继续查询(1是0否):\n");
	scanf("%d",&a);
	}while(a);
	break;
		case 2:
			printf("请输入所查书的作者:");
			scanf("%s",&b);
			do{
				s=strcmp(b,P->data.author);
					if(s==0){
					++c ;
					}
					P=P->next;
			}while(P!=NULL);
			printf("%s的书共有%d本\n",b,c);
			break; 
		case 3:
		while(P!=NULL){
		if(P->data.money<m){
		
			s++;
				printf("书号:%s\t",P->data.num); 
				printf("书名:%s\t",P->data.name); 
				printf("作者:%s\t",P->data.author); 
				printf("出版社:%s\t",P->data.press); 
				printf("单价:%.2f\n",P->data.money); }
			P=P->next;
		}
		printf("定价低于20的书有:%d本\n",s); 
		printf("\n") ; 
	}
}
void DeleteList(LNode *L){
	LNode *P,*M;int a,b=1; 
	printf("请输入要删除第几本书:");
	scanf("%d",&a);
	P=L->next;
	M=L;
	while(a>b){
		P=P->next;
		M=M->next;
		b++;
	}
	M->next=P->next;
	free(P);
	printf("删除完毕\n");
}
LNode* AlterList(LNode *L){
	//修改某条记录的信息(最好可以选择修改哪个数据项),如果未找到要修改的记录,则提示系统中无此记录,并返回选单。
	LNode *P,*M;int a,b=1;  int g;
	printf("请输入要修改第几本书:");
	scanf("%d",&a);
	P=L->next;
	M=L;
	while(a>b){
		P=P->next;
		M=M->next;
		b++;
	}
	printf("该书的各项数据如下:\n");
	printf("书号:%s\t",P->data.num); 
	printf("书名:%s\t",P->data.name); 
	printf("作者:%s\t",P->data.author); 
	printf("出版社:%s\t",P->data.press); 
	printf("单价:%.2f\n",P->data.money); 
	printf("-----------------------------------------\n");
	printf("0.退出\t");
	printf("1.书号\t"); 
	printf("2.书名\t"); 
	printf("3.作者\t"); 
	printf("4.出版社\t"); 
	printf("5.单价\t"); 
	printf("\n");
	do{
	printf("请输入要执行操作的序号:"); 
	scanf("%d",&g);
	switch(g){
		case 0:break;
		case 1:
		printf("书号:");
		scanf("%s",P->data.num) ;
		printf("修改完毕!"); 
		break;
		case 2:
		printf("书名:");
		scanf("%s",P->data.name) ;
		printf("修改完毕!"); 
		break;
		case 3:
		printf("作者:");
		scanf("%s",P->data.author) ;
		printf("修改完毕!"); 
		break;
		case 4: 
		printf("出版社:");
		scanf("%s",P->data.press) ;
		printf("修改完毕!"); 
		break;
		case 5:
		printf("单价:");
		scanf("%.2f",&P->data.money) ;
		printf("修改完毕!"); 
		break;
		}
	}while(g);
}
void Menu(){
			printf("1.录入图书\n");
			printf("2.插入图书\n");
			printf("3.查询图书\n");
			printf("4.修改图书\n");
			printf("5.删除图书\n");
			printf("6.显示图书\n");
			printf("0.退出系统!") ;printf("\n");
}
int main(){
	LNode *L; 
	int a;

	do{
		Menu();
		printf("\n请输入要执行的操作:");
		scanf("%d",&a);	
	switch(a){
			case 0:
				Quit();
				break;
			case 1:
				L=CreateList();
				break;
			case 2:  
				L=InsertList(L);
				break;
			case 3:   
				LocateList(L);
				break;
			case 4:		
				AlterList(L);
				break;
			case 5:	
				DeleteList(L);
				break;
			case 6:
				PrintList(L);
					}}while(a);
	return 0;
}

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
用C++写的图书管理系统代码 图书馆管理系统要求: 实现的功能为: 1. 整个系统由两个独立的模块组成 1.1 内部管理模块 A 主要对图书馆的进行维护,包括对图书馆使用人员的管理,对图书的管理,对用户以及管理人员的密码管理。同时管理的用户的最大量为100。图书的最大量为500。 1.2 外部服务模块 B 普通图书馆用户的一些日常操作:如借书,还书,查询个人信息,查询图书信息。 2. 系统功能A(内部管理模块) 2.1 用户信息管理模块。可是实现注册新用户,删除用户,修改用户等等。用户信息包括个人信息和借阅信息。个人信息包括姓名、编号、联系方式。借阅信息包括借书总数(规定每个用户最多同时借3本)、欠款额。对于所有已借到的书,可以看到图书的信息、借书日期。 2.2 对图书的管理,也是新增,删除等。图书信息包括书名、作者、编号、出版社。图书可以实现多种方式查询。同时有标识能指出该图书是否已经被借出。 /* 2.5 对图书预订用户进行及时的信息反馈,预约时间最长为一周,如果有书已经可借了,那么通知预订该书的用户。如果该用户在一周内还没来借书的话,那么就通知第二个预订该书的用户。 设计相应的数据结构。 */ 3. 系统功能B 3.1 按多种方式查找图书。(书名、作者、编号、出版社) 3.2 借书 要求输入用户的编号,然后判断该用户是否有欠费(超过30元则不允许借书)或者已经借满。判断要借的书是否已被借出,若未借出,将该书借给用户,修改相应的信息。 3.3 还书 判断是否有欠费(规定每本书可借一个月,超过规定时间按每天0.1元计费。 3.4 查询用户信息。包括个人信息以及借还书信息。 4. 要求 1.界面友好。对于用户输入,要有足够的提示信息,如“请选择(1借书 2 还书……):”提示用户选择。 2.不用因为用户的错误输入而引起程序运行错误而中止执行。对输入值的大小范围、类型等进行正确性检查。对不合法的给出出错信息,指出错误类型,等待重新输入。 3.对删除数据(用户、图书)给出警告。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值