C语言图书管理系统.docx
《C语言图书管理系统.docx》由会员分享,可在线阅读,更多相关《C语言图书管理系统.docx(32页珍藏版)》请在冰豆网上搜索。
C语言图书管理系统
图书借阅管理系统
1.课程设计的目的
我这次做的系统是图书借阅管理系统,主要目的是利用本系统来管理图书的借阅问题,以实现图书借阅的快捷化、规范化、自动化来提高工作效率。
系统以实用性,通用、开放和安全的原则。
使用数据库开发软件开发制作,实现了图书借阅信息的管理,借阅图书的信息自动化添加,借阅者的个人基本信息,借阅的基本信息,对各种图书的分类管理以及各种新书的添加等一些繁琐事项。
更好的管理好图书的借阅问题。
大大的减少了人工的工作量,比以往很大程度上提高了工作人员的工作效率。
使之成为图书馆的一个平台,成为真正的现代化科技。
为了充分利用学院现有的计算机硬件资源,做好图书借阅管理工作,提高办事效率,实现全面的、相对集中的办公自动化,开发本系统就成了当务之急,其目的主要为了彻底改变这种繁杂的管理模式,实现全面的、相对集中的、智能化的信息综合管理,为图书馆的管理工作带来方便。
我想借本次课程设计之际,开发一个适用于通用大规模图书馆的管理系统,采用现学习的C++6.0开发工具开发出来的基于Windows系列的图书借阅管理系统。
该系统面向所有的在校学生,实现对学生个人的借书、学生的基本信息情况等的计算机管理。
系统支持工作人员对学生图书借阅信息、图书馆新书的添加、旧书的信息修改、删除等操作,确保了数据库的安全性快捷性和一致性。
2.设计方案论证
2.1主界面设计思路
本次设计这个系统利用于图书馆的图书借阅管理,该系统相比以往人工的记录方式减少了很多不比要得麻烦,大大的提高了图书馆工作人员的工作效率。
这次系统的开发制作主要包括以下几个方面。
书籍统计可以查询图书的名称、作者、序号等信息,以及是否借出去了。
书籍管理可以把新书添加到系统当中,修改书籍的详细资料等。
注册会员功能,借阅书籍的学生必须注册会员才可以借书,通过注册会员来添加该学生的基本信息。
通过系统来办理借书手续以记录该学生的借书信息。
学生借书模块能够查询借阅学生的信息和该学生的借书的信息。
还书模块功能,学生把书籍归还后系统会清楚该学生的借书记录。
员工管理系统,把员工的信息录入系统可以快速的查阅员工的信息,是管理更方便快捷。
图书借阅管理系统功能概况,如图1所示
图1主界面框架图
2.2图书管理模块设计思路
图书管理模块包括书籍统计、查询图书馆里书籍的基本信息,图书资料修改,添加新书和修改旧书的资料,删除图书,图书馆不想保存的书可以通过系统删除书籍来删除系统里面以前保留书的记录。
3.设计结果及分析
3.1创建工程框架
创建工程:
从“开始”菜单中选择“程序”|MicrosoftVisualStudio6.0|Microsoft
VisualC++6.0,显示VisualC++6.0开发环境主窗口。
单击“文件”菜单中的“新建”命令,显示新建对话框。
在“工程”选项卡中,选择Win32ConsoleApplication(Win32控制台应用程序)。
在位置文本框中指定一个路径d:
\clab,在工程名称文本框中为工程输入一个名字“lab1_1”,单击确定按钮。
在弹出的Win32ConsoleApplication对话框中,选择“一个空工程”,单击“完成”按钮。
如图2所示
图2新建工程
最后在“新建工程信息”对话框中,单击“确定”按钮,完成项目的建立。
图3创建空工程
图4创建源程序
编程运行后就可以使用了,可以查阅图书,比如书籍的序号、书名、以及作者等。
借阅图书模块查询学生的借书信息等。
管理系统模块包括员工的管理和书籍的管理。
还书模块,学生还书后系统就会清楚借书记录。
最后模块是退出功能使用后可以退出系统。
按照如图5所示进行相关操作。
图5系统操作界面
3.2图书管理模块设计
3.2.1书籍统计
书籍统计的程序,通过该程序的正确运行可以查阅图书、借阅图书、管理图书以及还书的相关操作。
选择3管理图书然后会显示下一界面再选择4就可以进行书籍统计了,结果如图6所示。
图6书籍统计
书籍统计函数
bookcount()
{
FILE*fp;
inti,n=0;
fp=fopen("book.txt","r");
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(book[i].booknum!
=0&&strlen(book[i].bookname)!
=0&&strlen(book[i].bookcreat)!
=0)
{
printf("第%d本书<序号:
%d书名:
%s作者:
%s状态:
%d>\n",i+1,book[i].booknum,book[i].bookname,book[i].bookcreat,book[i].turefalse);
n=n+1;
}}
fclose(fp);
printf("目前共有%d本书\n",n);
printf("按任意键\n");
3.2.2删除图书
删除图书的程序,程序运行后可以选择相关选项,选择删除图书来进行图书删除,删除图书之前会显示警告是否真的要删除该图书,以便操作者误删图书。
运行结果如图7所示。
图7删除图书
删除图书成功如图8所示
图8删除成功
删除图书函数
delbook()
{
FILE*fp,*fp2;
inti;
charbookname[10],choice;
fp=fopen("book.txt","r");
fp2=fopen("bookl.txt","w");
printf("请输入你要删除的书名\n");
printf("如果你输入的书名存在,系统自动删除该信息!
如果不存在,系统不做任何改动\n");
scanf("%s",bookname);
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(strcmp(bookname,book[i].bookname)!
=0)
{
fwrite(&book[i],sizeof(structbook),1,fp2);
}
}
fclose(fp);
fclose(fp2);
printf("是否真的要删除该书籍?
删除后该书籍的所有信息将无法恢复《Y/N》\n");
scanf("%s",&choice);
if(choice=='y'||choice=='Y')
{
fp=fopen("book.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&book[i],sizeof(structbook),1,fp2)!
=0;i++)
{
fwrite(&book[i],sizeof(structbook),1,fp);
}
fclose(fp);
fclose(fp2);
fp2=fopen("bookl.txt","w");
fclose(fp2);
printf("按任意键返回\n");
getch();
return;
}
else
{
printf("按任意键返回\n");
getch();
return;
}
}
3.2.3修改图书资料
修改图书资料程序,运行后可以根据预期结果来进行相关操作,修改图书资料包括修改图书序号、书名、和作者。
运行结果如图9所示。
图9图书资料修改
图书资料修改成功后统计结果如图10所示
图10图书资料修改成功
修改图书资料函数
changebook()
{
FILE*fp,*fp2;
charbookname[10],choice;
inti;
fp=fopen("book.txt","r");
fp2=fopen("bookl.txt","w");
printf("请你输入要修改的书籍的书字\n");
scanf("%s",bookname);
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(strcmp(book[i].bookname,bookname)==0)
{
printf("你所要修改的书的资料如下,请选择你要修改的内容\n");
printf("序号:
〈%d〉书名:
〈%s〉作者:
〈%s〉\n",book[i].booknum,book[i].bookname,book[i].bookcreat);
printf("1:
修改书的序号\n");
printf("2:
修改书名\n");
printf("3:
修改作者\n");
printf("请输入1-3:
");
scanf("%s",&choice);
switch(choice)
{
case'1':
{
printf("请输入新的序号\n");
scanf("%d",&book[i].booknum);
fwrite(&book[i],sizeof(structbook),1,fp2);
}break;
case'2':
{
printf("请输入新的书名\n");
scanf("%s",book[i].bookname);
fwrite(&book[i],sizeof(structbook),1,fp2);
}break;
case'3':
{
printf("请输入新的作者\n");
scanf("%s",book[i].bookcreat);
fwrite(&book[i],sizeof(structbook),1,fp2);
}break;
defaut:
printf("没有这样的操作");break;
}
continue;
}
fwrite(&book[i],sizeof(structbook),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen("book.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&book[i],sizeof(structbook),1,fp2)!
=0;i++)
{
fwrite(&book[i],sizeof(structbook),1,fp);
}
fclose(fp2);
fp2=fopen("bookl.txt","w");
fclose(fp2);
printf("按任意键返回\n");
getchar();
return;}
4.设计体会
有了这次的课程设计,让我在课堂上学到的理论知识有了更进一步的深入,把理论运用到实际当中不是一件简单的事情,虽然我稍微感觉到难做了一些,程序也有些欠缺的地方,但是这次设计不仅让我学到了很多知识,而且还锻炼了自己的实际操作能力。
获益匪浅。
这次的努力没有白费。
编程中难免有些问题我还是解决不了的,但是幸运的事如今互联网很发达让我在其中找到了知识并且也学到了很多有用的知识。
发展如此之快的现代化社会,我们也应该加快我们的步伐跟着社会走,去学习很多我们还不掌握的知识,把它们转化成自己的东西,学会运用学到的知识,以实现科学的价值所在。
在做课程设计之前我们应该充分的考虑好实际中会遇到的种种麻烦,以及预期结果,做好课设的各种准备,比如可以先写好要编写的程序,考虑要用什么函数才能实现预期的结果,整体的结构模块,做编程一定要细心仔细,而且也要有足够的耐心。
这次的课程设计真是学到不少东西,让我理解了知识的重要性,多学理论知识,勤动手操作,利用我们周围有效的学习资源。
是自己做一个更完善的人。
5.参考文献
[1]王敬华,林萍,陈静.C语言程序设计教程[M].北京:
清华大学出版社,2005.10
[2]谭浩强.C程序设计语言[M].北京:
机械工业出版社,2003.4:
205-256
[3]李邦几胡金桂王敬华.最新C语言实用教程[M].北京:
化学工业出版社,1996.3
[4]李军民.新编C语言程序设计教程(第二版)[M].西安:
西安电子科技大学出版社,2005.08:
68~93148~171
[5]谭浩强.C程序设计.北京:
清华大学出版社,2010.6
附录:
部分源程序
#include
#include
#include
#include
#include
#include
#include
#include
#include
#defineSTACK_INIT_SIZE10
#defineOK1
#defineTRUE1
#defineFALSE0
#defineERROR0
structstudent/*定义学生类型,用于存放借出的书籍*/
{
intcarnum;
charlendbook[10];
}student[1000];
structemploy/*定义职工类型*/
{
intemploynum;
charemployname[15];
intemployage;
charemploysex[2];
charemployleve[10];
longintemploytage;
}employ[50];
structbook/*定义书的类型*/
{
intbooknum;
charbookname[10];
charbookcreat[10];
intturefalse;/*用于借书和还书模块判断一本书是否借出的条件*/
}book[1000];
structcar/*借书卡的数据类型*/
{
intcarnum;
charstudentname[10];
intstudentclass;
}car[100];
huanbook()/*还书函数*/
{
FILE*fp,*fp2;/*定义两个文件指针,fp2用于修改数据时设立临时文件用,防止数据遭破坏*/
inti,n;
intcarnum;
charlendbook[10];
printf("请你输入你的卡号\n");fp=fopen("car.txt","r");/*读取卡号记录*/
for(i=0;fread(&car[i],sizeof(structcar),1,fp)!
=0;i++)/*for循环判断卡号是否存在*/
{
if(car[i].carnum==carnum)/*卡号存在,进入下一循环*/
{
n=i;
fclose(fp);
printf("请输入你要还的书的名字\n");
scanf("%s",lendbook);
fp=fopen("record.txt","r");
for(i=0;fread(&student[i],sizeof(structstudent),1,fp)!
=0;i++)/*判断是否借阅了输入的书*/
{
if(strcmp(student[i].lendbook,lendbook)==0)/*借阅了该书,进入下一循环,否则出错显示*/
{
fclose(fp);
fp=fopen("record.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&student[i],sizeof(structstudent),1,fp)!
=0;i++)
{
if(strcmp(student[i].lendbook,lendbook)==0)
{
continue;/*删除还掉的书的借书记录*/
}
fwrite(&student[i],sizeof(structstudent),1,fp2);/*写入原来没还的书的记录*/
}
fclose(fp);
fclose(fp2);
fp=fopen("record.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&student[i],sizeof(structstudent),1,fp2)!
=0;i++)
{
fwrite(&student[i],sizeof(structstudent),1,fp);/*将借书记录信息写回*/
}
fclose(fp);
fclose(fp2);
fopen("bookl.txt","w");/*清临时文件的记录*/
fclose(fp2);
fp=fopen("book.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)/*将书的记录写入临时文件,防止因为修改信息破坏以前的记录*/
{
if(i==n)
{
book[i].turefalse=1;
fwrite(&book[i],sizeof(structbook),1,fp2);/*将还的书的原来状态设为无人借阅的*/
continue;
}
fwrite(&book[i],sizeof(structbook),1,fp2);
}
fclose(fp);
fclose(fp2);
fp=fopen("book.txt","w");
fp2=fopen("bookl.txt","r");
for(i=0;fread(&book[i],sizeof(structbook),1,fp2)!
=0;i++)
{
fwrite(&book[i],sizeof(structbook),1,fp);/*将临时文件写回*/
}
fclose(fp);
fclose(fp2);
fopen("bookl.txt","w");/*清临时文件*/
fclose(fp2);
printf("还书完毕,按任意键返回\n");
getch();
return1;
}
}
printf("你没有借这样的书,任意键返回\n");/*出错提示*/
fclose(fp);
getch();
return0;
}
}
printf("系统没这样的卡,和管理员联系,按任意键返回\n");/*出错提示*/
fclose(fp);
getch();
}
findbook()
{
FILE*fp;
charbookname[10];
intture,i;
fp=fopen("book.txt","r");
printf("请输入你要查找的书名\n");
scanf("%s",bookname);
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(strcmp(bookname,book[i].bookname)==0)
{
if(book[i].turefalse==1)
{
printf("这本书的详细资料是:
%d%s%s此书现在无人借阅\n按任意键返回\n",book[i].booknum,book[i].bookname,book[i].bookcreat);
}
else{printf("这本书已经有人借出\n");fclose(fp);return0;}
fclose(fp);
returnFALSE;
}
}
printf("没有你要查询的书籍\n");
fclose(fp);
returnFALSE;
}
findbook1()
{
FILE*fp;
charbookcreat[10];
intture,i;
fp=fopen("book.txt","r");
printf("请输入你要查找的作者名\n");
scanf("%s",bookcreat);
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(strcmp(bookcreat,book[i].bookcreat)==0)
{
if(book[i].turefalse==1)
{
printf("这本书的详细资料是:
%d%s%s此书现在无人借阅\n按任意键返回\n",book[i].booknum,book[i].bookname,book[i].bookcreat);
}
else{printf("这本书已经有人借出\n");fclose(fp);return0;}
fclose(fp);
returnFALSE;
}
}
printf("没有你要查询的书籍\n");
fclose(fp);
returnFALSE;
}
lendcount()
{
FILE*fp;
inti,n=0;
fp=fopen("record.txt","r");
for(i=0;fread(&student[i],sizeof(structstudent),1,fp)!
=0;i++)
{
printf("卡号:
%d借出的书籍:
%s\n",student[i].carnum,student[i].lendbook);
n=n+1;
}
fclose(fp);
printf("目前共有%d本书借出\n",n);
printf("按任意键\n");
getch();
returnn;
}
chabook()
{
charch5;
do
{
printf("---------------欢迎进入图书查询系统!
--------------\n");
printf("1:
<按书名查找>\n");
printf("2:
<按作者查找>\n");
printf("0:
<返回>\n");
printf("请输入0--2,其他输入非法!
\n");
scanf("%s",&ch5);
switch(ch5)
{
case'1':
fi