• 图书管理系统一


    发现自己好久没有写博客了,上次C++考试发现自己考试时并没有涉及到链表的编程,于是,想通过自己编写图书管理系统来强化自己的链表(这项目看好多人都有做过就自己也试做一下了)

    编程思路:

    • 先使用面向过程的方法编写程序
    • 创建图书馆结构体包含了 id book_name author 变量
    • 目前编写四个函数实现:添加书籍add()、查找目录print()、查找书籍find_menu()find_b()
    • 利用链表的基本作用实现

    代码连接:github

    发现自己已经忘记怎么去创建库和连接本地库,赶紧趁着这个时候再次学习。尴尬0.0

    代码:

    struct Libary {
    	string id;
    	string book_name;
    	string author;
    	//int count;
    	struct Libary * next;
    };   
    
    void add(L * head)//添加书籍
    {
    	L * p=new L;
    	string i, bn, au;
    	cout << "请依次输入书籍编号,书名,作者" << endl;
    	cin >> i >> bn >> au;
    	p->author = au;
    	p->book_name = bn;
    	p->id = i;
    	p->next = NULL;
    	if (head->next == NULL)
    	{
    		head->next = p;
    	}
    	else
    	{
    		L * pre = head;
    		while (pre->next!=NULL)
    		{
    			pre = pre->next;
    		}
    		pre->next = p;
    	}
    	cout << "已添加书籍" << endl;
    }
    void print(L * head)//输出书库目录
    {
    	cout << "目录:" << endl;
    	L * p = head;
    	if (head->next == NULL)
    	{
    		cout << "无书籍" << endl;
    		return;
    	}
    	else
    	{
    		for (p = head->next; p != NULL; p = p->next)
    		{
    			cout <<"书籍编号:"<< p->id << " 书名:《" << p->book_name << "》 作者:" << p->author << endl;
    		}
    	}
    	cout << endl;
    }
    void find_menu(L * head,string fk)//查找方式菜单
    {
    	
    	//string fk;
    	string kinds;
    	int flag = 0;
    	//cin >> fk;
    	if (head->next == NULL)
    	{
    		cout << "书库为空" << endl;
    		return;
    	}
    	if (fk == "id")
    	{
    		cin >> kinds;
    		flag = find_b(head, kinds,fk);
    		if (flag == 0) cout << "查无此编号" << endl;
    	}
    	if (fk == "bn")
    	{
    		cin >> kinds;
    		flag = find_b(head, kinds,fk);
    		if (flag == 0) cout << "查无此书名" << endl;
    	}
    	if (fk == "au")
    	{
    		cin >> kinds;
    		flag = find_b(head, kinds,fk);
    		if (flag == 0) cout << "查无此作者" << endl;
    	}
    }
    
    int find_b(L * head,string kinds,string k)//查找书籍
    {
    	L * p = head;
    	int flag = 0;
    	for (p = head->next; p != NULL; p = p->next)
    	{
    		if (k == "id")
    		{
    			if (p->id == kinds)
    			{
    			flag = 1;
    			cout << "书籍编号:" << p->id << " 书名:《" << p->book_name << "》 作者:" << p->author << endl;
    			}
    		}
    		
    		if (k == "bn")
    		{
    			if (p->book_name == kinds)
    			{
    				flag = 1;
    				cout << "书籍编号:" << p->id << " 书名:《" << p->book_name << "》 作者:" << p->author << endl;
    			}
    		}
    		if (k == "au")
    		{
    			if (p->author == kinds)
    			{
    				flag = 1;
    				cout << "书籍编号:" << p->id << " 书名:《" << p->book_name << "》 作者:" << p->author << endl;
    			}
    		}
    	}
    	return flag;
    }
    
    

    运行结果:

    体会:

    我想尝试的像之前的四则运算一样,一步一步迭代,让这个程序越来越完美——虽然四则运算弄成界面形式我还出现许多bug还没有修改,惭愧0.0

    不足:

    • 添加书籍过程繁琐
    • 没有添加输入有误,请重新输入的情况——写的时候发现进入死循环。。。
    • 还缺少许多功能 例如 :各书库存量统计、借还系统、等等。
    • 没有做到面向对象。
    • 目前在思考将链表放到面向对象中,要怎么修改,会不会出错等等情况
      (ps:还是一步一步慢慢来吧)
  • 相关阅读:
    6 November in 614
    4 November in ss
    标准模板库(STL)
    类模板
    函数模板和模板函数
    关于“宏定义”的作用范围
    运算符重载
    内存分配和释放的函数
    数据库恢复的基础是利用转储的冗余数据
    在局域网络内的某台主机用ping命令测试网络连接时发现网络内部的主机都可以连同,而不能与公网连通,问题可能是
  • 原文地址:https://www.cnblogs.com/q1076452761/p/7104187.html
Copyright © 2020-2023  润新知