问题遇到的现象和发生背景
功能6的排序功能问题,排序就排了价格,其他信息没有跟上
问题相关代码,请勿粘贴截图
px();
运行结果及报错内容
可以运行
我的解答思路和尝试过的方法
我想用冒泡排序法去交换价格,但是结构体交换出现问题
我想要达到的结果
按价格排序,相关信息也要有;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct datebate { //定义的数据组
int num1; //书号 //主要结构体
char num2[100]; //书名
char num3[100]; //作者
int num4; //数量
char jianjie[10000];//简介
double jg; //价格
}jy[100];
struct datebate2 {
int rnum1;
char rnum2[100]; //排序时交换的结构体 1
char rnum3[100];
int rnum4;
char rjianjie[10000];
double rjg;
}jy2[100];
struct datebate3 {
int jnum1;
char jnum2[100];
char jnum3[100]; //排序时交换的结构体 2
int jnum4;
char jjianjie[10000];
double jjg;
}jy3[100];
void tb(int i){ // 方便输出
printf("| 书号:【 %d 】 \n",jy[i].num1);
printf("| 书名:《 %s 》 \n",jy[i].num2);
printf("| 作者: %s \n",jy[i].num3);
printf("| 数量: %d \n",jy[i].num4);
printf("| 价格: %.2lf \n",jy[i].jg);
printf("| 简介: %s \n\n\n",jy[i].jianjie);
}
void tb2(int i){ //方便输出
printf("| 书号:【 %d 】 \n",jy2[i].rnum1);
printf("| 书名:《 %s 》 \n",jy2[i].rnum2);
printf("| 作者: %s \n",jy2[i].rnum3);
printf("| 数量: %d \n",jy2[i].rnum4);
printf("| 价格: %.2lf \n",jy2[i].rjg);
printf("| 简介: %s \n\n\n",jy2[i].rjianjie);
}
int add(int a) { //录入书号、作者、数量、价格 、简介
int i = 0;
int j = 0;
int c;
int num1;
int b = a;
printf("请您输入这本书籍的相关信息:\n");
for (i = a; i < 100; i++) {
printf("这本书的序号:\n");
scanf("%d", &num1);
for(j=0;j<i;j++) //判断是否重复
{ if(jy[j].num1==num1)
{
printf("学生学号重复,请重新输入:\n");
scanf("%d",&num1);
j=-1;
}
}
jy[i].num1 = num1;
printf("这本书的书名:\n");
scanf("%s",jy[i].num2);
printf("这本书的作者:\n");
scanf("%s", jy[i].num3);
printf("这本书的数量:\n");
scanf("%d", &jy[i].num4);
printf("这本书的价格:\n");
scanf("%lf", &jy[i].jg);
printf("这本书的简介:(五十字以内)\n");
getchar();
gets(jy[i].jianjie);
printf("您是否要继续录入信息?\n");
printf("【1是】 【0否】\n");
scanf("%d", &c);
b++;
if (c == 0) {
break;
}
}
printf("记录输入信息成功。\n\n"); //输入完成
getchar();
getchar();
return b;
}
void show(int a) { //书籍展示
int i = 0;
for (i = 0; i < a; i++) {
tb(i);}
system("pause");
}
void exchange(int a){ // 交换结构体
int i;
for (i=0;i<a;i++){
jy2[i].rnum1=jy[i].num1;
strcpy(jy2[i].rnum2,jy[i].num2);
strcpy(jy2[i].rnum3,jy[i].num3);
strcpy(jy2[i].rjianjie,jy[i].jianjie);
jy2[i].rnum4=jy[i].num4;
jy2[i].rjg=jy[i].jg;
}}
void exchange2(int a) { //冒泡排序
double wooc;
int wooc2;
int wooc1;
int min;
int i=0;
int j=0;
for (i=0;i<a;i++)
{
min = i;
for (j=i+1; j<a; j++)
{
if (jy2[min].rjg > jy2[j].rjg)
min = j;
}
wooc=jy2[min].rjg;
wooc1=jy2[min].rnum1;
wooc2=jy2[min].rnum4;
strcpy(jy3[min].jnum2,jy2[min].rnum2);
strcpy(jy3[min].jnum3,jy2[min].rnum3);
strcpy(jy3[min].jjianjie,jy2[min].rjianjie);
jy2[min].rjg = jy2[i].rjg;
strcpy(jy2[min].rnum2,jy2[i].rnum2);
strcpy(jy2[min].rnum3,jy2[i].rnum3);
strcpy(jy2[min].rjianjie,jy2[i].rjianjie);
jy2[min].rnum4 = jy2[i].rnum4;
jy2[min].rnum1 = jy2[i].rnum1;
jy2[i].rjg = wooc;
strcpy(jy2[min].rnum2,jy3[i].jnum2);
strcpy(jy2[min].rnum3,jy3[i].jnum3);
strcpy(jy2[min].rjianjie,jy3[i].jjianjie);
jy2[min].rnum4 =wooc2;
jy2[min].rnum1 =wooc1;
}}
void px(int a) { //排序
int i=0;
double wooc;
exchange(a);
exchange2(a);
for(i = 0;i<a;i++){
tb2(i);
}
system("pause");
}
void caidan() {
printf("欢迎使用小型图书管理系统\n");
printf("本系统包括下列功能:\n");
printf("(按下键盘上对应数字选择相应功能)\n");
printf("(本系统包括:图书信息管理,图书的基本信息包括书号、书名、作者、单价、数量、简介)\n");
printf("|【1】, 书籍信息的录入 |\n");
printf("|【4】. 浏览本系统的全部书籍 |\n");
printf("|【6】. 按单价排序功能 |\n");
printf("|【8】. 退出本系统 |\n");
}
int main() { //主函数
int count = 0;
int c;
while (1)
{
system("cls");
caidan();
scanf("%d", &c);
switch (c)
{
case 1:
count = add(count);
break;
case 4:
show(count);
break;
case 6:
px(count);
break;
case 8:
printf("欢迎您再次使用本系统*\n\n\n\n");
exit(0);
}
}
}