图书管理系统Word下载.docx
《图书管理系统Word下载.docx》由会员分享,可在线阅读,更多相关《图书管理系统Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
structbook
{
charID[20];
//图书的序列号,具有身份证的唯一性
charbookname[50];
//图书名称
charauthor[10];
//作者
charbookconcern[100];
//出版商
};
//定义结构体数组
structbookbook[500];
//定义全局变量,用来获得图书输入总数目
intlength;
/*主菜单显示*/
voidshow()
system("
cls"
);
//dos自带清屏函数
//system("
colorc0"
//将界面颜色更改的windows函数,头文件为<
//SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
printf("
\n\n\n\n\t||========================================================||\n"
\t||WELCOMETOLeMONBOOKSYSTEM||\n"
\t||========================================================||\n"
\t||\t1-显示所有图书信息||\n"
\t||\t2-添加图书信息||\n"
\t||\t3-修改图书信息||\n"
\t||\t4-删除图书信息||\n"
\t||\t5-查询图书信息||\n"
\t||\t6-退出||\n"
\n\t\tEnteryourchoice<
1-6>
:
"
}
//main()函数
intmain()
intn;
//定义选项的接受变量
show();
//菜单显示,为自定义函数
scanf("
%d"
&
n);
while(n)//用于多次接收键盘输入
{
switch(n)//switch的多分支语句,配带break;
{
case1:
showall();
break;
case2:
addbook();
case3:
modifybook();
case4:
deletebook();
case5:
querybook();
case6:
exit(0);
default:
}
scanf("
//循环输入的必要保证,必须放置在循环内部
}
return0;
/*系统数据初始化导入函数,定义文件指针*/
voidshowall()
FILE*fp;
charfilename[50];
inti=0,j;
charch[10];
/*此处用来向文档输入数据,时间有点折磨人,所以省去输入的环节,如果想完善程序,可以考虑*/
/*fp=fopen("
filename.txt"
"
wb"
//以新建文件的可读写方式新建文件
是否进行初始化数据(y/n)"
%s"
ch);
if(strcmp(ch,"
Y"
)==0||strcmp(ch,"
y"
)==0)
for(i=0;
i<
10;
i++)
{
printf("
\tID:
scanf("
book[i].ID);
\tBookname:
book[i].bookname);
\tAuthor:
book[i].author);
\tBookconcern:
book[i].bookconcern);
if(fwrite(&
book[i],sizeof(structbook),1,fp)!
=1)//fwrite文件函数,用于块状数据的大范围输入
printf("
文件写入错误!
\n"
}
fclose(fp);
*///文件关闭
//printf("
请输入文件路径:
//scanf("
filename);
if((fp=fopen("
rb"
))==NULL)//以只读写方式打开文件
printf("
\t不能打开的文件!
exit(0);
while(!
feof(fp))//判断文件指针fp移动过程是否指向文件末尾,feof()函数返回值为0和1
fread(&
book[i],sizeof(structbook),1,fp);
//块状数据读出函数,fread与fwrite成对出现,多用于结构体
i++;
//用于计算写入数据的个数
length=i-1;
//此处实验多次,不知为何数据会多出来一个,你有兴趣可以问老师?
//文件关闭
if(length!
=0)//判断读文件结束时的数据是否为空,即是否文件为空
\t===========================================================\n"
\t显示所有图书信息\n"
\t图书编号图书名作者出版社\n"
\t-----------------------------------------------------------\n"
for(j=0;
j<
length;
j++)//输出数据
\t%s%s%s%s\n"
book[j].ID,book[j].bookname,book[j].author,book[j].bookconcern);
elseprintf("
\t没有记录信息!
//否则便显示没有数据记录
inquire();
//询问是否显示主菜单?
/*用于返回主菜单的选择函数*/
voidinquire()
\t显示主菜单?
(y/n):
)==0)show();
elseexit(0);
//为终止程序运行的函数
/*追加信息*/
voidaddbook()
inti;
//定义随机读写变量i
charid[20];
//定义暂时寄存器,用来存储中间键入值ID
\t添加图书信息\n"
id);
for(i=0;
if(strcmp(book[i].ID,id)==0)//strcmp头文件为<
字符串处理函数,用于判断两个字符串是否相等,相等,返回0,否则返回非零
\t存在该书目,按任意键继续!
gotopress;
//goto语句,此处用来实现函数跨越,书本可能未介绍,一方面老师说它会破坏函数结构使编程混乱,另一方面可能使用太过灵活
strcpy(book[length].ID,id);
//strcpy()与srcmp()函数同为<
的字符串处理函数,用来将字符串复制
book[length].bookname);
book[length].author);
book[length].bookconcern);
length++;
//插入则整体个数增1
\t插入成功!
save();
//随时更新文件内容
press:
inquire();
//goto跳转到此处
/*数据修改*/
voidmodifybook()
charch[10],ch1[10];
//定义接收的字符数组
\t请输入你想要修改的图书编号."
if(strcmp(book[i].ID,id)==0)
printf("
\t发现记录信息,是否显示?
(y/n)"
scanf("
if(strcmp(ch,"
\t******显示图书信息*******\n"
\t%s%s%s%s\n"
book[i].ID,book[i].bookname,book[i].author,book[i].bookconcern);
Modify?
ch1);
if(strcmp(ch1,"
)==0||strcmp(ch1,"
{
\tNewID:
scanf("
}
save();
\t修改成功!
break;
if(i>
=length)printf("
\t没有发现要修改的信息!
//如果循环跳出,仍然没有找到,则显示无果
/*删除数据*/
voiddeletebook()
inti,m;
m=length;
//中转数据长度,用来在删除过程中,避免总数被覆盖
\t请输入你想要删除的图书编号."
findtherecord,show?
能否删除?
book[i]=book[i+1];
//查找到,删除即为其后面的结构体取代该位的位置
m--;
//删除后,总数自减
\t删除成功!
break;
length)printf("
\t没有发现要删除的信息!
length=m;
//返回给length
/*查询*/
voidquerybook()
\t请输入你想要查询的图书编号."
\t没有发现要查询的信息!
/*保存*/
voidsave()
))==NULL)
n\t打开文件发生错误!
}
fwrite(&
截图: