• 图书管理系统四


    最近准备比赛(虽然成绩很不好),就没有写代码了。
    这次主要是完成了记录书籍数量

    思路:

    • 给读取函数中添加读取int类型的方法
    • 每次添加书籍前,先判断之前是否存在该书籍,若存在则 count++
    • 然后在界面中添加”可借数“,总之还是很简单的操作的。
    • github

    主要代码:

    void init(L * head)  // 初始化链表
    {
    	L * p,* pre;
    	pre = head;
    	string s;
    	char num;
    	ifstream infile("e://Library//ALLBOOK.txt", ios::in);//以读取的方式打开本地文件
    	while (!infile.eof())//本地数据存入链表
    	{
    
    		p = new L;
    		getline(infile, s, '
    ');
    		p->id = s;
    		infile>>p->count ;       //读取数值
    		getline(infile, s, '
    ');//读取位置下移
    		getline(infile, s, '
    ');//读取下一行
    		p->book_name = s;
    		getline(infile, s, '
    ');
    		p->author = s;
    		p->next = NULL;
    		pre->next = p;
    		pre = pre->next;
    	}
    }
    
    void save(L *head)  //数据存入本地文件
    {
    	L * p = head;
    	ofstream outfile("e://Library//ALLBOOK.txt", ios::out);//以写入的方式打开本地文件
    	p = head->next;
    	while (p != NULL)
    	{
    		if (p->id != "")
    		{
    		outfile << p->id << endl;
    		outfile << p->count << endl;    //存 数量
    		outfile << p->book_name << endl;
    		outfile << p->author;
    
    		if (p->next != NULL) outfile << endl;
    		}
    		p = p->next;
    	}
    }
    
    
    bool find(L * head, string i, string bn, string au)//判断是否存在
    {
    	L * p = head;
    	if (head->next == NULL)
    	{
    		return false;
    	}
    	for (p = head->next; p != NULL; p = p->next)
    	{
    		if (p->id == i&&p->book_name == bn&&p->author == au)
    		{
    			p->count++;                  //若是已经存在则添加其数量
    			cout << "已添加书籍" << endl;
    			return true;
    		}
    	}
    	return false;
    }
    

    运行结果:

    遇到主要问题

    在文件中读取int类型数据,一开始纠结好久,本来打算先读取成string类型然后再做转化在进行运算,网上查了一下,查了好多东西,最后对getline这个函数功能有一定加深了解。getline在一次文件打开后,会进行读取,读取到你给定的字符或者他默认字符,然而你没有重新打开文件时,他读取的位置是不变的。然后你可以定义一个ifstream类型,利用>>将改行位置会自动识别int类型,将其存入你的变量中。下面是一个小例子:

    #include<iostream>
    #include<fstream>
    using namespace std;
    int main()
    {
    	ifstream inf("sb.txt",ios::in);
    	int num=1;
    	string s;
    	getline(inf,s,'
    ');
    	cout<<s<<endl;
    	inf>>num;
    	cout<<num<<endl;
    	getline(inf,s,'
    ');
    	getline(inf,s,'
    ');
    	cout<<s;
    	return 0;
    }
    

    读取的文件

    运行结果

    因此通过这样的方法,我读取完数据后getline两次跳到int类型下一个类型数据

    体会:

    前几天在写的时候看看了,百度上整个系统的介绍,发现自己写的东西根本不能称之为系统啊,不过还还是一步步自己慢慢来吧,任重而道远。我这边还有好多好多不足的地方,不过我相信我自己能够一步步坚持下来的![奋斗脸]这次,太匆忙,发现自己也没有怎么迭代。不过我想我先把可借数已经记录下来了,接下来对于借书比较简单了,然而我指的简单是没有存在学生登录系统的借书功能,学生借书系统,我希望我能在这个暑假也能写个大概吧------立了个flag.

  • 相关阅读:
    看看别人实现的投影触控技术
    SharePoint (MOSS2007) 中 实现Form 验证全部(转载)
    XPath简明教程
    做人,做事,做架构师 转载 潘爱民 文章
    Java不适合于作为主要编程教学语言 孟岩
    KenaBoy的provider模式(转载)
    愚老先生的 WSS3.0 Lists服务的使用方法,帮了大忙
    Provider模式(转载)
    没有配置aspnetdb的情况下Membership的默认存储方式
    【ASP.NET开发】.NET三层架构简单解析 分类: ASP.NET 20130116 18:05 1568人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/q1076452761/p/7158256.html
Copyright © 2020-2023  润新知