计算机三级数据库上机题解析:排序销售记录

需积分: 10 4 下载量 115 浏览量 更新于2024-07-19 收藏 1.13MB PDF 举报
"该资源为计算机三级数据库的上机题库,包含两个编程题目,都是关于产品销售记录的排序问题。记录由产品代码、产品名称、单价、数量和金额五部分组成,金额根据单价和数量计算得出。题目要求对结构数组进行排序,一个题目要求按产品名称升序、金额升序排列,另一个题目要求按产品名称降序、金额升序排列。已给出了部分源代码,包括主函数、读取数据函数和输出数据函数,但排序函数需自行编写。" 在这两个上机题中,你需要实现的核心功能是`SortDat()`函数,它负责对结构数组`sell`中的元素进行排序。首先,我们来看第一个题目: 1. 题目一要求按产品名称的字母顺序从小到大排列。这是通过使用`strcmp()`函数来比较两个字符串(产品名称)的大小完成的。如果`strcmp(sell[i].mc, sell[j].mc)`返回值大于0,说明`sell[i].mc`在字典顺序上位于`sell[j].mc`之后,此时进行交换。 如果产品名称相同,即`strcmp(sell[i].mc, sell[j].mc)`返回值等于0,那么需要进一步按金额`je`进行排序。这里使用了相同的比较逻辑,如果`sell[i].je`大于`sell[j].je`,则交换它们的金额。这样,即使产品名称相同,也能保证金额较小的记录排在前面。 接下来是第二个题目: 2. 题目二与题目一的区别在于产品名称的排序方向是相反的,即从大到小。这意味着在`strcmp()`的比较中,如果`sell[i].mc`在字典顺序上位于`sell[j].mc`之前(返回值小于0),则需要交换它们的位置。其余部分保持不变,当产品名称相同时,依然按照金额从小到大的顺序进行排列。 为了实现这两个排序功能,你可以采用以下步骤: - 定义结构体类型,包含产品代码、名称、单价、数量和金额等字段。 - 编写`ReadDat()`函数,从文件`IN1.DAT`或`IN2.DAT`中读取数据,将每条记录存储到结构数组`sell`中。 - 实现`SortDat()`函数,根据题目要求进行排序。 - 编写`WriteDat()`函数,将排序后的结果写入到`OUT1.DAT`或`OUT2.DAT`文件中。 注意,在编写`SortDat()`函数时,可以考虑使用更高效的排序算法,如快速排序、归并排序等,以提高效率。但根据题目要求,这里可能只需要实现简单的冒泡排序或选择排序即可。 在实际编程中,为了提高代码的可读性和复用性,还可以考虑将排序逻辑封装到一个独立的排序函数中,然后通过传入不同的比较函数来实现升序或降序排列。这样可以使代码更加模块化,便于维护和扩展。