include
include
include<stdlib.h>
include
include
pragma warning(disable:4996)
using namespace std;
define N 20
struct book //一本书所应该包含的内容(名字,书籍编码,作者,出版社,库存)
{
int num; //书籍编码
char name[N]; //名字
char author[N];//作者
int total; //这本书总共数量
int price; //单价
char pub[N]; //出版社
int year; //出版时间
int month; //出版时间
int day; //出版时间
book* next;
book* pre;
};
int n = 0;
void save(book *head)
{
book* p;
p = head->next;
ofstream outFile("D:\\图书馆信息.txt");
if (!outFile)
{
cerr << "open error" << endl;
return;
}
while (p->next!=NULL)
{
outFile << setw(15) << p->num;
outFile << setw(20) << p->name;
outFile << setw(20) << p->author;
outFile << setw(20) << p->pub;
outFile << setw(20) << p->price;
outFile << setw(20) << p->total;
outFile << setw(20) << p->year;
outFile << setw(20) << p->month;
outFile << setw(20) << p->day;
outFile << endl;
p = p->next;
}
outFile << resetiosflags(ios::left) << endl;
outFile.close();
cout << "存盘成功!" << endl;}
/****增加书籍**/
book* output_creat()
{
int num; //书籍编码
char name[N]; //名字
char author[N];//作者
int total; //这本书总共数量
int price; //单价
char pub[N]; //出版社
int year; //出版时间
int month; //出版时间
int day;
book* p, * head, * q;
head = (book)malloc(sizeof(book));
p = q = head;
//p = (book)malloc(sizeof(book));
FILE* r = fopen("D:\图书馆信息.txt", "r");
if (r == NULL)
{
printf("打开文件失败!");
return NULL;
}
while (fscanf(r, "%d %s %s %s %d %d %d %d %d", &num, name, author, pub, &price, &total, &year, &month, &day) != EOF)
{
q = (book*)malloc(sizeof(book));
q->num = num; strcpy(q->name, name); strcpy(q->author, author); strcpy(q->pub, pub);
q->price = price; q->total = total; q->year = year; q->month = month; q->day = day;
p->next = q;
q->pre = p;
p = q;
}
book* pa = (book*)malloc(sizeof(book));
p->next=pa;
pa->pre = p;
book* pt;
pt = pa;
cout << "请输入要增加的书籍编号,输入为0时停止输入: ";
cin >> pa->num;
while (pa->num != 0)
{
cout << "请输入书籍名字:";
cin >> pa->name;
cout << "请输入书籍作者:";
cin >> pa->author;
cout << "请输入书籍出版社:";
cin >> pa->pub;
cout << "请输入书籍单价:";
cin >> pa->price;
cout << "请输入要添加该书籍数目:";
cin >> pa->total;
cout << "请输入该书籍出版的时间:";
cin >> pa->year >> pa->month >> pa->day;
cout << "请输入要增加的书籍编号,输入为0时停止输入: ";
pa = new(book); //继续开辟动态内存存储空间存放新结点
pt->next = pa;//往下链接新建立的结点
pa->pre = pt;
pt = pa;
cin >> pa->num;
}
pt->next= NULL;
cout << endl << endl;
return head;}
/*****输出显示当前书籍信息***/
void print(book* head)//输出链表
{
book* p;
p = head->next;
if (p == NULL)
{
cout << "书库里没有书籍! " << endl;
return;
}
cout << "目前书库所含书籍信息为:" << endl
<< "编号" << " " << "名字" << " "
<< "作者" << " " << "出版社" << " "
<< "数目" << endl;
do
{
cout << p->num << " " << p->name << " " //对齐
<< p->author << " " << p->pub << " "
<< p->total << " " << p->year << " " << p->month << " " << p->day << endl;
p = p->next;
} while (p != NULL);}
/****删除书籍**/
void del(book* head) //删除结点
{
book* p1, * p2;
int num;
int num1;
if (head == NULL) //如果原先链表为空
{
cout << "书库里没有书籍!" << endl;
return;
}
cout << "请输入要删除书籍的编码:" << endl;
cin >> num;
cout << "请输入要删除书籍的数目:" << endl;
cin >> num1;
p1 = head;
while (num != p1->num && p1->next != NULL) //找不到相应的结点就往下继续搜索
{
p2 = p1;
p1 = p1->next;
if (num == p1->num) //找到结点
{
if (p1 == head) //结点是第一位
head = p1->next;
else //结点不是第一位
{
if (p1->total < num1)
{
cout << "该图书馆存货数量为" <<p1->total<<endl;
break;
}
if (p1->total == num)
{
p2->next = p1->next;
}
else
{
p1->total -= num1;}}
cout << "删除成功" << endl << endl;
n--;
print(head);
}
else
cout << "不存在该编号的书籍" << endl << endl;
}</p1->
}
/****通过编号查询书籍**/
void find_num(book* head) //删除结点
{
int flag = 0;
book* p1;
int num;
cout << "请输入要查询的书籍编号:" << endl;
cin >> num;
if (head == NULL) //如果原先链表为空
{
cout << "书库里没有书籍!" << endl;
return;
}
p1 = head;
while (p1->next != NULL) //找不到相应的结点就往下继续搜索
{
p1 = p1->next;
if (num == p1->num) //找到结点
{
cout << "查找到的书籍信息为:" << endl
<< "编号" << " " << "名字" << " "
<< "作者" << " " << "出版社" << " "
<< "数目" << endl;
cout << p1->num << " " << p1->name << " "
<< p1->author << " " << p1->pub << " "
<< p1->total << endl;
flag += 1;
}
}
if (flag == 0)
cout << "找不到该书籍!" << endl << endl;}
/****通过书名查询书籍**/
void find_name(book* head) //删除结点
{
int flag = 0;
book* p1;
char name[N];
cout << "请输入要查询的书籍名字:" << endl;
cin >> name;
if (head == NULL) //如果原先链表为空
{
cout << "书库里没有书籍!" << endl;
return;
}
p1 = head;
while (p1->next != NULL) //找不到相应的结点就往下继续搜索
{
p1 = p1->next;
if (strcmp(name, p1->name) == 0) //找到结点
{
cout << "查找到的书籍信息为:" << endl
<< "编号" << " " << "名字" << " "
<< "作者" << " " << "出版社" << " "
<< "数目" << endl;
cout << p1->num << " " << p1->name << " "
<< p1->author << " " << p1->pub << " "
<< p1->total << endl;
flag += 1;
}
}
if(flag==0)
cout << "找不到该书籍!" << endl << endl;}
/*****借阅书籍***/
void borrow(book* head)
{
int flag = 0;
if (head == NULL) //如果原先链表为空
{
cout << "书库里没有书籍!" << endl;
return;
}
cout << "请输入要借阅书籍的名称:" << endl;
char name[N];
cin >> name;
book* p1;
p1 = head;
while (strcmp(name, p1->name) != 0 && p1->next != NULL) //找不到相应的结点就往下继续搜索
{
p1 = p1->next;
if (strcmp(name, p1->name) == 0) //找到结点
{
cout << "查找到的书籍信息为:" << endl
<< "编号" << " " << "名字" << " "
<< "作者" << " " << "出版社" << " "
<< "数目" << endl;
cout << p1->num << " " << p1->name << " "
<< p1->author << " " << p1->pub << " "
<< p1->total << endl;
if (p1->total != 0)
{
cout << "确定要借阅该书籍吗?" << endl
<< "1.确定" << '\t' << "2.取消" << endl;
int num; cin >> num;
switch (num)
{
case 1:
cout << "借阅成功!" << endl;
(p1->total)--;
flag += 1; break;
case 2:
break;
default:cout << "输入有误!" << endl; break;
}
}
else
cout << "书籍已全被借阅!" << endl;
}
}
if(flag==0)
cout << "找不到该书籍!" << endl << endl;}
/*****归还书籍*****/
void back(book* head)
{
if (head == NULL) //如果原先链表为空
{
cout << "书库未借出过任何书籍! " << endl;
return;
}
cout << "请输入要归还书籍的名称:" << endl;
char name[N];
cin >> name;
book* p1;
p1 = head;
while (strcmp(name, p1->name) != 0 && p1->next != NULL) //找不到相应的结点就往下继续搜索
{
p1 = p1->next;
}
if (strcmp(name, p1->name) == 0) //找到结点
{
cout << "确定要归还该书籍吗?" << endl
<< "1.确定" << '\t' << "2.取消" << endl;
int num; cin >> num;
switch (num)
{
case 1:
cout << "还书成功!" << endl;
(p1->total)+=1; break;
case 2:
break;
default:cout << "输入有误!" << endl; break;
}
}
else
cout << "不存在该书籍!" << endl << endl;
}
/***读盘****/
/***读盘****/
book* output()
{
int num; //书籍编码
char name[N]; //名字
char author[N];//作者
int total; //这本书总共数量
int price; //单价
char pub[N]; //出版社
int year; //出版时间
int month; //出版时间
int day;
book head= (book)malloc(sizeof(book));
head->next = NULL;
book* p, * q;
p =head;
//p = (book)malloc(sizeof(book));
FILE r = fopen("D:\图书馆信息.txt", "r");
if (r == NULL)
{
printf("打开文件失败!");
return NULL;
}
while (fscanf(r, "%d %s %s %s %d %d %d %d %d", &num, name, author, pub, &price, &total, &year, &month, &day) != EOF)
{
q = (book*)malloc(sizeof(book));
q->num = num; strcpy(q->name, name); strcpy(q->author, author); strcpy(q->pub, pub);
q->price = price; q->total = total; q->year = year; q->month = month; q->day = day;
p->next = q;
p = q;
}
p->next = NULL;
return head;}
/***查询菜单***/
void find()
{
int num;
book* h;
cout << " ***" << endl;
cout << " * 请输入对应功能的数字完成操作 *" << endl;
cout << " * 1.通过编号查找 *" << endl;
cout << " * 2.通过书名查找 *" << endl;
cout << " ***" << endl;
cin >> num;
switch (num)
{
case 1: h = output();
find_num(h);
break;
case 2: h = output();
find_name(h);
break;
default:cout << "输入有误!" << endl; break;
}
}
/****修改书籍*****/
void xg(book head) {
if (head == NULL) //如果原先链表为空
{
cout << "书库里没有书籍!" << endl;
return;
}
cout << "请输入要借阅书籍的名称:" << endl;
char name[N];
cin >> name;
book p1;
p1 = head;
while (strcmp(name, p1->name) != 0 && p1->next != NULL) //找不到相应的结点就往下继续搜索
{
p1 = p1->next;
}
if (strcmp(name, p1->name) == 0) //找到结点
{
if (p1->total != 0)
{
cout << "确定要修改该书籍吗?" << endl
<< "1.确定" << '\t' << "2.取消" << endl;
int num; cin >> num;
switch (num)
{
case 1:
cout << "请输入要修改的内容" << endl
<< "1.编号" << '\t' << "2,书名" << '\t' << "3.作者" << '\t' <<
"4.出版社" << '\t'<<"5,书籍单价" << "6.书籍总数" << '\t' << "7.书籍出版年" << '\t'
<< "8.书籍出版月" << '\t' << "9.书籍出版日" << endl;
int num;
cin >> num;
switch (num)
{
case 1:
int num;
cin >> num;
p1->num = num;
break;
case 2:
char name[N];
cin >> name;
strcpy(p1->name, name);
break;
case 3:
char author[N];
cin >> author;
strcpy(p1->author, author);
break;
case 4:
char pub[N];
cin >> pub;
strcpy(p1->pub, pub);
break;
case 5:
int price;
cin >> price;
p1->price = price;
break;
case 6:
int total;
cin >> total;
p1->total = total;
break;
case 7:
int year;
cin >> year;
p1->year = year;
break;
case 8:
int month;
cin >> month;
p1->month = month;
break;
case 9:
int day;
cin >> day;
p1->day = day;
break;
default:cout << "输入有误!" << endl;
break;
}
break;
case 2:
break;
default:cout << "输入有误!" << endl; break;
}
}
else
cout << "书籍已全被借阅!" << endl;
}
else
cout << "找不到该书籍!" << endl << endl;}
/***管理菜单***/
void manage()
{
int num1;
cout << "请输入管理员密码(123456):" << endl; //规定只有管理员才有权限增减图书
cin >> num1;
book* c;
if (num1 == 123456)
{
int num;
cout << " ***" << endl;
cout << " * 请输入对应功能的数字完成操作 *" << endl;
cout << " * 1.增加书籍 *" << endl;
cout << " * 2.删除书籍 *" << endl;
cout << " * 3.修改书籍 *" << endl;
cout << " ***" << endl;
cin >> num;
switch (num)
{
case 1:c=output_creat();
save(c);
break;
case 2:c = output();
del(c);
save(c);
break;
case 3:c = output();
xg(c);
save(c);
break;
default:cout << "输入有误!" << endl; break;
}
}
else
cout << "输入错误,你没有权限修改图书管理系统!" << endl;
}
void displaymain()
{
cout << " ***" << endl;
cout << " * 请输入对应功能的数字完成操作 *" << endl;
cout << " * 1.查询 *" << endl;
cout << " * 2.借书 *" << endl;
cout << " * 3.还书 *" << endl;
cout << " * 4.管理 *" << endl;
cout << " * 5.书库 *" << endl;
cout << " * 6.退出 *" << endl;
cout << " ***" << endl;
}
int main()
{
cout << endl << " 欢迎使用图书管理系统" << endl << endl;
int choice = 1;
book* a;
while (choice != 0)
{
displaymain();
cin >> choice;
switch (choice)
{
case 1: find(); break;
case 2: a = output(); borrow(a);
save(a); break;
case 3: a = output(); back(a);
save(a); break;
case 4: manage(); break;
case 5: a = output();
print(a);
break;
case 6: choice = 0; break;
default:cout << "输入有误,请重新输入!" << endl; break;
}
}
cout << " ***" << endl;
cout << " * *" << endl;
cout << " * *" << endl;
cout << " * 感谢您的使用! *" << endl;
cout << " * *" << endl;
cout << " * *" << endl;
cout << " ***" << endl;
system("pause");
return 0;
};

京公网安备 11010502036488号