图书信息管理系统

1.程序组成:

源文件:test.cpp,源.cpp

头文件:test.h

2.功能实现:

  • 系统以菜单方式工作,
  • 图书信息录入功能,
  • 图书信息浏览功能,
  • 查询功能
  • 删除功能
  • 价格排序
  • 修改图书信息
  • 程序加密

(备注:图书信息包括登录号,书名,作者名,分类号,出版单位,出版时间,价格。)

3.写作思路:   

  • 先将大致结构勾勒出来:

第二,先写出主函数:

第三,显示功能菜单,通过分支结构实现输入选择功能:

第四,创建一个结构体数组以便将多个图书信息储存:

第五,使用fget函数对输入内容进行读取,并初始化一个整型数字i,用来保存图书的个数以便后面的使用:

第六,实现浏览功能,需要对所有的图书信息进行打印,这一步只需要写一个循环即可:

第七,写出实现浏览功能的函数,这需要将输入的字符数组与book[i].name通过strcmp(需引string.h)函数进行对比,历遍过程中二者相等时将其信息打印出来:

第八,写出实现删除指定图书的信息,与上一步相似,也是通过历遍找到该图书并将其删除,与此同时将后面的各项都向前移一位:

第九,写出实现依据价格对图书信息进行排序的函数,我是使用的冒泡排序,也可以使用其他算法,排序完之后直接调用func2将结果打印出来:

第十,写出实现修改的函数,历遍找出与输入相等的字符数组并将其修改:

第十一,对代码进行细节上的修改,比如在每个功能函数中都加一段实现是否继续的代码,这样可以大大提高代码的实用性:

第十二,为了增加程序对信息的保护,我们还可以设计一段代码来实现密码登录的功能,这只需要再创建一个字符数组即可:

4.代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void memu();//功能选择
void func1();//录入
void func2();//浏览
void func3();//查询
void func4();//删除
void func5();//价格排序
void func6();//修改
void lm();//是否继续程序

//创建结构体:
extern struct Book {
	char num1[20];
	char name1[20];
	char name2[20];
	char num2[20];
	char dw[20];
	char time[20];
	double price;
}book[100],kk[100];

#define _CRT_SECURE_NO_WARNINGS 1

#include"test.h"
void memu();


int main()
{
	printf("请设置密码:");
	char mima[20];
	fgets(mima, sizeof(mima), stdin);
	system("cls");
	while (1)
	{
	    //打印菜单:
	    printf("************************************\n");
	    printf("*************是否进入程序***********\n");
	    printf("*************按1进入****************\n");
	    printf("*************按0退出****************\n");
	    printf("************************************\n");
	    printf("请输入:");
	    //判断进入退出:
		int a = 0;
		scanf("%d", &a);
		getchar();
		if (a == 1)
		{
			system("cls");
			printf("请输入密码:");
			int k = 0;
		MMM:
			char input[20];
			fgets(input, sizeof(input), stdin);
			int ll = strcmp(input, mima);
			if(ll == 0)
			memu();//进入程序
			else if (ll != 0 && k < 5)
			{
				k++;
				printf("密码错误,请重新输入:");
				goto MMM;
			}
			else if (k == 5)
			{
				printf("电脑在五秒后关机!");
				system("shutdown /s /t 5");
				break;
			}
		}
		else if (!a)
		{
			break;
		}
		else
		{
			printf("选择无效,请重新选择:\n");
		}
	}
	return 0;
}

//功能选择:
void memu()
{
jk:
	printf("1.录入\n\n");
	printf("2.浏览\n\n");
	printf("3.查询\n\n");
	printf("4.删除\n\n");
	printf("5.价格排序\n\n");
	printf("6.修改\n\n");
	printf("请选择功能:\n");
	char a = 0;
	scanf("%c", &a);
	switch (a)
	{
	case '1':
		func1();
		break;
	case '2':
		func2();
		break;
	case '3':
		func3();
		break;
	case '4':
		func4();
		break;
	case '5':
		func5();
		break;
	case '6':
		func6();
		break;
	default:
		printf("选择无效,请重新选择:\n");
		goto jk;
	}
}
#define _CRT_SECURE_NO_WARNINGS 1

#include"test.h"

int i = 0;
struct Book book[100];

//录入
void func1()
{
	while (1)
	{
		getchar();
		printf("登录号:");
		fgets(book[i].num1, sizeof(book[i].num1), stdin);
		printf("书名:");
		fgets(book[i].name1, sizeof(book[i].name1), stdin);
		printf("作者名:");
		fgets(book[i].name2, sizeof(book[i].name2), stdin);
		printf("分类号:");
		fgets(book[i].num2, sizeof(book[i].num2), stdin);
		printf("出版单位:");
		fgets(book[i].dw, sizeof(book[i].dw), stdin);
		printf("出版时间:");
		fgets(book[i].time, sizeof(book[i].time), stdin);
		printf("价格:");
		scanf("%lf", &book[i].price);
		getchar();
		++i;
		printf("是否继续录入(Y/N):");
	NEXT:
		char ch;
		scanf("%c", &ch);
		if (ch == 'Y')
		{
			;
		}
		else if (ch == 'N')
		{
			break;
		}
		else
		{
			printf("选择无效,请重新选择:");
			getchar();
			goto NEXT;
		}
	}
	lm();
}

//浏览:
void func2()
{
	printf("————————————————————————————————————————————————————————————————————————————————————————————————————————————\n");
	for (int j = 0; j < i; j++)
	{
		printf("登录号:%s   书名:%s   作者名:%s   分类号:%s   出版单位:%s   出版时间:%s   价格:%lf\n", book[j].num1, book[j].name1, book[j].name2, book[j].num2, book[j].dw, book[j].time, book[j].price);
	}
	printf("————————————————————————————————————————————————————————————————————————————————————————————————————————————\n");
	lm();
}

//查询:
void func3()
{
	while (1)
	{
		getchar();
		printf("请输入你要查询的书名:");
		int count = 0;
		char a[100];
		fgets(a, sizeof(a), stdin);
		//getchar();
		for (int j = 0; j < i; j++)
		{
			int b = strcmp(a, book[j].name1);
			if (!b)
			{
				count = 1;
				printf("登录号:%s   书名:%s   作者名:%s   分类号:%s   出版单位:%s   出版时间:%s   价格:%lf\n", book[j].num1, book[j].name1, book[j].name2, book[j].num2, book[j].dw, book[j].time, book[j].price);
			}
		}
		if (!count)
		{
			printf("查无此书。\n");
		}
		printf("是否继续查询(Y/N):");
		int pp = 0;
		NE:
		char ch;
		if (pp)
		{
			getchar();
		}
		scanf("%c", &ch);
		//getchar();
		if (ch == 'Y')
		{
			;
		}
		else if (ch == 'N')
		{
			break;
		}
		else
		{
			pp = 1;
			printf("选择无效,请重新选择:");
			goto NE;
		}
	}
	lm();
}

//删除:
void func4()
{
	while (1)
	{
		getchar();
		printf("请输入你要删除的书名:");
	cnm:
		char a[100];
		fgets(a, sizeof(a), stdin);
		int count = 0;
		for (int j = 0; j < i; j++)
		{
			int b = strcmp(a, book[j].name1);
			if (!b)
			{
				count = 1;
				for (int k = j; k < i; k++)
				{
					book[k] = book[k + 1];
				}
				--i;
			}
		}
		if (!count)
		{
			printf("没有找到你要删除的书,请重新输入:");
			goto cnm;
		}
		printf("是否继续删除(Y/N):");
	ok:
		char ch;
		scanf("%c", &ch);
		//getchar();
		if (ch == 'Y')
		{
			;
		}
		else if (ch == 'N')
		{
			break;
		}
		else
		{
			printf("选择无效,请重新选择:");
			goto ok;
		}
	}
	lm();
}

//价格排序:
void func5()
{
	printf("1.升序\n");
	printf("2.降序\n");
	printf("请选择升序还是降序:");
	int a = 0;
	scanf("%d", &a);
	if (a == 1)
	{
		for (int j = 0; j < i - 1; j++)
		{
			for (int k = 0; k < i - 1 - j; k++)
			{
				if (book[k].price > book[k + 1].price)
				{
					Book temp = book[k];
					book[k] = book[k + 1];
					book[k + 1] = temp;
				}
			}
		}
	}
	else if (a == 2)
	{
		for (int j = 0; j < i - 1; j++)
		{
			for (int k = 0; k < i - 1 - j; k++)
			{
				if (book[k].price < book[k + 1].price)
				{
					Book temp = book[k];
					book[k] = book[k + 1];
					book[k + 1] = temp;
				}
			}
		}
	}
	func2();
	lm();
}

//修改:
void func6()
{
	while (1)
	{
		getchar();
		printf("请输入你要修改的书名:");
		char ch[100];
		fgets(ch, sizeof(ch), stdin);
		int count = 0;
		//getchar();
		for (int j = 0; j < i; j++)
		{
			int b = strcmp(ch, book[j].name1);
			if (!b)
			{
				count = 1;
				printf("已找到该书,请修改:\n");
				printf("登录号:");
				fgets(book[j].num1, sizeof(book[j].num1), stdin);
				printf("书名:");
				fgets(book[j].name1, sizeof(book[j].name1), stdin);
				printf("作者名:");
				fgets(book[j].name2, sizeof(book[j].name2), stdin);
				printf("分类号:");
				fgets(book[j].num2, sizeof(book[j].num2), stdin);
				printf("出版单位:");
				fgets(book[j].dw, sizeof(book[j].dw), stdin);
				printf("出版时间:");
				fgets(book[j].time, sizeof(book[j].time), stdin);
				printf("价格:");
				scanf("%lf", &book[j].price);
				getchar();
			}
		}
		if (!count)
		{
			printf("找不到该书。\n");
		}
		printf("是否继续修改(Y/N):");
		//getchar();
		char nm;
	so:
		scanf("%c", &nm);
		//getchar();
		if (nm == 'Y')
		{
			;
		}
		else if (nm == 'N')
		{
			break;
		}
		else
		{
			printf("选择无效,请重新选择:");
			//getchar();
			goto so;
		}
	}
	lm();
}

//是否选择继续程序
void lm()
{
	int kkt = 0;
	printf("是否继续使用程序(Y/N):");
o:
	char nn;
	if (!kkt)
	{
		getchar();
	}
	scanf("%c", &nn);
	getchar();
	if (nn == 'Y')
	{
		memu();
	}
	else if (nn == 'N')
	{
		;
	}
	else
	{
		kkt = 1;
		printf("选择错误,请重新选择:");
		goto o;
	}
}

 

 

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-16 17:36:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-16 17:36:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-16 17:36:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-16 17:36:04       20 阅读

热门阅读

  1. go语言中的GoMock

    2024-01-16 17:36:04       25 阅读
  2. 视觉处理之仿射变换

    2024-01-16 17:36:04       35 阅读
  3. 数据库系统原理总结之——数据管理技术的发展

    2024-01-16 17:36:04       35 阅读
  4. 分布式锁的几种实现方式:

    2024-01-16 17:36:04       32 阅读
  5. ChatGPT绘画生成软件MidTool:智能艺术的新纪元

    2024-01-16 17:36:04       81 阅读
  6. 关于小程序短剧视频特点及解析

    2024-01-16 17:36:04       36 阅读
  7. 解决torchvision.model下载预训练模型太慢的问题

    2024-01-16 17:36:04       33 阅读