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