资源描述
苏州科技大学
二○一六 ~二○一七年第一学期
电子和信息工程系
课程设计汇报书
课程名称: 图书信息系统
班 级: __ 电子1612班____
学 号: 1606231______
姓 名: 张立进_________
指导老师: 任建平______
二○一七年三月
1. 题目:
《图书信息系统》设计和实现
2.功效:
(1)每一条统计包含一个图书编号,图书名,作者名,出版社等。
(2)图书信息浏览功效:完成全部图书信息统计显示和浏览,包含排序后、修改后、插入后、删除后信息改变浏览。
(3)图书信息录入功效:完成对“图书编号,图书名,作者名,出版社”信息录入。
(4)图书信息修改功效:对图书信息进行修改并保留。
(5)图书信息查询功效:经过输入图书编号查找该图书,并显示该图书全部信息。
(6)图书信息插入功效:经过输入某本图书编号进行图书信息插入并保留。
(7)图书信息删除功效:完成删除图书信息功效。
(8)图书信息排序功效:按图书编号对图书进行从小到大重新排序。
(9)图书信息帮助功效:能够给用户提供全部函数帮助功效,并作对应得介绍。
3.要求:
(1)整个系统均用C语言实现;
(2)利用指针、链表来实现图书信息数据结构设计;
(3)系统含有输入、显示、查询、删除、排序、插入,保留、读取基础功效;
(4)系统各个功效模块全部用函数形式来实现;
(5)能够将图书信息保留在文件中。
(6)能够将图书信息从文件中读取出来。
4.设计内容:
整个系统除了主函数外,另外还有13个函数,,包含主函数在内,以实现9大功效:图书信息浏览功效,图书信息录入功效,图书信息修改功效,图书信息查询功效, 图书信息插入功效,图书信息删除功效,图书信息排序功效,图书信息帮助功效,退出系统功效。
其功效步骤图以下所表示:
stuct book
结构体
void help()
帮助
void allinformation()图书信息浏 览
主函数main
mainmenu
void
input
()
图书信息录入
void editbook()
图书信息修改
void querybook
()
图书信息查询
void deletebook
()
图书信息删除
void insertbook
()
图书信息插入
void sortbook()
图书信息排序
图1 主菜单选择功效步骤图
各个函数具体设计说明分别以下:
4.1创建主函数void main()
该函数经过选择各选项,完成对应功效,当选择退出选项时,退出循环,具体选择项有:【1】图书信息浏览功效,【2】图书信息录入功效,【3】图书信息修改功效,【4】图书信息查询功效, 【5】图书信息插入功效,【6】图书信息删除功效,【7】图书信息排序功效,【8】图书信息帮助功效,【9】退出系统功效。
4.2结构体struct
定义了一个图书信息结构体,包含 char author[20];char bookname[20];char publisher[20];int num;等。
操作步骤:
1进入主界面选择图书信息浏览
2输出全部已存放全部图书信息
3退回主界面
4.3编写浏览数据统计函数 void allinformation()
该函数能够经过选择对应功效对已经输入并保留全部图书信息进行浏览,而且退出后还能保留统计,以备下次浏览时信息没有丢失。
操作步骤:
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()
经过void insertbook()插入函数来实现插入,先清屏system("cls");然后经过输入插入前图书编号后进行新图书信息输入最终图书信息插入功效,退出后自动保留能够再次浏览。
操作步骤:
1进入删除界面
2输入所要删除图书编号后自动删除。
4.8编写删除数据统计函数deletebook()
该函数经过void deletebook()删除函数来实现图书信息删除,经过输入图书编号查找到该图书以后删除。退出后再次浏览全部图书信息时便看不到已删除图书信息。
操作步骤:
1进入插入界面
2输入所要插入位置图书编号,然后插入新图书相关信息。
4.9编写数据统计排序函数 void sortbook()
该函数定义了i,j利用冒泡法对图书信息进行排序,对图书编号根据从小到大次序来排序。最好显示已排序好图书信息。
操作步骤:
1进入插入界面
2输入所要插入位置图书编号,然后插入新图书相关信息。
3退回主界面
4.10编写帮助函数void help()
该函数是简单帮助功效,介绍了各个模块功效,使用户快速了解该系统功效作用。
具体代码以下:
void help()
{
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语言程序设计中,我程序开始有很多错误,比如error C2440: '=' : cannot convert from 'int' to 'int [10]',是我忽略不能把整型转换成数组。插入功效出现插入信息后却浏览不到,以后在插入后面加了一段保留文件代码后,插入功效才得以实现,还有因为我粗心把写文件写成了读文件造成删除功效无法实现。经过我和其它同学反复检验反复修改,最终完成了。
6. 源程序
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define NULL 0
#define a 100
int now=0;
struct book
{
char author[20]; /*作者名*/
char bookname[20]; /*图书名*/
char publisher[20]; /*出版单位*/
char day[100];/*出版时间*/
float money;/*价格*/
int num; /*图书编号*/
};
struct book b[a];
/*系统主菜单*/
void mainmenu()
{
FILE *fp1,*fp2;
int i;
system("cls");
printf ("\n温馨提醒:为确保您操作得到保留,请按正常次序退出系统^_^\n");
printf("\n\n");
printf("\t\t +━━━━━━━━━━━━━━━━━━━━━━━━+\n");
printf("\t\t | | 欢迎使用图书信息管理系统 | | \n");
printf("\t\t | ┗━━━━━━━━━━━━┛ | \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 | ●[5]图书信息插入 | \n");
printf("\t\t | | \n");
printf("\t\t | ●[6]图书信息删除 | \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((fp1=fopen("D:\\b.txt","rb"))!=NULL)
{
for(i=0;i<now;i++)
fread(&b[i],sizeof(struct book),1,fp1);
fclose(fp1);
}
}
/*图书信息浏览*/
void allinformation()
{
int i;
char turn;
printf("\t|━━━━━━━图书信息浏览━━━━━━━|\n");
printf("浏览全部图书信息\n");
printf("图书编号\t图书名\t\t作者名\t\t出版单位\t\t出版时间\t\t\价格n\n");
for(i=0;i<now;i++)
{
printf("%d \t\t%s \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].publisher b[i].[day] b[i].[money]);
}
printf("\t按任意键返回主菜单."); /*返回主菜单*/
turn=getch();
mainmenu();
}
/*图书信息录入*/
void inputbook()
{
printf("\t|━━━━━━━图书信息录入━━━━━━━|\n");
int i=now;
FILE *fp1,*fp2;
char turn,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((fp1=fopen("D:\\b.txt","wb"))!=NULL)
{
for(i=0;i<now;i++)
fwrite(&b[i],sizeof(struct book),1,fp1);
fclose(fp1);
}
else
printf("can not open the file\n");
printf("\t请按任意键返回."); /*返回主菜单*/
turn=getch();
mainmenu();
}
/*图书信息修改*/
void editbook()
{
FILE *fp1;
int i,e_num,j;
char e_author[10],e_publisher[10],e_bookname[10],judge,turn;
struct book ebook;
printf("\t|━━━━━━━图书信息修改━━━━━━━|\n");
do
{
printf("请输入需要修改图书编号\n");
scanf("%d",&ebook.num);
for(i=0;i<now;i++)
if(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((fp1=fopen("D:\\b.txt","wb"))!=NULL)
{
for(j=0;j<now;j++)
fwrite(&b[j],sizeof(struct book),1,fp1);
fclose(fp1);
}
else
printf("can not open the file\n");
}
while(judge!='n');
printf("\t按任意键返回主菜单.");
turn=getch();
mainmenu();
}
/*图书信息查询*/
void querybook()
{
int number,flag=1,i;
char judge,turn;
printf("\t|━━━━━━━图书信息查询━━━━━━━|\n");
printf("请输入要查询图书编号: ");
scanf("%d",&number);
for(i=0;i<now;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("不能找到该图书信息!");
}
printf("\t按任意键返回主菜单.");
turn=getch();
mainmenu();
}
/*图书信息插入*/
void insertbook()
{
FILE *fp2,*fp1;
int i,j,h;
char turn,judge;
struct book ib;
printf("\t|━━━━━━━图书信息插入━━━━━━━|\n");
do
{
h=now;
printf("请输入插入之前图书编号\n");
scanf("%d",&ib.num);
for(i=0;i<now;i++)
if(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((fp1=fopen("D:\\b.txt","wb"))!=NULL)
{
for(i=0;i<now;i++)
fwrite(&b[i],sizeof(struct book),1,fp1);
fclose(fp1);
}
printf("\t按任意键返回主菜单.");
turn=getch();
mainmenu();
}
/*图书信息删除*/
void deletebook()
{
int number;
char turn;
int t=now;
int i;
FILE *fp2,*fp1;
system("cls"); /*清屏*/
printf("\t|━━━━━━━图书信息删除━━━━━━━|\n");
printf("\n 请输入要删除图书编号: ");
scanf("%d",&number);
for (i=0;i<now;i++)
{
if(number==b[i].num)
{
for(;i<now-1;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((fp1=fopen("D:\\b.txt","wb"))!=NULL)
{
for(i=0;i<now;i++)
fwrite(&b[i],sizeof(struct book),1,fp1);
fclose(fp1);
}
else
printf("can not open the file\n");
printf("\t按任意键返回主菜单.");
turn=getch();
mainmenu();
}
/*图书信息排序*/
void sortbook()
{
int i,j;
char turn;
struct book cb;
printf("\t|━━━━━━━图书信息排序━━━━━━━|\n");
for(j=0;j<now-1;j++)
for(i=0;i<now-1-j;i++)
if(b[i].num>b[i+1].num)
{
cb=b[i];
b[i]=b[i+1];
b[i+1]=cb;
}
printf("图书排序(根据图书编号从小到大排序)\n");
printf(" 编号\t\t图书名称\t\t图书作者\t\t图书出版社\t\t出版时间\t\t价格\n");
for(i=0;i<now;i++)
printf(" %d\t\t%s\t\t\t%s\t\t\t%s\t\t\t%s\t\t\t%s\n\n",b[i].num,b[i].bookname,b[i].author,b[i].publisher,b[i].day ,b[i].money);
printf("\t按任意键返回主菜单.");
turn=getch();
mainmenu();
}
/*帮助*/
void help()
{
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");
getchar();
}
/*********************************结束**************************************/
/*主程序*/
void main()
{
int n;
mainmenu();
scanf("%d",&n);
while(n)
{
switch(n)
{
case 1:
system("cls");
allinformation();
break;
case 2:
system("cls");
inputbook();
break;
case 3:
system("cls");
editbook();
break;
case 4:
system("cls");
querybook();
break;
case 5:
system("cls");
insertbook();
break;
case 6:
system("cls");
deletebook();
break;
case 7:
system("cls");
sortbook();
break;
case 8:
system("cls");
help();
break;
case 9:
printf(" 欢迎您再次使用图书信息系统! \n");
exit(9);
default:printf("输入有误\n");
break;
}
scanf("%d",&n);
}
}
7. 心得体会
在这之前,我已经对c语言这门课程学习了十二个月,对其有了一定了解,不过也仅仅是停留在了解范围,对里面好多东还是很陌生,更多在利用起来时候还是感到很棘手。我课题是图书信息管理系统,起初因为上机实践太少,经验很是不足,碰到错就犯晕,经过几天连续编程,我也积累了不少以前没有经验,碰到错误也不那么惧怕了,还从部分同学学到了不少编程技巧和好习惯,而且我越来越对编程有爱好了,当程序正常运行那一刻真恨不得对全世界人说我成功了。
现在我再说说此次课程设计我心得体会:
课堂上要讲授很多相关c语言语法规则,听起来十分枯燥无味,也不轻易记住,死记硬背是不可取。然而要使用c语言这个工具处理实际问题,又必需掌握它。经过数次上机练习,对于语法知识有了感性认识,加深对它了解,在了解基础上就会自然而然地掌握c语言语法要求。对于部分内容自己认为在课堂上听懂了,但上机实践中才发觉问题很
展开阅读全文