图书管理系统

这个C++程序实现了一个图书管理系统,包括输入、修改、查询、借书和排序等功能。使用文件操作存储数据,动态链表管理和快速排序算法。程序还包括一个简单的密码验证和友好的用户交互界面。
摘要由CSDN通过智能技术生成
/*   tushuguan.cpp 20131001 liangyuekang   */
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <conio.h>
#include <windows.h>
/*
 *	程序设计功能和亮点	编译器VC++6.0	
 *	1.可以输入数据,修改数据,查询图书信息,借书和对图书信息排序;
 *	2.输入和修改数据使用了文件操作,输入使用单向动态链表,动态分配内存;
 *	3.排序采用快速排序法;
 *	4.美化了操作界面,增加输入密码界面,密码为123456;
 *	不足:排序依然分配了结构体数组来排序,较浪费内存.
 */
#define LEN sizeof(struct Book);
struct Book{
	int book_num;
	char book_name[20];
	int book_price;
	int book_borrow;
	struct Book * next;
};//声明结构体
int n=0;
struct Book * creat(int count);//CURD的C部分
void gotoxy(int x, int y);//定位函数,原理来自C++
void headtitle();//标题
void file_write(struct Book * head);//文件写入函数
void read();//CURD的R部分
void read_num(int num);
void read_name(char name[20]);
void read_borrow();
void update();//CURD的U部分,可以兼顾D部分
void update_info(char name[20],int num);
void borrow();//借书
void borrow_info(char name[20],int num);
void sort();//排序
void sort_num_1();
void sort_num_2();
void sort_num_3();
void sort_num_4();
int cmp( const void *a , const void *b );
int cmp1( const void *a , const void *b );
int cmp2( const void *a , const void *b );
int cmp3( const void *a , const void *b );
void input(struct Book * head);//输入函数
int password();//开场密码
void footer_main();//返回用标题
void footer_read();
void footer_sort();
void start();//开场动画
void main(){//主函数
	struct Book * head=NULL;
	char judge=0;
	int flag=0;
	start();
	flag=password();
	if(flag==1){
		headtitle();
		while(judge!=27){
			int num=-1;
			judge=getch();
			switch(judge){
			case 'C':
			case 'c':
				input(head);
				footer_main();
				break;
			case 'U':
			case 'u':				
				update();
				footer_main();
				break;
			case 'R':
			case 'r':				
				read();//打印动态链表
				footer_main();
				break;
			case 'B':
			case 'b':
				borrow();
				footer_main();
				break;
			case 'S':
			case 's':
				sort();
				footer_main();
				break;
			default:break;
			}
		}
	}
}
void start(){
	int i;
	int x=73;
	gotoxy(5,5);
	for(i=0;i<70;i++)
	{	printf("=");
		Sleep(50);
	}	
	for(i=0;i<70;i++)
	{	printf("=");
		gotoxy(x--,20);
		Sleep(50);
	}
	gotoxy(15,10);
	printf("图");
	Sleep(150);
	printf("书");
	Sleep(150);
	printf("管");
	Sleep(150);
	printf("理");
	Sleep(150);
	printf("系");
	Sleep(150);
	printf("统");
	printf("              ");
	Sleep(150);
	printf("作");
	Sleep(150);
	printf("者");
	Sleep(150);
	printf(":");
	Sleep(300);
	printf("梁");
	Sleep(300);
	printf("月");
	Sleep(300);
	printf("康          ");
	Sleep(500);
	printf("12电信");
	Sleep(3000);
	system("cls");
}
void gotoxy(int x, int y)//x为列坐标,y为行坐标
{
	COORD pos = {x,y};
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hOut, pos);
}
int password(){
	char a[7]="123456",b[7]="";
    int i,n=3,flag=1,result=0;
	gotoxy(15,0);
	printf("	      欢迎使用图书管理系统beta1.0\n\n                                请输入密码\n");
    while(n>0)
    {
		gotoxy(19,3);
		printf("|=====================================|\n");
		printf("		   |					 |\n");
		printf("		   |					 |\n");
		printf("		   |					 |\n");
		printf("		   |					 |\n");
		printf("		   |					 |\n");
		printf("		   |					 |\n");
		printf("		   |					 |\n");
		printf("		   |					 |\n");
		printf("		   |=====================================|");
		gotoxy(35,7);
		printf("______");
		gotoxy(35,7);
		for(i=0;i<6;i++)
		{
			b[i]=getch();
			printf("*");
		}
			gotoxy(15,13);
			printf("你输入的是%s\n",b);//输入后可见输入内容
		if(strcmp(b,a)==0)
		{
			gotoxy(15,14);
			printf("输入正确,第一次使用请先进入输入功能区,按任意键继续\n");
			flag=1;
			getch();
			system("cls");
			break;
		}else{
			n--;
			gotoxy(15,14);
			printf("你还有 %d 次机会\n                 按任意键继续",n);
			flag=0;
			getch();
			system("cls");
			gotoxy(15,0);
			printf("	      欢迎使用图书管理系统beta1.0\n\n                                请输入密码\n");
		}
	}
	if ((n>=0)&&(flag==1)){
		result=1;
		return(result);
	}else{
		return(0);
	}
}	
void headtitle(){
		printf("	      欢迎使用图书管理系统beta1.0\n\n");		
		printf("请选择操作:");
		Sleep(100);
		printf("|输入Cc输入|");
		Sleep(100);
		printf("输入Uu修改|");
		Sleep(100);
		printf("输入Bb借书|");
		Sleep(100);
		printf("输入Rr查询|");
		Sleep(100);
		printf("输入Ss排序|");
		Sleep(100);
		printf("\n|输入esc结束\n\n");
		Sleep(100);
		


}
struct Book * creat(int count){
	FILE *fp;
	struct Book *head;//头指针
	struct Book p;
	struct Book *p1, *p2;
	int i=0;
	int y=8;
	n=0;
	int num=1;
	p1 = p2 =(struct Book *)malloc(sizeof(struct Book));//动态分配内存
	if((fp=fopen("book.dat","rb"))!=NULL){
		fseek(fp,-1*sizeof(struct Book),2);
		fread(&p,sizeof(struct Book),1,fp);		
		num=p.book_num+1;	
		rewind(fp);}
		printf("|===========================================================|\n");
		printf("|书名:\n");
		printf("|===========================================================|\n");				
		printf("|【当前序号为%d】\n",num);
		printf("|===========================================================|\n");
		printf("|价格:\n");
		printf("|===========================================================|\n");				
		printf("|借出状态:借出输入0,在馆输入1\n");
		printf("|===========================================================|\n");
		gotoxy(7,y);
		scanf("%s",p1->book_name);
		gotoxy(23,y+=2);
		p1->book_num=num;
		gotoxy(7,y+=2);
		scanf("%d",&p1->book_price);
		gotoxy(30,y+=2);
		scanf("%d",&p1->book_borrow);	//输入一个结构体
	
	head=NULL;//头指针置空
	while(p1->book_num!=0&&i<=count){//当书的编号不为空时也就是有输入的时候,把p1p2指向第一个链表
		n=n+1;
		if(n==1){
			head=p1;//如果是第一个链表则p1赋值给头指针
		}else{
			p2->next=p1;//不是第一个,则将第一个指向第二链表
			p2=p1;//让p2指向第一个链表
			p1=(struct Book * )malloc(sizeof(struct Book));//给p1指向一个全新的链表
			if(i==count){
				p1->book_num=0;
				p1->book_borrow=0;				
				p1->
图书管理系统设计” 1、问题描述 定义图书类,属性有:书名、出版社、ISBN 号、作者、库存量、价格等信息和相关的 对属性做操作的行为。 主要完成对图书的销售、统计和图书的简单管理。 2、功能要求 (1)销售功能。购买书籍时,输入相应的 ISBN 号,并在书库中查找该书的相关信息。 如果有库存量,输入购买的册数,进行相应计算。如果库存量不够,给出提示信息,结束购 买。 (2)图书简单管理功能。 添加功能:主要完成图书信息的添加,要求 ISBN 号唯一。当添加了重复的编号时,则 提示数据添加重复并取消添加。 查询功能:可按书名、ISBN 号、作者、出版社进行查询。若存在相应信息,输出所查 询的信息,若不存在该记录,则提示“该标题不存在! ” 。 修改功能:可根据查询结果对相应的记录进行修改,修改时注意 ISBN 号的唯一性。 删除功能:主要完成图书信息的删除。输入要删除的 ISBN 号,根据编号删除该物品的 记录,如果该编号不在物品库中,则提示“该编号不存在” 。 (3)统计功能。 输出当前书库中所有图书的总数及详细信息;可按书的价格、库存量、作者、出版社进 行统计,输出统计信息时,要按从大到小进行排序。 (7)图书存盘:将当前程序中的图书信息存入文件中。 (8)读出信息:从文件中将图书信息读入程序
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值