配色: 字号:
_数据结构课程设计-图书管理系统
2020-10-02 | 阅:  转:  |  分享 
  




数据结构课程设计



图书管理系统









一、需求分析

在进行一个项目的设计之前,先要进行必要的需求分析。

现某图书馆需要管理其各种人员和图书信息,希望实现办公的信息化,通过建立一个图书管理系统来管理图书。其完成的功能如下:

(1)可以实现图书的登记、借阅的管理。

(2)可以实现对图书的各种信息的查询,包括逐个浏览,以及对图书信息的增加、删除和编辑操作。另外,可以根据输入的信息来检索某个图书的信息。

(3)可以实现对的管理(4)可以实现对的管理。

系统的功能模块图如图1所示。

本实例根据上面的设计规划出的实体有图书登记实体、图书借阅实体、查询输出实体、管理实体、管理实体。各个实体具体的描述E-R图二、结构设计

根据上面的需求分析,设计好数据库系统,然后开发应用程序可以考虑的窗体的系统,每一个窗体实现不同的功能,可以设计下面的几个模块。

●图书管理模块:用来实现图书的登记、借阅。

●图书资料模块:用来实现图书的查询输出。

●模块:用来实现人员的。

●管理模块:用来实现对管理。

三设计源程序



#include

#include

#include

#include

#include

#defineSTACK_INIT_SIZE10

#defineOK1

#defineTRUE1

#defineFALSE0

#defineERROR0

structstudent/定义学生类型,用于存放借出的书籍/

{

intcarnum;

charlendbook[10];

}student[1000];



structbook/定义书的类型/

{

intbooknum;

charbookname[10];

charbookcreat[10];

intturefalse;/用于借书和还书模块判断一本书是否借出的条件/

}book[1000];

structcar/借书卡的数据类型/

{

intcarnum;

charstudentname[10];

intstudentclass;

}car[100];



huanbook()/还书函数/

{

FILEfp,fp2;/定义两个文件指针,fp2用于修改数据时设立临时文件用,防止数据遭破坏/

inti,n;

intcarnum;

charlendbook[10];

printf("请你输入你的卡号\n");

scanf("%d",&carnum);

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();

return;

}

}

printf("你没有借这样的书,任意键返回\n");/出错提示/

fclose(fp);

getch();

return;



}

}

printf("系统没这样的卡,和管理员联系,按任意键返回\n");/出错提示/

fclose(fp);

getch();

}

lendcount()

{

FILEfp;

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();

}

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'':getch();break;

case''2'':printf("按作者查找\n");getch();break;

case''0'':break;

default:printf("无此操作\n");getch();break;

}

}while(ch5!=''0'');

}

lendbook()

{

FILEfp,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();

}

carcount()

{

FILEfp;

inti,n=0;

fp=fopen("car.txt","r");

for(i=0;fread(&car[i],sizeof(structcar),1,fp)!=0;i++)

{

printf("第%d张卡<卡号:%d姓名:%s班级:%d>\n",i+1,car[i].carnum,car[i].studentname,car[i].studentclass);

n=n+1;

}

fclose(fp);

printf("目前共有%d本书\n",n);

printf("按任意键\n");

getch();

}

delcar()

{

FILEfp,fp2;

inti;

intcarnum;

charchoice;

fp=fopen("car.txt","r");

fp2=fopen("bookl.txt","w");

printf("请输入你要删除的卡号\n");

printf("如果你输入的卡号存在,系统自动删除该信息!如果不存在,系统不做任何改动\n");





scanf("%d",&carnum);

for(i=0;fread(&car[i],sizeof(structcar),1,fp)!=0;i++)

{

if(car[i].carnum!=carnum)

{

fwrite(&car[i],sizeof(structcar),1,fp2);

}

}

fclose(fp);

fclose(fp2);

printf("是否真的要删除该卡?删除后该书籍的所有信息将无法恢复《Y/N》\n");

scanf("%s",&choice);

if(choice==''y''||choice==''Y'')

{

fp=fopen("car.txt","w");

fp2=fopen("bookl.txt","r");

for(i=0;fread(&car[i],sizeof(structcar),1,fp2)!=0;i++)

{

fwrite(&car[i],sizeof(structcar),1,fp);

}

fclose(fp);

fclose(fp2);

fp2=fopen("bookl.txt","w");

fclose(fp2);

printf("按任意键返回\n");

getch();

return;

}

else

{

printf("按任意键返回\n");

getch();

return;

}

}

addcar()

{

FILEfp;

inti=0;

fp=fopen("car.txt","a+");

printf("请你输入卡号\n");

scanf("%d",&car[i].carnum);

printf("请你输入学生姓名\n");

scanf("%s",car[i].studentname);

printf("请你输入班级\n");

scanf("%d",&car[i].studentclass);

fwrite(&car[i],sizeof(structcar),1,fp);

fclose(fp);

printf("输入完毕,任意键返回\n");

getch();

}

addbook()

{

FILEfp;

inti=0;

charchoice=''y'';

fp=fopen("book.txt","a+");

while(choice==''y''||choice==''Y'')

{

printf("请你输入第%d本书的序号\n",i=i+1);

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");

printf("请你设定书的状态\n");

scanf("%d",&book[i].turefalse);

fwrite(&book[i],sizeof(structbook),1,fp);

printf("是否要输入下本书YorN\n");

scanf("%s",&choice);

}

fclose(fp);

}

bookcount()

{

FILEfp;

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");

}

findbook()

{

FILEfp;

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",book[i].booknum,book[i].bookname,book[i].bookcreat);

}

else{printf("这本书已经有人借出\n");fclose(fp);return;}

fclose(fp);

return;

}

}

printf("没有你要查询的书籍\n");

fclose(fp);

return;

}

delbook()

{

FILEfp,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()

{

FILEfp,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(fp);

fclose(fp2);

fp2=fopen("bookl.txt","w");

fclose(fp2);

printf("按任意键返回\n");

getchar();

return;

}

main()

{

charch1,ch2,ch3,ch4,ch5;

do

{



printf("欢迎进入图书馆管理程序!\n");

printf("\t\t请你选择操作类型:\n");

printf("1:<查阅图书>\n");

printf("2:<借阅图书>\n");

printf("3:<管理系统>\n");

printf("4:<还书>\n");

printf("0:<退出>\n");

printf("请输入0--4\n");

scanf("%s",&ch1);

switch(ch1)

{

case''1'':chabook();break;

case''2'':lendbook();;break;

case''3'':{

do

{

printf("---------------欢迎进入管理系统!--------------\n");

printf("1:<增加图书>\n");

printf("2:<删除图书>\n");

printf("3:<修改图书资料>\n");

printf("4:<书籍统计>\n");

printf("5:<学生管理系统>\n");

printf("0:<返回>\n");

printf("请输入0--5,其他输入非法!\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");

printf("1:<申请新卡>\n");

printf("2:<删除卡号>\n");

printf("3:<借书统计>\n");

printf("4:<卡号统计>\n");

printf("0:<返回>\n");

printf("请输入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'');





























献花(0)
+1
(本文系暴风雪中原创)