今天给各位分享c语言按图书编号排序的知识,其中也会对c语言按图书编号排序怎么排进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、用c语言实现对给定一组学生的借书证信息进行排序和查找2、C语言对书价格排序的一些问题3、C语言的一个问题!高手求做~详解!给满分!4、C语言图书管理系统5、c语言编程题;从键盘输入N本图书的书名(书名长度不超过10个汉字)和单价,按单价从高到低顺序排序后输出图书
用c语言实现对给定一组学生的借书证信息进行排序和查找
#includebits/stdc++.h
using namespace std;
struct bintree
{
char data;
bool flag;//判断这个节点的右子树的值是不是输出了
bintree *lchild,*rchild;
};
//7.13
//采用递归和非递归两种方法求二叉树的节点的个数
//都用前序遍历吧;
int ans;
bintree* creat()
{
char ch;
bintree* t;
if((ch = getchar()) == ‘#’)
{
t = NULL;
}
else
{
t = new bintree;
t – data = ch;
t – lchild = creat();
t – rchild = creat();
}
return t;
}
void pre_orders(bintree* root)//递归遍历前序
{
if(root == NULL)
return ;
else
{
ans ++;
cout root – data ;
pre_orders(root – lchild);
pre_orders(root – rchild);
}
}
void pre_orderss(bintree* root)//非递归遍历前序
{
stackbintree*s;
while( root || s.size() )
{
if(root)
{
ans ++;
cout root – data;
s.push(root);
root = root – lchild;
}
else
{
root = s.top();
s.pop();
root = root – rchild;
}
}
}
void in_orders(bintree* root)
{
if(root == NULL)
return ;
in_orders(root – lchild);
cout root – data;
in_orders(root – rchild);
}
void in_orderss(bintree* root)
{
stackbintree*s;
while(root || s.size() )
{
if(root)
{
s.push(root);
root = root – lchild;
}
else
{
root = s.top();
s.pop();
cout root – data ;
root = root – rchild;
}
}
}
void post_orders(bintree* root)
{
if(root == NULL)
return ;
post_orders(root – lchild);
post_orders(root – rchild);
cout root – data;
}
void post_orderss(bintree* root)
{
stackbintree*s;
while(root || s.size())
{
if(root)
{
root – flag = false;
s.push(root);
root = root – lchild;
}
else
{
bintree* temp = s.top();
if(temp – flag)
{
root = temp;
s.pop();
cout root – data;
root = NULL;
}
else
{
root = temp;
root – flag = true;
root = root – rchild;
}
}
}
}
void Travel(bintree* root)
{
queuebintree*q;
q.push(root);
while( ! q.empty() )
{
bintree* temp = q.front();
q.pop();
cout temp – data ;
if(temp – lchild)
q.push(temp – lchild);
if(temp – rchild)
q.push(temp – rchild);
}
}
int main()
{
bintree* root;
cout “要求构建一棵深度为3的满二叉树 完成习题7.13求出数的节点个数” endl;
cout “用前序创建二叉树” endl;
root = creat();
cout “用递归进行前序遍历并计算节点的个数:” endl;
ans = 0;
pre_orders(root);
cout endl;
cout “节点个数为” ans endl;
ans = 0;
cout “用非递归进行前序遍历并计算节点个数:” endl;
pre_orderss(root);
cout endl;
cout “非递归的节点个数为:” ans endl;
cout “用递归进行中序遍历和后序遍历”endl;
in_orders(root);
cout endl;
post_orders(root);
cout endl;
cout “非递归实现中序和后序遍历” endl;
in_orderss(root);
cout endl;
post_orderss(root);
cout endl;
cout “用层次遍历玩玩:应该就是ABCDEFG哈” endl;
Travel(root);
cout endl;
return 0;
}
//运行结果
//要求构建一棵深度为3的满二叉树 完成习题7.13求出数的节点个数
//用前序创建二叉树
//ABD##E##CF##G##
//用递归进行前序遍历并计算节点的个数:
//ABDECFG
//节点个数为7
//用非递归进行前序遍历并计算节点个数:
//ABDECFG
//非递归的节点个数为:7
//用递归进行中序遍历和后序遍历
//DBEAFCG
//DEBFGCA
//非递归实现中序和后序遍历
//DBEAFCG
//DEBFGCA
//用层次遍历玩玩:应该就是ABCDEFG哈
//ABCDEFG
//
//Process returned 0 (0x0) execution time : 35.166 s
//Press any key to continue.
图的应用(2学时)
1、实验目的
通过本实验掌握图的存储结构与基本运算以及图的深度优先遍历和 图的广度优先遍历算法在实际问题中的应用。
2、实验内容
按照邻接表对图进行创建,并运用图的深度优先遍历和 图的广度优先遍历算法对所创建的无向图进行遍历。
3、实验要求
(1)按照邻接表创建图的结构体;
(2)创建一个无向图;
(3)对创建好的图进行深度优先或广度优先遍历。
收获:对邻接表的创建,遍历
[cpp] view plain copy
#includebits/stdc++.h
using namespace std;
const int maxn = 1000 + 10;
bool vis[maxn];
struct edgeNode
{
int adjvex;
edgeNode *next;
};
struct vertexNode
{
int vertex;
edgeNode *firstedge;
};
struct linkgraph
{
vertexNode adjlist[maxn];
int n,e;//顶点数和边数
};
linkgraph* Creat(linkgraph *g)//创建无向图的邻接表
{
scanf(“%d%d”,g – n,g – e);
for(int i = 0 ; i g – n ; ++ i)
{
g – adjlist[i].vertex = i;
g – adjlist[i].firstedge = NULL;
}
for(int i = 1; i = g – e; ++ i)
{
int a,b;
scanf(“%d%d”,a,b);
edgeNode *t = new edgeNode;//前插
t – adjvex = b;
t – next = g – adjlist[a].firstedge;
(g – adjlist[a] ).firstedge = t;
edgeNode *temp = new edgeNode;
temp – adjvex = a;
temp – next = g – adjlist[b].firstedge;
g – adjlist[b].firstedge = temp;
}
return g;
}
void dfs(linkgraph *g ,int i)//i代表头节点
{
printf(“%d “,g – adjlist[i].vertex);
vis[i] = true;
edgeNode* p = g – adjlist[i].firstedge;
while(p)
{
if(!vis[p – adjvex])
{
dfs(g,p – adjvex);
}
p = p – next;
}
}
void dfstraverse(linkgraph *g)//dfs调用
{
memset(vis,false,sizeof(vis));
printf(“深度优先:\n”);
for(int i = 0 ; i g – n ; ++ i)
{
if(!vis[i])
dfs(g,i);
}
printf(“\n”);
}
void bfs(linkgraph *g,int i)
{
printf(“%d “,g – adjlist[i].vertex);
queueintq;
q.push(i);
vis[i] = true;
while(!q.empty())
{
int t = q.front();
q.pop();
edgeNode *p = g – adjlist[t].firstedge;
while(p)
{
if(!vis[p – adjvex])
{
q.push(p – adjvex);
printf(“%d “,p – adjvex);
vis[p – adjvex] = true;
}
p = p – next;
}
}
}
void bfstraverse(linkgraph *g)//输出分块
{
int cnt = 1;//记录联通块的个数
memset(vis,false,sizeof(vis));
for(int i = 0 ; i g – n ; ++ i)
{
if(!vis[i])
{
bfs(g,i);
printf(“\n”);
}
}
printf(“联通块的个数是:%d\n”,cnt);
}
int main()
{
linkgraph *g;
g = new linkgraph;
g = Creat(g);
dfstraverse(g);//深度优先
bfstraverse(g);
return 0;
}
//运行结果:
//4 3
//0 1
//1 2
//2 3
//深度优先:
//0 1 2 3
//0 1 2 3
//联通块的个数是:1
实验四 排序方法实践(2学时)
1、实验目的
通过本实验掌握排序的基本算法和过程以及查找的基本方法和过程。
2、实验内容
设计一个排序和查找系统。能够实现对给定的一组学生的借书证信息(如:卡号、姓名、系别、班号等)进行排序和查找。
1)按照卡号顺序进行排序;
2)能够实现查找某个系的所有的借书卡号并输出。
3、实验要求
(1)建立关于借书证信息结点的结构体;
收获:用C语言写了一下快排;
[cpp] view plain copy
#includebits/stdc++.h
using namespace std;
const int maxn = 10000 + 10;
struct Node
{
int department;//系名
int number;//借书证卡号
char name[maxn];//姓名
char student_id[maxn];//学号
};
Node a[maxn];
void quicksort(Node a[],int left,int right)//按照系名进行排名
{
int i , j;
if(left = right)
return ;
i = left , j = right;
a[0] = a[i];
while(i != j)
{
while(a[j].department a[0].department i j)
— j;
if(i j)
{
a[i] = a[j];
i ++;
}
while(a[i].department a[0].department i j)
++ i;
if(i j)
{
a[j] = a[i];
j –;
}
}
a[i] = a[0];
quicksort(a,left,i – 1);
quicksort(a,i + 1,right);
}
void bin_search(Node a[],int n,int x)
{
int left = 1 ,right = n;
int ans = 0;
while(left = right)
{
int mid = (left + right )/2;
if(a[mid].department == x)
{
ans = mid;
break;
}
else if(a[mid].department x)
{
left = mid + 1;
}
else
{
right = mid – 1;
}
}
if(!ans)
{
printf(“没找到\n”);
}
else
{
int start = ans,ends = ans;
while(a
今天给各位分享c语言按图书编号排序的知识,其中也会对c语言按图书编号排序怎么排进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
.department== x)
start –;
while(a[ends].department == x)
ends ++;
printf(“%d系的信息为:\n”,x);
for(int i = start + 1; i ends ; i ++)
{
printf(“%d %d %s %s\n”,a[i].department,a[i].number,a[i].name,a[i].student_id);
}
}
}
int main()
{
int n;
printf(“输入图书管理系统存有学生信息的个数:\n”);
scanf(“%d”,n);
printf(“输入这%d个同学的各项信息\n”,n);
for(int i = 1; i = n ; i ++)
{
scanf(“%d%d%s%s”,(a[i].department),a[i].number,a[i].name,a[i].student_id);
}//输入一个大小为n的图书信息
quicksort(a,1,n);
printf(“输出的是按系名排序后的信息是:\n”);
for(int i = 1; i = n ; i ++)
{
printf(“%d %d %s %s\n”,a[i].department,a[i].number,a[i].name,a[i].student_id);
}//
//按照系名进行二分索引并输出这个
int x;
printf(“输入要输出的系名的信息:\n”);
scanf(“%d”,x);
//输入需要查找的系名
bin_search(a,n,x);
return 0;
}
//运行结果为:
//输入图书管理系统存有学生信息的个数:
//5
//输入这5个同学的各项信息
//1 12 123 1234
//1 21 321 4321
//4 12 345 5664
//3 45 676 8900
//3 56 789 7897
//输出的是按系名排序后的信息是:
//1 21 321 4321
//1 12 123 1234
//3 45 676 8900
//3 56 789 7897
//4 12 345 5664
//输入要输出的系名的信息:
//3
//3系的信息为:
//3 45 676 8900
//3 56 789 7897
//
//Process returned 0 (0x0) execution time : 5.468 s
//Press any key to continue.
C语言对书价格排序的一些问题
美元符号你在printf函数中自己打,其他数据自己输入就可以了
将printf函数改为
printf(“排序后顺序为(从小到大):\n”);
for(i=0;i10;i++)
{
printf(“书名:%s\n”,str[i].name);
printf(“价格:%$%f\n”,str[i].price);
}
C语言的一个问题!高手求做~详解!给满分!
c语言都可以实现,可以通过链表的来存放你的图书数据.如果你没有学过数据结构,那就不是很容易写了。
C语言图书管理系统
#include stdio.h
#include string.h
#include stdlib.h
//
#define MAXSIZE 100 //最大值定义为100
#define LIST_INIT_SIZE 100//图书证使用者最大值定义为100
//借书人的结构体
typedef struct Boro//借书行为
{
char BNum[20];//借书的书号
char RetDate[8];//归还日期
struct Boro *next;
}Bor;
typedef struct LinkBook
{
Bor *next;//该图书证的借书行为
char CNum[20];//证号
int Total;//借书的数量
}lend[LIST_INIT_SIZE];//借书人数组
//图书的结构体信息
typedef struct LNode
{
char CardNum[20];//图书证号
struct LNode *next;
}LinkList; //借书人
typedef struct book
{//每种图书需要登记的内容包括书号ISBN、书名、作者、出版社、总库存量和现库存量。
char num[20];//书号
char name[20];//书名
char auth[20];//作者
char pub[20];//出版社
int TotNum;//总库存
int NowNum;//现库存
LinkList *next;//借了该书的人
}ook[MAXSIZE];
//
int Retotal;//读者数量
int total; //定义外部变量.书的种类数
//
//结构体初始化
void InitBo(ook boo) //初始化图书信息
{
for(int i=0;iMAXSIZE;i++)
{
boo[i].NowNum=0;
boo[i].TotNum=0;
boo[i].next=NULL;
}
}
void InitRe(lend Lin) //初始化借阅者信息
{
for(int i=0;iLIST_INIT_SIZE;i++)
Lin[i].next=NULL;
}
//
int mid=0;//外部函数mid,用来返回查找到的位置
bool BinarySearch(ook boo,char SearchNum[]) //二分法查找比较书号
{ //用bool函数,但由于函数不能有两个返回值,所以设置一个外部变量mid,用来返回查找到的位置
int low=0,high=total-1;
int found=0;
while(low=high)
{
mid=(low+high)/2; //中间点
if(strcmp(boo[mid].num,SearchNum)==0) //书号相同
{
found=1;
return true;
}//查找成功
if(strcmp(boo[mid].num,SearchNum)!=0)//书号不同
high=mid-1;
else low=mid+1;
}
if(found==0)
return false; //查找失败
}
void Buy(ook boo, char BuyNum[])
{//1、 采编入库:新购入一种书,如果该书在图书账目中已经存在,则将其库存量增加(包
//括总库存量和现库存量),如果该书不存在,则在图书账目中增加一种书,总库存量和现库存量均为1。
if(BinarySearch(boo,BuyNum)) //如果书库中有此书
{
boo[mid].TotNum++; //总库存加1
boo[mid].NowNum++; //现库存加1
printf(“入库成功.\n”);
printf(“已更改书库中该书的信息。编号 %s 的书 %s 作者是 %s ,出版社是 %s ,目前的总库存是 %d ,现库存是 %d 。\n”,boo[mid].num,boo[mid].name,boo[mid].auth,boo[mid].pub,boo[mid].TotNum,boo[mid].NowNum);
}
if(!BinarySearch(boo,BuyNum))
{
int i;
for(i=total;imidtotal;i–) //插在适合位置 保持有序
boo[i]=boo[i-1]; //空出插入位置
printf(“该书在书库中不存在。设立新书目,请补全书的详细信息。\n”);
strcpy(boo[i].num,BuyNum);
printf(“该书购入的数量是:”);
scanf(” %d”,boo[i].NowNum);
boo[i].TotNum=boo[i].NowNum;
printf(“该书的名字是:”);
scanf(” %s”,boo[i].name);
printf(“该书的作者是:”);
scanf(” %s”,boo[i].auth);
printf(“该书的出版社是:”);
scanf(” %s”,boo[i].pub);//补全信息
boo[i].next=NULL;
total++;//总量+1
printf(“已增加该书的信息。编号 %s 的书 %s 作者是 %s ,出版社是 %s ,目前的总库存是 %d ,现库存是 %d 。\n”,boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i].TotNum,boo[i].NowNum);
printf(“入库成功.\n”);
}
}
void Delete(ook boo,char DeleteNum[])
{//2、 清空库存:某一种书已无保留价值,将它从图书账目中注销。
if(BinarySearch(boo,DeleteNum)==false||total==0) //如果无此书
printf(“书库中没有该书.\n”);
if(BinarySearch(boo,DeleteNum))//若有
{
if(!boo[mid].next)
{
int j;
for( j=mid;jtotal;j++)
boo[j]=boo[j+1];
strcpy(boo[j].num,boo[j+1].num);
strcpy(boo[j].name,boo[j+1].name);
strcpy(boo[j].auth,boo[j+1].auth);
strcpy(boo[j].pub,boo[j+1].pub);
boo[j].TotNum=boo[j+1].TotNum;
boo[j].NowNum=boo[j+1].NowNum;
printf(“已成功删除该书.\n”);
}
else printf(“该书有借阅者,无法删除。\n”);
}
}
void Borrow(ook boo,lend Lin,char BorrowNum[],char CaNum[])
{//3、 借阅:如果一种书的现库存量大于零,则借出一本书,将现库存量减1,
//并登记借阅者的图书证号和归还期限。
Bor *p,*q;
LinkList *m,*n;
if(!BinarySearch(boo,BorrowNum)||total==0) //如果没有找到此书
printf(“书库里没这书。\n”);//如果有这书
if(BinarySearch(boo,BorrowNum)) //书库里有
{
if(boo[mid].NowNum0) //看现库存是否大于0
{
boo[mid].NowNum–;//借出一本,少1
if(boo[mid].next==NULL) //若该书信息下显示该种书还没被人借过
{
m=(LinkList *)malloc(sizeof(LNode));//分配
boo[mid].next=m;//该图书信息中的链表的第一个结点
strcpy(m-CardNum,CaNum);
m-next=NULL;//后一个结点为空
}
else //如果已经有人在借这书了
{
m=boo[mid].next;
while(m-next) //遍历到最后一个结点
m=m-next;
n=(LinkList *)malloc(sizeof(LNode));//分配空间,增加1个结点
m-next=n;
strcpy(n-CardNum,CaNum);//记录证号
n-next=NULL;
}
int i=0;
for(i=0;iRetotal;i++)//
{
if(!strcmp(Lin[i].CNum,CaNum))//如果已经有该图书证的信息
{
p=Lin[i].next;
while(p-next)p=p-next;//遍历到最后一个结点
q=(Bor *)malloc(sizeof(Boro));//分配空间
p-next=q;
strcpy(q-BNum,BorrowNum); //记录书号
printf(“输入归还日期:”);
scanf(“%s”,q-RetDate);
q-next=NULL;
printf(“借阅成功.\n”);
break; //找到证了就跳出循环
}
}
if(i==Retotal)//如果没有这张证的信息
{
strcpy(Lin[i].CNum,CaNum); //记录证号
p=(Bor *)malloc(sizeof(Boro)); //分配空间
Lin[i].next=p;
strcpy(p-BNum,BorrowNum);
printf(“输入归还日期:”);
scanf(” %s”,p-RetDate);
p-next=NULL;
Retotal++; //借阅证号信息总数加1
printf(“借阅成功.\n”);
}
}
else printf(“借阅失败.该书现在库存为0.\n”);
}
}
void Return(ook boo,lend Lin,char ReturnNum[],char BorrowerNum[])
{//4、 归还:注销对借阅者的登记,改变该书的现存量。
Bor *p,*q;
LinkList *m,*n;
int flag=0;//设置一个参数
if(!BinarySearch(boo,ReturnNum)||!total) //没书
printf(“书库中无此书.\n”);
if(BinarySearch(boo,ReturnNum)) //有书
{
m=boo[mid].next;
if(!strcmp(m-CardNum,BorrowerNum)) //如果是第一个借的人还的
{
boo[mid].NowNum++; //现库存加1
boo[mid].next=m-next; //删除结点
free(m); //释放该结点的空间空间
}
else
{
while(m-next) //查找归还者的借阅者结点
{
if(!strcmp(m-next-CardNum,BorrowerNum)) //如果找到
{
n=m-next; //n为归还者的借阅结点
m-next=n-next; //m指向归还者的借阅结点的下一结点
free(n); //释放空间
boo[mid].NowNum++; //现库存加1
break;
}
m=m-next;
}
}
}
//在借阅者表里查找借阅者信息
for(int i=0;iRetotal;i++)
{
if(!strcmp(Lin[i].CNum,BorrowerNum)) //如果找到借阅者
{
p=Lin[i].next;
if(!strcmp(p-BNum,ReturnNum)) //如果是归还的是借的第一本书
{
Lin[i].next=p-next; //指向下一借书结点
free(p); //释放结点空间
printf(“成功归还该书.\n”);
flag=1;
break;
}
else //找不到
{
while(p-next) //找到归还书的借书结点
{
if(!strcmp(p-next-BNum,ReturnNum)) //如果找到
{
q=p-next; //q为归还书的借书结点
p-next=q-next; //p指向下一借书结点
free(q); //释放空间
printf(“成功归还该书.\n”);
flag=1;
break;
}
p=p-next;
}
}
}
}
for(int k=0;kRetotal;k++)
if(!Lin[k].next)
{
int j;
for(j=k;jRetotal;j++)
Lin[j]=Lin[j+1]; //其后都往前移一位,覆盖掉当前信息
strcpy(Lin[j].CNum,” “); //删除图书证号
Retotal–; //图书证数减1
} //删除当前状态下没借书的图书证的信息,节省空间
if(flag==0) printf(“无该证信息.\n”);
}
//5、 查找:实现按三种查询条件之一查找:按书号查找、
//按书名查找、按作者查找。注:可不实现组合查找,即几个条件组合查找。
void SearchByNum(ook boo,char SeaNum[])
{//BY NUM 根据书号查找
LinkList *p;
p=boo[mid].next;
if(BinarySearch(boo,SeaNum)==false)printf(“对不起,未找到您想查找的书。\n”);//二分查找 没找到
else//找到了的话
{
{
printf(“┏━━━━━━━┳━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━┳━━━━━┓\n”);
printf(“┃ 书号 ┃ 书名 ┃ 作者 ┃ 出版社 ┃ 现库存 ┃ 总库存 ┃\n”);
printf(“┣━━━━━━━╋━━━━━━━╋━━━━━━━━╋━━━━━━━━╋━━━━━╋━━━━━┫\n”);
printf(“┃%14s┃%14s┃%16s┃%16s┃%10d┃%10d┃\n”,boo[mid].num,boo[mid].name,boo[mid].auth,boo[mid].pub,boo[mid].NowNum,boo[mid].TotNum);
printf(“┗━━━━━━━┻━━━━━━━┻━━━━━━━━┻━━━━━━━━┻━━━━━┻━━━━━┛\n”);
if(boo[mid].next!=NULL)
{
printf(“┏━━━━━━━┓\n”);
printf(“┃ 已借该书的 ┃\n”);
printf(“┃ 图书证号 ┃\n”);
while(p)
{
printf(“┣━━━━━━━┫\n”);
printf(“┃%14s┃\n”,p-CardNum);
p=p-next;
}
printf(“┗━━━━━━━┛\n”);
}
}
while(p)
{
printf(” %s “,p-CardNum);//在按书号查找的函数里也显示借了这本书的借阅者的证号
p=p-next;
}
printf(” \n”);
}//显示查找的书籍的信息
}
void SearchByName(ook boo)
{//BY NAME 根据书名查找
char SeaName[20];
printf(“输入想查找的书的书名:\n”);
scanf(” %s”,SeaName);
printf(“找到符合该书名的书的详细信息如下:\n”);
for(int i=0;itotal;i++)
{
if(strcmp(SeaName,boo[i].name)==0)//如果书名一样
{
printf(“书号:%s\n书名:%s\n作者:%s\n出版社:%s\n总库存量:%d\n现库存量:%d\n\n”,boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i].TotNum,boo[i].NowNum);
}//显示符合信息的所有书籍的信息
}
}
void SearchByAuth(ook boo)
{// BY AUTH 根据作者查找
char SeaAuth[20];
printf(“输入想查找的书的作者:\n”);
scanf(” %s”,SeaAuth);
printf(“找到符合该作者的书的详细信息如下:\n”);
for(int i=0;itotal;i++)
{
if(strcmp(SeaAuth,boo[i].auth)==0)//如果作者一样
{
printf(“书号:%s\n书名:%s\n作者:%s\n出版社:%s\n总库存量:%d\n现库存量:%d\n\n”,boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i].TotNum,boo[i].NowNum);
}//显示符合信息的所有书籍的信息
}
}
//6、 查看:可查看某图书证号的借阅者借阅的全部图书,可查看全部超期未还的图书。
void ViewCard(ook boo,lend Lin)
{//查看某图书证号的借阅者借阅的全部图书
char Num[20];
printf(“请输入您所想要查看的图书证号:\n”);
scanf(” %s”,Num);
Bor *p;
int qqq=0;
for(int i=0;iRetotal;i++)
{
if(strcmp(Lin[i].CNum,Num)==0) //找到该证
{
printf(“这个证借的书有:\n”);
p=Lin[i].next;
while(p)
{
printf(” %s “,p-BNum); //书号
p=p-next;
}
printf(“\n”);
qqq=1;
break;
}
}
if(qqq==0)
printf(“该证不存在.\n”);
}
void ViewBook(ook boo,lend Lin)
{//查看全部超期未还的图书
char date[8];
Bor *p;
printf(“请输入日期(请按格式20060605输入):\n”);
scanf(” %s”,date);
printf(“所有超期未还的书有:\n”);
for(int i=0;iRetotal;i++)
{
p=Lin[i].next;
while(p)//当p不空时
{
if(strcmp(p-RetDate,date)0) //超过日期
{
printf(“书号为 %s 证号为 %s 应归还日期为 %s \n”,p-BNum,Lin[i].CNum,p-RetDate);
}//显示所有超期未还的书的信息
p=p-next;
}
}
}
void Menu() //菜单
{
printf(“┏—————————————————M E N U————————————————┓\n”);
printf(“│ │\n”);
printf(“│ 1. 采编入库:新购入一种书,如果该书在图书账目中已经存在, │\n”);
printf(“│ 则将其库存量增加(包括总库存量和现库存量)。 │\n”);
printf(“│ 如果该书不存在,则在图书账目中增加一种书, │\n”);
printf(“│ 总库存量和现库存量均为输入的数字。 │\n”);
printf(“│ 2. 清空库存:某一种书已无保留价值,将它从图书账目中注销。 │\n”);
printf(“│ 3. 借阅:如果一种书的现库存量大于零,则借出一本书,将现库存量减1, │\n”);
printf(“│ 并登记借阅者的图书证号和归还期限。 │\n”);
printf(“│ 4. 归还:注销对借阅者的登记,改变该书的现存量。 │\n”);
printf(“│ 5. 按书号查找。 │\n”);
printf(“│ 6. 按书名查找。 │\n”);
printf(“│ 7. 按作者查找。 │\n”);
printf(“│ 8. 查看某图书证号的借阅者借阅的全部图书。 │\n”);
printf(“│ 9. 查看全部超期未还的图书。 │\n”);
printf(“│ 0. 退出图书管理系统。 │\n”);
printf(“│ │\n”);
printf(“┗—————————————请 选 择 你 需 要 的 操 作————————————┛\n”);
}
int main()
{
ook Bo;
lend Lin;
char BNum[20];
char CNum[20];
printf(“———————–欢 迎 进 入 图 书 管 理 系 统!—————————\n\n”);
int choice=10;
int SearchCho=10,ViewCho=10;
while(choice!=0)
{
Menu();//显示菜单
scanf(” %d”,choice);
switch(choice)
{
case 1://采编入库
printf(“请输入入库的书的书号:”);
scanf(” %s”,BNum);
Buy(Bo,BNum);
case 2://清空库存
printf(“请输入想要清除的书的书号:”);
scanf(” %s”,BNum);
Delete(Bo,BNum);
break;
case 3://借阅
printf(“请输入想要借阅的书的书号:\n”);
scanf(” %s”,BNum);
printf(“请输入图书证号:”);
scanf(” %s”,CNum);
Borrow(Bo,Lin,BNum,CNum);
break;
case 4://归还
printf(“请输入想要归还的书的书号:\n”);
scanf(” %s”,BNum);
printf(“请输入图书证号:”);
scanf(” %s”,CNum);
Return(Bo,Lin,BNum,CNum);
break;
case 5://查找//根据书号查找
printf(“请输入书号:”);//输入书号查找
scanf(” %s”,BNum);
SearchByNum(Bo,BNum);
break;
case 6://根据书名查找
SearchByName(Bo);
break;
case 7://根据作者查找
SearchByAuth(Bo);
break;
case 8://查看某图书证所借的所有书
ViewCard(Bo,Lin);
break;
case 9: //查看全部超期未还的书
ViewBook(Bo,Lin);
break;
case 0://退出系统
exit(0);break;
default:printf(“输入错误!\n”);exit(0);break;
}
}
}
c语言编程题;从键盘输入N本图书的书名(书名长度不超过10个汉字)和单价,按单价从高到低顺序排序后输出图书
#include stdio.h
#include stdlib.h
#define max_N 10000
/*定义书的结构体
*name,书的名字
*price,书的单价
*/
struct Book {
char name[21];
double price;
} book[max_N];
//定义快速排序的比较函数
int cmp(const void *a, const void *b) {
return (*(struct Book *)b).price (*(struct Book *)a).price ? 1 : -1;
}
int main()
{
int N, i;
printf(“\n请输入书的数量:”);
scanf(“%d”, N);
printf(“\n请依次输入%d本书的书名、价格:\n\n”, N);
for (i = 0; i N; ++i) {
scanf(“%s %lf”, book[i].name, book[i].price);
}
//快速排序
qsort(book, N, sizeof(struct Book), cmp);
printf(“\n%d本书按单价从高到低排序如下:\n\n”, N);
for (i = 0; i N; ++i) {
printf(“%s\n”, book[i].name);
}
return 0;
}
关于c语言按图书编号排序和c语言按图书编号排序怎么排的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。