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;
};