最近准备比赛(虽然成绩很不好),就没有写代码了。
这次主要是完成了记录书籍数量
思路:
- 给读取函数中添加读取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.