C语言课程设计
{
printf(\ return ; } }
void ShowI(int i) //根据i值输出记录 {
printf(\记
录:%-5d%-10sss%8.2f]%8.2f\\n\i].times,records->record[i].types,records->record[i].name,records->record[i].price,records->record[i].quantity,records->record[i].sum); }
int ShowRec() //显示所有记录 {
int i;
printf(\打印记录-------------\\n\\n\
printf(\编号\\t 日期\\t\\t 类型\\t 名称\\t 单价 数量\\t 金额\\n\ for(i=1;i<=records->total_count;i++) {
printf(\ords->record[i].times,records->record[i].types,records->record[i].name,records->record[i].price,records->record[i].quantity,records->record[i].sum); if((i%9)==0) //实现分页功能 {
printf(\??\
getchar();getchar(); //不明白这里为什么非要两次getchar()? system(\
printf(\打印记录-------------\\n\\n\
printf(\编号\\t 日期\\t\\t 类型\\t 名称\\t 单价 数量\\t 金额\\n\ } }
printf(\??\ return 1; }
int SaveRec() //保存更新 {
int i;
OpenFile(\
for(i=1;i<=records->total_count;i++) {
- 24 -
C语言课程设计
fwrite(&records->record[i],sizeof(Rec),1,fp); }
fclose(fp); return 1; }
int Insert() //插入函数 {
if(records->total_count==(MAX-1)) {
printf(\数据已达可控范围,不能再插入!\\n\ return 0; }
int i=(++records->total_count);
records->record[i].num=i; //编号是连续的,1~n
printf(\请输入所需信息(顺序为:时间,类别,品名,单价,数量):\
scanf(\ords->record[i].name,&records->record[i].price,&records->record[i].quantity); if(strlen(records->record[i].times)!=10||records->record[i].times[4]!='-'||records->record[i].times[7]!='-') //简单的判断一下日期是否符合格式要求 {
printf(\时间格式错误,请重试!\\n\ records->total_count--; return 0; }
records->record[i].sum = records->record[i].price * records->record[i].quantity; //金额是计算所得
#ifdef DEBUG ShowI(i); #endif
return 1; } int RemoveByNum(int num) //删除过后,后面记录到编号将全部减1,记录的编号即下标 {
int i=num;
if(num<1||num>records->total_count) {
printf(\位置错误!\\n\ return 0; }
#ifdef DEBUG ShowI(i); #endif
- 25 -
C语言课程设计
for(i=num;i
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; }
records->total_count--; return 1; }
int DeleteByNum() //按编号删除 {
int num;
printf(\请输入要删除记录的编号:\ scanf(\
if(!(RemoveByNum(num))) {
printf(\程序执行错误,删除失败!\\n\ return 0; }
else return 1; }
int FindByName(char *name); //声明按名称查找记录函数,下面就要使用到
int Modify() //按名称修改记录 {
int i;
char names[20];
printf(\请输入要修改的记录名称:\ scanf(\ i=FindByName(names);
if(!i) //判断要查找的名称所对应的记录是否存在,不存在则直接跳转
return 0;
printf(\请输入所需信息(顺序为:时间,类别,品名,单价,数量):\
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;
- 26 -
C语言课程设计
#ifdef DEBUG ShowI(i); #endif
return 1; }
int FindByTime(char *times) //按时间查找记录 {
int i=1;
strcpy(records->record[records->total_count+1].times,times); while(strcmp(records->record[i].times,times)!=0) i++;
if(i==records->total_count+1) {
printf(\记录不存在!\\n\ return 0; } else
return i; }
int FindByType(char *types) //按类型查找记录 {
int i=1;
strcpy(records->record[records->total_count+1].types,types); while(strcmp(records->record[i].types,types)!=0) i++;
if(i==records->total_count+1) {
printf(\记录不存在!\\n\ return 0; } else
return i; }
int FindByName(char *name) //按名称查找记录 {
int i=1;
strcpy(records->record[records->total_count+1].name,name); while(strcmp(records->record[i].name,name)!=0) i++;
if(i==records->total_count+1) {
printf(\记录不存在!\\n\ return 0; }
- 27 -
C语言课程设计
else
return i; }
char * Get4(char times[]) //获取时间字段的前四位,即年份 {
tmp[0]=times[0]; tmp[1]=times[1]; tmp[2]=times[2]; tmp[3]=times[3]; tmp[4]='\\0'; return tmp; }
int SortByTime() //按时间排序 {
Rec rectmp; int i,j,t;
for(i=1;i
for(j=i+1,t=i;j<=records->total_count;j++) {
if(strcmp(records->record[t].times,records->record[j].times)>0) t=j; }
rectmp=records->record[t];
records->record[t]=records->record[i]; records->record[i]=rectmp; }
#ifdef DEBUG ShowRec(); #endif
year_count=1;
strcpy(pyear[0],Get4(records->record[1].times)); for(i=1;i
if(strcmp(Get4(records->record[i].times),Get4(records->record[i+1].times))==0) //there is something wrong,还有最后一个bug,就在这里 { continue; } else {
strcpy(pyear[year_count++],Get4(records->record[i+1].times)); //遇到不同的年份,把最新的存储进来 } }
#ifdef DEBUG
- 28 -