c图书信息管理系统附源码文档格式.docx
- 文档编号:8172698
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:17
- 大小:78.69KB
c图书信息管理系统附源码文档格式.docx
《c图书信息管理系统附源码文档格式.docx》由会员分享,可在线阅读,更多相关《c图书信息管理系统附源码文档格式.docx(17页珍藏版)》请在冰点文库上搜索。
字母测试,错误数据测试,重复数据测试
目的:
产看本程序的纠错能力和是否人性化。
2程序设计
关键数据类型定义
籍信息的录入:
voidset_bnum(char*no)籍信息的添加:
intadd(Bookbook)
判断length是否达到最大值,如果没有则进行添加。
3.书籍信息的查找:
无论是按照书号、书名、作者、借阅人、借出日期、超期天数来进行查找都是进行挨个比较,如果遇到相同则返回书籍的i值,进行返回输出。
4.书籍信息的修改:
输入想要修改的书籍编号,按照查找的方法,找到i,然后进行覆盖。
完成修改。
5.书籍的屏幕打印输出:
分两部分输出,首先打印一个头信息,相当于列表的头;
然后利用循环语句带参输出(i为参数,循环)。
6.保存信息到txt文件:
同分为两部分,类似屏幕打印的方法,先存入表头,然后带参循环存入书籍信息。
带参的意义就是,可以无限调用该语句,只要知道书的序号i。
7.从信息中读取txt文件:
structbooks
{
charnumb[10];
面颜色设定:
一直抛弃黑底白字这种默认形式,换一种颜色给人特殊的感觉,在网上找到相关的代码为system("
color**"
);
语句。
但是也是没有头绪不知道怎么调试,后来一不小心设置错误,系统就弹出了提示界面,我就明白了界面颜色的设置方法(图):
图
2.关于书籍的cout输出:
最开始设计输出模块时候,仅仅是想到了不带参的book信息输出,show_book()函数中自带了一个for语句循环输出所有书籍信息,是为显示全部书籍设计的。
但是后来发现如果要单显示筛选信息就要从新写一个带参show_book(inti),虽然函数重载允许这样做,但是却无意义的增加了代码长度。
我选择删除了不带参的show_book(),把for语句循环写在外面。
这样就增加了show_book(inti)函数的利用率,精简了函数的和长度。
3.书籍信息的txt写入:
综合了屏幕打印的经验,鉴于fwrite和cout使用方法和显示效果类似,我决定将txt的写入语句也设置成带参形式saveFile(inti),原理与show_book(inti)基本一致。
完成这些就能实现。
后来发现文件总是覆盖,每次写入都会将上一次的覆盖,也就是只有最后一行,后来才想起了ios:
:
app追加模式,才最终算完整实现。
4.读取数据函数:
这个函数是我编辑最久的,因为使用的不熟练,我先查找了很多资料,并且写了一些单独的小程序去测试效果,但是感觉都不理想。
后来选择了一个最笨的方法,利用fseek函数一格一格的挑开空格和无用信息。
但是这样做最大的缺点就是,我的txt导入文档鼻息保持固定格式,一格空格都不能多,如果多了就会导致错位。
后来与徐老师交流时,老师也说这种输入方法不可取,因为实现了功能但是意义不大。
规格太死,不够人性化。
于是我就退后开始,重新选择语句。
最后决定定义结构体,把txt中信息读取之后直接存入结构体,随后就把结构体中的数据利用set_xxxx函数存入。
5.关于字母纠错及错误输入的处理:
字母输入原来都是用fflush(stdin);
来清空缓存来防止程序进入死循环。
但是我这次编程想到了一个更加简单有效的方法:
利用char来存储选择,随后强转为int型,其实就是讲所有的字符转为了asc2码,因为acs2码的唯一性,我就可以用switch直接跳过了字母部分,比如我要判断i的输入是否唯1,我就将i-48写入switch判断就好了。
4使用说明
主要功能介绍及操作步骤:
1.主界面:
选择1登陆,密码为1043,按任意键进入系统。
2.系统操作界面:
直接输入数字选择功能。
1:
添加新的图书资料:
2:
修改已有图书资料:
3:
删除已有图书资料:
4:
查找已有图书资料:
根据序号选择功能:
按书名查找:
按作者查找:
按借出日期查找:
按超期天数查找:
5:
查看所有图书资料:
6:
读取指定位置TXT:
7:
写入指定位置TXT:
5测试结果
测试数据
1.A4asdfasdf(多字母):
1000改时候输入未知编号:
3.查找时
测试目的
1、测试学号重复
2、测试字母和特殊字符对输入的影响
3、测试筛选是否符合规格
测试结果
全部通过
6心得体会
经历了为期十天的编程实习,我觉得我变得更加成熟了,我从一开始的迷茫到后来的目标坚定,这都是一个改变的过程。
因为是在暑假前就选好了题目,而且提前也知道了题目的要求。
所以我在暑假就做好的了充分的准备。
其实最开始想自学用VC++来编写一个可视化的程序。
但是实施起来却没有那么容易,因为我学习的VC不系统不全面只是一些皮毛,改改别的还可以,但是要是真正想实现自己的思想就有点捉襟见肘。
后决定还是先用比较熟悉的C++语言来编一个完整的系统。
虽然以前有做过C++的实验。
但是像这种完成的系统确实没有经历过。
其实这也是一个挑战,也是一个开始,是我们接触完整系统的开始。
等快开学时候我已经完成了大部分代码:
但是有一些问题还是没有解决,我开学后就开始全力去解决这些问题。
偏偏事与愿违,关于文件读取问题始终没有找到好的解决办法。
最后还是从c++教科书上找到的灵感来解决这些问题。
收获很大。
本次学习中我有以下收获:
1、明确了c与c++的区别,运用了多种c++知识,包括一开始就没弄太明白的文件输入输出,这回事真正弄明白了。
2、复习了类和结构体的知识,但是继承类没有用到。
以后还要多加复习。
3、第一次编写之后,运行之后有50多个错误,大多数都是因为马虎造成的。
以后还要多加此类的练习熟能生巧。
4、多多利用网络资源,看网上的类似的代码能够开阔自己的思路,学习别人好的算法。
学习有很大帮助。
5、先写出流程图这样是非常好的一种习惯,可以为后面写程序打下好的基础。
6、养成好习惯,一个一个模块写,写好了立即执行看是否有错误,以防都写完了,错误却没法去改正。
10天的编程已经接近尾声,但是总觉得要完善我的选题仍有许多要做的工作。
以后还要加强自己的学习。
努力学习编程。
感谢徐老师的指导。
7附录
#include<
iostream>
iomanip>
string>
fstream>
>
usingnamespacestd;
opy(book);
et_bnum(),bnu)==0)et_bname(),bna)==0)et_bauthor(),bau)==0)et_rname(),rn)==0)et_bdays(),bd)==0)et_bchao(),bc)==0)opy(book);
}opy(books[i+1]);
et_bnum();
(15);
cout<
<
books[i].get_bname();
books[i].get_bauthor();
books[i].get_rname();
books[i].get_bdays();
books[i].get_bchao()<
"
\n"
;
}
voidsaveFileHead()xt"
ios:
app);
if(!
fwrite)
{
cout<
文件保存失败!
exit
(1);
}
fwrite<
**********************书****籍****信****息****列****表**********************\n\n"
书号"
书名"
作者"
借阅人"
借出日期"
超期天数\n"
();
xt"
books[i].get_bnum();
();
"
r"
)))
{
printf("
filenotopen!
exit(0);
}
fseek(fp,40,SEEK_SET);
umb);
fscanf(fp,"
%s"
&
form[i].nameb);
form[i].authorb);
form[i].namer);
form[i].daysb);
form[i].chaob);
(form[i].numb);
(form[i].nameb);
(form[i].authorb);
(form[i].namer);
(form[i].daysb);
(form[i].chaob);
BookManage:
add(book);
fflush(stdin);
BookManage();
break;
case2:
break;
case3:
case4:
xt的文件放置在程序所在目录下。
endl;
cout<
放置完成后,"
system("
pause"
();
请稍后...系统正在处理中..."
_sleep(1000);
导入成功!
!
显示全部书籍。
for(intj=0;
j<
j++)
{
(j);
}
\n\t显示完毕!
admin_menu();
}
case7:
讲程序保存在当前目录下,名为:
书籍信息.txt"
}
生成成功!
请前往程序所在目录查询。
即将返回主菜单!
_sleep(2000);
case8:
.\n"
_sleep(600);
system("
cls"
log_menu();
case0:
exit
(1);
default:
cout<
\n\t操作有误,请重新选择(0/1)"
}
voidrn_search()//按姓名查找函数
{
charrn[10];
//readername
\n\t请输入您的姓名:
cin>
rn;
intindex=(rn);
if(index>
=0)
();
(index);
else
\n\t对不起,系统无您的借阅记录!
\n\t"
system("
absearch_menu();
voidbnu_search()//按书号查找函数
charbnu[10];
\n\t请输入您要查找的书号:
bnu;
intindex=(bnu);
\n\t对不起,系统无该书籍记录!
voidbna_search()//按书名查找函数
\n\t请输入您要查找的书名:
charbna[20];
bna;
intindex=(bna);
voidbau_search()//按作者查找函数
\n\t请输入您要查找的作者:
charbau[10];
cin>
bau;
intindex=(bau);
{
voidbd_search()//按借阅日期查找函数
charbd[10];
\n\t请输入您要查找的借出日期:
bd;
intindex=(bd);
\n\t对不起,系统无该借阅记录!
voidbc_search()//按超期天数查找函数
charbc[10];
\n\t请输入您要查找超期多久的书籍:
bc;
intindex=(bc);
if(index>
(index);
else
}
voidaddBook()//添加新的书籍信息函数
//书号
charnameb[20];
//书名
charauthorb[10];
//作者
charnamer[10];
//借阅人
chardaysb[10];
//借出日期
charchaob[10];
//超期天数
Bookbook;
//书籍结构体对象book
input1:
cout<
\n\t请输入新的书号:
numb;
intindex=(numb);
if(index==-1)
\n\t系统目前尚无该书记录,您可以继续操作!
\n\t请输入新书书名:
nameb;
\n\t请输入新书作者:
authorb;
\n\t请输入借阅人:
namer;
\n\t请输入借出日期:
daysb;
\n\t请输入超期天数:
chaob;
(numb);
(nameb);
(authorb);
(namer);
(daysb);
(chaob);
(book);
\n\t恭喜您!
新书资料录入成功!
\n\t对不起,该书号纪录已存在!
请重新输入!
gotoinput1;
}
system("
admin_menu();
voidreviseBook()//修改书籍函数
charauthorb[10];
charnamer[10];
chardaysb[10];
charchaob[10];
intindex=-1;
input2:
\n\t请输入您要修改书籍的书号:
index=(numb);
\n\t对不起,您输入的书号不存在,请重新输入!
gotoinput2;
return;
\n\t请输入更改后的书名:
\n\t请输入更改后的作者:
\n\t请输入更改后的借阅人:
\n\t请输入更改后的借出日期:
\n\t请输入更改后的超期时间:
(namer);
(daysb);
(chaob);
(book,index);
书籍资料修改成功!
admin_menu();
voiddelBook()//删除书籍函数
\n\t请输入您要删除书籍的书号:
\n\t您确定要删除该书记录吗(y/n)"
chary;
y;
if(y=='
y'
||y=='
Y'
)
\n\t删除成功!
\n\t删除取消!
\n\t对不起,系统没有该图书记录!
};
//********主函数********
intmain()
colorf0"
Menumenu;
//定义菜单结构体对象menu
\t\t\t当前日期:
system("
DATE[/T]"
\t\t\t当前时间:
"
TIME[/T]"
\n\t\t\t★欢"
_sleep(600);
★迎"
★进"
★入★\n\n"
return0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 信息管理 系统 源码