oid aboat()
{
printf("\n")
printf("\t")
for(i=0i<60i++)
printf("*")
printf("\n")printf("\n")
printf("\t\t\t\t学生信息系统!")
printf("\n")printf("\n")
printf("\t")
for(i=0i<60i++)
printf("*")
printf("\n\n\n\n")
printf("\t\t\t\t\t\t作者:\t***\n")
printf("\t\t\t\t\t\t日期:\t2012.07\n")
getchar()
}
版本信息可以写在注释里,既不影响程序,又能让人看到/***********************************
**版本:1.0
**作者:***
***********************************/
注意c语言中注释是/*注释内容*/这种格式的,所以只能有一个*/和/*配对,c中注释不能嵌套,即
/*
.........
/*
......
*/
*/
这样就会编译错了,c编译器把倒数第二个*/和第一个/*配对,就会多出一个*/,为什么/*后面又跟了个/*不会编译错呢,是因为c中碰到/*就会去找第一个*/,碰到了c编译器就认为注释结束了
/*本程序转自天涯潜水2的blog*/#include <stdio.h>
#include <malloc.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define LEN sizeof(struct booklist)
#define LEN2 sizeof(struct memberlist)
#define LEN3 sizeof(struct readers)
typedef struct readers//借书信息结构体
{
char name[30]//借书人的姓名
struct readers *next2
}reader
//书本信息结构体
typedef struct booklist
{
char num[20]//书号
char name[30]//书名
char concern[50]//出版社
char date[20]//出版日期
char author[20]//作者
int page//页数
int price//价格
int imformation//图书剩余数量
reader *a//借阅人
struct booklist *next
}Book
void creatlist()//创建新的书本信息
void print(Book *head)//打印书本信息
void save(Book *head)//储存书本信息
void AddBook()//添加书本信息
void DelBook()//删除书本信息
Book *read()//读取书本信息
void manager()//管理员 *** 作
void Bookconsult() //图书查询
int Borrow()//借书
int Return()//还书
Book *sort(Book *head)//书本信息按书号排序
void imformation()//系统信息
Book *head=NULL,*p1=NULL,*p2=NULL
//创建新的书本信息
void creatlist()
{
int i,n
printf("要创建的书本数目")
scanf("%d",&n)
p2=head=(Book *)malloc(LEN) //创建带有头结点的链表
p2->a=(reader *)malloc(LEN3)
p2->a->next2=NULL
p2->next=NULL
printf("请输入书的信息:\n")
for(i=1i<=ni++)
{
p1=(Book *)malloc(LEN)
printf("书号: ")scanf("%s",p1->num)
printf("书名: ")scanf("%s",p1->name)
printf("出版社: ")scanf("%s",p1->concern)
printf("出版日期: ")scanf("%s",p1->date)
printf("作者: ") scanf("%s",p1->author)
printf("书本页数: ")scanf("%d",&p1->page)
printf("书本价格(元): ")scanf("%d",&p1->price)
p1->a=(reader *)malloc(LEN3)
p1->a->next2=NULL
p1->imformation=10
p1->next=NULL
p2->next=p1
p2=p1
if(i<n) printf("下一本:\n")
}
head=sort(head)
save(head)
print(head)
}
//打印书本信息
void print(Book *head)
{
Book *p=NULL
reader *p0=NULL
p=head->next
printf("*******************************************************************************\n")
while(p!=NULL)
{
printf("书号: %s\n书名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n书本页数(页) : %d\n书本价格(元) : %d\n剩余数量 : %d\n",p->num,p->name,p->concern,p->date,p->author,p->page,p->price,p->imformation)
printf("借阅图书的人:")
if(p->a->next2==NULL) printf("------------暂无借阅人!")
else
{
for(p0=p->a->next2p0!=NULLp0=p0->next2)
{
printf("%s ",p0->name)
}
}
p=p->next /* p后移一个结点 */
printf("\n")
printf("\n")
}
}
//书本信息按书号排序
Book *sort(Book *head)
{
Book *p1=NULL,*p2=NULL,*p3=NULL,*min=NULL,*min2=NULL,*head2=head->next
p1=head2
while(p1->next!=NULL)
{
min=p2=p1/*把首结点作为最小值*/
while(p2->next!=NULL)
{
if(strcmp(min->num,p2->next->num)>0) /*首结点与下一结点比较*/
{
min2=p2
min=p2->next
}
p2=p2->next
}
if(min!=p1)
{
min2->next=min->next /*删除最小结点*/
min->next=p1 /*插入最小结点*/
if(p1==head2) head2=min
else p3->next=min/*p3为min前的结点指针*/
p3=min
}
else
{
p3=p1
p1=p1->next
}
}
head->next=head2
return(head)
}
//储存书本信息
void save(Book *head)
{
FILE *fp,*fp2
Book *p=NULL
reader *q=NULL
fp=fopen("书本信息.txt","wb")//printf("不能打开文件!\n")
fp2=fopen("借阅信息.txt","wb")//printf("不能打开文件!\n")
p=head
while(p!=NULL)
{
fwrite(p,LEN,1,fp)/*逐个结点写文件*/
for(q=p->aq!=NULLq=q->next2)
{fwrite(q,LEN3,1,fp2)}
p=p->next
}
fclose(fp)
fclose(fp2)
}
//添加书本信息
void AddBook()
{
FILE *fp,*fp2
Book *addbook=NULL
reader *p0=NULL
fp=fopen("书本信息.txt","ab")//追加方式打开文件
fp2=fopen("借阅信息.txt","ab")
addbook=(Book *)malloc(LEN)
printf("输入书本信息:\n")
printf("书号: ")scanf("%s",addbook->num)
printf("书名: ")scanf("%s",addbook->name)
printf("出版社: ")scanf("%s",addbook->concern)
printf("出版日期: ")scanf("%s",addbook->date)
printf("作者: ") scanf("%s",addbook->author)
printf("书本页数: ")scanf("%d",&addbook->page)
printf("书本价格(元): ")scanf("%d",&addbook->price)
p0=(reader *)malloc(LEN3)
p0->next2=NULL
addbook->a=p0
addbook->imformation=10
addbook->next=NULL
fwrite(addbook,LEN,1,fp)/*块写*/
fwrite(p0,LEN3,1,fp2)
fclose(fp)
fclose(fp2)
}
//读取书本信息
Book *read()
{
FILE *fp,*fp2
Book *p=NULL,*p1=NULL,*head=NULL
reader *p0=NULL,*p2=NULL
if((fp=fopen("书本信息.txt","rb"))==NULL) printf("不能打开文件或文件不存在!\n")
if((fp2=fopen("借阅信息.txt","rb"))==NULL) printf("不能打开文件或文件不存在!\n")
head=(Book *)malloc(LEN)
fread(head,LEN,1,fp)
p1=head
p0=(reader *)malloc(LEN3)
fread(p0,LEN3,1,fp2)
p0->next2=NULL
head->a=p0
head->next=NULL
p=(Book *)malloc(LEN)
while(fread(p,LEN,1,fp))/*逐个结点读取*/
{
p1->next=p
p1=p1->next
p0=(reader *)malloc(LEN3)
p1->a=p0
while(fread(p0,LEN3,1,fp2))
{
if(p0->next2==NULL)
{
p2=p0
p0=(reader *)malloc(LEN3)
break
}
p2=p0
p0=(reader *)malloc(LEN3)
p2->next2=p0
}
free(p0)
p2->next2=NULL
p=(Book *)malloc(LEN)
}
p1->next=NULL
free(p)
fclose(fp)
fclose(fp2)
head=sort(head)
if(head!=NULL) return(head)
else
{
printf("文件为空!\n")
return 0
}
}
//删除书本信息
void DelBook()
{
Book *head=NULL,*p=NULL,*q=NULL
char bookname[30]
head=read()
printf("输入要删除的书名: ")
scanf("%s",bookname)
p=head
while(p!=NULL)/*按名字查找要删除的图书*/
{
if(strcmp(p->name,bookname)==0)
{
if(p==head)
{
head=head->next
break
}
else
{
q->next=p->next
break
}
}
q=p
p=p->next
}
save(head)
}
//管理员 *** 作
void manager()
{
int n,i=0,k=1
while(k==1)
{
printf("********************************************************************************\n")
printf(" 请选择你需要的 *** 作\n")
printf(" ◎ 1.建立新的书本信息\n")
printf(" ◎ 2.插入书本信息\n")
printf(" ◎ 3.删除书本信息\n")
printf(" ◎ 4.读取所有书本信息\n")
printf(" ◎ 5.读取指定书本信息\n")
printf(" ◎ 6.返回到上级目录\n")
printf(" ◎ 7.保存并退出\n")
printf("请输入:")
scanf("%d",&n)
switch(n)
{
case 1: creatlist()break
case 2: AddBook()break
case 3: DelBook()break
case 4: head=read()system("CLS")print(head)break
case 5: system("CLS")Bookconsult()break
case 6: k=0break
default: k=0break
}
}
}
//图书查询
void Bookconsult()
{
int n,m=1,sign=0
Book *p=NULL,*p1=NULL,*p0=NULL,*head=NULL
reader *p2=NULL
char a[30],b[20],c[20]
head=read()
while(m==1)
{
printf(" 请选择你查询书本的方式: 1.按书名 2.按书的编号 3.按书的作者 4.退出查询\n")
printf("输入=")
scanf("%d",&n)
switch(n)
{
case 1: printf("请输入书名:")
scanf("%s",a)
p0=head
while(p0!=NULL)
{
if(strcmp(a,p0->name)==0)
{
printf("*******************************************************************************\n")
printf("书号: %s\n书名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n书本页数(页) : %d\n书本价格(元) : %d\n剩余数量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation)
printf("借阅图书的人:")
if(p0->a->next2==NULL) printf("------------暂无借阅人!\n")
else
{
for(p2=p0->a(p2=p2->next2)!=NULL)
{printf("%s ",p2->name)}
}
printf("\n")
sign=1
p0=p0->next
}
else p0=p0->next
}
if(sign==0) printf("没有这本书的信息.\n")
break
case 2: printf("请输入书的编号:")
scanf("%s",b)
p0=head
while(p0!=NULL)
{
if(strcmp(b,p0->num)==0)
{
printf("*******************************************************************************\n")
printf("书号: %s\n书名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n书本页数(页) : %d\n书本价格(元) : %d\n剩余数量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation)
printf("借阅图书的人:")
if(p0->a->next2==NULL) printf("------------暂无借阅人!\n")
else
{
for(p2=p0->a(p2=p2->next2)!=NULL)
{printf("%s ",p2->name)}
}
printf("\n")
break
}
else p0=p0->next
}
if(p0==NULL) printf("没有这本书的信息.\n")
break
case 3: printf("请输入书的作者:")
scanf("%s",c)
p0=head
while(p0!=NULL)
{
if(strcmp(c,p0->author)==0)
{
printf
("*******************************************************************************\n")
printf("书号: %s\n书名: %s\n出版社: %s\n出版日期: %s\n作者: %s\n书本页数(页) : %d\n书本价格(元) %d\n剩余数量 : %d\n",p0->num,p0->name,p0->concern,p0->date,p0->author,p0->page,p0->price,p0->imformation)
printf("借阅图书的人:")
if(p0->a->next2==NULL) printf("------------暂无借阅人!\n")
else
{
for(p2=p0->a(p2=p2->next2)!=NULL)
{printf("%s ",p2->name)}
}
printf("\n")
sign=1
p0=p0->next
}
else p0=p0->next
}
if(sign==0) printf("没有这本书的信息.\n")
break
default: m=0break
}
}
}
//借书
int Borrow()
{
char a[30],b[30],c
Book *p0=NULL,*head=NULL
reader *p2=NULL,*p3=NULL
head=read()
printf("请输入要借的书的书号:")
scanf("%s",a)
p0=head->next
while(p0!=NULL)
{
if((strcmp(a,p0->num))==0)
{
if(p0->imformation>0)
{
printf("图书在馆,可以借出,是否确定借出?'y'or'n'\n")
c=getchar()
scanf("%c",&c)
if(c=='y')
{
printf("请再次输入你的用户名:")
scanf("%s",b)
p3=(reader *)malloc(LEN3)
strcpy(p3->name,b)
if(p0->a->next2==NULL)
{
p0->a->next2=p3
p3->next2=NULL
}
else
{
for(p2=p0->ap2->next2!=NULLp2=p2->next2)
p2->next2=p3
p3->next2=NULL
}
--p0->imformation
save(head)
printf(" *** 作完成,可以带走图书。\n")
return 1
break
}
else
{
return 0
break
}
}
else printf("很抱歉,该图书不在馆.\n")return 0break
}
else p0=p0->next
}
if(p0==NULL)
{
printf("很抱歉,没有这本书。\n")
return 0
}
else return 2
}
//还书
int Return()
{
Book *p0=NULL,*head=NULL
reader *p2=NULL,*p3=NULL
char c[20],b[30]
head=read()
printf("请输入要还的书的书号:")
scanf("%s",&c)
p0=head->next
while(p0!=NULL)
{
if((strcmp(c,p0->num))==0)
{
printf("请输入你的用户名:")
scanf("%s",&b)
if(p0->a->next2==NULL) {printf("你没有借这本书!\n")break}
else
{
p3=p0->a
p2=p3->next2
while(p2!=NULL)
{
if(strcmp(p2->name,b)==0)
{
if(p2->next2==NULL) {p3->next2=NULLfree(p2)break}
else
{
p3->next2=p2->next2
free(p2)
break
}
}
else
{
p3=p2
p2=p2->next2
}
}
if(p2==NULL) printf("你没有借这本书!\n")
}
++p0->imformation
save(head)
printf("书已归馆, *** 作完成。\n")
return 1
break
}
else p0=p0->next
}
if(p0==NULL)
{
printf("没有这本书。\n")
return 0
}
else return 2
}
//借书信息
void imformation()
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n")
printf("※ 欢迎你使用我们的图书管理系统!以下是本系统的有关说明: ※\n")
printf("※本系统主要功能是进行图书的有关管理,你可以进行图书信息的创建、插入、删除、 ※\n")
printf("※查询在 *** 作中主要是以阿拉伯数字来选择相应的菜单功能,在选择时以'y'表示 '是' ※\n")
printf("※以'n'表示'不是'。在你 *** 作的时候就会有相应的 *** 作提示。 ※\n")
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n")
}
main()
{
int n,k=1
printf("********************************************************************************\n")
printf("\n\n")
printf(" 欢迎进入我们的图书管理系统! \n")
printf("\n\n")
printf("********************************************************************************\n")
while(k==1)
{
printf(" 请选择你的 *** 作: 1.管理员 *** 作 2.系统信息 3.退出系统\n")
printf("********************************************************************************\n")
printf(" 你的选择是:")
scanf("%d",&n)
system("CLS")
switch(n)
{
case 1: manager()break
case 2: imformation()break
default: printf("+++++++++++++++++++++++++++欢迎你再次使用我们的系统!++++++++++++++++++++++++++++\n")k=0break
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)