#include <stdio.h> /*标准输入输出函数库*/
#include <stdlib.h> /*标准函数库*/
#include <string.h> /*字符串函数库*/
#include <conio.h> /*屏幕操作函数库*/
#define HEADER1 " -------------------------------BOOK-------------------------------------------\n"
#define HEADER2 " | number | name |price| author | publishing company |number|\n"
#define HEADER3 " |----------|---------------|-----|---------------|---------------------------|\n"
#define HEADER4 " -------------------------------Member----------------------------------------\n"
#define HEADER5 " | number | name | telephone |\n"
#define HEADER6 " |----------|---------------|---------------|\n"
#define HEADER7 " | mnumber | member name | bnumber | book name |\n"
#define HEADER8 " |----------|---------------|----------|---------------|\n"
#define HEADER9 " |-----------------borrow book-------------------------|\n"
#define FORMAT " |%-10s|%-15s|%5d|%-15s|%-20s|%5d |\n"
#define FORMAT1 " |%-10s|%-15s|%-15s|\n"
#define FORMAT2 " |%-10s|%-15s|%-10s|%-15s|\n"
#define DATA p->data.num,p->data.name,p->data.price,p->data.author,p->data.pub,p->data.number
#define END " ------------------------------------------------------------------------\n"
#define N 100
typedef struct book
{
char num[10]; /*书号*/
char name[15]; /*书名*/
int price; /*定价*/
char author[15]; /*作者*/
char pub[20]; /*出版社*/
int number;/*数量*/
};
typedef struct Member
{
char mnum[10];/*会员号*/
char mname[15];/*会员姓名*/
char tel[15];/*联系电话*/
};
typedef struct borrow
{
char mnum[10];/*会员号*/
char mname[15];/*会员姓名*/
char num[10];/*书号*/
char name[15];/*书名*/
};
typedef struct node/*定义图书信息链表的结点结构*/
{
struct book data; /*数据域*/
struct node *next; /*指针域*/
}Node,*Link; /*定义node类型的结构变量及指针变量*/
typedef struct mnode/*定义会员信息链表的结点结构*/
{
struct Member inf;
struct mnode *next;
}Mnode,*Mlink;
typedef struct bnode/*定义借书信息链表的结点结构*/
{
struct borrow binf;
struct bnode *next;
}Bnode,*Blink;
void menu() /*主菜单*/
{
system("cls"); /*清屏*/
printf(" Book Management System \n");
printf("\t*************************Menu**********************************\n");
printf("\t* 1 Add book 2 delete book *\n");
printf("\t* 3 search book 4 modify record *\n");
printf("\t* 5 Add member 6 borrow book *\n");
printf("\t* 7 return book 8 save book *\n");
printf("\t* 9 save member 0 quit system *\n");
printf("\t***************************************************************\n");
}
void printheader() /*格式化输出表头*/
{
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
}
void printdata(Node *pp) /*格式化输出表中数据*/
{
Node* p;
p=pp;
printf(FORMAT,DATA);
}
void Wrong() /*输出按键错误信息*/
{
printf("\n\n\n\n\n***********Error:input has wrong! press any key to continue**********\n");
getchar();
}
void Nofind() /*输出未查找此学生的信息*/
{
printf("\n=====>Not find this record!\n");
}
void Disp(Link l) /*显示单链表l中存储的图书记录*/
{
Node *p;
p=l->next;
if(!p) /*p==NULL则说明暂无记录*/
{
printf("\n=====>Not record!\n");
getchar();
return;
}
printf("\n\n");
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
while(p) /*逐条输出链表中存储图书信息*/
{
printf(FORMAT,DATA);
p=p->next;
printf(HEADER3);
}
getchar();
}
void Mdisp(Mlink m) /*显示单链表中存储的会员信息*/
{
Mnode *p;
p=m->next;
if(!p) /*p==NULL证明没有会员记录*/
{
printf("\n=====>Not record!\n");
getchar();
return;
}
printf("\n\n");
printf(HEADER4);
printf(HEADER5);
printf(HEADER6);
while(p) /*逐条输出链表中存储的会员信息*/
{
printf(FORMAT1,p->inf.mnum,p->inf.mname,p->inf.tel);
p=p->next;
printf(HEADER6);
}
getchar();
}
Node* Locate(Link l,char findmess[],char nameornum[])
{
Node *r;
if(strcmp(nameornum,"num")==0) /*按书号查询*/
{
r=l->next;
while(r)
{
if(strcmp(r->data.num,findmess)==0)
return r;/*返回与输入内容相匹配的结点*/
r=r->next;
}
}
else if(strcmp(nameornum,"name")==0) /*按书名查询*/
{
r=l->next;
while(r)
{
if(strcmp(r->data.name,findmess)==0)
return r;/*返回与输入内容相匹配的结点*/
r=r->next;
}
}
return 0; /*若未找到,返回一个空指针*/
}
void stringinput(char *t,int lens,char *notice)/*输入字符串,并进行长度验证*/
{
char n[50];
do{
printf(notice); /*显示提示信息*/
scanf("%s",n); /*输入字符串*/
if(strlen(n)>lens)printf("\n exceed the required length! \n"); /*进行长度是否超过规定值*/
}while(strlen(n)>lens);
strcpy(t,n); /*将输入的字符串拷贝到字符串t中*/
}
int numberinput(char *notice)
{
int t=0;
do{
printf(notice); /*显示提示信息*/
scanf("%d",&t); /*输入图书数量*/
if (t<0) printf("\n price must >0! \n");
}while(t<0);
return t;
}
void Add(Link l)/*增加图书记录*/
{
Node *p,*r,*s;
char ch,flag=0,num[10];
r=l;
s=l->next;
system("cls");
Disp(l); /*先输出已有的图书信息*/
while(r->next!=NULL)
r=r->next; /*将指针移至于链表最末尾,准备添加记录*/
while(1) /*可输入多条记录,输入0时退出添加操作*/
{
while(1)
{
stringinput(num,10,"input number(press '0'return menu):"); /*输入书号*/
flag=0;
if(strcmp(num,"0")==0) /*输入0退出操作,返回菜单界面*/
{return;}
s=l->next;
while(s) /*查询输入的书号是否已经存在*/
{
if(strcmp(s->data.num,num)==0)
{
flag=1;
break;
}
s=s->next;
}
if(flag==1) /*提示用户是否重新输入*/
{ getchar();
printf("=====>The number %s is existing,try again?(y/n):",num);
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
continue;
else
return;
}
else
{break;}
}
p=(Node *)malloc(sizeof(Node)); /*申请内存空间*/
if(!p)
{
printf("\n allocate memory failure "); /*如没有申请到,输出提示信息*/
return ; /*返回菜单界面*/
}
strcpy(p->data.num,num); /*将字符串拷贝到p->data.num中*/
stringinput(p->data.name,15,"Name:");/*输入图书名称到p->data.name中*/
p->data.price=numberinput("price:");/*输入定价到p->data.price中*/
stringinput(p->data.author,15,"author:");/*输入作者名到p->data.author中*/
stringinput(p->data.pub,20,"publishing company:");/*输入出版社名称到p->data.pub中*/
p->data.number=numberinput("number:");/*输入图书数量到p->data.number中*/
p->next=NULL;
r->next=p; /*将新结点插入链表中*/
r=p;
}
return ;
}
void Addmember(Mlink m)
{
FILE *fp;
Mnode *p,*r,*s,*q;
char ch,qu,flag=0,num[10];
r=m;
s=m->next;
system("cls");
Mdisp(m);/*将原有记录输出*/
while(r->next!=NULL)
r=r->next; /*将指针移至于链表最末尾,准备添加记录*/
while(1) /*可输入多条记录,输入0时退出添加操作*/
{
while(1)
{
stringinput(num,10,"input the number of the member(press '0'return menu):"); /*输入会员号*/
flag=0;
if(strcmp(num,"0")==0) /*输入为0,则退出添加操作,返回菜单界面*/
{return;}
s=m->next;
while(s) /*查询该会员号是否已经存在*/
{
if(strcmp(s->inf.mnum,num)==0)
{
flag=1;
break;
}
s=s->next;
}
if(flag==1) /*提示用户是否重新输入*/
{ getchar();
printf("=====>The number %s is existing,try again?(y/n):",num);
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
continue;
else
return;
}
else
{break;}
}
p=(Mnode *)malloc(sizeof(Mnode)); /*申请内存空间*/
if(!p)
{
printf("\n allocate memory failure "); /*如没有申请到,输出提示信息*/
return ; /*返回主界面*/
}
strcpy(p->inf.mnum,num); /*将会员号拷贝到p->data.num中*/
stringinput(p->inf.mname,15,"Name:");
stringinput(p->inf.tel,15,"Telephone:");
p->next=NULL;
r->next=p; /*将新结点插入链表中*/
r=p;
}
return ;
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
C语言开发范例宝典(300个源程序让你坐拥C的世界,还能省一大笔银子----值啊!) (309个子文件)
300.C 17KB
288.c 13KB
298.C 12KB
297.C 9KB
286.c 9KB
290.c 8KB
295.C 7KB
296.C 6KB
244.C 5KB
294.C 5KB
147.C 5KB
299.C 4KB
012.C 4KB
293.C 3KB
270.C 3KB
247.C 3KB
109.C 3KB
246.C 3KB
117.C 3KB
101.C 3KB
107.c 3KB
292.C 3KB
104.c 3KB
195.C 3KB
100.c 2KB
137.C 2KB
108.C 2KB
199.C 2KB
275.C 2KB
282.C 2KB
291.c 2KB
102.C 2KB
183.C 2KB
114.C 2KB
200.C 2KB
116.C 2KB
198.C 2KB
252.C 2KB
254.C 2KB
112.C 2KB
103.C 2KB
088.c 2KB
184.C 2KB
248.C 2KB
165.C 2KB
259.C 2KB
099.c 2KB
187.C 2KB
133.C 2KB
175.C 2KB
289.c 2KB
110.C 2KB
196.C 2KB
189.C 2KB
272.C 2KB
136.C 1KB
111.C 1KB
135.C 1KB
241.C 1KB
131.C 1KB
024.C 1KB
094.c 1KB
251.C 1KB
090.c 1KB
118.C 1KB
115.C 1KB
188.C 1KB
097.c 1KB
105.C 1KB
260.C 1KB
095.c 1KB
045.C 1KB
041.C 1KB
127.C 1KB
182.C 1KB
004.C 1KB
096.c 1KB
029.C 1KB
113.C 1KB
011.C 1KB
158.C 1KB
031.C 1KB
285.c 1KB
249.C 1KB
242.C 1KB
123.C 1KB
030.C 1KB
003.C 1KB
172.C 1KB
197.C 1KB
253.C 1KB
091.c 1KB
129.C 1KB
040.C 1KB
156.C 1KB
106.C 1KB
128.C 1KB
250.C 1KB
134.C 1KB
142.C 1KB
共 309 条
- 1
- 2
- 3
- 4
资源评论
- 「已注销」2012-06-27只有代码,没有书,失望!
tweij
- 粉丝: 136
- 资源: 16
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功