#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define TOTAL 100
typedef struct Book
{
char no[10]; /*编号*/
char name[20]; /*书名*/
char pub[20]; /*出版社*/
float price; /*价格*/
}BOOK;
int load(BOOK books[]);
//int input(BOOK *books,int total);
int addBook(BOOK books[],int total);
void displayBook(BOOK books[],int total);
void delBook(BOOK books[],int total);
void saveBooks(BOOK books[],int total);
void searchBook(BOOK books[],int total);
void DispMenu(char *menu);
/****************************************************************************/
/* 函数功能:主程序,显示主菜单,根据用户的选择调用相应的函数完成各自的功能 */
/* 输入参数:无 */
/* 函数输出:选择的菜单序号 */
/****************************************************************************/
void main(void)
{
BOOK books[TOTAL]; /* Books数组用于保存所有的图书 */
int count=0;
//printf("欢迎使用图书管理系统1.0!请先录入基本图书信息:\n");
//count=input(books,count);
//saveBooks(books,count);
count=load(books);
while(1)
{
switch(menu_select())
{
case 1:
count=addBook(books,count);
break;
case 2:
displayBook(books,count);
break;
case 3:
searchBook(books,count);
break;
case 4:
delBook(books,count);
break;
case 5:
saveBooks(books,count);
break;
case 0:
printf("谢谢使用!\n");
return;
}
}
}
/*录入图书信息
int input(BOOK *books,int total)
{
int n,i;
while(1)
{
char ch;
printf("请输入编号:\n");
scanf("%s",books->no);
getchar();
printf("请输入书名:\n");
scanf("%s",books->name);
getchar();
printf("请输入出版社:\n");
scanf("%s",books->pub);
getchar();
printf("请输入价格:\n");
scanf("%f",&books->price);
++total;
printf("是否要继续录入?是:Y,否:N\n");*/
/*******************************************************/
/* 函数功能:显示主菜单,选择菜单 */
/* 输入参数:无 */
/* 函数输出:选择的菜单序号 */
/*******************************************************/
int menu_select()
{
int cn=0;
char mu[]="欢迎使用图书管理系统1.0!;1.添加新书信息;2.显示图书信息;3.查询;4.删除;5.保存;0.退出;";
DispMenu(mu);
while(1)
{
cn=getch()-'0';
if (cn>=0&&cn<=7)
return cn;
}
}
/*菜单边框*/
void DispMenu(char *menu)
{
int i,j;
char *mu[100];
int size=0,maxlen=0;
char *start=menu;
char *end=strchr(start,';');
while(end!=NULL)
{
*end='\0';
mu[size]=(char*)malloc(end-start+1);
strcpy(mu[size],start);
maxlen=(maxlen<end-start)?end-start:maxlen;
start=end+1;
end =strchr(start,';');
size++;
}
maxlen=(maxlen+1)/2*2;
printf("\n%s","┏");
for(i=0;i<maxlen/2;i++) printf("%s","━");
printf("%s\n","┓");
for(i=0;i<size;i++)
{
printf("%s","┃");
for(j=0;j<maxlen;j++)
{
if(j<strlen(mu[i]))
printf("%c",*(mu[i]+j));
else
printf("%c",' ');
}
printf("%s","┃\n");
}
printf("%s","┗");
for(i=0;i<maxlen/2;i++) printf("%s","━");
printf("%s\n","┛");
printf("请选择将要进行的操作:\n");
}
/*******************************************************/
/* 函数功能:将图书信息保存到文件中 */
/* 输入参数:链表头指针 */
/* 函数输出:无 */
/*******************************************************/
void saveBooks(BOOK books[],int total)
{
FILE *fp;
int i;
if((fp=fopen("F:\\library.txt","w"))==NULL)
{
printf("Faliure to open library.txt!\n");
exit(0);
}
for(i=0;i<total;i++)
{
fprintf(fp,"%s\t%s\t%s\t%f\n",books[i].no,books[i].name,books[i].pub,books[i].price);
}
fclose(fp);
}
/*****************************************************************************/
/* 函数功能:从文件中读入数据,创建Books数组 */
/* 输入参数:head:main函数中Books数组的首地址(亦即main函数中Books数组名的值)*/
/* 函数输出:Books数组的长度 */
/*****************************************************************************/
int load(BOOK books[])
{
FILE *fp;
int i;
if((fp=fopen("F:\\library.txt","r"))==NULL)
{
printf("Faliure to open library.txt!\n");
exit(0);
}
for(i=0;!feof(fp);i++)
{
fscanf(fp,"%s%s%s%f",books[i].no,books[i].name,books[i].pub,&books[i].price);
}
fclose(fp);
return i;
}
//*****************************************************************************
// 函数功能:添加一本新书
// 输入参数:head:main函数中Books数组的首地址(亦即main函数中Books数组名的值)
// total:Books数组中已存书的数量
// 函数输出:无
// 函数设计:1、先判断Books数组中是否还有空余空间,否,输出提示信息并退出,否则,total指向的变量值+1,
// 然后继续执行以下步骤
// 2、用malloc函数创建一个Book变量用于保存需要添加的新书信息,并将该变量的地址(即malloc的返回值,
// 用malloc创建的变量没有变量名,只有该变量的首地址)保存到Books数组中,
// 3、从键盘上输入添加的新书信息并保存到新创建的Book变量中
//*****************************************************************************
int addBook(BOOK books[],int total)
{
if(total>TOTAL)
{
printf("数目已超过上限,无法继续添加图书!\n");
return;
}
printf("添加一本新书:\n");
printf("请输入编号:\n");
scanf("%s",books[total].no);
getchar();
printf("请输入书名:\n");
scanf("%s",books[total].name);
getchar();
printf("请输入出版社:\n");
scanf("%s",books[total].pub);
getchar();
printf("请输入价格:\n");
scanf("%f",&books[total].price);
total++;
system("cls");
printf("添加图书信息成功!\n");
return total;
}
//*****************************************************************************
// 函数功能:在屏幕上显示所有图书的信息
// 输入参数:head:main函数中Books数组的首地址(亦即main函数中Books数组名的值)
// total:Books数组中已存书的数量
// 函数输出:无
//************************************************************************/
void displayBook(BOOK books[],int total)
{
int i;
printf("所有图书信息:\n");
printf("编号\t书名\t出版社\t价格\n");
for(i=0;i<total;i++)
{
printf("%s\t%s\t%s\t%f\n",books[i].no,books[i].name,books[i].pub,books[i].price);
}
}
//*****************************************************************************
// 函数功能:给定图书名称,查找并显示该书的相关信息
// 输入参数:head:main函数中Books数组的首地址(亦即main函数中Books数组名的值)
// total:Books数组中已存书的数量
// 函数输出:无
//************************************************************************/
void searchBook(BOOK books[], int total)
{
int i;
char name[20];
printf("按照书名查询相关信息:\n");
scanf("%s",name);
for(i=0;i<total;i++)
{
if(strcmp(name,books[i].name)==0)
{
printf("编号\t书名\t出版社\t价格\n");
printf("%s\t%s\t%s\t%f\n",books[i].no,books[i].name,books[i].pub,books[i].price);
return;
}
}
}
//*****************************************************************************
// 函数功能:给定图书名称,删除该本图书的信息
// 输入参数:head:main函数中Books数组的首地址(亦即main函数中Books数组名的值)
// total:Books数组中已存书的数量
// 函数输出:无
// 函数设计:1、从键盘上输入需要删除的图书名称
// 2、依次查找Books数组中每个元素所指向的Book变量,检查其中保存的图书名称是否需要删除的图书
// 名称相同,是,执行以下步骤
// 3、用malloc函数创建一个Book变量用于保存需要添加的新书信息,并将该变量的地址(即malloc的返回值,
// 用malloc创建的变量没有变量名,只有该变量的首地址)保存到Books数组中
// 3、从键盘上输入添加的新书信息并保存到新创建的Book变量中
//*****************************************************************************
void delBook(BOOK books[],int total)
{
char bookname[20];
int n,m,choose;
printf("请输入想要删除的图书名称:\n");
scanf("%s",bookname);
for(n=0;n<total;n++)
{
if(strcmp(bookname,books[n].name)==0)
{
printf("编号\t书名\t出版社\t价格\n");
printf("%s\t%s\t%s\t%f\n",books[n].no,books[n].name,books[n].pub,books[n].price);
printf("请再次确认是否要删除以上信息:\n");
printf("1:确认删除\n");
printf("2:放弃删除\n");
scanf("%d",&choose);
switch(choose)
{
case 1:
for(m=n;m<total-1;m++)
{
books[m]=books[m+1];
}
total--;
break;#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define TOTAL 100
typedef struct Book
{
char no[10]; /*编号*/
char name[20]; /*书名*/
char pub[20]; /*出版社*/
float price; /*价格*/
}BOOK;
int load(BOOK books[]);
//int input(BOOK *books,int total);
int addBook(BOOK books[],int total);
void displayBook(BOOK books[],int total);
void delBook(BOOK books[],int total);
void saveBooks(BOOK books[],int total);
void searchBook(BOOK books[],int total);
void DispMenu(char *menu);
/****************************************************************************/
/* 函数功能:主程序,显示主菜单,根据用户的选择调用相应的函数完成各自的功能 */
/* 输入参数:无 */
/* 函数输出:选择的菜单序号 */
/****************************************************************************/
void main(void)
{
BOOK books[TOTAL]; /* Books数组用于保存所有的图书 */
int count=0;
//printf("欢迎使用图书管理系统1.0!请先录入基本图书信息:\n");
//count=input(books,count);
//saveBooks(books,count);
count=load(books);
while(1)
{
switch(menu_select())
{
case 1:
count=addBook(books,count);
break;
case 2:
displayBook(books,count);
break;
case 3:
searchBook(books,count);
break;
case 4:
delBook(books,count);
break;
case 5:
saveBooks(books,count);
break;
case 0:
printf("谢谢使用!\n");
return;
}
}
}
/*录入图书信息
int input(BOOK *books,int total)
{
int n,i;
while(1)
{
char ch;
printf("请输入编号:\n");
scanf("%s",books->no);
getchar();
printf("请输入书名:\n");
scanf("%s",books->name);
getchar();
printf("请输入出版社:\n");
scanf("%s",books->pub);
getchar();
printf("请输入价格:\n");
scanf("%f",&books->price);
++total;
printf("是否要继续录入?是:Y,否:N\n");*/
/*******************************************************/
/* 函数功能:显示主菜单,选择菜单 */
/* 输入参数:无 */
/* 函数输出:选择的菜单序号 */
/*******************************************************/
int menu_select()
{
int cn=0;
char mu[]="欢迎使用图书管理系统1.0!;1.添加新书信息;2.显示图书信息;3.查询;4.删除;5.保存;0.退出;";
DispMenu(mu);
while(1)
{
cn=getch()-'0';
if (cn>=0&&cn<=7)
return cn;
}
}
/*菜单边框*/
void DispMenu(char *menu)
{
int i,j;
char *mu[100];
int size=0,maxlen=0;
char *start=menu;
char *end=strchr(start,';');
while(end!=NULL)
{
*end='\0';
mu[size]=(char*)malloc(end-start+1);
strcpy(mu[size],start);
maxlen=(maxlen<end-start)?end-start:maxlen;
start=end+1;
end =strchr(start,';');
size++;
}
maxlen=(maxlen+1)/2*2;
printf("\n%s","┏");
for(i=0;i<maxlen/2;i++) printf("%s","━");
printf("%s\n","┓");
for(i=0;i<size;i++)
{
printf("%s","┃");
for(j=0;j<maxlen;j++)
{
if(j<strlen(mu[i]))
printf("%c",*(mu[i]+j));
else
printf("%c",' ');
}
printf("%s","┃\n");
}
printf("%s","┗");
for(i=0;i<maxlen/2;i++) printf("%s","━");
printf("%s\n","┛");
printf("请选择将要进行的操作:\n");
}
/*******************************************************/
/* 函数功能:将图书信息保存到文件中 */
/* 输入参数:链表头指针 */
/* 函数输出:无 */
/*******************************************************/
void saveBooks(BOOK books[],int total)
{
FILE *fp;
int i;
if((fp=fopen("F:\\library.txt","w"))==NULL)
{
printf("Faliure to open library.txt!\n");
exit(0);
}
for(i=0;i<total;i++)
{
fprintf(fp,"%s\t%s\t%s\t%f\n",books[i].no,books[i].name,books[i].pub,books[i].price);
}
fclose(fp);
}
/*****************************************************************************/
/* 函数功能:从文件中读入数据,创建Books数组 */
/* 输入参数:head:main函数中Books数组的首地址(亦即main函数中Books数组名的值)*/
/* 函数输出:Books数组的长度 */
/*****************************************************************************/
int load(BOOK books[])
{
FILE *fp;
int i;
if((fp=fopen("F:\\library.txt","r"))==NULL)
{
printf("Faliure to open library.txt!\n");
exit(0);
}
for(i=0;!feof(fp);i++)
{
fscanf(fp,"%s%s%s%f",books[i].no,books[i].name,books[i].pub,&books[i].price);
}
fclose(fp);
return i;
}
//*****************************************************************************
// 函数功能:添加一本新书
// 输入参数:head:main函数中Books数组的首地址(亦即main函数中Books数组名的值)
// total:Books数组中已存书的数量
// 函数输出:无
// 函数设计:1、先判断Books数组中是否还有空余空间,否,输出提示信息并退出,否则,total指向的变量值+1,
// 然后继续执行以下步骤
// 2、用malloc函数创建一个Book变量用于保存需要添加的新书信息,并将该变量的地址(即malloc的返回值,
// 用malloc创建的变量没有变量名,只有该变量的首地址)保存到Books数组中,
// 3、从键盘上输入添加的新书信息并保存到新创建的Book变量中
//*****************************************************************************
int addBook(BOOK books[],int total)
{
if(total>TOTAL)
{
printf("数目已超过上限,无法继续添加图书!\n");
return;
}
printf("添加一本新书:\n");
printf("请输入编号:\n");
scanf("%s",books[total].no);
getchar();
printf("请输入书名:\n");
scanf("%s",books[total].name);
getchar();
printf("请输入出版社:\n");
scanf("%s",books[total].pub);
getchar();
printf("请输入价格:\n");
scanf("%f",&books[total].price);
total++;
system("cls");
printf("添加图书信息成功!\n");
return total;
}
//*****************************************************************************
// 函数功能:在屏幕上显示所有图书的信息
// 输入参数:head:main函数中Books数组的首地址(亦即main函数中Books数组名的值)
// total:Books数组中已存书的数量
// 函数输出:无
//************************************************************************/
void displayBook(BOOK books[],int total)
{
int i;
printf("所有图书信息:\n");
printf("编号\t书名\t出版社\t价格\n");
for(i=0;i<total;i++)
{
printf("%s\t%s\t%s\t%f\n",books[i].no,books[i].name,books[i].pub,books[i].price);
}
}
//*****************************************************************************
// 函数功能:给定图书名称,查找并显示该书的相关信息
// 输入参数:head:main函数中Books数组的首地址(亦即main函数中Books数组名的值)
// total:Books数组中已存书的数量
// 函数输出:无
//************************************************************************/
void searchBook(BOOK books[], int total)
{
int i;
char name[20];
printf("按照书名查询相关信息:\n");
scanf("%s",name);
for(i=0;i<total;i++)
{
if(strcmp(name,books[i].name)==0)
{
printf("编号\t书名\t出版社\t价格\n");
printf("%s\t%s\t%s\t%f\n",books[i].no,books[i].name,books[i].pub,books[i].price);
return;
}
}
}
//*****************************************************************************
// 函数功能:给定图书名称,删除该本图书的信息
// 输入参数:head:main函数中Books数组的首地址(亦即main函数中Books数组名的值)
// total:Books数组中已存书的数量
// 函数输出:无
// 函数设计:1、从键盘上输入需要删除的图书名称
// 2、依次查找Books数组中每个元素所指向的Book变量,检查其中保存的图书名称是否需要删除的图书
// 名称相同,是,执行以下步骤
// 3、用malloc函数创建一个Book变量用于保存需要添加的新书信息,并将该变量的地址(即malloc的返回值,
// 用malloc创建的变量没有变量名,只有该变量的首地址)保存到Books数组中
// 3、从键盘上输入添加的新书信息并保存到新创建的Book变量中
//*****************************************************************************
void delBook(BOOK books[],int total)
{
char bookname[20];
int n,m,choose;
printf("请输入想要删除的图书名称:\n");
scanf("%s",bookname);
for(n=0;n<total;n++)
{
if(strcmp(bookname,books[n].name)==0)
{
printf("编号\t书名\t出版社\t价格\n");
printf("%s\t%s\t%s\t%f\n",books[n].no,books[n].name,books[n].pub,books[n].price);
printf("请再次确认是否要删除以上信息:\n");
printf("1:确认删除\n");
printf("2:放弃删除\n");
scanf("%d",&choose);
switch(choose)
{
case 1:
for(m=n;m<total-1;m++)
{
books[m]=books[m+1];
}
total--;
break;
case 2:
system("cls");
break;
default:
printf("输入有误,请重新输入!\n");
break;
}
}
}
return total;
}
case 2:
system("cls");
break;
default:
printf("输入有误,请重新输入!\n");
break;
}
}
}
return total;
}