请教:用冒泡排序法整理信息(可实现功能,其它排序法也可以)
程序代码:
//这是一个销售管理系统,其它功能正常,排序方面(程序用冒泡排序)不能完全实现,请教问题出在那里? #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编辑过]