C语言课设之图书管理系统.docx

上传人:b****7 文档编号:10592231 上传时间:2023-02-21 格式:DOCX 页数:36 大小:103.89KB
下载 相关 举报
C语言课设之图书管理系统.docx_第1页
第1页 / 共36页
C语言课设之图书管理系统.docx_第2页
第2页 / 共36页
C语言课设之图书管理系统.docx_第3页
第3页 / 共36页
C语言课设之图书管理系统.docx_第4页
第4页 / 共36页
C语言课设之图书管理系统.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

C语言课设之图书管理系统.docx

《C语言课设之图书管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课设之图书管理系统.docx(36页珍藏版)》请在冰豆网上搜索。

C语言课设之图书管理系统.docx

C语言课设之图书管理系统

 

C语言课程设计

 

目录

1、需求分析;

2、系统总框图;

3、每个模块的设计分析;

4、列出所有定义的函数及说明;

5、举例说明1、2个比较有特点的算法;

6、数据分析。

7、存在的问题与不足及对策;

8、使用说明(操作手册);

9、学习心得。

 

图书管理系统设计

一.题目要求:

图书管理信息包括:

图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等。

程序还有以下功能:

新近图书基本信息的输入;图书基本信息的查询;对撤销图书信息的删除;办理借书手续;办理还书手续。

二.系统总框图

图书管理系统

归还图书

管理系统

查询图书

借阅图书

 

按书名找

增加图书

按作者找

删除图书

修改图书

图书统计

会员管理

 

卡号统计

借书统计

定义会员

删除会员

 

三.每个模块的设计分析和所有定义的函数及说明

1、数据结构

//图书的数据结构:

structbook

{

intbooknum;//书号

charbookname[20];//书名

charbookcreat[10];//书的作者

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

}book[1000];//定义一个比较大的1000本书

//会员卡的数据类型

structcar

{

intcarnum;//卡号

charstudentsex[4];//性别

charstudentname[20];//姓名

intstudentclass;//所在班级

}car[1000];//定义一千个会员

 

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

structstudent

{

intcarnum;//卡号

charlendbook[10];//借出的书数

}student[1000];//定义一千个学生

2、main()主函数模块

主函数是程序入口,采用模块化设计。

首先在主程序中打印欢迎界面,定义一些必要变量,作一无限循环程序,循环体为一开关语句,该语句设置一个断点,其条件值是通过调用主菜单函数得到的返回值,根据该值,调用相应的功能函数,同时设置一个断点,当返回值为一定条件时结束程序。

3、chabook()查询图书函数模块

在这个模块中又分为两个子模块:

按书名查找模块和按作者查找。

1)按书名查找模块:

在这个子函数里使用指向文件的指针变量,定义指针变量fp,fp指向文件名为“book.txt”的首地址,如果不存在,则自动建立。

从键盘输入书名,依次移动指针地址,直到找到输入的文件名,找到后显示图书信息,再判断状态值是否为1,真的话就显示“此书现在无人借阅”,假就显示“这本书已经有人借出!

”,关闭文件,然后按任意键返回。

如果找到最后一个地址仍没找到,就显示“没有你要查询的书籍!

”。

关闭文件。

2)按作者查找,原理同按书名查找。

4、lendbook()借书函数模块

定义文件指针变量fp,fp2。

fp指向“car.txt(会员卡记录文件)”首地址,从键盘输入卡号,与文件中保存的依次比较,如果一致,就找到这个地址,并赋给变量i。

关闭这个文件。

开始借书,输入要借的书,这时指针地址指向“book.txt”,以只读的方式打开,依次找与输入书名一致的图书,如果找到,又分两种情况:

状态值为1,则把书借出,把此书的状态值改为0.否则,显示“书已被借出”。

如果找不到,显示“不存在这样的书”,关闭文件。

返回。

5、huanbook()还书函数模块

同样定义两个指针变量:

fp,fp2。

先从键盘输入要还图书者会员卡卡号,然后是还书人名字,与文件中的相对照,都一致就进入还书过程,删除掉所还图书的借书记录,将还的书的原来状态设为无人借阅的。

如果没找到图书就显示“你没有借这样的书,任意键返回...”,如果没找到所输卡号,则显示“没这样的卡,和管理员联系,按任意键返回...”。

还书过程结束。

6、lendcount()借书统计函数模块

定义指向文件的指针变量fp,并使fp指向“record.txt”,以只写的方式打开文件,从首地址读取,找到借书信息,就把统计借出书个数的变量i的值加1。

并显示借出的每一本书的信息。

7、addcar()增加会员卡函数模块

定义指向文件的指针变量fp,并使fp指向“car.txt”的首地址,以追加的方式打开文件“car.txt”,从键盘输入会员信息,并写入文件。

8、delcar()删除会员卡函数模块

定义指向文件的指针变量fp,和fp2。

分别以写入的方式打开“car.txt”,和“bookl.txt”。

从键盘输入要删除的会员卡卡号,然后把有关信息删除。

9、carcount()会员统计函数模块

定义指向文件的指针变量fp,使其指向“car.txt”,以只读的方式打开,依次读取里面数据,把会员个数赋给表示会员个数的变量n,并输出每个会员信息。

10、addbook()增加图书函数模块

定义指向文件的指针变量fp,使其指向“book.txt”

并以追加的方式打开文件,依次从键盘读入图书的各个信息,写入文件,然后关闭文件。

11、delbook()删除图书函数模块

定义两个文件指针,fp,fp2.从键盘输入图书名字。

然后在文件中查找,找到后删除掉有关记录,找不到则报错。

12、changebook()修改图书信息函数模块

定义两个文件指针,fp,fp2.从键盘输入要修改的图书名。

然后从文件中找一致的,找到后询问修改哪一部分。

在进入修改。

完成后关闭文件。

13、bookcount()图书统计函数模块

定义文件指针fp,并使之指向“book.txt”依次从里面读取数据,并输出。

14、end()结束函数模块

定义退出界面。

四.举例说明2个比较有特点的算法

算法一:

查询图书函数

在这个算法的特点在于:

模块中又分为两个子模块:

按书名查找模块和按作者查找,以满足读者的不同需求。

11、算法二:

借书统计函数模

特点在于:

能够统计借出的书的信息。

定义指向文件的指针变量fp,并使fp指向“record.txt”,以只写的方式打开文件,从首地址读取,找到借书信息,就把统计借出书个数的变量i的值加1。

并显示借出的每一本书的信息。

五:

数据分析

#include

#include

#include

#include

#include

#defineSTACK_INIT_SIZE10

#defineOK1

#defineTRUE1

#defineERROR0

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

structstudent{

intcarnum;

charlendbook[10];

}student[1000];

/*定义书的类型*/

structbook

{

intbooknum;

charbookname[20];

floatbookprice;

charbookcreat[20];

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

}book[1000];

/*借书卡的数据类型*/

structcar

{

intcarnum;

charsex[5];

charstudentname[20];

intstudentclass;

}car[1000];

//////////////////////////////////查询图书信息模块//////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////

//////

(1)按书名查找

findbook()

{

FILE*fp;

charbookname[10];

inti;

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("书号书名作者\n%d%s%s\n",book[i].booknum,book[i].bookname,book[i].bookcreat);

printf("此书现在无人借阅\n按任意键返回\n");}

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

fclose(fp);

return0;

}

}

printf("没有你要查询的书籍!

\n");

fclose(fp);

return0;

}

//////////

(2)按作者查找

findbook1()

{

FILE*fp;

charbookcreat[10];

inti;

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("书号书名作者\n%d%s%s\n",book[i].booknum,book[i].bookname,book[i].bookcreat);

printf("此书现在无人借阅\n按任意键返回\n");

}

else{printf("这本书已经有人借出!

\n");

fclose(fp);

return0;

}

fclose(fp);

return0;

}

}

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

fclose(fp);

return0;

}

chabook()/////查找图书主模块

{

charch5;

do

{

printf("◎◎◎欢迎进入图书查询系统◎◎◎\n");

printf("1:

按书名查找\n");

printf("2:

按作者查找\n");

printf("0:

返回\n");

printf("请输入0━2:

\n");

ch5=getch();

switch(ch5)

{

case'1':

findbook();getch();break;

case'2':

findbook1();getch();break;

case'0':

break;

default:

printf("无此操作!

\n");getch();break;

}

}while(ch5!

='0');

return0;

}

/////////////////////////////////////////////////////////////////

//////////借书与还书模块

/////

(1).借书模块

lendbook()

{

FILE*fp,*fp2;

inti,n;

intcarnum;

system("cls");

printf("\t\t◎◎◎欢迎进入借书系统◎◎◎\n\n");

printf("请输入借书人的:

\n卡号:

\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();return0;}

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

return0;

}

}

printf("不存在这样的书,任意键返回...\n");

fclose(fp);

getch();

return0;

}

}

printf("你的卡号不存在,请申请新卡,按任意键返回...\n");

fclose(fp);

getch();

return0;}

///////

(2).还书函数

huanbook()

{

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

inti,n;

intcarnum;

charlendbook[10];

system("cls");

printf("\t\t◎◎◎欢迎进入还书界面◎◎◎");

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

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

return1;

}

}

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

fclose(fp);

getch();

return0;

}

}

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

fclose(fp);

getch();

return0;}

////////(3).借书统计

lendcount()

{

FILE*fp;

inti,n=0;

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

if((fp=fopen("record.txt","r"))==0)

{printf("文件中没有数据!

\n");

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

getch();

return(0);

}

for(i=0;fread(&student[i],sizeof(structstudent),1,fp)!

=0;i++)

{

printf("卡号借出的书籍\n");

printf("%d%s\n",student[i].carnum,student[i].lendbook);

n=n+1;

}

fclose(fp);

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

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

getch();

returnn;

}

//////////////////////////////////会员卡管理模块/////

//////////

(1).增加会员卡

addcar()

{

FILE*fp;

inti=0;

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

printf("卡号:

\n");

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

printf("性别:

\n");

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

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

}

//////////

(2).删除会员卡

delcar()

{

FILE*fp,*fp2;

inti;

intcarnum;

charchoice;

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

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 远程网络教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1