C语言图书管理系统为完善版,但是可以勉强用用。
#include "stdio.h"
#include "string.h"
#include "windows.h"
#include "conio.h"
#define LEN_BOOK sizeof(struct Book)
#define LEN_READER sizeof(struct Reader)
#define BOOK_DATA astBook[i].iNum,astBook[i].acName,astBook[i].acAuthor,astBook[i].acPress,astBook[i].iAmount
#define READER_DATA astReader[i].iNum,astReader[i].acName,astReader[i].acSex,astReader[i].iAmount,astReader[i].iMax,astReader[i].aiBookId//宏定义的这个模块可以在你使用的时候不用都写出来每个具体调用
#define BOOK_NUM 200
#define READER_NUM 100
#define PASSWORD_LENTH 20
char pass[PASSWORD_LENTH]="";//全局变量
struct Book{
int iNum;
char acName[30];
char acAuthor[15];
char acPress[20];
int iAmount;
};
struct Reader{
int iNum;
char acName[15];
char acSex[4];
int iMax;
int iAmount;
int aiBookId[10];
};
struct Book astBook[BOOK_NUM];
struct Reader astReader[READER_NUM];
char *Password(){
unsigned c;
int i=0;
while((c=getch())!='\r'){
if(i<PASSWORD_LENTH-1&&isprint(c)){
pass[i++]=c;
putchar('*');
}
else if (i>0 && c=='\b')
{
--i;
putchar('\b');
putchar(' ');
putchar('\b');
}
}
putchar('\n');
pass[i]='\0';
return pass;
}
int Loading(){
char acount[20],*mima;
char cFlag;
int i=0;
printf("------------欢迎进入------------\n");
printf(" 图书馆管理系统 \n");
start:
printf("账号:");
gets(acount);
printf("密码:");
mima=Password();
if(strcmp(acount,"admin")==0&&strcmp(mima,"123")==0){
printf("密码正确,正在进入系统");
for(i=0;i<4;i++)printf("."),Sleep(350);
return 1;
}
else{
system("cls");
printf("账号或密码错误,要重新输入吗(y or n)?\n");
scanf("%c",&cFlag);
getchar();
if(cFlag=='y'){
goto start;
}
else if(cFlag=='n'){
return -1;
}
}
}
void ShowMainMenu(){
system("cls");
printf("\n\n");
printf("\t|----------欢迎进入----------|\n");
printf("\t| 图书馆管理系统 |\n");
printf("\t| 主菜单 |\n");
printf("\t| 1、图书管理 |\n");
printf("\t| 2、读者管理 |\n");
printf("\t| 3、借/还书登记 |\n");
printf("\t| 0、退出系统 |\n");
printf("\t|----------------------------|\n");
printf("\n");
printf("\t\t请选择(0-3):");
}
void ShowBookMenu(){
system("cls");
printf("\n\n");
printf("\t|----------欢迎进入----------|\n");
printf("\t| 图书管理系统 |\n");
printf("\t| 图书子菜单 |\n");
printf("\t| 1、显示图书信息 |\n");
printf("\t| 2、新增图书信息 |\n");
printf("\t| 3、图书信息查询 |\n");
printf("\t| 4、图书信息删除 |\n");
printf("\t| 5、图书信息修改 |\n");
printf("\t| 0、返回主菜单 |\n");
printf("\t|----------------------------|\n");
printf("\n");
printf("\t\t请选择(0-5):");
}
void ShowReaderMenu(){
system("cls");
printf("\n\n");
printf("\t|----------欢迎进入----------|\n");
printf("\t| 读者管理系统 |\n");
printf("\t| 读者子菜单 |\n");
printf("\t| 1、显示读者信息 |\n");
printf("\t| 2、新增读者信息 |\n");
printf("\t| 3、读者信息查询 |\n");
printf("\t| 4、读者信息删除 |\n");
printf("\t| 5、读者信息修改 |\n");
printf("\t| 0、返回主菜单 |\n");
printf("\t|----------------------------|\n");
printf("\n");
printf("\t\t请选择(0-5):");
}
void ShowBorrowReturnMenu(){
system("cls");
printf("\n\n");
printf("\t|----------欢迎进入----------|\n");
printf("\t| 借/还书登记 |\n");
printf("\t| 子菜单 |\n");
printf("\t| 1、借书登记 |\n");
printf("\t| 2、还书登记 |\n");
printf("\t| 0、返回主菜单 |\n");
printf("\t|----------------------------|\n");
printf("\n");
printf("\t\t请选择(0-2):");
}
void ShowModifyBookMenu(){
printf("\n");
printf("\t| 1.编号 |\n");
printf("\t| 2.书字 |\n");
printf("\t| 3.作者 |\n");
printf("\t| 4.出版社 |\n");
printf("\t| 5.库存 |\n");
printf("\n");
printf("请输入所要修改的信息(键入相应的数字:1-5)\n");
}
void ShowModifyReaderMenu(){
printf("\n");
printf("\t| 1.编号 |\n");
printf("\t| 2.名字 |\n");
printf("\t| 3.性别 |\n");
printf("\t| 4.最大可借书数 |\n");
printf("\n");
printf("请输入所要修改的信息(键入相应的数字:1-4)\n");
}
void Showsearchmenu(){
system("cls");
printf("\n\n");
printf("\t|----------欢迎进入----------|\n");
printf("\t| 图书管理系统 |\n");
printf("\t| 图书信息查询 |\n");
printf("\t| 1、按编号查询 |\n");
printf("\t| 2、按书名查询 |\n");
printf("\t| 3、按作者查询 |\n");
printf("\t| 4、按出版社查询 |\n");
printf("\t| 5、模糊查找 |\n");
printf("\t| 0、返回上级菜单 |\n");
printf("\t|----------------------------|\n");
printf("\n");
printf("\t\t请选择(0-5):");
}
void Showfuzzysearchmenue(){
system("cls");
printf("\n\n");
printf("\t|----------欢迎进入----------|\n");
printf("\t| 图书管理系统 |\n");
printf("\t| 图书模糊查询 |\n");
printf("\t| 1、按书名查询 |\n");
printf("\t| 2、按作者查询 |\n");
printf("\t| 3、按出版社查询 |\n");
printf("\t| 0、返回上级菜单 |\n");
printf("\t|----------------------------|\n");
printf("\n");
printf("\t\t请选择(0-3):");
}
int ReadBookFile(char *pcMode){
int iBookRecord=0;
FILE *pfBook;
pfBook=fopen("book.txt",pcMode);
if(pfBook==NULL){
return -1;
}
while(!feof(pfBook)){
if(fread(&astBook[iBookRecord],LEN_BOOK,1,pfBook))
iBookRecord++;
}
fclose(pfBook);
return iBookRecord;
}
int ReadReaderFile(char *pcMode){
int iReaderRecord=0;
FILE *pfReader;
pfReader=fopen("reader.txt",pcMode);
if(pfReader==NULL){
return -1;
}
while(!feof(pfReader)){
if(fread(&astReader[iReaderRecord],LEN_READER,1,pfReader)==1)
iReaderRecord++;
}
fclose(pfReader);
return iReaderRecord;
}
void SaveBookFile(int iBookId){
FILE *pfBook;
pfBook=fopen("book.txt","rb+");
if(pfBook!=NULL){
fseek(pfBook,LEN_BOOK *iBookId,SEEK_SET);
if(fwrite(&astBook[iBookId],LEN_BOOK,1,pfBook)!=1){
printf("无法保存该信息!\n");
}
}
fclose(pfBook);
}
void SaveReaderFile(int iReaderId){
FILE *pfReader;
pfReader=fopen("reader.txt","rb+");
if(pfReader!=NULL){
fseek(pfReader,LEN_BOOK *iReaderId,SEEK_SET);
if(fwrite(&astReader[iReaderId],LEN_BOOK,1,pfReader)!=1){
printf("无法保存该信息!\n");
}
}
fclose(pfReader);
}
int SearchBook(){
// system("cls");
int iBookNum,iBookRecord,iBookId,i;
iBookRecord=ReadBookFile("rb");
if(iBookRecord==-1){
printf("文件打开失败!\n");
printf("|按任意键返回子菜单|");
getch();
return -2;
}
else if(iBookRecord==0){
printf("数据库中没有任何图书记录\n");
printf("|按任意键返回子菜单|");
getch();
return -3;
}
printf("请输入图书编号:");
scanf("%d",&iBookNum);
getchar();
for(i=0;i<iBookRecord;i++){
if(iBookNum==astBook[i].iNum){
iBookId=i;
printf("%d号图书信息如下:\n",iBookNum);
printf("\t|——————————————————————————————————————————————|\n");
printf("\t%-6s%-16s%-10s%-20s%-4s\n","编号","书名","作者","出版社","库存");
printf("\t%-6d%-16s%-10s%-20s%-4d\n",BOOK_DATA);
printf("\t|——————————————————————————————————————————————|\n");
printf("\n");
break;
}
}
if(i==iBookRecord){
printf("找不到%d号图书信息!\n",iBookNum);
iBookId=-1;
}
return iBookId;
}
void FuzzySearch(){
int iBookNum,iBookRecord,iBookId,i,iItem=0,BookFlag=0;
char acName[30],acAuthor[15],acPress[20];
iBookRecord=ReadBookFile("rb");
if(iBookRecord==-1){
printf("文件打开失败!\n");
printf("|按任意键返回子菜单|");
getch();
}
else if(iBookRecord==0){
printf("数据库中没有任何图书记录\n");
printf("|按任意键返回子菜单|");
getch();
}
Showfuzzysearchmenue();
scanf("%d",&iItem);
getchar();
while(iItem){
switch(iItem){
case 1:
BookFlag=0;
printf("请输入书名:");
gets(acName);
for(i=0;i<iBookRecord;i++){
if(strstr(astBook[i].acName,acName)!=NULL){
iBookId=i;
printf("\t|——————————————————————————————————————————————|\n");
printf("\t%-6s%-16s%-10s%-20s%-4s\n","编号","书名","作者","出版社","库存");
printf("\t%-6d%-16s%-10s%-20s%-4d\n",BOOK_DATA);
printf("\t|——————————————————————————————————————————————|\n");
BookFlag=1;
}
}
if(i==iBookRecord&&BookFlag==0){
printf("\t找不到“%s”相关图书信息!\n",acName);
printf("\t|按任意键返回子菜单|");
getch();
break;
}
if(i==iBookRecord&&BookFlag==1){
printf("\t|按任意键返回子菜单|");
getch();
break;
}
case 2:
BookFlag=0;
printf("请输入作者:");
gets(acAuthor);
for(i=0;i<iBookRecord;i++){
if(strstr(astBook[i].acAuthor,acAuthor)!=NULL){
iBookId=i;
printf("\t|——————————————————————————————————————————————|\n");
printf("\t%-6s%-16s%-10s%-20s%-4s\n","编号","书名","作者","出版社","库存");
printf("\t%-6d%-16s%-10s%-20s%-4d\n",BOOK_DATA);
printf("\t|——————————————————————————————————————————————|\n");
BookFlag=1;
}
}
if(i==iBookRecord&&BookFlag==0){
printf("\t找不到“%s”相关图书信息!\n",acAuthor);
printf("\t|按任意键返回子菜单|");
getch();
break;
}
if(i==iBookRecord&&BookFlag==1){
printf("\t|按任意键返回子菜单|");
getch();
break;
}
case 3:
BookFlag=0;
printf("请输入书名:");
gets(acPress);
for(i=0;i<iBookRecord;i++){
if(strstr(astBook[i].acPress,acPress)!=NULL){
iBookId=i;
printf("\t|——————————————————————————————————————————————|\n");
printf("\t%-6s%-16s%-10s%-20s%-4s\n","编号","书名","作者","出版社","库存");
printf("\t%-6d%-16s%-10s%-20s%-4d\n",BOOK_DATA);
printf("\t|——————————————————————————————————————————————|\n");
BookFlag=1;
}
}
if(i==iBookRecord&&BookFlag==0){
printf("\t找不到“%s”相关图书信息!\n",acPress);
printf("\t|按任意键返回子菜单|");
getch();
break;
}
if(i==iBookRecord&&BookFlag==1){
printf("\t|按任意键返回子菜单|");
getch();
break;
}
default:
printf("\t请输入正确的指令!\n");
printf("\t|按任意键重新输入|");
getch();
}
Showfuzzysearchmenue();
scanf("%d",&iItem);
getchar();
}
}
void SearchBookplus(){
int iBookNum,iBookRecord,iBookId,i,iItem=0,BookFlag=0;
char acName[30],acAuthor[15],acPress[20];
iBookRecord=ReadBookFile("rb");
if(iBookRecord==-1){
printf("文件打开失败!\n");
printf("|按任意键返回子菜单|");
getch();
}
else if(iBookRecord==0){
printf("数据库中没有任何图书记录\n");
printf("|按任意键返回子菜单|");
getch();
}
Showsearchmenu();
scanf("%d",&iItem);
getchar();
while(iItem){
switch(iItem){
case 1:
printf("\t请输入图书编号:");
scanf("%d",&iBookNum);
getchar();
for(i=0;i<iBookRecord;i++){
if(iBookNum==astBook[i].iNum){
iBookId=i;
printf("\t%d号图书信息如下:\n",astBook[i].iNum);
printf("\t|——————————————————————————————————————————————|\n");
printf("\t%-6s%-16s%-10s%-20s%-4s\n","编号","书名","作者","出版社","库存");
printf("\t%-6d%-16s%-10s%-20s%-4d\n",BOOK_DATA);
printf("\t|——————————————————————————————————————————————|\n");
printf("\n");
printf("\t|按任意键返回子菜单|");
getch();
break;
}
}
if(i==iBookRecord){
printf("\t找不到%d号图书信息!\n",iBookNum);
printf("\t|按任意键返回子菜单|");
getch();
}
break;
case 2:
printf("\t请输入书名:");
gets(acName);
for(i=0;i<iBookRecord;i++){
if(strcmp(acName,astBook[i].acName)==0){
iBookId=i;
printf("\t|——————————————————————————————————————————————|\n");
printf("\t%-6s%-16s%-10s%-20s%-4s\n","编号","书名","作者","出版社","库存");
printf("\t%-6d%-16s%-10s%-20s%-4d\n",BOOK_DATA);
printf("\t|——————————————————————————————————————————————|\n");
printf("\n");
printf("\t|按任意键返回子菜单|");
getch();
break;
}
}
if(i==iBookRecord){
printf("\t找不到《%s》图书信息!\n",acName);
printf("\t|按任意键返回子菜单|");
getch();
}
break;
case 3:
BookFlag=0;
printf("\t请输入作者:");
gets(acAuthor);
for(i=0;i<iBookRecord;i++){
if(strcmp(acAuthor,astBook[i].acAuthor)==0){
printf("\t|——————————————————————————————————————————————|\n");
printf("\t%-6s%-16s%-10s%-20s%-4s\n","编号","书名","作者","出版社","库存");
printf("\t%-6d%-16s%-10s%-20s%-4d\n",BOOK_DATA);
printf("\t|——————————————————————————————————————————————|\n");
printf("\n");
BookFlag=1;
}
}
if(i==iBookRecord&&BookFlag==1){
printf("\t查找结束,以上是所有“%s”著作的书籍\n",acAuthor);
printf("\t|按任意键返回子菜单|");
getch();
break;
}
if(i==iBookRecord&&BookFlag==0){
printf("\t找不到“%s”著作的图书信息!\n",acAuthor);
printf("\t|按任意键返回子菜单|");
getch();
}
break;
case 4:
BookFlag=0;
printf("\t请输入出版社名称:");
gets(acPress);
for(i=0;i<iBookRecord;i++){
if(strcmp(acPress,astBook[i].acPress)==0){
printf("\t|——————————————————————————————————————————————|\n");
printf("\t%-6s%-16s%-10s%-20s%-4s\n","编号","书名","作者","出版社","库存");
printf("\t%-6d%-16s%-10s%-20s%-4d\n",BOOK_DATA);
printf("\t|——————————————————————————————————————————————|\n");
printf("\n");
BookFlag=1;
}
}
if(i==iBookRecord&&BookFlag==1){
printf("\t查找结束,以上是所有“%s”出版社的书籍\n",acPress);
printf("\t|按任意键返回子菜单|");
getch();
break;
}
if(i==iBookRecord){
printf("\t找不到任何“%s”出版社图书信息!\n",acPress);
printf("\t|按任意键返回子菜单|");
getch();
}
break;
case 5:
FuzzySearch();
break;
default:
printf("\t请输入正确的指令!\n");
printf("\t|按任意键重新输入|");
getch();
}
Showsearchmenu();
scanf("%d",&iItem);
getchar();
}
}
int SearchReader(){
int iReaderNum,IReaderRecord,iReaderId,i;
IReaderRecord=ReadReaderFile("rb");
if(IReaderRecord==-1){
printf("文件打开失败!\n");
return -2;
}
else if(IReaderRecord==0){
printf("没有读者记录!\n");
return -3;
}
printf("请输入读者编号:");
scanf("%d",&iReaderNum);
getchar();
for(i=0;i<IReaderRecord;i++){
if(iReaderNum==astReader[i].iNum){
iReaderId=i;
printf("%d号读者信息如下:\n",iReaderNum);
printf("\t|——————————————————————————————————————————————|\n");
printf("\t%-8s%-12s%-6s%-16s%-16s\n","编号","姓名","性别","当前可借书数量","最大可借书数量");
printf("\t%-8d%-12s%-6s%-16d%-16d\n",READER_DATA);
printf("\t|——————————————————————————————————————————————|\n");
printf("\n");
break;
}
}
if(i==IReaderRecord){
printf("找不到%d号读者信息!\n",iReaderNum);
iReaderId=-1;
}
return iReaderId;
}
void BorrowBook(){
int iBookId,iReaderId,iBorrow,i;
system("cls");
iReaderId=SearchReader();
if(iReaderId==-1){
return;
}
iBorrow=astReader[iReaderId].iMax-astReader[iReaderId].iAmount;
if(iBorrow==0){
printf("该读者目前没有借任何书\n");
}
else{
printf("\t该读者当前所借书编号为:");
for(i=0;i<iBorrow;i++){
printf("‘%d’",astReader[iReaderId].aiBookId[i]);
}
printf("\n\n");
}
if(astReader[iReaderId].iAmount==0){
printf("该读者可借书数量为零,不能继续借书!\n");
return;
}
printf("\n按任意键输入要借阅的图书信息\n");
getch();
iBookId=SearchBook();
if(iBookId==-1){
return;
}
if(astBook[iBookId].iAmount==0){
printf("该图书库存量为零!图书不可借\n");
return;
}
astReader[iReaderId].aiBookId[iBorrow]=astBook[iBookId].iNum;
astBook[iBookId].iAmount--;
astReader[iReaderId].iAmount--;
SaveBookFile(iBookId);
SaveReaderFile(iReaderId);
printf("借书成功!\n");
}
void ReturnBook(){
int iBookId,iReaderId,iBorrow,i,j;
system("cls");
iReaderId=SearchReader();
if(iReaderId==-1){
return;
}
iBorrow=astReader[iReaderId].iMax-astReader[iReaderId].iAmount;
if(iBorrow==0){
printf("\t该读者没有借任何书,无需归还\n");
return;
}
else{
printf("\t该读者当前所借图书为:");
for(i=0;i<iBorrow;i++){
printf("‘%d’",astReader[iReaderId].aiBookId[i]);
}
printf("\n\n");
}
printf("按任意键输入要归还的图书信息\n");
getch();
iBookId=SearchBook();
if(iBookId==-1){
return;
}
for(i=0;i<iBorrow;i++){
if(astReader[iReaderId].aiBookId[i]==astBook[iBookId].iNum){
for(j=i;j<iBorrow-1;j++){
astReader[iReaderId].aiBookId[j]=astReader[iReaderId].aiBookId[j+1];
}
astReader[iReaderId].aiBookId[iBorrow]=0;
astBook[iBookId].iAmount++;
astReader[iReaderId].iAmount++;
break;
}
}
if(i==iBorrow){
printf("该读者没有借这本书,无需归还\n");
return;
}
SaveBookFile(iBookId);
SaveReaderFile(iReaderId);
printf("还书成功!\n");
}
void ShowBook(){
int i,iBookRecord;
system("cls");
iBookRecord=ReadBookFile("r+");
if(iBookRecord==-1)
printf("文件打开失败!请先新增图书信息!\n");
else if(iBookRecord==0)
printf("文件中没有图书信息!\n");
else{
printf("\t|——————————————————————————————————————————————|\n");
printf("\t%-6s%-30s%-10s%-20s%-4s\n","编号","书名","作者","出版社","库存");
for(i=0;i<iBookRecord;i++)
printf("\t%-6d%-30s%-10s%-20s%-4d\n",BOOK_DATA);
printf("\t|——————————————————————————————————————————————|\n");
}
}
void AddBook(){
FILE *pfBook;
int iBookRecord,iFlagExist,i;
char cFlag;
system("cls");
iBookRecord=ReadBookFile("ab+");
if(iBookRecord==-1){
printf("文件打开失败!\n");
return;
}
else if(iBookRecord==0)
printf("没有图书记录!\n");
else
ShowBook();
start:
printf("\t请选择是否键入信息(y/n):");
cFlag=getchar();
getchar();
if(cFlag=='n')
return;
pfBook=fopen("book.txt","ab+");
if(pfBook==NULL){
printf("文件打开失败!\n");
return;
}
//功能添加完善代码
if(cFlag!='y'&&cFlag!='n'){
printf("请输入正确的指令!\n");
goto start;
}
while(cFlag=='y'){
if(iBookRecord>=BOOK_NUM){
printf("记录已满!");
fclose(pfBook);
return;
}
printf("\t请输入图书编号(非法输入编号将默认保存为0):");
do{
iFlagExist=0;
scanf("%d",&astBook[iBookRecord].iNum);
fflush(stdin);
for(i=0;i<iBookRecord;i++){
if(astBook[i].iNum==astBook[iBookRecord].iNum){
iFlagExist=1;
printf("该图书编号已存在,请重新输入:");
break;
}
}
}while(iFlagExist==1);
printf("\t请输入图书名称:");
gets(astBook[iBookRecord].acName);
printf("\t请输入图书作者:");
gets(astBook[iBookRecord].acAuthor);
printf("\t请输入图书出版社:");
gets(astBook[iBookRecord].acPress);
printf("\t请输入图书库存量(非法输入将不会保存库存):");
scanf("%d",&astBook[iBookRecord].iAmount);
fflush(stdin);
if(fwrite(&astBook[iBookRecord],LEN_BOOK,1,pfBook)!=1){
printf("\t无法保存该信息!\n");
return;
}
else{
printf("\t%d号图书已保存!\n",astBook[iBookRecord].iNum);
iBookRecord++;
}
start1:
printf("\t继续输入信息吗(y/n):");
cFlag=getchar();
getchar();
if(cFlag!='y'&&cFlag!='n'){
printf("\t请输入正确的指令!\n");
goto start1;
}
}
fclose(pfBook);
printf("\t添加图书执行完毕!\n");
}
void DeleteBook(){
FILE *pfBook;
int iBookId,iBookRecord,i;
char cFlag;
system("cls");
ShowBook();
iBookId=SearchBook();
if(iBookId==-1)
return;
iBookRecord=ReadBookFile("rb");
start:
printf("\t已找到该图书,是否删除?(y/n):");
cFlag=getchar();
fflush(stdin);
//功能修改
if(cFlag!='y'&&cFlag!='n'){
printf("\t请输入正确的指令!\n");
goto start;
}
if(cFlag=='n'||cFlag=='N')
return;
else if(cFlag=='y'||cFlag=='Y'){
for(i=iBookId;i<iBookRecord-1;i++)
astBook[i]=astBook[i+1];
iBookRecord--;
}
pfBook=fopen("book.txt","wb");
if(pfBook!=NULL){
for(i=0;i<iBookRecord;i++){
if(fwrite(&astBook[i],LEN_BOOK,1,pfBook)!=1){
printf("无法保存该信息!\n");
return;
}
}
fclose(pfBook);
printf("\t%d号图书信息已删除!\n",astBook[iBookId].iNum);
}
}
void ModifyBook(){
int iBookId,iBookRecord,iFlagExist,iItem,iNum,i;
system("cls");
ShowBook();
iBookId=SearchBook();
if(iBookId==-1)
return;
iBookRecord=ReadBookFile("rb");
ShowModifyBookMenu();
scanf("%d",&iItem);
getchar();
switch(iItem){
case 1:
printf("请输入图书编号:");
do{
iFlagExist=0;
scanf("%d",&iNum);
getchar();
for(i=0;i<iBookRecord;i++){
if(iNum==astBook[i].iNum&&i!=iBookId){
iFlagExist=1;
printf("错误,该图书编号已存在,请重新输入:");
break;
}
}
}while(iFlagExist==1);
astBook[iBookId].iNum=iNum;
break;
case 2:
printf("请输入图书名称:");
gets(astBook[iBookId].acName);
break;
case 3:
printf("请输入图书作者:");
gets(astBook[iBookId].acAuthor);
break;
case 4:
printf("请输入图书出版社:");
gets(astBook[iBookId].acPress);
break;
case 5:
printf("请输入图书库存量:");
scanf("%d",&astBook[iBookId].iAmount);
getchar();
break;
}
SaveBookFile(iBookId);
printf("图书信息修改成功!\n");
}
void ShowReader(){
int i,iReaderRecord;
system("cls");
iReaderRecord=ReadReaderFile("rb");
if(iReaderRecord==-1)
printf("文件打开失败!请添加读者信息!\n");
else if(iReaderRecord==0)
printf("文件中没有读者信息\n");
else{
printf("\t|——————————————————————————————————————————————|\n");
printf("\t%-8s%-12s%-6s%-16s%-16s\n","编号","姓名","性别","当前可借书数量","最大可借书数量");
for(i=0;i<iReaderRecord;i++){
printf("\t%-8d%-12s%-6s%-16d%-16d\n",READER_DATA);
}
printf("\t|——————————————————————————————————————————————|\n");
}
}
void AddReader(){
FILE *pfReader;
int iFlagExist,iReaderRecord,i;
char cFlag;
system("cls");
iReaderRecord=ReadReaderFile("ab+");
if(iReaderRecord==-1){
printf("文件打开失败!\n");
return;
}
else if(iReaderRecord==0)
printf("没有读者记录!\n");
else
ShowReader();
start:
printf("请选择是否键入信息(y/n):");
cFlag=getchar();
fflush(stdin);
//功能修改
if(cFlag!='y'&&cFlag!='n'){
printf("请输入正确的指令!\n");
goto start;
}
if(cFlag=='n')
return;
pfReader=fopen("reader.txt","ab+");
if(pfReader==NULL){
printf("文件打开失败!\n");
return;
}
while(cFlag=='y'||cFlag=='Y'){
if(iReaderRecord>=READER_NUM){
printf("记录已满!\n");
fclose(pfReader);
return;
}
printf("请输入读者编号(非法输入默认编号将为0):");
do{
iFlagExist=0;
scanf("%d",&astReader[iReaderRecord].iNum);
fflush(stdin);
for(i=0;i<iReaderRecord;i++){
if(astReader[i].iNum==astReader[iReaderRecord].iNum){
iFlagExist=1;
printf("该读者编号已存在!请重新输入:");
}
}
}while(iFlagExist==1);
printf("请输入读者姓名:");
gets(astReader[iReaderRecord].acName);
printf("请输入读者性别:F/M:");
//功能修改
while(gets(astReader[iReaderRecord].acSex)!=NULL){
if(strcmp(astReader[iReaderRecord].acSex,"F")==0)
break;
else if(strcmp(astReader[iReaderRecord].acSex,"M")==0)
break;
printf("错误,只能输入'F'或'M',请重新输入\n");
}
printf("请输入读者最大可借书数(范围5-10):");
while(scanf("%d",&astReader[iReaderRecord].iMax)==1){
fflush(stdin);
if(astReader[iReaderRecord].iMax>=5&&astReader[iReaderRecord].iMax<=10)
break;
printf("错误,读者最大借阅数范围为5-10,请重新输入\n");
}
astReader[iReaderRecord].iAmount=astReader[iReaderRecord].iMax;
for(i=0;i<astReader[iReaderRecord].iMax;i++)
astReader[iReaderRecord].aiBookId[i]=0;
if(fwrite(&astReader[iReaderRecord],LEN_READER,1,pfReader)!=1){
printf("无法保存该信息!\n");
}
else{
printf("%d号读者信息已保存!\n",astReader[iReaderRecord].iNum);
iReaderRecord++;
}
start1:
printf("继续输入信息吗(y/n):");
cFlag=getchar();
getchar();
//功能修改
if(cFlag!='y'&&cFlag!='n'){
printf("请输入正确的指令!\n");
goto start1;
}
}
fclose(pfReader);
printf("添加读者执行完毕!\n");
}
void DeleteReader(){
FILE *pfReader;
int iReaderId,iReaderRecord,i;
char cFlag;
system("cls");
ShowReader();
iReaderId=SearchReader();
if(iReaderId==-1)
return;
iReaderRecord=ReadReaderFile("rb");
start:
printf("已找到该读者,是否删除?(y/n):");
cFlag=getchar();
getchar();
if(cFlag!='y'&&cFlag!='n'){
printf("请输入正确的指令!\n");
goto start;
}
if(cFlag=='n')
return;
else if(cFlag=='y'||cFlag=='Y'){
for(i=iReaderId;i<iReaderRecord-1;i++)
astReader[i]=astReader[i+1];
iReaderRecord--;
}
pfReader=fopen("reader.txt","wb");
if(pfReader!=NULL){
for(i=0;i<iReaderRecord;i++){
if(fwrite(&astReader[i],LEN_READER,1,pfReader)!=1){
printf("无法保存该信息!\n");
return;
}
}
fclose(pfReader);
printf("%d号读者信息已删除!\n",astReader[iReaderId].iNum);
}
}
void ModifyReader(){
int iReaderId,iReaderRecord,iBorrow,iItem,iNum,iMax,iFlagExist,i;
system("cls");
ShowReader();
iReaderId=SearchReader();
if(iReaderId==-1)
return;
iReaderRecord=ReadReaderFile("rb");
ShowModifyReaderMenu();
scanf("%d",&iItem);
getchar();
switch(iItem){
case 1:
printf("请输入读者编号:");
do{
iFlagExist=0;
scanf("%d",&iNum);
getchar();
for(i=0;i<iReaderRecord;i++)
if(iNum==astReader[i].iNum&&i!=iReaderId){
iFlagExist=1;
printf("错误,该读者编号已存在,请重新输入:\n");
break;
}
}while(iFlagExist==1);
astReader[iReaderId].iNum=iNum;
break;
case 2:
printf("请输入读者名字:");
gets(astReader[iReaderId].acName);
break;
case 3:
printf("请输入读者性别:F/M:");
while(gets(astReader[iReaderId].acSex)!=NULL){
if(strcmp(astReader[iReaderId].acSex,"F")==0||strcmp(astReader[iReaderId].acSex,"M")==0)
break;
printf("错误,只能输入'F'或者'M',请重新输入\n");
}
break;
case 4:
iBorrow=astReader[iReaderId].iMax-astReader[iReaderId].iAmount;
printf("请输入读者最大可借书数:(范围5-10):");
while(scanf("%d",&iMax)==1){
getchar();
if(iMax>=5&&iMax<=10){
if(iBorrow>iMax){
printf("该读者目前借阅图书数量大于该数目,需要先还书\n");
return;
}
else{
astReader[iReaderId].iMax=iMax;
astReader[iReaderId].iAmount=iMax-iBorrow;
for(i=iBorrow;i<iMax;i++)
astReader[iReaderId].aiBookId[i]=0;
break;
}
}
printf("错误,读者最大借阅数范围为5-10,请重新输入\n");
}
break;
}
SaveReaderFile(iReaderId);
printf("读者信息修改成功!\n");
}
void ManageBook(){
int iItem;
ShowBookMenu();
scanf("%d",&iItem);
getchar();
while(iItem){
switch(iItem){
case 1:
ShowBook();
break;
case 2:
AddBook();
break;
case 3:
system("cls");
SearchBookplus();//注意吧功能集成一个新的函数中
break;
case 4:
DeleteBook();
break;
case 5:
ModifyBook();
break;
default:
printf("\t\t请输入正确的数字!\n\t");
}
if(iItem!=3){
printf("\t|按任意键返回子菜单|");
getch();
}
ShowBookMenu();
scanf("%d",&iItem);
getchar();
}
}
void ManageReader(){
int iItem=0;
ShowReaderMenu();
scanf("%d",&iItem);
getchar();
while(iItem){
switch(iItem){
case 1:
ShowReader();
break;
case 2:
AddReader();
break;
case 3:
system("cls");
SearchReader();
break;
case 4:
DeleteReader();
break;
case 5:
ModifyReader();
break;
default:
printf("\t\t请输入正确的数字!\n\t\t");
}
printf("|按任意键返回子菜单|");
getch();
ShowReaderMenu();
scanf("%d",&iItem);
getchar();
}
}
void BorrowReturnManage(){
int iItem=0;
ShowBorrowReturnMenu();
scanf("%d",&iItem);
getchar();
while(iItem){
switch(iItem){
case 1:
BorrowBook();
break;
case 2:
ReturnBook();
break;
default:
printf("\t\t请输入正确的数字!\n\t\t");
}
printf("|按任意键返回子菜单|");
getch();
ShowBorrowReturnMenu();
scanf("%d",&iItem);
getchar();
}
}
int main(){
int iItem,load;
load=Loading();
if(load==1){
ShowMainMenu();
scanf("%d",&iItem);
getchar();
while(iItem){
switch(iItem){
case 1:
ManageBook();
break;
case 2:
ManageReader();
break;
case 3:
BorrowReturnManage();
break;
default:
printf("\t\t请输入正确的数字!\n\t\t程序将于2秒后跳转到主菜单");
Sleep(2000);
}
ShowMainMenu();
scanf("%d",&iItem);
getchar();
}
}
if(load==-1){
printf("登陆失败!程序将在1秒后结束");
Sleep(1000);
}
return 0;
system("pause");
}
以上该管理系统的源码。