图书管理系统VC60程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
福建农林大学计算机与信息学院
计算机类
课程设计报告
课程名称:程序设计基础
课程设计题目:图书管理系统
姓名:曾碧滢
系:数学系
专业:信息与计算科学
年级:13级
学号:3136003038
指导教师:林耀海
福建农林大学计算机与信息学院计算机类
课程设计结果评定
目录
一、课程设计的目的: (4)
二、课程设计的要求: (4)
三、实习地点:个人电脑 (4)
四、主要仪器设备(实验用的软硬件环境): (4)
五、算法的思想 (4)
六、设计流程图 (6)
七、程序代码: (6)
八、程序运行的结果: (41)
参考文献 (47)
致谢: (47)
两图书管理系统
一、课程设计的目的:
1. 了解并掌握C语言的程序设计方法,具备初步的独立分析和设计能力;
2. 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
3. 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
4. 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风;
二、课程设计的要求:
1. 了解并掌握C语言程序设计的一般方法,具备初步的独立分析和设计能力;
2. 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
3. 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
三、实习地点:个人电脑
四、主要仪器设备(实验用的软硬件环境):
硬件环境:PC机,软件环境:vc 6.0
五、算法的思想
本程序用文件来储存图书信息和读者信息。
•Step1:程序运行预处理,读取图书库文件和读者库文件信息,获取系统时间。
读取文件的方法:通过函数fread()每次读取一个结点的信息,同时储存进链表的结点中,然后每读取一个结点,就依次在链表后面添加一个结点。
•Step2:弹出菜单
o Step2.1:1. 浏览图书信息Step2.2:2. 浏览读者信息
o Step2.3:3. 图书登记入库 Step2.4:4. 读者证件办理
o Step2.5:5. 读者图书借阅 Step2.6:6. 读者图书归还
o Step2.7:7. 读者信息查询Step2.8:8. 读者信息修改
o Step2.9:9. 图书信息修改Step2.10:10. 图书资源搜索
•Step3:浏览图书信息
o通过遍历单链表来实现打印所有的图书信息
•Step4:浏览读者信息
o通过遍历单链表来实现打印所有读者信息,浏览前验证管理员权限
•Step5:图书登记入库
o图书登记入库相当于单链表结点的添加,每登记一本图书,就插入一个结点。
•Step6:读者证件办理
o读者证件办理相当于往读者链表里头添加结点,新增一个读者信息,就在读者链表尾部添加一个结点。
办理证件前先验证管理员权限。
•Step7:读者信息查询
o先读者登录,登录相当于在读者链表中找与之登录匹配的信息,匹配成功则登录成功,登录完成后,打印出读者的所有注册和借书信息。
•Step8:读者信息修改
o先登录,完成后,进行读者信息修改。
•Step9:图书信息修改
o同读者信息修改一样的实现方法。
不过在修改前先验证管理员权限。
•Step10:图书信息搜索
o这里支持图书名搜索,图书作者搜索,索书号搜索。
实现原理:遍历图书链表。
•Step11:退出图书系统
o退出前调用图书信息保存函数和读者信息保存函数。
将链表信息储存进文件中。
然后调用退出函数exit(0)。
六、设计流程图
七、程序代码:
// 图书管理系统
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <conio.h>
#include <time.h>
/*定义图书有关的数据结构*/
struct book
{
int BookNum; /*图书编号*/
charBookName[20]; /*图书名字*/
char BookAuthor[15];/*图书作者*/
int nowCount; /*图书现存量*/
int allCount; /*图书库存量*/
};
/*定义与读者有关的数据结构*/
struct reader
{
int ReaderNum; /*读者编号*/
charReaderName[20]; /*读者的姓名*/
charReaderSex[8]; /*读者的性别*/
int ReaderAge; /*读者的年龄*/
charReaderTel[15]; /*读者的电话*/
int ReaderCount; /*读者目前已经借阅的数目*/ charpassword[16]; /*读者证件密码*/
chardate[10][100]; /*读者借阅日期*/
intReaderBorrow[10]; /*当前已经借阅的图书编号*/ charBorrowName[10][40];/*已经借阅的图书名字*/ };
/*定义与每条图书纪录有关的数据结构*/
typedef struct booknode
{
struct book data; /*数据域*/
struct booknode*next; /*指针域*/
}BookNode;
/*定义与每条读者纪录有关的数据结构*/
typedef struct readernode
{
struct readerdata; /*数据域*/
struct readernode*next; /*指针域*/
}ReaderNode;
/*定义图书馆中读者和藏书的总数目*/
struct rbnum
{
int rnum; /*读者总个数*/
int bnum; /*书籍总本数*/
}allRBnum;
/*******************************************/
/*函数声明*/
BookNode *OpenBook(); /*打开图书库文件*/ ReaderNode *OpenReader(); /*打开读者库文件*/ void InBook(BookNode *pbook); /*图书录入*/
void SaveBook(BookNode *pbook); /*图书信息保存*/ void SaveReader(ReaderNode *preader); /*读者信息保存*/ void BorrowBook(BookNode *pbook, ReaderNode *preader); /*图书借阅*/
void ReturnBook(BookNode *pbook, ReaderNode *preader); /*图书归还*/
void LookBook(BookNode *pbook); /*浏览图书库*/ void LookReader(ReaderNode *preader); /*浏览读者库*/
void InReader(ReaderNode *preader); /*借书证办理*/
void FindReaderAll(ReaderNode *preader); /*读者信息查询*/ ReaderNode *LoginReader(ReaderNode *preader); /*读者登陆验证*/ int LoginAdmin(); /*管理员登陆验证*/ void ModifyReader(ReaderNode *preader); /*修改读者信息*/ void ModifyBook(BookNode *pbook); /*修改图书信息*/ void GotoXY(int x, int y); /*光标定位*/
void erase(int n); /*擦除菜单选项*/
void menu(int n); /*菜单选项*/
void FindBook(BookNode *pbook); /*图书搜索*/
void LocalTime(char *strTime); /*获取系统本地时间*/ /*******************************************/
/*打开图书文件book,将其存入链表中*/
BookNode *OpenBook()
{
FILE *fpbook;
BookNode *pb = NULL,*rb = NULL;
allRBnum.bnum =0; /*初始化藏书0本*/
BookNode *pbook =(BookNode *)malloc(sizeof(BookNode)); /*头指针*/
if (!pbook)
{
printf("空间申请失败\n");
exit(0);
}
pbook->next = NULL;
rb = pbook;
fpbook =fopen(".\\book.txt","a+"); /*追加的方式打开一个二进制文件*/
if (!fpbook)
{
printf("文件打开失败\n");
exit(0);
}
while (!feof(fpbook))
{
pb = (BookNode*)malloc(sizeof(BookNode)); /*申请空间*/
if (!pb)
{
printf("空间申请失败\n");
exit(0);
}
if (fread(pb,sizeof(BookNode),1,fpbook)== 1)
{
pb->next =NULL;
rb->next =pb;
rb = pb; /*rb指针向后移一位*/
allRBnum.bnum+= pb->data.allCount; /*总图书数目统计*/ }
}
fclose(fpbook); /*关闭文件*/
// printf("打开文件成功!图书馆总共藏书:%d本\n",allRBnum.bnum);
return pbook;
}
/*打开读者文件reader,将其存入链表中*/
ReaderNode *OpenReader()
{
FILE *fpreader;
ReaderNode *pr = NULL,*rr = NULL;
allRBnum.rnum =0; /*初始化读者人数0位*/
ReaderNode *preader =(ReaderNode *)malloc(sizeof(ReaderNode)); /*头指针*/ if (!preader)
{
printf("空间申请失败\n");
exit(0);
}
preader->next =NULL;
rr = preader;
fpreader =fopen(".\\reader.txt","a+"); /*追加的方式打开一个二进制文件*/ if (!fpreader)
{
printf("文件打开失败\n");
exit(0);
}
while(!feof(fpreader))
{
pr = (ReaderNode*)malloc(sizeof(ReaderNode)); /*申请空间*/
if (!pr)
{
printf("空间申请失败\n");
exit(0);
}
if(fread(pr,sizeof(ReaderNode),1,fpreader) == 1)
{
pr->next =NULL;
rr->next =pr;
rr = pr; /*rr指针向后移一位*/
++allRBnum.rnum; /*读者数目+1*/
}
}
fclose(fpreader); /*关闭文件*/
// printf("打开文件成功!拥有有所读者数:%d位\n",allRBnum.rnum);
return preader;
}
/*图书录入*/
void InBook(BookNode *pbook)
{
printf(">>>>>>>>>>>>>>>>>>>>>>>> 图书登记入库
<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
BookNode *pb = pbook;
BookNode *pt =pbook; /*pt临时指针用于遍历整个图书库*/
BookNode *pr =(BookNode *)malloc(sizeof(BookNode));
while (pb->next !=NULL) /*找到链表的尾部开始添加书目*/
{
pb = pb->next;
}
int i = 1; /*用于临时报号*/
printf("提示:当书号为0时,结束图书录入!\n");
printf("________________________________________________________________\n");
printf("现在正在进行第%d 本书登记.\n",i++);
printf("书号:");
scanf("%d",&(pr->data.BookNum)); /*书号*/
while(pr->data.BookNum != 0)
{
printf("书名:");
scanf("%s",pr->data.BookName); /*书名*/
printf("作者名:");
scanf("%s",pr->data.BookAuthor); /*作者名*/
pr->data.nowCount= 1; /*现存量初始化为1*/
pr->data.allCount= 1; /*总存储量初始化为1*/
while (pt->next!= NULL)
{
if(pr->data.BookNum != pt->data.BookNum)
pt =pt->next;
else /*说明该图书已经存在*/
{
pt->data.nowCount+= 1; /*现存书目+1*/
pt->data.allCount+= 1; /*总数目+1*/
break;
}
}
if (pt->next ==NULL) /*图书还未入库则入库*/
{
if(pr->data.BookNum != pt->data.BookNum)
{
pr->next= NULL;
pb->next= pr; /*将新建的结点插入链表尾部*/
pb = pr;
}
else
{
pt->data.nowCount+= 1; /*现存书目+1*/
pt->data.allCount+= 1; /*总数目+1*/
}
}
printf("操作成功.\n");
pr = (BookNode*)malloc(sizeof(BookNode)); /*申请下一个空间*/
printf("现在正在进行第%d 本书登记.\n",i++);
printf("书号:");
scanf("%d",&(pr->data.BookNum)); /*书号*/
pt = pbook; /*pt临时指针移动到头指针位置*/ }
printf("________________________________________________________________\n");
SaveBook(pbook); /*图书信息保存*/
printf("\n>>>图书入库完毕<<<--按任意键回主菜单>>>>>>>>>>");
getch();
system("cls");
return;
}
/*图书保存*/
void SaveBook(BookNode *pbook)
{
BookNode *pb =pbook->next;
FILE *fpbook;
fpbook =fopen(".\\book.txt","w"); /*只写的方式打开文件*/
if (!fpbook)
{
printf("文件打开失败\n");
exit(0);
}
while (pb != NULL)
{
if(fwrite(pb,sizeof(BookNode),1,fpbook) == 1) /*每次写一条记录*/
{
pb =pb->next;
}
}
fclose(fpbook);
return;
}
/*读者信息保存*/
void SaveReader(ReaderNode *preader)
{
ReaderNode *pr =preader->next;
FILE *fpreader;
fpreader =fopen(".\\reader.txt","w"); /*只写的方式打开文件*/ if (!fpreader)
{
printf("文件打开失败\n");
exit(0);
}
while (pr != NULL)
{
if(fwrite(pr,sizeof(ReaderNode),1,fpreader) == 1) /*每次写一条记录*/
{
pr =pr->next;
}
}
fclose(fpreader);
return;
}
/*图书借阅*/
void BorrowBook(BookNode *pbook, ReaderNode *preader)
{
printf(">>>>>>>>>>>>>>>>>>>>>>>> 读者图书借阅
<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
int booknum = 0, flag= 0,time = 3, i = 2;
BookNode *pt =pbook; /*图书临时指针*/
ReaderNode *rt =NULL; /*读者临时指针*/
ReaderNode *rr =(ReaderNode *)malloc(sizeof(ReaderNode)); /*读者登陆临时节点*/ /******************************************/
if((rt=LoginReader(preader)) == NULL) /*读者登陆验证*/
{
printf("读者验证失败.\n");
return;
}
/******************************************/
printf("________________________________________________________________\n");
printf("输入要借阅书籍的索书号:");
scanf("%d",&booknum);
while(pt->next!=NULL)
{
if(pt->data.BookNum == booknum)
{
if(pt->data.nowCount >= 1)
{
printf("该书现存量:%d 本,可以借阅.\n",pt->data.nowCount);
LocalTime(rt->data.date[rt->data.ReaderCount]); /*登记当前借阅图书的日期*/
rt->data.ReaderBorrow[rt->data.ReaderCount]= pt->data.BookNum; /*纪录当前图书编号*/
strcpy(rt->data.BorrowName[rt->data.ReaderCount],pt->data.BookName);/*纪录当前图书名字*/
--pt->data.nowCount; /*图书现在库存-1*/
++rt->data.ReaderCount;/*读者借阅本数+1*/
printf(">>>借书成功<<<\n");
printf("提醒:请在30天之内归还本书!!!超期按每天0.1元收费!!!\n");
SaveBook(pbook); /*图书信息保存*/
SaveReader(preader); /*读者信息保存*/
printf("________________________________________________________________\n");
printf("\n>>>图书借阅完毕<<<--按任意键回主菜单>>>>>>>>>>");
getch();
system("cls");
return;
}
printf(">>>很遗憾!该本图书库存目前为空,不可借阅<<<\n");
printf("________________________________________________________________\n");
printf("\n>>>图书借阅失败<<<--按任意键回主菜单>>>>>>>>>>");
getch();
system("cls");
return;
}
pt =pt->next; /*遍历图书库*/
}
if (pt->next ==NULL)
{
printf(">>>很遗憾!没有找到该图书<<<\n");
}
printf("________________________________________________________________\n");
printf("\n>>>图书借阅失败<<<--按任意键回主菜单>>>>>>>>>>");
getch();
system("cls");
return;
}
/*图书归还*/
void ReturnBook(BookNode *pbook, ReaderNode *preader)
{
printf(">>>>>>>>>>>>>>>>>>>>>>>> 读者图书归还
<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
int booknum = 0, i =0;
BookNode *pt = pbook;
ReaderNode *pr =preader;
printf("________________________________________________________________\n");
printf("归还索书号:");
scanf("%d",&booknum);
while (pt->next !=NULL) /*遍历图书库*/
{
if(pt->next->data.BookNum == booknum)
{
while(pr->next != NULL) /*读者借书信息修改*/
{
for (i =0; i < pr->data.ReaderCount; ++i) /*遍历每个读者所借的所有书籍*/
if(pr->data.ReaderBorrow[i] == pt->next->data.BookNum)
{
++pt->next->data.nowCount; /*归还图书现在库存+1*/
pr->data.ReaderBorrow[i]= 0; /*借书号注销*/
strcpy(pr->data.date[i],""); /*借书时间注销*/
strcpy(pr->data.BorrowName[i],""); /*借书名字注销*/
--pr->data.ReaderCount; /*借书量-1*/
printf("归还成功\n");
printf("________________________________________________________________\n");
printf("\n>>>图书归还完毕<<<--按任意键回主菜单>>>>>>>>>>");
SaveBook(pbook); /*图书信息保存*/
SaveReader(preader); /*读者信息保存*/
getch();
system("cls");
return;
}
pr =pr->next;
}
break;
}
pt = pt->next;
}
if (pt->next==NULL)
{
printf("非本图书馆图书.\n");
printf("________________________________________________________________\n");
printf("\n>>>图书归还失败<<<--按任意键回主菜单>>>>>>>>>>");
getch();
system("cls");
return;
}
printf(">>>请确认图书索书号输入正确<<<\n");
printf("本馆该书没有被借出.\n");
printf("\n>>>图书归还失败<<<--按任意键回主菜单>>>>>>>>>>");
getch();
system("cls");
return;
}
/*浏览图书信息*/
void LookBook(BookNode *pbook)
{
printf(">>>>>>>>>>>>>>>>>>>>>>>> 浏览图书信息
<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
BookNode *pt = pbook;
printf("________________________________________________________________\n");
printf("\n书号\t\t书名\t\t作者\t\t现存量\t库存量\n");
while (pt->next !=NULL)
{
printf("%d\t\t",pt->next->data.BookNum); /*书号*/
printf("%s\t\t",pt->next->data.BookName); /*书名*/
printf("%s\t\t",pt->next->data.BookAuthor);/*作者*/
printf("%d\t",pt->next->data.nowCount); /*现存量*/
printf("%d\t\n",pt->next->data.allCount); /*库存量*/
pt = pt->next;
}
printf("________________________________________________________________\n");
printf("\n>>>浏览完毕<<<--按任意键回主菜单>>>>>>>>>>");
getch();
system("cls");
return;
}
/*浏览读者信息*/
void LookReader(ReaderNode *preader)
{
printf(">>>>>>>>>>>>>>>>>>>>>>>> 浏览读者信息
<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
/*管理员权限验证*/
if (LoginAdmin() == 0)
{
printf("管理员验证失败.\n");
printf("\n>>>没有管理员权限<<<--按任意键回主菜单>>>>>>>>>>");
getch();
system("cls");
return;
}
printf("管理员验证成功.\n");
/******************************/
ReaderNode *pt =preader;
printf("________________________________________________________________\n");
printf("\n借书证号\t姓名\t性别\t年龄\t电话\t已借阅图书本数\n");
while (pt->next !=NULL)
{
printf("%d\t",pt->next->data.ReaderNum); /*证件号*/
printf("%s\t",pt->next->data.ReaderName); /*姓名*/
printf("%s\t",pt->next->data.ReaderSex); /*性别*/
printf("%d\t",pt->next->data.ReaderAge); /*年龄*/
printf("%s\t",pt->next->data.ReaderTel); /*电话*/
printf("%d\t\n",pt->next->data.ReaderCount); /*当前借阅图书本数*/
pt = pt->next;
}
printf("________________________________________________________________\n");
printf("\n>>>浏览完毕<<<--按任意键回主菜单>>>>>>>>>>");
getch();
system("cls");
return;
}
/*读者借书证办理*/
void InReader(ReaderNode *preader)
{
printf(">>>>>>>>>>>>>>>>>>>>>>>> 读者证件办理
<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
ReaderNode *pr =preader;
ReaderNode *pt =preader; /*pt临时指针用于遍历整个读者库*/
ReaderNode *rr =(ReaderNode *)malloc(sizeof(ReaderNode));
int i = 1; /*用于临时报号*/
/*管理员权限验证*/
if (LoginAdmin() == 0)
{
printf("管理员验证失败.\n");
printf("\n>>>没有管理员权限<<<--按任意键回主菜单>>>>>>>>>>");
getch();
system("cls");
return;
}
printf("管理员验证成功.\n");
/***************************************************/
while (pr->next !=NULL) /*找到链表的尾部开始添加读者*/
{
pr = pr->next;
}
printf("提示:当证件号为0时,结束证件办理!\n");
printf("________________________________________________________________\n");
printf("现在正在进行第%d 位读者证件办理.\n",i++);
printf("借书证号:");
scanf("%d",&(rr->data.ReaderNum)); /*借书证号*/
while(rr->data.ReaderNum != 0)
{
printf("姓名:");
scanf("%s",rr->data.ReaderName); /*姓名*/
printf("性别:");
scanf("%s",rr->data.ReaderSex); /*性别*/
printf("年龄:");
scanf("%d",&(rr->data.ReaderAge)); /*年龄*/
printf("电话:");
scanf("%s",rr->data.ReaderTel); /*电话*/
rr->data.ReaderCount= 0; /*已经借阅图书本数初始化为0*/
strcpy(rr->data.password,"123456"); /*证件密码默认为:123456*/
while (pt->next!= NULL)
{
if(rr->data.ReaderNum != pt->data.ReaderNum)
pt =pt->next;
else /*说明该读者已经存在*/
{
printf("该证件号已经存在,证件办理失败\n");
printf("________________________________________________________________\n");
printf("\n>>>办理失败<<<--按任意键回主菜单>>>>>>>>>>");
getch();
system("cls");
return;
}
}
if (pt->next ==NULL) /*该证件号可以办理*/
{
rr->next =NULL;
pr->next =rr; /*将新建的结点插入链表尾部*/
pr = rr;
}
printf(">>>证件办理成功<<<\n");
printf("提醒:借书证默认密码全部是\"123456\"\n");
rr = (ReaderNode*)malloc(sizeof(ReaderNode)); /*申请下一个空间*/
printf("\n现在正在进行第%d 位读者证件办理.\n",i++);
printf("借书证号:");
scanf("%d",&(rr->data.ReaderNum)); /*证件号*/
pt = preader; /*pt临时指针移动到头指针位置*/ }
printf("________________________________________________________________\n");
SaveReader(preader); /*证件信息存档*/
printf("\n>>>证件办理完毕<<<--按任意键回主菜单>>>>>>>>>>");
getch();
system("cls");
return;
}
/*读者信息查询*/
void FindReaderAll(ReaderNode *preader)
{
printf(">>>>>>>>>>>>>>>>>>>>>>>> 读者信息查询
<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
int i = 0;
ReaderNode *rt = NULL;
/*****************************/
if((rt=LoginReader(preader)) == NULL)
{
printf("读者验证失败.\n");
return;
}
/*****************************/
printf("________________________________________________________________\n");
printf("借书证\t\t姓名\t性别\t年龄\t电话\t已借阅图书本数\t密码\n");
printf("%d\t",rt->data.ReaderNum); /*借书证*/
printf("%s\t",rt->data.ReaderName); /*姓名*/
printf("%s\t",rt->data.ReaderSex); /*性别*/
printf("%d\t",rt->data.ReaderAge); /*年龄*/
printf("%s\t",rt->data.ReaderTel); /*电话*/
printf("%d\t",rt->data.ReaderCount); /*已借阅图书本数*/
printf("%s\t",rt->data.password); /*密码*/
printf("\n\n已借图书书目\t图书名字\t借书日期\n");
for (i = 0; i <rt->data.ReaderCount; ++i)
{
printf("%d\t\t",rt->data.ReaderBorrow[i]);
printf("%s\t\t",rt->data.BorrowName[i]);
printf("%s\n",rt->data.date[i]);
}
printf("________________________________________________________________\n");
printf("\n>>>信息查询完毕<<<--按任意键回主菜单>>>>>>>>>>");
getch();
system("cls");
return;
}
/*修改图书信息*/
void ModifyBook(BookNode *pbook)
{
printf(">>>>>>>>>>>>>>>>>>>>>>>> 图书信息修改
<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
/*管理员权限验证*/
if (LoginAdmin() == 0)
{
printf("管理员验证失败.\n");
printf("\n>>>没有管理员权限<<<--按任意键回主菜单>>>>>>>>>>");
getch();
system("cls");
return;
}
printf("管理员验证成功.\n");
/*************************/
int nSelect = 0;
int BookNum = 0;
char BookName[20];
char BookAuthor[15];
BookNode *pt = pbook;
BookNode *p2t = pbook;
BookNode *pr =(BookNode *)malloc(sizeof(BookNode)); /*临时图书指针*/
printf("________________________________________________________________\n"); printf("输入图书编号:");
scanf("%d",&pr->data.BookNum);
while (pt->next !=NULL)
{
if(pt->data.BookNum == pr->data.BookNum)
break;
pt = pt->next;
}
if (pt->next ==NULL)
{
if(pt->data.BookNum != pr->data.BookNum)
{
printf("未找到该编号图书.\n");
printf("\n>>>信息修改失败<<<--按任意键回主菜单>>>>>>>>>>");
getch();
system("cls");
return;
}
}
printf(">>>>>图书信息如下<<<<<\n");
printf("________________________________________________________________\n"); printf("\n书号\t\t书名\t\t作者\t\t现存量\t库存量\n");
printf("%d\t\t",pt->data.BookNum); /*书号*/
printf("%s\t\t",pt->data.BookName); /*书名*/
printf("%s\t\t",pt->data.BookAuthor); /*作者*/
printf("%d\t",pt->data.nowCount); /*现存量*/
printf("%d\t\n",pt->data.allCount); /*库存量*/
printf("________________________________________________________________\n"); printf(">>>>可以选择的修改信息<<<<\n");
printf("1.图书编号\n");
printf("2.图书名字\n");
printf("3.图书作者\n");
printf(">>>>选择要修改的信息:");
scanf("%d",&nSelect);
switch(nSelect)
{
case 1:
{
printf("请输入新的图书编号:");
scanf("%d",&BookNum);
while(p2t->next != NULL)
{
if(p2t->next->data.BookNum == BookNum)
break;
p2t =p2t->next;
}
if(p2t->next == NULL)
{
printf("该编号图书已存在,修改失败.\n");
return;
}
pt->data.BookNum= BookNum;
printf("修改图书编号成功.\n");
}
break;
case 2:
{
printf("输入新的图书名字:");
scanf("%s",BookName);
strcpy(pt->data.BookName,BookName);
printf("修改图书名字成功.\n");
}
break;
case 3:
{
printf("输入新图书作者:");
scanf("%s",BookAuthor);
strcpy(pt->data.BookAuthor,BookAuthor);
printf("修改图书作者成功.\n");
}
break;
}
printf("________________________________________________________________\n");
SaveBook(pbook); /*图书信息保存*/
printf("\n>>>信息修改完毕<<<--按任意键回主菜单>>>>>>>>>>");
getch();
system("cls");
return;
}
/*修改读者信息*/
void ModifyReader(ReaderNode *preader)
{
printf(">>>>>>>>>>>>>>>>>>>>>>>> 读者信息修改
<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
int nSelect = 0;
char ReaderTel[15];
char password[16];
ReaderNode *rt = NULL;
if((rt=LoginReader(preader)) == NULL)
{
printf("读者验证失败.\n");
return;
}
printf("________________________________________________________________\n");
printf(">>>>可修改的内容<<<<\n");
printf("1.读者电话\n");
printf("2.读者密码\n\n");
printf(">>>>选择要修改的内容:");
scanf("%d",&nSelect);
switch(nSelect)
{
case 1:
{
printf("输入新的电话号码:");
scanf("%s",ReaderTel);
strcpy(rt->data.ReaderTel,ReaderTel);
printf("修改读者电话号码成功.\n");
}
break;
case 2:
{
printf("输入新的密码:");
scanf("%s",password);
strcpy(rt->data.password,password);
printf("修改读者密码成功.\n");
}
break;
}
printf("________________________________________________________________\n");
SaveReader(preader); /*读者信息保存*/
printf("\n>>>信息修改完毕<<<--按任意键回主菜单>>>>>>>>>>");
getch();
system("cls");
return;
}
/*图书搜索*/
void FindBook(BookNode *pbook)
{
printf(">>>>>>>>>>>>>>>>>>>>>>>> 图书资源搜索
<<<<<<<<<<<<<<<<<<<<<<<<<<\n");
int nSelect = 0;
int BookNum = 0; /*图书编号*/
charBookName[20]; /*图书名字*/
char BookAuthor[15];/*图书作者*/
BookNode *pt = pbook;
printf(">>>>可选的搜索方式<<<<\n");
printf("1.图书名\n");
printf("2.作者名\n");
printf("3.索书号\n");
printf(">>>>选择搜索方式:");
scanf("%d",&nSelect);
switch(nSelect)
{
case 1:
{
printf("输入图书名:");
scanf("%s",BookName);
while(pt->next != NULL)
{
if(strcmp(pt->next->data.BookName,BookName)==0)
{
printf(">>>存在此书<<<\n");
printf(">>>>>图书信息如下<<<<<\n");
printf("________________________________________________________________\n");
printf("\n书号\t\t书名\t\t作者\t\t现存量\t库存量\n");
printf("%d\t\t",pt->next->data.BookNum); /*书号*/
printf("%s\t\t",pt->next->data.BookName); /*书名*/
printf("%s\t\t",pt->next->data.BookAuthor); /*作者*/
printf("%d\t",pt->next->data.nowCount); /*现存量*/
printf("%d\t\n",pt->next->data.allCount); /*库存量*/
printf("________________________________________________________________\n");
break;
}
pt =pt->next;
}
}
break;
case 2:
{
printf("输入作者名:");
scanf("%s",BookAuthor);
while(pt->next != NULL)
{
if (strcmp(pt->next->data.BookAuthor,BookAuthor)==0)
{
printf(">>>存在此书<<<\n");
printf(">>>>>图书信息如下<<<<<\n");
printf("________________________________________________________________\n");
printf("\n书号\t\t书名\t\t作者\t\t现存量\t库存量\n");
printf("%d\t\t",pt->next->data.BookNum); /*书号*/
printf("%s\t\t",pt->next->data.BookName); /*书名*/
printf("%s\t\t",pt->next->data.BookAuthor); /*作者*/
printf("%d\t",pt->next->data.nowCount); /*现存量*/
printf("%d\t\n",pt->next->data.allCount); /*库存量*/
printf("________________________________________________________________\n");
break;
}
pt =pt->next;
}
}
break;
case 3:
{
printf("输入索书号:");
scanf("%d",&BookNum);
while(pt->next != NULL)
{
if(pt->next->data.BookNum == BookNum)
{
printf(">>>存在此书<<<\n");
printf(">>>>>图书信息如下<<<<<\n");
printf("________________________________________________________________\n");
printf("\n书号\t\t书名\t\t作者\t\t现存量\t库存量\n");
printf("%d\t\t",pt->next->data.BookNum); /*书号*/
printf("%s\t\t",pt->next->data.BookName); /*书名*/
printf("%s\t\t",pt->next->data.BookAuthor); /*作者*/
printf("%d\t",pt->next->data.nowCount); /*现存量*/
printf("%d\t\n",pt->next->data.allCount); /*库存量*/
printf("________________________________________________________________\n");
break;
}
pt =pt->next;
}
}
break;。