i=0;
while(j!=0) {
fprintf(fp,\ess,n[i].year,n[i].claim_number,n[i].unit_price,n[i].collection,n[i].can_borrow,n[i].student_name,n[i].sex,n[i].student_id,n[i].number); fflush(fp); i+=1;j-=1; } fclose(fp); system(\
printf(\借书办理成功!\\n\\n\ printf(\
-------------------------------------------------------\\n\
printf(\继续借书 [2].返回学生功能菜单 [0].退出系统 \\n\
printf(\
-------------------------------------------------------\\n\ printf(\请选择:\ scanf(\ while(1) {
switch(c) {
case 1:goto A;break; case 2:return(back=1); case 0: {
system(\ printf(\
------------------------------------------------------------\\n\
printf(\感谢使用,再见!\\n\
printf(\
------------------------------------------------------------\\n\ exit(0); } } } }
case 2:return(back=1); } } }
=- }
int return_book(int back)xt\
if(fp==NULL){printf(\数据库打开错误!请检查...\\n\ p=(struct Book*)malloc(LONG); printf(\你目前的借书情况:\\n\
printf(\====\\n\
printf(\书名 作者 出版社 年份 索取号 馆藏 可借\\n\
printf(\----\\n\
while(!feof(fp)) {
fscanf(fp,\year,p->claim_number,p->unit_price,&p->collection,&p->can_borrow,p->student_name,p->sex,p->student_id,&p->number);
if(strcmp(student_name,p->student_name)==0) {
a=1;
printf(\im_number,p->collection,p->can_borrow);
printf(\----\\n\
} }
fclose(fp); if(a!=1) {
printf(\你目前没有借书记录!\\n\
printf(\ printf(\返回学生功能菜单 [0].退出系统 \\n\ printf(\ printf(\请选择:\ scanf(\ while(1) {
switch(c) {
case 1:return(back=1); case 0: {
system(\ printf(\
------------------------------------------------------------\\n\
printf(\感谢使用,再见! =- \\n\
printf(\
------------------------------------------------------------\\n\ exit(0); } } } }
if(a==1) {
printf(\请输入所还图书书名(每次一种):\ scanf(\
printf(\是否确认办理该书还书手续\\n\
printf(\ printf(\是 [2].否 \\n\ printf(\ printf(\请输入:\ scanf(\ while(1) {
switch(c) {
case 1: {
system(\
fp=fopen(\图书信息数据库.txt\
if(fp==NULL){printf(\数据库打开错误!请检查...\\n\ while(!feof(fp)) {
fscanf(fp,\press,&n[i].year,&n[i].claim_number,&n[i].unit_price,&n[i].collection,&n[i].can_borrow,&n[i].student_name,&n[i].sex,&n[i].student_id,&n[i].number); if(strcmp(title,n[i].title)==0) {
if(strcmp(n[i].student_name,student_name)==0) {
strcpy(n[i].student_name,\未知\ strcpy(n[i].sex,\未知\
strcpy(n[i].student_id,\未知\ }
n[i].can_borrow+=1; }
i+=1; }
fclose(fp); j=i;
fp=fopen(\图书信息数据库.txt\
if(fp==NULL){printf(\数据库打开错误!请检查...\\n\ i=0;
while(j!=0) {
fprintf(fp,\ess,n[i].year,n[i].claim_number,n[i].unit_price,n[i].collection,n[i].can_borrow,n[i].student_name,n[i].sex,n[i].student_id,n[i].number); fflush(fp); i+=1;j-=1; } fclose(fp); system(\
printf(\还书办理成功!\\n\\n\ printf(\
-------------------------------------------------------\\n\
printf(\继续还书 [2].返回学生功能菜单 [0].退出系统 \\n\
printf(\
-------------------------------------------------------\\n\ printf(\请选择:\ scanf(\ while(1) {
switch(c) {
case 1:goto A;break; case 2:return(back=1); case 0: {
system(\ printf(\
------------------------------------------------------------\\n\
printf(\感谢使用,再见! =- \\n\
printf(\
------------------------------------------------------------\\n\ exit(0); } }
}
}
}
} }
case 2:return(back=1); }
§实验数据及运行效果截图
运行程序,系统菜单:
管理员功能界面:
新书信息录入完成:
图书信息查询(管理员):
按图书名称查询结果:
图书信息删除(遇删除图书正在出借情况): 学生功能界面: 办理还书手
续:
§设计中出现的错误及解决方法
在编写这个图书管理系统中,遇到的最大问题是,对数据库文件信息的定向修改。原本试图通过文件指针的飘移与写入覆盖来实现数据库文件的定位修改,但是不能成功。后来还是采用的全文覆盖的方法;程序编写过程中多次存在无限循环的情况,后来通过检查解决问题。遗憾的是在本次编写程序中没有很好的学会动态链表的使用,而是采用的结构体数组,以后需加强对链表的学习。
通过这次实践,我体会到了c语言学习的实用性。将理论和实践结合在一起,用先进的计算机工具方便人们的生活。C语言程序的编写首先要从大局考虑,把自己编写整个程序的思想都写在草稿上,这样有助于自己编写程序,在编写时要完善注释,方便其他人理解程序。编写的程序从理论上来说并没有错,但以上机就问题不断。甚至有些课本上的知识照搬不变,也不能得到正确的结果。有时一个程序改了一遍又一遍,但就是不能成功,编程显得枯燥乏味,看似简单的程序题,在调试时却屡屡出错。经反复的修改后,结果正确了,这时所有的乏味都显得那么无力,一切都是值得的。
我认为,开发一套系统,最重要的是细心,并且思考要全面,结合实际,充分考虑到客户的需求和现实意义。不管什么系统,只用运用到实际应用中,才具有先现实意义。 所以c语言程序的实用性很强,我们以后还要更加努力认真地学习编程语言。