C语言问题

设计一个实用的小型学生成绩管理程序,要求具备建立、增加、删除、修改学生信息,显示学生信息、查询学生信息、按某项信息排序等功能,并且能够对指定文件操作,操作界面友好,功能如... 设计一个实用的小型学生成绩管理程序,要求具备建立、增加、删除、修改学生信息,显示学生信息、查询学生信息、按某项信息排序等功能,并且能够对指定文件操作,操作界面友好,功能如果能用菜单的方式呈现更好。 (最好简单点,本人C语言学的不怎样,怕看不懂) 展开
 我来答
happyfamily12
推荐于2016-08-24 · TA获得超过106个赞
知道答主
回答量:66
采纳率:0%
帮助的人:53.7万
展开全部
/*
(1)编写主菜单,包括1输入、2插入、3排序、4查找、5删除、6输出、7退出等7个功能的菜单项,程序执行则首先显示这7个菜单项目,
当用户按下功能序号时可以执行相应的功能。
(2)每一个功能编写一个相应的空函数,名称为input、insert、sort、find、delete、output、quit,由主函数来调用。
(3)为了测试调用成功与否,每个空函数里加上语句显示当前被调用的函数的名称
(4)每执行完一次某个菜单功能后,还要返回主菜单,等待用户再选择菜单项。(可以使用循环控制。)
*/

/*(1)输入:函数input把20学生的学号、姓名、性别、年龄、四科成绩以及平均成绩和总成绩放在一个结构体数组中,学生的学号、姓名、四科成绩由键盘输入,
然后计算出平均成绩和总成绩放在结构体对应的域中,并把原始数据放入student.dat。
(2)输出:函数output 输出全部学生的记录,从文件中读出学生的信息,并从屏幕上输出。
(3)插入:insert 函数输入一个学生的记录,按学号的先后顺序插入该学生的全部内容。
(4)删除:delete函数输入一个学生的学号或姓名,找到该学生并删除该学生的全部内容。
(5)排序:sort函数对所有学生按要求排序(1.学号 2.总成绩 ),并输出。
(6)查找:find函数输入一个学生的学号或姓名,找到该学生并输出该学生的全部内容。要求能查询多次。

*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 100
#define M 3
FILE *fp;
int n=0;

struct student
{
char name[20],sex[20];
int num,age,score[4],sum;
float ave;
}t,q,stu[N];

void input(); //输入函数
void calculate(); //计算各同学的总成绩与平均分
void insert(); //插入一同学的信息
void sort(); //对原有同学的信息根据要求排序
void find(); //查找特定同学的信息
void delet(); //删除特定同学的信息
void output(); //输出各同学的信息
void quit(); //退出菜单
//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,主函数
void main()
{
int a;
char b[20];
for(;;)
{
printf("********************************菜单开始\n");
printf("\t1、输入学生信息\n");
printf("\t2、插入一学生信息\n");
printf("\t3、排序(从低到高)\n");
printf("\t4、查找指定学生信息\n");
printf("\t5、删除指定学生信息\n");
printf("\t6、输出学生信息\n");
printf("\t7、退出程序\n");
printf("********************************菜单结束\n");

printf("输入数a通过a执行菜单中的程序块:");
scanf("%s",b);
a=atoi(b);

switch(a)
{
case 1:input();break;
case 2: insert();break;
case 3:sort();break;
case 4:find();break;
case 5:delet();break;
case 6:output();break;
case 7:quit();break;
default:printf("输入错误请重新输入(1-7)的数!!!\n");
}
}
}
//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,输入函数
void input()
{
int i,j;
printf("输入%d个同学的信息\n",M);
for(i=0;i<M;i++)
{
printf("输入第%d个同学的num,name,sex,age:",i+1);
scanf("%d%s%s%d",&stu[i].num,stu[i].name,stu[i].sex,&stu[i].age);
printf("输入第%d个同学的四门课成绩:",i+1);
for(j=0;j<4;j++)
scanf("%d",&stu[i].score[j]);
}
calculate();
printf("输入结束!\n");
if((fp=fopen("student.dat","w"))==NULL)
{
printf("can't open file!\n");
return;
}
if(fwrite(stu,sizeof(struct student),N,fp)!=N)
printf("write error!\n");
fclose(fp);

}
//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,计算函数
void calculate()
{
for(int i=0;i<M+n;i++)
{
stu[i].sum=0;
for(int j=0;j<4;j++)
stu[i].sum+=stu[i].score[j];
stu[i].ave=stu[i].sum/4.0;
}
}
//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,插入函数
void insert()
{
FILE *fp;
student xue;
int i,j,m=1;
if((fp=fopen("student.dat","w"))==NULL)
{
printf("can't open file!\n");
return;
}
while(m)
{
for(i=0;i<M+n;i++)
for(j=0;j<M+n-j;j++)
if(stu[j].num>stu[j+1].num)
{
t=stu[j];
stu[j]=stu[j+1];
stu[j+1]=t;
}
xue=q;
printf("输入要插入学生的num,name,sex,age:");
n=n+1;
scanf("%d%s%s%d",&xue.num,xue.name,xue.sex,&xue.age);
printf("输入要插入学生的四门课成绩:");
for(j=0;j<4;j++)
scanf("%d",&xue.score[j]);
for(i=0;i<M+n;i++)
{
if(xue.num<stu[i].num)
{
for(j=M+n-1;j>i;j--)
stu[j]=stu[j-1];
stu[i]=xue;break;
}
}
printf("插入第%d个成功\n",n);
calculate();
printf("是否继续插入?是,输入任意数;否,输入0\n");
scanf("%d",&m);
}
if(fwrite(stu,sizeof(struct student),N,fp)!=N)
printf("write error!\n");
fclose(fp);
}

//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,排序函数
void sort()
{
int i,j,b;
if((fp=fopen("student.dat","w"))==NULL)
{
printf("can't open file!\n");
return;
}

printf("\t1、按学号排序\t2、按总成绩排序\n");
printf("请输入选择类型:");
scanf("%d",&b);

if(b==1)
{
for(i=0;i<M+n;i++)
for(j=0;j<M+n-j;j++)
if(stu[j].num>stu[j+1].num)
{
t=stu[j];
stu[j]=stu[j+1];
stu[j+1]=t;
}
}

else if(b==2)
{
for(i=0;i<M+n-1;i++)
for(j=0;j<M+n-1-j;j++)
if(stu[j].sum>stu[j+1].sum)
{
t=stu[j];
stu[j]=stu[j+1];
stu[j+1]=t;
}
}

else
{
printf("输入错误请重新输入!\n");
return;
}

printf("排序成功!!!\n");
fclose(fp);

}
//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,查找函数
void find()
{
int a,i,j,m,k;
char b[20];

printf("这是查找函数!!!\n");
if((fp=fopen("student.dat","r"))==NULL)
{
printf("can't open file!\n");
return;
}
m=1;
while(m)
{

printf("输入要查询学生的姓名或学号\n\t1、学号\t2、姓名\n");
scanf("%d",&a);
switch(a)
{
case 1:
{
printf("输入要查询学生的学号:\n");
scanf("%d",&k);
for(i=0;i<M+n;i++)
if(stu[i].num==k)
{
j=i;
printf("输出查找同学的信息:\n");
printf("num\tname\tsex\tage\tscore0\tscore1\tscore2\tscore3\tsum\tave\n");
printf("%d\t%s\t%s\t%d\t",stu[j].num,stu[j].name,stu[j].sex,stu[j].age);
for(i=0;i<4;i++)
printf("%d \t",stu[j].score[i]);
printf("%d\t%f\n",stu[j].sum,stu[j].ave);
}break;
printf("该学生不存在\n");break;
}
case 2:
{
printf("输入要查询学生的姓名:\n");
scanf("%s",b);
for(i=0;i<M+n;i++)
if(strcmp(stu[i].name,b)==0)
{
j=i;
printf("输出查找同学的信息:\n");
printf("num\tname\tsex\tage\tscore0\tscore1\tscore2\tscore3\tsum\tave\n");
printf("%d\t%s\t%s\t%d\t",stu[j].num,stu[j].name,stu[j].sex,stu[j].age);
for(i=0;i<M;i++)
printf("%d \t",stu[j].score[i]);
printf("%d\t%f\n",stu[j].sum,stu[j].ave);
}break;
printf("该学生不存在\n"); break;
}
default:printf("输入错误请重新输入(1-2)的数!!!\n");return;
}
printf("想要查找输入任意数,否则输入0\n");
scanf("%d",&m);

}

fclose(fp);
}
//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,删除函数
void delet()
{
int a,b,i,j;
char m[20];
printf("这是删除函数!!!\n");
if((fp=fopen("student.dat","w"))==NULL)
{
printf("can't open file!\n");
return;
}

printf("输入要删除学生的姓名或学号\n");
printf("\t1、学号\t2、姓名\n");
printf("输入选择类型\n");
scanf("%d",&a);
calculate();

if(a==1)
{
printf("输入要删除学生的学号:\n");

scanf("%d",&b);
for(i=0;i<M+n;i++)
if(stu[i].num==b)
{
//stu[i]=q;
for(j=i;j<M+n-1;j++)
stu[j]=stu[j+1];
printf("删除成功\n");
n--;
}return;
printf("该学生不存在\n");return;

}
else if(a==2)
{
printf("输入要删除学生的姓名:\n");
scanf("%s",m);
for(i=0;i<M+n;i++)
if(strcmp(stu[i].name,m)==0)
{
//stu[i]=q;
for(j=i;j<M+n-1;j++)
stu[j]=stu[j+1];
printf("删除成功\n");
n--;
}return;
printf("该学生不存在\n");return;
}
else printf("输入错误\n");
fclose(fp);
}
//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,输出函数
void output()
{
int i,j;
if((fp=fopen("student.dat","r"))==NULL)
{
printf("can't open file!\n");
return;

}
printf("输出文件中的信息为:\n");
printf("n=%d\n",n);
printf("num\tname\tsex\tage\tscore0\tscore1\tscore2\tscore3\tsum\tave\n");
for(i=0;i<M+n;i++)
{
printf("%d\t%s\t%s\t%d\t",stu[i].num,stu[i].name,stu[i].sex,stu[i].age);
for(j=0;j<4;j++)
printf("%d \t",stu[i].score[j]);
printf("%d\t%f\n",stu[i].sum,stu[i].ave);
}
fclose(fp);
}
//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,退出函数
void quit()
{
printf("这是退出函数!!!\n");
exit(0);
}
追问
大神啊!!!能不能简单点啊,这根本就看不明白呀!!!而且运行也有问题啊
追答
从main函数开始一步一步看,调用哪个函数就看哪个。。PS:我运行可以啊?你是用的什么编译器?我这边是 Microsoft Visual C++6.0。文件后缀名是.cpp
这个功能全点。。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式