C语言图书信息管理系统.docx
《C语言图书信息管理系统.docx》由会员分享,可在线阅读,更多相关《C语言图书信息管理系统.docx(25页珍藏版)》请在冰点文库上搜索。
C语言图书信息管理系统
苏州科技大学
二O—六〜二O—七学年第一学期
电子与信息工程系
课程设计报告书
课程名称:
图书信息系统
班级:
电子1612班
学号:
16200106231
姓名:
张立进
指导教师:
任建平
二O—七年三月
1.题目:
《图书信息系统》的设计与实现
2.功能:
(1)每一条记录包括一个图书编号,图书名,作者名,出版社等。
⑵图书信息浏览功能:
完成全部图书信息记录的显示和浏览,包括排序后、修改后、插入后、删除后信息改变的浏览。
(3)图书信息录入功能:
完成对“图书编号,图书名,作者名,出版社”信息的录入。
(4)图书信息修改功能:
对图书信息进行修改并保存。
(5)图书信息查询功能:
通过输入图书编号查找该图书,并显示该图书所有信息。
(6)图书信息插入功能:
通过输入某本图书编号进行图书信息的插入并保存。
(7)图书信息删除功能:
完成删除图书的信息的功能。
(8)图书信息排序功能:
按图书编号对图书进行从小到大重新排序。
(9)图书信息帮助功能:
能够给用户提供所有函数的帮助功能,并作相应得介绍。
3.要求:
(1)整个系统均用C语言实现;
(2)利用指针、链表来实现图书信息的数据结构设计;
(3)系统具有输入、显示、查询、删除、排序、插入,保存、读取基本功能;
(4)系统的各个功能模块都用函数的形式来实现;
(5)可以将图书信息保存在文件中。
(6)可以将图书信息从文件中读取出来。
4.设计内容:
整个系统除了主函数外,另外还有13个函数,,包括主函数在内,以实现9大功能:
图书信息浏览功能,图书信息录入功能,图书信息修改功能,图书信息查询功能,图书信息插入功能,图书信息删除功能,图书信息排序功能,
图书信息帮助功能,退出系统功能
其功能流程图如下所示:
图1主菜单选择功能流程图
各个函数的详细设计说明分别如下:
4.1创建主函数voidmain()
该函数通过选择各选项,完成相应的功能,当选择退出选项时,退出循环,
具体的选择项有:
【1】图书信息浏览功能,【2】图书信息录入功能,【3】图书信息修改功能,【4】图书信息查询功能,【5】图书信息插入功能,【6】图书信息删除功能,【7】图书信息排序功能,【8】图书信息帮助功能,【9】退出系统功能。
4.2结构体struct
定义了一个图书信息的结构体,包括charauthor[20];charbookname[20];
charpublisher[20];intnum;等。
操作流程:
1进入主界面选择图书信息浏览
2输出所有已存储的所有图书信息
3退回主界面
4.3编写浏览数据记录函数voidallinformation()
该函数可以通过选择相应的功能对已经输入并保存的所有的图书信息进行
浏览,并且退出后还能保存记录,以备下次浏览时信息没有丢失。
操作流程:
1进入主界面选择图书信息浏览
2输出所有已存储的所有图书信息
4.4编写录入数据记录函数inputbook()
该函数可以添加新的图书信息,并且在退出后可以自动保存,当重新浏览所有图书信息时,新添加的图书信息也在其中,且通过if(y!
=1)来判别是1录入,0不录入,来实现是否继续录入的功能。
操作流程:
1进入录入界面
2输入相关信息(图书编号、名字、作者名、出版单位)保存退出。
4.5编写修改数据记录函数editbook()
该函数可以完成对已有的图书信息“图书编号,图书名,作者名,出版社”进行重新修改并加以保存,实现图书信息的修改,为以后的保存函数,浏览函数,查询函数,排序函数,删除函数,修改函数等功能的实现提供了基础。
操作流程:
1进入修改界面
2修改所要修改的图书的编号、作者名等相关信息。
4.6编写查询数据记录函数querybook()
该函数运用for语句实现对图书编号信息的查找输出,并显示到屏幕上,实现图书信息的查找功能。
操作流程:
1进入查询界面
2通过输入图书编号输出显示指定图书匹配信息
4.7编写插入数据记录函数insertbook()
通过voidinsertbook()插入函数来实现插入,先清屏system("cls");然后通过输入插入前图书编号后进行新图书信息的输入最终图书信息插入功能,退出后
自动保存可以再次浏览。
操作流程:
1进入删除界面
2输入所要删除的图书编号后自动删除。
4.8编写删除数据记录函数deletebook()
该函数通过voiddeletebook()删除函数来实现图书信息的删除,通过输入图书编号查找到该图书之后删除。
退出后再次浏览所有图书信息时便看不到已删除的图书信息。
操作流程:
1进入插入界面
2输入所要插入位置的图书编号,然后插入新图书的相关信息。
4.9编写数据记录排序函数voidsortbook()
该函数定义了i,j运用冒泡法对图书信息进行排序,对图书的编号按照从小到大的顺序来排序的。
最好显示已排序好的的图书信息。
操作流程:
1进入插入界面
2输入所要插入位置的图书编号,然后插入新图书的相关信息。
3退回主界面
4.10编写帮助函数voidhelp()
该函数是简单的帮助功能,介绍了各个模块的功能,使用户快速了解该系统的功能作用。
具体代码如下:
voidhelp()
{
printf("\t|帮助|\n");
printf("下方显示的是您所需的帮助信息:
\n");
printf("\n");
printf("《如果选择1,则进入第一个选项
(1).图书信息浏
览》:
完成全部图书信息记录的显示和浏览,包括排序后、修改后、插入后、删除后信息改变的浏览。
\n");
printf("《如果选择2,则进入第二个选项
(2).图书信息录入》:
完成对图书号,图书名,作者名,出版社信息的录入。
\n");
printf("《如果选择3,则进入第三个选项(3).图书信息修改》:
对图书信息进行修改并保存。
\n");
printf(”《如果选择4,则进入第四个选项(4).图书信息查
询》:
通过输入图书编号查找该图书,并显示该图书所有信息。
\n");
printf("《如果选择5,则进入第五个选项(5).图书信息插入》:
通过输入某本图书编号进行图书信息的插入并保存。
。
\n");
printf("《如果选择6,则进入第六个选项(6).图书信息删除》:
完成删除图书的信息的功能\n");
printf("《如果选择7,则进入第八个选项(7).图书文件排
序》:
按图书编号对图书进行从小到大重新排序。
\n");
printf("《如果选择9,则进入第九个选项(8).帮助功能》:
提供一些帮助给用户使用,以备更好的使用。
\n");
printf("《如果选择0,则进入第零个选项(9).退出系统》:
用来退出系统,以备下次再使用。
\n");
printf("\n\n请按任何键返回,谢谢!
\n");
fflush(stdin);
getchar();
}
5.调试分析
在此次的C语言程序设计中,我的程序开始有很多的错误,例如errorC2440:
'=':
cannotconvertfrom'int'to'int[10]',是我忽略不能把整型转换
成数组。
插入功能出现插入信息后却浏览不到,后来在插入后面加了一段保存文
件的代码后,插入功能才得以实现,还有因为我的粗心把写文件写成了读文件导致删除功能无法实现。
经过我和其他同学反复的检查反复的修改,最终完成了。
6.源程序
#include
#include
#include
#include
#defineNULL0
#definea100
intnow=0;
structbook
{
/*作者名*/
/*图书名*/
/*出版单位*/
charauthor[20];charbookname[20];
charpublisher[20];
charday[100];/*出版时间*/floatmoney;/*价格*/
/*图书编号*/
intnum;
};
structbookb[a];
/*系统主菜单*/
voidmainmenu()
{
FILE*fp1,*fp2;inti;
system("cls");
printf("\n温馨提示:
printf("\n\n");
r\rin+f/"\4-\4-i
为保证您的操作得到保存,请按正常顺序退出系统
A_A\n");
print”\t\t+
+\n);
printf("\t\t|
|欢迎使用图书信息管理系统|
|\n");
printf("\t\t|
11
|\n");
printf("\t\t|
|\n”);
printf("\t\t|
•[1]图书信息浏览
|\n");
printf("\t\t|
|\n”);
printf("\t\t|
•[2]图书信息录入
|\n");
printf("\t\t|
|\n”);
printf("\t\t|
•[3]图书信息修改
|\n");
printf("\t\t|
|\n”);
printf("\t\t|
•[4]图书信息查询
|\n");
printf("\t\t|
|\n");
printf("\t\t|
•⑸图书信息插入
|\n");
printf("\t\t|
|\n”);
printf("\t\t|
•⑹图书信息删除
|\n");
printf("\t\t|
|\n”);
printf("\t\t|
•[7]图书信息排序
|\n");
printf("\t\t|
|\n”);
printf("\t\t|
•[8]帮助
|\n");
printf("\t\t|
|\n”);
printf("\t\t|
•[9]退出系统
|\n");
printf("\t\t|
|\n");
printf("\t\t+——
+\n");
printf("请输入您的选择:
”);
/*library.txt里面读出now的值*/
if((fp2=fopen("D:
\\library.txt","rb"))!
=NULL){
fscanf(fp2,"%d",&now);
fclose(fp2);
}
/*b.txt里面读出一组数据的值*/
if((fp仁fopen("D:
\\b.txt","rb"))!
=NULL)
{
for(i=0;ifread(&b[i],sizeof(structbook),1,fp1);
fclose(fp1);
}
}
/*图书信息浏览*/
voidallinformation()
{
inti;
charturn;
printf("\t|图书信息浏览|\n");
printf("浏览所有图书信息\n");
printf("图书编号\t图书名\t\t作者名\t\t出版单位\t\t出版时间价格n\n");
for(i=0;i{
\t\t%s
printf("%d\t\t%s\t\t%s\t\t%s\t\t%s
\n\n",b[i].num,b[i].bookname,b[i].author,b[i].publisherb[i].[day]b[i].[money]);
}
printf("\t按任意键返回主菜单.");/*返回主菜单*/
turn=getch();
mainmenu();
}
/*图书信息录入*/
voidinputbook()
{
printf("\t|图书信息录入|\n");
inti=now;
FILE*fp1,*fp2;
charturn,judge;
do
{
printf("请输入添加第%d本图书的信息:
\n",i+1);
printf("\n请输入图书名:
\n");
scanf("%s",b[i].bookname);
printf("\n请输入图书编号:
\n");
scanf("%d",&b[i].num);
printf("\n请输入作者名:
\n");
scanf("%s",b[i].author);
printf("\n请输入出版单位:
\n");
scanf("%s",b[i].publisher);
printf("\n请输入出版时间:
\n");
scanf("%s",b[i].day);
printf("\n请输入价格:
\n");
scanf("%s",b[i].money);
i++;
now=i;
/*library.txt里面写入now的值*/
if((fp2=fopen("D:
\\library.txt","wb"))!
=NULL)
{
fprintf(fp2,"%d",now);
fclose(fp2);
}
printf("是否继续添加?
(y/n)\n");
judge=getch();
}
while(judge!
='n');
/*book.txt里面写入一组数据的值*/
if((fp仁fopen("D:
\\b.txt","wb"))!
=NULL)
{
for(i=0;ifwrite(&b[i],sizeof(structbook),1,fp1);
fclose(fp1);
}
else
printf("cannotopenthefile\n");
printf("\t请按任意键返回.");/*返回主菜单*/
turn=getch();
mainmenu();
}
/*图书信息修改*/
voideditbook()
{
FILE*fp1;
inti,e_num,j;
chare_author[10],e_publisher[10],e_bookname[10],judge,turn;structbookebook;
printf("\t|图书信息修改|\n");
do
{
printf("请输入需要修改的图书编号\n");
scanf("%d",&ebook.num);
for(i=0;iif(ebook.num==b[i].num)/*如果编号相同,说明图书存在,可以进行修改*/{
printf("\n图书编号:
\n");
scanf("%d",&e_num);
printf("\n图书名:
\n");
scanf("%s",e_bookname);
printf("\n作者名:
\n");
scanf("%s",e_author);
printf("\n出版单位:
\n");
scanf("%s",e_publisher);
printf("\n出版时间:
\n");
scanf("%s",e_day);
printf("\n价格:
\n");
scanf("%s",e_money);
b[i].num=e_num;
strcpy(b[i].bookname,e_bookname);
strcpy(b[i].author,e_author);
strcpy(b[i].publisher,e_publisher);
strcpy(b[i].publisher,e_day);
strcpy(b[i].publisher,e_mony);
printf("\n图书信息修改成功,请继续选择!
\n");
printf("\n\n");
break;
}
if(i==now)
printf("没有此图书\n");
printf("是否继续修改下本图书?
(y/n)\n");
judge=getch();
/*b.txt里面写入一组数据的值*/
if((fp仁fopen("D:
\\b.txt","wb"))!
=NULL)
{
for(j=0;jfwrite(&b[j],sizeof(structbook),1,fp1);
fclose(fp1);
}
else
printf("cannotopenthefile\n");
while(judge!
='n');
printf("\t按任意键返回主菜单.");
turn=getch();
mainmenu();
}
/*图书信息查询*/
voidquerybook()
{
intnumber,flag=1,i;
charjudge,turn;
printf("\t|图书信息查询|\n");
printf("请输入要查询的图书编号:
");
scanf("%d",&number);
for(i=0;i{
if(number==b[i].num)
{
flag=0;
printf("图书编号\t图书名\t\t作者名\t\t出版单位\t\t出版时间\t\t价格\n\n");printf("%d\t\t%s\t\t%s\t\t%s\t\t%s
\t%s\n\n”,b[i].num,b[i].bookname,b[i].author,b[i].publisher.b[i].day.b[i].money);
break;
}
}
if(flag!
=0)
{
printf("不能找到该图书信息r);
}
printf("\t按任意键返回主菜单.");
turn=getch();
mainmenu();
}
/*图书信息插入*/
voidinsertbook()
{
FILE*fp2,*fp1;
inti,j,h;
charturn,judge;
structbookib;
printf("\t|图书信息插入|\n");
do
{
h=now;
printf("请输入插入之前的图书编号\n");
scanf("%d",&ib.num);
for(i=0;iif(ib.num==b[i].num)//如果编号相同,说明图书存在,进行插入;
{now++;
for(j=now_2;j>=i;j__)
{
b[j+1]=b[j];
}
printf("\n请输入图书名:
\n");
scanf("%s",b[i].bookname);
printf("\n请输入图书编号:
\n");
scanf("%d",&b[i].num);
printf("\n请输入作者名:
\n");
scanf("%s",b[i].author);
printf("\n请输入出版单位:
\n");
scanf("%s",b[i].publisher);
printf("\n请输入出版时间\n");
scanf("%s",b[i].day);
printf("\n请输入价格:
\n");
scanf("%s",b[i].money);
break;
}
if(i==h)
printf("没有本图书\n");
printf("是否继续插入?
(y/n)\n");
judge=getch();
}while(judge!
='n');
/*library.txt里面读出now的值*/
if((fp2=fopen("D:
\\library.txt","wb"))!
=NULL)
{
fprintf(fp2,"%d",now);
fclose(fp2);
}
/*b.txt里面读出一组数据的值*/
if((fp仁fopen("D:
\\b.txt","wb"))!
=NULL)
{
for(i=0;ifwrite(&b[i],sizeof(structbook),1,fp1);
fclose(fpl);
}
printf("\t按任意键返回主菜单.");
turn=getch();
mainmenu();
}
/*图书信息删除*/
voiddeletebook()
{
intnumber;
charturn;
intt=now;
inti;
FILE*fp2,*fp1;
|\n");
system("cls");/*清屏*/
printf("\t|图书信息删除
printf("\n请输入要删除的图书编号:
");scanf("%d",&number);
for(i=0;i{
if(number==b[i].num)
{
for(;i{
strcpy(b[i].bookname,b[i+1].bookname);b[i].num=b[i+1].num;
strcpy(b[i].publisher,b[i+1].publisher);strcpy(b[i].author,b[i+1].author);
}
printf("\n删除图书文件成功!
\n");
now--;
break;
}
}
if(i==t)
printf("\n对不起!
文件不能找到!
\n");
/*library.txt里面读出now的值*/
if((fp2=fopen("D:
\\library.txt","wb"))!
=NULL){
fprintf(fp2,"%d",now);fclose(fp2);
}
/*b.txt里面读出一组数据的值*/
if((fp仁fopen("D:
\\b.txt","wb"))!
=NULL)
{
for(i=0;ifwrite(&b[i],sizeof(structbook),1,fp1);
fclose(fp1);
}
else
printf("cannotopenthefile\n");
printf("\t按任意键返回主菜单.");
turn=getch();
mainmenu();
}
/*图书信息排序*/
voidsortbook()
{
inti,j;
charturn;
structbookcb;
printf("\t|图书信息排序|\n");
for(j=0;jfor(i=0;iif(b[i].num>