第1个回答 推荐于2016-05-24
本人邮箱长期在线,有什么不懂得可直接询问。邮箱:wyw2010@tom.com
这是我以前做的课程设计,没有修改功能。修改很好做,我这还有一份学生管理信息的源代码,能实现上述全部功能。由于我现在正在帮客户做个系统,没时间来完善这个程序,希望你自己能够完善一下。
/*设计实现一个简单的图书管理系统,对图书馆的业务进行管理*/
////////////////////////////////////////////////
//内容:设计实现一个简单的图书管理系统,对图书馆的业务进行管理
//要求:用C语言及顺序结构来实现,系统具有如下功能
//1. 图书入库:图书数据包括图书书号,书名,作者,数量,单价等,一本书作为一个结点,
//以书号为关键字,按输入的顺序建立顺序表
//2.排序:以书号按升序进行排序(可以任选一种排序方法)
//3.查找:能按书名、书号进行查找(分别用顺序查找和折半查找方法)
//4.删除:从表中删除指定的图书
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define LIST_INIT_SIZE 50
#define LISTINCREMENT 10
typedef struct Book
{
int BookNum;/*图书书号*/
char BookName[50];/*图书书名*/
char BookWrite[50];/*图书作者*/
float BookPrice; /*图书价格*/
int numbers ; /*图书数量*/
}Book;
typedef struct Library_Data
{
Book *book;
int length;
int listsize;
int Num;
}Library_Data,*Lib_Data;
//显示指定的一条记录
void print(Book p)
{
printf("\n********************************************************************\n");
printf("图书书号 图书书名 图书作者 图书数量 图书单价(元)\n");
printf("--------------------------------------------------------------------\n");
printf("%-14d%-14s%-14s%-14d%-14f\n",p.BookNum,p.BookName,p.BookWrite,p.numbers,p.BookPrice);
printf("********************************************************************\n");
}
//查找函数
int find(Library_Data p,int Num,char s[20])
{
int i,low,mid,high;
if(Num==-1)
for(i=0;i<p.length;i++) /*顺序查找*/
{
if(strcmp(s,p.book[i].BookName)==0)
return i;
}
else if(strcmp(s,"")==0)
{
low=0;high=p.length;
while(low<=high) /*折半查找*/
{
mid=(low+high)/2;
if(Num==p.book[mid].BookNum) return mid;
else if(Num>p.book[mid].BookNum) low=mid+1;
else high=mid-1;
}
}
return -1;
}
//升序排序
Library_Data Sort_Book(Library_Data &p)
{
Book p0;
int i,j;
if(p.Num==0) return p;
for(i=0;i<p.length;i++)
{
for(j=i+1;j<p.length;j++)
{
if(p.book[i].BookNum>p.book[j].BookNum)
{
p0=p.book[i];
p.book[i]=p.book[j];
p.book[j]=p0;
}
}
}
return p;
}
//图书初始化
void Create_Data(Library_Data &p1)
{
int i=0;
Book *newbase;
system("cls");
printf("现在对图书进行初始化\n");
puts("***********************************");
p1.Num=0;p1.length=0;
p1.listsize=LIST_INIT_SIZE;
p1.book=(Book *)malloc(LIST_INIT_SIZE*sizeof(Book));
do
{
if(p1.length>p1.listsize)
{
newbase=(Book *)realloc(p1.book,(p1.listsize+LISTINCREMENT)*sizeof(Book));
if(!newbase) exit(0);
p1.book=newbase;
p1.listsize+=LISTINCREMENT;
}
printf("请输入图书书号:");
scanf("%d",&p1.book[i].BookNum);
printf("请输入图书书名:");
scanf("%s",&p1.book[i].BookName);
printf("输入图书作者: ");
scanf("%s",&p1.book[i].BookWrite);
printf("请输入图书数量:");
scanf("%d",&p1.book[i].numbers);
printf("请输入图书价格:");
scanf("%f",&p1.book[i].BookPrice);
p1.Num+=p1.book[i].numbers;i++;p1.length++;
printf("***********************************\n");
printf(" 按 n 退出,按别的继续。\n"); /*提示如何继续、退出*/
printf("***********************************\n");
}while(getch()!='n');
Sort_Book(p1);
}
//查找图书
int Find_Book(Library_Data p,int n)
{
char name[20]="";
int k,Num=-1;
if(p.Num==0)
{
system("cls");
printf("现无图书记录! ");
return 0;
}
else if(n==1)
{
system("cls"); /*清屏*/
printf("现在是对图书信息进行查找");
printf("\n*********************************************\n");
printf("请输入你要查找的图书书名:");
scanf("%s",name);
k=find(p,Num,name); /*调用find()查找函数*/
if(k!=-1) /*条件满足执行下面函数*/
print(p.book[k]);
else
printf("\n 没有找到你要找的图书信息.按任意键继续。");
}
else if(n==2)
{
system("cls"); /*清屏*/
printf("现在是对图书信息进行查找");
printf("\n*********************************************\n");
printf("请输入你要查找的图书书号:");
scanf("%d",&Num);
k=find(p,Num,name); /*调用find()查找函数*/
if(k!=-1) /*条件满足执行下面函数*/
print(p.book[k]);
else
printf("\n 没有找到你要找的图书信息.按任意键继续。");
}
else
printf("你的选择有误!");
return 1;
}
//插入图书
void add(Library_Data &p0)
{
int i,k,low,mid,high;
Book p1,*p2,*p3,*newbase;
system("cls");
if(p0.Num==0)
printf("图书信息表还没有初始化,需要对图书信息表进行初始化后才能进行插入。\n");
else
{
if(p0.length>=p0.listsize-1)
{
newbase=(Book *)realloc(p0.book,(p0.listsize+LISTINCREMENT)*sizeof(Book));
if(!newbase) exit(0);
p0.book=newbase;
p0.listsize+=LISTINCREMENT;
}
printf("请输入待插入图书信息:\n");
printf("*********************************************\n");
printf("请输入图书书号:");
scanf("%d",&p1.BookNum);
printf("*********************************************\n");
printf("请输入图书书名:");
scanf("%s",&p1.BookName);
printf("*********************************************\n");
printf("请输入图书作者:");
scanf("%s",&p1.BookWrite);
printf("*********************************************\n");
printf("请输入图书数量:");
scanf("%d",&p1.numbers);
printf("*********************************************\n");
printf("请输入图书价格:");
scanf("%f",&p1.BookPrice);
printf("*********************************************\n");
low=0;high=p0.length;
if(p1.BookNum<p0.book[0].BookNum)
{
for(p2=&p0.book[p0.length];p2>=&p0.book[0];p2--)
*(p2+1)=*p2;
p0.book[0]=p1;
p0.Num+=p1.numbers;p0.length++;
}
else if(p1.BookNum>p0.book[p0.length-1].BookNum)
{
p0.book[p0.length]=p1;
p0.Num+=p1.numbers;p0.length++;
}
else
{
for(i=0;i<p0.length;i++)
if(p1.BookNum>=p0.book[i].BookNum && p1.BookNum<p0.book[i+1].BookNum) break;
for(p2=&p0.book[p0.length];p2>&p0.book[i];p2--)
*(p2+1)=*p2;
p0.book[i+1]=p1;
p0.Num+=p1.numbers;p0.length++;
}
}
}
//删除图书
void Delete_Book(Library_Data &LD,int n)
{
system("cls");
char name[20]="";
char a;
int i=0,k=0,Num=-1;
Book *p1,*p2;
if(LD.Num==0)
printf("现无图书记录! ");
else
{
printf("进行图书信息删除");
printf("\n*********************************************\n");
if(n==1)
{
printf("请输入待删除图书书名:"); /*提示输入要删除的图书书名*/
scanf("%s",name);
printf("是否删除所有同名的图书?“y”是,其他键只删除第一个:");
if(getch()=='y') /*删除所有同名图书信息*/
{
for(i=0;i<LD.length;i++)
{
if(strcmp(name,LD.book[i].BookName)==0)
{
p2=&LD.book[LD.length-1];
LD.Num-=LD.book[i].numbers;
for(p1=&LD.book[i];p1<=p2;p1++)
*p1=*(p1+1);
LD.length--;k=1;i=-1;
}
}
if(k==0) printf("\n没有你要删除的记录\n");
else printf("\n所有图书名为%s的信息已被删除!\n",name); /*显示己被删除的信息*/
}
else
{
i=find(LD,Num,name);
if(i==-1) printf("\n没有你要删除的记录\n");
else /*删除第一本相同的图书信息*/
{
p2=&LD.book[LD.length-1];
LD.Num-=LD.book[i].numbers;
for(p1=&LD.book[i];p1<=p2;p1++)
*p1=*(p1+1);
printf("\n图书号为%s的信息已被删除!\n",name); /*显示己被删除的信息*/
LD.length--;
}
}
}
else if(n==2)
{
printf("请输入待删除图书书号:"); /*提示输入要删除的图书书号*/
scanf("%d",&Num);
i=find(LD,Num,name);
if(i==-1) printf("没有你要删除的记录\n");
else
{
p2=&LD.book[LD.length-1];
LD.Num-=LD.book[i].numbers;
for(p1=&LD.book[i];p1<=p2;p1++)
*p1=*(p1+1);
printf("图书号为%d的信息已被删除!\n",Num); /*显示己被删除的信息*/
LD.length--;
}
}
else
printf("你的选择有误!");
}
}
//显示所有图书信息
void ShowBookTable(Library_Data p,int n)
{
int i;
system("cls");
if(n==0)
printf("现无图书记录! ");
else
{
printf("现在有%d本图书的信息。",n);
printf("\n**********************************************************************\n");
printf("图书书号 图书书名 图书作者 图书数量 图书单价(元)\n");
for(i=0;i<p.length;i++)
{
printf("----------------------------------------------------------------------\n");
printf("%-14d%-14s%-14s%-14d%-14f\n",p.book[i].BookNum,p.book[i].BookName,p.book[i].BookWrite,p.book[i].numbers,p.book[i].BookPrice);
}
printf("**********************************************************************\n");
}
}
//菜单函数
int menu_select() /*定义菜单函数*/
{
int c;
printf("按任意键进入选择菜单……\n"); /*提示压任意键继续*/
getch(); /*读入任意字符*/
system("cls"); /*清屏*/
printf("********************菜单选项如下****************\n\n"); /*以下为主菜单*/
printf(" 1. 初始化图书信息表\n");
printf(" 2. 显示全部图书记录\n");
printf(" 3. 查找图书记录\n");
printf(" 4. 删除图书记录\n");
printf(" 5. 插入新记录\n");
printf(" 6. 退出系统\n");
printf("***********************************************\n");
do{
printf("\n 输入您的选择(1~6):"); /*提示输入选项*/
scanf("%d",&c); /*输入选择项*/
if(!(c>=1&&c<=6))
}while(c<1||c>6); /*选择项不在0~6之间重输*/
return c; /*返回选择项,主程序根据该数调用相应的函数*/
}
void main()
{
Library_Data LD;
LD.Num=0;
int n,m;
for(;;) /*无限循环*/
{
switch(menu_select())
{
case 1:Create_Data(LD);break; /*初始图书生信息*/
case 2:ShowBookTable(LD,LD.Num);break; /*显示全部图书信息*/
case 3:
printf("请你选择查找方式(“1”为按书名查找,“2”为按书号查找):");
scanf("%d",&n);
Find_Book(LD,n);break; /*查找图书信息*/
case 4:
printf("请你选择删除方式(“1”为按书名删除,“2”为按书号删除):");
scanf("%d",&m);
Delete_Book(LD,m);break; /*删除图书信息*/
case 5:add(LD);break; /*插入图书信息*/
case 6:exit(0); /*结束程序*/
}
}
}本回答被提问者采纳