C语言课程设计
}
records->record[i].sum = records->record[i].price *
records->record[i].quantity; //金额是计算所得
#ifdef DEBUG
ShowI(i);
#endif }
int RemoveByNum(int num) //删除过后,后面记录到编号将全部减1,记录的编号即下标 { 离
{
records->record[i].num=records->record[i+1].num-1;
strcpy(records->record[i].times,records->record[i+1].times); strcpy(records->record[i].types,records->record[i+1].types); strcpy(records->record[i].name,records->record[i+1].name); records->record[i].price=records->record[i+1].price; records->record[i].quantity=records->record[i+1].quantity; records->record[i].sum=records->record[i+1].sum;
- 9 -
return 1;
int i;
if(num<1||num>records->total_count) { }
for(i=num;i
printf(\位置错误!\\n\return 0;
C语言课程设计
}
} return 1;
int DeleteByNum() //按编号删除 { }
int FindByName(char *name); //声明按名称查找记录函数,下面就要使用到
int Modify() //按名称修改记录 {
int i;
char names[20];
printf(\请输入要修改的记录名称:\scanf(\i=FindByName(names);
if(!i) //判断要查找的名称所对应的记录是否存在,不存在则int num;
printf(\请输入要删除记录的编号:\scanf(\if(!(RemoveByNum(num))) { } else
return 1;
printf(\程序执行错误,删除失败!\\n\return 0;
直接跳转
- 10 -
C语言课程设计
return 0;
printf(\请输入所需信息:\\n\
printf(\ 时间 类别 品名 单价 数量 金额
\\n\
scanf(\
ords->record[i].name,&records->record[i].price,&records->record[i].quantity);
records->record[i].sum = records->record[i].price *
records->record[i].quantity; }
return 1;
3.4 ShowTotal模块实现
ShowTotal包括三种方式:类型、月、年,以类型为例说明
1、算法思想
为确保不会溢出,保存统计结果的total数组定义长度为MAX,接下来对记录集进行遍历,并与ptype[]数组中统计的类型进行比对,按照对应的下标将统计结果加到total[]数组中,这样做便于
输出时一一对应。
(复杂算法用流程图辅助说明)
2、具体实现
(给出实现算法的关键代码)
按类型显示统计结果 void ShowType() {
int i=1,j=0;
double total[MAX]={0.0}; //定义保存统计结果的数组
while(i<=records->total_count&&j if(strcmp(ptype[j],records->record[i].types)==0){ total[j] += records->record[i].sum; - 11 - C语言课程设计 } } } i++; else j++; //输出统计结果 printf(\按类型统计结果如下:\\n\); for(i=0;i printf(\); printf(\,ptype[i],total[i]); 4测试结果及分析 1. 打开程序,进入主界面 2. 输入“1”,打开历史消费记录: - 12 - C语言课程设计 3. 输入“1”,测试更新模块: 4. 输入“1”,插入信息数据: 5. 输入“2”,按编号删除数据: - 13 -