【问题描述】
泉州师范学院图书馆新购置了一批书籍,为了方便师生查阅及图书馆日常管理,需要对这批图书进行分类与汇总,你的任务是:
1、实现图书信息的录入,每种图书的信息包括:书号,书名,作者,出版社,定价和数量。
2、能够实现分别按书名、作者、出版社查询图书。
输入格式:
输入第一行1个数字n(n≤100)表示所有的图书种数。接下来n行,每一行为一种图书的信息,并按照书号(13位的数字编号)、书名(不超过10个汉字)、作者(不超过4个汉字)、出版社(不超过10个汉字)、定价(不超过100的浮点数)和数量(不超过100的整数)的顺序输入,空格隔开。题目保证所有图书的书号都不相同。
再一行一个数字q(n≤20)表示查询的次数,然后q行查询,每一行的查询遵循如下格式:
a b
其中a是一个整数,b是个字符串,a的取值仅有3个,分别是1、2、3,表示分别按书名、作者、出版社查询图书;字符串b对应不同的a其意义不同:当a=1时,b为书名;当a=2时,b为作者;当a=3时,b为出版社。即字符串b就是查询条件,题目保证所有的查询条件都能找到至少一条结果。
输出格式:
对应每一次查询,其查询结果每一种图书输入在一行,并遵循如下格式:
中间用一个制表符隔开,浮点数保留两位小数。如查询结果超过一行(即有多个满足条件的图书),则按书号升序输出,并在每次查询结果的最前面输出仅有一个字符'*'的一行。(具体请参考输出样例)
输入样例:
13
9787302359388 高级语言程序设计 刘备 电子工业出版社 44.50 21
9787302387954 面向对象程序设计 刘备 机械工业出版社 34.50 20
9787302407263 Java程序设计 刘备 清华大学出版社 39.50 23
9787302423898 高级语言程序设计 曹操 中国铁道出版社 39.00 8
9787113196202 面向对象程序设计 曹操 电子工业出版社 39.00 12
9787113195724 Java程序设计 诸葛亮 中国铁道出版社 39.80 10
9787113185800 高级语言程序设计 诸葛亮 清华大学出版社 45.00 9
9787115410641 高级语言程序设计 诸葛亮 人民邮电出版社 45.00 23
9787113185701 面向对象程序设计 诸葛亮 电子工业出版社 40.00 11
9787115427298 面向对象程序设计 赵云 人民邮电出版社 45.00 8
9787115356239 高级语言程序设计 赵云 机械工业出版社 39.80 11
9787115394842 面向对象程序设计 赵云 人民邮电出版社 45.00 13
9787302440680 高级语言程序设计 孙权 清华大学出版社 45.00 22
4
2 诸葛亮
1 面向对象程序设计
3 清华大学出版社
1 Java程序设计
输出样例:
*
9787113185701 面向对象程序设计 诸葛亮 电子工业出版社 40.00*11=440.00
9787113185800 高级语言程序设计 诸葛亮 清华大学出版社 45.00*9=405.00
9787113195724 Java程序设计 诸葛亮 中国铁道出版社 39.80*10=398.00
9787115410641 高级语言程序设计 诸葛亮 人民邮电出版社 45.00*23=1035.00
*
9787113185701 面向对象程序设计 诸葛亮 电子工业出版社 40.00*11=440.00
9787113196202 面向对象程序设计 曹操 电子工业出版社 39.00*12=468.00
9787115394842 面向对象程序设计 赵云 人民邮电出版社 45.00*13=585.00
9787115427298 面向对象程序设计 赵云 人民邮电出版社 45.00*8=360.00
9787302387954 面向对象程序设计 刘备 机械工业出版社 34.50*20=690.00
*
9787113185800 高级语言程序设计 诸葛亮 清华大学出版社 45.00*9=405.00
9787302407263 Java程序设计 刘备 清华大学出版社 39.50*23=908.50
9787302440680 高级语言程序设计 孙权 清华大学出版社 45.00*22=990.00
*
9787113195724 Java程序设计 诸葛亮 中国铁道出版社 39.80*10=398.00
9787302407263 Java程序设计 刘备 清华大学出版社 39.50*23=908.50
【代码如下】
#include<stdio.h>
#include<string.h>
struct lib {
double num; //编号
char book[100];//书名
char name[100];//作者名字
char pubh[100]; //出版社名字
double price; //单价
int cou; //数量
} libs[100],temp;
int main() {
int n;
scanf("%d",&n);
for(int i=0; i<n; i++) {
scanf("%lf",&libs[i].num); //一定要加取值符啊
scanf("%s",libs[i].book);
scanf("%s",libs[i].name);
scanf("%s",libs[i].pubh);
scanf("%lf",&libs[i].price);//一定要加取值符啊
scanf("%d",&libs[i].cou); //一定要加取值符啊
}
//冒泡法排序
for(int i=0; i<n-1; i++) {
for(int j=0; j<n-1-i; j++) {
if(libs[j].num > libs[j+1].num) {
temp = libs[j];
libs[j] = libs[j+1];
libs[j+1] = temp;
}
}
}
int m;
scanf("%d",&m);
getchar();
for(int i=0; i<m; i++) {
int a;
char b[100];
scanf("%d %s",&a,b);
if( a == 1 ) {
printf("*\n");
for(int j=0; j<n; j++) {
if( strcmp(libs[j].book,b) == 0 ) {
//"\t"使文本对齐
printf("%.0f\t%s\t%s\t%s\t%.2f*%d=%.2f\n",libs[j].num,libs[j].book,libs[j].name,libs[j].pubh,libs[j].price,libs[j].cou,libs[j].price*libs[j].cou);
}
}
} else if( a == 2 ) {
printf("*\n");
for(int j=0; j<n; j++) {
if( strcmp(libs[j].name,b) == 0 ) {
//"\t"使文本对齐
printf("%.0f\t%s\t%s\t%s\t%.2f*%d=%.2f\n",libs[j].num,libs[j].book,libs[j].name,libs[j].pubh,libs[j].price,libs[j].cou,libs[j].price*libs[j].cou);
}
}
} else if( a == 3 ) {
printf("*\n");
for(int j=0; j<n; j++) {
if( strcmp(libs[j].pubh,b) == 0 ) {
//"\t"使文本对齐
printf("%.0f\t%s\t%s\t%s\t%.2f*%d=%.2f\n",libs[j].num,libs[j].book,libs[j].name,libs[j].pubh,libs[j].price,libs[j].cou,libs[j].price*libs[j].cou);
}
}
}
}
return 0;
}