c语言问题求教,急! 下谢了
学生成绩系统要求 每个学生有数学,语文,英语三门成绩,可添加,删除学生信息 ,显示全部学生信息;并按总分排序 计算总分平均值 和按名字查询功能,用switch语句调用
这是我写的请问哪里有错请高手指教 ,十分感谢,最好有完整代码说明让我更加好理解,谢谢了
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
void zfpx() //总分排序函数
void average() //求平均分函数
void sum()
void save_message() //总分函数
void delete_message() //删除信息函数
void display_message() //显示全部学生函数
void tianjia_message() //添加学生信息函数
void search_name() //查找学生信息函数
struct student * head = NULL, * p1, * p2;
struct student
{
char name[20];
int number[20];
char sex[20];
float score[2];
struct student *next
};
typedef struct student stu;
stu *input_message()
{
stu *p1 ,*p2;
int i,n;
printf("输入学生个数\n");
scanf("%d",&n)
p1=head;
for(i=0;i<=n;i++)
{
p2=(stu*)malloc(sizeof(stu));
printf("输入姓名");
scanf("%s",&p2->name);
printf("输入性别");
scanf("%s",&p2->sex);
printf("输入学号");
scanf("%s",&p2->number);
printf("输入3门语文:数学:英语:分数(0-100):");
scanf("%d,%d,%d",&p2->score[0],&p2->score[1],&p2->score[2]);
p1->next=p2;//*尾插法不断建立链表*//
p1=p2;
}
p2->next=NULL; //*建表完成*//
return head;
}
void search_name()
{ stu *p2;
char s[20];
printf("输入要查询的姓名:\n");
scanf("%s",s);
p2=head;
while(strcmp(p2->name,s)&&p!=NULL)//*判断条件*//
p2=p2->next; //指向下一个*//
if(p2==NULL)
printf("\n没有找到该学生的名字 %s\n",s);
else
{
printf(" 学号 || 性别 // 3门分数\n ");
printf(" %s %s %d %d %d ",p2->number,p2->sex,p2->score[0],p2->score[1],p2->score[2]);
}
system("cls")
}
void save_message()
{FILE *fp;
stu *p2;
char filename[20]; //文件长度
printf("写入文件名:\n");
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL) //*测试能否打开*//
{
printf("不能打开文件\n");
exit(1);
}
printf("\n打开文件\n");
p2=head;
while(p2!=NULL)
{
fwrite(p2,sizeof(stu),1,fp); //*写入信息*//
p2=p2->next;
}
fclose(fp); //*关闭文件*//
printf("-----打开成功!-----\n");
}
void tianjia_message()
{
stu *p2;
char n[10];
printf("输入要添加学生的学号");
scanf("%s",n);
p2=head;
while(strcmp(p2->number,n)&&p2!=NULL)//*判断条件*//
p2=p2->next;//指向下一个*//
if(p==NULL)
printf("输入添加学生的名字");
scanf("%s",&p2->name);
printf("输入添加学生的性别");//修改信息*//
scanf("%s",&p2->sex);
printf("添加学生的分数")
scanf("%d,%d,%d",&p2->score[0],&p2->score[1],&p2->score[2]);
printf("添加成功");
system("cls");
}
void display_message()
{
stu *p2
p2=head->next;
while(1)
{
printf("姓名=%s,学号=%d,性别=%s,数学分数=%f,英语分数=%f 语文分数=%f\n",p2->name,p2->number,p2->sex,p2->score[0],p2->[1],p2->[2]);
p2=p2->next;
}
//*删除信息*//
void delete_message()
{
char n[10];
stu *p1,*p2;
p1=head;
if (head==NULL)
printf("\n列表为空!\n");
else
{
printf("输入要删除的学号");
scanf("%s",&n);
p1 = head;
while (strcmp(p1->number,n)!=0&&t==p1->next!=NULL)//*判断条件*//
{
p2=p1;
p1=p1->next;
}
if(strcmp(p1->number,n)==0 )
{
if(p1==head) {
head=head->next;
free(p1);
}
else
{
p2->next=p1->next;
free(p1);
}
}
else printf("\n没有找到信息!\n");
}
printf("删除成功\n");
}
system("cls");
}
void sum() //计算总分
{char n[10];
int score;
stu *p2;
p2=head;
printf("输入你要计算的学号");
scanf("%s",&n);
while(strcmp(p2->number,n)&&p2!=NULL)//*判断条件*//
p2=p1->next;//指向下一个*//
if(p2==NULL)
printf("没有发现信息");
else
{
score=(p2->score[0]+p2->score[1]+p2->score[2]);//计算总分*//
printf("总分为:%d",score);
}
void average() //计算平均分
{char n[10];
float score;
stu *p2;
p2=head;
printf("输入你要计算的学号");
scanf("%s",&n);
while(strcmp(p2->number,n)&&p2!=NULL)//*判断条件*//
p2=p2->next;//指向下一个*//
if(p2==NULL)
printf("没有发现信息");
else
{
score=(p2->score[0]+p2->score[1]+p2->score[2])/3;//计算平均分*//
printf("平均分为:%f",score);
system("cls")
}
void zfpx()
{
int i,j,min;
struct student n;
for(i=0;i=<n-1;i++)
min=i;
for(j=0;j<n;j++)
{
if(p1[i].score<p1[min].score
{
min=j;
}
}
tmp=p1[i];p1[i]=p1[min];p1[min]=tmp;
}
}
system("cls");
}
void main()
{
int n;
printf("请输入你的选择(1~8)\n");
scanf("%d",&n)
printf("\n================ 主菜单 =================\n");
printf(" 1 : 保存或打开文件 \n");
printf(" 2 : 新增一个学生 \n");
printf(" 3 : 删除一个学生 \n");
printf(" 4 : 显示所有学信息 \n");
printf(" 5 : 计算总分 \n");
printf(" 6 : 计算平均分 \n");
printf(" 7 : 按成绩排序 \n");
printf(" 8 : 查找信息 \n");
printf(" 9 : 退出 \n");
printf("===========================================\n");
system("cls")
return 0;
}
switch(1)
{
case 1: save_message();
break;
case 2; tianjia_message();
break;
case 3: delete_message();
break;
case 4: display_message();
break;
case 5: sum();
break;
case 6: average();
break;
case 7: zfpx();
case 8: search_name();
break;
case 9: free(p1),exit(0);
default:
break;
}
}学生成绩系统
要求 每个学生有数学,语文,英语三门成绩,可添加,删除学生信息 ,显示全部学生信息;并按总分排序 计算总分平均值 和按名字查询功能,用switch语句调用
这是我写的请问哪里有错请高手指教 ,十分感谢,最好有完整代码说明让我更加好理解,谢谢了
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
void zfpx() //总分排序函数
void average() //求平均分函数
void sum()
void save_message() //总分函数
void delete_message() //删除信息函数
void display_message() //显示全部学生函数
void tianjia_message() //添加学生信息函数
void search_name() //查找学生信息函数
struct student * head = NULL, * p1, * p2;
struct student
{
char name[20];
int number[20];
char sex[20];
float score[2];
struct student *next
};
typedef struct student stu;
stu *input_message()
{
stu *p1 ,*p2;
int i,n;
printf("输入学生个数\n");
scanf("%d",&n)
p1=head;
for(i=0;i<=n;i++)
{
p2=(stu*)malloc(sizeof(stu));
printf("输入姓名");
scanf("%s",&p2->name);
printf("输入性别");
scanf("%s",&p2->sex);
printf("输入学号");
scanf("%s",&p2->number);
printf("输入3门语文:数学:英语:分数(0-100):");
scanf("%d,%d,%d",&p2->score[0],&p2->score[1],&p2->score[2]);
p1->next=p2;//*尾插法不断建立链表*//
p1=p2;
}
p2->next=NULL; //*建表完成*//
return head;
}
void search_name()
{ stu *p2;
char s[20];
printf("输入要查询的姓名:\n");
scanf("%s",s);
p2=head;
while(strcmp(p2->name,s)&&p!=NULL)//*判断条件*//
p2=p2->next; //指向下一个*//
if(p2==NULL)
printf("\n没有找到该学生的名字 %s\n",s);
else
{
printf(" 学号 || 性别 // 3门分数\n ");
printf(" %s %s %d %d %d ",p2->number,p2->sex,p2->score[0],p2->score[1],p2->score[2]);
}
system("cls")
}
void save_message()
{FILE *fp;
stu *p2;
char filename[20]; //文件长度
printf("写入文件名:\n");
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL) //*测试能否打开*//
{
printf("不能打开文件\n");
exit(1);
}
printf("\n打开文件\n");
p2=head;
while(p2!=NULL)
{
fwrite(p2,sizeof(stu),1,fp); //*写入信息*//
p2=p2->next;
}
fclose(fp); //*关闭文件*//
printf("-----打开成功!-----\n");
}
void tianjia_message()
{
stu *p2;
char n[10];
printf("输入要添加学生的学号");
scanf("%s",n);
p2=head;
while(strcmp(p2->number,n)&&p2!=NULL)//*判断条件*//
p2=p2->next;//指向下一个*//
if(p==NULL)
printf("输入添加学生的名字");
scanf("%s",&p2->name);
printf("输入添加学生的性别");//修改信息*//
scanf("%s",&p2->sex);
printf("添加学生的分数")
scanf("%d,%d,%d",&p2->score[0],&p2->score[1],&p2->score[2]);
printf("添加成功");
system("cls");
}
void display_message()
{
stu *p2
p2=head->next;
while(1)
{
printf("姓名=%s,学号=%d,性别=%s,数学分数=%f,英语分数=%f 语文分数=%f\n",p2->name,p2->number,p2->sex,p2->score[0],p2->[1],p2->[2]);
p2=p2->next;
}
//*删除信息*//
void delete_message()
{
char n[10];
stu *p1,*p2;
p1=head;
if (head==NULL)
printf("\n列表为空!\n");
else
{
printf("输入要删除的学号");
scanf("%s",&n);
p1 = head;
while (strcmp(p1->number,n)!=0&&t==p1->next!=NULL)//*判断条件*//
{
p2=p1;
p1=p1->next;
}
if(strcmp(p1->number,n)==0 )
{
if(p1==head) {
head=head->next;
free(p1);
}
else
{
p2->next=p1->next;
free(p1);
}
}
else printf("\n没有找到信息!\n");
}
printf("删除成功\n");
}
system("cls");
}
void sum() //计算总分
{char n[10];
int score;
stu *p2;
p2=head;
printf("输入你要计算的学号");
scanf("%s",&n);
while(strcmp(p2->number,n)&&p2!=NULL)//*判断条件*//
p2=p1->next;//指向下一个*//
if(p2==NULL)
printf("没有发现信息");
else
{
score=(p2->score[0]+p2->score[1]+p2->score[2]);//计算总分*//
printf("总分为:%d",score);
}
void average() //计算平均分
{char n[10];
float score;
stu *p2;
p2=head;
printf("输入你要计算的学号");
scanf("%s",&n);
while(strcmp(p2->number,n)&&p2!=NULL)//*判断条件*//
p2=p2->next;//指向下一个*//
if(p2==NULL)
printf("没有发现信息");
else
{
score=(p2->score[0]+p2->score[1]+p2->score[2])/3;//计算平均分*//
printf("平均分为:%f",score);
system("cls")
}
void zfpx()
{
int i,j,min;
struct student n;
for(i=0;i=<n-1;i++)
min=i;
for(j=0;j<n;j++)
{
if(p1[i].score<p1[min].score
{
min=j;
}
}
tmp=p1[i];p1[i]=p1[min];p1[min]=tmp;
}
}
system("cls");
}
void main()
{
int n;
printf("请输入你的选择(1~8)\n");
scanf("%d",&n)
printf("\n================ 主菜单 =================\n");
printf(" 1 : 保存或打开文件 \n");
printf(" 2 : 新增一个学生 \n");
printf(" 3 : 删除一个学生 \n");
printf(" 4 : 显示所有学信息 \n");
printf(" 5 : 计算总分 \n");
printf(" 6 : 计算平均分 \n");
printf(" 7 : 按成绩排序 \n");
printf(" 8 : 查找信息 \n");
printf(" 9 : 退出 \n");
printf("===========================================\n");
system("cls")
return 0;
}
switch(1)
{
case 1: save_message();
break;
case 2; tianjia_message();
break;
case 3: delete_message();
break;
case 4: display_message();
break;
case 5: sum();
break;
case 6: average();
break;
case 7: zfpx();
case 8: search_name();
break;
case 9: free(p1),exit(0);
default:
break;
}
}
[ 本帖最后由 请问你好吗 于 2011-12-28 18:08 编辑 ]