请教:用冒泡排序法整理信息(可实现功能,其它排序法也可以)
程序代码:
//这是一个销售管理系统,其它功能正常,排序方面(程序用冒泡排序)不能完全实现,请教问题出在那里?
#include <stdio.h>
struct SSell //定义结构体含序号、日期、姓名及销售面积
{
int nNum;
int nDate;
char sName[20];
float nArea;
};
SSell sl[100];
int g_Num; //定义一个全局变量,用来统计已录入信息数量,做为冒泡排序基数
void Print() //输出显示函数
{
int i = 0;
printf("序号\t 日 期 \t姓名\t面积\n");
while(sl[i].nNum)
{
if(sl[i].nNum != -1)
{
printf("%d\t%d\t%s\t%0.2f\n",sl[i].nNum,
sl[i].nDate, sl[i].sName, sl[i].nArea);
}
i++;
}
printf("\n");
}
void Add() //添加信息函数
{
int i = 0;
while(sl[i].nNum)
{
i++;
}
printf("请输入序号:");
scanf("%d", &sl[i].nNum);
printf("请输入日期(格式:20100101):");
scanf("%d", &sl[i].nDate);
printf("请输入姓名:");
scanf("%s", sl[i].sName);
printf("请输入面积:");
scanf("%f", &sl[i].nArea);
Print();
printf("\n");
}
void Del() //删除信息函数
{
int i = 0;
int Temnum;
printf("请输入要删除的序号:");
scanf("%d", &Temnum);
while(sl[i].nNum)
{
if(sl[i].nNum == Temnum)
{
sl[i].nNum = -1;
}
i++;
}
Print();
}
void Modify() //修改信息函数
{
int i = 0;
int Temp;
printf("请输入要修改的序号:");
scanf("%d", &Temp);
while(sl[i].nNum)
{
if(sl[i].nNum == Temp)
{
printf("请输入新的日期:");
scanf("%d", &sl[i].nDate);
printf("请输入新的姓名:");
scanf("%s", sl[i].sName);
printf("请输入新的面积:");
scanf("%f", &sl[i].nArea);
}
i++;
}
Print();
}
void SortNum() //按序号排序函数,问题就出在这里
{
int i = 0;
int j = 0;
SSell Tsell;
for(; i < g_Num -1; i++) //此处使用全局变量g_Num,统计总信息数量(共几条)
{
for(; j < g_Num - 1 - i; j++)
{
if(sl[j].nNum > sl[j+1].nNum)
{
Tsell = sl[j];
sl[j] = sl[j+1];
sl[j+1] = Tsell;
}
}
}
}
void SortDate()
{
}
void SortName()
{
}
void SortArea()
{
}
void Sort() //排序函数
{
int i;
puts("1、按序号排列");
puts("2、按日期排列");
puts("3、按姓名排列");
puts("4、按面积排列");
printf("请选择排序方式:");
scanf("%d", &i);
switch(i)
{
case 1:
SortNum(); //按序号排序函数,也是本题要请教之处。
break; //原程序的运行结果最后一条信息无法排序
case 2: //为了方便,2-4的其它排序函数暂时没写
SortDate();
break;
case 3:
SortName();
break;
case 4:
SortArea();
break;
}
Print();
}
void Find() //查找函数
{
int i = 0;
int Tnum;
printf("请输入要查找的序号:");
scanf("%d", &Tnum);
if(sl[i].nNum == 0) //记录为空的判读
{
puts("");
puts("记录为空,无法查找!");
puts("");
}
while(sl[i].nNum) //记录不为空时的判断
{
if(sl[i].nNum == Tnum)
{
puts("");
puts("以下是查找结果:");
puts("");
printf("序号\t 日 期 \t姓名\t面积\n");
printf("%d\t%d\t%s\t%0.2f\n",sl[i].nNum,
sl[i].nDate, sl[i].sName, sl[i].nArea);
printf("\n");
}
else
{
puts("");
puts("没有找到相关记录,请重新核对后再次查找!");
puts("");
}
i++;
}
}
int Menu() //菜单选择函数
{
int i;
puts("1、浏览信息");
puts("2、添加信息");
puts("3、删除信息");
puts("4、修改信息");
puts("5、排序信息");
puts("6、查找信息");
puts("0、退出");
printf("请选择(0-6):");
scanf("%d", &i);
switch(i)
{
case 1:
Print();
break;
case 2:
Add();
++g_Num; //每录入一条信息全局变量g_Nume加一
break;
case 3:
Del();
--g_Num; //每删除一条信息全局变量g_Nume减一
break;
case 4:
Modify();
break;
case 5:
Sort();
break;
case 6:
Find();
break;
case 0:
break;
}
return i;
}
void main()
{
while (Menu())
{
}
}
[此贴子已经被作者于2018-4-28 09:28编辑过]



