📄 11-p234-指导.cpp
字号:
#include<stdio.h>
void sorttran(struct tran_st tran[10]); //自定义函数,无返回值,完成对图书编码的排序
struct book_st //定义该结构存储图书的相关信息
{
int book_cd; //存储图书的标号
char book_nm[30]; //存储图书的名称
char author[30]; //存储图书的作者
int copies; //存储图书的的数目
};
struct date_st //因为c中没有专门的日期类型的数据声明该结构存储借阅时间
{
int month; //表示时间中的月
int day; //表示时间中的日
int year; //表示时间中的年
};
struct tran_st //该结构记录了图书的借阅返还情况
{
int book_code; //存储图书的标号
char tran_type; //标示是借书还是还书
struct date_st tran_dt; //标示借还书的日期
};
void main()
{
int choice=1,i; //因为下面循环中while(choice!=4)就开始菜单选择,
//至少进行一次,所以先给choice一个非4的值
char addflag;
struct book_st books[5]; //定义了拥有struct book_st类型的数字变量books[5]
struct tran_st trans[10];
while(choice!=4) //printf语句生成一个简单菜单,看readme 中的运行结果可知
{
printf("\nSelect from Menu\n1.Add book names\n2.Record Issue/Return\n3.Sort Transactions\n4.Exit\n\nEnter choice:");
scanf("%d",&choice);
if(choice==1) //选取1开始登记图书情况
{
addflag='y';
for(i=0;i<5&&addflag=='y';i++) //注意for 循环的两个条件
{
books[i].book_cd=i+1;
printf("\n\nBook code: %d\n\nBook name:",i+1); //注意对结构成员的访问方法
scanf("%s",books[i].book_nm);
printf("\nAuthor:");
scanf("%s",books[i].author);
printf("\nNumber of copies:");
scanf("%d",&books[i].copies);
printf("\n\nContinue?(y/n):"); //该操作是否还循环,对应for 循环条件中的第二个
scanf(" %c",&addflag);
}
}
else if(choice==2) //选取2图书借阅或返还操作,思路同上,只是变量不同了
{
addflag='y';
for(i=0;i<10 && addflag=='y';i++)
{
printf("\n\nBook code:");
scanf("%d",&trans[i].book_code);
printf("\nIssue or Return?(I/R):");
scanf(" %c",&trans[i].tran_type);
printf("\nDate:");
scanf("%d%d%d",&trans[i].tran_dt.month,&trans[i].tran_dt.day,&trans[i].tran_dt.year);
printf("\n\nContinue?(y/n):");
scanf(" %c",&addflag);
}
}
else if(choice==3) //选取3开始对图书排序,因为较复杂所以此处调用了函数使得程序思路清晰
{
sorttran(trans); //将具有struct tran_st类型的数组trans[10]传递给函数
}
}
}
void sorttran(struct tran_st tran[10])
{
int i,j,tempcode;
struct tran_st temptran; //函数内的局部变量,因为结构是在头文件中声明的
for(i=0;i<10;i++) //所以此处也可使用 struct tran_st来定义变量的类型
for(j=i+1;j<10;j++) //按图书的编号从小到排列
{
if(tran[i].book_code>tran[j].book_code)
{
temptran=tran[i];
tran[i]=tran[j];
tran[j]=temptran;
}
}
for(i=0,j=0;i<10;j=0)
{
tempcode=tran[i].book_code;
while(tran[i].book_code==tempcode&&i<10)
{
j++;
i++;
}
printf("\nBook code%d had%d transactios",tempcode,j);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -