2022年11月28日-2022年12月2日:
学生成绩管理小项目(包含makefile)
OBJ:=object
CC:=gcc
CFLAGS:=-c -g -Wall
OBJS:=calpmaxage.o main.o sortbyage.o sortbysumscores.o swap.o input.o output.o sortbyname.o sumscores.o file.o
export OBJ CC CFLAGS OBJS
ALL:
make -C src
make -C obj
.PHONY:clean
clean:
$(RM) obj/*.o
$(RM) bin/*
ALL:$(OBJ)
mv $< ../bin
$(OBJ):$(OBJS)
$(CC) $(OBJS) -o $@
ALL:$(OBJS)
mv $^ ../obj
main.o:main.c
$(CC) $(CFLAGS) $< -o $@
calpmaxage.o:calpmaxage.c
$(CC) $(CFLAGS) $< -o $@
sortbyage.o:sortbyage.c
$(CC) $(CFLAGS) $< -o $@
sortbysumscores.o:sortbysumscores.c
$(CC) $(CFLAGS) $< -o $@
swap.o:swap.c
$(CC) $(CFLAGS) $< -o $@
input.o:input.c
$(CC) $(CFLAGS) $< -o $@
output.o:output.c
$(CC) $(CFLAGS) $< -o $@
sortbyname.o:sortbyname.c
$(CC) $(CFLAGS) $< -o $@
sumscores.o:sumscores.c
$(CC) $(CFLAGS) $< -o $@
upload.o:file.c
$(CC) $(CFLAGS) $< -o $@
#include"../include/main.h"
stu *calpmaxage(stu *ps)
{
stu *pmax=NULL;
pmax=ps;
for(int i=0;i<2;i++)
{
if(pmax->age<(ps+i)->age)
{
pmax=(ps+i);
}
}
return pmax;
}
/*
思路分析:
i={0,1}
age={28,58}
ps=28
pmax=ps=28
ps+0=28
ps+1=58
28<58
pmax=58
分析完毕
*/
#include"../include/main.h"
void upload(stu *ps,char *pathname)
{
//打开文件
FILE *upload=fopen(pathname,"w");
if(NULL==upload)
{
perror("open error");
return;
}
//操作文件
for(int i=0;i<2;i++)
{
fwrite(ps,1,sizeof(stu),upload);
ps++;
}
//关闭文件
fclose(upload);
}
void download(stu *ps,char *pathname)
{
//打开文件
FILE *download=fopen(pathname,"r");
if(NULL==download)
{
perror("open error");
return;
}
//操作文件
for(int i=0;i<2;i++)
{
fread(ps,1,sizeof(stu),download);
ps++;
}
//关闭文件
fclose(download);
}
#include "../include/main.h"
void input(stu *ps)
{
for(int i=0;i<2;i++)
{
printf("请输入学生的姓名,年龄以及三门成绩:\n");
scanf("%s",&ps->name[0]); // &name[0]=name
scanf("%d",&ps->age);
for(int j=0;j<3;j++)
{
scanf("%f",&ps->scores[j]);
}
ps++;
}
}
#include"../include/main.h"
int main(int argc,char *argv[])
{
stu *pmax=NULL;
stu *ps=NULL;
ps=(stu*)malloc(sizeof(stu)*2);
if(NULL==ps)
{
perror("malloc error");
return -1;
}
memset(ps,0,sizeof(stu)*2);
int op;
while(1)
{
printf("1 Input\n");
printf("2 Output\n");
printf("3 Calpmaxage\n");
printf("4 Sortbyage\n");
printf("5 Sortbyname\n");
printf("6 Sortbysumscores\n");
printf("7 upload\n");
printf("8 download\n");
printf("9 Exit\n");
//int op;
//scanf("%d",&op);
scanf("%d",&op);
switch(op)
{
case 1:
input(ps);
break;
case 2:
output(ps);
break;
case 3:
pmax=calpmaxage(ps);
printf("年龄最大的人是%s\n",pmax->name);
printf("年龄最大的人的首地址为%p\n",pmax);
break;
case 4:
sortbyage(ps);
break;
case 5:
sortbyname(ps);
break;
case 6:
sortbysumscores(ps);
break;
case 7:
upload(ps,argv[1]);
printf("上传成功\n");
break;
case 8:
download(ps,argv[1]);
printf("下载成功\n");
break;
case 9:
exit(0);
break;
}
}
free(ps); // 释放内存空间
ps=NULL;
return 0;
}
#include"../include/main.h"
void output(stu *ps)
{
for(int i=0;i<2;i++)
{
printf("%s ",ps->name);
printf("%d ",ps->age);
for(int j=0;j<3;j++)
{
printf("%.1f ",ps->scores[j]);
}
printf("\n");
ps++;
}
}
#include"../include/main.h"
void sortbyage(stu *ps)
{
for(int i=0;i<2;i++)
{
for(int j=0;j<2-1-i;j++)
{
if(strcmp((ps+j)->name,(ps+j+1)->name)>0)
{
swap((ps+j),(ps+j+1));
}
}
}
}
/*
(ps+j)->name指代第一个姓名
(ps+j+1)->name指代第二个姓名
如果第一个姓名的ASSCII码值大于第二个姓名的ASCII码值
则进行交换
采用冒泡排序
*/
/*
(ps+j)->name指代上一个姓名
(ps+j+1)->name指代下一个姓名
如果上一个姓名的ASCII码值大于下一个姓名的ASCII码值
则将姓名交换
使用冒泡排序
*/
#include"../include/main.h"
void sortbyname(stu *ps)
{
for(int i=0;i<2-1;i++)
{
for(int j=0;j<2-1-i;j++)
{
if(strcmp((ps+j)->name,(ps+j+1)->name)>0)
{
swap((ps+j),(ps+j+1));
}
}
}
}
#include"../include/main.h"
void sortbysumscores(stu *ps)
{
for(int i=0;i<2-1;i++)
{
for(int j=0;j<2-1-i;j++)
{
if(sumscores((ps+j)->scores)>sumscores((ps+j+1)->scores))
{
swap((ps+j),(ps+j+1));
}
}
}
}
/*
(ps+j)->scores指代上一门成绩
(ps+j+1)->scores指代下一门成绩
如果上一门成绩大于下一门成绩
则进行交换
采用冒泡排序
*/
#include"../include/main.h"
float sumscores(float b[])
{
float sum=0;
for(int i=0;i<2;i++)
{
sum=sum+b[i];
}
return sum;
}
#include"../include/main.h"
void swap(stu *pa,stu *pb)
{
stu temp={0};
temp=*pa;
*pa=*pb;
*pb=temp;
}
日期:2022年12月2日
作者:徐子宸