请C语言高人帮忙做一道题目(学生成绩管理程序 基本要求: (1)设计一个功能菜单,将程序的各个功能显示

2024-12-04 04:58:25
推荐回答(3个)
回答1:

#include
#include
#include
#include
#include

#define max 100

/////////////////////////////////////////////////////////////////////
/////strcut stu
struct stu //学生资料结构体
{
char name[10];
char num[20]; //学号
char adress[8];
float x,y,z,score;
int number;
};

///////////////////////////////////////////////////////////////////////
///////student.cpp
int count=0;
int temp=0;
int Exchang=0; //定义数据修改标志,若修改则为1,否则为0
class student //学生类
{
private:
stu data[max];
char start_del;
public:
void input(char *ch1,char *num,char *ch2,float x,float y,float z); //输入
void find(char *num); //查找
void del(char *num); //删除
int check_num(char *num) //确定没有重复学号
{
int m=0;
while(m<=count)
if(!strcmp(num,data[m++].num)) //判断是否相同
break;
if(m>count)
return 0;
else
return 1;
}
void taxis(); //总分排序
void show();
void save(); //保存学生资料
void read(); //从文件"student"读取学生资料
};

void student::input(char *ch1,char *num,char *ch2,float x,float y,float z)
{
strcpy(data[count].name,ch1);
strcpy(data[count].num,num);
strcpy(data[count].adress,ch2);
data[count].x=x; data[count].y=y; data[count].z=z;
count++;
Exchang=1; //设置已修改数据标志
}
void student::find(char * num)
{
int m=0;
while(m<=count)
if(!strcmp(num,data[m++].num))
break;
if(m>count)
{
cout << "很抱歉,没有该学号的学生" << endl;
start_del='n';
getch();
}
else
{
temp=count; count=m; start_del='y';
cout << "该学生的资料为" < << "序号\t姓名\t学号\t\t地址\t\t\t高数\t英语\t计算机" << endl;
show();
count=temp; getch();
}
}
void student::del(char *num)
{
char chose;
find(num);
if(start_del=='y')
{

cout << "确实要删除该学生资料? Y/N" << endl;
cin >> chose;
if(chose=='y')
{
int m=0;
while(m if(strcmp(num,data[m++].num)==0) //错在这里
break;
temp=count; count=m;
if(temp==count)
{
count=temp-1;printf("2");
cout << "该学生资料已删除" << endl;
Exchang=1; //设置已修改数据标志
}
else
{
while(count {
strcpy(data[count-1].name,data[count].name); strcpy(data[count-1].num,data[count].num);
strcpy(data[count-1].adress,data[count].adress); data[count-1].x=data[count].x;
data[count-1].y=data[count].y; data[count-1].z=data[count].z;
count++;

}printf("1");
count=temp-1;
cout << "该学生资料已删除" << endl;
Exchang=1; //设置已修改数据标志
}
}
else
cout << "学生资料未删除" << endl;
getch();

}
}
void student::taxis()
{
int x,y,array[max];
int change;
for(x=0;x array[x]=data[x].score=data[x].x+data[x].y+data[x].z;
for(x=0;x for(y=0;y if(array[y] {
change=array[y];
array[y]=array[y+1];
array[y+1]=change;
}
cout << "总分\t姓名\t学号\t\t地址\t\t高数\t英语\t计算机" << endl;
for(x=0;x for(y=0;y if(array[x]==data[y].score)
{
cout << data[y].score << "\t" << data[y].name << "\t"
<< data[y].num << "\t" << data[y].adress << "\t"
<< data[y].x << "\t" << data[y].y << "\t"
<< data[y].z << endl;
}
getch();
Exchang=1; //设置已修改数据标志
}

void student::show()
{
cout << count << "\t" << data[count-1].name << "\t"
<< data[count-1].num << "\t" << data[count-1].adress << "\t\t"
<< data[count-1].x << "\t" << data[count-1].y << "\t"
<< data[count-1].z << endl;
}

////////////////////////////////////////////////////////////////////
//main.cpp
void main()
{
student st;
char *ch1,*ch2,chose;
char flag[2],num[20],find[20],del[20];
char ch;
system("color 70"); //设置背景和字体的颜色
float x,y,z;
time_t t;
time(&t);
st.read();//程序启动时即读入数据。
while(1)
{
system("cls");
cout << "------------------------学生管理系统------------------------" < << " 当前系统时间是: " << ctime(&t) << endl
<< " 1.输入/添加学生资料 "< << " 2.输出学生资料" < << " 3.查找 " < << " 4.删除" < << " 5.总分排序" < << " 6.保存"<< endl
<< " 7.退出" << endl << endl
<< " 请选择你要的服务(1-7)" << endl;
cin >> chose;
if(chose=='7')
{
if(1==Exchang)
{
printf("数据已修改,是否保存? y or n>");
fflush(stdin); //清空缓冲区
scanf("%c",&ch);
if(ch=='y')
{
st.save();
printf("数据已保存\n");
}
printf("\n");
}
break;
}
switch(chose)
{
case '1': // 输入学生信息
{
do
{
cout << "请输入学生姓名:" << endl;
ch1=new char[]; ch2=new char[];
cin >> ch1 ;
cout << "请输入学号:" << endl;
cin >> num ;
while(st.check_num(num))
{
cout << "学号重复,请重新输入" << endl;
cin >> num;
}
cout << "请输入地址:"< cin >> ch2 ;
cout << "请输入高数成绩:"< cin >> x;
cout << "请输入英语成绩:" < cin >> y;
cout << "请输入计算机成绩:" < cin >> z;
st.input(ch1,num,ch2,x,y,z);
printf("\n是否继续输入学生信息?(\"y\"继续)");
scanf("%s", flag);
}while(strcmp(flag, "y") == 0);
}break;
case '2':// 输出学生资料
{
temp=count; count=1;
cout << "序号\t姓名\t学号\t\t地址\t\t\t高数\t英语\t计算机" << endl;
while(count<=temp)
{
st.show(); count++;
}
count--; getch();
}break;
case '3':
{
cout << "请输入你要查找学生的学号" << endl;
cin >> find;
st.find(find);
}break;
case '4':
{
cout << "请输入你要删除的学生学号" << endl;
cin >> del;
st.del(del);
}break;
case '5':
{
st.taxis();
}break;
case '6':
st.save();
break;
default:
{
cout << "输入错误!!!,请重新输入" << endl;
getch();
}
}
}
cout << "感谢你的使用!\n" < getch();

}

void student::save()
{
FILE *fp; //定义文件指针,用来打开文件
int i;

if(count<=0)
{
printf("没有可保存的数据\n");
return ;
}
else
{
fp=fopen("student","wb+"); //保存文件在当前目录,名为student
if(fp==NULL)
{
printf("创建文件失败!\n");
system("pause");
return;
}
for(i=0;i {
fwrite(&data[i],sizeof(struct stu),1,fp);//将一个学生信息写入文件
}

}
fclose(fp); //关闭文件
Exchang=0; //数据已保存,修改标志设为0
}
void student::read()
{
FILE *fp; //定义文件指针
struct stu temp;
count=0; //初始化学生信息个数为0
fp=fopen("student","rb"); //打开文件
if(fp==NULL) //打不开文件,直接返回
return;
while(fread(&temp,sizeof(struct stu),1,fp)==1) //读文件函数fread返回值为0结束
{
data[count]=temp; //把读到的数据 赋给数组
count++; //学生信息个数加1
}
fclose(fp);

}

回答2:

请C语言好人帮忙做一道题目(学生成绩管理程序基本要求:(1)设计一个功能菜单,将程序的各个功能显示出来,并有选择提示;(2)应包含学号、姓名和英语、高数、C语言、大学物理、体育等5门课程基本信息;(3)要求有错误提示功能。例如性别只能输入F,M,输入错误提示重新输入。(4)具有输入学生成绩的功能;(5)能够输出所有学生的全部成绩清单;(6)能够按学号或姓名查询某一个学生的成绩信息; (7)能够计算每个学生所有课程的总分和平均分;(8)能够按学号或姓名查询并修改某一个学生的成绩信息)小生谢了

回答3:

你是说dos的程序,还是vc的windows程序? 功能菜单是内容的?
============
楼下程序是自己写的吗?
佩服啊!