当前位置:文档之家› 图书管理系统

图书管理系统

for(int i=1;i<=l.elem[0].num;i++)
{
outfile<<l.elem[i].num<<" "<<l.elem[i].name<<" "<<l.elem[i].author<<" "<<l.elem[i].nowbook<<" "<<l.elem[i].allbook<<endl;
}
outfile.close();
}//将顺序表中的数据写入book.txt中
int judge(sxlist &l,book e)
{
for(int i=1;i<l.elem[0].num+1;i++)
if(l.elem[i].num==e.num)
return i+1;
return 0;
}//判断新书是否存在于表中
2.借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;
3.归还:注销对借阅者的登记,改变该书的现存量。
根据功能需求,首先设计定义了book和student两个结构体,具体定义如下:
typedef struct
{
int num;
string name;
string author;
p->next=m;
p=m;
}
infile.close();
}//将student.txt中的数据读入程序,同时创建单链表
void dlistinsert(linklist &dl,student s)
{
cout<<"请输入借阅者信息,按照借阅证号,书号,年,月,日的顺序输入"<<endl;
cin>>s.id>>s.num>>s.year>>s.month>>s.date;
{
int id;
int num;
int year;
int month;
int date;
}student;//定义"student"这个结构体,包括借阅证号和归还日期
typedef struct lnode
{
student data;
struct lnode *next;
}lnode,*linklist;//定义单链表的节点
参考书籍
《数据结构(C语言版)》严蔚敏李冬梅吴伟民编著
《C++程序设计》谭浩强编著
源程序
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;
typedef struct
void insertsxlist(sxlist &l,book e)
{
cout<<"请输入新购书的内容,按照书号、书名、著作者、现存量、库存量的顺序输入"<<endl;
cin>>e.num>>>>e.author>>e.nowbook>>e.allbook;
int j=judge(l,e);
}
outfile.close();
}//将单链表中的数据写入student.txt中
void display()
{
cout<<"1.采编入库"<<endl;
dlistinsert(dl,s);
}//借阅函数
lnode *locatedelem(linklist dl,student s)
{
cout<<"请输入借阅证号"<<endl;
cin>>s.id;
lnode *p;
p=dl;
while(p&&p->next->data.id!=s.id)
p=p->next;
outfile<<dl->data.id<<endl;
lnode *p;
p=dl;
for(int i=1;i<=dl->data.id;i++)
{
p=p->next;
outfile<<p->data.id<<" "<<p->data.num<<" "<<p->data.year<<" "<<p->data.month<<" "<<p->data.date<<endl;
dl->data.id++;
}//单链表的插入,目的是登记借阅证号,书号和归还日期
void lendbook(sxlist &l,book e,linklist &dl)
{
student s;
cout<<"请输入书号"<<endl;
cin>>e.num;
int j=judge(l,e);
l.elem[j-1].nowbook--;
4.关于这次的课程设计,收获挺大,在面对一个实际问题时,应该从问题的功能需求入手,在头脑中先模拟出程序运行的过程,思考出整个问题具体需要什么样的数据类型,根据实际问题的特点,考虑用合适的数据结构去组织数据类型,之后根据头脑中模拟出的程序运行过程,思考具体需要设计哪些算法和函数,只有思路清晰,才能顺利完成程序的编写。
l.elem[l.length].author=e.author;
l.elem[l.length].nowbook=e.nowbook;
l.elem[l.length].allbook=e.allbook;
l.elem[0].num++;
l.length++;
}
}//采编入库函数
typedef struct
在D盘打开student.txt,可以看到根据输入得到的相应的输出。
设计总结
1.书这个结构体,关于线性表的选择,顺序表还是链表,斟酌了一下还是用顺序表,并不需要大量增删数据,顺序表比较好。
2.学生这个结构体还是用链表组织比较好,增删比较频繁。
3.11月30日搞了一上午,输出始终有问题,下午终于发现2个问题,一个是文件的路径格式问题,该用d:/book.txt,而我程序里的却是d:\book.txt.;另一个问题是主程序中的循环结构,按0退出,该直接用break退出循环,而我却用了exit(1)直接退出程序,导致结束程序之前没有运行savebookfile()函数,所以程序无法正常输出。
infile>>l.elem[0].num;//顺序表的0号位置存放书的种数
l.length++;
for(int i=1;i<=l.elem[0].num;i++)
{
infile>>l.elem[i].num>>l.elem[i].name>>l.elem[i].author>>l.elem[i].nowbook>>l.elem[i].allbook;
l.length++;
}
infile.close();
}//从book.txt中读取数据,同时创建顺序表
void savebookfile(sxlist l)
{
ofstream outfile("d:/book.txt",ios::out);
outfile<<l.elem[0].num<<endl;
int initsxlist(sxlist &l)
{
l.elem=new book[100];
if(!l.elem)
{
cout<<"储存分配失败"<<endl;
}
l.length=0;
return 0;
}//顺序表初始化
void getbookfile(sxlist &l)
{
ifstream infile("d:/book.txt",ios::in);
int initdlist(linklist &dl)
{
dl=new lnode;
dl->next=NULL;
return 0;
}//初始化单链表
void getstudentfile(linklist &dl)
{
ifstream infile("d:/student.txt",ios::in);
infile>>dl->data.id;//单链表的头结点储存借阅者的人数
lnode *p;
p=dl;
lnode *m=new lnode;
m->next=p->next;
p->next=m;
m->data.id=s.id;
m->data.num=s.num;
相关主题