《数据结构》
课程设计报告书
一.课程设计题目
图书借阅管理系统
二.课程设计内容
实现图书管理信息系统的设计
(一)管理员功能:
①登录:输入管理员密码,若密码错误则不得执行管理员操作。
②添加新书:增加新的图书资料,同时需检查新书的图书编号是否已存在于原图书资料中, 若已存在则应取消添加或提示重新输入。
③修改图书:通过编号查询该图书资料,若该编号存在,则显示已有信息,允许修改,否则提示 无该图书信息。
④删除图书:通过编号查询该图书资料,若该编号存在,则显示已有信息,允许删除,否则提示无该图书信息。删除对象包括该图书资料以及“图书状态”和“借阅人”中与此书相关的所有记录。
⑤查找图书:
A.按书号查找:通过编号查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。
B.按书名查找:通过书名查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。
C.按作者查找:通过作者查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。
⑥查看全部图书:显示所有图书资料,包括书号、书名、作者、状态和借阅人等信息。
⑦修改读者:通过姓名查询该读者信息,若该姓名存在,则显示已有信息,允许修改,否则提示无该读者信息。
⑧删除读者:通过姓名查询该读者信息,若该姓名存在,则显示已有信息,允许删除,否则提示无该读者信息。删除对象包括该读者姓名、班级、电话以及“图书状态”和“借阅人”中与此人相关的所有记录。
⑨查看所有读者:显示所有读者资料,包括姓名、班级、电话等信息。
(二)读者功能:
①登录:输入读者姓名,若未经注册则不得进入读者服务界面。 ②注册:新用户经注册方可登录系统并使用读者服务功能。 ③借书:
A.输入所需图书编号,判断该编号是否存在,若不存在则提示重新输入。
B.若所输入图书编号存在,则判断该书籍是否已被借出,若已借则不允许执行借书操作。
C.若所输入图书未借,则提示输入读者姓名,判断所输入读者姓名是否存在,若不存在则提示重新输入。 D.若读者姓名存在,则允许执行借书操作。
E.借书处理包括在“图书状态”中加上“已借”标记。 ④还书:
A.输入所借书编号,判断该编号是否存在,若不存在则提示重新输入。 B.判断该书是否已借出,若未借则不允许执行还书操作。 C.借书处理包括在“图书状态”中加上“未借”标记。 ⑤查询图书:
A.按书号查找:通过编号查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。
B.按书名查找:通过书名查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。
C.按作者查找:通过作者查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。
⑥查看借阅情况:输入读者姓名,若该姓名不存在则提示重新输入,若该姓名存在则显示该读者借阅信息。
三.算法设计
1.流程图(部分示例)
①管理员登录
②读者登录
③读者借阅图书
④管理员或读者按书名查找图书
2.代码实现
#include #include
#include #include //文件流 #include #define BookFile \"book.txt\"
//将字符串BookFile替换原文件中的宏名称book #define ReaderFile \"reader.txt\" using namespace std; //**********读者结构体,用于存放读者基本信息********** cla Reader {
private:
char rname[10];
char rcla[10];
char rtel[10]; public:
Reader() //构造函数,实现数据初始化
{strcpy(rname,\"\");strcpy(rcla,\"\");strcpy(rtel,\"\");} //初始化
void set_rname(char *rn) //设置读者姓名
{strcpy(rname,rn);} //将rn的字符复制给rname
char * get_rname() //获得读者姓名
{return rname;} //返回rname的值
void set_rcla(char *rc) //设置班级
{strcpy(rcla,rc);}
char *get_rcla()
//获得班级
{return rcla;}
void set_rtel(char *rt)
//设置电话
{strcpy(rtel,rt);}
char *get_rtel()
//获得电话
{return rtel;}
void copy(Reader m) //读者Reader结构体copy函数
{strcpy(rname,m.get_rname());strcpy(rcla,m.get_rcla());strcpy(rtel,m.get_rtel());} }; //*********读者管理结构体,实现对读者用户的管理********* cla ReaderManage {
Reader readers[50]; //定义读者结构体数组对象,最多50位
int length;
void readFile()
//读取读者文件函数
{
ifstream fread; //定义输入文件流对象fread
length=0;
//计数
if(!fread)
{cout
fread.open(ReaderFile,ios::binary);//使文件流与文件关联,以二进制方式打开
int i=0;
while((fread.read((char *)&readers[i],sizeof(Reader))))//计算并返回所占字节数
i++;
length=i;
fread.close();//关闭磁盘文件
} void saveFile() //保存读者文件
{
ofstream fwrite;
//定义输出文件流对象fwrite
if(!fwrite)
{cout
fwrite.open(ReaderFile,ios::binary);//使文件流与文件关联,以二进制方式打开
fwrite.write((char *)readers,length*sizeof(Reader));//计算并返回所占字节数
fwrite.close(); //关闭磁盘文件
} public:
ReaderManage() //构造函数,读取读者文件
{readFile();}
~ReaderManage() //析构函数,保存读者文件
{saveFile();}
void add_reader(Reader r) //添加读者用户函数
{
if(length>=50)
{cout
readers[length].copy(r); //调用读者结构体copy函数
length++; } int search(char *rn) //按姓名查找读者函数
{
for(int i=0;i
if(strcmp(readers[i].get_rname(),rn)==0)//判断是否相等
return i;
return -1;
} bool revise(Reader reader,int i) //修改读者资料函数
{
readers[i].copy(reader); //调用读者结构体cpoy函数
return true; } void delete_reader(int index) //删除读者函数
{
for(int i=index;i
readers[i].copy(readers[i+1]); //用后面的地址覆盖前面的地址
length--; } bool log_reader(Reader r) //登录时判断读者用户是否存在函数,相当于遍历
{
for(int i=0;i
if(strcmp(readers[i].get_rname(),r.get_rname())==0)
return true;
return false;
} void reg_reader() //注册用户函数
{
char n[10];
//姓名name
char c[10];
//班级cla
char t[10];
//电话tel
Reader reader;
cout
cin>>n;
cout
cin>>c;
cout
cin>>t;
reader.set_rname(n); //调用读者结构体设置读者姓名函数
reader.set_rcla(c); //调用读者结构体设置读者班级函数
reader.set_rtel(t); //调用读者结构体设置联系电话函数
add_reader(reader); //调用读者结构体添加读者函数
cout
{ cout
cout
for(int i=0;i
{
cout
cout
cout
} } void show_reader(int i) //带参的显示读者信息函数
{
cout
cout
cout
cout
cout
}
};
//********书籍结构体,用于存放书籍基本信息******** cla Book { private:
char bnum[10];
//书号
char bname[20];
//书名
char bauthor[10];
//作者
char rname[10];
//借阅人 public: int tag;
//状态标记判断指标(已借/在架) Book()
//构造函数初始化信息
{strcpy(bnum,\"\");strcpy(bname,\"\");strcpy(bauthor,\"\");strcpy(rname,\"\");tag=0;}
void set_bnum(char *no)
//设置书号
{strcpy(bnum,no);}
//把字符串no中的字符复制到字符串bnum中
char *get_bnum()
//获得书号
{
return bnum;}
//返回值为bnum
void set_bname(char *n)
//设置书名
{strcpy(bname,n);}
char *get_bname()
//获得书名
{return bname;}
void set_bauthor(char *a)
//设置作者
{strcpy(bauthor,a);}
char * get_bauthor()
//获得作者姓名
{return bauthor;}
void set_tag(int t)
//状态设置
{tag=t;}
void set_rname(char *rn)
//设置借阅人
{strcpy(rname,rn);}
char *get_rname()
//获得借阅人姓名
{return rname;}
void show_tag()
//显示图书状态
{
if(tag==1)
{cout
else
{cout
}
void copy(Book m)
//Book结构体copy函数
{
strcpy(bnum,m.get_bnum());
//将获得书号函数里的返回值里的字符复制到bnum
strcpy(bname,m.get_bname());
strcpy(bauthor,m.get_bauthor());
tag=0;
} }; //**********书籍管理结构体,实现管理书籍功能********** cla BookManage { private:
Book books[100];
//定义Book书籍结构体数组对象,最大容量100本
int length;
void saveFile()
//保存书籍文件
{
ofstream fwrite; //定义输出文件流ofstream结构体对象fwrite
if(!fwrite)
{cout
}
fwrite.open(BookFile,ios::binary);//使文件流与文件建立关联,以二进制方式打开
fwrite.write((char *)books,length*sizeof(Book)); //计算并返回所占字节数
fwrite.close();
//关闭磁盘文件
} void readFile()
//读取书籍文件
{
ifstream fread; //定义输入文件流对象fread
length=0;
if(!fread)
{cout
Book temp;
//定义书籍结构体临时对象temp
int i=0;
fread.open(BookFile ,ios::binary);//使文件流与文件建立关联,以二进制方式打开
while((fread.read((char *)&books[i],sizeof(Book))))
i++;
//每读完一次,指针后移一位,直到不能读出正确结果为止
length=i;
fread.close(); } public:
BookManage()
//构造函数,读取磁盘文件
{
length=0;
//从头读起,计数,最大100
readFile();
//调用读取文件函数
}
~BookManage()
//析构函数,保存磁盘文件
{
saveFile();
//调用保存文件函数
}
bool add(Book book)
//添加图书资料
{
if(length>=100)
{ cout
return -1;
}
else
{
books[length].copy(book); //调用书籍结构体copy函数
length++;
return (length-1);
} } int bnu_search(char *bnu)
//按书号查找书籍
{
for(int i=0;i
if(strcmp(books[i].get_bnum(),bnu)==0) //字符串比较,判断是否相等
return i;
return -1;
} int bna_search(char *bna)
//按书名查找书籍
{
for(int i=0;i
if(strcmp(books[i].get_bname(),bna)==0) //判断
return i;
return -1;
} int bau_search(char *bau) //按作者查找书籍
{
for(int i=0;i
if(strcmp(books[i].get_bauthor(),bau)==0)//判断
return i;
return -1;
}
int rn_search(char *rn) //按借阅人查找书籍
{
for(int i=0;i
if(strcmp(books[i].get_rname(),rn)==0)//判断
return i;
return -1;
}
void revise(Book book,int i)//带参的修改书籍函数
{books[i].copy(book);} //调用Book结构体copy函数
void deleteBook(int index)//带参的删除书籍资料函数
{
for(int i=index;i
books[i].copy(books[i+1]);//用后面的地址将当前的地址覆盖
length--;
} void show_book()//不带参的显示书籍函数
{
cout
cout
cout.width(10);
cout
cout.width(10);
cout
cout.width(17);
cout
cout.width(25);
cout
for(int i=0;i
{ cout
cout.width(10);
cout
cout.width(10);
cout
cout.width(20);
books[i].show_tag();
cout.width(20);
cout
}
} void show_book(int i)//带参的显示书籍函数
{ cout
cout
cout.width(10);
cout
cout.width(10);
cout
cout.width(17);
cout
cout.width(25);
cout
cout
cout.width(10);
cout
cout.width(10);
cout
cout.width(20);
books[i].show_tag();
cout.width(20);
cout
}
void br_book()//读者借、还书功能函数
{
ReaderManage reader;
int choi; //选择
int a;
//图书状态指标(1已借2在架)
char sh[10]; //需要还书的书号
char dz[10]; //读者姓名
cin>>sh;
int index=bnu_search(sh); //定义一个变量等于查找到的书号
if(index>=0)
{ if(books[index].tag==1) //已借
a=1;
if(books[index].tag==0) //在架
a=2;
switch(a)
{ case 1:
cout\\n\";
cout
0:返回\\n\";
cin>>choi;
cin.ignore(); //清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响
if(choi!=1&&choi!=0)
{
cout
return;
}
else if(choi==1)
{
cout
cin>>dz;
cin.ignore();
int index1=reader.search(dz);
if(index1==-1)
{
cout
return;
}
else
{
strcpy(dz,\"\");//将读者姓名已空白代替
books[index].set_rname(dz);//借阅人一项变为空白
books[index].set_tag(0);//图书状态变为在架
cout
}
}break;
case 2:
cout\\n\";
cout
0:返回\\n\";
cin>>choi;
cin.ignore();
if(choi!=1&&choi!=0)
{
cout
return;
}
else if(choi==1)
{
cout
cin>>dz;
int index1=reader.search(dz);
if(index1==-1)
{ cout
return;
}
else
{
books[index].set_rname(dz);
books[index].set_tag(1);
cout
}
}break;
}
}
else
{
cout
}
bool in(int i) //判断图书是否在架函数
{
if(books[i].tag==1)
return false;
return true;
}
}; //**********菜单结构体,实现界面引导********** cla Menu {
BookManage bm;
//定义书籍管理结构体对象bm ReaderManage rm;
//定义读者管理结构体对象rm Reader r;
//定义读者结构体对象r private: int choice;
//菜单序号选择
int key;
//管理员密码 public: void header()
//页眉
{
system(\"color fd\");
cout
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\\n\";
cout
☆
☆\\n\";
cout
☆
☆\\n\";
cout
☆
图
书
借
阅
管
理
系
统
☆\\n\";
cout
☆
☆\\n\";
cout
☆
☆\\n\";
cout
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\\n\"; } void log_menu()
//主界面登录菜单
{
system(\"color fd\");
header();
cout
选
择
登
录
身
份 >\\n\";
cout
者\\n\\n\\t\\t\\t\\t0: 退
出\\n\\t您的选择是: \"; choice: cin>>choice;
cin.ignore();
//清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响
switch(choice)
{
case 1:
log_admin();
//管理员登录,需密码验证
break;
case 2:
reader_lr();
//读者登录或注册
break;
case 0:
exit(1);
//退出系统
break;
default:
cout
goto choice;
} } void admin_menu()
//管理员管理菜单
{
system(\"cls\");
system(\"color f9\");
cout
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\\n\";
cout
☆
☆\\n\";
cout
☆
系★统★管★理★界★面
☆\\n\";
cout
☆
☆\\n\";
cout
☆
1: 添加新的图书资料
2: 修改已有图书资料
☆\\n\";
cout
☆
☆\\n\";
cout
☆
3: 删除已有图书资料
4: 查找已有图书资料
☆\\n\";
cout
☆
☆\\n\";
cout
☆
5: 查看所有图书资料
6: 修改读者用户信息
☆\\n\";
cout
☆
☆\\n\";
cout
☆
7: 删除读者用户信息
8: 查看所有读者信息
☆\\n\";
cout
☆
☆\\n\";
cout
☆
9: 返回系统登录界面
0: 退出图书管理系统
☆\\n\";
cout
☆
☆\\n\";
cout
☆
☆\\n\";
cout
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\\n\";
cout>choice;
cin.ignore();
switch(choice)
{
case 1:
//添加图书
addBook();
bm.~BookManage();
break;
case 2:
//修改图书
reviseBook();
bm.~BookManage();
break;
case 3:
//删除图书
delBook();
bm.~BookManage();
break;
case 4:
//查找图书
absearch_menu();
break;
case 5:
//查看全部图书
bm.show_book();
cout
system(\"pause\");
admin_menu();
break;
case 6:
//修改读者
reviseReader();
rm.~ReaderManage();
break;
case 7:
//删除读者
delReader();
rm.~ReaderManage();
break;
case 8: //查看所有读者
rm.show_reader();
cout
system(\"pause\");
admin_menu();
break;
case 9: //返回系统登录界面
system(\"cls\");
log_menu();
case 0: //退出系统
exit(1);
break;
default:
cout
goto choice;
} } void reader_menu()
//读者服务菜单
{
system(\"cls\");
system(\"color f9\");
cout
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\\n\";
cout
☆
☆\\n\";
cout
☆
读★者★服★务★界★面
☆\\n\";
cout
☆
☆\\n\";
cout
☆
1: 借 阅 图 书
2: 归 还 图 书
☆\\n\";
cout
☆
☆\\n\";
cout
☆
3: 查 找 图 书
4: 借 阅 情 况
☆\\n\";
cout
☆
☆\\n\";
cout
☆
5: 返 上 一 级
0: 退 出 系 统
☆\\n\";
cout
☆
☆\\n\";
cout
☆
☆\\n\";
cout
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\\n\";
cout>choice;
cin.ignore();
switch(choice)
{
case 1:
cout
bm.br_book();
bm.~BookManage();
break;
case 2:
cout
bm.br_book();
bm.~BookManage();
break;
case 3:
bsearch_menu();
break;
case 4:
rn_search();
break;
case 5:
system(\"cls\");
reader_lr();
break;
case 0:
exit(1);
break;
default:
cout
goto choice;
} } void bsearch_menu()
//读者查找书籍菜单
{
system(\"color f2\");
cout
☆\\n\";
cout
书★籍★查★找★界★面
☆\\n\";
cout
☆\\n\";
cout
1: 按 书号查找
☆\\n\";
cout
☆\\n\";
cout
2: 按 书名查找
☆\\n\";
cout
☆\\n\";
cout
3: 按 作者查找
☆\\n\";
cout
☆\\n\";
cout
4: 返 回 上 级
☆\\n\";
cout
☆\\n\";
cout
0: 退 出 系 统
☆\\n\"; cout
☆\\n\";
cout
int bsc; //book search choice cout
cin>>bsc;
cin.ignore();
switch(bsc) {
case 1:
bnu_search();
break;
case 2:
bna_search();
\";
break;
case 3:
bau_search();
break;
case 4:
reader_menu();
break;
case 5:
exit(1);
default:
cout\";
break;
}
}
void absearch_menu()
//管理员查找书籍菜单
{
system(\"color f2\");
cout
cout
☆\\n\";
cout
书★籍★查★找★界★面
☆\\n\";
cout
☆\\n\";
cout
1: 按 书号查找
☆\\n\";
cout
☆\\n\";
cout
2: 按 书名查找
☆\\n\";
cout
☆\\n\";
cout
3: 按 作者查找
☆\\n\";
cout
☆\\n\";
cout
4: 返 回 上 级
☆\\n\";
cout
☆\\n\";
cout
0: 退 出 系 统
☆\\n\";
cout
☆\\n\";
cout
int bsc; //book search choice
cout
cin>>bsc;
cin.ignore();
switch(bsc)
{
case 1:
bnu_search();
break;
case 2:
bna_search();
break;
case 3:
bau_search();
break;
case 4:
admin_menu();
break;
case 5:
exit(1);
default:
cout\";
break;
}
} void reader_lr() //读者登录或注册菜单 {
system(\"cls\");
header();
system(\"color f1\");
cout
者
登
录
界
面 >\\n\";
cout
1: 登
录\\t2: 注
册\\n\\n\\t\\t\\t
3: 返
回\\t0: 退
出\\n\\t您的选择是: \";
int rlc; //reader login choice choice: cin>>rlc;
cin.ignore();
switch(rlc)
{
case 1:
//已注册读者登录
cout
char rn[10]; //reader name
cin>>rn;
r.set_rname(rn);
if(rm.log_reader(r))
{
cout
system(\"pause\");
reader_menu();
}
else
cout
system(\"pause\");
reader_lr();
break;
case 2:
//新用户注册
rm.reg_reader();
rm.~ReaderManage();
system(\"pause\");
reader_lr();
break;
case 3:
system(\"cls\");
log_menu();
case 0:
exit(1);
break;
default:
cout
goto choice;
} } void log_admin()
//管理员登录
{
cout
int key;
cin>>key;
if(key==14125)
{
cout
system(\"pause\");
admin_menu();
//管理员操作菜单
}
else
{cout
cout
0:退出系统>
cin>>choice;
cin.ignore();
switch(choice)
\"; \";
{
case 1:
system(\"cls\");
log_menu();
break;
case 0:
exit(1);
break;
default:
cout
}
} } void rn_search()
//按书号查找函数
{
char rn[10]; //reader name
cout
cin>>rn;
int index=bm.rn_search(rn);
if(index>=0)
bm.show_book(index);
else
cout
cout
system(\"pause\");
reader_menu();
} void bnu_search()
//按书号查找函数
{
char bnu[10];
cout
cin>>bnu;
int index=bm.bnu_search(bnu);
if(index>=0)
bm.show_book(index);
else
cout
cout
system(\"pause\");
bsearch_menu();
}
void bna_search()
//按书名查找函数
{
cout
char bna[20];
cin>>bna;
int index=bm.bna_search(bna);
if(index>=0)
bm.show_book(index);
else
cout
cout
system(\"pause\");
bsearch_menu();
}
void bau_search()
//按作者查找函数
{
cout
char bau[10];
cin>>bau;
int index=bm.bau_search(bau);
if(index>=0)
bm.show_book(index);
else
cout
cout
system(\"pause\");
bsearch_menu();
}
void addBook()
//新增书籍函数
{ char numb[10];
//书号
char nameb[20];
//书名
char authorb[10]; //作者
Book book;
//书籍结构体对象book
int tag1; input1:cout
cin>>numb;
int index=bm.bnu_search(numb);
if(index==-1)
{
cout
cout
cin>>nameb;
cout
cin>>authorb;
tag1=0;
book.set_bnum(numb);
book.set_bname(nameb);
book.set_bauthor(authorb);
book.set_tag(tag1);
bm.add(book);
cout
}
else
{
cout
goto input1;
}
system(\"pause\");
admin_menu(); } void reviseBook()
//修改书籍函数
{
char numb[10];
char nameb[20];
char authorb[10];
Book book;
int index=-1; input2: cout
cin>>numb;
index=bm.bnu_search(numb);
if(index==-1)
{
cout
goto input2;
return;
}
bool sta=bm.in(index); //判断是否在馆
if(sta)
{ cout状态,您可以继续操作!\";
cout
cin>>nameb;
cout
cin>>authorb;
book.set_bnum(numb);
book.set_bname(nameb);
book.set_bauthor(authorb);
bm.revise(book,index);
cout
else
cout
system(\"pause\");
admin_menu();
} void delBook()
//删除书籍函数
{
char numb[10];
cout
cin>>numb;
int index=bm.bnu_search(numb);
if(index>=0)
{
cout
\";
char y;
cin>>y;
if(y==\'y\'||y==\'Y\')
{
bm.deleteBook(index);
cout
}
else
cout
}
else
cout
system(\"pause\");
admin_menu();
} void reviseReader()//修改读者用户函数
{
char namer[10];
Reader reader; get1:
cout
cin>>namer;
int index=rm.search(namer);
if(index==-1)
{
cout
int a;
cin>>a; get2:
cin.ignore();
switch(a)
{
case 1:
goto get1;
break;
case 0:
system(\"pause\");
admin_menu();
break;
default:
cout
\";
goto get2;
}
return;
}
\";
else
{
char namer[10];
char clar[10];
char telr[10];
Reader reader;
cout
cin>>namer;
cout
cin>>clar;
cout
cin>>telr;
reader.set_rname(namer);
reader.set_rcla(clar);
reader.set_rtel(telr);
cout
char y;
cin>>y;
if(y==\'y\'||y==\'Y\')
{ rm.revise(reader,index);
cout
}
else
cout
}
system(\"pause\");
admin_menu();
}
void delReader()
//删除读者用户函数
{
cout
char namer[10];
cin>>namer;
int index=rm.search(namer);
if(index>=0)
{
cout
char y;
cin>>y;
if(y==\'y\'||y==\'Y\')
{
rm.delete_reader(index);
cout
}
else
cout
}
else
cout
system(\"pause\");
admin_menu();
} }; //********主函数******** int main() {
system(\"color fd\"); Menu menu; //定义菜单结构体对象menu
cout
\"; cout
当前日期:2011-6-22 星期三\"; cout
当前时间:08:00
\"; cout
★ 欢 \";cout
} cout
1主页面
2.管理员登陆页面
3.图书添加
五.课程设计过程中出现的问题、原因及解决方法
1.用户登录密码时,不能使用暗码来保护密码。(未解决成功) 2.每个界面都能退出到主页面,而不是直接跳出系统。(以解决) 3.书名字长太多影响书籍、作者、数量等之间的一一对应关系。(为解决成功)
六.课程设计的主要收获
通过这几天学习设计图书信息管理系统,认识到一切看似简单的事情只有自己动手做,明白了其中的原理才会更好的把它变成自己的东西。图书管理系统主要用到了文件的输入输出,以及利用简单的顺序查找知识,加深了对数据结构的理解与应用。对于这次的课程设计,首先,许多知识不仅仅只是课本上的,需要我们自己去图书馆或网上收集资料。其次,编程过程终遇到各种错误,需要我们耐心分析,讨论,最后得出正确结果。第三,程序无错,进行调试,然后进行加工修改优化。
七.对今后课程设计的建议
希望老师可以分小组做课程设计,题目可以相应的增大难度。分组可以锻炼团对合作能力,队员可以相互讨论解决问题,彼此能够激发更多的思想,做出更完善的作品,同时也防止了互相拷贝的情况,让每个同学都积极的参与到设计中,而不是坐享其成。