C语言课程设计图书管理系统.docx
《C语言课程设计图书管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计图书管理系统.docx(59页珍藏版)》请在冰豆网上搜索。
C语言课程设计图书管理系统
C语言程序设计实习报告
图书管理系统
班级:
姓名:
学号:
指导老师:
前言
随着信息技术对人类社会进行的全方位渗透,一种新的文化形态——信息
时代的计算机文化已经形成。
计算机知识成为当代知识分子结构中不可缺少的
重要部分。
C语言是近年来国内外得到迅速推广使用的一种高级语言。
C语言功能丰
富,表达能力强,使用灵活方便,应用广,目标程序效率高,可移植性好,既
具有高级语言的优点,又具有低级语言的语言特点,因此C语言对我们来说很
重要。
设计是一门重要的计算机基础课程,通过学习,学生不仅要掌握高级程序
设计语言的知识,更重要的是在实践中逐步掌握程序设计的思想和方法,培养
问题求解和语言的应用能力。
此次上机实习,不但要使同学们的程序设计能力
上一台阶,同时要提高与程序设计和软件开发有关的各种综合能力。
由于课时和上机时间的仓促,所以我对很多内容还来不及消化,对上机演
练十分陌生,还有一些知识遗忘,因而这次程序设计的实习实际上是对我的一
次集中的强化练习。
虽然其时间短,任务重,但我们的确达到了此次课程设计
的目的。
本次实习得到曹弘老师的指导和帮助,至此表示感谢!
陈锐
2010年09月
一、题目要求
1.新进图书基本信息的输入。
2.图书基本信息的查询。
3.对撤消图书信息的删除。
4.为借书人办理注册。
5.办理借书手续。
6.办理还书。
二、需求分析
作为学生对图书管理系统的要求有:
1.能按各种方式(比如书名、编号、作者)查询图书馆的藏书情况。
2.能够方便地借阅图书、归还图书。
3.能够查询自己的基本资料、借阅图书情况。
4.能够熟悉图书管理系统的使用。
作为图书管理员,他们对图书管理系统的要求有:
1.能方便的对图书进行录入登记,注销陈旧的书籍。
2.能够方便地对新生进行登记,或注销已经毕业的学生信息(基本信息,借阅信息)。
3.能够随时发布一些诸如各学院学生借阅图书超期情况、馆内藏书情况、借阅情况等信息,以便各学院能够随时获知本院学生的一些借书信息。
根据题目需要,由于图书信息需要存放在文件中,所以应提供文件输入、输出等操作。
应提
供查找、借阅、管理等功能。
由于有多种借阅图书的方法,而又需要提供相应的算法,最后还
应提供键盘是选择菜单实现功能。
三、总体设计
四、详细设计
1、主函数
[说明]
主函数较多、较复杂,已经和主菜单函数合并,主菜单函数里还包括了各自的二级菜单,并已经开始了对各个函数的调用。
为了程序显示的清晰可读,应先清屏之后调用菜单函数。
[流程]
开始
显示一系列功能选项
N
输入n,判断n是否是0-4
Y
返回主菜单
根据n的值调用各功能模块函数
[程序]
main()
{
charch1,ch2,ch3,ch4,ch5;
do
{
printf("\n\n\n\t\t***********图书管理系统***********\n");
printf("\n\t\t\t\t1:
<查阅图书>\n");
printf("\n\t\t\t\t2:
<借阅图书>\n");
printf("\n\t\t\t\t3:
<管理系统>\n");
printf("\n\t\t\t\t4:
<归还图书>\n");
printf("\n\t\t\t\t0:
<退出系统>\n");
printf("\n请输入0--4,其他输入非法!
\n");
scanf("%s",&ch1);
switch(ch1)
{
case'1':
chabook();break;
case'2':
lendbook();;break;
case'3':
{
do
{
printf("\n\n\n\t\t***********欢迎进入管理系统***********\n");
printf("\n\t\t\t\t1:
<增加图书>\n");
printf("\n\t\t\t\t2:
<删除图书>\n");
printf("\n\t\t\t\t3:
<修改图书资料>\n");
printf("\n\t\t\t\t4:
<书籍统计>\n");
printf("\n\t\t\t\t5:
<职工管理系统>\n");
printf("\n\t\t\t\t6:
<学生管理系统>\n");
printf("\n\t\t\t\t0:
<返回>\n");
printf("\n请输入0--6,其他输入非法!
\n");
scanf("%s",&ch2);
switch(ch2)
{
case'1':
addbook();break;
case'2':
delbook();break;
case'3':
changebook();break;
case'4':
bookcount();getch();break;
case'5':
{do
{
printf("\n\n\n\t\t***********欢迎进入职工管理系统!
***********\n");
printf("\n\t\t\t\t1:
<增加员工>\n");
printf("\n\t\t\t\t2:
<删除员工>\n");
printf("\n\t\t\t\t3:
<修改员工资料>\n");
printf("\n\t\t\t\t4:
<员工统计>\n");
printf("\n\t\t\t\t0:
<返回>\n");
printf("\n请输入0--4,其他输入非法!
\n");
scanf("%s",&ch3);
switch(ch3)
{
case'1':
addemploy();getch();break;
case'2':
delemploy();break;
case'3':
changemploy();break;
case'4':
employcount();getch();break;
case'0':
break;
default:
printf("无此操作\n");getch();break;
}
}while(ch3!
='0');}break;
case'6':
{
do
{
printf("\n\n\n\t\t***********欢迎进入学生管理系统!
***********\n");
printf("\n\t\t\t\t1:
<申请新卡>\n");
printf("\n\t\t\t\t2:
<删除卡号>\n");
printf("\n\t\t\t\t3:
<借书统计>\n");
printf("\n\t\t\t\t4:
<卡号统计>\n");
printf("\n\t\t\t\t0:
<返回>\n");
printf("\n请输入0--4,其他输入非法!
\n");
scanf("%s",&ch4);
switch(ch4)
{
case'1':
addcar();break;
case'2':
delcar();break;
case'3':
lendcount();break;
case'4':
carcount();break;
case'0':
break;
default:
printf("无此操作\n");getch();break;
}
}while(ch4!
='0');}break;
case'0':
break;
default:
printf("无此操作\n");getch();break;
}
}while(ch2!
='0');}break;
case'4':
huanbook();break;
case'0':
break;
default:
printf("无此操作\n");getch();break;
}
}while(ch1!
='0');}
2、各功能模块设计
(1)查阅模块
[说明]
输入个员工信息后,浏览、查找、排序时同一个员工的所有信息都要同时显示,所以运用结构体运行。
数据信息存放在文件中,一条记录对应一条学生信息,方便管理。
[流程]
[程序]
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':
findbook();getch();break;
case'2':
findbook1();getch();break;
case'0':
break;
default:
printf("无此操作\n");getch();break;
}
}while(ch5!
='0');
returnFALSE;
}
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;
}
(2)借阅模块
[说明]
查阅完图书记录后,用户要借阅图书,系统要在操作过程中提示用户输入流程,根据用户所输入的指令,帮助其完成借阅。
[流程]
[程序]
lendbook()/*借书函数*/
{
FILE*fp,*fp2;
inti,n;
intcarnum;
printf("请你输入你的卡号\n");
scanf("%d",&carnum);
fp=fopen("car.txt","r");
for(i=0;fread(&car[i],sizeof(structcar),1,fp)!
=0;i++)
{
if(car[i].carnum==carnum)
{
n=i;
fclose(fp);
printf("请输入你要借阅的书的名字\n");
scanf("%s",student[n].lendbook);
fp=fopen("book.txt","r");
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(strcmp(book[i].bookname,student[n].lendbook)==0)
{
if(book[i].turefalse==0){printf("对不起,此书有人借出,请借其他书\n");fclose(fp);getch();return;}
else
fclose(fp);
fp=fopen("record.txt","a+");
student[n].carnum=carnum;
fwrite(&student[n],sizeof(structstudent),1,fp);
fclose(fp);
fp=fopen("book.txt","r");
fp2=fopen("bookl.txt","w");
for(i=0;fread(&book[i],sizeof(structbook),1,fp)!
=0;i++)
{
if(strcmp(book[i].bookname,student[n].lendbook)==0)
{
book[i].turefalse=0;
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();
return;
}
}
printf("不存在这样的书,任意键返回\n");
fclose(fp);
getch();
return;
}
}
printf("你的卡号不存在,请申请新卡,按任意键返回\n");
fclose(fp);
getch();}
(3)管理模块
[说明]
管理模块最为复杂,管理所有的图书及职工、学生的信息。
先进入总体的管理系统,在这个系统中重点的操作是图书的管理,为其中的1至4项(分别是增加图书、删除图书、修改图书资料、书籍统计),同时系统还连接了职工、学生管理两个系统,为下一步的操作提供了条件。
职工管理系统主要有增加图书、删除图书、修改图书资料、书籍统计,学生管理系统主要有申请新卡、删除卡号、借书统计、卡号统计四个模块,用于管理学生登录信息。
[流程]
[程序]
<1>图书管理系统
addbook()/*增加图书函数*/
{
FILE*fp;
inti=1;
charchoice='y';
fp=fopen("book.txt","a+");
while(choice=='y'||choice=='Y')
{
printf("请你输入第%d本书的序号\n",i++);
scanf("%d",&book[i].booknum);
printf("请你输入书名\n");
scanf("%s",book[i].bookname);
printf("请你输入书的作者\n");
scanf("%s",book[i].bookcreat);
printf("请你设定书的状态(请设为1或0,1代表书还没人借,0表示书已经借出,设其他值,程序运行时无法得出正常结果)\n");
scanf("%d",&book[i].turefalse);
fwrite(&book[i],sizeof(structbook),1,fp);
printf("是否要输入下本书?
\n");
scanf("%s",&choice);
}
fclose(fp);
}
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;}
}
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;
}
bookcount()/*图书统计函数*/
{
FILE*fp;
inti,n=0;
fp=fopen