/*输入图书信息*/
struct library *input_message(void)/*指向输入图书信息*/
{struct library *p1,*p2,*head;/*包含三个指针*/
char ch;/*字符*/ head=NULL;/*头指针为空*/
head=p2=p1=(struct library*)malloc(N);/*指针自由分配的空间大小为N*/
do{
p1=(struct library *)malloc(N);/*当p1所占的大小为N时*/
clrscr();/*清屏*/
printf("\n\n\t**Input book message**\n");/*输出图书信息*/
printf("\t serial_number:");/*输出序列号*/
scanf("%ld",&p1->b_num);/*输入书的名字*/
printf("\t book_name:");/*输出书的名字*/
scanf("%s",p1->b_name);/*输入书的名字*/
printf("\t press_name:");/*输出出版社*/
scanf("%s",p1->p_name);/*输入出版社*/
printf("\tpress_time(yy-mm):");/*输出出版日期*/
scanf("%d%d",&p1->p_time.year,&p1->p_time.month);/*输入出版日期*/ printf("\t total_number:");/*输出图书总数*/
scanf("%ld",&p1->t_num);/*输入图书总数*/
printf("\t left_number:");/*输出剩余图书数*/
scanf("%ld",&p1->l_num);/*输入剩余图书数*/
printf("\t book_kind:");/*输出图书种类*/
scanf("%s",p1->b_kind);/*输入图书种类*/
p2->next=p1;/*将p2指针指向P2*/p2=p1;
printf("\t\tContinue? (Y/N):");/*输出信息“是否继续(是/不是)?”*/
ch=getch();/*输入字符*/
}while(ch=='Y'||ch=='y');/*当输入‘Y’或者‘y’的时候*/
p2->next=NULL;/*最后一个结点的后继指针为空*/
p1=head;/*p1等于头指针*/
head=p1->next;/*头指针等于p1所指向的下一个*/
free(p1);/*释放出p1的空间*/
printf("\n\tInput over!");/*打印输入结束*/
ch=getchar();/*输入字符*/
return head;/*返回首部*/}/*储存图书信息*/
save_message(struct library *p)
{FILE *fp;/*定义指向文件的指针*/
if((fp=fopen("library.txt","wt"))==NULL)/*为输出打开一个二进制文件夹,如果没有则建立*/
{ printf("\nSorry! Open the document to be wrong!");/*输出对不起,打开文件失败*/ return;/*返回*/}
while(p!=NULL)/*如P不为空*/
{ fprintf(fp,K);/*输出图书的序列号,书名,出版社,出版日期,图书总量,剩余图数量,书的种类等信息*/
p=p->next;/*p等于p所指向的next*/ }
fclose(fp);/*关闭文件*/
return;/*返回*/}
//xieai999
#include
#include
typedef struct study
{
int number;
char name[30];
char state[2];
}LT;
typedef struct book
{
LT *s[1000];
int top;
}LY;
void CreatLT(LT **s,int a,char g[],char c[])
{
(*s)=(LT *)malloc(sizeof(LT));
(*s)->number=a;
int i=0;
while(i<30)
{
if(g[i]!='\0')
(*s)->name[i]=g[i];
else
(*s)->name[i]='\0';
i++;
}
(*s)->state[0]=c[0];
(*s)->state[1]='\0';
}
void CreatLY(LY **r)
{
(*r)=(LY *)malloc(sizeof(LY));
(*r)->top=-1;
}
void Seek(LY *a)
{
printf("1,号码\n2,书名\n3,状态\n");
int x,i,y,k,symble=0;
char d[10],e[1];
scanf("%d",&x);
switch(x)
{
case 1:
printf("书号:");
scanf("%d",&y);
i=0;
for(i;i<=a->top;i++)
{
if(y==a->s[i]->number)
{
printf("%d %s %s\n",a->s[i]->number,a->s[i]->name,a->s[i]->state);
break;
}
if(i==a->top)
printf("没找到\n");
}
break;
case 2:
i=0;
printf("书名:");
scanf("%s",&d);
for(i;i<=a->top;i++)
{
if(strlen(d)==strlen(a->s[i]->name))
for(k=0;k
if(d[k]!=a->s[i]->name[k])
break;
if(k==strlen(d)-1)
{
printf("%d %s %s\n",a->s[i]->number,a->s[i]->name,a->s[i]->state);
symble=1;
}
}
if(symble==1)
break;
if(i==a->top)
printf("没找到\n");
}
break;
case 3:
printf("状态(Y/N)\n");
scanf("%s",&e);
i=0;
for(i;i<=a->top;i++)
{
if(a->s[i]->state[0]==e[0])
printf("%d %s %s\n",a->s[i]->number,a->s[i]->name,a->s[i]->state);
}
break;
default:
printf("没有该选项\n");
break;
}
}
main()
{
printf("欢迎进入图书管理系统\n");
int k=0,i=0;
LT *s[1000],*p;LY *A;
CreatLY(&A); char a[30]="",b[2]="";
for(k; ;k++)
{
printf("1,输入\n2,输出\n3,查询\n4,删除\n5,修改\n0,退出\n");
int x,number,j=0,h;
scanf("%d",&x);
switch(x)
{
case 1:
printf("编号(必须是整数):");
scanf("%d",&number);
printf("书名:");
scanf("%s",&a);
printf("状态(注意:只能输入N(借出)/Y(未借出)):");
scanf("%s",&b);
CreatLT(&s[i],number,a,b);
A->top++;
A->s[A->top]=s[i];
i++;
break;
case 2:
j=0;
while(j<=A->top)
{
printf("%d %s %s\n",A->s[j]->number,A->s[j]->name,A->s[j]->state);
j++;
}
break;
case 3:
Seek(A);
break;
case 4:
printf("要删除的书号:");
scanf("%d",&number);
j=0;
for(j;j<=A->top;j++)
{
if(A->s[j]->number==number)
{
p=A->s[A->top];
A->s[A->top]=A->s[j];
A->s[j]=p;
A->top--;
break;
}
if(j==A->top)
printf("没有这本书\n");
}
break;
case 5:
printf("要修改的书号:");
scanf("%d",&number);
j=0;
for(j;j<=A->top;j++)
{
if(A->s[j]->number==number)
{
printf("1,修改书号\n2,修改书名\n3,修改状态\n");
scanf("%d",&number);
if(number==1)
{
printf("新书号:");
scanf("%d",&number);
A->s[j]->number=number;
break;
}
else
if(number==2)
{
printf("新书名:");
scanf("%s",&a);
h=0;
while(A->s[j]->name[h]!='\0')
{
if(a[h]!='\0')
A->s[i]->name[h]=a[h];
else
A->s[i]->name[h]='\0';
h++;
}
break;
}
else
if(number==3)
{
printf("新状态:");
scanf("%s",&b);
A->s[i]->state[0]=b[0];
break;
}
else
{
printf("输入错误\n");
j=j-1;
}
}
if(j==A->top)
printf("没有这本书\n");
}
break;
case 0:
h=10000;
break;
default:
printf("没有该选项\n");
break;
}
if(h==10000)
break;
}
}
忙啦个中午,,,还没恰饭呢,,,多给点分,,,以后有什么类似的可以找我!!!
本人邮箱长期在线,有什么不懂得可直接询问。邮箱:wyw2010@tom.com
这是我以前做的课程设计,没有修改功能。修改很好做,我这还有一份学生管理信息的源代码,能实现上述全部功能。由于我现在正在帮客户做个系统,没时间来完善这个程序,希望你自己能够完善一下。
/*设计实现一个简单的图书管理系统,对图书馆的业务进行管理*/
////////////////////////////////////////////////
//内容:设计实现一个简单的图书管理系统,对图书馆的业务进行管理
//要求:用C语言及顺序结构来实现,系统具有如下功能
//1. 图书入库:图书数据包括图书书号,书名,作者,数量,单价等,一本书作为一个结点,
//以书号为关键字,按输入的顺序建立顺序表
//2.排序:以书号按升序进行排序(可以任选一种排序方法)
//3.查找:能按书名、书号进行查找(分别用顺序查找和折半查找方法)
//4.删除:从表中删除指定的图书
#include
#include
#include
#include
#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
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
for(j=i+1;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
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
*(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
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
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))
{printf(" 你的输入有误,请重新输入……");}
}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); /*结束程序*/
}
}
}