/* 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->
图书管理系统
最新推荐文章于 2022-09-21 09:00:00 发布
这个C++程序实现了一个图书管理系统,包括输入、修改、查询、借书和排序等功能。使用文件操作存储数据,动态链表管理和快速排序算法。程序还包括一个简单的密码验证和友好的用户交互界面。
摘要由CSDN通过智能技术生成