可能需要高手支招啦,小弟没找出错误在哪!
#include <stdio.h>#include<stdlib.h>
#define N 100
void input(); //插入数据函数
void rank(); //排序
void find(); //查找(按学号或姓名查找)
void del(); //删除纪录
void output(); //输出学生的成绩
void Add(); //插入数据
struct student//结构体的声明//
{
char name[10]; // 姓名
int str_num; //学号
char sex[10];
int age;
float cgrade; //C语言成绩
float egrade; // 英语成绩
float mgrade; // 数学成绩
float pgrade; // 物理成绩
float Ave; // 平均分
float sum; // 总分
};
int M=0; //c是结构体数组的下标在此为全局变量
void main()
{
struct student info[N];
int select; //选择标志
printf(" ------------------------------------------------------- \n");
printf(" -------------------学生管理系统------------------------ \n");
printf(" ---------------------------------------计科一班刘文---- \n");
printf(" ----------------------------------------学号:1005010120 \n");
printf(" **********---*欢--迎--您--的--使--用--!*---************ \n");
printf(" -----------------------操作菜单------------------------ \n");
printf(" 1.输入并储存学生信息 2.删除学生信息 \t\n");
printf(" 3.新增学生信息 4.排序学生成绩\t\n");
printf(" 5.查询学生成绩 6.输出学生成绩\t\n");
printf(" 0.退出 \t\n");
printf("\n\t提示:请按照操作菜单输入\n\n");
printf("\t请选择你要进行的操作:");
scanf("%d",&select);
switch(select) //判断选择
{
case 1:input(info,M);break;
case 2:del(info,M);break;
case 3:Add(info,M);break;
case 4:rank(info,M);break;
case 5:find(info,M);break;
case 6:output(info,M);break;
case 0: return 1;break;
default:printf("Error!\n");break;
}
}
void input(struct student info[],int M)
{
int i; //循环变量
printf("\n\t请输入你要输入的人数:");
scanf("%d",&M); //下标C保存多少个学生
M--;
if(M>N)
{
printf("\t最多输入%d个学生\n",N);
printf("按回车键返回");
getchar();
getchar();
input(info,M); //递归调用
}
for(i=0;i<=M;i++) //N是一个常量
{
printf("\n\t请输入第%d个学生的信息:",i+1);
printf("\n\t\t姓名::");scanf("%s",&info[i].name );
printf("\n\t\t学号::");scanf("%d",&info[i].str_num);
printf("\n\t\t性别::");scanf("%s",&info[i].sex);
printf("\n\t\t年龄::");scanf("%f",&info[i].age);
printf("\n\t\tC语言=");scanf("%f",&info[i].cgrade);
printf("\n\t\t英语=");scanf("%f",&info[i].egrade);
printf("\n\t\t物理=");scanf("%f",&info[i].pgrade);
printf("\n\t\t数学=");scanf("%f",&info[i].mgrade);
info[i].sum=info[i].cgrade+info[i].egrade+info[i].pgrade+info[i].mgrade;
info[i].Ave=(info[i].sum)/4;
}
printf("\n按回车键返回主菜单……\n");
getchar();
getchar();
main();
}
void rank(struct student info[],int M)//排序
{
int i,j;
struct student temp;
for(i=0;i<M;i++)
{
for(j=i+1;j<=M;j++)
{
if(info[j].Ave >info[i].Ave)
{
temp=info[i];
info[i] =info[j+1];
info[j+1]=temp;
}
}
}
printf("\t按课程总成绩排序::\n\t");
printf("姓名 \t性别\t学号\t 平均分\t 总成绩\n");
for(i=0;i<M;i++)
{
if(info[i].str_num!=0){
printf("\t%-20s%-8s%-10d%-4.2f%-4.2f\n",info[i].name ,info[i].sex ,info[i].str_num ,info[i].Ave ,info[i].sum );}}
main();
}
void del(struct student info[],int M)//删除的功能
{
int n,j;
printf("\t请输入学号:");
scanf("%d",&n);
for( j=0;j<=M;j++)
{
if (info[j].str_num==n)
{
int i=j;
while(i++!=M)
info[i-1]=info[i];
}
}
--M;
printf("删除成功!\n");
main();//返回主菜单
}
void output(struct student info[],int M) //输出数据
{
int i; //循环变量
printf("姓名\t性别\t年龄\t学号\tC语言\t英语\t数学\t物理\t平均分\t总分\n");
for(i=0;i<=M;i++)
{
if(info[i].str_num!=0)
{
printf("%-20s%-8s%-6d%-6d%-4.2f%-4.2f%-4.2f%-4.2f%-4.2f%\n",info[i].name,info[i].sex ,info[i].age ,
info[i].str_num,info[i].cgrade,info[i].egrade,info[i].mgrade ,info[i].pgrade ,info[i].Ave ,info[i].sum );}
}
printf("\n按回车键返回主菜单……\n");
getchar();
getchar();
main();
}
void Add(struct student info[],int M) //插入的学生信息
{
struct student temp;
printf("\t\t请输入该学生的信息:\n");
printf("\n\t\t姓名::");scanf("%s",&temp.name );
printf("\n\t\t学号::");scanf("%d",&temp.str_num);
printf("\n\t\t性别::");scanf("%s",&temp.sex);
printf("\n\t\t年龄::");scanf("%f",&temp.age);
printf("\n\t\tC语言=");scanf("%f",&temp.cgrade);
printf("\n\t\t英语=");scanf("%f",&temp.egrade);
printf("\n\t\t物理=");scanf("%f",&temp.pgrade);
printf("\n\t\t数学=");scanf("%f",&temp.mgrade);
temp.sum =temp.cgrade+temp.egrade+temp.mgrade+temp.pgrade;
temp.Ave =temp.sum /4.0;
if(M<N)
{
if(M==0)
{
info[M]=temp;
rank(info,M);
}
else
{
M++;
info[M]=temp;
rank(info,M);
}
}
main();
}
void find(struct student info[],int M)
{
int num; //学号
char name[10]; //姓名
int k; //选择数字
int i;
printf("\t\t按学号查找[1]:\n");
printf("\t\t按姓名查找[2]:\n");
printf("\t\t请选择:");
scanf("%d",&k);
if(k==1)
{
printf("\t\t请输入你要查找的学号:");
scanf("%d",&num);
for(i=0;i<M;i++)
{
if(info[i].str_num==num)
{
printf("\t姓名\t学号\t性别\t年龄\tC语言\t数学\t英语\t物理\t总分\t平均分\t\n");
printf("%-20s%-6d%-8s%-6d%-4.2%-4.2f%-4.2%-4.2f%-4.2%-4.2f\n",info[i].str_num ,info[i].sex ,info[i].age,info[i].cgrade,
info[i].mgrade ,info[i].egrade ,info[i].pgrade ,info[i].sum ,info[i].Ave );
}
}
}
else if(k==2)
{
printf("\t\t请输入你要查找的姓名:");
scanf("%s",name);
for(i=0;i<M;i++)
{
if(strcmp(info[i].name,name)==0)
{
printf("\t姓名\t学号\t性别\t年龄\tC语言\t数学\t英语\t物理\t总分\t平均分\t\n");
printf("%-20s%-6d%-8s%-6d%-4.2%-4.2f%-4.2%-4.2f%-4.2%-4.2f\n",info[i].str_num ,info[i].sex ,info[i].age,info[i].cgrade,
info[i].mgrade ,info[i].egrade ,info[i].pgrade ,info[i].sum ,info[i].Ave );
}
}
}
else
{
printf("\t\t选择的范围(1或),请重新输入……");
find(info,M);
}
printf("\n按回车键返回主菜单……\n");
getchar();
getchar();
main();
}
运行后的提示是:错误 26 fatal error LNK1104: 无法打开文件“D:\源程序\大作业一\Debug\大作业一.exe” 大作业一