要求:
1)图书信息包括:书号(char num[10])、书名(char name[10])、作者(char author[10])、出版社(char press[10])、定价(float money)
//(2)除了总的模块要求外,还需计算a.查找同一作者的书的数量;b.定价低于20的书的信息
//第一个模块——主函数main()的功能是:根据选单的选项调用各函数,并完成相应的功能。
/*第二个模块——Menu()的功能是:显示选单。
第三个模块——CreateList()的功能是:创建表。
第四个模块——InsertList(L,i)的功能是:在表的任意位置插入新的数据记录,并返回选单。
第五个模块——LocateList()的功能是:按要求查询相关的信息,如果找到了,则显示该信息,如果未找到,则提示文件中没有该信息,并返回选单。
第六个模块——AlterList()[的功能是:修改某条记录的信息(最好可以选择修改哪个数据项),如果未找到要修改的记录,则提示系统中无此记录,并返回选单。
第七个模块——DeleteList()的功能是:删除某条记录,如果未找到要删除的记录,则提示通讯录中没有,并返回选单。
第八个模块——PrintList()的功能是:显示所有记录。
第九个模块——Quit()的功能是:退出选单。*/
代码实现:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct{
char num[10];
char name[10];
char author[10];
char press[10];
float money;
}BOOK; //一本书的结构体,
typedef struct Node{
BOOK data;
struct Node* next;
}LNode,*LinkList;
void Quit(){
printf("退出成功!");
}
LNode* CreateList(){
int a,i;
LNode *H,*L;LNode *P;
L=(LNode*)malloc(sizeof(LNode));
H=L;
printf("请输入要录入书籍的个数:");
scanf("%d",&a) ;
printf("请输入要录入书籍的信息:\n");
for(i=0;i<a;i++){
P=(LNode*)malloc(sizeof(LNode));
H->next=P;
H=P;
printf("书号:");
scanf("%s",&P->data.num) ;
printf("书名:");
scanf("%s",&P->data.name) ;
printf("作者:");
scanf("%s",&P->data.author) ;
printf("出版社:");
scanf("%s",&P->data.press) ;
printf("单价:");
scanf("%f",&P->data.money) ;
printf("\n");
printf("第%d本图书录入完毕\n",i+1);
printf("\n");
}
P->next=NULL;
return L;
}
void PrintList(LNode *L){
LNode *P;
P=L->next;
printf("书的信息为:\n") ;
while(P!=NULL){
printf("书号:%s",P->data.num);
printf("书名:%s",P->data.name);
printf("作者:%s",P->data.author);
printf("出版社:%s",P->data.press);
printf("单价:%.2f",P->data.money);
P=P->next;
printf("\n");
}
printf("\n");
}
LNode* InsertList(LNode* L){ //在表的任意位置插入新的数据记录,并返回选单。
LNode *p,*H,*M;//p是要插入的结点,
int a=1,i;
printf("请输入要插入图书的位置:");
scanf("%d",&i) ;
p=(LinkList)malloc(sizeof(LNode));
H=(LinkList)malloc(sizeof(LNode));
M=(LinkList)malloc(sizeof(LNode));
printf("请输入要插入图书的数据:\n");
printf("书号:");
scanf("%s",p->data.num) ;
printf("书名:");
scanf("%s",p->data.name) ;
printf("作者:");
scanf("%s",p->data.author) ;
printf("出版社:");
scanf("%s",p->data.press) ;
printf("单价:");
scanf("%f",&p->data.money) ;
H=L; M=H->next;
while(a<=i){
if(a==i){
p->next=H->next;
H->next=p; }
a++;
M=M->next;
H=H->next;
printf("\n");
}
return L;
}
void LocateList(LNode *L){
//按要求查询相关的信息,如果找到了,则显示该信息,如果未找到,则提示文件中没有该信息,并返回选单。
//查找同一作者的书的数量;b.定价低于20的书的信息 printf("%d",L);的结果为1 ,在没有的情况下,如果创建了就是一个很大的值(地址)
int a,z,n=1,s=0;int c=0;//c用来计数
char b[10];
float m=20;
LNode *P,*M;
P=L->next;
printf("1.查询第几本书的信息\n");
printf("2.根据作者查书的数量");
printf("\n3.定价低于20的书的信息\n");
printf("\n");
printf("请输入要执行的操作:");
scanf("%d",&a);
switch(a) {
case 1:
do{
printf("请输入要查第几本书:");
scanf("%d",&z);
M=L->next;
while(z>n){
M=M->next;
n++;
}
printf("书号:%s\t",M->data.num);
printf("书名:%s\t",M->data.name);
printf("作者:%s\t",M->data.author);
printf("出版社:%s\t",M->data.press);
printf("单价:%.2f\n",M->data.money);
printf("\n");
printf("是否继续查询(1是0否):\n");
scanf("%d",&a);
}while(a);
break;
case 2:
printf("请输入所查书的作者:");
scanf("%s",&b);
do{
s=strcmp(b,P->data.author);
if(s==0){
++c ;
}
P=P->next;
}while(P!=NULL);
printf("%s的书共有%d本\n",b,c);
break;
case 3:
while(P!=NULL){
if(P->data.money<m){
s++;
printf("书号:%s\t",P->data.num);
printf("书名:%s\t",P->data.name);
printf("作者:%s\t",P->data.author);
printf("出版社:%s\t",P->data.press);
printf("单价:%.2f\n",P->data.money); }
P=P->next;
}
printf("定价低于20的书有:%d本\n",s);
printf("\n") ;
}
}
void DeleteList(LNode *L){
LNode *P,*M;int a,b=1;
printf("请输入要删除第几本书:");
scanf("%d",&a);
P=L->next;
M=L;
while(a>b){
P=P->next;
M=M->next;
b++;
}
M->next=P->next;
free(P);
printf("删除完毕\n");
}
LNode* AlterList(LNode *L){
//修改某条记录的信息(最好可以选择修改哪个数据项),如果未找到要修改的记录,则提示系统中无此记录,并返回选单。
LNode *P,*M;int a,b=1; int g;
printf("请输入要修改第几本书:");
scanf("%d",&a);
P=L->next;
M=L;
while(a>b){
P=P->next;
M=M->next;
b++;
}
printf("该书的各项数据如下:\n");
printf("书号:%s\t",P->data.num);
printf("书名:%s\t",P->data.name);
printf("作者:%s\t",P->data.author);
printf("出版社:%s\t",P->data.press);
printf("单价:%.2f\n",P->data.money);
printf("-----------------------------------------\n");
printf("0.退出\t");
printf("1.书号\t");
printf("2.书名\t");
printf("3.作者\t");
printf("4.出版社\t");
printf("5.单价\t");
printf("\n");
do{
printf("请输入要执行操作的序号:");
scanf("%d",&g);
switch(g){
case 0:break;
case 1:
printf("书号:");
scanf("%s",P->data.num) ;
printf("修改完毕!");
break;
case 2:
printf("书名:");
scanf("%s",P->data.name) ;
printf("修改完毕!");
break;
case 3:
printf("作者:");
scanf("%s",P->data.author) ;
printf("修改完毕!");
break;
case 4:
printf("出版社:");
scanf("%s",P->data.press) ;
printf("修改完毕!");
break;
case 5:
printf("单价:");
scanf("%.2f",&P->data.money) ;
printf("修改完毕!");
break;
}
}while(g);
}
void Menu(){
printf("1.录入图书\n");
printf("2.插入图书\n");
printf("3.查询图书\n");
printf("4.修改图书\n");
printf("5.删除图书\n");
printf("6.显示图书\n");
printf("0.退出系统!") ;printf("\n");
}
int main(){
LNode *L;
int a;
do{
Menu();
printf("\n请输入要执行的操作:");
scanf("%d",&a);
switch(a){
case 0:
Quit();
break;
case 1:
L=CreateList();
break;
case 2:
L=InsertList(L);
break;
case 3:
LocateList(L);
break;
case 4:
AlterList(L);
break;
case 5:
DeleteList(L);
break;
case 6:
PrintList(L);
}}while(a);
return 0;
}