数据结构课设 图书管理系统

在做这个课设之前本来是打算用easyx写的 但是最后发觉easyx+链表的写法 对自己而言等于写不来

所以最后还是花了一个晚上写了个黑白类型的(因为时间比较赶所以还是调用了很多别人直接的框架,将就看吧)
yd.h

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#pragma warning(disable:4996)//可以利用该代码消去警告类

#define Max 2 //定义最多能借几本书的宏定义
#define NEW1  (book *)malloc(sizeof(book))
#define NEW2  (RD*)malloc(sizeof(RD))
//---------------------------------------------------三个结构体变量定义----------------------------------------
typedef struct book {
	char book_num[10];//图书编号???
	char book_name[20];//图书名称?
	char book_writer[10];//图书的作者?
	int book_xkc;//现有量
	int book_zkc;//库存
	int n; 
	struct book *next;
}book;


typedef  struct borrow
{
	char jy_num[10];//借书的总数
	char limit_date[40];//还书日期 防止溢出的问题
}BO;
typedef struct reader
{
	char	reader_num[10];
	char    reader_name[10];
	int right;//读者所借的书的本数
	int m;
	BO brrow[Max];
	struct reader *next;
}RD;

//----------------------------------------------------------函数声明-------------------------------------------
//-------界面函数
void Login();
void login1();
int Menu();
void Menu_select();
//-------初始化函数
void cshead_book();
void save1();
void Save();
void Save_Book();
void Save_Reader();
void Load();
void Load_Reader();
void Load_Book();
//--------5个功能函数
void rk();
void ck();
void add_reader();
void Print_reader();
void Print_book();
void jy();
void gh();

jm.cpp

void Login()
{
	system("cls");
	printf("   ———————————— 欢迎进入图书管理系统 ———————————\n");
	printf("                   ┏━━━━━━━━━━━━━━━━━━┓\n");
	printf("                   ┃                                    ┃\n");
	printf("                   ┃            190207233               ┃\n");
	printf("                   ┃             王加金                 ┃\n");
	printf("                   ┃                                    ┃\n");
	printf("                   ┗━━━━━━━━━━━━━━━━━━┛\n");
	printf("                          → 按任意键进入系统:");
	getchar();
	system("cls");
}
int Menu()//选择功能函数的函数
{
	int xz;
	printf("                         ◢━━━━━━━━━━━◣\n");
	printf("                         ┃#欢迎使用图书管理系统#┃\n");
	printf("                         ◥━━━━━━━━━━━◤\n");
	printf("            ┌──────────────┐ \n");
	printf("            │ ① 采编入库 ----- (ADD) #  │ \n");
	printf("            ├──────────────┤ \n");
	printf("            │ ② 书籍出库 ----- (SEA) #  │ \n");
	printf("            ├──────────────┤ \n");
	printf("            │ ③ 登记读者 ----- (SEA) #  │ \n");
	printf("            ├──────────────┤ \n");
	printf("            │ ④ 借阅登记 ----- (SEA) #  │ \n");
	printf("            ├──────────────┤ \n");
	printf("            │ ⑤ 还书管理 ----- (SEA) #  │ \n");
	printf("            ├──────────────┤ \n");
	printf("            │ ⑥查询图书信息   (SEA) #   │ \n");
	printf("            ├──────────────┤ \n");
	printf("            │ ⑦ 查询读者信息   (SEA) #  │ \n");
	printf("            │  0. 退   出 ----- (ESC) #  │ \n");
	printf("            └──────────────┘ \n");
	printf("                           →请在此输入您的选择:");
	for (;;)
	{
		scanf("%d", &xz);
		if (xz < 0 || xz>7)
		{
			printf("错误!请重新输入:\n");
		}
		else
			break;
	}
	return xz;
}
void Menu_select()
{
	
	for (;;)
	{
		switch (Menu())
		{
		system("cls");
		case 0:save1();
		case 1:rk(); break;
		case 2:ck(); break;
		case 3:add_reader(); break;
		case 4:jy(); break;
		case 5:gh(); break;
		case 6:Print_book(); break;
		case 7:Print_reader(); break;
		default:printf("错误!"); exit(0);
		}
	}

}

gn.cpp

book *head_book;
RD *head_reader;
int n=0,m=0;
//------------------------------------------------------初始化模块-------------------
void cshead_book()
{
	book *p0;
	printf("\n\n\t\t\t\t图书初始化开始\n");
	p0 = NEW1;
	head_book = p0;
	printf("\t\t\t\t请输入图书信息:\n");
	printf("\t\t\t\t图书编号,图书名称,图书作者,图书数量\n");
	scanf("%s%s%s%d", p0->book_num, p0->book_name, p0->book_writer, &p0->book_zkc);
	p0->book_xkc = p0->book_zkc;
	p0->next = NULL;
	p0->n=++n; 
	printf("\t\t\t\t图书信息初始化完毕!\n");
	getchar();
	system("cls");

}
void save1()
{
	system("cls"); 
	Save(); 
	printf("\n\n\t欢迎下次使用本系统!\n"); 
	getchar(); 
	exit(0);
}
//--------------------------------------保存于加载函数功能---------------------------------------
void login1()
{
	FILE *fp_book, *fp_reader;
	Login();
	if ((fp_book = fopen("book.txt", "r+")) == NULL || (fp_reader = fopen("reader.txt", "r+")) == NULL)
	{
		cshead_book();
	}
	else
		Load();
}
void Save()
{
	Save_Reader();
	Save_Book();
}
void Save_Reader()
{
	FILE *fp_reader;
	RD *p, *p0;
	p = head_reader;
	if ((fp_reader = fopen("reader.txt", "w+")) == NULL)
	{
		printf("\n文件保存失败!\n");
		exit(0);
	}
	while (p != NULL)
	{
		if ((fwrite(p, sizeof(RD), 1, fp_reader)) != 1)
		{
			printf("\n写入文件失败!\n");
		}
		p0 = p;
		p = p->next;
		free(p0);
	}
	head_reader = NULL;
	fclose(fp_reader);
}
void Save_Book()
{
	FILE *fp_book;
	book *p, *p0;
	p = head_book;
	if ((fp_book = fopen("book.txt", "w+")) == NULL)
	{
		printf("\n文件保存失败!\n");
		exit(0);

	}
	while (p != NULL)
	{
		if ((fwrite(p, sizeof(book), 1, fp_book)) != 1)
		{
			printf("\n写入文件失败!");

		}
		//如果把这个放在里面就无限循环做成了木马
		p0 = p;
		p = p->next;
		free(p0);

	}
	head_book = NULL;
	fclose(fp_book);

}
void Load()
{
	Load_Reader();
	Load_Book();
}
void Load_Reader()
{
	RD *p1, *p2, *p3;
	FILE *fp;
	fp = fopen("book.txt", "r+");
	p1 = NEW2;
	fread(p1, sizeof(RD), 1, fp);
	head_reader = p3 = p2 = p1;
	while (!feof(fp))//检验文件读取是否结束
	{
		p1 = NEW2;
		fread(p1, sizeof(RD), 1, fp);
		p2->next = p1;
		p3 = p2;
		p2 = p1;
	}
	p3->next = NULL;
	free(p1);
	fclose(fp);
}
void Load_Book()
{
	book *p1, *p2, *p3;
	FILE *fp;
	fp = fopen("book.txt", "rb");
	p1 = NEW1;
	fread(p1, sizeof(book), 1, fp);
	head_book = p3 = p2 = p1;
	while (!feof(fp))
	{
		p1 = NEW1;
		fread(p1, sizeof(book), 1, fp);
		p2->next = p1;
		p3 = p2;
		p2 = p1;
	}
	p3->next = NULL;
	free(p1);
	fclose(fp);
}

//----------------------------------------------------------------功能实现函数-----------------------------
void rk()
{
	book *p, *p0, *p1;
	p = p1 = head_book;
	printf("\n新书入库模块\n");
	printf("\n请输入入库书籍信息\n");
	p0 = NEW1;
	printf("图书编号:");
	scanf("%s", p0->book_num);
	while (strcmp(p0->book_num, p1->book_num) != 0 && p1->next != NULL)//判断头结点是否为空与是否与新入书籍编号相同
		p1 = p1->next;
	if (strcmp(p0->book_num, p1->book_num) == 0)
	{
		printf("此编号图书已经存在!直接添加数量!\n");
		printf("输入添加数量");
		scanf("%d", &p0->book_zkc);
		p1->book_zkc += p0->book_zkc;
		p1->book_xkc += p0->book_zkc;
	}
	else

	{
		printf("请输入图书名称,图书作者,图书数量\n");
		scanf("%s%s%d", p0->book_name, p0->book_writer, &p0->book_zkc);
		while (p->next)
		{
			p = p->next;
				if (head_book = NULL)
				head_book = p0;
			else
				p->next = p0;
			p0->next = NULL;
			p0->book_xkc = p0->book_zkc;
			p0->n=++n;
		
		
		}
	}
     	printf("新书入库完毕!\n");
		getchar();
	

}
void ck()
{

	book *p, *p0, *p1,*p2;
	p = p1 = head_book;
	printf("\n书籍出库模块\n");
	printf("\n请输入出库书籍信息\n");
	p0 = NEW1;
	p2 = NEW1;
	printf("图书编号:");
	scanf("%s", p0->book_num);
	while (strcmp(p0->book_num, p1->book_num) != 0 && p1->next != NULL)//判断头结点是否为空与是否与新入书籍编号相同-->直到遍历完
		p1 = p1->next;
	if ((strcmp(p0->book_num, p1->book_num)) == 0)//即如果找到这本书籍
	{
		p2->next = p1->next;
		p1 = p2->next;
		free(p2);
		printf("\n删除书籍成功\n");
	}
	else
	{
		printf("\n不存在该书籍\n");

	}


}
void add_reader()
{
	RD *p0;
	int i;
	printf("读者初始化开始,请输入读者信息\n");
	p0 = NEW2;
	head_reader = p0;
	printf("\n 请输入读者的编号,读者姓名,\n");
	scanf("%s%s", p0->reader_num, p0->reader_name);
	p0->right = 0;
	for (i = 0; i < Max; i++)
	{
		strcpy(p0->brrow[i].jy_num, "0");
		strcpy(p0->brrow[i].limit_date, "0");

	}
	p0->next = NULL;
	p0->m=++m;
	printf("读者信息初始化完毕!\n");
	getchar();


}
void jy()
{

	book *p0;
	RD *p1;
	char bo_num[10], rea_num[10], lim_date[20];
	int i;
	p0 = head_book;
	p1 = head_reader;
	printf("\n 借书模块\n");
	printf("\n输入要借阅书籍的读者编号\n");
	scanf("%s", rea_num);
	while (p1->next != NULL && strcmp(rea_num, p1->reader_num) != 0)
	{
		p1 = p1->next;

	}
	if (p1->next == NULL && strcmp(rea_num, p1->reader_num) != 0)
	{
		printf("此读者编号不存在!\n");
		getchar();
	}
	printf("请输入你要借书的编号");
	scanf("%s", bo_num);
	while (strcmp(bo_num, p0->book_num) != 0 && p0->next != NULL)
	{
		p0 = p0->next;
	}
	if (p0->next == NULL && strcmp(bo_num, p0->book_num) != 0)
	{
		printf("此图书编号不存在!\n");
	}
	else
		if (p0->book_xkc <= 0)
		{

			printf("抱歉,此书已借完!");

		}
		else
			if (p1->right >= Max)
			{
				printf("您的借书数目已满!不能借书!\n");

			}
			else
				if (strcmp(p1->brrow[0].jy_num, "0") != 0)
				{
					for (i = 0; i < Max; i++)
					{
						if (strcmp(p1->brrow[i].jy_num, bo_num) == 0)
						{
							printf("抱歉!同一个读者不能借阅两本相同的书!\n");
						}
						else
							if (strcmp(p1->brrow[i].jy_num, "0") == 0)
							{
								printf("请输入你要归还书的日期:");
								scanf("%s", lim_date);
								strcpy(p1->brrow[p1->right++].jy_num, bo_num);
								strcpy(p1->brrow[p1->right - 1].limit_date, lim_date);
								p0->book_xkc--;
								printf("读者编号%s借书完毕!", p1->reader_num);


							}
					}
				}
				else
				{
					printf("请输入你要归还图书的日期:");
					scanf("%s", lim_date);
					strcpy(p1->brrow[p1->right++].jy_num, bo_num);
					strcpy(p1->brrow[p1->right - 1].limit_date, lim_date);
					p0->book_xkc--;
					printf("读者编号%s借书完毕!\n", p1->reader_num);
				}
	



}

void gh()
{
	book *p; RD *q;
	int i, j, zd = 0;
	char gh_num[10], return_reader_num[10];
	p = head_book;
	q = head_reader;
	printf("\n还书模块\n");
	printf("\n请输入要还书的读者编号:");
	scanf("%s", return_reader_num);
	while (q->next != NULL && strcmp(return_reader_num, q->reader_num) != 0)
	{
		q = q->next;

	}
	if (q->next == NULL && strcmp(return_reader_num, q->reader_num) != 0)
	{
		zd = 2;
		printf("此读者编号不存在!\n");
		getchar();
	}
	printf("\n请输入读者还书的编号:");
	scanf("%s", gh_num);
	while (p->next != NULL && strcmp(gh_num, p->book_num) != 0)
	{
		p = p->next;

	}
	if (p->next == NULL && strcmp(gh_num, p->book_num) != 0)
	{
		zd = 2;
		printf("此图书编号不存在!\n");
		goto end;
	}
	for (i = 0; i < Max; i++)
	{
		if ((strcmp(gh_num, q->brrow[i].jy_num)) == 0)
		{
			zd = 1;
			for (j = 0; j <= Max - 1; j++)
			{
				strcpy(q->brrow[j].jy_num, q->brrow[j + 1].jy_num);
				strcpy(q->brrow[j].limit_date, q->brrow[j + 1].limit_date);

			}
			strcpy(q->brrow[Max - 1].jy_num, "0");
			strcpy(q->brrow[Max - 1].limit_date, "0");
			p->book_xkc++;
			q->right--;
			printf("编号%s的读者还书完毕!", return_reader_num);
		}
	}
	if (find == 0)
	{
		printf("错误!此读者未借此书!\n");

	}

}

void  Print_book()
{
	book *p;

	p = head_book;
	printf("\n图书信息如下\n\n");
    while(p!=NULL)
    {
  	printf("%s\t\t%s\t\t%s\t\t%d\t%d\n",p->book_num,p->book_name,p->book_writer,p->book_xkc,p->book_zkc);
  	p=p->next;
    }
    printf("\n图书信息打印完毕!"); 
	getchar();

}
void Print_reader()
{

	RD *p;
	int i,j;
	char num[10];
	p = head_reader;
	printf("\n请输入查询的读者编号\n\n");
    scanf("%s",e);
    for(j=0;j<m;j++)
    {
    	
    	if(strcmp(p->reader_num,num)==0)
    	{
    		printf("\n 读者信息如下:\n\n");
    		printf("\n 读者书证号\t读者姓名\n\n");
    		printf("%s\t\t%s",p->reader_num,p->reader_name);
    		for(i=0;i<Max;i++)
    		{
    			printf("\n");
    			printf("图书编号",i+1);
				printf("\t 还书日期",i+1);
    			printf("\n");
    			printf("\t%s",p->brrow[i].jy_num);
    			printf("\t\t%s",p->brrow[i].limit_date);
			}
			printf("\n");
			break;
    			
		}
		else 
		p=p->next;
	}
	printf("\n读者信息打印完毕!");
	getchar();
}

main.cpp

int main()
{
	system("color 74");
	login1();
	Menu_select();
	return 0;
}

最后 如果要做什么课设类的
欢迎私聊联系博主

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

goddemon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值